From 5df985e5c1a84e622b86532b6eb4ac56256517a2 Mon Sep 17 00:00:00 2001 From: Mario Smit Date: Mon, 16 Nov 2020 16:26:03 +0100 Subject: [PATCH 1/6] Removed old IP and new sys and configuration --- .gitignore | 6 + Components/INTERNALRAM/InternalRam64K.qip | 3 +- Components/INTERNALRAM/InternalRam64K.vhd | 70 +- Components/TERMINAL/CGABoldRomReduced.qip | 3 +- Components/TERMINAL/CGABoldRomReduced.vhd | 62 +- Components/TERMINAL/DisplayRam1K.qip | 3 +- Components/TERMINAL/DisplayRam1K.vhd | 85 +- Components/TERMINAL/DisplayRam2K.qip | 3 +- Components/TERMINAL/DisplayRam2K.vhd | 85 +- MultiComp.qpf | 4 +- MultiComp.qsf | 312 +- MultiComp.sv | 179 +- ROMS/6502/M6502_BASIC_ROM.qip | 3 +- ROMS/6502/M6502_BASIC_ROM.vhd | 62 +- ROMS/6809/M6809_EXT_BASIC_ROM.qip | 3 +- ROMS/6809/M6809_EXT_BASIC_ROM.vhd | 62 +- ROMS/Z80/Z80_BASIC_ROM.qip | 3 +- ROMS/Z80/Z80_BASIC_ROM.vhd | 62 +- ROMS/Z80/Z80_CPM_BASIC_ROM.qip | 3 +- ROMS/Z80/Z80_CPM_BASIC_ROM.vhd | 62 +- build_id.v | 1 + c5_pin_model_dump.txt | 118 + pll.xml | 204 + releases/MultiComp_20180624.rbf | Bin 2885104 -> 0 bytes releases/MultiComp_20180629.rbf | Bin 3389564 -> 0 bytes rtl/pll.bsf | 82 + rtl/pll.cmp | 9 + rtl/pll.ppf | 13 + {sys => rtl}/pll.qip | 20 +- rtl/pll.sip | 6 + rtl/pll.spd | 6 + {sys => rtl}/pll.v | 10 +- {sys => rtl}/pll/pll_0002.qip | 0 {sys => rtl}/pll/pll_0002.v | 13 +- rtl/pll_sim.f | 1 + sys/alsa.sv | 157 + sys/arcade_video.v | 296 ++ sys/ascal.vhd | 2560 ++++++++++++ sys/audio_out.v | 296 ++ sys/build_id.tcl | 28 +- sys/ddr_svc.sv | 108 + sys/gamma_corr.sv | 122 + sys/hdmi_config.sv | 65 +- sys/hdmi_lite.sv | 395 -- sys/hps_io.v | 1203 +++--- sys/hq2x.sv | 421 +- sys/i2c.v | 65 +- sys/i2s.v | 128 +- sys/iir_filter.v | 213 + sys/ip/avalon_combiner.v | 60 - sys/ip/avalon_combiner_hw.tcl | 204 - sys/ip/de10_hps_hw.tcl | 3706 ----------------- sys/ip/in_split.v | 52 - sys/ip/in_split_hw.tcl | 104 - sys/ip/out_mix.v | 44 - sys/ip/out_mix_hw.tcl | 97 - sys/ip/reset_source.v | 50 - sys/ip/reset_source_hw.tcl | 152 - sys/lpf48k.sv | 100 - sys/ltc2308.sv | 162 + sys/mcp23009.sv | 113 + sys/osd.v | 245 +- sys/pattern_vg.v | 120 - sys/pll.13.qip | 17 + sys/pll_audio.13.qip | 17 + sys/pll_audio.qip | 337 ++ sys/pll_audio.v | 252 ++ sys/pll_audio/pll_audio_0002.qip | 4 + sys/pll_audio/pll_audio_0002.v | 87 + sys/pll_cfg.qip | 44 + sys/{pll_hdmi_cfg.v => pll_cfg.v} | 14 +- .../altera_pll_reconfig_core.v | 0 .../altera_pll_reconfig_top.v | 0 sys/pll_hdmi.13.qip | 17 + sys/pll_hdmi_adj.vhd | 433 ++ sys/pll_hdmi_cfg.qip | 44 - sys/pll_q13.qip | 6 + sys/pll_q17.qip | 4 + sys/scandoubler.v | 265 +- sys/scanlines.v | 67 + sys/sd_card.sv | 537 +++ sys/spdif.v | 126 - sys/sync_vg.v | 78 - sys/sys.qip | 52 +- sys/sys.tcl | 226 + sys/sys_analog.tcl | 71 + sys/sys_dual_sdram.tcl | 50 + sys/sys_top.sdc | 79 +- sys/sys_top.v | 1617 ++++--- sys/sysmem.sv | 268 +- sys/video_cleaner.sv | 12 +- sys/video_mixer.sv | 175 +- sys/vip.qsys | 1177 ------ sys/vip_config.sv | 159 - 94 files changed, 9904 insertions(+), 9155 deletions(-) create mode 100644 .gitignore create mode 100644 build_id.v create mode 100644 c5_pin_model_dump.txt create mode 100644 pll.xml delete mode 100644 releases/MultiComp_20180624.rbf delete mode 100644 releases/MultiComp_20180629.rbf create mode 100644 rtl/pll.bsf create mode 100644 rtl/pll.cmp create mode 100644 rtl/pll.ppf rename {sys => rtl}/pll.qip (96%) create mode 100644 rtl/pll.sip create mode 100644 rtl/pll.spd rename {sys => rtl}/pll.v (98%) rename {sys => rtl}/pll/pll_0002.qip (100%) rename {sys => rtl}/pll/pll_0002.v (89%) create mode 100644 rtl/pll_sim.f create mode 100644 sys/alsa.sv create mode 100644 sys/arcade_video.v create mode 100644 sys/ascal.vhd create mode 100644 sys/audio_out.v create mode 100644 sys/ddr_svc.sv create mode 100644 sys/gamma_corr.sv delete mode 100644 sys/hdmi_lite.sv create mode 100644 sys/iir_filter.v delete mode 100644 sys/ip/avalon_combiner.v delete mode 100644 sys/ip/avalon_combiner_hw.tcl delete mode 100644 sys/ip/de10_hps_hw.tcl delete mode 100644 sys/ip/in_split.v delete mode 100644 sys/ip/in_split_hw.tcl delete mode 100644 sys/ip/out_mix.v delete mode 100644 sys/ip/out_mix_hw.tcl delete mode 100644 sys/ip/reset_source.v delete mode 100644 sys/ip/reset_source_hw.tcl delete mode 100644 sys/lpf48k.sv create mode 100644 sys/ltc2308.sv create mode 100644 sys/mcp23009.sv delete mode 100644 sys/pattern_vg.v create mode 100644 sys/pll.13.qip create mode 100644 sys/pll_audio.13.qip create mode 100644 sys/pll_audio.qip create mode 100644 sys/pll_audio.v create mode 100644 sys/pll_audio/pll_audio_0002.qip create mode 100644 sys/pll_audio/pll_audio_0002.v create mode 100644 sys/pll_cfg.qip rename sys/{pll_hdmi_cfg.v => pll_cfg.v} (93%) rename sys/{pll_hdmi_cfg => pll_cfg}/altera_pll_reconfig_core.v (100%) rename sys/{pll_hdmi_cfg => pll_cfg}/altera_pll_reconfig_top.v (100%) create mode 100644 sys/pll_hdmi.13.qip create mode 100644 sys/pll_hdmi_adj.vhd delete mode 100644 sys/pll_hdmi_cfg.qip create mode 100644 sys/pll_q13.qip create mode 100644 sys/pll_q17.qip create mode 100644 sys/scanlines.v create mode 100644 sys/sd_card.sv delete mode 100644 sys/sync_vg.v create mode 100644 sys/sys.tcl create mode 100644 sys/sys_analog.tcl create mode 100644 sys/sys_dual_sdram.tcl delete mode 100644 sys/vip.qsys delete mode 100644 sys/vip_config.sv diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c923bc4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +db/* +incremental_db/* +output_files/* +.DS_Store +**/pll_sim/* +**/*.bak \ No newline at end of file diff --git a/Components/INTERNALRAM/InternalRam64K.qip b/Components/INTERNALRAM/InternalRam64K.qip index 6e56a1d..1c306ba 100644 --- a/Components/INTERNALRAM/InternalRam64K.qip +++ b/Components/INTERNALRAM/InternalRam64K.qip @@ -1,4 +1,5 @@ set_global_assignment -name IP_TOOL_NAME "RAM: 1-PORT" -set_global_assignment -name IP_TOOL_VERSION "13.0" +set_global_assignment -name IP_TOOL_VERSION "17.0" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "InternalRam64K.vhd"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "InternalRam64K.cmp"] diff --git a/Components/INTERNALRAM/InternalRam64K.vhd b/Components/INTERNALRAM/InternalRam64K.vhd index 1715d09..4ca79ad 100644 --- a/Components/INTERNALRAM/InternalRam64K.vhd +++ b/Components/INTERNALRAM/InternalRam64K.vhd @@ -4,7 +4,7 @@ -- MODULE: altsyncram -- ============================================================ --- File Name: InternalRam4K.vhd +-- File Name: InternalRam64K.vhd -- Megafunction Name(s): -- altsyncram -- @@ -14,32 +14,33 @@ -- ************************************************************ -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! -- --- 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition +-- 17.0.0 Build 595 04/25/2017 SJ Lite Edition -- ************************************************************ ---Copyright (C) 1991-2013 Altera Corporation ---Your use of Altera Corporation's design tools, logic functions +--Copyright (C) 2017 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject ---to the terms and conditions of the Altera Program License ---Subscription Agreement, Altera MegaCore Function License ---Agreement, or other applicable license agreement, including, ---without limitation, that your use is for the sole purpose of ---programming logic devices manufactured by Altera and sold by ---Altera or its authorized distributors. Please refer to the ---applicable agreement for further details. +--to the terms and conditions of the Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel MegaCore Function License Agreement, or other +--applicable license agreement, including, without limitation, +--that your use is for the sole purpose of programming logic +--devices manufactured by Intel and sold by Intel or its +--authorized distributors. Please refer to the applicable +--agreement for further details. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; -USE altera_mf.all; +USE altera_mf.altera_mf_components.all; -ENTITY internalram64k IS +ENTITY InternalRam64K IS PORT ( address : IN STD_LOGIC_VECTOR (15 DOWNTO 0); @@ -55,33 +56,6 @@ ARCHITECTURE SYN OF internalram64k IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); - - - COMPONENT altsyncram - GENERIC ( - clock_enable_input_a : STRING; - clock_enable_output_a : STRING; - intended_device_family : STRING; - lpm_hint : STRING; - lpm_type : STRING; - numwords_a : NATURAL; - operation_mode : STRING; - outdata_aclr_a : STRING; - outdata_reg_a : STRING; - power_up_uninitialized : STRING; - widthad_a : NATURAL; - width_a : NATURAL; - width_byteena_a : NATURAL - ); - PORT ( - address_a : IN STD_LOGIC_VECTOR (15 DOWNTO 0); - clock0 : IN STD_LOGIC ; - data_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); - wren_a : IN STD_LOGIC ; - q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) - ); - END COMPONENT; - BEGIN q <= sub_wire0(7 DOWNTO 0); @@ -89,7 +63,7 @@ BEGIN GENERIC MAP ( clock_enable_input_a => "BYPASS", clock_enable_output_a => "BYPASS", - intended_device_family => "Cyclone", + intended_device_family => "Cyclone V", lpm_hint => "ENABLE_RUNTIME_MOD=NO", lpm_type => "altsyncram", numwords_a => 65536, @@ -97,6 +71,7 @@ BEGIN outdata_aclr_a => "NONE", outdata_reg_a => "UNREGISTERED", power_up_uninitialized => "FALSE", + read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ", widthad_a => 16, width_a => 8, width_byteena_a => 1 @@ -131,7 +106,7 @@ END SYN; -- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" -- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" -- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" --- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" -- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" -- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" @@ -146,13 +121,13 @@ END SYN; -- Retrieval info: PRIVATE: SingleClock NUMERIC "1" -- Retrieval info: PRIVATE: UseDQRAM NUMERIC "1" -- Retrieval info: PRIVATE: WRCONTROL_ACLR_A NUMERIC "0" --- Retrieval info: PRIVATE: WidthAddr NUMERIC "15" +-- Retrieval info: PRIVATE: WidthAddr NUMERIC "16" -- Retrieval info: PRIVATE: WidthData NUMERIC "8" -- Retrieval info: PRIVATE: rden NUMERIC "0" -- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all -- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" -- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" --- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" -- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" -- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "65536" @@ -160,15 +135,16 @@ END SYN; -- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE" -- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "UNREGISTERED" -- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE" --- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "15" +-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "NEW_DATA_NO_NBE_READ" +-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "16" -- Retrieval info: CONSTANT: WIDTH_A NUMERIC "8" -- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1" --- Retrieval info: USED_PORT: address 0 0 12 0 INPUT NODEFVAL "address[11..0]" +-- Retrieval info: USED_PORT: address 0 0 16 0 INPUT NODEFVAL "address[15..0]" -- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock" -- Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL "data[7..0]" -- Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL "q[7..0]" -- Retrieval info: USED_PORT: wren 0 0 0 0 INPUT NODEFVAL "wren" --- Retrieval info: CONNECT: @address_a 0 0 12 0 address 0 0 12 0 +-- Retrieval info: CONNECT: @address_a 0 0 16 0 address 0 0 16 0 -- Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0 -- Retrieval info: CONNECT: @data_a 0 0 8 0 data 0 0 8 0 -- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0 diff --git a/Components/TERMINAL/CGABoldRomReduced.qip b/Components/TERMINAL/CGABoldRomReduced.qip index 2f5c51e..57a68b0 100644 --- a/Components/TERMINAL/CGABoldRomReduced.qip +++ b/Components/TERMINAL/CGABoldRomReduced.qip @@ -1,4 +1,5 @@ set_global_assignment -name IP_TOOL_NAME "ROM: 1-PORT" -set_global_assignment -name IP_TOOL_VERSION "13.0" +set_global_assignment -name IP_TOOL_VERSION "17.0" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "CGABoldRomReduced.vhd"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "CGABoldRomReduced.cmp"] diff --git a/Components/TERMINAL/CGABoldRomReduced.vhd b/Components/TERMINAL/CGABoldRomReduced.vhd index a2dd60e..1119ed6 100644 --- a/Components/TERMINAL/CGABoldRomReduced.vhd +++ b/Components/TERMINAL/CGABoldRomReduced.vhd @@ -14,30 +14,31 @@ -- ************************************************************ -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! -- --- 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition +-- 17.0.0 Build 595 04/25/2017 SJ Lite Edition -- ************************************************************ ---Copyright (C) 1991-2013 Altera Corporation ---Your use of Altera Corporation's design tools, logic functions +--Copyright (C) 2017 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject ---to the terms and conditions of the Altera Program License ---Subscription Agreement, Altera MegaCore Function License ---Agreement, or other applicable license agreement, including, ---without limitation, that your use is for the sole purpose of ---programming logic devices manufactured by Altera and sold by ---Altera or its authorized distributors. Please refer to the ---applicable agreement for further details. +--to the terms and conditions of the Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel MegaCore Function License Agreement, or other +--applicable license agreement, including, without limitation, +--that your use is for the sole purpose of programming logic +--devices manufactured by Intel and sold by Intel or its +--authorized distributors. Please refer to the applicable +--agreement for further details. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; -USE altera_mf.all; +USE altera_mf.altera_mf_components.all; ENTITY CGABoldRomReduced IS PORT @@ -53,40 +54,16 @@ ARCHITECTURE SYN OF cgaboldromreduced IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); - - - COMPONENT altsyncram - GENERIC ( - clock_enable_input_a : STRING; - clock_enable_output_a : STRING; - init_file : STRING; - intended_device_family : STRING; - lpm_hint : STRING; - lpm_type : STRING; - numwords_a : NATURAL; - operation_mode : STRING; - outdata_aclr_a : STRING; - outdata_reg_a : STRING; - widthad_a : NATURAL; - width_a : NATURAL; - width_byteena_a : NATURAL - ); - PORT ( - address_a : IN STD_LOGIC_VECTOR (9 DOWNTO 0); - clock0 : IN STD_LOGIC ; - q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) - ); - END COMPONENT; - BEGIN q <= sub_wire0(7 DOWNTO 0); altsyncram_component : altsyncram GENERIC MAP ( + address_aclr_a => "NONE", clock_enable_input_a => "BYPASS", clock_enable_output_a => "BYPASS", - init_file => "../Components/TERMINAL/CGAFontBoldReduced.HEX", - intended_device_family => "Cyclone II", + init_file => "./Components/TERMINAL/CGAFontBoldReduced.HEX", + intended_device_family => "Cyclone V", lpm_hint => "ENABLE_RUNTIME_MOD=NO", lpm_type => "altsyncram", numwords_a => 1024, @@ -123,11 +100,11 @@ END SYN; -- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" -- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" -- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" --- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" -- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" -- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" --- Retrieval info: PRIVATE: MIFfilename STRING "../Components/TERMINAL/CGAFontBoldReduced.HEX" +-- Retrieval info: PRIVATE: MIFfilename STRING "./Components/TERMINAL/CGAFontBoldReduced.HEX" -- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "1024" -- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" -- Retrieval info: PRIVATE: RegAddr NUMERIC "1" @@ -139,10 +116,11 @@ END SYN; -- Retrieval info: PRIVATE: WidthData NUMERIC "8" -- Retrieval info: PRIVATE: rden NUMERIC "0" -- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING "NONE" -- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" -- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" --- Retrieval info: CONSTANT: INIT_FILE STRING "../Components/TERMINAL/CGAFontBoldReduced.HEX" --- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: CONSTANT: INIT_FILE STRING "./Components/TERMINAL/CGAFontBoldReduced.HEX" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" -- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" -- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "1024" diff --git a/Components/TERMINAL/DisplayRam1K.qip b/Components/TERMINAL/DisplayRam1K.qip index e2dd5ae..ef1f6e6 100644 --- a/Components/TERMINAL/DisplayRam1K.qip +++ b/Components/TERMINAL/DisplayRam1K.qip @@ -1,4 +1,5 @@ set_global_assignment -name IP_TOOL_NAME "RAM: 2-PORT" -set_global_assignment -name IP_TOOL_VERSION "13.0" +set_global_assignment -name IP_TOOL_VERSION "17.0" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "DisplayRam1K.vhd"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "DisplayRam1K.cmp"] diff --git a/Components/TERMINAL/DisplayRam1K.vhd b/Components/TERMINAL/DisplayRam1K.vhd index 8d3f4c7..28bb973 100644 --- a/Components/TERMINAL/DisplayRam1K.vhd +++ b/Components/TERMINAL/DisplayRam1K.vhd @@ -14,30 +14,31 @@ -- ************************************************************ -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! -- --- 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition +-- 17.0.0 Build 595 04/25/2017 SJ Lite Edition -- ************************************************************ ---Copyright (C) 1991-2013 Altera Corporation ---Your use of Altera Corporation's design tools, logic functions +--Copyright (C) 2017 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject ---to the terms and conditions of the Altera Program License ---Subscription Agreement, Altera MegaCore Function License ---Agreement, or other applicable license agreement, including, ---without limitation, that your use is for the sole purpose of ---programming logic devices manufactured by Altera and sold by ---Altera or its authorized distributors. Please refer to the ---applicable agreement for further details. +--to the terms and conditions of the Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel MegaCore Function License Agreement, or other +--applicable license agreement, including, without limitation, +--that your use is for the sole purpose of programming logic +--devices manufactured by Intel and sold by Intel or its +--authorized distributors. Please refer to the applicable +--agreement for further details. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; -USE altera_mf.all; +USE altera_mf.altera_mf_components.all; ENTITY DisplayRam1K IS PORT @@ -60,48 +61,6 @@ ARCHITECTURE SYN OF displayram1k IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL sub_wire1 : STD_LOGIC_VECTOR (7 DOWNTO 0); - - - COMPONENT altsyncram - GENERIC ( - address_reg_b : STRING; - clock_enable_input_a : STRING; - clock_enable_input_b : STRING; - clock_enable_output_a : STRING; - clock_enable_output_b : STRING; - indata_reg_b : STRING; - intended_device_family : STRING; - lpm_type : STRING; - numwords_a : NATURAL; - numwords_b : NATURAL; - operation_mode : STRING; - outdata_aclr_a : STRING; - outdata_aclr_b : STRING; - outdata_reg_a : STRING; - outdata_reg_b : STRING; - power_up_uninitialized : STRING; - read_during_write_mode_mixed_ports : STRING; - widthad_a : NATURAL; - widthad_b : NATURAL; - width_a : NATURAL; - width_b : NATURAL; - width_byteena_a : NATURAL; - width_byteena_b : NATURAL; - wrcontrol_wraddress_reg_b : STRING - ); - PORT ( - clock0 : IN STD_LOGIC ; - wren_a : IN STD_LOGIC ; - address_b : IN STD_LOGIC_VECTOR (9 DOWNTO 0); - data_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); - q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); - wren_b : IN STD_LOGIC ; - address_a : IN STD_LOGIC_VECTOR (9 DOWNTO 0); - data_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); - q_b : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) - ); - END COMPONENT; - BEGIN q_a <= sub_wire0(7 DOWNTO 0); q_b <= sub_wire1(7 DOWNTO 0); @@ -114,7 +73,7 @@ BEGIN clock_enable_output_a => "BYPASS", clock_enable_output_b => "BYPASS", indata_reg_b => "CLOCK0", - intended_device_family => "Cyclone", + intended_device_family => "Cyclone V", lpm_type => "altsyncram", numwords_a => 1024, numwords_b => 1024, @@ -125,6 +84,8 @@ BEGIN outdata_reg_b => "UNREGISTERED", power_up_uninitialized => "FALSE", read_during_write_mode_mixed_ports => "DONT_CARE", + read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ", + read_during_write_mode_port_b => "NEW_DATA_NO_NBE_READ", widthad_a => 10, widthad_b => 10, width_a => 8, @@ -134,13 +95,13 @@ BEGIN wrcontrol_wraddress_reg_b => "CLOCK0" ) PORT MAP ( - clock0 => clock, - wren_a => wren_a, - address_b => address_b, - data_b => data_b, - wren_b => wren_b, address_a => address_a, + address_b => address_b, + clock0 => clock, data_a => data_a, + data_b => data_b, + wren_a => wren_a, + wren_b => wren_b, q_a => sub_wire0, q_b => sub_wire1 ); @@ -178,7 +139,7 @@ END SYN; -- Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "1" -- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" -- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" --- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" -- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" -- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" @@ -218,7 +179,7 @@ END SYN; -- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" -- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS" -- Retrieval info: CONSTANT: INDATA_REG_B STRING "CLOCK0" --- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" -- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "1024" -- Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "1024" @@ -229,6 +190,8 @@ END SYN; -- Retrieval info: CONSTANT: OUTDATA_REG_B STRING "UNREGISTERED" -- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE" -- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_MIXED_PORTS STRING "DONT_CARE" +-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "NEW_DATA_NO_NBE_READ" +-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_B STRING "NEW_DATA_NO_NBE_READ" -- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "10" -- Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "10" -- Retrieval info: CONSTANT: WIDTH_A NUMERIC "8" diff --git a/Components/TERMINAL/DisplayRam2K.qip b/Components/TERMINAL/DisplayRam2K.qip index 494d07b..e276da5 100644 --- a/Components/TERMINAL/DisplayRam2K.qip +++ b/Components/TERMINAL/DisplayRam2K.qip @@ -1,4 +1,5 @@ set_global_assignment -name IP_TOOL_NAME "RAM: 2-PORT" -set_global_assignment -name IP_TOOL_VERSION "13.0" +set_global_assignment -name IP_TOOL_VERSION "17.0" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "DisplayRam2K.vhd"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "DisplayRam2K.cmp"] diff --git a/Components/TERMINAL/DisplayRam2K.vhd b/Components/TERMINAL/DisplayRam2K.vhd index 2cb1c76..df53e73 100644 --- a/Components/TERMINAL/DisplayRam2K.vhd +++ b/Components/TERMINAL/DisplayRam2K.vhd @@ -14,30 +14,31 @@ -- ************************************************************ -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! -- --- 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition +-- 17.0.0 Build 595 04/25/2017 SJ Lite Edition -- ************************************************************ ---Copyright (C) 1991-2013 Altera Corporation ---Your use of Altera Corporation's design tools, logic functions +--Copyright (C) 2017 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject ---to the terms and conditions of the Altera Program License ---Subscription Agreement, Altera MegaCore Function License ---Agreement, or other applicable license agreement, including, ---without limitation, that your use is for the sole purpose of ---programming logic devices manufactured by Altera and sold by ---Altera or its authorized distributors. Please refer to the ---applicable agreement for further details. +--to the terms and conditions of the Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel MegaCore Function License Agreement, or other +--applicable license agreement, including, without limitation, +--that your use is for the sole purpose of programming logic +--devices manufactured by Intel and sold by Intel or its +--authorized distributors. Please refer to the applicable +--agreement for further details. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; -USE altera_mf.all; +USE altera_mf.altera_mf_components.all; ENTITY DisplayRam2K IS PORT @@ -60,48 +61,6 @@ ARCHITECTURE SYN OF displayram2k IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL sub_wire1 : STD_LOGIC_VECTOR (7 DOWNTO 0); - - - COMPONENT altsyncram - GENERIC ( - address_reg_b : STRING; - clock_enable_input_a : STRING; - clock_enable_input_b : STRING; - clock_enable_output_a : STRING; - clock_enable_output_b : STRING; - indata_reg_b : STRING; - intended_device_family : STRING; - lpm_type : STRING; - numwords_a : NATURAL; - numwords_b : NATURAL; - operation_mode : STRING; - outdata_aclr_a : STRING; - outdata_aclr_b : STRING; - outdata_reg_a : STRING; - outdata_reg_b : STRING; - power_up_uninitialized : STRING; - read_during_write_mode_mixed_ports : STRING; - widthad_a : NATURAL; - widthad_b : NATURAL; - width_a : NATURAL; - width_b : NATURAL; - width_byteena_a : NATURAL; - width_byteena_b : NATURAL; - wrcontrol_wraddress_reg_b : STRING - ); - PORT ( - clock0 : IN STD_LOGIC ; - wren_a : IN STD_LOGIC ; - address_b : IN STD_LOGIC_VECTOR (10 DOWNTO 0); - data_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); - q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); - wren_b : IN STD_LOGIC ; - address_a : IN STD_LOGIC_VECTOR (10 DOWNTO 0); - data_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); - q_b : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) - ); - END COMPONENT; - BEGIN q_a <= sub_wire0(7 DOWNTO 0); q_b <= sub_wire1(7 DOWNTO 0); @@ -114,7 +73,7 @@ BEGIN clock_enable_output_a => "BYPASS", clock_enable_output_b => "BYPASS", indata_reg_b => "CLOCK0", - intended_device_family => "Cyclone", + intended_device_family => "Cyclone V", lpm_type => "altsyncram", numwords_a => 2048, numwords_b => 2048, @@ -125,6 +84,8 @@ BEGIN outdata_reg_b => "UNREGISTERED", power_up_uninitialized => "FALSE", read_during_write_mode_mixed_ports => "DONT_CARE", + read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ", + read_during_write_mode_port_b => "NEW_DATA_NO_NBE_READ", widthad_a => 11, widthad_b => 11, width_a => 8, @@ -134,13 +95,13 @@ BEGIN wrcontrol_wraddress_reg_b => "CLOCK0" ) PORT MAP ( - clock0 => clock, - wren_a => wren_a, - address_b => address_b, - data_b => data_b, - wren_b => wren_b, address_a => address_a, + address_b => address_b, + clock0 => clock, data_a => data_a, + data_b => data_b, + wren_a => wren_a, + wren_b => wren_b, q_a => sub_wire0, q_b => sub_wire1 ); @@ -178,7 +139,7 @@ END SYN; -- Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "1" -- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" -- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" --- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" -- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" -- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" @@ -218,7 +179,7 @@ END SYN; -- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" -- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS" -- Retrieval info: CONSTANT: INDATA_REG_B STRING "CLOCK0" --- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" -- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "2048" -- Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "2048" @@ -229,6 +190,8 @@ END SYN; -- Retrieval info: CONSTANT: OUTDATA_REG_B STRING "UNREGISTERED" -- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE" -- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_MIXED_PORTS STRING "DONT_CARE" +-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "NEW_DATA_NO_NBE_READ" +-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_B STRING "NEW_DATA_NO_NBE_READ" -- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "11" -- Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "11" -- Retrieval info: CONSTANT: WIDTH_A NUMERIC "8" diff --git a/MultiComp.qpf b/MultiComp.qpf index 494a664..cb18d1d 100644 --- a/MultiComp.qpf +++ b/MultiComp.qpf @@ -19,12 +19,12 @@ # # Quartus Prime # Version 17.0.0 Build 595 04/25/2017 SJ Lite Edition -# Date created = 09:46:14 June 22, 2018 +# Date created = 16:36:47 November 15, 2020 # # -------------------------------------------------------------------------- # QUARTUS_VERSION = "17.0" -DATE = "09:46:14 June 22, 2018" +DATE = "16:36:47 November 15, 2020" # Revisions diff --git a/MultiComp.qsf b/MultiComp.qsf index 18f6ba9..eea8a64 100644 --- a/MultiComp.qsf +++ b/MultiComp.qsf @@ -23,24 +23,18 @@ # # -------------------------------------------------------------------------- # -set_global_assignment -name FAMILY "Cyclone V" -set_global_assignment -name DEVICE 5CSEBA6U23I7 set_global_assignment -name TOP_LEVEL_ENTITY sys_top -set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.1.2 +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top +set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top + set_global_assignment -name LAST_QUARTUS_VERSION "17.0.0 Lite Edition" -set_global_assignment -name PROJECT_CREATION_TIME_DATE "01:53:30 APRIL 20, 2017" -set_global_assignment -name DEVICE_FILTER_PACKAGE UFBGA -set_global_assignment -name DEVICE_FILTER_PIN_COUNT 672 -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 7 set_global_assignment -name GENERATE_RBF_FILE ON set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL set_global_assignment -name SAVE_DISK_SPACE OFF set_global_assignment -name SMART_RECOMPILE ON -set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top -set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top -set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40" set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100 set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" @@ -50,11 +44,40 @@ set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING OFF set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION ALWAYS set_global_assignment -name FITTER_EFFORT "STANDARD FIT" set_global_assignment -name OPTIMIZATION_MODE "HIGH PERFORMANCE EFFORT" +set_global_assignment -name ALLOW_POWER_UP_DONT_CARE ON +set_global_assignment -name QII_AUTO_PACKED_REGISTERS NORMAL +set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION ON +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC ON +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION ON +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING ON +set_global_assignment -name OPTIMIZATION_TECHNIQUE SPEED +set_global_assignment -name MUX_RESTRUCTURE ON +set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS ON +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA ON +set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP ON +set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION ON +set_global_assignment -name PRE_MAPPING_RESYNTHESIS ON +set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS ON +set_global_assignment -name ECO_OPTIMIZE_TIMING ON +set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION ON +set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING ON +set_global_assignment -name ALM_REGISTER_PACKING_EFFORT MEDIUM set_global_assignment -name SEED 1 -#============================================================ -# ADC -#============================================================ +#set_global_assignment -name VERILOG_MACRO "ARCADE_SYS=1" +#set_global_assignment -name VERILOG_MACRO "USE_FB=1" +#set_global_assignment -name VERILOG_MACRO "USE_SDRAM=1" +#set_global_assignment -name VERILOG_MACRO "USE_DDRAM=1" + +#do not enable DEBUG_NOHDMI in release! +#set_global_assignment -name VERILOG_MACRO "DEBUG_NOHDMI=1" + +source sys/sys.tcl +set_global_assignment -name FAMILY "Cyclone V" +set_global_assignment -name DEVICE 5CSEBA6U23I7 +set_global_assignment -name DEVICE_FILTER_PACKAGE UFBGA +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 672 +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 7 set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_CONVST set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SCK set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SDI @@ -63,100 +86,28 @@ set_location_assignment PIN_U9 -to ADC_CONVST set_location_assignment PIN_V10 -to ADC_SCK set_location_assignment PIN_AC4 -to ADC_SDI set_location_assignment PIN_AD4 -to ADC_SDO - -#============================================================ -# ARDUINO -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[3] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[4] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[5] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[6] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[7] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[8] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[9] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[10] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[11] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[12] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[13] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[14] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[15] -set_location_assignment PIN_AG9 -to ARDUINO_IO[3] -set_location_assignment PIN_U14 -to ARDUINO_IO[4] -set_location_assignment PIN_U13 -to ARDUINO_IO[5] -set_location_assignment PIN_AG8 -to ARDUINO_IO[6] -set_location_assignment PIN_AH8 -to ARDUINO_IO[7] -set_location_assignment PIN_AF17 -to ARDUINO_IO[8] -set_location_assignment PIN_AE15 -to ARDUINO_IO[9] -set_location_assignment PIN_AF15 -to ARDUINO_IO[10] -set_location_assignment PIN_AG16 -to ARDUINO_IO[11] -set_location_assignment PIN_AH11 -to ARDUINO_IO[12] -set_location_assignment PIN_AH12 -to ARDUINO_IO[13] -set_location_assignment PIN_AH9 -to ARDUINO_IO[14] -set_location_assignment PIN_AG11 -to ARDUINO_IO[15] - -#============================================================ -# SDIO -#============================================================ -set_location_assignment PIN_AF25 -to SDIO_DAT[0] -set_location_assignment PIN_AF23 -to SDIO_DAT[1] -set_location_assignment PIN_AD26 -to SDIO_DAT[2] -set_location_assignment PIN_AF28 -to SDIO_DAT[3] -set_location_assignment PIN_AF27 -to SDIO_CMD -set_location_assignment PIN_AH26 -to SDIO_CLK -set_location_assignment PIN_AH7 -to SDIO_CD - -set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDIO_* - -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDIO_* -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_DAT[*] -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_CMD -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_CD - -#============================================================ -# VGA -#============================================================ -set_location_assignment PIN_AE17 -to VGA_R[0] -set_location_assignment PIN_AE20 -to VGA_R[1] -set_location_assignment PIN_AF20 -to VGA_R[2] -set_location_assignment PIN_AH18 -to VGA_R[3] -set_location_assignment PIN_AH19 -to VGA_R[4] -set_location_assignment PIN_AF21 -to VGA_R[5] - -set_location_assignment PIN_AE19 -to VGA_G[0] -set_location_assignment PIN_AG15 -to VGA_G[1] -set_location_assignment PIN_AF18 -to VGA_G[2] -set_location_assignment PIN_AG18 -to VGA_G[3] -set_location_assignment PIN_AG19 -to VGA_G[4] -set_location_assignment PIN_AG20 -to VGA_G[5] - -set_location_assignment PIN_AG21 -to VGA_B[0] -set_location_assignment PIN_AA20 -to VGA_B[1] -set_location_assignment PIN_AE22 -to VGA_B[2] -set_location_assignment PIN_AF22 -to VGA_B[3] -set_location_assignment PIN_AH23 -to VGA_B[4] -set_location_assignment PIN_AH21 -to VGA_B[5] - -set_location_assignment PIN_AH22 -to VGA_HS -set_location_assignment PIN_AG24 -to VGA_VS - -set_location_assignment PIN_AH27 -to VGA_EN -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to VGA_EN - -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_* -set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_* - -#============================================================ -# AUDIO -#============================================================ -set_location_assignment PIN_AC24 -to AUDIO_L -set_location_assignment PIN_AE25 -to AUDIO_R -set_location_assignment PIN_AG26 -to AUDIO_SPDIF -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUDIO_* -set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to AUDIO_* - -#============================================================ -# SDRAM -#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[*] +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to ARDUINO_IO[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to ARDUINO_IO[*] +set_location_assignment PIN_U14 -to IO_SCL +set_location_assignment PIN_AG9 -to IO_SDA +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to IO_S* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_S* +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to IO_S* +set_location_assignment PIN_AF17 -to USER_IO[6] +set_location_assignment PIN_AF15 -to USER_IO[5] +set_location_assignment PIN_AG16 -to USER_IO[4] +set_location_assignment PIN_AH11 -to USER_IO[3] +set_location_assignment PIN_AH12 -to USER_IO[2] +set_location_assignment PIN_AH9 -to USER_IO[1] +set_location_assignment PIN_AG11 -to USER_IO[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USER_IO[*] +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to USER_IO[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to USER_IO[*] +set_location_assignment PIN_AH7 -to SDCD_SPDIF +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDCD_SPDIF +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDCD_SPDIF +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDCD_SPDIF set_location_assignment PIN_Y11 -to SDRAM_A[0] set_location_assignment PIN_AA26 -to SDRAM_A[1] set_location_assignment PIN_AA13 -to SDRAM_A[2] @@ -172,7 +123,6 @@ set_location_assignment PIN_AD17 -to SDRAM_A[11] set_location_assignment PIN_D12 -to SDRAM_A[12] set_location_assignment PIN_Y17 -to SDRAM_BA[0] set_location_assignment PIN_AB25 -to SDRAM_BA[1] - set_location_assignment PIN_E8 -to SDRAM_DQ[0] set_location_assignment PIN_V12 -to SDRAM_DQ[1] set_location_assignment PIN_D11 -to SDRAM_DQ[2] @@ -191,88 +141,42 @@ set_location_assignment PIN_AF4 -to SDRAM_DQ[14] set_location_assignment PIN_AH3 -to SDRAM_DQ[15] set_location_assignment PIN_AG13 -to SDRAM_DQML set_location_assignment PIN_AF13 -to SDRAM_DQMH - set_location_assignment PIN_AD20 -to SDRAM_CLK set_location_assignment PIN_AG10 -to SDRAM_CKE - set_location_assignment PIN_AA19 -to SDRAM_nWE set_location_assignment PIN_AA18 -to SDRAM_nCAS set_location_assignment PIN_Y18 -to SDRAM_nCS set_location_assignment PIN_W14 -to SDRAM_nRAS - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_* set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_* -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A* -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA* -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[*] -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQM* -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_n* +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_* set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[*] +set_instance_assignment -name FAST_INPUT_REGISTER ON -to SDRAM_DQ[*] set_instance_assignment -name ALLOW_SYNCH_CTRL_USAGE OFF -to *|SDRAM_* - -#============================================================ -# I/O -#============================================================ -set_location_assignment PIN_Y15 -to LED_USER -set_location_assignment PIN_AA15 -to LED_HDD -set_location_assignment PIN_AG28 -to LED_POWER - -set_location_assignment PIN_AH24 -to BTN_USER -set_location_assignment PIN_AG25 -to BTN_OSD -set_location_assignment PIN_AG23 -to BTN_RESET - -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED_* -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to BTN_* -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to BTN_* - -#============================================================ -# CLOCK -#============================================================ +set_location_assignment PIN_AE15 -to SD_SPI_CS +set_location_assignment PIN_AH8 -to SD_SPI_MISO +set_location_assignment PIN_AG8 -to SD_SPI_CLK +set_location_assignment PIN_U13 -to SD_SPI_MOSI +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SD_SPI* +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_SPI* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SD_SPI* set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK1_50 set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK2_50 set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK3_50 set_location_assignment PIN_V11 -to FPGA_CLK1_50 set_location_assignment PIN_Y13 -to FPGA_CLK2_50 set_location_assignment PIN_E11 -to FPGA_CLK3_50 - -#============================================================ -# HDMI -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2C_SCL -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2C_SDA +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2C_* set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2S set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_LRCLK set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_MCLK set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_SCLK -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_CLK -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_DE -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[0] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[1] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[2] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[3] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[4] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[5] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[6] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[7] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[8] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[9] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[10] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[11] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[12] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[13] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[14] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[15] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[16] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[17] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[18] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[19] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[20] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[21] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[22] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[23] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_HS -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_INT -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_VS +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_* +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_D[*] +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_DE +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_HS +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_VS +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_CLK set_location_assignment PIN_U10 -to HDMI_I2C_SCL set_location_assignment PIN_AA4 -to HDMI_I2C_SDA set_location_assignment PIN_T13 -to HDMI_I2S @@ -308,18 +212,10 @@ set_location_assignment PIN_AE8 -to HDMI_TX_D[23] set_location_assignment PIN_T8 -to HDMI_TX_HS set_location_assignment PIN_AF11 -to HDMI_TX_INT set_location_assignment PIN_V13 -to HDMI_TX_VS - -#============================================================ -# KEY -#============================================================ set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[0] set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[1] set_location_assignment PIN_AH17 -to KEY[0] set_location_assignment PIN_AH16 -to KEY[1] - -#============================================================ -# LED -#============================================================ set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[0] set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[1] set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[2] @@ -336,10 +232,6 @@ set_location_assignment PIN_AF26 -to LED[4] set_location_assignment PIN_AE26 -to LED[5] set_location_assignment PIN_Y16 -to LED[6] set_location_assignment PIN_AA23 -to LED[7] - -#============================================================ -# SW -#============================================================ set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[0] set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[1] set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[2] @@ -348,12 +240,62 @@ set_location_assignment PIN_Y24 -to SW[0] set_location_assignment PIN_W24 -to SW[1] set_location_assignment PIN_W21 -to SW[2] set_location_assignment PIN_W20 -to SW[3] - +set_hps_location_assignment HPSINTERFACEPERIPHERALSPIMASTER_X52_Y72_N111 -to spi +set_hps_location_assignment HPSINTERFACEPERIPHERALUART_X52_Y67_N111 -to uart set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:sys/build_id.tcl" - set_global_assignment -name CDF_FILE jtag.cdf set_global_assignment -name QIP_FILE sys/sys.qip -set_global_assignment -name QSYS_FILE sys/vip.qsys +source sys/sys_analog.tcl +set_location_assignment PIN_AF25 -to SDIO_DAT[0] +set_location_assignment PIN_AF23 -to SDIO_DAT[1] +set_location_assignment PIN_AD26 -to SDIO_DAT[2] +set_location_assignment PIN_AF28 -to SDIO_DAT[3] +set_location_assignment PIN_AF27 -to SDIO_CMD +set_location_assignment PIN_AH26 -to SDIO_CLK +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDIO_* +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDIO_* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_DAT[*] +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_CMD +set_location_assignment PIN_AE17 -to VGA_R[0] +set_location_assignment PIN_AE20 -to VGA_R[1] +set_location_assignment PIN_AF20 -to VGA_R[2] +set_location_assignment PIN_AH18 -to VGA_R[3] +set_location_assignment PIN_AH19 -to VGA_R[4] +set_location_assignment PIN_AF21 -to VGA_R[5] +set_location_assignment PIN_AE19 -to VGA_G[0] +set_location_assignment PIN_AG15 -to VGA_G[1] +set_location_assignment PIN_AF18 -to VGA_G[2] +set_location_assignment PIN_AG18 -to VGA_G[3] +set_location_assignment PIN_AG19 -to VGA_G[4] +set_location_assignment PIN_AG20 -to VGA_G[5] +set_location_assignment PIN_AG21 -to VGA_B[0] +set_location_assignment PIN_AA20 -to VGA_B[1] +set_location_assignment PIN_AE22 -to VGA_B[2] +set_location_assignment PIN_AF22 -to VGA_B[3] +set_location_assignment PIN_AH23 -to VGA_B[4] +set_location_assignment PIN_AH21 -to VGA_B[5] +set_location_assignment PIN_AH22 -to VGA_HS +set_location_assignment PIN_AG24 -to VGA_VS +set_location_assignment PIN_AH27 -to VGA_EN +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to VGA_EN +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_* +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_* +set_location_assignment PIN_AC24 -to AUDIO_L +set_location_assignment PIN_AE25 -to AUDIO_R +set_location_assignment PIN_AG26 -to AUDIO_SPDIF +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUDIO_* +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to AUDIO_* +set_location_assignment PIN_Y15 -to LED_USER +set_location_assignment PIN_AA15 -to LED_HDD +set_location_assignment PIN_AG28 -to LED_POWER +set_location_assignment PIN_AH24 -to BTN_USER +set_location_assignment PIN_AG25 -to BTN_OSD +set_location_assignment PIN_AG23 -to BTN_RESET +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED_* +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to BTN_* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to BTN_* + +set_global_assignment -name QIP_FILE rtl/pll.qip set_global_assignment -name SYSTEMVERILOG_FILE MultiComp.sv set_global_assignment -name VHDL_FILE Components/M6809/cpu09l.vhd set_global_assignment -name VHDL_FILE Components/TERMINAL/SBCTextDisplayRGB.vhd diff --git a/MultiComp.sv b/MultiComp.sv index 8ce2d73..4e14f8f 100644 --- a/MultiComp.sv +++ b/MultiComp.sv @@ -36,7 +36,7 @@ module emu input RESET, //Must be passed to hps_io module - inout [44:0] HPS_BUS, + inout [45:0] HPS_BUS, //Base video clock. Usually equals to CLK_SYS. output CLK_VIDEO, @@ -55,6 +55,35 @@ module emu output VGA_HS, output VGA_VS, output VGA_DE, // = ~(VBlank | HBlank) + output VGA_F1, + output [1:0] VGA_SL, + + /* + // Use framebuffer from DDRAM (USE_FB=1 in qsf) + // FB_FORMAT: + // [2:0] : 011=8bpp(palette) 100=16bpp 101=24bpp 110=32bpp + // [3] : 0=16bits 565 1=16bits 1555 + // [4] : 0=RGB 1=BGR (for 16/24/32 modes) + // + // FB_STRIDE either 0 (rounded to 256 bytes) or multiple of 16 bytes. + output FB_EN, + output [4:0] FB_FORMAT, + output [11:0] FB_WIDTH, + output [11:0] FB_HEIGHT, + output [31:0] FB_BASE, + output [13:0] FB_STRIDE, + input FB_VBL, + input FB_LL, + output FB_FORCE_BLANK, + + // Palette control for 8bit modes. + // Ignored for other video modes. + output FB_PAL_CLK, + output [7:0] FB_PAL_ADDR, + output [23:0] FB_PAL_DOUT, + input [23:0] FB_PAL_DIN, + output FB_PAL_WR, + */ output LED_USER, // 1 - ON, 0 - OFF. @@ -64,13 +93,21 @@ module emu output [1:0] LED_POWER, output [1:0] LED_DISK, + // I/O board button press simulation (active high) + // b[1]: user button + // b[0]: osd button + output [1:0] BUTTONS, + + input CLK_AUDIO, // 24.576 MHz output [15:0] AUDIO_L, output [15:0] AUDIO_R, output AUDIO_S, // 1 - signed audio samples, 0 - unsigned output [1:0] AUDIO_MIX, // 0 - no mix, 1 - 25%, 2 - 50%, 3 - 100% (mono) - input TAPE_IN, - // SD-SPI + //ADC + inout [3:0] ADC_BUS, + + //SD-SPI output SD_SCK, output SD_MOSI, input SD_MISO, @@ -101,33 +138,61 @@ module emu output SDRAM_nCS, output SDRAM_nCAS, output SDRAM_nRAS, - output SDRAM_nWE + output SDRAM_nWE, + + input UART_CTS, + output UART_RTS, + input UART_RXD, + output UART_TXD, + output UART_DTR, + input UART_DSR, + + // Open-drain User port. + // 0 - D+/RX + // 1 - D-/TX + // 2..6 - USR2..USR6 + // Set USER_OUT to 1 to read from USER_IN. + input [6:0] USER_IN, + output [6:0] USER_OUT, + + input OSD_STATUS ); +assign ADC_BUS = 'Z; +assign USER_OUT = '1; +assign {UART_RTS, UART_TXD, UART_DTR} = 0; assign {SD_SCK, SD_MOSI, SD_CS} = 'Z; assign {SDRAM_DQ, SDRAM_A, SDRAM_BA, SDRAM_CLK, SDRAM_CKE, SDRAM_DQML, SDRAM_DQMH, SDRAM_nWE, SDRAM_nCAS, SDRAM_nRAS, SDRAM_nCS} = 'Z; assign {DDRAM_CLK, DDRAM_BURSTCNT, DDRAM_ADDR, DDRAM_DIN, DDRAM_BE, DDRAM_RD, DDRAM_WE} = 0; assign LED_USER = 0; assign LED_DISK = ~driveLED; - - assign LED_POWER = 0; +assign BUTTONS = 0; assign VIDEO_ARX = 4; assign VIDEO_ARY = 3; +assign VGA_SL = 0; +assign VGA_F1 = 0; +//assign CE_PIXEL=1; +assign AUDIO_S = 0; +assign AUDIO_L = 0; +assign AUDIO_R = 0; +assign AUDIO_MIX = 0; `include "build_id.v" localparam CONF_STR = { "MultiComp;;", + "S,IMG;", + "OE,Reset after Mount,No,Yes;", "-;", - "O78,CPU-ROM,Z80-CP/M,6502-Basic,6809-Basic;", + "O78,CPU-ROM,Z80-CP/M,Z80-BASIC,6502-Basic,6809-Basic;", "-;", - "V,v1.1.",`BUILD_DATE + "RA,Reset;", + "V,v",`BUILD_DATE }; - ////////////////// HPS I/O /////////////////// wire [1:0] buttons; wire [31:0] status; @@ -146,8 +211,14 @@ wire [7:0] sd_buff_dout; wire [7:0] sd_buff_din; wire sd_buff_wr; wire sd_ack_conf; +wire img_mounted; +wire img_readonly; +wire [63:0] img_size; -hps_io #(.STRLEN($size(CONF_STR)>>3)) hps_io +hps_io #( + .STRLEN($size(CONF_STR)>>3), + .PS2DIV (2000) + ) hps_io ( .clk_sys(CLK_50M), .HPS_BUS(HPS_BUS), @@ -159,18 +230,33 @@ hps_io #(.STRLEN($size(CONF_STR)>>3)) hps_io .forced_scandoubler(forced_scandoubler), .ps2_kbd_clk_out(PS2_CLK), - .ps2_kbd_data_out(PS2_DAT) + .ps2_kbd_data_out(PS2_DAT), + + .img_mounted(img_mounted), + .img_readonly(img_readonly), + .img_size(img_size) +); + +/////////////////////// CLOCKS /////////////////////////////// +wire clk_sys, clk_ram, locked; + +pll pll +( + .refclk(CLK_50M), + .rst(0), + .outclk_0(clk_sys), + .locked(locked) ); ///////////////// RESET ///////////////////////// -wire reset = RESET | status[0] | buttons[1]; +wire reset = RESET | status[0] | buttons[1] | status[10] | (status[14] && img_mounted); /////////////////////////////////////////////////// -assign CLK_VIDEO = CLK_50M; +assign CLK_VIDEO = clk_sys; -typedef enum {cpuZ80CPM='b00, cpu6502Basic='b01, cpu6809Basic='b10} cpu_type_enum; +typedef enum {cpuZ80CPM='b00, cpuZ80Basic='b01, cpu6502Basic='b10, cpu6809Basic='b11} cpu_type_enum; wire [1:0] cpu_type = status[8:7]; wire hblank, vblank; @@ -178,26 +264,26 @@ wire hs, vs; wire [1:0] r,g,b; wire driveLED; -wire [2:0] _hblank, _vblank; -wire [2:0] _hs, _vs; -wire [1:0] _r[2:0], _g[2:0], _b[2:0]; -wire [2:0] _CE_PIXEL; -wire [2:0] _SD_CS; -wire [2:0] _SD_MOSI; -wire [2:0] _SD_SCK; -wire [2:0] _driveLED; +wire [3:0] _hblank, _vblank; +wire [3:0] _hs, _vs; +wire [1:0] _r[3:0], _g[3:0], _b[3:0]; +wire [3:0] _CE_PIXEL; +wire [3:0] _SD_CS; +wire [3:0] _SD_MOSI; +wire [3:0] _SD_SCK; +wire [3:0] _driveLED; always_comb begin hblank <= _hblank[cpu_type]; vblank <= _vblank[cpu_type]; hs <= _hs[cpu_type]; - vs <= _vs[cpu_type]; - r <= _r[cpu_type][1:0]; - g <= _g[cpu_type][1:0]; - b <= _b[cpu_type][1:0]; - CE_PIXEL <= _CE_PIXEL[cpu_type]; - SD_CS <= _SD_CS[cpu_type]; + vs <= _vs[cpu_type]; + r <= _r[cpu_type][1:0]; + g <= _g[cpu_type][1:0]; + b <= _b[cpu_type][1:0]; + CE_PIXEL <= _CE_PIXEL[cpu_type]; + SD_CS <= _SD_CS[cpu_type]; SD_MOSI <= _SD_MOSI[cpu_type]; SD_SCK <= _SD_SCK[cpu_type]; driveLED <= _driveLED[cpu_type]; @@ -206,7 +292,7 @@ end MicrocomputerZ80CPM MicrocomputerZ80CPM ( .N_RESET(~reset & cpu_type == cpuZ80CPM), - .clk(cpu_type == cpuZ80CPM ? CLK_50M : 0), + .clk(cpu_type == cpuZ80CPM ? clk_sys : 0), .R(_r[0][1:0]), .G(_g[0][1:0]), .B(_b[0][1:0]), @@ -224,10 +310,10 @@ MicrocomputerZ80CPM MicrocomputerZ80CPM .driveLED(_driveLED[0]) ); -Microcomputer6502Basic Microcomputer6502Basic +MicrocomputerZ80Basic MicrocomputerZ80Basic ( - .N_RESET(~reset & cpu_type == cpu6502Basic), - .clk(cpu_type == cpu6502Basic ? CLK_50M : 0), + .N_RESET(~reset & cpu_type == cpuZ80Basic), + .clk(cpu_type == cpuZ80Basic ? clk_sys : 0), .R(_r[1][1:0]), .G(_g[1][1:0]), .B(_b[1][1:0]), @@ -245,11 +331,10 @@ Microcomputer6502Basic Microcomputer6502Basic .driveLED(_driveLED[1]) ); -//Reset is not working (even on the original Grant's 6809) -Microcomputer6809Basic Microcomputer6809Basic +Microcomputer6502Basic Microcomputer6502Basic ( - .N_RESET(~reset & cpu_type == cpu6809Basic), - .clk(cpu_type == cpu6809Basic ? CLK_50M : 0), + .N_RESET(~reset & cpu_type == cpu6502Basic), + .clk(cpu_type == cpu6502Basic ? clk_sys : 0), .R(_r[2][1:0]), .G(_g[2][1:0]), .B(_b[2][1:0]), @@ -267,6 +352,28 @@ Microcomputer6809Basic Microcomputer6809Basic .driveLED(_driveLED[2]) ); +//Reset is not working (even on the original Grant's 6809) +Microcomputer6809Basic Microcomputer6809Basic +( + .N_RESET(~reset & cpu_type == cpu6809Basic), + .clk(cpu_type == cpu6809Basic ? clk_sys : 0), + .R(_r[3][1:0]), + .G(_g[3][1:0]), + .B(_b[3][1:0]), + .HS(_hs[3]), + .VS(_vs[3]), + .hBlank(_hblank[3]), + .vBlank(_vblank[3]), + .cepix(_CE_PIXEL[3]), + .ps2Clk(PS2_CLK), + .ps2Data(PS2_DAT), + .sdCS(_SD_CS[3]), + .sdMOSI(_SD_MOSI[3]), + .sdMISO(SD_MISO), + .sdSCLK(_SD_SCK[3]), + .driveLED(_driveLED[3]) +); + video_cleaner video_cleaner ( .clk_vid(CLK_VIDEO), diff --git a/ROMS/6502/M6502_BASIC_ROM.qip b/ROMS/6502/M6502_BASIC_ROM.qip index 7bfe6f2..9b91d71 100644 --- a/ROMS/6502/M6502_BASIC_ROM.qip +++ b/ROMS/6502/M6502_BASIC_ROM.qip @@ -1,4 +1,5 @@ set_global_assignment -name IP_TOOL_NAME "ROM: 1-PORT" -set_global_assignment -name IP_TOOL_VERSION "13.0" +set_global_assignment -name IP_TOOL_VERSION "17.0" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "M6502_BASIC_ROM.vhd"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "M6502_BASIC_ROM.cmp"] diff --git a/ROMS/6502/M6502_BASIC_ROM.vhd b/ROMS/6502/M6502_BASIC_ROM.vhd index 3603379..a67b68c 100644 --- a/ROMS/6502/M6502_BASIC_ROM.vhd +++ b/ROMS/6502/M6502_BASIC_ROM.vhd @@ -14,30 +14,31 @@ -- ************************************************************ -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! -- --- 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition +-- 17.0.0 Build 595 04/25/2017 SJ Lite Edition -- ************************************************************ ---Copyright (C) 1991-2013 Altera Corporation ---Your use of Altera Corporation's design tools, logic functions +--Copyright (C) 2017 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject ---to the terms and conditions of the Altera Program License ---Subscription Agreement, Altera MegaCore Function License ---Agreement, or other applicable license agreement, including, ---without limitation, that your use is for the sole purpose of ---programming logic devices manufactured by Altera and sold by ---Altera or its authorized distributors. Please refer to the ---applicable agreement for further details. +--to the terms and conditions of the Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel MegaCore Function License Agreement, or other +--applicable license agreement, including, without limitation, +--that your use is for the sole purpose of programming logic +--devices manufactured by Intel and sold by Intel or its +--authorized distributors. Please refer to the applicable +--agreement for further details. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; -USE altera_mf.all; +USE altera_mf.altera_mf_components.all; ENTITY M6502_BASIC_ROM IS PORT @@ -53,40 +54,16 @@ ARCHITECTURE SYN OF m6502_basic_rom IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); - - - COMPONENT altsyncram - GENERIC ( - clock_enable_input_a : STRING; - clock_enable_output_a : STRING; - init_file : STRING; - intended_device_family : STRING; - lpm_hint : STRING; - lpm_type : STRING; - numwords_a : NATURAL; - operation_mode : STRING; - outdata_aclr_a : STRING; - outdata_reg_a : STRING; - widthad_a : NATURAL; - width_a : NATURAL; - width_byteena_a : NATURAL - ); - PORT ( - address_a : IN STD_LOGIC_VECTOR (12 DOWNTO 0); - clock0 : IN STD_LOGIC ; - q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) - ); - END COMPONENT; - BEGIN q <= sub_wire0(7 DOWNTO 0); altsyncram_component : altsyncram GENERIC MAP ( + address_aclr_a => "NONE", clock_enable_input_a => "BYPASS", clock_enable_output_a => "BYPASS", - init_file => "../../ROMS/6502/BASIC.HEX", - intended_device_family => "Cyclone II", + init_file => "./ROMS/6502/BASIC.HEX", + intended_device_family => "Cyclone V", lpm_hint => "ENABLE_RUNTIME_MOD=NO", lpm_type => "altsyncram", numwords_a => 8192, @@ -123,11 +100,11 @@ END SYN; -- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" -- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" -- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" --- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" -- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" -- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" --- Retrieval info: PRIVATE: MIFfilename STRING "../../ROMS/6502/BASIC.HEX" +-- Retrieval info: PRIVATE: MIFfilename STRING "./ROMS/6502/BASIC.HEX" -- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "8192" -- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" -- Retrieval info: PRIVATE: RegAddr NUMERIC "1" @@ -139,10 +116,11 @@ END SYN; -- Retrieval info: PRIVATE: WidthData NUMERIC "8" -- Retrieval info: PRIVATE: rden NUMERIC "0" -- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING "NONE" -- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" -- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" --- Retrieval info: CONSTANT: INIT_FILE STRING "../../ROMS/6502/BASIC.HEX" --- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: CONSTANT: INIT_FILE STRING "./ROMS/6502/BASIC.HEX" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" -- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" -- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "8192" diff --git a/ROMS/6809/M6809_EXT_BASIC_ROM.qip b/ROMS/6809/M6809_EXT_BASIC_ROM.qip index f5bedf8..1ca13d5 100644 --- a/ROMS/6809/M6809_EXT_BASIC_ROM.qip +++ b/ROMS/6809/M6809_EXT_BASIC_ROM.qip @@ -1,4 +1,5 @@ set_global_assignment -name IP_TOOL_NAME "ROM: 1-PORT" -set_global_assignment -name IP_TOOL_VERSION "13.0" +set_global_assignment -name IP_TOOL_VERSION "17.0" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "M6809_EXT_BASIC_ROM.vhd"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "M6809_EXT_BASIC_ROM.cmp"] diff --git a/ROMS/6809/M6809_EXT_BASIC_ROM.vhd b/ROMS/6809/M6809_EXT_BASIC_ROM.vhd index b4a2902..c24aa2f 100644 --- a/ROMS/6809/M6809_EXT_BASIC_ROM.vhd +++ b/ROMS/6809/M6809_EXT_BASIC_ROM.vhd @@ -14,30 +14,31 @@ -- ************************************************************ -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! -- --- 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition +-- 17.0.0 Build 595 04/25/2017 SJ Lite Edition -- ************************************************************ ---Copyright (C) 1991-2013 Altera Corporation ---Your use of Altera Corporation's design tools, logic functions +--Copyright (C) 2017 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject ---to the terms and conditions of the Altera Program License ---Subscription Agreement, Altera MegaCore Function License ---Agreement, or other applicable license agreement, including, ---without limitation, that your use is for the sole purpose of ---programming logic devices manufactured by Altera and sold by ---Altera or its authorized distributors. Please refer to the ---applicable agreement for further details. +--to the terms and conditions of the Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel MegaCore Function License Agreement, or other +--applicable license agreement, including, without limitation, +--that your use is for the sole purpose of programming logic +--devices manufactured by Intel and sold by Intel or its +--authorized distributors. Please refer to the applicable +--agreement for further details. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; -USE altera_mf.all; +USE altera_mf.altera_mf_components.all; ENTITY M6809_EXT_BASIC_ROM IS PORT @@ -53,40 +54,16 @@ ARCHITECTURE SYN OF m6809_ext_basic_rom IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); - - - COMPONENT altsyncram - GENERIC ( - clock_enable_input_a : STRING; - clock_enable_output_a : STRING; - init_file : STRING; - intended_device_family : STRING; - lpm_hint : STRING; - lpm_type : STRING; - numwords_a : NATURAL; - operation_mode : STRING; - outdata_aclr_a : STRING; - outdata_reg_a : STRING; - widthad_a : NATURAL; - width_a : NATURAL; - width_byteena_a : NATURAL - ); - PORT ( - address_a : IN STD_LOGIC_VECTOR (12 DOWNTO 0); - clock0 : IN STD_LOGIC ; - q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) - ); - END COMPONENT; - BEGIN q <= sub_wire0(7 DOWNTO 0); altsyncram_component : altsyncram GENERIC MAP ( + address_aclr_a => "NONE", clock_enable_input_a => "BYPASS", clock_enable_output_a => "BYPASS", - init_file => "../ROMS/6809/EXT_BASIC_NO_USING.hex", - intended_device_family => "Cyclone", + init_file => "./ROMS/6809/EXT_BASIC_NO_USING.hex", + intended_device_family => "Cyclone V", lpm_hint => "ENABLE_RUNTIME_MOD=NO", lpm_type => "altsyncram", numwords_a => 8192, @@ -123,11 +100,11 @@ END SYN; -- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" -- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" -- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" --- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" -- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" -- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" --- Retrieval info: PRIVATE: MIFfilename STRING "../ROMS/6809/EXT_BASIC_NO_USING.hex" +-- Retrieval info: PRIVATE: MIFfilename STRING "./ROMS/6809/EXT_BASIC_NO_USING.hex" -- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "8192" -- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" -- Retrieval info: PRIVATE: RegAddr NUMERIC "1" @@ -139,10 +116,11 @@ END SYN; -- Retrieval info: PRIVATE: WidthData NUMERIC "8" -- Retrieval info: PRIVATE: rden NUMERIC "0" -- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING "NONE" -- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" -- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" --- Retrieval info: CONSTANT: INIT_FILE STRING "../ROMS/6809/EXT_BASIC_NO_USING.hex" --- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: CONSTANT: INIT_FILE STRING "./ROMS/6809/EXT_BASIC_NO_USING.hex" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" -- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" -- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "8192" diff --git a/ROMS/Z80/Z80_BASIC_ROM.qip b/ROMS/Z80/Z80_BASIC_ROM.qip index 0d65399..12224b3 100644 --- a/ROMS/Z80/Z80_BASIC_ROM.qip +++ b/ROMS/Z80/Z80_BASIC_ROM.qip @@ -1,4 +1,5 @@ set_global_assignment -name IP_TOOL_NAME "ROM: 1-PORT" -set_global_assignment -name IP_TOOL_VERSION "13.0" +set_global_assignment -name IP_TOOL_VERSION "17.0" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "Z80_BASIC_ROM.vhd"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "Z80_BASIC_ROM.cmp"] diff --git a/ROMS/Z80/Z80_BASIC_ROM.vhd b/ROMS/Z80/Z80_BASIC_ROM.vhd index 044cc23..6b216a6 100644 --- a/ROMS/Z80/Z80_BASIC_ROM.vhd +++ b/ROMS/Z80/Z80_BASIC_ROM.vhd @@ -14,30 +14,31 @@ -- ************************************************************ -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! -- --- 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition +-- 17.0.0 Build 595 04/25/2017 SJ Lite Edition -- ************************************************************ ---Copyright (C) 1991-2013 Altera Corporation ---Your use of Altera Corporation's design tools, logic functions +--Copyright (C) 2017 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject ---to the terms and conditions of the Altera Program License ---Subscription Agreement, Altera MegaCore Function License ---Agreement, or other applicable license agreement, including, ---without limitation, that your use is for the sole purpose of ---programming logic devices manufactured by Altera and sold by ---Altera or its authorized distributors. Please refer to the ---applicable agreement for further details. +--to the terms and conditions of the Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel MegaCore Function License Agreement, or other +--applicable license agreement, including, without limitation, +--that your use is for the sole purpose of programming logic +--devices manufactured by Intel and sold by Intel or its +--authorized distributors. Please refer to the applicable +--agreement for further details. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; -USE altera_mf.all; +USE altera_mf.altera_mf_components.all; ENTITY Z80_BASIC_ROM IS PORT @@ -53,40 +54,16 @@ ARCHITECTURE SYN OF z80_basic_rom IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); - - - COMPONENT altsyncram - GENERIC ( - clock_enable_input_a : STRING; - clock_enable_output_a : STRING; - init_file : STRING; - intended_device_family : STRING; - lpm_hint : STRING; - lpm_type : STRING; - numwords_a : NATURAL; - operation_mode : STRING; - outdata_aclr_a : STRING; - outdata_reg_a : STRING; - widthad_a : NATURAL; - width_a : NATURAL; - width_byteena_a : NATURAL - ); - PORT ( - address_a : IN STD_LOGIC_VECTOR (12 DOWNTO 0); - clock0 : IN STD_LOGIC ; - q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) - ); - END COMPONENT; - BEGIN q <= sub_wire0(7 DOWNTO 0); altsyncram_component : altsyncram GENERIC MAP ( + address_aclr_a => "NONE", clock_enable_input_a => "BYPASS", clock_enable_output_a => "BYPASS", - init_file => "../ROMS/Z80/BASIC.HEX", - intended_device_family => "Cyclone", + init_file => "./ROMS/Z80/BASIC.HEX", + intended_device_family => "Cyclone V", lpm_hint => "ENABLE_RUNTIME_MOD=NO", lpm_type => "altsyncram", numwords_a => 8192, @@ -123,11 +100,11 @@ END SYN; -- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" -- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" -- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" --- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" -- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" -- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" --- Retrieval info: PRIVATE: MIFfilename STRING "../ROMS/Z80/BASIC.HEX" +-- Retrieval info: PRIVATE: MIFfilename STRING "./ROMS/Z80/BASIC.HEX" -- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "8192" -- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" -- Retrieval info: PRIVATE: RegAddr NUMERIC "1" @@ -139,10 +116,11 @@ END SYN; -- Retrieval info: PRIVATE: WidthData NUMERIC "8" -- Retrieval info: PRIVATE: rden NUMERIC "0" -- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING "NONE" -- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" -- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" --- Retrieval info: CONSTANT: INIT_FILE STRING "../ROMS/Z80/BASIC.HEX" --- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: CONSTANT: INIT_FILE STRING "./ROMS/Z80/BASIC.HEX" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" -- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" -- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "8192" diff --git a/ROMS/Z80/Z80_CPM_BASIC_ROM.qip b/ROMS/Z80/Z80_CPM_BASIC_ROM.qip index 45c7478..f3dd3eb 100644 --- a/ROMS/Z80/Z80_CPM_BASIC_ROM.qip +++ b/ROMS/Z80/Z80_CPM_BASIC_ROM.qip @@ -1,4 +1,5 @@ set_global_assignment -name IP_TOOL_NAME "ROM: 1-PORT" -set_global_assignment -name IP_TOOL_VERSION "13.0" +set_global_assignment -name IP_TOOL_VERSION "17.0" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "Z80_CPM_BASIC_ROM.vhd"] set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "Z80_CPM_BASIC_ROM.cmp"] diff --git a/ROMS/Z80/Z80_CPM_BASIC_ROM.vhd b/ROMS/Z80/Z80_CPM_BASIC_ROM.vhd index a4a4eff..e30d23c 100644 --- a/ROMS/Z80/Z80_CPM_BASIC_ROM.vhd +++ b/ROMS/Z80/Z80_CPM_BASIC_ROM.vhd @@ -14,30 +14,31 @@ -- ************************************************************ -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! -- --- 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition +-- 17.0.0 Build 595 04/25/2017 SJ Lite Edition -- ************************************************************ ---Copyright (C) 1991-2013 Altera Corporation ---Your use of Altera Corporation's design tools, logic functions +--Copyright (C) 2017 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions --and other software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject ---to the terms and conditions of the Altera Program License ---Subscription Agreement, Altera MegaCore Function License ---Agreement, or other applicable license agreement, including, ---without limitation, that your use is for the sole purpose of ---programming logic devices manufactured by Altera and sold by ---Altera or its authorized distributors. Please refer to the ---applicable agreement for further details. +--to the terms and conditions of the Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel MegaCore Function License Agreement, or other +--applicable license agreement, including, without limitation, +--that your use is for the sole purpose of programming logic +--devices manufactured by Intel and sold by Intel or its +--authorized distributors. Please refer to the applicable +--agreement for further details. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; -USE altera_mf.all; +USE altera_mf.altera_mf_components.all; ENTITY Z80_CPM_BASIC_ROM IS PORT @@ -53,40 +54,16 @@ ARCHITECTURE SYN OF z80_cpm_basic_rom IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); - - - COMPONENT altsyncram - GENERIC ( - clock_enable_input_a : STRING; - clock_enable_output_a : STRING; - init_file : STRING; - intended_device_family : STRING; - lpm_hint : STRING; - lpm_type : STRING; - numwords_a : NATURAL; - operation_mode : STRING; - outdata_aclr_a : STRING; - outdata_reg_a : STRING; - widthad_a : NATURAL; - width_a : NATURAL; - width_byteena_a : NATURAL - ); - PORT ( - address_a : IN STD_LOGIC_VECTOR (12 DOWNTO 0); - clock0 : IN STD_LOGIC ; - q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) - ); - END COMPONENT; - BEGIN q <= sub_wire0(7 DOWNTO 0); altsyncram_component : altsyncram GENERIC MAP ( + address_aclr_a => "NONE", clock_enable_input_a => "BYPASS", clock_enable_output_a => "BYPASS", - init_file => "../ROMS/Z80/CPM_BASIC.HEX", - intended_device_family => "Cyclone", + init_file => "./ROMS/Z80/CPM_BASIC.HEX", + intended_device_family => "Cyclone V", lpm_hint => "ENABLE_RUNTIME_MOD=NO", lpm_type => "altsyncram", numwords_a => 8192, @@ -123,11 +100,11 @@ END SYN; -- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" -- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" -- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" --- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" -- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" -- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" --- Retrieval info: PRIVATE: MIFfilename STRING "../ROMS/Z80/CPM_BASIC.HEX" +-- Retrieval info: PRIVATE: MIFfilename STRING "./ROMS/Z80/CPM_BASIC.HEX" -- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "8192" -- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" -- Retrieval info: PRIVATE: RegAddr NUMERIC "1" @@ -139,10 +116,11 @@ END SYN; -- Retrieval info: PRIVATE: WidthData NUMERIC "8" -- Retrieval info: PRIVATE: rden NUMERIC "0" -- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING "NONE" -- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" -- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" --- Retrieval info: CONSTANT: INIT_FILE STRING "../ROMS/Z80/CPM_BASIC.HEX" --- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II" +-- Retrieval info: CONSTANT: INIT_FILE STRING "./ROMS/Z80/CPM_BASIC.HEX" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V" -- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" -- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" -- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "8192" diff --git a/build_id.v b/build_id.v new file mode 100644 index 0000000..45f5cd7 --- /dev/null +++ b/build_id.v @@ -0,0 +1 @@ +`define BUILD_DATE "201116" \ No newline at end of file diff --git a/c5_pin_model_dump.txt b/c5_pin_model_dump.txt new file mode 100644 index 0000000..31bb72c --- /dev/null +++ b/c5_pin_model_dump.txt @@ -0,0 +1,118 @@ +io_4iomodule_c5_index: 55gpio_index: 2 +io_4iomodule_c5_index: 54gpio_index: 465 +io_4iomodule_c5_index: 33gpio_index: 6 +io_4iomodule_c5_index: 51gpio_index: 461 +io_4iomodule_c5_index: 27gpio_index: 10 +io_4iomodule_c5_index: 57gpio_index: 457 +io_4iomodule_c5_index: 34gpio_index: 14 +io_4iomodule_c5_index: 28gpio_index: 453 +io_4iomodule_c5_index: 26gpio_index: 19 +io_4iomodule_c5_index: 47gpio_index: 449 +io_4iomodule_c5_index: 29gpio_index: 22 +io_4iomodule_c5_index: 3gpio_index: 445 +io_4iomodule_c5_index: 16gpio_index: 27 +io_4iomodule_c5_index: 6gpio_index: 441 +io_4iomodule_c5_index: 50gpio_index: 30 +io_4iomodule_c5_index: 35gpio_index: 437 +io_4iomodule_c5_index: 7gpio_index: 35 +io_4iomodule_c5_index: 53gpio_index: 433 +io_4iomodule_c5_index: 12gpio_index: 38 +io_4iomodule_c5_index: 1gpio_index: 429 +io_4iomodule_c5_index: 22gpio_index: 43 +io_4iomodule_c5_index: 8gpio_index: 425 +io_4iomodule_c5_index: 20gpio_index: 46 +io_4iomodule_c5_index: 30gpio_index: 421 +io_4iomodule_c5_index: 2gpio_index: 51 +io_4iomodule_c5_index: 31gpio_index: 417 +io_4iomodule_c5_index: 39gpio_index: 54 +io_4iomodule_c5_index: 18gpio_index: 413 +io_4iomodule_c5_index: 10gpio_index: 59 +io_4iomodule_c5_index: 42gpio_index: 409 +io_4iomodule_c5_index: 5gpio_index: 62 +io_4iomodule_c5_index: 24gpio_index: 405 +io_4iomodule_c5_index: 37gpio_index: 67 +io_4iomodule_c5_index: 13gpio_index: 401 +io_4iomodule_c5_index: 0gpio_index: 70 +io_4iomodule_c5_index: 44gpio_index: 397 +io_4iomodule_c5_index: 38gpio_index: 75 +io_4iomodule_c5_index: 52gpio_index: 393 +io_4iomodule_c5_index: 32gpio_index: 78 +io_4iomodule_c5_index: 56gpio_index: 389 +io_4iomodule_a_index: 13gpio_index: 385 +io_4iomodule_c5_index: 4gpio_index: 83 +io_4iomodule_c5_index: 23gpio_index: 86 +io_4iomodule_a_index: 15gpio_index: 381 +io_4iomodule_a_index: 8gpio_index: 377 +io_4iomodule_c5_index: 46gpio_index: 91 +io_4iomodule_a_index: 5gpio_index: 373 +io_4iomodule_a_index: 11gpio_index: 369 +io_4iomodule_c5_index: 41gpio_index: 94 +io_4iomodule_a_index: 3gpio_index: 365 +io_4iomodule_c5_index: 25gpio_index: 99 +io_4iomodule_a_index: 7gpio_index: 361 +io_4iomodule_c5_index: 9gpio_index: 102 +io_4iomodule_a_index: 0gpio_index: 357 +io_4iomodule_c5_index: 14gpio_index: 107 +io_4iomodule_a_index: 12gpio_index: 353 +io_4iomodule_c5_index: 45gpio_index: 110 +io_4iomodule_c5_index: 17gpio_index: 115 +io_4iomodule_a_index: 4gpio_index: 349 +io_4iomodule_c5_index: 36gpio_index: 118 +io_4iomodule_a_index: 10gpio_index: 345 +io_4iomodule_a_index: 16gpio_index: 341 +io_4iomodule_c5_index: 15gpio_index: 123 +io_4iomodule_a_index: 14gpio_index: 337 +io_4iomodule_c5_index: 43gpio_index: 126 +io_4iomodule_c5_index: 19gpio_index: 131 +io_4iomodule_a_index: 1gpio_index: 333 +io_4iomodule_c5_index: 59gpio_index: 134 +io_4iomodule_a_index: 2gpio_index: 329 +io_4iomodule_a_index: 9gpio_index: 325 +io_4iomodule_c5_index: 48gpio_index: 139 +io_4iomodule_a_index: 6gpio_index: 321 +io_4iomodule_a_index: 17gpio_index: 317 +io_4iomodule_c5_index: 40gpio_index: 142 +io_4iomodule_c5_index: 11gpio_index: 147 +io_4iomodule_c5_index: 58gpio_index: 150 +io_4iomodule_c5_index: 21gpio_index: 155 +io_4iomodule_c5_index: 49gpio_index: 158 +io_4iomodule_h_c5_index: 0gpio_index: 161 +io_4iomodule_h_c5_index: 6gpio_index: 165 +io_4iomodule_h_c5_index: 10gpio_index: 169 +io_4iomodule_h_c5_index: 3gpio_index: 173 +io_4iomodule_h_c5_index: 8gpio_index: 176 +io_4iomodule_h_c5_index: 11gpio_index: 180 +io_4iomodule_h_c5_index: 7gpio_index: 184 +io_4iomodule_h_c5_index: 5gpio_index: 188 +io_4iomodule_h_c5_index: 1gpio_index: 192 +io_4iomodule_h_c5_index: 2gpio_index: 196 +io_4iomodule_h_c5_index: 9gpio_index: 200 +io_4iomodule_h_c5_index: 4gpio_index: 204 +io_4iomodule_h_index: 15gpio_index: 208 +io_4iomodule_h_index: 1gpio_index: 212 +io_4iomodule_h_index: 3gpio_index: 216 +io_4iomodule_h_index: 2gpio_index: 220 +io_4iomodule_h_index: 11gpio_index: 224 +io_4iomodule_vref_h_index: 1gpio_index: 228 +io_4iomodule_h_index: 20gpio_index: 231 +io_4iomodule_h_index: 8gpio_index: 235 +io_4iomodule_h_index: 6gpio_index: 239 +io_4iomodule_h_index: 10gpio_index: 243 +io_4iomodule_h_index: 23gpio_index: 247 +io_4iomodule_h_index: 7gpio_index: 251 +io_4iomodule_h_index: 22gpio_index: 255 +io_4iomodule_h_index: 5gpio_index: 259 +io_4iomodule_h_index: 24gpio_index: 263 +io_4iomodule_h_index: 0gpio_index: 267 +io_4iomodule_h_index: 13gpio_index: 271 +io_4iomodule_h_index: 21gpio_index: 275 +io_4iomodule_h_index: 16gpio_index: 279 +io_4iomodule_vref_h_index: 0gpio_index: 283 +io_4iomodule_h_index: 12gpio_index: 286 +io_4iomodule_h_index: 4gpio_index: 290 +io_4iomodule_h_index: 19gpio_index: 294 +io_4iomodule_h_index: 18gpio_index: 298 +io_4iomodule_h_index: 17gpio_index: 302 +io_4iomodule_h_index: 25gpio_index: 306 +io_4iomodule_h_index: 14gpio_index: 310 +io_4iomodule_h_index: 9gpio_index: 314 diff --git a/pll.xml b/pll.xml new file mode 100644 index 0000000..5f1f21b --- /dev/null +++ b/pll.xml @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/releases/MultiComp_20180624.rbf b/releases/MultiComp_20180624.rbf deleted file mode 100644 index 880b4a2ae812bd8365ba489d0ba910d70ce24317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2885104 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 z

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

C_NC%w)zfN?|4d1`*sss0zTUNs) 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

S*FCoRY#UnRl*Ui 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%0D|+is;MskXIrolgWlj z-CxvZ*9`v`@_j5_ukwF6l|gw$f`y>0rJoeNFckAP?+q-2_n{*7C>@PrGALD17JTyAm#1}01Jz3>lp`(-jG))Od>4j z3hZSHFq;xx0cy=ym?&?Iow5euEDq-)&&0pP9Ts0Ag%@W{;DsdgM9f1F;sPsln?7(G zxb2RFA-6}LR_KZ@M)nePWdWz5D_%@;z$lF76I%y1z{?qqy9{(RkK(Ht%30-5DC#$X zm*clm&!Q$|!HvfI*6;kp@-PW}{;S}I1Aaj7L3ceiL5`6JP#ZfLa>I4rYhz~bP2qP3KIDhNU<=JiWpx_jvDC^4o#(ei9~))_T^Oh zMT|JYiHfKZ2NNAJLx7bxyn_RW!WO5w8tJJ!OmK6IrB==w{=`YK7Ly{3E{@Ufc;@Bf zuvhfaL2`)Gkzv0k+u4OPRD}2w?Aw^zV#si!B3AwJ4~Oq=Jm2)!Qh%Z;!$cy&#Ns7t zLKh)!YKcf2LVEo=tP9|J>QR6h;>E5Pp==Z4h@c7>;!()27-2!3Pm^U3O;rV+YKk*PPd$>=66S}0`<4Io!N#X|C4vm)>QFz_An{(1E(<7Pi!(V zcay@b5x}RG*G&O`OBKsX;}xTdSyIsz>ReZCojTf-g=peQ#|<75K}MP<{WfI?lprfp zM>GPp$M2_f<+feYu8PH}zzm=WP!{4;po^1(od*_58B1($$P*VMmE33Z<0M3?j#=$xEIkKp3a_$CPlwn-pa6PwQ>xJ71Kt#3)3NmD|P} zghan2a@_7xypFP9nOZQLLCdLV3k;|JaZ@SBsk#_$sS8It$}W;Kh-l@eV=*bsoR5@? zZ1@VguQ3AzJv2o)!~11OT9 z&CNG8N(0m>g{WvXzBHJbRKH}1>6J{}N{WmorIREiP1Gk8%QP4%c^iX#;S#`yc(`cR z7L|U^8PZnm`QDOGH4a{zj!(ZzgmWQheupPJ3kIq)?(yePdV9#Y+c{6)9@eg9z`VbW zlgP%f16J|ycrAg&T^L_y&9uT*+%n|tT@l9w^Y)NMrvq>Fs}v5EXz%OQ*kGIkA&#yS zSNGNBIfd?v(F|ces_-(r?p!yBLjtF<8b8?a^&w80dd(6)3#KY&#j164hk}T< zd~pOtwoHvV#h`?%Z?q0r{%Vh5rBAP|i~B(rV?)mi+K?+7K`ZcRgg+-H0Exqj{qv3S z9)c*dDwx7T-p?P$VYrUGrX5Gv0ikGgL;%D+Wqu&+_LV6t@;ych3i z4=2Jc@u%ait?}=hcj|W@bFM9o9xIJ+26xJ?s@J_!;jOl_IQUA>5KF-scw^XmYWvn; zTkz}m3~ip+=x?o^3Rhc;!a1W`kDl6md~^Jvjq#F={fDj^w7RzjTX#L#^R3O%l6t@O z;nK$N&O`N{&8ELCy6Wkx+>=*5+0$taSltg?Kh(ny{!du$@%k-}eQi(Yp+|dqdg3cC z+8q6KoqwY@oCmRUc!ZQni79Sk`7Uc39f_BD_8I6ZFH)_ogKT4SKIwp^{lcES~tTIKcBD1U0*15>Yax+E#?iM6=^6c;%iQ*B@WF^YizdxY~Gs zy>H+bdhXo%Kd&ELx#cg5+xD!c@Tcp<(+Auuc5d0*R;q_mhxle$zM?ovH_a>IU()XqFUpKi!*O8$IXc{ztj* zOPhVhiWkm#!TeCPeRkioUhw&Q;?1m0yzuQiB6FDGyp>0fE!;M`ZQnO(_b2hu2%Gt2 zdBv}9_}0*(m8Tc)X?$>hDnu@E)OC>^**!JWjK}ujf}3H=sAlDGV=Pe)sij`J?^ zek)p9u}X)R(Pxe~cv<+QgFtp3Djir>=k41Up`0T7me}r|cj!@^5#EnkekE9Pzge9!TfTO#A#a{QdPZ<+HgbLHoqvA(g(tHzFU&rzr6_}EFu?23x| zbI}WRez3*69f+M@*S#kg?2XoXW97cXJZnsxWNf?ndxy=vhux6?<+$~vr7z6KtamMn zj@I8NJZ|8{r*SRnjiOz56ywH|-`fAjv+isUR>`V6$+Q}Vt_)m2JJqT13{$rmpSl466J9;F4LPpNj*zgbBihLfVU z)SPWcQh##aM*R4OKHnktxSEEB1|30hJk)A4X9WL4Gk$%;PpyeQMDTS4mXj}+Td z%#lo{uF`d8lKUQsVygo+`%k)1p@=Y<7FzsV$U^NStSerW z$2co_$xBV!7r~WTTN&k|4}axH|Iur#`$xw4|0Bt&{xbXa` zzjhkiwR3*%$iKTdt>slq_;UDd1!Jh7cg=Qq2z>O(5-X&1N~iAmK@g3GD|NqiEQVHj zy;0n$Yy4UYDq`R8IJ0sy-YLg^Juq274UNKvJRMU3EQxwbBF~ux=H+eL zzQGfYY)o{ZKp88YTIsLDsy9($VvShU%3QAjS00ECx-maD;61kPSY@0ji9cJOnqkol z2bCBy@2%WcT0e@)3Kjac8t&(RF4;*kaw}e#ls@P|M4Uwqzhy(Vu6mc1CnB zc{8j`Kw?Q50a#smEu9z$r*ZYt_4{Uh@+f4bDS<}ju6lXFfSf;z4^J9EMNS*1F3$y1 z0Yr*og#x5S8cA{#$dPI%L!`};Yt=&NLDqczW*%!~IEgRO&y{lIn&=9mFN6D_H0zz$ zt4^vqk3AH)ki)934fA(nvKs5vSZ-A}E?xWTJr{pyyNoGGRJ)-q;9)7T%>fwi=%BskQMMFVLP1 zkn%?$R`c>O)_1gItPqKdMJ)Kx0t_j-97*AsWP|s(_8P0J@JnIdop4oH1ctAA^?R>0 ze&@K%KmtMmPtuqjIr5!gAxnW2@R{dbZnHoQ=ZjR8J)+tnp^3oJD%nig(LmiSp|Hm(RP^Rz`DW zOXkOThIL|}pcK2%0<(0|q??RFCtdERN<*GXUsLF(ll(p|Q%|v^(F}9j|irhHKMe>B!@r zWET~4_M%;q_pGJGT%#D=Vi(SO*44YUrNwW#Ms1b5$-1~Tj+!|_>*;^OHQuC|jmIFz)dCCTr1&r04pjepr#;oh{ndfF=OjHCFa*uAM# zJ#82F$Hv3)i&n0(s&smnt9{P9)+*3{(F&un%UxyZ{nq~2))%d~*X8!buf+c85pTJz zEw?WnF&iT>4LC^PidD9raK4CFH`v-Ld*cY)z9d<9)d23{+YxJ|&U4~lte(w#}{gD;M%9sA)rS%&w+5d;R zR3bU9uou(qsJY^Lx%^KuJCx;D?V`HaTh1O@2M3WfsST9uE7?5c*n`dO$usz1w*^(Wa42_CV###PEkTOc5{cn%BK;0)(k>?=^p8-pvqtYZQRJka8i}CBgcqz52 z70jT5ku2we$(GY+u_R=;I009VNd-wtV4X< zarSz<<&vD5tY7wC&Si3Hu724+pU>H+n4h})Df`O29e0KA_ws74X5tiMw|iZ=w!19m z=PCbizOwfD{9Vah`0?Z!D^utKNA1kd&(+U+o2{ae&ec=B&)7xp{{vr{pI@FhxiVFg z%X`mY=xzsHt?+HVpli=iIAwk|xz6?lLzCj!iL+$5&Te6%+(0e)RM_<4!`1CK9iNW>bdP>ti^Cv6-uAn%8-o z^NGIs&{^N8YzJE}`FPrM2v!9ubrY=x;hCQ}q#}@_BF5p$aok zsMIg@{3^SA!e-VLQX+MIeqC?DTOm?R+6y5>%F1jms+k(fOxo;ZihM-xca$G!6h z6Z2F8aT1ypnuW`f9b2tL2$iEVKW(-kozEv$v@%!U9=5%nheli39p1|avp?%T^y#I8 z-G2FL2L7O3m$~{3ls07G5BA$RDAneCHr|{+>wC_y*LARx-<-cM@v``m$}sZ3m)IHU ze&$sEbgx~!fC=#u-Z6Y0KOj>? zeKVc%+L5Bj*;p9X%CgHZ=2pLu_seNP$Uqb5Hkqa@F*7LYR3o#@I#T&JszTI7DPcnL z=}JjdAk+2;On9XpgeOSAF9(senE0v^)g{%J<$C;I&Mm)@#f3i5m`wi74t=%v+h58Y z|H^V*bq}w=vL)VkV{V#5F2|M<=~y=x^EHFFi>MIpQa#M7j7gd9xN4bZjWMu>!;b5fB+=OMF9*-k!}tLLJuY zi;yKevu2Xs=gf}C?8!RKoXBg|Mdr7s+Jk5su^sUx(2LX>M42Qw$T^RjbqoQJP6@be zh47XQ%@Z+yz;E)GY@A47pP0^J6$WhO*f+eo9k>a1hcy}7houb3Zq^}ElHfZhZqhUE#tk{Yl^wf#!t|@J+q2= z!O#}SovrGDpw$EiQG?9(MecBZFZ8LcW7USOvl|{&WtZZq{l8cG zwF9@ToZyyIW&I_Vu;0Zpa_6BWog)Yn9*2ACUh8c%}rSA=uc)XZmAT5 zfg_Vw_KGpPq&{Y{(~SmGF@)?;(IfoFR8f(tdD^+}bfpoRk_iL7-vCZdh#5eTi7P+@ zG5m5oixb3zpwXrr9h+6ijOSv!0gpl`PQVDPH`v_v$Tnbpgg~B-#7(#oq?%D->7!zG zd0_Iwe01(h+oe20S@+2XE{UIP^mS6QO($8gO^dN{nk{7)DP0Y@HV+9f;=pKvRB!+x zqa>SNJ%*FAaafgAlsSl`QKaXuP;Z|ujbl4c_S`!K>~nKHh5OTPRW$|cPu zg;tF4E1G29*+TCI+&IW*L#-x+bSBUt){wg_b}MzoZPpnLAK3Q8M?P_G=qqV~GWlpT zZPfx_y2sqnr|d+FF_5NNpkxwZ(;=UMz9gmt>dZ{jJ$3UCjlwpC%S3Gda#0uAXo?1s zFp2!Kv%TcRYiU$r!^%Ic;A8U|FX9!(iW>k_c@VBWk-shvOu{TP!+z)7}#BcMoF z7Bg02rnXmHd?di5%X|w@ ziA#~oo0{Z$AL{LWlk3h)&hPx_fiLLalNIanc7!=zj_qA)FL?Br#Ukp;y?fR>UePKKTcIg)@$3n7)mhOl#)hgz@h zIwD;&cUSU{LNcbd;t52(DR?dKYv(q7?t!zbzx9IJ`a+Tu=wj^gU9Y~^%+X8fm(Q58g2Xw?Slb%_;%rmabwZFGb12p#P{7mTAa0a#oT|!|H&{Mg3~HHk ze|6!jf6(ygXI8G2x9K^980B?Y#2|Z_$pLb}fn!|;Ncdr##Bm*=!w0HV=TJYg3e&SG z>W{L}7K(>Sxm7_n5unh&rnU-OG2?+sOeuA0iM2V@DvFa*6Zr-u1fk_%1YuA!ZDcQ~ z7(Xf$bw{Lp(WGZc=(WIHLW-R6w1aRBtGfNPjQR^Qkfxz8v{hxn4&>`XMEVM z3n65axFe@CrJenHZeSa8H?@`t9O)?}C|I<}#qkLey0Q30hae(>QD(2pzf< zO6Djtut&05U%kAMvaOpY`s z7ET1+3{7FYR!M`gVhQ4Fcdq~ayMJZJy=s6ZFFmDk(lP$HEShmd(Bro}%81PxDCZ;SEjb&GG5f-lYgOkHi`N2^hq)d|L2q;#9BR_a3SS2w=l5P-G zP1jU zlOU`*6v>kCpCQN;muqvRxh@uKggw>rZj}K$E#J&IX*Iq#cxk!QbX%81DUALq1FdQU zi$_B02{^6-A}S`$b;_813G!5xDnHU76oafjt%CojeNiCcu`5}mNxr`DF*32 z!GMa$Jcnh=(x#$^3KSGbS&pwtODHLZs5NEIZEAivdpwtxp#`4QR~%I(^5JOnc3tQ% zwMFD9>lDei%XkT83|3HgN>=tk0G60ilfNrPNLmr>VbJ(ZX1IB*kdip6A)Go(C9*#s zoD&*Cp!^&kgR1W-Q=~hLgM6lep1|u!DC=Mq=?NHM^D6ZXQjd?cpoUposDT4Qs>B6@ za`-MqcunX|Nh@Wri7GGxj2XJy1?!T4vP%p1X4B(o%>fo+HAG$9t!L{Qj7L41o5K$57#V^^+fkhWK)q#rRD zAcbXMNJs^MKSe}9m{u+vEZ~<%LZUu{P#%Jpyi19S*{i(g-gfYTb#MLK$9XD2l_eNX z;dHaC_oibD_f9j!v{?Sq94UE8pMVFIED)uGDsM>)$MPDv3ElD`utYv=lNMVbk1dG= zF@~2F9QdJNDyeC9g^JJ`X01w857-jTH{Fy@sxOIZThym?It}6SH(!CV3>+ceKUb9M zGPv^=?Yn>b%HRCj@%|OTJVs=TkuYgvAkgN0O=vbJUv+9k5vJMcoFtLcbs2h_R@^3S zb>z7diwzD$6yb<>(!zp@Pi{wmI%R3jc9RGbO%2GrdQT{Z%#7tWqp7{w8}ZM~Tw-qR^LAcu>0t*m&_~D6^i4Hm?VwbI5cqN@wAcK5t^w zzyO9WgMkCQZ9V_bAG-br-~Ej@S(z%Oo&^0_X}-)x329r@RF^U|v8u?_n!AXz3PDnSEOgxQR&B4BsruCTAA2R4YCx3Ac5+MK&=Q5RNxS!EEORT$BL&b zNRWdGUzF}hNIzZa88TzWsY@&sHwHGAfkj%941%qd*~lj^QHBTxDgYrNG36Bqs38z= ztESL9Pz8Q2#FNcElqRhZj<8%cTY<`C2{H@vB#4+$YeYnDBY!HjdZa5PD|h|*(*?%dsIhY) z$~5iM;a82^J!f=;{%VXD=2G41jQq-UJ{U9id1%shZLLwPO|A|WOPu+yO(d?LJg9dh z&)YgP5j$Fi5}AFVoulo<@U7pLEl=B;)4R>j_PQqitjd0LDcemN+}fC~I3R}~qeIP2 zdT#@_k>z?4y)`^|Rk?E3YLIP&nWVFU%goGGf`z>cW{19a3imIEnlZgV8K$jz3l?+X zIl;k==+~yr&{W}CQ(n>?2kXN#+l=m*1D~+dB@E&)vtXaWrEr;>jVJY~LD!r>Ksw}V zph=CB>l4uuTZ%HhI@bo_q{`@t<2a}H$I}}*>J|-FrmQ6w<9f`vWZ0?!uj)58c=JWG zb!^Gwh=)HojcvIpj2m!f*BTGIj`Kj@YkzX$-2eJUI$qdk(3x}_U3Q5}5t}?e+liH> z9K}&(i7VLVD(0w-qQ};<;CYq|Y$i_co~StLaN~K>8D>venBBHpT8X=F7+-TAMoig4 z*qebyc0^~bim7*5H6xD8R;AC3tMK8j$ms|_Z97FX_$Iqvda`lsI3F{uR=s=ndnQmuG%`{xcwm5QI);Hvt6zW)3XLzt3lw|J;)?7>%#!eg<%7kcRI}h4D z)KeS~G#r`bD!;f>@5msy<))C^P}tvFsBgsNy=CL{rRGPYO6;Rq?-6&Byw?d<7RJp? zH}hf@7Bno-VFK7u`=M)%-NC9>RCTt{=h#;32gZFu~55{^ymJ2Wh`+{1`7%++;; zOv16NavVi#rZw{{mrrnzfUSkF6|Dssahq{si8zkRg&)^ELd$;!C+L1W#i zvnw}dWuRj$Q%)u_-B>}!*2n%592HNWY}&VA#htUWwM?gO#_d@|jyyJ`w*1$fBb8!O zBp*~X({nTm4!2Ad;$rQ2Yi1Gf)xvCCdnw}Z@O($6lU?>p9g`0g4_VHU2u@aB&3S=n z_0&}XM-!RnZj$4F>q}9-5v6JaC^OV<*_f4cjw8-Z@I@cI zN*Qx$Yi7e$CB1BP`*z~_xq8bfcRcGu!nM(Ov?zWcGKPu#QX z-oASud-~wY_uYN>-f{1@p7FhN`S;*s7mxPb)OG33 zwa0hevvaHb^loauwfIE!I5)JNA13nEzI%yuJmG)!j(dmy-SF>CUXV-w?z{2FpDO&# zE+Ruel{^0=a*;d#b}ire_hgle{Yc4QK6!Cyocjx%*Jk|9J74c>me?pA;a>{6 zH#zIBr$NJajX!8-Po)bbF8{mXlj{4)4|H+O-w+RW$}N98Z|eF$ z`%^s!`tE(<>78eHU6>!fseO0z>yxBN^Fwtd-c9XSHmk_)tM_ny;WP6WhOgNC@Oil; zZ%6Z<7akpzl%m{F_{_0;ZhVQm3oAP&@44~scm7aChAvjQs_+8$FmhYo563IJCjq~I z^={|Fv;Gs@m-iY;6I{gTH7rcs_ZPe5*10FYN>}b3{_)TZeL8mUjjs`LF3eZ2d_isito&gWus6T4zw(ES#QDAx z-|by&eE+R=JYJY!t-O-!AbbRN_h5P2-c(^2y|G*`HrLPYEa5R+5|IT0E ze4ypWT=l17`JWPdirW|u5wPiJ=2)(~Cs=+KU5S9&wtai=658&cySxBuNGrm#Ygm7ruY&KRlgzboa8EdEoiJ%F`1k?Zdv7p=?Z-fwNW+&N?W zgQM@rxvja6+Umx?g>akqba*&!Z(Wo3%y^rxbI zcn=r;asAe15atKHco$cXapPZmc*ZvG@`v+7Jz>?atc_mD=SB+cNDthe)RwCZ`tL8c z9P_WJ%-F?;ypazM`Md(F#y*B?LWyluiix+Sb!X{tN$40YQd_j<`~em-xkxfYIC+TCZpQ3HQZlV@84%f*Ep73=U7ZfHF~hJ@1=0q zE*LvAN8l-U#CqrMiwt!JqAEu?M?XLOS|s zO*A>=05q;d$?eGOL8=I%$;F9Tm*1jpN)d@j^ceQhMkqlz<^at{RqRl#3U+SzEMr2 zES03vc!xzK)#ILQ;AN!?4nR=h+&lmA3n$LqFqi(KMXZA*?UM$u!a|51ocNqIsp;K8 z143&h>6^#Or)ml-`dn$racWVlBZ$YLXkEJB!R5n6w6*MfJTG!1@?;pz%+|ss)2ASQ z#1&t!&&NryWozR(jdZ<=AX~36zP^F*(G9 z%eSno({u;hl1!(|17L!3iQLE;#^ugnMN>5t8FCo_3k6X`B`olqG`AFJWx*7KpqnMx z5A;#lpMpTn9s=<}R4=eLE)uIkB=S~+@hoP11x`|Z0GXnaS#e3P+bpQYtwuHGA;y4i z(}}Brml&-EIfL^z{KoG8C$r<(6|}U=n4wKnK%W7vA!??uHrc&m# z6L8z}H7l~Bv6ziG=z9Y;_f=MXQ%OEZqnET&(UKn~7@0MaOUFUTsXv zlrXtEsp*bI?=2b3EKrWJ8a|F)D~J{xbKY^Cbm4~bMQ$r> znu|1fzdIO9I9HswWxY+e06gY80Iyl(6+~@Y1WOzX*UZcn&$5-3rCp5al+B>%{rcXr z&h`<8v>XqQU@l?%Mx%m$U`%;atXl?+B6l(Zt9&^;uM}Ys>=}Us8@Q}Kg$+FDP{vLg zh&WngPt}5*bg};@h~l1Ummv~tH@g{xRcswqllIQne!6SVxy`4S(WGu+w^zdugfT+A z7R#P4(0VLhNbFi7Snsg*8_!fQc_K{DMjeq}imhl{*6#)Fk3@D!5dTo#FH&7CKR4Sm zJBxSuI5PY?yNfo>A9I(?(wWG5p5>|Nuti(vdnU635tck0M-?m4qTu`_Fhg6g+BlJW zGXpRgO&2Y+O%4E>PHT85H@`FTIVFt!Q{YP(s2RM`16mxirnUs(bS`07?1VYcb|`0| ze6iYHwsaX8&gC>^Y^#$w*GBG3S&+y%do9VTH#K++m1q@A*=zJJd!WdG`m!FI@dhw& z$8iio13w4u6ddlE>VaI*22|;ej4xvXG(Ao?tum7;{{k~!u+c689x_B7ai(sIxjSQ4 zwBmGs^bNbp5EYnEYLP#kD413gp#aXESHB+JeeQRPw!#SsfxFX&EB?|M&YpQoOuyBZ=9COM4aOsLqn|C7yd($t zl0r3>Dx$=KXftQAA6fxFa8cuO29LAbY~I8lS*UZCWQO}UlOl*N9zR!G?ld4%goTqN zJ+qNO6B_8!8lsvdlxLtASb0NQ0~u)6e=E|87HdjnLv%U0qegGl`@^B4GX8N!#WQSF zF#_Ob)uENWkr@`H0bjdOWe*l+sR?xNz(5n@XkbsdLCis{#wPU8iO*H{T|WD(-+E)28U>TsEF7`oaYD?DQ8^Xl0vm z=X15L-1g{g^DWh-ma}uSb}jr~csg%i2$Q~VFIBg0pKVTVc$J%B_mpNn-155RRuO>5 zhqv}r#s)``U`xmHcf1_FX1S9m7y52kD)vwEnBoAP%&oj(#D>x7+)@ z;>p{>OXsf`|D%~7+4(#6Jy-d4ziZ)&!~V$r&i3cJ=V~{+dimt<%al!nfm@B2z>)M0-)!77%Z<#J znOrLT#8U5{$6cp;wvMl@`stm_FE5m|_l}=wxy8PwcKZFVgs1n;7E0mYEj*w9 zhL`j)Zf?)>`T3T|UI`zu&z5HHxvaBm;URDRvAz4fE$(|4xI(oh;U49gd)DS>L6CKn zRqQ##-OSG<$9-;7yju5tPBEKHPjp`Z|no;HMRW96gI!I%q+Fp8Pk zxmw?(=fFSNd|A&AaLj$aGtAB_0nfBLGqp@SA4Ic}!_0S`n-|z%Ht!^D(VmDitn7Bq zIXk0W?WGCbUFMw#G^K2l&7wEQlwq3N^X162As`kqdN1_bf+Yy4kkj@SG;hipz+=Ub z%O^j1?`nKlY{;J~7NepLeb=uxnvD%Dr$#a~4wBJqG{;`-?Srn2BA1J)f2s%b8iFMP z5Nxw51Vxc~1k0)6M7A4f!9oF<$AB-wGZB8n1v_B(MP&rjZy0^e_WPs5uJ0=eNq4H< zxMM|FqReSXdvNH*13jz1^E>Qakif|J(Nd{y;iLewTc&dXyXagTV+C~r_P>>*T@2F^ zI?6+HVAg4m79C`IhLM30nG#W=Eea3kIhe`#RU#d6gvA`hczox~mHM)=-^D<(+C0En z>2MOuHG+qQNLUb&-U<2=_&FVGMWV#C317t+8n_r$!=ZKuh7%y1hy^0%&H-6$xo{K-i8xr7D=##OOZp+>;7^%|zOjJvlFCoaxEvFK76<3k! zkPjrlwS&o(_pp)!plqN707fmVR8}&PpvuJ}jbH+>blIqam_hLUkpAvIPjGwSn$|c&FKf z1eDnDNrrR(`ojAj)*roed6_s^O}Bdh6Kgvn#l(`0jlnDj!}i(o=dgdy0TX-lVy%)b zqP!^mysW#xH-J6MS|6;RbqThu)7PHKBm;u7S;aJh3aeO-Y@}g#peeU0gx^Grbj)I` znXG}K?I0oPWm7kiCd1WDcw2Cp2tXe99SOZ*#HKh}F;GnKPN#%djO?+-4~h}NMTG0v zEd#c2+6vrirOYN7WK{&d$^b@pA7rJWk!xsPY$H1W6ff?HP8Mh^?*kmBd~nzWL^O6}E``vuK~_{X)KcX;u8FP2j@q9>S!+Ty;+JLdZSI)d;d z9oAvX+ z+2TSRCbvh^@0noMXF@aCcxbvaJZr~7F;7?h_CGh`3Hr zwaaM0n*3bKvkW{J@|Q&Gqk|T@4rYnTzDY4FLCia%({{L!ceV>c)Npb7h&A283Uut& z4i##s!>!R;Ud_fGnGP8KR1S9KCL`0g%Mu%sdS}SBIFJ%EU{#K(98}x+DK3Darwy$Q zx8&ub3YZZ8x|8myX4dm|(nw4bNG;P_Pq~?{!a&g>L3UVP&3xP0*mG?*?wpBOu{-TD zDVq&7-b+K!GU51V_J(KnW;(}D4v9O!0Q(9GbFZ+D#@w_s?f6eI$oL~0KRFEVPlBxP z`9UE$ToucPi5X(BVs_beT(6Byvp^V|(X?z%HW~3S4&zm9Mmb%Hs+B4U+@T}urqGVW zS#qYkQ50KO@!OQADxk4I%-ac=)T^voW#+mub1tV&3VLNnT5bH5>PahYEbG#qpT*C>_;S>>!k#n;w~N zmtjR4>!AywFXI>-#OlGYlck-p?_s`&I-cnoIx{zCz_UdDjU^54R5LEzs_k`)G#S`R zWQ6d79XTSSoSY20~j!ZDo$7jF>|9^8g@elkI1>J;OK4DImVQ@4dDhy2d*WM5(g zNmPgphW2KoRd2;N`b2c5FXZp!Fr%AgWMyxr7oYLR8Qf~pJ8sf(EGw1zRdxL5#SAY( zoidDgbz4ndE*0sGZ)R+x1shujwh`2Kc^xBO%Fl{Go9CgYUX@-tHcM(Kd^( zM1L0!vdHoH-pfqVTj#Dq^(5S?d^IUzoY7maE#$C&FX-7V~689ecv? zw#o^2%r%GKxo(M0_Pl6+Wo+)MeB3jX@6%iS;dfC*{%bGV-H4Pgg@YU0x3~^c8=|iF06;3{G)6~M(!*y5H2K(KvF%}_O{6o>? zoV|9?Z$Fd&iaU0xe`f1f=wp7o@^mz3o8fI|@=ol2(Er%jI={4Fj-%E`w!q-pu8=h$ z)${I6lI|oFSM}OYgz@(lsQ&42?jE$pp6J*T@O3-pea3Kn*lsHmh5&^=)R3^b#K=~-^TOidXM(kt{C*UNAIM&mzlS{ zNV{I9p7(~6^Lx$lGxqdz75drpVm{fohjz6r^*xcNy7jeVd9pL=k6+dDLBF_u-YyOL zZr8%(v8^px8IdpM#=Yn1{1f@mQ_1=9lM%o&ADH{;A6)U}jmtYN0y!wF_pD~E0n;>e zMT_T&t)w(MNZX{0(V2F0&@7f8B zr07G+5rJ1@q)S*DVLy=RAWJPROLpvkbD;;AxG;(9W!#e_+D;*=w#c=?YP1wgN)#bE zlmTf)t{Z3KtQE`!8#ZcPL z#%|lMviBrG6c*DRBA!Tg?eSr5(TKyW2>R^jh69K#38vDnwo@dyq(NXn#>1|SrXgnp za4r+{!~jEPIrbxb9^$hdDxBd*kevU{&;teiyXJ zoR17)R_jS8?Ua9Ew1CFucQ5m7sJ^TVzz>4Mg;>B0X`i=~?xl{gLWJ@ydr^>vqB!Db zRH*oijve=WQ|#AEP=6RL=WULKe{F|D(LCp^gt)`Dq3+v-X~UP42*>6yZ@Rg5s5!~a zW95ZsyVLo&71cZ$gmB+%P2ZMs?Ror_Dt2OX>N&&GLN3`EooyE;@FwGKW$|Hvv%JD4 zex7r;3+JBBa~OXcoZD%RhKjImz}yUlzoq5WZJel0W+Ehk!ENSyZTS0!f=Fw^_c)%` zOdg*<#l2C@k;384abXo&&&R;Dx^Lgt|{( zYxYMjws6y9iGyJ+PPaqjzh*DN_8D2)538<)aU8SE6i-B#oORBgJO9H2g}2`M#`0o0 zTZX=AowAuxML$Nef+aDwHOiYb&{j>xnv-ve|G~Oht9z4m$L)(woH+BbkBVZfm|8%B z&utAFgmt^ID{yQ|EiE#($V_v!p}D1ibt$umYFb}A-x>BLlV~e%jw}Xn3^?h)y27`c zYseCC?ktX#^D?x#T0S)6UH0_HtV9j0;@coemch=kiHxP3ovF~UB9C;t^B-cCWsL` zqWxo#xpA=?z_!EaSI;_k{*OEU=+x6_$r8}k7G=6_FO`$w2=feMD7c8)#GH+zaEz^y z870DU-tsvo&{w8xZ7AYzK2AUe1P~Xypa|I_X8RotMGbPvgcTYLjM(AHTugc=%A{hZE(>C3 z{8haypfoZ~QKb4A!lZS4x;ep}m+6#aEIu-%y~c<T`d;*;@76Thk%cnwTcr*J|Z#F=V?Wor^anS$|a4z**x2ViCcSu zv!R^oz%-D{8FnY;gWK67K!3`4gWEQW_^1e?ZN8X9j)u7R#v`fWCRpOkD6$Nw5|CXV z4%r$bm*X0skUh9t9Bh>HT9D);*Q~^>ZBMK|Wrt?OUTs=3NW0piY_Lxzq1DWJO;n^K z(kcu%=034*wCceUioED_L$1D~I-5tVs1Yus<}m*RnizLuIP? zU5^_zT6=xn*D9Wt;O9`^!1hsLg-!ue$u)2~_*;-1s)Xf}UbSpY7*K`4C?EFyQ+^m4 z<~vZcMwPL{&W|f_wPi6cWdb9@#KEZ5Eo>jk+|fD7x)DNh%z#a~y}DUXf>n3!`RT3y zc~#WnAD4m zrTO2z;zysmaPI$YNehL;AU{FoK{~>kCrfp(Hc569XF9Fy9b*O2TyD^)HFxG)kHfXuhStqHRMXOCNK*Nd^ zWO3&2T6LUp%K>%`w-qIBR^lag`@2?AI;a(E)1DmnA-&4M(@K`JS4f^o5PQgF#OW4x z&!)zZ+`%+2$>}U%z8wf#p;+N4u?W-7Ww;Ml6-mZi;}J~pkWp?;DPu1)mgp*Ro+QSr zIqmYF{N&H=bNy#1P6b~+0|rfoteo}fzYGhTVdMehW$;9eto)Xs-bkZwqL{q=OChz{ zritleO6Kq148Qa~a3_V&<$(VPCO#t_la!vhr$e!h-xkRs&Hu&lbIBl_l%>#4Rr8&H zxOmxh=RO}TzmYiowT4c&TB;4sb@xpERrh>t?DN*dw8a|Fpj~?|-@RitB=x=$Oyw_! z?M)x-ncaG9Vf0w|SLXaf-N9n)m^c!@?d9mLl(R}aeFa|kNiMlBNA8($p)h~*wnIhI_%nOH z7Y%-|v@L$FP@CS;JG~{jcacByqc2ByGsD9x9wZ7&-Rm8zl%iv@WwyrnNL2q@Fa=JHE;PnjFHNF`u;=t z?&Ohc4}auTWz|!XG}ynymY>h>nRs~5zz%a~yfA#uF1*_PYWLKKlF{nDb3;4hZSjlV z%-;K6oqP-a`L_*RYu@%s{B3vUqy6DSTx2jclDv0M?A6?p-Te#q^@m@$*KU1FEB@I{ zFFuKv_!s?!S6e@8xBk!H{lNde?vev%SC$r8Ley}5U$wjA(OOuG*08xL?qMuB_(cK~ z$?@uD4?trF&1h|GO;R?v?}LQ5o#gq~%~x3gK(X6o7B~69waGp>cy_=l?}mLw$E zsEzpJzRu?j$q*!CCcoXPU2|u*x}`|Or>2H2@lHX&Pvgrz!RbP)4i2<$GHs4wjzIvg z(Tkg;7dg!Rhza<{8L&2)TzSI&4t*XZEVg?Di?3-dE-V&SO?&4^u8FDH2n5kbQ?wrSCYF`Sl zyBa43-p^I)1;<>1KsIh^8XLUU^qk%qoNVBBKiR@1Ck*A>J?5y%PaMB#46Nymny*UJ zTK8p{j~@G7M}vpL>5)IX>pP$M)yvtVqrx(Mae_5Vih!+9F~~_G85FG~#-XNVH>V`} z%TL52CQ+!_N|OB4V&3XjF%26f5eTMYq0aI*UqbZLutI@XXd>kA=SXfMS<@`?3iaUi zMXK~EY-$@^1PoA1P9$a}5-yjkzF;HB*OFtUP(Z)T&(9tD{mXA!vwQnWZSuNWD$L5R zC#lrYjx5vCUu={VZIf4ri^!+^SdL(AS&30AZFJ(YFqwelpUbA6{NkG{MaVbrNhs@% zDn9q~m2hCq*2=&jZGq%V8InMGIRrdjhMFpDRMJ%wmOo`Z(JUiMr-LIKTX%H-@X|j! zx7A%P!inQ?Jy;ZXYj|SH)H&jM1Ot61(!H$i+M{uhiRc=lT-i!wBPUuQLy%)VnM07V z&f(d5KFAqbja^0w_j9o)LBnZXpeNe3m8{0LKE2ILm~Y~Fzndk_xL~vQPvm?S04Vy-6F2hPW)SwK(&Spj2Mv0VJc0leQ)u8!+*vis6tL3W|I9 zSPJ3=TRTD@VjmW5iS0<+7o#&^EAk?f3m?NJ&p{6Er;W6s9Oq-Bj@^P&q0oZ(+-v{! zBm2HPuQ>KHod3R%J=l`!?D=4J> z;CmPT^l#6d*|A(27RPL?-DZrG*+PN2104r-85>Cg1PSaSMl{5+3tI#YP5TPMCKg1N zhcga~!08kOd!+Yxeem5S?n*%^M|9PKA)C|valnLOQwu}gygKI~VzXqexiR_5lNFq) zvuQ*$WgG+{t+L|qF)KY4>IbMVmMGZl4_8y9&Cn_uTI_1Z6fqPefaKs+FYXcpmbO70 z7m3WfrEGXjYjEq6#E7fgkoq0JCkE8Wb>eRa3XESV)1C6n-Z1NHj|lnEmKX~3f4V&i z$Iu?3*?n*(Y?Gr&u;5WPwvjrRYMP;d!jtl1JvdyIiK}rN4y$&BsrG^1Pfma5MD_=h z%Y%)XXjLLJz7{P4r=USzGAV%B9)vVb6KT2=T@V@#KtsKpczYUJCyA{e?Hqc>EmA!=S%1o9*Jd$%$H%miU z&chuaSGXt9`IkO@=Y`b|ys}2pRmf@8pkM^}J5;{pf(-T=r%3mf0WL%qsXftrH84d; zkW&N)32ao7Y!EJNfhhAGyuuSos^x!8Xr(yG6!wtFMh`$EuVErmFH6KLdj;RqwK}$K ztOm-t6xm$KKsK~U^gIV60-8HWoxT_1O-_}83^6lsZPRM7Po|5uFwhTNux;Q@P18<= zyrev-(HE&2XRbJWPqKKbY7*~OOsOm-zN7FCb-bQD5(UwbP-%a7o~*S`m4~Fn1CjLAC6NvK@D823AKwgW6y(z~Gvc~0W$C?mzo97@v5PdDiOVKF&6X8_rZ|5R)jLxx zL!1N?W9SH*;sT>=_~j6T8(;7^X|9hSe?cvFb#b(m%4y40DAx|{j{Izw&sfc4v~Wb< zu3^4H^V8>xw9#O-3_t$Jv;1P4PBcx4pgUc?4b`9dYy?^6igXZQvYMNrMh2flDVV+K zQ;=b}We(fgDaX(zaA<<8U?`LsH*)^Cfg4q)gX!Qjtyynq>+w(pFa)7994L}CUaLx z0BecS4}Sn$fe!LZ)4u!P|K%GEm)RZagQulAMlE7y}ShwVzvZh*; zBaX_F)ASAJU;>^Z#NCX~flx=)fta&vL1zD516NE9GkOjn%yFh?TFvSCBX;godxOm} ze9HizGRT>dBLzV#YkzL#$xLfQmknhT2M}1D;VB%*2DpP(1w|4B`Y5LOQ|uXu=UB$MrsnOtxN?5{A70Y=np84P@OcG{r{*TRDoO7Re?=t8SUwx(&7Bhtn zMaRZQCYaHlWv~4rVmB5(7GVYCOjR@J(}Oj5hXB3HekBpc8cb#!KkzH!ui!5Wes44k zj%pno$|z*wa$~<5@pc(r>za&qOn%y8(Bpf8iI(u~uym`kAwJO^%fq&&TpzhjMbGdO z+)GHtBL&79D;~|2ryB}oLHSC^2y);HH32wV;$bD}s*qirtJ#9zBJt>splM7~IU+A8 z=_#`BrZf}u)U=9Qp0hNxh%CH)HEtPtu~LWNhhv@f zAX;`@sQ3VTi8%pPM^C9Qn{+{M0_CVLT7!<1k%l%IZF;~-l1Cb}g;+i1gVkB`&NLZu zIlKIV87vh}dEk|rG00-V!w@L>&8jhb*32e9JLSg?(8G>z^h%G*iEvgB!eBnoX22sK zqI$EqnDG+N(r{AY(ymrm7j;oz++wsCSH~ttg;2Q4=vGpcli+FL!asEW;Lcxp_k^^G zfSfLLUGS}p69&ygc(K(rK2nJU+2RdXtP9AC;DWf1At0_nL5Njw5Z~7iDD!9>o@zf_WAhio?3&7h-Ta1Mo=OI}|0em$Vnv9Uv<7*k} zniDZr-eJ0D#*J}Z5k_qZY(<<-o_=|;ZO`JW4 z+4K#m+M@~)5ds~|#oWrZ8vp&ZPk!*+H=CF9(0+8y?RFU!8AL5HHB%vz*dc=rWrdhA zV9ZZrUKpl{n+UDARMdP#$G~73$7BTNj^>U+30&wE><0F6xSToM#O5hBQ}+Ta0uY-n z1Ulp^4#sp^<|^Ph0vS4n>oI&njD6!O+O1elmah;E05b^82x(e~r1<)PPcU|j0i(yB zK|7#tW#fZ(CBteFGm4_5UqSS_d$i}U-mO|$ zEVKWlfEZdxvgG6`hdgoX!_WsTv0~hzH~ex$Cu_^w6*XREouPpM3<}STeb$XdIm2z( zDka=I$%0mwC0NxkI;{oYvgfYq;xdRICFV0 zY4EfgWOg{5pzWo`1lzs-W zF8fxpj5)&(&&W^*!PmwweE);L`MGm1TqZx$0NSat<9c42vEAYW>|z^!R!Cww8yr$m znMef3Mq;7lPzdbFJgDCu!*>njTw3kOyIL$6RbY^$a6l))G0QmbS8V~^5wk1~>*zjj zXgLd-LV*Xsz^au z$4QcekYdt`wcp%-yzf_bd~CUH^;C90AfUUdoLD8L{R;$9NzJ%EGDu`JH8MylY8mFtDYQ`$xd4NxSMpL&pwJ?ul>^oMrDfm?jHapA5WF>QZy=;=C2)Fx zhcrzquMv;KBDN~prVVVAHUS$&{dt6*C9F|M5gmqzGy6x#3{}yf&zUxZ2;#q8Zsbcc z38kW2oWn(GCKIi^4eidt6&sW?Xs{EKgx>_x)}9m>D3`io#<(x9@OsMP6rg1&3ko->NYW7N$x2oNv5<<^qnUAYC@j#j;;sZ5g zkt|56NVhHJpkJy(-PDfkC67Q?9myk+FvZUR6fv|t3ZP{br!__8+7`_yfOsjrnkwA% zr62s{`&%3S;HmV7W>TmUgTP9g+zK5ihX5!Ulyp4k3&KDePlcv*hJeK$Sy#GE0T`*| zmrWY$BRo5n5gUjI#3FssLrAj1Dl)sE1_!w4W1FGoqOf-fppg0o0kQqA;kCNO7`GXm zuE*CSt(4-lriZeW!qHGFz?dNd8kLJJi+xz2glbz9!>0tGhSuicSp=fT`jxzbU@N>) z+`XXmg5biav;7%?d2s%7FFpAEkDuW2FNR|Jvz(>%1D0fsDUi3R6wsi_5Ip%%jpU&O z$tQ`}%$K_evhrJ%rhx7>vGgQCTBgW!kjzvMZmjE&g0zubp z?v9a>9)RwQ_)@2+SfcHM8$6Q#2rg6+AUu(ghpFK11B#+nX%n%C)fL7dLJKY%qObR0 z8lJL)Wg9$(%SXTXzCV5I?!}b&N`-+s{6Tpuwj?Q;RF=Dzsiq6WNU26DT?Y$@#55?# zpnTJ99;1B>ya}*WU8FVMUYf#BjEoz zm^pnByD{mhG(iG@qLu)N03V;XEs&vXQ3p!92e3Rckd}_4e3J{)8;z4W5#&NC3C{$Y zw&SIrIz#7f|6R#L0QhP=VCO(Ej}$4As))TZN`idIg)3Q*a4<+pYwWTSobfWqXC(k_aS=m`)6hgnR)C`rT}kOl)&9)L^$&|CIFK?Vs$^(pkkOHpD* z`bR!wpyfwS5w!%kAsc3kf(L#I8imT_5ty-R*G3oQMXWh#lsN54C8;6{Ym!X`X}Prh zfz~(vq5a%XH>Ih(49s~y)brFOrSmCC!p^YCP`g_iB?!fL2^Xwm3#bV$*CVob$CMSeG8kWu+PX%qZkXRhgHAo!-e zujRsQ%a`B1>`FGMWT}j04L-BH&j)9@BP~U5gqXmSXEKp|`3f47lt@eVz{6-DKop}w znM!m?#iTBJZiczGjLwp%0v%I}b^^RC+Kb8-|svXREfX!(;Y@uxzv?E@RT%E%rO)fgUSBJEa z8q^;5xNu;}u0VBqqrp8$9q_}%Gt{b#8Jx7{ftAl9yxWxIlP}tTVo;DX%`c%H?YUofT?5GZC3xJ z;DTBubmrTWWK3tGkl0x^Vh|cKV2m5cn%A(({r5U67Zt;Ea;IFqYa^50Ic4dew5Hsq zRa@$I*X!1V0_ zpn^D3w3-bjcz=XL{1kU&uK&}#KE2Y9=LEZNoZH3wK(f$pMCIsa;lR>1unV4jXg*X1 z<8tGKJ>(C_*dv*_O|O0C-5V}F_w}F3xDd>?3{PTAlhDw;r{aw3IH%?!z0UN?cB9)@ z)`*#-ZjQ!H@r!W=4$vDOE;Nk|M{M6Wy4L!r8dEL6{&{Qc>v_lu+hK49Q3)&2*R83% z-;V#R!`wXQl=sD$H>u3RY*$IXVLG%Dg^v)+F;9h=cD-2VZl=BLwP-k4 zZe(F=BJ`s$(}^GIZMqL2!$qsRw>VUsYA%gM8K*bXTg+#=o9shYz~;U!6skggo@G6?!hj#y zsC8tVz5;HmrkyEgx=l~Mf!cV<&e&Xyg>k?wO?N^!Cyedbk9srC)E0BxroE1HF83FA z-j?~DSv5wQ_S?g^Uj1n4nVEYk;`DVna`o=gGmnvi&)3p3&tB*o$LH%~l@Hv0eE4;I zzLuUje4eBmUwgLi`VNxB=WCjTm)iH7Iez2o&d!^j{6PEh8-KDK8G2njzCOM4ZrqIS z-2E8Nc!!Sn;UV?9<|lT&84+X<9GcJR# z7eB9QWH^o7j(67^?|Sy>gLLEg&}+|@)=4*<=9`|p^rwB}oA_SW_0-ok;&ONJ`CYH< zy6Xk?-FMdu?-@Kk^h)1rJ0~x1K7X|5@e4aAZ!I48U+GIDeG>W9jjtW`j$Rn%`%B(Y z)$T{{n4{hJ27a<~{jNJDB3^bc-nf7B&etS%VQBx27x$~k_^r*m@lktWX#D-nyN}|T zc2^pikjT#6^Lr-*-p#webkE_})et<~cija3cLDtUXYT8}DDW0vyE`T2jnu<#8rgYZ z*S*b>vh#SKM8wnX(cznBc8I54#-O<*G4J>tuNCl4t6c5AR_NFvu694QcE`b&iCn89 z_|?7kFLvE|@MUqZ`>n}~`7Y&Zmu}?Sm9O12R(NB7-*W8r@xC3Oy08`>yDIkLuJe82 z?)eLcM<2U*$HCoCUO4PLcCmC?`3)vANXi*W8Kf)wckMc!mk!M1r&$ulcj1jzzN@?5 zzDrtv|Kzi?(w`@v@PBco@x4y#T)TDoWWU!^yXmhfwQ<4R=c$tOk+NDA(BN9oOt z6S&h&&OeEV-PcKSE@uLalT1}) z#PjUs&ahn=Z+u(muFHqlT6cvnNB@Vm_Ybe5y6(N_jK|Kw<>}QKj>Pc~jAlH?j1CgS zt{_U@q?t1wnejn}BUvU2p#eEE5nPjm6dK+>eQst(bHqrIvFzHZ^P`O=4z8dk4o=e2 zUoVm(CkiiVY~mzt+TH*qT%I<4Djd=f+9dC1&5?lHKKIXeEK4(cX7=p8*4}Hcwf5TI zJr}y|PsI82hxMM}(A$!|(b9L@DfH|H-)qU}`T=X3UWuLvBet`4Z!j+Vd%sU_$rc{; zju+k1*15{FdeUp<9`y3J_~61tG~e#(SNe6mqgE+T`(7<~EI%@rckDN6I)2_S4@PEznr`yl(i5T9(MwI2L3Rgf z+NYC8)(e`jfX)u26&)D9V+CS&^y8jD>{8MHgt41n7@O-J4xPoqPIDP!w?4iDjNN#9 z3bLE1Z(!^mWWDsu;o9^vsp=hLR#Y?Z%h@yfbC!NF>|^nJZO7iQ+%#;p4BJ;m zeBa4EsrD&xuOY(>Wq@|<_S)h)bVF4VqXN@ z#_%JU9=%MgFWdG}vJ|oD`Qf1zi%4u4CSv4ma7INdmlrsePs+SQ0!~Z?4J!RMZ;NRo zZbo2knZ?ArlD-sx&m$jc_#(tmks{&{lfW1O93*59m_uyFeV~mbS7vffi?xZ3;?SQ-2{tQ@kD8fn9o7yX^YOg=zBO- zxNVYvcTD0@IYXyIPt9D>i1EM-215tZq=Ay`+c1l^iz&q#PGSaxjrMVqFygM+PPAt` z(CZPk2ltoPEmvOo9v@r}Q;d)HjAbf85=ls*DxrWj>skTJR3B9>vj%NN zFKZ)}ECCq_;%H06WQr!_&BB3lvJ*cEo0~=HzpPBArDaGcP^%mFxj>Lu=VodeBEte>0Q9H{5$8_aAc=Hbn=mboWI)rG_Xh_Ha|W(F`C zG#^!1d`=$S(3-SLS<|Ce`YeUU_czcwZvjaHj}^mKTKinHCp?rAww#1!u^tIWprCd< zA}%J_e7K8RW-z%W-sIcGUwq=|b6;JFFHhSzj1y9cZ66m3g)R&jTXv=)jX6Vd-k0=2 z?P69~Clhorcn*zb-Yq4cx4{l%UXwMQjdjV83A;o)`Azls}5km3MsQF|TYvMt)Exo-13%|2%j z+GP{b(*;k6FRmIuxtgjpeC9dfLMZ{K5UYr$A99;#;h4%+Vn!t=bDBYRruEq}CSJ8@ zes`2*xi-8u+stQyJcJq2iZs6zMxp6iVkHJ^K_Iju)iXW%z`Pe&aXo6)!8|X?I)a`N z{1+H}ieVlA$C36!gpFC#46}zWhJz@m>mhA|Rw6xJ@mMygwMG}m7q0!&)wloAiuV-z zpKiju=z1C{oncmlCP_gb;z&9ZoBhSChM=X1GqdcdF`p&MfY>;ghadtgSC|(ebW|D% zl2H++W&_t|Za&OdK?vNMia(4Zf-Eh236d8viP;?O-V&F7Q+QY=Pq2P*qpt&87s8iK zqBBI)GaXcJTGgu3Z1Du=T&3BJO`42}fy^vrFEqErf5o=yd3uXbgdOM&T+*&mPROJf z7uexsj~d)+DS_GN%EMI5w~bPUb4Q~n<(V-9`f%Y_$~1p7$biwzZPxx*va%sMKczzm z8>m1>;5|+Vwzf;TY-^Okl}Zo7;xyH#{_N*3y}nd=16fT`j^_|J@p|emG}F6*laIb8 z1CyhsbY}FEAX*VY9=-?}nAD&gc?khAexYhsE$B)=5*%G*xaH%zKss|#h)aDjrf^ni zbyX1Apsy@~p$R&ydb498I8>!&Gk7S-n`RL{7VZ&Tk*Oq#dg(E%pc^PB(A*M9k1J^P zag!Eoo0JmQQnR_n^jxY*Q@5ImuGKdL)mfXC0-%^ZhP#G7zbb`5DP>B1LvEn57R=}a z5~Z}GZg$5EL98rAwv@o@MbxW)FpbYuu9O+1g6h=ww(f{yiQs8veQ#+L$_LXl!Z#?7 z*eC3x&xOMb&j|M8x(5U$4b#zDDUuhM$l-7Q$IqufvGn5aDUD;puvspivt9}PiE__C z{nowVyUcU?V;~akGJE>2@BVnW_RL4ZT>zwqQ(HR@RemG9X&Z>J=d8Y3m)tPj($vtV zu8z5Zbw9Sg1F%o8weMm5kvqeE*=q_F!QHL<8~@7d^9?YN^xB=_i{sBvPYqq2YkMO6 zuKrizHDn7jJ%(QW!eS=+kc&H04y8)wHJHKse+sW`dVCBAGPI;ws)>lT(>)-Mw za<}+o))MtTv%$89S^oF&a6lg)8Yv&hw}pd7={r7e#1C_4mwAP4e9CXR(B9`4-1Sr2 z4iwh?Mfr62()2mYz477*n891ZyNs{sQ#$y$e*u2(?-UPP_wTlDw}--gI|`OHWqyH5 z{Kd{MhhI0n>vmh0+xjCfg}D=a>E7H05Pi0VSK`;vR{Y~~RV1yM{^7&6B zz5cr{w4a_jx$W-5+uEOuzNbIn<_GrG&i{6DZYl&Ox3UG0-WyB-)&)QJ{(tlH_fO?7 zpQ`M(Hw?E&Uj#vS^8gzD(8&G&W_v$fbNTZFa~tf+^l)jn)%Gs)O8?H0d&~#jcH_>l zYwYM$<%D1QzBT`R`xD_yBZsV!zM;J>6WbTVn=l*>*E_-+Ot6Oi7o+|mw*}y(SKX{&iGLVy(7Bc#;6A-Uxdq34f2uJ&`*f$z+nb*$sqx%0RI?C9hNT@)gq%nbQoV|ra5xeK}s4R#o3Did4tQ^ zM4(rT2o=Rdr^}f=?1_u2YM4etTV!Vd*TSn`68LoHnlgK|A>uYnyL8N)1Wvc=I_e*` zn2ZV25$@;e_DZkS)ZyWs1^5I1w7%-hw9Cd12$o6SLcc+ajTu52b4&(iMdm=7>JhTE z?t1v7siIppgF@ZyiE3((xqvHM!{?1aDU2EOd4>dJ3S&jKXFBR3(wA9d27#=Jp4%f@ zjZ#J*QVG6l`RxtPASxB~mDVyYc;u?^1r0^!r`s7bHT?Wt{F4>lnSE+8LZd`> z2jB*2mf|Gk@i?r(Byg%AO}bx(RDc*g;Y))nzJYqicC*NDlq3qkKrsOyP(V@c(2c~A ziI&9B(3XLyY&H*cJfIvhc!NqW;3+t^(JN4Daws*#ts{X~5n7rTelUQ6$%y(P@cR}E zzZ(2ds@+xZEWz=|x$B*6csy3C}-Ah2}(w*Phe(*JwcGACd-d2m44bRJxx@scSTNi0JqL#oSU zB0a+AAqEzb;y9#`@(3mxyECU#bGVM_aB?(G81tD`&}jXsQO8HnUKn$jp^D{;=!WUj z@)G}3gOPVoS}=VKsSA`n&hQJnD5S(e2U-3~Nl~nAB2wJ2$pX_Q5#@==UzKbmCtjtj zX@+F&iq&Z)SjmB<1$A^8^a%z%O>yPJWY{n}6D3R-!8IQRrSZ|m#G0a9x&G(wzbxIh zB`vPJqZr7QII})&{oSg}hd>xKj3(4PXc!m~_3MaDybwmesXv%ieV3scwi4DNKw8;swj0r^@(R+%Pn%bO{feFtP zxi(2Pq6idMlt@UCQz~k~LwJCWD=G<3QcYQJ;mMK!%Y`0InMbr{v)^|jL|7IbkcO-F zWUPdmpb|2RRXdY+%RY@5x>r)(1gIiXJJ<7DHS)viKwAmoID6K@ssxnL=bN#Vk{=J- znb`$VRk4bKSPH}LAu;-`%`SzJ27e_i#aEVo?}s1xgQag=u|n)QE38I^$Hijx){n3W z(vqc*owG70wHu}j3x#WZ6POLlEPrft#x1V3*&LzEA2+~D^3?05?RwHaJp=YmzX4{H zWp%GFN6%W%8ecR0iMhVJGHv1c(L+{uy#7I#+fx~XM${gSudjago4AF->Ql?zs8*ZO4F1}FP@7gMQP$&Y24y+fDH zmd?I#ScjGi`LRR#qnR;aNN07g#t3jgAJGw@g>|{bJjfP@y7s6Y?j2^qKEAhf$Os;M zMlUVuAB(45?9<_E0igm~_gF5NvT{$W$E@+sEFLxXe0#m+@+D%X%O5kD244U3iDL{ySy$w?^&DhbjYB za#Q3Q_Dph}b^gX^&z{QrcU4;IaX0V^PaFBit+PH$fi@k-y7;WaGUg+dTghA7*Ni^j8x@KyFg|V+)<+?eM};cG_nb|Ux&o$_t?D$>jw%p|fs87E-I?~jD8cDM z)D2^YJpDD(J{i@*m=S-HiOTBGle_FEyT=#stzkH@hA;M`r*)sc+7=yUI;^lia}wUu zEwf{c^SksyH&|6?>x?V3YT9+xXNgSaqtrNaLaMy6u-t-?A7Emfe=J)k7BYNVwmZ<|Y5;dsI7i2BunwPFuk{vIhLd)ctyEW7 znPWo!P@(WBGzS8`DmWsRX_!UrGnvl-8)ol;l>{-sghQ|nRwnJ4vJF$9P0GxiFmqZ6 z4WEF?0gu<{H>!p!;B8%?qcid7HgD-KBU+|oq;;TvRhU^e`pXGJpi;OlK6m4Eeoxf9 zuTqIB43^dM*>bd}yYSt**KKN0;t{Y_6~h^TbZ-$L-4s!Ft}?Bk$@gy?eOYz}+Er0$uW_ozR5-iziuw(^DcRJ7C-*|HF9Zmqyxe`a=o|b3fVKAm zYFz1U?*^wA^x}b!fK!ZR>|5(*I=jN|`8hy*LD9u9uMCB9U75}=lYr_mk{` zAWV^mDtiUp_UVVrUZ09rVxWTW1Y397+O!cvcxIwe^%1E$*t$symRk(#orSdKixdfp zjGq8G*&obTqTK)p3xw{bLMX_|Qt$8SCp){ScFT-kGIBkq!xKXv`^C?`e`@JwG{N*h z*+Of>*hyzdL@621%*x&fM6;rmU>G8@_~}-SYMl@pMhY6QW>sTMJ9g*D7(V)IH!~yM zN!G~*S`$*uiPkbQ2!bx_N<~{k4McO}>F%|l?VywrT8@!6fpsSy7m2n~_V5LZJ(mzE z*cnAp`wSwsCJnm2pdT0%Y0?NXy-m|r8Ng7PGD)3Dnqz7~h_+SCZR< zvPK03Ket+}WVk7A&eX9q;JMwAhQcSh38V4JaU0!_8DcG9C- zfPTifk$k(tmh0GL8e6M}FPwcAIV<2Abs@}RgdV^qo5MM00WVE%jm{kNa{>~i1d zF(f%7bC3}^ZUc&mnT<4OT!y5G^Iftn$-cGwusoP208&vbzO}{i3lSV(&IVn)o9DkK z;{1>fk#t|IzV7G)F@rOHZg#U_$2Pl+EPtBl7GuC0FbeyDxJQK?UQ-Dm2iuBOtwh&0Cum_D^`wJqicbiSm^gx~xEGq+bY>y~uNOZ;pz}vQ`BL4g!aWg*h8;RbF zrQTiXH7Y(bA3`5xmFJ#&2AWTJ-P4|hNI&+5NDo#I*u%jn12rS5$nzo3EmwdcBuXy! z>RwNMs0W$Ok2aVLBGZxVl?8q}dF)so!JdL~p7YfMo#GQ6Y$7(P7B5)-0Sk*!N6|^J zd%J>&M!+x~_jy>3I0C-(q1XTR-AiqsZS*Lyl6oTs>wv(-2$kwB%te(E9}8;Mbah%x zq7~*A*X|SMUZ5Y*Gt1R_wGL~)W)|AQ5Ow^B4sYG)Z(|soa#w@cF#78^F;>&L#$>ac#!#)m zxsh-LKxBSI6>E#0b?I^IRspLzWeryJ(L?4jK}9BC+%L^4yhViuXtfKh5O#Y7k_YYeVi&7_s@U~p(-RGVY9ow>*h570VZ-=Z3ZA4hRta`C9IT(#Z zM5Ubc(7x)7#R){vd~Z1AYz${Hk_)5f-RQe+w9pA}(*b)KWc4k4#i_8&S2{Lq)#EW0 zx3!J_<-t`nFzK}Z(n#ftpL_1~o4vNW%vQW40yGPg=&y5#P%hgu@DSTI$aJNf3Q2c; znmq@w(wRz08QQ+WP!vfQMHb!b?_w2(5{2gBN?SzrLOrDG*51m_coMTWg`uv)%!$;N z9+O$26=tG%tuJsLP$qHKG@1E6i-R=&SAKg30=_MmIgW<@{aJO>v-Q3uw&S-E-AJSjmq~VDF99?E}rD zd-hel=^^Q+32GO*SL(}Ije5k4V55_!TC}LK0cu#^BarC$$o&z**20lEjij&JK?_^IvMp%}rge6G>oR&Y2e3@%?a5n>$aAa<`=9iQ{-I6 z;bg_F~0TGZxn^K%VL`b0P&5++5#wJ+n--t)@i0gR{kN%`&h$T6^RH zCxLHPu~=|xHDwnVnY<<*j05e|1HWv!Y{|QJSy29$KQxQ~a!^qQXL$9-0i#I4r^nNc z^Ypb=^zZ-ueNr07${UTx)3jDip62&|Ib2DR8wg^)v+~4S@@}Mwe}{v|k6UumDpPGM zNBYH;3;BES%8U0tyL547qfuOjWqr1b{M9CuhL!??et8|>q^1p6?ut}@K8wDvWPIJl(ac}WF+ES}N zU!)Ng$|>?LJRK%4~XeY$*MNwckhw zTi4{(J;&^``!bK5*j5|ey}va6@O0NPd+alts~;)sIk9bje9>wtjgLf|4;v^M`%dWh zpV-zt`n{oW{NegIV5ST_y?2&+_ul<%dFtI)6+yr?s#i@6Tvd2{OX=RiiIyH@>Qub$;dtGu>!!o&qTcOHrdy|dm)(*CIvU6qGMj_w`%j9b04(0zi$ zE!VVE#-|n@Fd0mvJs&RZ8N7Si3`{Pgz=jL)*99&&E7wJ? z%5n`nc0pEoY$(13vr{Xo$FHx| zuMZA{vFan;yH8wy{Q3X{U`Eq6HiVMvEnwg-;;qw+l;PJGDx<&0n%5PHRe=i63Z#=uizgimk@f5(13LD}<;F zC5?kHj`Uhlwl1eM{v-(6l~0N^&@u~MFA zQAX~qL$M^qf+eAR>7y_I^RIvO=WkRL0yre66mYU$Dt^;Tzd@80IqadJr|Lq$e2jcb z{2UH{<>5EqlDrgU!9fS)FY|`kAxYqH1-}ay?ectyrY^JlL9+tnpFULKaN&@jJ-MS@v1niXBQ? z_M9Hzaa%L7-M$J9_joyQqwU%F4yr7+POD}w0Mr?|mq?9*zByD+)&a^oL;&@*Sx6K@ z44`qG!?uj9t*SCCL50V4=2m|1CLmpYy3DP@iE zKk*$)E2(CWD(|B6LQ=>e^N5rc6&OD8ei=QS?=|(8m3V2>SN>qn((k;xLEN|gUg=S9 zO?%^$X*AP`}>mgd= zc(mqbxtAVEFlXW!4OIV-MAa=CO2yNLTx=mX5#>G4oY+p#A~1j{ww1T=DL z+5F|lCvk$7MF85f?GCeMs!|z|#e|G1STYF$9%e%@lkipt@?o^t8WtzMM)uIOTmrK5 zSpF1D^8_PEnj8^9t$DlOb&D#5fB>W`mU~FSlOo;}i@r{DDDzz4P-+k~$>6+J2NMHn z9q1XVo}oVqfRzew)E>3Ln5u~1GV|yg|8o1=K73eezyZmUe4^x=0P2*I#$ZE;_n288 zD&dJZG!)m`A$4bbVPhLAkL@JSLZtO+8AWzbg*VlI&J}#%DVaDKM=lBJWZ&p}Oq?$a zS_vuXQA3_`KxL7QRDu^Ismris<*aZJm!TUBRu@eQ!SVLU`1)5 zbR0p3SC+q~;KC5;IFVCnqfXYLv)j_XaK;Dehmo`@nFnP{O>HO&V~IZJZ_21Vc$~(pn)|BBydtS@QU|4{G?6P>i|ro+v9XH)W*J(3#d{ zhPY&$rQteAudu17ux8L<4nk$ZC~Yw=_I&yd*C54bdHD))E%D<(fTpZJIb;^hohpRG zi-(VZ?a@6u@Z)S3u8EOojnGD_v~*j~?I*H7{M_=EbdoB3Gg!?cj7!;6PGw?{=}Pa$ zv<*K!lYTToxQ%=?O-M84HR=(kDx`>1xJ*{YveBJB7pO?`)gmI^Pa{sG9S8|9YjVGO`()5utEGCnBI8jn+S1LDXZAR!(^8`D%si9n2CNQ=gty<68g#}R)z-r%HMzu=(wz0m176CYvBoICIKwQDW&tW@ z=A-rT`b)Pe?(uvp#0u!~In2Qxk+!idQ}vF8|5CZhK48&#GCm4>n{il&EFLji^*Wjt zjlC(`u7=f~Cas;;N_WSyis28E0g;odPnlJUL!-?h7fN5I6#Ur2lROS6!VDDG zg*N`m~g>`B(GX=Q>uYkhX9uk6IULtgEc z(2JsH>~__&$1E>8j1xbsXr8l$Z_@uj2zC`{I%zRuxwaBAzf^VY9*RY#^uI0S5UAZ2 zT75fM3$1K6kuZg(!B2(dEVONL=~2Q-tX^jgw7T|Be)gCDv2<0pq{<;OT)L9tD&P|n z?^!U5VHWU2RoYl$AKM7xfi8{$Iz}~dD3{IS0ss(8b5P~wv|(~uO6 zLzpuBZAN*dJ*Q8xLJQf2xxwZ>^?W%t_@|f!uc1FEN(31wWz#6N1lp~T8z{>Httz5k zSr=+7CyHFv6IEi?+>yP5m(jS4inhp*Nc)16iF`+Jq?BPv$(?@fXYL=p{kPK3lhGDV zQuTp4N*bz;%^0m%L~+xGjdW#AQZ8hHxl|UMwQ1$pLXAh!$mAttPL``!sZPLIFUzY{ zR71564-8?1$BcqJ9)oQqq@ri2%#)GG3Jtjf|2V`>YSlQG3b)c~d6-g5CQ>wJj7%XV zhmd)l>7myLHC=PS7MC#^m$t`EDVfrmH#JybQ2~K^qB`K(BD7LKEGJeKx6RaAX_8Wy ze4H3DGd;c(Zl=(5Njh{Z>?Q=g_|zvq{gXckmp-*qGUkXIe}qUJFb~@!J!4eXlsL#b z^Q>5$Pb4?SYCSrv+d<=rv{Ldc6qCDBD@yJpG%2}~9*I`UYdIB%n&<^_J{Dd>WYyw} zXqKRGEM2tTC-M~iTsjzr!fX=Mj`6R zw(&>oU=)>&s-Si|ufEW6?eHZ(S_b%08ZCut7>bk0LtD?MN)Cb<-iVSnoA7499AjD$ zB&8@sV!$=7J%^!rHf>bWBsfy)Et8e%LOh$KbbTdHIMTh-0W(PPub2;oq-k>!^*lX< z$`U|JD-^ZacQnwJ^QtGUL?Xl0Q0`F-*?@;LlyFgUG@3>reV!VCk|FBBay#a4deHdN zza9k&c{=5=h}<+cELbpD_YYsYf7Mg}B>8ec?N(Lk;!LXCI0E!pxfQE9-{4cAefmm{ zpVS&jvt_I$&EThrURutUVv_+=UWaOk^No~)maJ|)Za5j;kyx5AN3uwE@Y+_%fL3EndE+D_g!l-6tnH5}TFG){ILZ$dF4zy_W(AwPzm zL*q(65;l#=Qat61278X@nUY68b#9@?hH znZt*q7eGG5FL^|lR(`ejZuuNTFsvSgS{shF3gC4OFQ=H!_~R;CNt2D{+v^^7)#SM7jvifP7*Ty`-_w zL3G9{+JWluZV4?6mT(kV!(mzL@RMLc>+%}A9GZU3`tEnAo_CCr93SqAy@e6;l-x*eoAcz z!Nr42FiQ>`lvF^mg(=j4nsLaxjWUT?Xq=@<{IWx;DHqU@0}GuHG)^dp#lXN9Kam48>=_O4`utXcT2-`O% zGITf=A<(jdV|cneF~OCyHqC@1%_XOhfgDp@2B;<+bS(Kp!?gH?G6g4BORGViWyLp? zl91r9u+d8jqKzm`2JR|@d(@^;f9?(|~jmyUGlqHRVA2&&g9kNaj8P#TIIF)e( z^I3c($;u@Ua>~M98Q6ntb(>`2$*-8PF)JsukQx+h6bQ0OuOpeq8Clyf-ONJ-5>Ss%-#v@_I3Y_}l8 zcf}tagjpfB_|W4--XJkCK6?2t|L?zE`uuAo$l*j@Ch#IZ6XYp{&uT5Tiy>2Luu(pY zn36oX3^b`sbA+PgP_(2-Gk~Z?ZT6Vb!QwRGL8v7G#*0kr%h6$_gk)F>9aTBNGaP5x zpFpxxL-aG+fTu8=L0u5)Ax9MzTw`D`fI|RYfbFiRHjc!kOkKhT!Mf`anzx8&wN;xn z9aDqq1Z$9|5snq?Ty)|I^NJ1ltM{`Ub4Qe7Z3QGu4 z##|bhl(iL^#n;llqbz;k$G>{$ZBOkI<42BG)fvf_AT%SNnWm)fK`t!G?qnuSlY0i1 zg(Q*AD1phtvUBCQ8M$=#Hse`(U~Y8ety9Z#$ni#pR69c@VHMX?Ihm#$w%+{^m`A`TiD zLI)$rNXb*zjTA#}$S>Vwe9XE&!yxalO9+H;w56YQ{O}vAuDmD}`OimJS|0|oD}bOZ;Qxi z$+=aNXDHvw;kJ{HeP-otzQHZ2h#Y=e zWl7*;X>Kv8kVI3eVVZs5#eAL)K)g2jOXFy~BM*{4UL#5(MYL!_E`A1uNa6IJv<)&_ z`4;r%yTl+dU4wERWVu4FNT$dP2L}!b=^HV(B*sWlT4Q{Vp^AT5rLC|~L!PKanN+gy zQNEc_ToRFXNte9BA#&)=L;53SMhm0>%O!)KJYwJcv!DIs@uffCz5H;}5H*f8gofgc zFtw?1;D!sbA0T8Aom3uYf>83KoF?NvszNKJf(RysmNObcr}QIUmg133deDYa@-ad+ zniB+p*X+rZ(onG^_p*yZT#!O@kPyzAlFTKzwIaAh(4_V;O~IE^*)ggiz7;;klfF-X z_R+Ek+oSi(;b>&(Mu>OO3`7XIWSz)xFLx1w=*EF8LF72@$!}#yxXNi$?5o~y&Y!yP z(wo1&B907sfV$G|<%s1>CS|3_5QfGgNqhoQNFJ!0LIYZgN_k_bR;bd}S?(pzQRX-P zOMj39ayJMdEKU!@QOk`phhoU&jvNj0QmsZo| zf~+quFXt}J#Bg~-nkHJ2WFu}*U$UWg6dX^NK=$QvBDNB{D(RbQAA0WXKO zn5Qjo@!>qv!Ug*}HTbm7PJRrYbTs@M#G%jTX16&kKytF3OlFRt5crETG>brH;>(MA zQncLi1ty!=Ywo&?U8?xLp(k^C$iOmaG_5nC;@+KG9{BAPS%P; ze1L&EHEYC5$7VXz)|hzWcw?p)FLpn0BA1k#cEHy^G^@D$f0R)=*|>^c*(pxI?o5YX z&7al70`t=L{^__CUa*3=Fj~;YrsEEiXoEEfH}}~3QYAi|M@I!3H#e&@FRg{n8l~&3 z{h^p8!zc%!%IrXDO_GtfmSaa~VbVXx-AuluB4I{V08UBJ zV!seiWbBwtcnl((GuV4EE9}FCE)xV*Jnn1TL(QhiYXpe8#j%C<(oR|7Qj2rh;+!q$ zR?XQvqIzumN6g~5pB+nl@UF^>Q*ofOInfpENqeL=h4azuma|j7kBcL0T5H9MB{3t+ z&(bKHk_zQ^=)$w+tR<>%hK7YgFceRT+4wEXy~0dd`+cQpR06s%$ylMN*h4t6qGLt3 zHXYXpB`|?8GhC$Bjx0WG28c{I-v8z}iTZX1cs-9G6a6?mYnwQJveHjH0$s&7&t6>F zs-K|vSrY^P3>_drzX@5r%Gc@P=qg_Pj4PcbH{|3qJ`+m8fGZMqBqEfH8?K_XdVm7m zq$%y1ceY16U^$3cOunv3eQ~M#8>im8_FHqyJW1&LBU-5^Yn2w*8Lr?&bL(c!i3mo< z>oOBe8$KV+8)mS^-)P{K9PzR-bK?Z}mKF*ot*0~)`9{J3)*Sb&Y8%m6vv_#@u~}9* zBrin$(X3voWqzFa=6rK$;hnQ_$&W@^X)-ZyO>UcTyA#zzq0KNoWe-u$9(4jLux32L zRoT^aNiBOtjyAyh&cu#G=VaqaAYhGw4p{D;I_{`!HIt3E0YpF0`f{EZQVNz0{M4t&u1Lg}mZ`}%${VEvF2KvxfT z|KyRr8v)RK-R}hE_A9U6`p7{Kc022-Pm#JmOnS|KYIH7>!t5r-FJK2lN5Om0IMB07Ekp(B7bY?-?Zdh7jJHU?XmvH z?%#9qmZ?(}60W-$MBM&Q-Fm}yA8o$)Cvwt!^PY>3-XbR-G@$dz`)_%^`6B46Gw^AF< zK)sb(2>xyU-ygqq`RwOZNKkJN=6_B-KJ~p@f8rmNdiakwAH3zYuevvkanko6D<`iW zb#FLus_$O={-YPq&(KcnZYlojrRE3IdT?^Ea^KO5{oH$E=Dy~O{g0ly^@*AL)04^* zkER&7r_vMPW7CuTzf&Pn?#utYf9&Ahazce>^v_j3ocmySu=L85|KZ*b9!gKH>OIx` z+DZM&@%!|j-ul&>ALHITdQbKLZvFKq{6FU8f%@x*{8PQJRLlULIdDj_LTQkz$Ad6bjVD~}Fb z``v$Petm|*|FrLsgUzo?HRu5c^RIvQqn{XE`t#?PWi`;S?&)Nq9)>%&7J$&pR7M&w zxZks;{93GSkM6at>GIyvSHXr&QE>bG%`b=fx?a-`A79Uk;;Rbd{Z`e_9WFoCJM3O& z%;>ot`acQ=?t^>Zo-41*?YH#H?JbMpcJFiwfqPr5x2oH%t+j0(Qw%|iG6L(zAtb7y|3!!g4zAFhSTEhJKIj>J-BX8KQ}o;1j$VEIe5c#%-w~Ft z$>nwomdC$hmLIi@EB*YAJ^mf#FPXWn2K;UDkxpxT!Ajw8Go|uOXW?_c`G_Gk1WJr5 zZZ=;464u?|+Z|;vVWV1Sw8<}*nzNry>TiL+ZCzI{)YQvE)=B4XGPgeDc7qAK=Ca(8 z+?>_&TIgO=*s;~K#s&ShtUni(pY&GHZ><#l_U(Cn%=}Pj7d8xkOgGX>&WGy{$H4sF zQ9C|=*-X92g4tu?gWg7~H%}CFa(Q?MpE8QT?|v-=(zgH>u0I$?rSeu+D*AOv)UMW3 z@LRK3^uWG7uNM-4&Fgwx3AZL`J)a0)_46I);$@&;vt(q8;eFP&@Im+5!t}&AV>$atBeMhe+eTGevZX^CZ!*EZy{3?--PD??>K);7Rb%Trhi9yR z`1AMv>)KPd{cm9~T7Uyg?61~{sfIW;DV+?(!K$#t0I?@bMmA}ZfuF^ND1Px)BJpHJ zGHEIcv(e_UZWJ+&(QeX%H}a{~z!kSJ|3sy?N#c&(aE9BW2(emQ(#74|c(IW|ppuiL z9k)De^wc`?Fjd*;Gn2k07`Q>mn;h6>ggK8v+kG?U@77Y z2>ghD8AFOF#u#)V6|Fdtf~R}j+BW)pB*h&ukBO=vggGLq_+e%S?S@7=0dGlipzrrl;>a1sxI7;uEYZi zh+1QwK43X6F;L0HXTScD*PeTQ1sDe2wW^RC+OmUlhR{kVe`Kq_Zk6Kr-?a12n4922 zUC@1?{UR5Ltq5=u0vYK6F?7gEUkLkMzb6A+=i%e0?NV=4g79mn94$0k-5Gadv|t30 z7CU|{MbAS*N2Y|`M4iD^ki`ar4DpP_z|q$5+&S@h^jY44^x}z18^0lq-;)c6r8P6% z;XEsaS#qAX{-zRUSq+3Xq33E?$L0s*7~E4+|rZRrQJ3l8yhr>*W+fBci*{k^4E&Pk#iB8rtD6yNMBJYBvL z95I5-ad#Fp;k-0n+eLP`-yS+VwAZYb8waaI(U%GoLAp*3Od)Lx8v z#hXwQV4obB=n=d)@|wXaO@#KvY_JxwNee=h=4RMX1+q$G?vAJvb~!V7mIQ!BMI^BY z{6^a3wW^y?aWbIEH%(;0rq(9lti~LOfg4k(xNaJ^9iw^IsLraqv$oTZiJVi?a|@Rl6F+$;q-Vyk zRNS4%qeCr^ zx;lV0r^AJ9UWX2@?A5)mZSr?c4;6;544>8i3bfY>Shl;&=CR%ZmZz3pJUqo(RPv)yuHTe!i#sRWMEcdUW1?X_@dQ_|h% zKNp)*dTjuZ*$w`c)90*PpJ;z=44|L(@S9WCr*fsajT>L^z8wChvGY~{WH$`6eZiR% z)`+opuK2tMP0XHwZM&k&3wjOQpA*)`Ov`Qhj?VBV^FUnuj`f4flXWkL&t5-mU6Zd| zEWEpT&ToF++U*y2Tkoc*FVrsVi2kZHWgVRB(+~RI6iB!F`OD=_xM+d$Q<>fh;wxX; z?e~<=-!h|z>j(C4SiIRp`=`LgK`-3b@4x2{O64yesr~8P5YWTB!71(td%O!h;L0|e z4?bTy2lVelBPVp=ri!nGUduqw0q?K#{=vB^{Xolx_M5gn{Y9#8zdC|JJ&&87$wHfjeD@^1|FXJy}hA z=(w!=*=;lWBQJ)>EWh+H@JPky{WH>1+O~QfBX{=>e=w;{KXZ_(>upbtod+_jrgQ5ulPrNJbt)#+8GVUL}xi-_=pX> z(wTU+&F?~KVZd@DH;JOB?G%A^9ZO8sTEs{v3pqe=7n*Jsec;Y?g_vpVFgMYK3sTx<*gem0jhuWcSD*kdd+hV~Ff z450`J3pv5a75gfoL3t#3dTv$oNziwzZO?X|^;cPRf8+)!QKal)BpyRiJGP8B zORR5-&4HfjR^79Mnf=CsK(H}TGI;LigJscWnliQcd|Reanb&7^fp6vCqLnI>=&gvY z$x>66ICUpJX4wP+5LD(f02C67*|{RRK?g%=kH~hck0Mu97Yu(1fUKIL+2ATgPesb7 znhm;-9HQ8?M-yl^8~U%k_t(F0Ez>+{x~n3UkCZ%O5QRg`3|IjS;vc@xOw8N?9AlZ2 z<>Mx{V~9OHfo_v(H=^6PqT2v<2h5J*Y?-%9mmJ#|{evEPtBb2^Ue?(g)k|6_R(qla z5qq#X3v-GZIG<}QJ~nG7aiGd%o-+_S$-oq2zEaDCR4F`c*wkl|_fV`E_p<54@@j8Z z_<$~~+P6je+8*@j25%tdfR9#5#R!f`G2&J+X~kFz(=1R^7_;QdSLA0~lJ(i1T-Ne?O}+1L(xfUm<5vnZlr3#T`Y2lG>8o=(GFP7 z>`t0N#)HwUT1JJL?F?Xz3~Hs7&PohddN4$0}XvghyxDFqG7kx9*j0hF6eOrd#V5uk6P@&VWt zXE{NimjRI%m=eI0w#$;IV37r@EoDXq)l`ikQ24E%YU87=3wdYS!UZqcQxO?grTk)g zONL@%K|H0hHZ3C$Np8xi-~Y+~Jo2TXl?E+3npv;vW`Gkv%2-aO4tXS#a#o3vIGCwS z#!^>|{E2B-*%-xTpAT3{Nn-{eF0QuXR(Cv^M)BAfX-;=m)RN=w1XQ4YUQG29Md^3Y z9HoC?!+Sz}=35;?MIme~Q$sSJ0{v@fkulJ>N^vz6hmvK9)9Xjk%PZ^3p4x?_Rq9 zNqL{cZl8;5YQ1z}=8#`B`T$28i!#^fV_(x}Z!B#2)B;;R4VL0CKI3DS4kslqyD@sP zfT3FN0zW$r`@*PozBJuzM-RJK=vVmb=KS_DVAoZv*?r8Nc;3t}_#OF)^Iz|ct+;;8 zv6H8*#Zu|zLl>>Z&qoWzkLj!TmtQMb+uF;EX6ftpyB6%{`lriGQrSDaY~ohdf=S^Q z&-badKaP*CiIXF<_H0`ovC-sSVtYrnI%|uY`fTThd_j$m_Rq6*4otlx0Ye7x*Ni*|bf-E-lFxOvCG)DBzR9PABoIR1@8AS^Dvj(Y=uwvJ!f^qYZjB78=mc*ipP*iwZ+{*-P*XL7dZow zHZJ6cd*;e*Q!((X9b1e8W_7sdyno28#rl9tKz|4=j{W9Xp6SeRs~_BLj%|;Uc&izx zSG#6caKf|h&b~b=ZDbsI&Ii%Uf2dPET@4A*t#SWOs zMEP+0Y`(fs23X;5lJ>)Kdvwy+mDpd{^xA(PTYC3sqn#)-mZR3qdfG_DYcb0fFqyA7 z(n9EUA$|+u&^Ts|S;M4H%0HyqtX-PN17vR8p3GrGt4=m{Otr+kS-(56&`hJSN;HUX zmP+4hLwzW&ex&9PcVG; zxJUyQv(~Fq)h59beXl+sqpS?AD zR`!lP&K^NWu;^uTT7G3aZ0kKoCJQL=Jl?!%+u7QgqZYC#(!JFyLa&@~feI0I& z$|B)6xLBH0fg=nT`|S1_llPMVR<(uw{%l`mzAqWBjE`dNwMAZx0UnG_)x}|Pp`=>= zSm@ES6NJi6%x{Ug#6X;`Tgaz|me5u4O-+U(n_0Pdg!dtF)pW#sEDCG!MFqx!a5lvv z3loK~vZ1PsN{i+qgVrww4^FIp>Z;`^gVd!3ORIV{9rI_=VMN2r!_Xsu&LaHc377sp zk2p#>nvPNt{Om%ut}7=QvAsG((svI>{kQs$(8mXS zvwbjvr79eCyv3HdXKp6Q+WA@GXh*R+T)hjWqz*_X8$4OF793UMoGm=H9dOqQ6Me$e zvfT@nt3LmPsj#9*`Aza%Eld?{q8JV2?Z=Du<8*6uy|h=u)#>O_^V6l|08`*7I(VsE zz!YuwfW+qW>R_DPF))ZKq6#+7b=q}9abd@?99&&t>|_ZK%D2!qRyP=HIC1}=Uz@f_ zSUp@x))Zs-R$#uEPA81b;z+q*3jASBBU}m4Haihl3M$47I*G;TLF?@Roo&_a_BwCX%=0wGgvRK>-652$R2zJD>caOk-~JA2f*ei# zra;H~AH=w+nB{>M3{P`9=M_(fqnmqQ#`v6K1G<5H$J_=BqoS5i5p-*}S-HwIAg!Gp z;c(?nAYJu!_0H1n#cnqgWZZIbYFL1D7gOZeZMBX4IyPsEuLE0q=lb5o;&~8MujvZC z;+Mn6w!N!&#(Hnz#C;RFfe&`fxutW9DLQTmGqI0iF>w)he;-iB7v^~L%QDM;*?@I< zVHl*=eecu9#^tRf7l^cJF0(7?k%4#tQB*jc&b6*lPU3TrLV`GNp{08fq zu7&dbPlQ|chE)tWsr&xo6J_(`g`V3$)3xQ>?}GTjoE-!t-boyUg_p>VJ76{k9R+B<*Q zlVM%gYdfF`i$V7F>zCDACVCeE&3&d60@`~zwCdYpa`R33%Dyj$6Mw7&BfP=)sd;xl zHNUSg;1{X+A74-Ux|7ccq^;B(lhdCpR~`m2cz)#RlRDP5^?walUM&E|i_Kdq7X-T& z#9(h%M7jk~a&gMqyQzTP_w+-XQ{Y?>g9nCyPmUnF-!U=|Z0_)`=$*FI1%zL}!FHdI z@a>LpQNE3h2x2hL8yjaj@9t&)!4YPoS_bSk>S~QpdBJ1WQ|R2q(&k>VA5T~x>-fpj zpIq8C&}flpcov&O6hkyK(V}rl;XzU){un=>6CzevQ_3?qqL2cj(X2zw6Pd$wL&gww zPO~P|Qh9uQx-U*TFr^;p27NTY#a~-MF~QBpWzU>VNJ6yYkRtG*E{a{CqS)~_XXB2N zHF*dWTz?YmC8589vF;$%(J@yej5B&0YI$o+KB+SblYk$&A->2|)yt&*C{vT@NK|^@nfdhMB&!8`A-!-Pi>Jc8%@lFvu6D(E$qgX?=f-4tac{+eHy zI0E6Y;Ipmzv|E@s@6P!+{#;)KJ>p(u{XhJFjJ*$h9QA$YJv$z|i{tj$U9Xgtk#d#-&V2{}RMfUM0*5WUNrFS){22;evh4YL%dzG`{MmQQ~napORHaE9~$f+tVcHeOz%1PYZ z?gUnT3x4x>du4dG3d2YIRqWKUfscEStm-xvsxbRul(8C7fI!OeNZ0TlZiZV6qSxm! zLHr5OR9ljq2m9uHxr%?5n`9j=c& zcj{umWEFUN7&T2>66lNO-~IjD9r2|uwNI`-m>!}RRvwmGlh;(?L<8$KO=YZDq;1-4Z3c3l|$g$~9&aGQGA z_I531qV8Z`N>8a`(Z8#v&1uy2mN<{V*(I``z-6=AAlE$+MC-GB{E$h%*y-=|ZrWN= zT2WXzAiKySAMA#i<=&N!n*^x2bS+vMOKl%&0p9*{@8*)nMkabJE!R@gaI+A%N+Hd+ zBFcBgXx0H9CG0D(RS!!~!Jg&bO(jmywd>m*WcjJ-;aK)AiNN%&JB*g)m~^iZKeN=k zH0?|;z7MoOUyvNsF2#L;>kgEl$>-CMadKWkmv^O4&bd!l)wlsD0m^dldkmz%A*vf5!b_|?4j=7j_WkzT1 z0BW!c5*&ke>#iJQ7WYp}^`=i5wIqbq^mMi_$S<3Hr7?L3C=)hkkVVYK-s*^Xf{MN)5c# zrOPTf6NJlElVw-vCQIVg9bNX=H7*u@yleE*-#orNUMr@VpI;YGI!ZxKqqHTot`$V9 z08Li};3;@GjwV@%50`;D3BJPFK&Z2*m=UUf2Z269ebbIrJLk_KH+y5@yns}!Mf>|b zf5C{*pQkg~;(}?qemF#INXigj3{;i4j`J=d{PS9)^d6XU-e2dP7_+v2ZCVyhR5W4SuD%VY1iAfHE1Ywm-K9`u}BonXx4nJ zDD7I>>51?I83gN0-B%xEbYG|#zGjwLi!we=j(g`y`ID3LHr|hMW;=96p`!w@tGJ31 z;7^4L*_kx@0$W7EprAe)71N!m25h+QMS7)<|cF zZBi)HyY$mLKl`M5jd|5_fAEE~9ECn~oU3v?Bp`rRC%)7#i=jCBGYsi*YnLB~| zRO)Ye)ngS;bC?J051Yy`kuhIO*-2p~hk1R6Lw2#=P)SL~vj(-%l^D8cUW6_=JcDV< zD{W@oF(DL9YG)Exqc3BCTjeZn4$t5QW|nkD3mjk0-LrDLlGIAV&CGR?ajH_atugQ7 z3FL#=#NM?g@L80D__&)o?GnUgS_9og?5^b=WoXXfRl)V5*ik{tOV6(?g=G+?T_Dk! zj0ech>1!IaLd={7-7=ye4m7%8734_BL8IGrW|Xq0e6;sxe|_o3jg;Y?EqZ6~%Fa?Z zn@iLZVdF=#zF|`Cvhn_3*a9llI{XXAmV2MJqZQb;{`{Q0IZxr3n%?^R&a;>^%~3Q{ zhV;@oc@r&mW%K2ENhWefUiSa9EnVj=Q`0Y9^x2os?fI2|{%UgRpnrbt+`^8;jul_K zGo0RHKHa?BXkKgtFRwl6t=FT%^SK>&hCh5Yym+zcG)BN^{h)q!Z8)&Ct9CCJzZx#A zV?x7g@d&dQ*6UrhZG5(P>vL0$V6o@*^*u1T_=6jx!cOn;!56pcF9wfp?f&;$ITU|p zqqwhfx%k(M&CH8)amQaqz|8J=KHl-Y@TJS)z3ZMGJl<&@|3KUU{Ort*?*+B@cGcb% z^@q6X9}N;PCayPG2}CWKP%d?v$m~KeZBJf+0prCBV62iHoc;- zv-VpYi_SbW`g@}1?7I2r&-AmuZP)%?G-Q6e-Rv=Y&Sp-=AJn70-^{)Iz`5bXUknnW z3a>r4R{fw}`KR#;cE&7^^78nDqN{dS zSMAUz&H9_VS)ZQ1^?UO2$ARA!)k9si*UIx*r;p11ksGi0lmkrcC%W!w7YMZD+43mh zyU)+u4#M!YZtate>Rsje?d8kf_PFDLN8i}R!3$zx=G5Ou`wk8Fl>dBteE;J5d(jID zQ^t@vRQ^u*z3hJ-#r3d=6GB+uFwb0!sx#$>{>T9=x7hb6K+5e=;R&N8Kd(sy-bcl; zNTMDOmCp^GGHxDhF7%WeBcQTw3J2~g4&3GJY4`TDm&3W{mS_ZPJUlpw9X8tQ6QYr51V?cht*xY^p)IB{3*v49SyD?^GF{$a z=r82F28mzveWtQ4niMWSqkvc<0%S#DqXSlLV;m(A`p6~d_4gP17e&2sG>ArW0Sd{s zsBmXkU&E0VCeXSZXjDaI(X6lGEoi)UO*F{zXw=B9@ke;=TInTQbtYczbHfh1wl*s5 zstucSGq~zGkf__WPgaJBVvV-SiF>YcII15#Nq;6J7H=V;M`!K|&rBN~O+%(Qu@p>K zSIy&7R?8>TxS6;}EewWdh?a$V6hKFQ?b_&|>XJ5>2h`b*7vh6XZ41#jW1JA+qS7A~ zoSJ~Z440ohtoq1L0tjx|i5~@Y$d`z}QEAGk&lr9qY=i)tMCdk87?Xy-2Ja%ytk%!G z#t-OsNM~l~_@vImGXYLDXWkMB&B1CGD|DB$^}!wQ&=1jGv}8XsNTAaKas7# za$5n-D~Cv9H05)o)WIjR#O#M#5?a2Nmwo-?|Krc!f9X&D=R0>0ppyG?&Kqx{YO=zO z)-lDfQ011kS){z5*zT(?*DuIp7IWMa3mlZmP}}*Bi(~l_^6VPoRwz&MsY6STkV!yn z#+6?Z-UYW!LXqcV9-p){PO`^euElw=yyxw$d9res@sT5ESnRgpz?ef}&L=D&RL<}W9&8)zM%7|vCJ70!1E-vwI5iUW+HEgfQf zc983ZuX*F>(5muiA|Hx*5k^d~w$y1W=_k_$?{X`sp(w%`|3udJ`n*Iomx&iyN23oFbA*{rtDOhK}E;A&;qnc2#Trcg2zaAmONpO;3~3JGp}MHtz!J< z=SA$|dfRWx^M+-hc_g}ptG2q%p9@iusIiyq<54cE(qn)0ll$&EJHG5uUK%^Vn*8r> z(Z713B-^F!7nB_x%Am;qTiX={_Fr7wBBg(EZ0V=}&Kv*L)A{8W^W4WS{Osh0OJ93o z`8vrU(ivt{1__cuQ8CkiifD4knTi$I2|t0^RmAi$X;DT1?;%`lGO??bG{Dlnl{qBQ zRzj+oa7C==vO=%mnb7K*PdwX>$!T_Ts%sXQ9!8`$uvXN8pjw-2WgA9JL`y0s8W)6` z#>X$q#G+M^UnA-T-9ti3yoWIStjSEtF-&2!pkfE1$-s{y0Hd$Zd1MR=T4e=bDVS}zTl|_(%H!k&mv3|FWMfA0Uu3wz*kU3+{%YnJ zl2+q<_uN~xYc3t%#v@ysz>%g|BEjHPJ%xA&mYY6KnGAT0Gtz>+&txCtMsh3X@+=)x8=yb`q{HiPI!qT=f zcaibxf@dW?!sOi>GJ8dq*o=Gvn5|TAkQ&v%>C-%ud6lNCv^ec1thFKLy8^A7N(_;K zQk!W#z58f3X~ffKqW~WxFXNV&&Qts-X3k&E)Mxrs8}kS98zDGIU12Fs%M83U|JlbL ze%FVtM1=C(PP3;}kZaK(tb}Af&i;rL_q6?7c0QK@YKl)w9=Wkw)MjM49n+egrsvqF z=}F4v-EJW10LNx3%C0&9#$L;;gdi}sBs_(D6Y>)(qcs%SN2F^-@}QN-J8O8xd$`KU zsk5xhwGz9}Pgn`vZAm3+V#>$)QJ{J~+~WCbDAF3GPIgm^@bT5Fb&Rn!nf-x$CbvPM z>14nNes`caQaAAAaUL`#kZ3MGdI)`beliz1>6}cvreL-iR7x>v7t9fkROeV?L{1q_ zlG}?rVlv9(VbU#%-#eAJ(RdJEd+D9vXB zMZOzr&_hOp+K^d2Ry;S%^Ltfhl0$i+DsvA^KT`9mGUIEDovJ@BB(idVf&%M7Y$?N@ z9uNCLgxkImks7c`)5nM{D^Q@Bn~gEeW(Ol{(E+A@)}iihZWG)TG)f+>qsQ?gWxFCa z8xjz^LL8TskS_Gps-z_Q^4l zLyV5lQflNg?r~zkcbz0`QjWe<%m|o;EPPHWAa16WSqHi`&WeEkmekgIjSl6z@_nt% z!4QBlBc%X#7X^{2OGc>XQr=bq)gd zSE0rvA(hs%Nz5>$yGA*jklckG-_hh54_{MC4Q36}C8%XADVho-6$9d+GV$-bukWq=)HnJT6%)5k$8udvwdwL$SCneU3}6*;vZ@KF3FS;%^u=u2 zY)+uFpS)rJR)gbDfH@}rQMFsl>Y6C7_LNJb9k<(D3{YSy#aqKZ> z;uI$eB3)jmxikG>^aZJ8gJcDv4&pR5$~h7f<{BqV+RS3?s&IiA!6wXE0o}zl1_{!X z?uz|B?UZoUf^dyw#bx5ET(R9=cx+0aI49(b9?#adAYvoerNmD8$I}?}QeERssOT!oFht`%M zCs#3~3fY-(%L&CXEGAdAnd<&Iy2OYeA`@S^u6l&eAZ&(DF*l#{=j1(ZOi-Ee9hmUp z&?c)Qr9&A*4Nn8EmMMIxlS*+h&GNGza)ys<&g#nSMk(lR zv_d(M1nhykB7^6vZZ7T&GK_QHphz0a8H*be_GCKF2f>v!Y2ifVb<+K$#fPCZ$G6e zg^p^+dL&)lzJL>Ecy-vvNKzCcb{Q$RTTLnJlqS}1@I5q>AIv| zljx6;O7`#=IpM2My3ldh9}!Q~qY*9} z>!N0Ot7xXBLJ=z|5w;H#-KC^=n7MW|9U3@SDA>K@jt>t;05Z7TG1x;l81B8R6e~7V zhjAKf%7WuN^8L!tECSb}vE>0|F(r}J23sYZ#CXVfkPuWsN+$I>8etUjJmnaJ?Kg^F zpI-47kG7s7YeMT;2&?*x5oHt|bqzkMIBiMyCYHfo%vcG=Ir#3PwXk9yTfkqO|6jcr^QqX)5bhPo0U8pp_5SdhoIUs=wmN(G^N1QO&5+rw+NT? zw0)zrrLS6vf)-gqy*{%mnHrgE^AmZ8q?@J9m+l;Nnn3$ih%y1mHZLb5$;+vlnHngRt$-bUAY8w2_WS(f0Mo(%%P&J)rWK+mrs!+jTL$s)@b8zgrem$p(@2WE|l2; zU-jZiqad7Qw|eO}ve*2@>L2~hJKlX5HpNLoX0W))G!0K%dWJG69ou=;q6%z&z*KEw z_pKkO5|Qls^gWp_ZZ??#hQJ4&R9?(eXzD zpLeSnA115iRs628Cm6eUdqPH$^jGj4$p%uUETOEzb?(o~|Krm7y8IfvKcngpeyiAU7b>uHwc5HB;XoBKNE9kX6=W-we$zAT@^ zF=iK`x>!=3FqR6nC~vi*SRbHKNQ9bg*?l^Xn_eocVhZ`D1efLUe9I1-bUt*=>VJMh z9=fvSv(h1A8S)s{?hl9X?MR_1H>`Zxu+_hq8v|+?|*4I^3gsd7+T{#YI&ReX~B`<_v`+2M?35;wBoEoyV9K2l@qP+7Ng)9EuEWYfcJA3e`)f(Bps|<&f4C@6|9J6teeBOFzCK7UAX-2!F#?g8%J(=hkUvO76r{@ z$^){9J_l63d7_{6_-{o?_CFpZDJa=W5>nr=pe&(tPnIqg9GP_T5=cbJ<`cAXG%W%i zWZ_*z50-z}W+*jVk+GR*wT0w9?8p_UnHrk29eEns*6bNd-ufj=#cWZbaT)&^vFZ|$ z$xFEzoe?iyOjVNd3etF7pDW}$qZS6b-=!%r-M^`2-^mC0vgN5HYQ@IH0r{9QH?L<` z4Oe)~SYNn~=rr_h;PW6q`R;B1>!1GMQs$fTIyR{d1ql(Qgk%VSIkwVJCfa#B1R1OO z7EtF5np)n8JU9{}!jEyGmH@~|g(4AH8lJ8=A*n*RLdnd+z1SpqS=tiS5wxJ0bCDt8 z0~6439*VF~TU#5Ze(Ykxw&-k?v;%1@wv>iG%X1u^A3zxj$Ka8yn#U_r!DWGA1IlSItWf;Ss1Rj zskm$L3SWy_TCvV)$@wFB1zP~|@Q2#Yaygq%PfM*%l7>{Y5Jd8-7@b6(&8!R{9BRWR zC{Q2VlW+NG8iGGq^EhageqYb7AqmXSCIb|~F_(ua zf$+$Ln2F@m!+__T+LXtAyxs6sSN0vFhn+AZU(l*%b8c)muR_&bd+zB+(ghCCtgR=N#N>3Xkm?ZAGl_0iE zG+9}MAw^kic{O(>(~bUlbSzmhIlS5Y6-%;*F)KGI0ob@pHnSYHvQZhQj2PK;lB;o+ zx^e+8gpY9;v#WKQ#&6vq^Vq4m&uVV+x65CDNl>O#yR|1@u6uAQlN}08tI;rfq$7^s zIIj51h0@$XSYz0cr= zwJk_EE(Io?je63>%A|B!1Xf+v$%^FPRGfy8EM9=I#qSfcV)SH$_;VPo1PoO9jDWiZ zC1QpjK59pkO@Sb?upL~^+8RW{%nRt4-Xw99hvg}$Eo&^hilxrj!BAv9t~~yK*?RH` z^a+=?!KHi|U6ig~iDTj@$6KW45>1I(%`%3)&7xls=h2e{cl$hr(3P=2m}*^7@mj|M zh_@1lC`AN7>5RB;s<0(4hFqfA%-1h|ulHSFe_2*jZh=%;bk!$yA(xXYKd}~#Bzj;7~n-2rSwarxg1Yoeb_iKER^;2kt7I<_1sLMkOoqgpm3R71;vOxuN0hQ2^Q zYI4C0g_fbD9`_*{5M^=eZ639OCCTcex5JahX(dHGy<##l>B;Qitm&H*S zfeoo#kCDhW(rO@CWKOVBn;e3&y2>~VoZ?IO#PZgNqLRO zX(T44Yq5g)yxA%^lEYwbJia+ZsJt%Y_^Mbgo&2rL@`{I>mp``d(u3b`9iU1JBCAwO zrW5y0KcBUxMcy3_m@-oA$(?lqCZC2gx&3pDXQm*W(yWQ>a~rZ&93=`}nK*0b02vW= zZ9S;ER_s0%zWYE!o5?7R567tmuh0~atZFya#ljlm-K$xU^<>BXbXTp{GF5N7=xDnG zT+t@fxc>x2vy4pWOlN}0v^5w~GXRdvT(6zGY7@v%59r8N;$M|8RWj{i-Rw(r>Q$R1 z(Nz0vzhD4OI&H|9)dz!qdv+Tkg?`Iel_L!vIN4rx&SD`R*O?3<$3vSBYo`&HjI_;Y76i#Pv zM3&a4g+0503~ClBB=M*?6719#D)e^j_dAhXK(&z=Fv%qmUo~BGhnWe}^SR(`E$Bbc zQlmH zF4xg@(T&;}qv{gQxDWqNWoM5&aV+tPjg^ugR_{8SRl8w2u`6KQy?EgI5_KbEE*NDz zKEhwOQm-&Y!$D2h3e$5+nvFr5>rUv%@zkzluFV+FvP^L@NW}w(Q)`&IE7D%w%sd^k zP7j*ti@LUW%oy;TgWC6_tns4Mvck^m9+kcBOfO6}4wP$!)YE+p;htVVBx$u5Vtsrd z^e-?s$q0{$cq%fk4i|jUXXK`$K4X4cyxR_g;ssBPXVS-q#b)6|W5ct3Uht)yNX|c! z?CAPx`;>Ul4sV?*E2oTwp)s!b*4T2Ztu-?IwQ= z^~(u&cC8gw-Aa#AspY0cM51U)WM+;OR-Z8S$gqra??Dfaax((Cich$t-KSJUqr65j zeB5xjYK>H&;+6{?SX8XcN!BzQ2j<>HZ=jlB(pW6Vjd-n^9Sl{*!PrJ?DpLw-y-xb&+Zc1>XwU-iSoQ}k1bVtnf z@lEA(y_&M#br{9ByA|7MR)(FA<0I>3rfZDYD%QNgUZWj<&oPnHdeyqIC|EFb%2UGE ztf}bpgqa%QVz-kYnD&hqjku98=646NvOy?*bJwQ&yeKbJ#{?1Vf_Z*OdooBBZ;PBA zW-?`*cjz$jc`)7wkK-o>)VidMF1RFa5b}??f-QAzy9;#|Kqd&w2T9K&#wQc zbop53>hiVcf7AGD^Yner_e(#nXXLm0TlI^h_m#iz-dn#Ie|q`*+`d z962_%@7ldzXce~lwepeUQ{`*-K7L<)>c%HqUx%I?kiUlc`t&1H=92?oaPHV7zaIo^ z`Gq6pQ}XNFzG=S7e3gNVHl8WHM}AK~Tm9o_=%h zMhfjdSiX73Y2)kOR{^gIKX-q5$KV}L4IO)O;61n8@zh<%o*j5j z{N$11f2A#3J75u)&wQbJ2SCN6&z$)}`Hp8U_n&^I#Lg*sr1T&=7r*w_=+e$3?EHuF z9Zk@QN8QJYZ)U#$aIr@zvrqjdP|;sKwX`!#BcJ#IP|>@tF5k`0+s7P`h%?Us6}_}~ z>e;<-9e2J6aQEBgul?Q3YZCAp9PxVj{|4~-GWgI`bjTtZt%UA?`YlBb^RB!zY`VTURSv3#O|4+Z>`(W`o8ed@3sF< z_E7w1ZJ&H;_ftnN?0YryKgWxIZvI)@b(x=x7jK%OWbf>(yKnpl(RcRUd-~q2{N8$c zck`yFo@smhce6hje|xm;KdqC$DembErQ}HV!F4yE_@$lp){*Snar=Y&?mlsmoy^0d zKgn#qF8dwxRdx#3WhwM&5V~(_KD6sI=}XhbvLaMCwVgTeZg4C}FJ^OTV1$o}XM({! znXAD|_VQEXU0P$hy|^Q|0+(#e*raS6O-`+S&OQ=0y*(mbm*~(#<&18g3~mzdo#I$! z`1*7z{hFb^+bqrnHyR)%ySY9S;kr}%u=(MW<#W@`VRvI9f5Oak2yJbAWEmtmBNFk5 z<~RZ*Xo--lKH%o}W=Re6hpwO_uc&85qAPKe?v5Js!F!fapa;C~+N#d4;2Lkc-a@)Q zMraOnWF=jG*Dqo~yE7uMZtxsXuA_6AhJ;40OAKfwF#pi>rmmn|w}6p70i5PwFuGj_ z=lYL=0i&}vd`~*gB)SKKYs~xfMOn40J^RsI=TKmI6UMr))VFWle5_nuLV*VB`Xx^s zVBY_igU=b)rk&mT{BfgmIM@>c1U*@BiakNOmhnm_>kqhDkRc}O(?)x;EB$I#wr%Mz zvo%k@CE3~UbzYn!pCwCeA94?L-XCl2Yc{1P#Dlsk3a1R?f!OVoP|$vVP#$@2+*Mmg z7p{HF%Xapep)MA^$?B-O1bF>`du^^gSqo$zhUID|ECKqZe=Z5!b(=YpF>ez3yUmhB zyKYbBUh1xfN2f9p09xXC=hn0*AIe2H8rMfR)K0#~_|cg+GF_Lpe_)xI96TOEwG78x zAe@TUjYT1%@|=vVDum)tVWd$eQJ^hzo=j6)D)!P#grM~uV<{?tmxOp3!AX4Yc$x_P zJF$nVFYOs$#Y%GV^QvR%nU)#QdH^OF`m5B%uyHE}rUK#LL@AV0+Hh%L_a^cK=)cn1 z?!eoJxk!eF+z6jcM@#O6emt@wO5m*I8AO93U*p3y_^dTk?%A>)ro4@vJl3L#F%l`E z=i@TK=@L1)&~$3bn1hLlr6n)r!UdTQ6jE;|B1_Hm6C|)v6U&U$XiVJw;U7P7@JmZE z2(IS^#E9%}$8?Q|j4WoM8pT90K~|g7M`kYg$=g9}Q5H}q$ye`211Sl|REx*-lewtV zj%g`myKD^8wWfhzr_Fsgs%}or2<9g1)steJDZ!+5xpCB($j*$!CG}t!;H#T8EcQWKk%-VIX3=EQ1j%uY zW2om+D{n=8(iem!TT9#O7$`8kV%+eV9poruZD&iMBJ9bG2_lec+DTV>eXY^@hYvsm zj^|HD-WVCQI*B*7GVl57F!{pWXgRAL&vBh$$DA#mjnsuHdZOlQH7i*%JuRB=neQ8k z3(?9=8c6`^gSs!1Lh?i4k7DgLGz>U9^e+ZLM^|Ga^zn+G5GbFlMt`AdHB|HX+jq~b zdiYz*j?O&PCqhx37tw6iNt4{ATN?+rVu6?YZM+PmQ3cLw6wgJgnRn7nXJd3QZ0HF=uuJnZRL67r?JcTo!~fH7q}XXSKe-(b~eQUb&%S%ocLy zm@Yy8D)Ow&MDM^?AJO_#1-6U8tf!?(Yw`<&RY}RPxr*eCC z3?{2rSDs}j9m9R1BV4&bsV?sRA3p=wAW`u#)6=u z8p2t#FzY(Z+;R3eaVZ&D-LKDy7Y*n;3gVT$QD|JW)#Ju2P#&PP8TVz(fuojLomYw^ zxVI_Sr=3y~5Fs-({l`fmFf`L1d>Wb(4ORcqjsN{l_2G5PkxoK7at?|v3NSJjf9uc( z3gjql9Mpx9AFv%P3&?Lf_JJqr-2`_)T*Tt6c8Lc9G13e>mj=~hI@)RXWGgdrU?~F( zEW;_Pf@Ok|ZBcfly4hrs8*?s~MwcbKj)a*-W|MiO)+m=u9*=N#BkoRe0-9$1rmXx`RrLcs8Z6>ii6=xKsC`8K52ag05waHMO|yt0+P5H zXPO(kvBX8}P4prRH0IYY2uUOr$Lh)&{3B^XC@J;U#O*9qbJj>mql46WI?yAZihpu! znc|Ef5uzNEa^j}UeSK3UE#JT!z(g@ibw%((G~L%{EI5wxw7REgna&z4l0K~@#@#ro z7~ux}r~ z!_O#Oyl41Ew&wNfrdauW26rjl2J4x_rG_}srj;lH+OR!2>#Yqk$-QBCAdIZ0h$=Nx z2}lHGg6FMGXq_ym~lZw5Yi(+#JEcH#B@(z!Z4K*X^3IJ!$c=- zuXLu6s#}-2u{Oq{stm=-dJ;0p2tYPkq@*Nu-cb@-WczrM;Y?VNJdwmle3InaFJ*%h z*U(V!IXDtMlYrcxf_O4YNKJ8fFd=g#c261`tC4*iqH{BD738lV}TKVz#p}7?AN* z*-Frd;Sx)Uq`>GHFDw1|EcQ7N+fW8s53Us7JFLW#LJ%vZ1cSs+`TVx6hsze>(J zykeCh@><+69VxfVpT8!D0~2}77(&^kmAa~8Qb*76D#n=O?4FZ(qD5C@COyfwyKP3I z83towRI3bgPB18|hsA;K-RLj0ZD^ z2IsEJEV>=98`VX9k2rXG+o>N0+d79I9s$bv#2X@bsQ=N|vmajEoG$gWZ^?c0K)d%v z@8Kzsi$UE23As>r?E#>ghu{C<*RS5UW!<5ZnXb!$y?O4BvbEB2-8CZ@(I=kY6Mkf7U2UfQt!(!T7Xz@X&1*Yv zGUm&Fcd~ZF}!ozwAGP*@y;#*a)GWP4op9^u(>rusyLoN1Uv+yaJ9fIURHw70wl; zB^gXKIXF5Pq-Mh7=@=cDe^Sw^%vdOIE-LG)p&kR!#ZUm`<5YU_@wr9kVmJ?mqEHH& z4i>Fji)L~&fSp<^U2B&YsZtSu{kOn#vW;^=Fc_F^qtyUDMOY(pB6SASNorIjkg@7c zbPkyf5Ed%ewjB7`7QwfYx)+z=b_517I27a5D)i{2RJc+rd-VYWHCgS3=M!r;Tw}m> zN&=e~mQ(=V`Br4Qj3b|@^g54d`KYC8HHaf615r}Dk*hEl4;42jGDgy|=X)dEvj}X~ z1Bf&rp2~)jffj(+Aj>U6R(F69ZB2!fnJfL6&jwEHB;1xhrFGjeg2RjyD|tL!JZ2{& zxiE8)_G#e_2i5ijs_ub>5KOhMB1rjDf=0LaXDL{E}#c!KY_YjHO8vq|8iGK^y9p zidK{h$s1i$G9Gn98;sI;Nm+K4`TSD1#YbyVJS`$iYFci*-r=5FM67kTn=Wf?jG{Q2 zaO2I+m*m6|*H=+46dW6M^OhHc>nX~u8dLMIYzE@+sTDmb;c3v9x<|~SIERhPzuWul zmw)ANUza__hJ~z36~a}pWn`9UUd3YVOXM|VFewQ-vRz`!qPO^gjV$G;PuKVu8otU= zq`+Zx8&nh)kuoAi7x5JtS1!onkhw%i*w-RHyb@)oV)&XYWJ-<>g%;)- zi+xw_M>4qSqfA9o-)pFO=D;KvWc~zmxQMDyJ}2T+Da(R~To8 zib2Bg1ELfB3g)sV6JloClT7NM-34SH6cc+xFGyUqvxzNb8>N86l3tTeG$qa zMw*{sMa*FjN!C3D zNfD3&;jU`-d+F2L6aq{cK|MYvGxpa3AHI!SN z>&wlAdo~p>Jod9^6_c(?A zYUQB$k)fIC#@lYDTxRYX5P+vLA839KV86`lT2nW(onGJtFIDH#1LmIWqbJ{OzB`!t z^|_6z80xyMys=tN)g1rrY^LvbbK$MoiEpQaLSl1UPY?t%;@DMVZtl)-u5d{lEC%5T z+au3ocdmF__G~R2s);|?IMoxTQ+oE=>mzRHGy8jlR{MPMU(m4B0DC`?q+-A9H!;SzsDr;u5qXIw9|3ya&I=S#pP#^ zG>dY{+q2u7N57pZpEsgcwoh|#v%MwIi?wp)rtIAO?d~^D?2NmQUKspiaiKUBZtm*K zJ~!nWuXy*(6L0GN2ls+`^gjo2rp6z9Yq=&YL;0z|-9fXCMuJ$i>Z!i}p!_Nz^cN(p2 zFkq7BH-lYM`sr6jzgK*8d$>6p?#b>P7;;|Q^?Eb&W>ze2F!ulu__P1_-+b`W=l*<& zyhu`E`i~^9aX7yd%ro;8VoApb#gTTA8SP(J9}!0aZc{%o(>rX9~Ze-kX$$`b=Iti(-;b8^&4ayf5kUYxHwMNgX(bMqZq zht_>`aZo%Xijay^kF@zd{7chOceFTo_GowkFI`+&bdDM4dpS5AVU+D|#_g+L6t4&3 z6jJ~Jl3s-&F`?C3R{Tu=y>yK1mndflRC7_*`3V;7i##^P_3AJsu3iWN38N%A$aX zk9X@c?P34+oJ0yO)K4<0XC@sh2U16+g9;a8i!!v*NNsziR;h^&?0<Qw?pms0A2fY;xHl!thHE+8}%3` zS(!^r{akm`-Q#%ZQ(nBufINUZC$pk&{#IkWG&@+nLLs4cdcb>O!R6zCBkP=niyT$! z-PL%k*Ey!$?np0W`zXx)bz9xg?W{M>+G-5|+6_*8vu>R8#8)zE4@juS$~{$Qci3VXmJQ%<~jvEY3Z1}+G|85|r_0x|QPdCEz4gj@Ismp~z#O16g_RY+jcf9q(Yku`Z zFD|PJsq9zgx(7!}7-qqNL*QlKAi0GUa7yiBQw>moq zHje)N$bpf1J68Ik_vY$-FR}a(Y-QlutG)N@AAY_2tr7dsH*(y{ySCMD^MLaHVrEP3 zfmbm`?Li>JzyC6j;YV_u`J*8EUijf3%0;8R;(?&FH#0iDZ9`|h6Xfj2w}D>0b@T~9 zs=HXC$}Zn&*WKR>t_Gd_`F`U|fhLQz{L`(5 zcoFpGZg;UFqx1Y(L-!|hFzZcjUAicZRfk6IOnHH?J`-zdO`-*!1VFG#Ok+g*4 zUOSz6vETdP$kiU$;fF!>CRzxh`R1U*xJ-i&y!-0K`@tjI6RwRVAonK=O|N)4m#YtS z@rWlfl&$0G#o~dHgP#kp_72Hrvx$~Ik(n#aKmWqh+is|JcRx4s#9a>rflXIEky)@e zKmUTk3S1Wqj(4?twZ1}gXz+o+{lxPxNMiVoL7ebn02KRu;g{`jaIQ{m8s($+cAhgP zo_F4V=g9X5GQ%v0oi}#}q8<(gMbZQwyiW~tkj(ZPYWQb!4bY2cdc&sdr;$ZjN2TGUVR$sChn=&XT)5*%q? zeQmS2ZC&xmy7;zSv9G0}NI}#%(smjhMWCaku~?#kXaGfa?-SeFPxCofc)?ps-8p=Ri!Lye8&jNqta;qWm%NaO+7Buy*k3^Hv74@t8PqRN{^y` zJ0fFN9psUT$6y9=v>QETq`#%7ob3(H^%7^_r>9ndb)G{YwMBEpBKz^aED5CJS@C&H zo&J<|V3x=Pl5Z|Mmi6(%I3=V}8G)1&J!5N$?(OYD@heGnMbD9O$G;)gwcP`>Hz79l z5$zGFtsKwBjZ=}7NX+QdP8sLA6W`7tj>-$p82`j6qgqBF?dx-HH6ATF-CYZVVzc0b zI2v7&NJPY>H{f8hKyU<&<@2umAdzl|6x8ksPU86$l> zJJz!#k`CO{K4Y{$jZi`aE(TuO>nFJKk-&MdrL;U+EIwNF3ekXrpe=R%G%E%-Af={W zXk5PSqtBka>W;6IgD*EfSx%zKPNBIl0_V$_0FTy0I=(#<-x<`pet}?8D75!vQD`?g z&`VvaEp=^A2E}E+)LM#1GBcuCd?gqBoLo$(1yVsrxk4@G-lNrn#XF^+fr?Bcgh!Zt$p?G zCh>;wMe*p?7NI!arHpf_-Kmtt7bGt^me^CBtvUzI`!X~5jLSzdPtON&JsP(ml)dKm zG^#DMa{AG2s4o>~6he`@3pNjgGTI`P_9Gws30alN}dP&vRt(#XE7v| z*lAzjaJ`#ChSv`RA!hBY&Z_$W$!0A(48m{yY!l$DEB9Rnwc4van<^kGsK}ZsTo!}$X@WM$IzdJ}u zfzqaR=;IyO%C(qqG0{I0R`R#Ytc3Ij2&7!hsdFK|LVNyJt^0|nyX%}Zl9yS@JQRYV z1B0m?jbSB=mBq7Ah=-fkIInBFn>bh2G`7ukY<$IjukFR%**Dsy>7zYts}!7Nn4s6H zQ%GJLphI+{u}p^njKm)=Ir;lo4@h@LnlEg6e16l$n!})SC40PC7q2y^7R}KY&D+28 zp=R=xW#dOV5$DfE!6FgPfgo-61qrgocLLz-?L>MV<80>~&>HUp^rY?Rp+G3ti=g7TfKYbNWOBHTN%2kRf~uD@ zK)F$sVQXbaXd9W8epbuolLIMz9!H!K+C-6#w=?cc>_)EW(JRah_CZC#by%&Eh7o-w+U_}d=N+w>l zoVfUksl@WudN)Im95Wg2m3K2uQu(_dzfqmLbU;qSk{kGuO1^)0F=Hh165@P+a3VFe z&Ay&V0;^C5BW1^wF`0S5_A)cdRwm4+qRdeEV0uzIx5*Gl8ET`Axv7d0%?UppYaWf5 z6n3NpOzL3*C=#Xa4a*jc}AK%fM0qsVFvpHlSxAS z@^|8b4w7SnnSKf12~V_O*;@4@5Y~D!{#{^ICL@{kkyCWXQsQ2iys89Twxd8nb>Cq*942R zSVpzsO*R@p9gjvJCOA&}nz>P}{CW`JbWh|7nAxU(IN){4DdW?*Bu@CJ0T4;2BuCqx zGxHPanRQ`~5ch#YTIj1@$K`>SKBQmuqmTYtt0QE);fCk0v-I1QUsj7CS_dMz&(tGV zz9LOKv`YVqt(WBh^ zdAY6-f9sZ38I}h~{z_Q|kqRPWs(e5~zK@VXs}Qa6!_WLLqyQ?Hp1k+w3%~a8%hXJAQm6Djr9M!ExE!sYYQDe%XPl~(RBA0)A5c6Ykv|IzL`7o?BI*dBM;BbE#~%^ z9f{xG+Nk|{SM9CFy&In0_V8Tr&Fta z!#~8g@x_xHa_qJn)vBEA>-EYQ2(x2kVk5Bc z#s0g*!LHBcuD+oT==;TG(04uT-@@w-&1DbmeC_{Z?R~)OIIhFq+2xYH)?<=;mlyC7 zq@~^E0$Rb;AF^~lI)9#bmkVkILn44cHcTfLiBJlx$d;|hsnVCmyUT^NgdvMmq*P7( zJ^?UjQ~nc0s{HD-@5KNEIkc13va6g z?#|B6pL5QfbLPyMnd+f^Y=&Nc@O=G2|En|0cK^^9x-(d(9@;nhfOqc7#J<^|eBbco z`)>WhPu=?6Z107gcR%oa^2X$;%d4YTy)S(7lj+!=Kh8du?fh8Aw(mckRPRk@o*bIG z?Mn~r|4(Ze7vFei`IguHLry;q-o7_^a_CU8T z>1B4H*rsECyt`rOf7>$I^02!3(DaWFf57>)kYvgRN1ZB~{_$$?+47f&yJszj z5|wNZUyUsDIQ&aaT~min#h&m%HS$f8owNJvR;{RNJbhyPHjGTeW?pQko;${Gqcu#f zI~Verwm?U>4Nu&LaaZR0I5~mIzxNGKu;gxqUA!EF-P?H@p2$YarC?{l&h=Xc&6_#1 zZN+Z(h$qIlxtt&stIC3EDLqK5vhktuA%70{hEJz@3w-M>*3G#5ETj3qJsYk*mL04y zf~V6%{)qqf>{jR8s54)k{Ahgo@VM`f4E3M8yPB_-vJm%xUlH%4+h(d;zf~+{9CBAa zbf~@M$!$*#!6R^KnP2hB*?M1_h{@Z)+tPEFI_1FK^|pO&BK$vyZv`b^0s-fa*E_d) z{-8fO=HC+&vvk`)@zLY;EG0tlW5ahkpMKxK(rr#X`_{o1fA__W+2?x1AyUMQ9NCOO zW^0*%g(cSdWo~ix*z-O^@)0~$J()6Z+kBZ@!Wtv}h8Tn&W+PEOdOOF%W~(M;)T&_N zJw~c|YZKr5&Ed9Kh?*zYWc4u-A_7qZjF4Mj*s(-WJ*Gh9&NY3tm`SW_`MJnRic5Hs zb;l~6ai1*=d>6?VX&;3xz9Bw8QOGCCM>QyW+Js9yvPh>YRp;|ZzI*$bjmKtnIwc7aC)$FKLm@ThP0EFWdAt1px4o#y;%vR8x^IFtE$;qW(s*Pv9dEXzr?ybMyTR*S5 z?bf2b+nYM0q5~nDzZrGl4|(@@@+$Mw*H=C{L`LaTIXCf>fYZU5p$bI%S7|4RE|h6x zjmV+w=t@Z^-J7JiBf3Uk>!(UH+U^=r2^m;8ssqAARV>I1Sri?x>+hMc>Z+h^R^Udp z?aE10b}qqPfU#eo3ek-RgolvJP44AK{azyr2xz1q)w9 z(@FYTEPd}pHH0v1sH}9;+FW*9qm`lN(RWe)SCdi>dd#AE^lh*5oMbXq;*q{8@ZQ@= zx2Ki!;a|Uf>VLWEqf*ijhus=GKOFy>7>vDtJDJew|L?G=d;hmStaYR~75ul}{$0_H zdiB~b9v*)AoOJlX+{#hb1uYBq&4Ps@yBnSp#Pu8n`7;m=NciT+_%>bTJP`Htz&B?Oc2K8 zUDzAk@B6X_#>tJLmKeoTzwqM-@7U#(v5tjfl438Ky++@i-}~#oH@xxS=7uZmf9PR~ zGk`EBDzKgB@v1vr2rHs&7@%_4eXjTl}O31=0w+puaR>N_Dzb||S;6i+{R>{2( zW;{fG8pjr)M9K-ut zE|&J>>jl%F>}uc@mcN+dQXS@WY%=NAeFmHFo8b(sd5?8#Y{ZZ!JMH;taNbW=<#d|E zcXe9%EHlW`5?EzXuOkv@83crNC`i1N0aAUN5hyrht+(%@ISYld&su zzTfyq#rqvx`G?XVwF2gDl1SXM1l5T6+MI^6t@d(vaS#ZXHqc`SlE7exPWEuL&1LHbpU@YL1&S~u>sZW2i=FW*Dz_wb>z>&IWyLlz+Qie$g310` zqKQDNG0^d#5_xnBE2|(Z`oVVIfh_k-DuNg_#ExzBiwpauhvYF7%aX*<07scSQQFn8 zRgb*h#;FW=cu>j&UvzDtSE=JQ{fmmVs)d2EgI%Yx>7FX53T&09`Q@Z*40jARyBsm{ zS<3P&I8$CGtkmq<0VNpHqX#+xwf;?P9CPMg->P!(RV>DVulD+Ji!`8o#CW4;yKz|- zCh~?;3nPP`H7I+OccYVLrmn!i6|0iwk{*&(g^O7zOKFHIzO(PISKhjD{oV40P^rN> zt-HnpFjG1REGL5&vTla6l?jl>OWB+d_qXZ%o%bte(5RfeTTOK@R3OA->Azx~OW&F^ zQd+B%ktgd2`v zsMs4nWMgJDIG-Xh^r9+Q#l1Ep4joKtI=w6qqx%n`VD zc>(plvQL6_{6~uk{~;V*5Ekl$Khjbw<1dp_`&h!bpS`8z%=t6~RXp>< zX{gaQd}wkij(=U|O*`Z3NuiRPt?-)Nr~SNSI+lfwnW=2FkTR)lD^^bhudg|5XKa){ zm!+z{Hm-|v3*~tyA8MVB%j|TKJaq0!GoF9_eDVAnm;UCDH-2rWu7UJVoJ|B?6rUOa zyo}ABX~J~B-iIiXhuos^4{*bTCBE1B)IR0J9L__GU@^Cv@8N`e2xYWG^O&{|DNpi+ zH0T4BTA8&oj}l8WdOdr&8T7{J3b)8HZHztEsP-G75xI?!15H?jR!B%yB(w$a`t$%y}&Kl zABUsDs)Yxs8XK=j^vIlUSLE7mv9NA&Lh8>@XRm=KM?F7u@83+G*qFRUz91y=bZ5a% zS_4TqQ6)4#DyhgZG2?aTSf^SuS#EYyc7(>(w_qwCc;qd1(F}8I7`NX{%tQGh<|$ww z2DOc>)Sff%9UyNvZXNT&f?cCBF*dRvJ6@R!SxY>gvqdSaT}*kjIAsKj7Ba$=_WlKX z3*KrdE45t`e zRF<Ow||LQv*r{Z0f_+guvWmbw8PYc&`?AF{uV>86Z{J2jh=Odbvo6-8C7 z6ag(&<;~``bTgPryV%VFD!U9y=fYwNp30G6f4Ab~Nj2(}W!1_!I@t#l6xN8F++^ad zdI0B9<+El8mRVIv;2Pc!9((B%=f3_jNNhr^GB2_~(GWNb83pKQk6%Bsa^s}oEueH& zLoM04G+QO7#S%sXSf#j1r?waLS9y9q13RE1GN#y>KJ`+@u6c{id?YQ2vp#r*4E(A? z?1w4)!O@2~jKtfouJbyt%M%k)5eH}C?J#H#RtX^mdA&c8h&oRSmX25m)O8i!BnjW5ubBys@GV=RMR|wP%2?z39QiW{RNB1Ndlw z9Nm^%dBIBOEOn}Nj^tr;$7M9ZFRZ);U)g$~(Wp$;l8V__Rm0c#EyS%w`J`@0F#V`+;sFv<}t zoj0nR*FnAQr2H-h$HVwArwxGMf)n3Fc_;pl?Pe3Keh) z`UnGPR{45SX=IgT!+(wflrf8uvW&K(`^o&pu>wVem$6clalRDCqhx>r)(+y?vM=1% z9bdO?wyafl6@~FiGNHn?1)RfM_A!Ld^#N5j?8xhDK>)BS_RWTcwX1YHYDaGPxs|b3 z*T}gp>N+|dOB_|b!?UurwuiQ9sfCVpoXkfojsl41C5JtpaX)ZYrBY;xVuspWp^zD+ zYt+YyP6bZ$2m5gzfPhH`cCDhqb0cS#CzQY3xjPBiDJ>@-6;)^C9NF8Sc)oMv#+66p zYXXNDlp=&(L!Pp{lV%0fkx$=GAG5#~dR?Us;_#Qk6zGtwmlhOfvOy&GtjHDM ziVIR?y*o~u)pKerwE%6u_f za?mC)0`Qoc1*0+a-(pKIV)9FUk3LatRIk7$xv)K z7K2qjkfR1Ut&Hj`MvYJ<$EU>YEqE!YY871s^QT*sbnKDVUZc9877w{4zL(NB+Lmi! zjH+TjKI3q&FhrPa-QxJJ5qblO2^*0C@uf&9GN$Vg+(`x)T*0T!&b=nc_v4vBk1XZ= zImRLqQoK$moAQ4e(ZCkxI)QBKEtyCw4K92#nfn;9*rG1{;9Vvyn&a`qq`oy1&t_0#)r}co@Sd zR;do5|3W4MI%wOUv#3Wz*KpY|bR_}A$%t{_XbVMv-DnLJ)u32xUnxw8F0$Ke)x~%S z^b7chKn_sx++z;N}dgdEF&oTH@+?CyM-ZBKxvdZ*yavjpRE4vDI$Pj|5zWBVX39qtpZA|n z06Z_TimkcUV;0Ox|k1rE76*m2P7h3RNzLe9{ThbGkE36SDP zk7l4Ye&2t&?{{9-%A-PR8F?!OjZj)q6@axMkK@!Deo14ym1o3hWQ8QDXch6oJVVJ+ z_$m-;kD}A^1VE*K6H?Sw0iNWMNdz-wRt28;77*lqd;lI3IT`%Y!g2$cNCeYCsFGhP zV4=9Sxd#T6_TDj+;Pfy=sHr>MG@1unB9ef@2T(AuG%b3u?8-CHwd?_@sRBaB3YFcM zv>LfUU!hL&jjaYODYEH%UMPcawpAeHtqNMtW%S2GR+{>OGw#)+fA-?nzPa(s*Gnpb zye9}G$k3xRbHAK>z-QQQyA+~8u7riDGl)}`fN{NQC7tt^j-4==E z$nu)5^b-B2LR*MP2pF|ShNIL*0Q5tF0tDO{Qh}@ds6f4Z>(#%o?SJzxCI(8(9T^Zf z?U7tOVt{VCnSxv{25g2IZ>gCy07l5PmZ2u(N2re28eO#!lno&gSFx7@mKrULNFhnv zTM9`{ae$&1GSSTOdR`53gYA(*QHXS)>kvc%Aq$`jlY#Hr*PuhhA%Bf@kTj72aHSwD zB5*eFB@H5YdWh8g=m@Y|UMyKxYUB4_e(SGnd-TjEKLg-e5K<^=7g04YR8reH|SU%%ui<|2_l#~O-iLz4pbqP*B=W4^&K5xyILn<$mYuuCxPVh znF`}q;>b#W&F84!Z83ws5^_3N(L8DbArZupZ{=q*z%`}0`4&9Z7+48(Dk1k?Q(u*m zYUC&;{I43uptEQyq;EHFKmVaG{Meh`*~@xX<=fP^_(<50@M!%fFAFFGKC?=vlG?9! zbLruZD)jF~qHglZHApg{?yYLVHKd)8cXW_(v>nDMKKy|)UE$sp-b-ygodHCsgA8n? z;O0l7@@|X9Nb_~aFneXn zBNjS26pr?FuKKG-|JN;-{Y`HN2O5@92eaEQ1wtMDcLrBisba11sn#_0QA<*4IHcsL z8H%QM$YmmLNtNq{&Ah@;G*}iqW7Rptf6)pwPmIG}S9)!g4Y;rHzD=MBoQ}ov+yvfA zzk=Zk6V?@gN|eA|0>kbAz##rrwI6ol8uChN{7L|!*rqK3TBT}T)d=ag8S2d& zDxqIuO5CicmlnNZnnI-~YaNMFGX0%MU^4FgG#$5j!)qi^!{&QMgzSnW9buLqG#+6j zy2JI_VxuRZGDvIi*vJqAxgequM;eCr#h?A;*3Zvvjt`-F$ysFDMJBLXK`}ixKr}g| za%s3l#w)=rvAxiMwO7k<2NSRIBJ8~drmqT8GmGa2x@1LWx@@_lVJ63^%5BpoxzqJS zIc$*Ku1xu}nl1_zZjy|>!$5A62QY!E>`m#Yv!K3S!?5%tKMl=q{N=xR>*Ut!cWuV% zYp>$c3TZYiZ8`81`J?LT9!!Lq)H3N=yu~nQsp$rTI=%eZYOxS*pSS2x5NbuAY(kI5 zdQZIzl_oSmS#{8T8nr`5Q$UYUUiD3ktqVm;=57R5Fj?WVtB%{j^0m6z)&{a+S8yYI z1!`v)B>>hE@m2W==(7fK>Yg9$ntAHV9)S=i@9J05Ht2rkxycPxhkdIxRcw~NndCan zu(K9(1;#+uZPn{V-r{fbyq_()cLYWRySJ zBBZFBmsQh}g9P+9G^guDbgwXqu@0uVv60+VC2B$nVH%2b~ z{NU?;@Q*ctHg7b5p=klE4(Os%43%y8uAE%k!>fM(nv$fe(r;r92+$wt4=W5M0t6ic z?kT#f2QHcznsS7)n)XQ29_x6en5HZ0MAXDogIe*ebOkQ{fY>IW{Ay;^{9b&2@uq== zG?IXIOm*J-i$7TY(Vu>AFGa>wFB`9UxM^cqI_Ie|$1KL2E#8<@x6(81OY$va&O+x) zjCa}#M(VA5PEoC<(e~_P@%9XxEFA1YdPW0V1_DOf0gEz-Wn4dJRbI9yb{M;Rr|+&J zC+!+Lk_lQ^aTJ7eAbHFj2I9^{K#81~D3Zj5Q? zOzO2~;??dN@|Kg-7CPoqdmT%hS!CWqx87$@qg`T`LWFfOAa1o8TID!FZEY9b3Qm1v zOHD*fipJTSTZh)NzE%V^jM%i)+>03hzLdL2Ux^bS^jEeIYng z{d!?v2u{-OLRB$xk4;_Vigv@;cr65D;ub*9rbW>K6bFX?1%>A_X;Y*CJL+D*l$oyX z-m|vbPB{%cj3Mb_%$zO8wvF*=aS$C&h+21dw4XY~vQa^}$hh}+Tl=o*Tq8D~1>cAV z?6aO-(S5KrI9t`%3u+@~B|FMIgZ=pq*ml<~rfk~_p$v9gg|G$kCKY0K2%{^%m4R*8 z^yvNwPJ+C}fIiJWr$H9n^Op}_eaSEW+aCG1*DrKy21$s$s2E7H0&cf2T&+B$N0H`E z(%r7)$)T+nc9+&yyIz&=bJBckx=NBU4prkKY^=K`nyWU4=sFn_)AW57-gFO(VzOf` zjSlv?>=+93M+8=}TkI(492TPum?vjpVDa}0EFb_I1cYi|0#M|ZS)2~vaUjCuO7 z*XDo)IEL*kjagv77_-{*TTz)aVXG(&@&^fk2!@Fdhij!hSjgwgn{r@dA6q9xa`rM6oi(8n#V^ zYOD~pv&Ya-pUsVfIhIiki02=^>qFV=ukQ2)imPF@kX#4{A@+sji#*&?EWEEc*MI7L zXU15o_{h@SBTEkqWRDaN)P1L>e|=#3e))T+{?+&P;Co{JZhlYv=kJNn9*_V08*%s6 zc&UGCK>mK#VFCL$;tx3ASmS>@;au9ir*modLAiD2iV5dnci`G$r1$T}?sW6-f$6?e zQ$^NyA?vHTzJXijg8N!;Zhf$IW9!Cq-i_hJoGm~7Q*-@4JJ&z`nf|-pcx!R(QvY3D zE(Mp_=IPtT@y9Mb*#94knSEUTOfDgpJ8Zcfn0ZY84u9(S69dVoyeBRVxPEx@bKw*E zU*Cr(|A{^5P5k=6#QpZ*6%+T5^DiB|ZtCvz&$Frd^z4OniGOF~se$#gYrD_V(1GT^ zG<0sQY3IO%!{5OJcO96P{{jC-PL7;R^}nfoS>MU2eG5}w)>qz%v%g&Vd2=~+xqag$ zADo{&JKp?TsYXVptLoa~)qhQMmo9a#UApw(wU1rOUL4JTX{pCPc>M2wR^M{D#k+L2 zf7$C_I^O>=@4!HEl7Dy%Z0Xzb<}HI;22W1dvWA4t7T{jL_ZCF=projSk~_78+BSXC7QZzU?-8m?y&y=v_F2c%QAp z^_=2Vr$v#_{0dfWu9QZ>EGJfdK1Y$tt0P@D>2NbxFg6)mG+mfnE3^lEBaw7! zG@u45e(t7ZQ0wuV}8jR?7TB`&mIrY;& zO{`Rvz{YT57`4DkRS6FInRLN(%K$#2h;IgM!Ph^{XlFBCuDT7cZU|T)F!vEKIii1g z1TGh~E?PtWG-l(D-Ov2~)+edjtAkXPAZ_m5zWVLvtG^xh|NSgg_`5^ifcWoDaPf_I z@ow`5$o~(7jh`ugaQ}~8{jH03A%N3iK83MTWHBRiK0H;LH#lQvdYCC&IDIP?{X@b+ ztMckS2C}Lb2CY5xlmwm6L&TL9ImjDq#DSPavb;)KmH3zFo+*O^Ff1w1hD4#~nGdKp zLZs543cSIJCWNps2W)&SSL+l@2#1p4;Lmj5K|YIRN>h(ep*QK9jE30kh(D#KNB^GjJ4yD&{bgKsUKu>_OUDiWNA|+;P*Z0gs;rE`GrNlzF0ZV7S2*IR| z!*ZZ<72`b^Hej@o=AqI4QP0QWReIlMuOn|y+CT;p6-h;SP1`=!S=`xFL4esV2My+D z<&a-jSC-LX>olCCwUW4&=mBa6<5A`%43sxrqp~Wu$nZU-<7dS5!6)S;!z=jSwU|f7 z@bI5L{h@UGegB4ZI!LW`5QqdAWlNr#X&8l*r`Q7Xq>3AxpuN~(CUr}0LP&nloVP2u zPZS=Z6(zb&W-yM(B(o+^!sdN$aukpbE>tV@(0l5|La{{n5(#KDdC9#fzJ$$;X4Rr3 z$xTgVV6Bq31nMn91MSfjcWPkh$z*j-?&3X03UZYa#4Lf}NDlID)0n%l>kmIMwsGo7 z{kr+lVkxTAOBTVr*}z8LAh)!YOVGxn;6!5aSCaiFgUCyKQzd*cjB8oUTrZ53lOZ7Y z9wteR0OD7NezV^N;y7CI%P%7>%`5w*&RL*X9MpJNJ&tRPhNs`0|0J?}Zy`u=Sp}z#cWoh5-fkPeDK$r4p5iT~c9W2JYT>v>rl2yu#DLDyBON^`Ckf=2)MN%-aGXT1->(KC2_sgJt&$Lb zBAr?|qYfKS-tmKvn-BlA9z7DXV00!IJvTM?`K+c0@D>^C>_Hi1y@D*7Q0j1_P9*hD zb%sBO97)~O@2(`*m0@AkoP?+jr&iv&1_5@8G7cHh*NP+!=|(Wi7-eaw%Lo@Y)MHgJ zY@Z4NFW?#=RQVi^ zEPQxN!dM)6bF3KBJY1Y7t}VjOY0odzSeiJM#X%R!f9FXt^t&fwk_|%=05gSn;4wRl z;{CW--g>}Jyl|worrJw>QK`UfKpvSfPD10J6dfXYL-C=Eos`cdh%^P%Mm1tWtan3O zqE$vAt6$YWX8+w*+=lx^)^#R|MU@3O5*MJ-D||z__DZQUdD3(fsIjJZ5M&kwm{AJ; zU89}K5OTuINE{e5+*XP5z+}*1Xb$1TUt#d*TvcNQ4W_fG(0r$Jp4BL!NfQng>|nv( z85kXcj1`}Ts)k!Kg2Z7F2Mn;mQ{$bIMfFL4q zD2xJ=Qz;Es(SgD|l72(=h2PQbC8Mdx#VnCgdpzw8o>7nl%yCV&-IdR<%Zxz*;cWN5TL}?(H7OFf4TodqB;j6H2@u6fXobX#KefR&7DcRGgtRXCkHx zsV1SIUe|jnnzKZvwy3a}G(Up2&Ndo|r&dX##Y8#77AsdY>l6UtwvBjUNQ(|zT}P!2 z(uH{`UZiqFGWV_dO9V(kxi|neR8+Q-y@>F=FTOc`=A*4Yxm-%uf!d-dF}sV`2bIEW zJJL|DqJ~xKrAQIBK(QWb>4(FZ;8u@=(<)8Y6Sz_+-;O5$XQ5p799R0I$U+4W1i@Mw zqcDl2<#CMDaVy?N%RYW%60bT*tY5ko@A<5!EaFvI=xOpTLU*r19mLBvDEbe z=meU`IcZRde*xaW6ssvj9Zb?ui%%FjZ0|!iX#_ZrnD?ol09dILQWs$q)OXeP^D~S= zlqidQxbfbjHyzsc&!3Z*1U9Y9sY*_>*295PYm1rf<77R8l zC1=TGA^jG4kFcl%PDb`C-b1%&f8^+1B5(mmNM&JQES-o9>S@8~`a&dfmHX%hj!}hu zXlxlk@r@4dKn%axkr_96Juq18=7m+{w1beh)OSAq;{WllH^NWpXEG0S;WeBbC{s&c_!Uv3>A7xhQ3w?+P!g1_y@Qk=qZz}f#%rIC zl|SH@;Fk5>fs_}S>#V;(zGN)!jQtAsr{O5b2Z5DtxsZX&@Q3seDrh6%_&vxN2=-p^ zmI_LZxobi*LeL3;9J)R%wL=!ZGiV7EYhlRnrjn{xVKrt--(!6S5R@iLNvQK7Y3UP` z5+k(h7k>A5@0;Ip)4Q6E$qVv_YHY0?&|RofN`vyLO3n0>u?i>yw8MX8gUtf~siS5j z9yOp-u>wIi2UStK`cka;ld2P=%yn_ofuy7+9tTGN1~kR4>(PWRhW^-R9fx>r3Y;iK zDjhN6lWNOAEhI|!LD3Zzyi4moqJ1owgVJ|NiLb7YUI5hjik+5>s3s|-%I*U)w9ToX z4vGBcEUF+N5KK59rDi-WRxY2M&qL2dRbKRbc_h^Q4-e0xbR9!YIr9Bqd%ShuPxrDz zccts;JS8uc4Z>zA`y4`PFTkZDXDq{US08kWHIXN!HQHPY5{Zszm&+bR(|}wMh^%PX(b3- z;-I3SWXp=E0yf^>`^2M>)foBII5xu=eYC6Jv1Q5sW*wyhp4##x>V?91lQ`7#VzU~F;Qz6 zghMiA>kk+H;P*Dp|C*%hh0`_*n8ok75_+MRNnYxl3k^wCxRSvop)ZP0Ks`HkZY|7u zf&*|}@t?tCn?701fmRZ&b4p9iI>{K4ppB&S1P9EK6}T3Ir*(_qDNK&j*zRR%oiJ1;!{?T6q0`Atgz<}qNGq6Y^g zVhcu*44NM%#9MXc%g4CuWil3UE#)I&(Xf?3|Mx13;jw2Xh@TJF96~Kl>i=NacZ-tmplvRQ4Y9L zp<$zx8VkdB88Pyq3kCx7L;vT?N4~ak`0tZShm71%pe&^>@SJmHAu>Owy8@To;B9SI z%uV`~Ta!Da3hhduZN6L{;wO)pUKbACxu&DV`e~L5G7@mRV;Clo6umAi08QvXi=||z zl)LUHM4|SXBnkNe5-Gnt$!dP7K)X5=$O{m>_$nbqT|CqRctk}~0YpNBC4p+(Ip7gAEG zOIbtQ2ydc;@j^!SUx$#SFX-Mk)bjh-1w&HGN64zEV519#?K}=FNV363j>g_LW6zOUv80P z!bmD)hYqK4eu8mJCu$0D`6R@YNxKk3q>--(iY)DDjH6MCEXu$$(pLA$VbLiB1;?QiT=k6DNBbM@<~$ZY2DMXD8+KeNGx~yeWZ7D zaCI#;8stYR7gL8OhiJ13E6&tzi=7gvD+V80DC<-}s7Ufl zs3`+&4LGgmX&Ch&N7D=1BGmZ`)bn1s_x*<-{DTi}#DCVyOy;*N=~yg2%FRlJzMTYB zZt!qc%Uog;o3iwD7wYp8} z0?N@5Rz(kbfR-DRSv5l_ZNQopTBqd>tErO4(_C% zE-c0FoRQADF)}+$KOKk3sV!cbe>Etj*)wxUnzXupe-ysmOIK@qm9gq-b*Y!kS@!t3 z)7_yowEW_#+DW2psGGI?Jw+DWvGe2wzkNk&(kgZ_&De6`9NjFczv7iyHMvg>Pb?f9 zu{iw4OD{=B+1J0SCq`T214%Lb2xInPC;W{NQ9tt)pM!YN<+|;2)yN~=)OWYl*ZGrG z#7^PS%-sxBy2H~os_bp0kwAv|p>riz#Sysmkltlks@1=C?6ZQ?c+_xubj8@7pX789SGebRqEi&52uDqk+*Ev{JGN%Z%huihR=0)4D9NoL&?Ukz4Y$C zzj4)n?V+yy^T~;JSb6spU4Pvf>V{kGk#Jkvx6h}mtQ_B4`BmAPz4T!1z8$Ci>NGRj zKHOUEOtRLcZ_53z7V&JSeq$KEVJY2@-p z^XICmpG_9ixhs;YEN5emHu}I*9p6gs^ZfI$jv%?I@RR4tx)sz5t^A=NGWfn#hgwt0mXRa0G{=Bh1nr+KFZ2xh+%^BELyPW={8edL2!xM8H zh*XWQl%4XrV%o3Q$Jfd0+yfPYwH&DumX5YW6Ixzmhp9E^I`4t*-P!h>cN|I>&O1h2 z;Xc{v_@@hRp0$zP;_iB>Tnzd#euY_ZG#QQ4hk|9MV&lYhs=I6kbx{x+Zfe2xWsW0x z@!(tj^qGx)f7L@>ih4KlY?-w>!meXnmaMW zoeqZN7|Pj!#94u>4BKnjjsCKCO=l=gX5(Rtj?keGRdEtrRd+7*?Rg-q()QM4WiiZF zWbf~$S!jaNGs9mE{Xf1EA$7}iF>JSXdHw+;#L>CKPH~sLUAa@=TJ>hGOIkyYIajxY zq5MJNcV^z@MXfQvKg+CR)rbrU{jRmxRdcTolBrccam@vmYAE;ZHM&HdMkXixh?*8{ zOMSTI>JZb#+thntY-T!+Z6#C-87uctP;%4r#Yj|7p7&Aawv7aMbdHZCbLJ|?QplO1 zm$(9mLFY%tgSIpQ^4nUx($fQe8L0 zux=jhb+IbW!T5KUod7i<$hLd_ANj2^rP^WjN2Oz>P=Mn;&|TwDo|d)MgY-FJI8g^w-WnS7&r$K2yfca9$Kz9Za~J=*<1@_{-3 zd!wDp``>Xz`I*ku{VzV~%hl$3{?YF9etgpv`{PHuFEuy38Q{&1rw5*2j&Jhz$DirE zY4jal^60>0%P%r)*t~vf;3r3q?DL=aBxQE@CI8&nHF~78Klwa$cyY?x^WrJ{U8A@6 z{Y3I``213K^~5j{yGE~`_=)TpNnxM;aQB&Wax?hhF7}fAGP_*S>o63Ax5xmz(R#(VMQ2XRh80vG?dS zH-pP7k7iFSy>z2L`u+KI*U_8y>4-;O>h2kR;lt@~9X--{AqgIyeS#S8O~J$A6Q6mh zU*EiVcKY^-#}f`JzG?o&$-y@T&x9|Y&91)j@#L@PMsND$o%Uyw=ec>)oda@{+;qiv z2m0RBz3Ci)JNwz0=O0Yoa0S8rAphzVFYE{N&M_mY#i(%KzliBaeMsZY~>ssr$&gANl;~ zi)SZ~oFVE{hb8LNyO$omm8f4h!%g_&($UMm(%ej5K5^fT-@7-tY#31AH}xl=V;mU*MYQ>(VE(-=2KOz9W5i z%|AE%!R}wbed(-RpPyQq`zF`FxbbLsWcY*qo7ca(@m)OMY5&!YNB7>u^`+^hkr&P; zG@|>ifQW&YvNP8wH-){McZ6qOnmu#GyL0Z2;g@FDj(ER3H~Fsn?EljB-?8_zFNN_D z?}fDdzecVa(Kl!R{OFxsBDiuq#*tw9=w+jFb71=Defp*=H!l&>ogTgKR>)-Y#*>>b z1847s;_P?NB}Y2XcBf~b8Gf;!h`AR&14y6k-W5_)ee>zw&G+8+@7{XHw#y&wao8*G z9Zepu)3j5csdM9o?lq_U&lEF9{Ktw1oGar+{~@2K*$a0D{=x8aXTTaZ!qWYT zV)TyXrEJ9RI3K%WaUjR%+&&)c+m(%&bLKAZbSK_xz9AgS_NAPH6%RUNA@e%dnLiW$ ztNX*LVAm`nyIUL>1*<;=HQ@@|wiWH6q9-j+-=Kj$; zs>h4N&vjb;{#PBiS=Ds%Asc`Gi!%& zRi|@WSUcwDJp`Xvr(zWOqmHXEP2Rn@eZbSm3eWNrxvUN0a3&y|*Z?w@-Gk z9CGG}_jVwCZ+G|hYyE3NkXBh&#@V(0j_K^~rFg_lLE4wXM7OS{B0voP5A`Hzruzb%di<;juD)#Hkif5$+sf8T9^z}*xyPs?q#Nz zTggCfFE6+e4@8NT0Rfgqi(#BY1q?J(J@QD@(VPnK zKP0h)ywzO!MNm#BTq80PTdTG{$`J_MNs!icnLOtfZxJF(FCma?Bm%vq+4o(C+!imfdMzLuPdIyS84v(J* zI?mjQLZ2OP4i*peA{T8U<3%}7esC$HW8sOk(m_r*v5Or< zminytu-lrOvWE?)*b#CbJ+*imqvd!u=$XTvgGI>h=fRF?dp_Wlb&nlqPjNEbvP5>g zT^H94h zktP1)R~89fYpy#P?5sPpP2(gsk{KH*}{X zm?1gDnVOe(SWWrc7lv68lZ96CAJOn1ec3{tFc#7pU|K>qb9X^^y!!X@aMn2rU$6d z>(lmQ#euLtn+kqw`on>pf5l!3PMYcE_HRvx_Py!I{-x2<`-Xp~?^Wf~*_6HGlYw&& z=ZSTa;cpaoR+Ba-!QE9)**iJAapJmbLv@w?8;%^m7`$QW!S4Cu2LCF1uG{B-F8Dy_ z67RD5IX2Flv#ufwD|pmg1ls_fKXy+1r_k7rkR_Mh>c;(C8qHaTo0 zS9j(EbMDS$Ul9)P%dQRNfWv|8j)cwRyZ5CIXFM+7KL@SNKW88B1Ymj8o}3PLek*;} z?i>xeyRxg3eRc$wzaeNJ4R(JndqJk|uIyZv9SAv>PZ}P5E%=K4NN{qdNcTK`YR*5C zU9X$k|Ggl&+77E{i>I@$z+zv0eX=uLu`kW84WW!bLJu(ZVYyw%dYD5zf%L^ z4tsh!=-d!o)megO=3n%?mlttxS@v8yQ!I@nk2Rp!{TD#uA`Nh0+LfKr{X{%xf3BWG z0!;;ic7es^b`oBi-J9+XH60xBAK<*pO+pY@bQc>s(6BhAVR1+2Xcm1Vc-EiDVvc!y zA~?R(exb;2@DEL7!6qd>GpfBN)~9r?wJ7H(mk{}V#}YF7O}A;15T zEHJXY+VJ+npKN^V-+t(yZT;=f_uep46Wd}T645nP#yz7oON$AHePR>uM#vxX4G@l6 zUWiQ8M(~i-VxsO@3|&hkj~Jx&ucyTlatwi|^B0pmh3Wizg_SySnTu~*z`dRb|L>GS z{+KzCfXGb3Y9W#?Li(L9<)RCyFP2kZY);)Ps8<4?(x_LLbKf6*fBEO0s%hzFpfx`K zrFGjPGaNO!4OAlYrGybbp$5!=3AigfDs!Lss%J&jdAL^29EeZ5fKwP5E;*2h46%p= z`7%}7Z3Y~N!%XnDwn3s9(qXaE@V`R&A0`PnWY9XB$N;|K&wQd(k5+{*ISfYZ(9d7tURoL zWa3Kd@f1rRlR!X4HDIgFl=yjGf*UrKPb@ZP1#bSxCg6C@x0o%QM}PUhe(B$Dyzg;h znxLUZ%Vh^mcgTP&0=W+qib*U<1a`SqFPP2F5>Q$l$_WQJ1h|$jT@^BBQukbi1>A6L z99(Idro5%LhH|JP&xGK7pY4E+A0jvblb}yeeFG$Bdn<|+-xCR-pBj;6)6aNC;G1>1 z3az;&sfVya0^drNA#W}Bp^yavOq-G>FHAM>(2LB-l5emSsdS#6hT=;E$dg#t!izbS zd6QJhQ6i;8#wCf)Z+L(6gJ&=Kj?ZLAFNmpA{$B)|AFzA^ph~pSHrbf2l5g~A+7e)Y(B{kI73FuNu| zcm(YIQX76>1-(j02D*!A5^WUlVf2?c$WDLOgC8b4bu)C=ih(PY7QzbzfN(`N7Glay zT%H>U(!&Kr7eT0Lug!rQ(m8SH?g7zFH0eQf6c)6is`l&WkN)G^KV*F94VzQnikWOT z#iY;PWUN+>;Xa!B*hhUFNcPJXk@N!-ScZp4fx2vTd=KkB+z1DOADy%V9?{{XaP3Fjr>&IA4honcu z(cqAwdssN03VUo|I=4+jI0B$2e5Nu19qkn75J?+CsRBc&ju@C@w4EyWbar8!7oezZ zqGI6GCMcC*WCPi@S%`#bKs%l;17W&3c~=c+a|i}hmBb69^eYc3P_ja&oVW;GkxM1D z@LQMd`IC2F@}DOts0p+)0R@^^xu3DMOm3g76Da9#QELIe6zC#b)v*ErGg`%*15l-r zZ_(IH9cXjL9~65B`^Dlg9y^|$-PK)Ab02?Oz{U!NDqamVRl=e7H)I>aKQ-M}xNktX zh#VaLT5%(Dm=ly~L?K-mg}wk^5kP)g(}vKOZYy3Q0#(gqo11k=6Xzri-3(spH-wAZ zQV5i{E9??3IYGA|2MU#=nm$Pcq(qJoED!htR}o1MK)#(S zZLg&4W{PD#GGbO@2nF90^H`4@a*R2E+#_NQm9D_LstEJRCHVIj{t&}@cRImu- zJa1D#y#@rtbLACKkI!CY6XUZ#Ov_#*oL9K+55t;Bky|hc#6pM^P1}~X0pY~}C0_*g zc@UmwcD?2T{dA! z6d?zD!a4b0`-Ykk&XPbOk+~QIKH#F2vbX@Q;2NZl@Ux_-i2H8h@{%a>suHbMCR^2_ zkLH83DLqOgmx$}0j#y)gJUq${xt`gt|ba0Vd z!VMr}yyYTZ1^P+BWue$gpejnHq=?{ImI?uCFKBujPfN`aQW6AOs&mK6cvGrKolr4h z0DeO0rRZpU&Ua{-pZEXu*pD9hYqT&Oat`FNknY34Y_&p>bPppcMeI|h(ZmF1I4r#a zvz;bvH4p}qD30Aw;|GxXQVA_5qP3CG;(!|lz^|%cZ8QxbfMb8 zpX+Iz$&bWpIN6RsV8C;B`v?O7$eF}Rn3`ct8KQVfSJOm@Sb_@CaD?3_xFEWKQONQV z1h*!`A%Pq)fii^TG|!~KMtu@mTbI{b{oGWawlfAIL&@@Vh(v0%PinCUccm+h1iTeE zdMc`F@<-T;`swpac&+9{(WG=WDL!-SOCP^%oEQBQTUM3^_(6$pey~u5xSqfbySiTZ^>I5JmKk0ZW5Y zxUlN_6`JT`*#J|$nk)gQ=tPx}rE3XGq(KGBXb+qP*c1{I85Ge2a$$;pmpTe$ge@}o z$zx51&iX}wHkA1qZFCuu5|FNlw4zs8SisK-JEO}gFHvb-(Z!L0O4NFxz!Z(tNrgC{ z`P^UM{-+yn{Z~ZmQ1?{Q8YxfjW}kcM<&22-X`K`^mmfu>$Y z?WZ5Rezu;}7sgv#FoZ>Gp8_F0GtcNV3;;iU!;?#An$s8PaA z#eX`2g{F-jh5C+&Z~0GGcDCsEFW^@fx4oIQ3a+YojEn^CDGpD+2FfQJO|^?AC7P=6 zR^WkrhqofvBkGmW+k2o+HK<7-YyqAQ$&1VYCUY%#q>|CsI@B>J4EAQtZc$aE7Oa)Z z3O!pfxh(>7J*+}_XhmP)wu20R4XCw%k6I9K($@E&QfFxU)aasLC#LfOc? z5{$u0ULPtnC*`4wi27PK>T5=(rAN;PqZidz_NVyU>XhajNHx^gg%A9~%ZKKk`ts`< zNDHSKNmwcS3T=zPZUoz=3fqJBE5r?FzBmGdH={0V9d@_b2M=kua|3hugk~ce<_(D- zD&Qk)!bhO-I|jz48zL7r9SdV_sC*W5Yb{o+RWcykB=aX}GBA7%+=WwLgnM8z-nB^c znlXb$0e}-i*8;E^H8fVNo&iDJE*nBeDbzu4*p?BFpBSn=whE|{yq=tNC^=x$XK=l)@7?xKyVCOmx{R7B>~41=TL+Gi|AoyMJ8%?d12 zMcVFk!@wUwTEb(T6FypltSP}+SB9Cxv0$jZWP_F5;4hHXAuFYxS;f}YI<8g&eA*3< zE_a~{R+$#=T+p4`o`VxF-_MB?4biuJEqP&Z`St|XSYv^nu}{;}q#ChwjCs+x1PjYS zf1Sch*!w(;tlVT;TF1NXGv2?@}b!2-&tfW2MB+tGxzW_Li~ zo|t1LaL1$)XuyjIArk?-3h8oP4R=499>Wz@q)TMYE%^Xf4>{(l7%aaQ>QcKBNl$CZ zi1ThTtq_-@7^xAhGDI8~*Mgsqm8}ew8ITiWwu{Q-H`*9K!7D?U$+!(?OWSKsx-#%J!( zpysDm4VjDdU#-F@?S68Im1M2(Ra7pT0z{s=>yB_UYCu^Bjsa^jWTTBfU&y-h7$bKQ zHE3*7`2tM?(mim?xNgxt+aq(yLbN|k=6Q>=uZBAe){!Thbgo8L$}kek1K=J~b8vac zEBd>^9e`n>@ua_QH@+8Ee(`kw70qEA#jW9buMX0#!wbAD9pGj}F z2C*{k-Y?t@h=<@I&0{q~16Oc$C5r|T>&$OXh0-L*E&>IflwkuML~|y9f!*r11~}hcLG0~n-iP2 zZ@LST3yb%szT%8QY4{0S3Kv^B%8M9JT-Y0q7LS*Rambo6d*YdzbvA=EZF*aQtOaT? z7aS>$vLYvDrf8@SV8}%lZ{Rx>8UEaY2ow+tfu?F|P|X#h31Cyk<%-aJwW!j3BL~T$ zGdw(5hsP(y1Q}t!&sgESo54#FGhA2vbw)@#iv(v^w-gLCa^r1FavDpG-ht2U)_o)40TZ)6on^P8@R4S}A4_!|7 z0laP%zs={>OpXgoWW~x)kUcC zrPsr;Mk$c*IGZ!FbM`_s<#)(l#hE;zjb9SxmDQL@bI<+o!Q*fH)L&?Avg5%>+OmAo zzr^Z7_yr+60KJV_=*bzY3*B=f!P|822=od*Pee?c@EG@Wj7tLjbfOSZn;Ghtv3t=t z+2MEkr)v%hzmEt>MZ)AgEKUTv0_At)YaNcyNS{gcjN{)zdT)g&E0KY11)34wjR!(V z)8_Z6zaaw$3N(f%+m_M9WvE3FB~w}b?y1+G{n+Ax3mwuc8P9_j+oW$;UQn8`kuq9G%3PA| zw6frqo6#bvDDy|nUPIf;XglIvUE>A0@<_ZS-{Jax9f66shwVGmH=1t~_>u{mWkP-X zjD3;ue-`~+q+CrMvMx#Zw#3Px`TryD8;Bgh3vx`cMe<;%P+`Ux(W=2E-nSm!i0;9` z!rN(s3^yY01;!L+G8lti73ROx25s(N5<2vPB!(#wJGqW-UFra5a5b3-zn|^^$b{9O zJ+Zs0K5}noCKlq=?Ff76Pkm|D3<78Hw_Jv2!0@t1eeG_)2{ zJbu2oz+hS?@5ulJ!+mte3W7du%X`5z6&_~{0^t`+R%iqvitxTkF!(?KJ01xg6)RFl z1$xsfGYDDHZumdH|5r~g_T5d!S;Ed;qIw%diohR3?qCmH25ctsbybi}M)m!1bS9HL zPNB{GdB#2o!7fO08MfM^ARBS8T~77^Ao8U3EX=qSGiKg_@8PO8u#ti0HrWN&fFnnu zCAL@2UM_a5#62W12VkAi{p=Fm!;J2TJH=^>d}J^55@_RbcSd&FRSresGj!+(m;?z( zv2=!HHKdD(9jEH$FNf|T&>`%&$on{hHn4yo8(I}vLqiLYe4sSrXV4u3x%QKEZ+M~s zAO7<0Ppo|RvCF`uA0+5m>mu2wgzTyF7Vv%<)lEHJXv_Oc_7u7R%iz1DMiThV@{D`{m#p8?$+-7+9e6o(XkbkzI#c+s6z7$ z!#kL#?XjSXoQ~rm6ZEk9zP8Z>(J%6PQ^Q0RG5=Po)0;0DsRLgTZm%!F8`IBw1*c8+ zpXB$ExAJ@MMY{j<{C+u<|CxkG&ftH%M0xZp-p3FEi}6&LLCgr2SCH}f>P6e>Cnz5? zy&*H6+E`wkGU6JjIGK6+6N0AA@Lzf3`Y$iO`S03dhKXI7py_=JmXCO!z2JzNJt!uW z)5@&UHpJ--Ou;xv8axg^6U{Hl_qK|i2fL(OaS*)C_LVlUiXj*Jvx(#z-62i)96_ zFZ&%_FRcHQxE|x?EdVDI^kYk`{}%d#_AZ0=j2Cq*Siv{&MbN?aBIupLzD^rt8aDGh zbu=t8{%5tpYOrqGNz=iYwGOy%w?SL%plOeZjA!qDPwoEd$rbnhYUad%JK7MxF1D41ZFN~YOh`L)Fg`0Kc?Yd9+UWoY zpd>S{l&x;&Mi7wiUc{M#aef-)(+QNeNh^py6F{^A8r*K9{3BvtrK~84+Atq!E(R7` z7+mg0Xgh!b8Y1=+tA;_5$^B8(Ekag=@MS0yuqmA(>j;7}p=YNRkoawsne_xg`bZ#Q z{j4JZGdrz->NPU4Pad$qTZ~)eGfnVT`OoZ-Fkq}1xYGuiq5*JF3f`%#7V~!T8|9~F zwQszlb;Qs=-v&R?7sQiuu@L|~OKKp)`$;CI-ir5sLJ`y%sTHL2mhNz=CE5I+UGe3FavetNOr^rx$r&nC`sEN0sitW|z79O%G)5({$NJ_W3{m8vt`FEdF zJ57SX3_+#L_V|Z+Iht7uL>@Jr6c)HBu~B}(HH3}pw#J+a|;p@8X&6+JX2dZX2Xblg#Y);|)d zp-!k@W;0k*%GlFv+Tb(1YZq2G%&3HTEX<}}5>?G;eWW4m3H$05Hf~|d>IkYy0G@iT zYUWUf`2UkxYw{5Nn&BY3-`-?Ie)hwS)qaPQjBG`QXUQy8ih_|oV6#7Tv%4IQe>dFkk3ZjmjZJWoo3Zu_Cf6ag+;rrl5W6+p)T>(j^vzGBDy9 zlg{M1C}mzOi_c4JFS;XLjeu57#qh@beD~D&@Ao_F)=oTNeAj-a`1t%)X5Wi9&Lvl`?;ZY8((~yZkIb5P&+ba6 z=hyhdThhC>KeYCS!5>v$H#XM2)ALR}9f`^Zhi|Oj`lH^5);@Lj;j{JsIZJmzBsjz6GeoP9zcJvI33*sagj_eM^VZp4|P zpFA{h;EKV8vF+cr$ERCP`pZ`O^V9mbHVuxB-MYZP_ati`pIGyy)J}WO$MJiVDw+xzyAH(zV)Zu?t1d~pPd?g zcpc!cs%_1sf9J(@Xo@No$#*fel%fz%qvYT zZ0_IHzy1B&ZZ6$o)MmarF*UNzIAS~=u9-9T1jE~J*|z)O)Rvo#uUv>)ee1S8x_;c4 z(g!96w!eS)5#k~}GCTF%-!YDTM zz>bN59e+B!t~7Rb?Z@WUJpSxe#q`(W6V@i98l8QjHyL|>)HrH5eV??}m5Rx?c09E4iQcZ63+sj(Ry>z%-V_v* zvn$SiJ2@XsjsC8YI;qoVczx#JJ=0&ikbFCux^T@DlJ!M%E-B4#waz|Z4u`PiOZL`M zy5``Co?vVL@AnSZt%ujv?N@`aal%Y>xbFw0^}v|wtFWI|KNRP?yJyqdmz>(;`r+B? z_lGyukMkl1(TYj!e{x$t;lhNeiuKInYncgIIjvP@-MkzV_$HtdOV8PyrB+s_iC963L zZw;P(!cOXAX^J8+^VNZSP7T~#_h;<#cs|{zDm|=hecBud>x1bn76UTr8ns8g>y+MX z;f}OFFrP-oEc<@@Kj^aXj`5FOX||=4raRp0+!YTjYG4$_2f{L4Es7 z?>b|A^+#W999?hRmjn}=?Xi()WZgsK+Nu1b>nBQIHiAvVO&h=Y=0bCstGIh2`BJ)g>wkW; z{I+ZMXJT(jDz?Av&QB~bQYOGTf`-|7Y_HU1C{BK4r`ppNz^ZRY;F1a}4w{`@(X#oa z=d){VG0$Oz5eIo%9&TsciCZeS)!UN4qRK(%we80ApuPn0%N>`gzV-u43xwx zB!hj$R-bR!LnU`MonVGeN!hL@Sc!VY^jF^uXxpgjjH0OS>YdD97>N{S?)nN7qg?ek z$86#}%N~gRvCyTE>ssS$Zm_{$87XIqK2$1&D@zzKesAvhnIKV)D^{S?HUBsyNC3>P zg%^^Y(`_XUWWkE92=(VJNRg<;M6oNmq_K=z>xwO#Ci?}p&A|_f={!7}Zp_*4!#Pgi z!Ymn&Zh_$z;IG8pCdCo16+R+7c9e59OKI33HJCnRj#M&fS2WzDv7%gUD`&d-b^thl zOgo<@GN*r6{=~jy-}Arwp~ZLXxJdpba_5%LNHhNbkr>nb|CngIODXG*f4lX^`dy1p zj4Yjo8EqF(+XZ1$& zf){C_V(&AR`K)oU)-B(*dYs@uOjAwjCFvKHV;18y8LoE$;*yd|DW})_(jdhpA<3(l zde(bP#lJQJ@oQ`pD6=%rgl-;ggm)~ZXQs3tmT21AbBP>N;o3~aJw6X>pvc)(#<*iABt;9V1tAmB45D7|&1Oc(pXYoCWBjM=6Y98#R?o zN9;3B)^zNU3XKClK~B=i*gcHkq|Z*vA&fDNxa)u3hVvTmQv;+rXsm?OjH-; zU@H;JI8o6P?TpQ&P=A+7x&2AMQIz@ogi_H8y+mj&+eWUUj^`D|n(P$~3Stq5lEx{R zhfD$}!8=rWQ`fFl^DYA1u_EmyiNZ=4t z>0W`b;ilYV&{!67$qm0^*op*LWTkB$#V9Jbv1(h#_~?@tlBE(fa<$bp1h8RM)WD+F z6-z27I>sEq-OO8<*QeC;#Emf3-n_74nj|)|PRU-MZe}2tO4sacBhE}w=&@q+PYRM) zl@i;~(@yN?hL^5E?(|A&=)k4<5QVIz9`O)&ENVIeYc_JoJCy4rB@Eb%EE;jy(L}~E zrmRL0Hs^`PG9JoTm_T22j^r9fy4tDW^@{aK1vBc?Sq%G ze_E4!_opr`_YRbPU%CG=n^O8+Y>d=zSii{h-CSdp(+~&oJpUUS3}Tszo0b@BdfA1I z+=O!tJwArS8cE!VAXgdc@kRV4p{Ml)i8eutQORab>GMLZJ9lmLDAV(F$DcIoGq-+#?LLk zYs!lXGd8F*7-x*IY~MlP>Jw{)Xu4ngitO2W00bYXrcW@&f<5Bb9kp^S^3V33yV*Hs zPO;~pG4AAwM$w(#w()Vh7_XU5JWCqIh6vJ9)04wckX4Q{DRDYzXcn|g40ZurGZnM_ zeR$1#fAn*|u(ZZP7s!C89JV-Ut*vecI0XJlWsB|}tbxRyc^~q$JInquvQoLfr!%xcL?RV4~%Q+=O##wyrz z7LPJ8wv%d9aWB_U4~b3q2}BEJZ5Wy@TaM?g2&9NdaI2*Y4H1e65ISsrD`GvD^aC%7 zj6c&H$nGQw;C$E8MUczp$xfjeY878*m)L?Vpm!hS55SpDMURl>UJ|4=E?7z0$XO5D z&xJYeS9&(8XcZ$F*`twBQn1+ZX4;A@F9u&I8>~9D@sSCpVH1~3>#@@u`#MAZw-+l@ zz|n+ODq5bUza72}>P9OGoQh)}+gQ!T4>NAyw!js(T4lGLpkfYrPyO|;4K0qplXqo_ zRcVzHi^$O+l$$Z#Gt{TP$^z!IDXaC(I8@zy+KhcIq6z5i%r~DGFiu$;pTsfUj8%8W zFHdOhbgWGJo;zdOGYaU!W2jZF<(YrYGnfhr?#tFlk^J?(>DW{DMX(F8PPj2)l}dlh z3J{rHDidm0lr~D4t*w-zp$f^+dF9t}Mm0KPAmDQB5VCB%PP5s##H*u9vs=A5-;ZUFTAk( zySHHV{E?rA5VNhwJmOOAN^eqL_J<$Q%I;jC_Wht$rUU@SL}5QE>>6H1M^ z3{}Hk;i?m_{&Md}u3ho&-&m3xC99UlGhr%)YA%iH!Avr_18GEZHAeYqD&3_!KFDOaz1DO#d*BMM7vZb{JaJgy?oazfu@okr!ASxjQTfWTL;Sp?pwPgqp zb+t)Lri0r&V<(JDlBbQNi52Cb*=7eBgxRhs5rQ>V6*F$oskCz5)+<@n6(eZBLBTcw z0ZSjGN)}gBC7D}%{WG6>X8D^&2U1M>2*g5eHss5-tX$+P2D9b!v)$CE$fJb|v1$ng zc4*{6%^GULf^&qHj)+vzjTZdDM5PoeZ;Xb_Mid|-fxAXj$TdA}LbF)@Jf%}F56wem zgTl(P1_?aE@0(Y1R8V)Gu(NfZwM-bIox{(HTHHjRB=*h`dW;I;c)-8j7 z3hc*!#VT45FliK*IgMOpg%c=_vMZ-7{^{f2SigMtBTEch(Wm?*t>pAsCDg4b+q7gB zgxrx>Al(KN2mhUd$9)Qg;SwT7nKx~;HFQbh&UOLHj7Jhw*!VbG9zcU`0_wb&I@}!YYTX>nKHd zHH(Y^iFskFGyeu1GZxS}Q3veAlT*&BA*6Fr{1w$z8-q4?I7mi<@qoTqU!yt2cp%Bl z5JiT<&;b}WynvQaHiZ-Mk=%Ndtsa$#k;G$7XB#RAF_qmReJLQ~SuyA0W03CWCdB_# zlzacLA0NJM@$T0p8%d!u>6u{-3*A;gpGiOotKS zrQ;%U!3Qo3SFlPgA!ku|iL*KxHUgF?V4%>m@{!I}3rO4wQ)F3+0446+0?S)Gas+U``wrs>mVbo7(b>q zS)8h%*|AVHx=N%x*9Y!)=sTi_p~sk>39yn8Gwa^I-}PGmB`bIVT3@KWRax0L8zk8{$E}H>hAj%Z@*5m&5{nZZ3N8N zFXYPrdbond65NW+NED`U5ZPcd;*?`GQQ(|TgGl4RgZ`#F4x%B-wpZ21#gN*@}zC%2B3v zp^;u>GAcb7&aP|*N9M>=6^ih*OR=z(AOO?+K$9d#KC)$Kpx^Q|FA?%f<1`4k zBS&e2EBu6o1K6mMwHP^Kn{(AFYe{zKD5Lz$ta(?>=!v4UG)Tt1U_qDrq)=3(AKJ9( z#pDd(bP%$I7N>DFDS@!L&sWoqGx5dq4K@>e)N^Z8bbHF$7xyiz>zC83*uuBP*Cp{~+sttC@t6YyiJnMdP55W|C3%wBiAg z#Yrlj2PbI<>K z?Qj2)1GGfC5?F1DRFRNPMph8-57Hvlc4M-_q zgAv4%UN;E%Wr4{ z!?FNV-c3zKp7SmVHzYUO_`%v)3l+>_)`QT-*@HDQNK$rK$=IkZOyu#biKP;mD3@~4 z=io=tMS@~4OPz-#5am(|W=cozUMyGv+PDYYor;vanM zh6n$}pZ-pEr+kP+T8>f!YKX{9Y8nMW11(YG9JJZ zZmVpb=p<|mj%c`yMwKjkZeB_m(g~J+$#?rTbheG!Be(zf8&7}WU7gKUDqSXhaldX) zluU0r8Q6ivK>ty2O?Z3tmD_XnUM*BA1JQ)8JwIXPx|VU#ow2qvhlahooycujx)rPo zi~R>0zvrAAg$p#Xjcdz`T`wkaz#w*lh#oU@wFCtUS9$t;5-1}|e$L1WB(yf`EL!JHCn zE6u3en)JwxR-mq7aL&>kj2|;dd^K{lquXlMAcnEODsYNCv(Vp@ZG!9dd-Xx9-$`+Z z`YZPIswvU7l>VtXHtgv2`ezHtD%r}RG8`3F260ad%}A)IafV2WG#RG2J?#6l&LopH zSVbC4E0I+Olrj}%#QOllAD$8i=PT>Xn*m!i0Dph>G%B!{J{S;YI%AKfRvff41qv*`in=bRI{W;kmu3$EdBW%OOY_y z44v3PUOIHy_BS3k`L=MpR&?wmOBtP;pjXKNc#j4p5M&i`LO5Y*AheV|c5%u_ZlV&j zEac5yw#ImcO`tiCP`_-jTGlEhUQc?%vxG$o6Uu`jMgbGg*<7&eL{GlIWjeMq<*vSH?9fQ5^Po@m@wlqIanQ=G2M6x5($ z8QLsrZiqJ8+J&G(dRY}8YXc9uhE%5$F=xWiBEQy(G0z;mMbScKj<{c`>wxX&ud2pcURB7@Y>#Hj(-?5uW?>&?Y;Kgbv<%0c; z5kgJ9YlD^OP_+CU;Fw){;Nm)C;jUm{&eXZ zLSVf~c(i8yNy1NM2mgh5Sp-tMbLPT^*SjB+s*G;8C*{=(iL zP?67E)AQoqA74C>lFOMlIGB=yFA^f_l^cIBE`h+NekGDBNZ_xm20On%B(U)58Av`j z^+(|svxAd=bby1Qe;7RZDLJ@J4xBe;B-$4T1lE#(SyFZ)XN6z*#>|E42RS%;=S=H8 zpC*LXKQ!xq@b$f~68vkXwd<*&R}VaP=V!Ja<-qwGp}vm7H`P7F`g;Dgdie(Z!LR-B z`4|q;AAIaolke{K_jP-3|J+sl=KJI|H&Tb`2lu>k7iQ;F zaEj9Jl~XpSruXbV`C2f|srnm3)!keFoK}#7($c~4Kd--WYH;@#Ukg6-IT+`Sp$)s` zRBLeeW9N_maQwC><)HM#^tL;zZ``)wmZ?XiLN|QveCf}nLUi2l%DzeeZOyoe)YzvUniVY zd^ot)2y4ugudF<^Ir6XVCR$cM!Lp22_vqV;akWSku<-{<{=fnIn#ed_^lbea=R!Oi zy~no4kJ~-}A*g*NJ!5=6u)ff=|LoX|z0(^1V|zV2>ZM0wTcTyDM9U&-$zO(px?YR7 zg_Y$51oH{lveWzkQEa+~x291gx}YD8{2m5;mNi*|w7(Q}?f1r?wq}p4FP#rdw+%J} zfAxmqaGb>iyJ29aB(*$QT+k05W$eWG?NH*J-AqKWa6@o_h*^`~i~c&)K6 zw1=aLgamUQhUuH+4ver&!MW~jDe=Ib4SiPWDf_^Uw}@QI_9)w z8FWhDzR>y1JTO329<)3PnWc)F+2&%7^@r$QNgm3$U3>ZUk+rYi;Vgdjh#ZsBnrd78 z>4ZqtBsXhcjJHt*L^6uWVD)5{v#r-uU1vx}DX~Q?HD#U;e`~Ed(*;qj=(3JUHft?E zS0dC{pa+&`RnD_?%*Cms%h>E%R$~AoY%jr!(5OaXv|zfqq5dXdKf1pdhw*}?m)uCl zL9vEOcns|vcQZ;t$S7RK^Gpr|53#sst29KGGM{^q6**;V$n-Z_S_2Gt@WJCEG|#$SDC(fEUQ2^o#cTRoPq&J&PKT8s7gPOMfEOG_r3-;DA) zOJW5jt1=$zvcqyC4@O0TZYKu2|>pXcdfH!;lE3-(>=)9%WWQ-*3xGs=~~_c=!h z%&l=?~g1I z+*a!Z%8e^oR~f~W){12E z(7q_C<{3ZEJ0cX>opQlJj<(qijv#O0WB%=nm6Fxvc+0z|&7cvhTOgw2wzB_-DdzOC zi?8pvc7RKLWn&z(XssGBFzh7#=FEg@H&o;W;eOfRT_BRr9EW??60%p7QogF<3z+TZH8qXEzz4CD1kJ z#AG7jSb(@negQA3>+A*M zrfJMppHgO~VDf|B!zdInGx7^)Mu+9cN|Kh+inn~yOq3agK9Ti^37?zi9A;GE`t-@r zfvOE$4oS(GpYZc*xF}8Mstu;_&f{-Ti%61xIpieH{G%onUtV%o4>=Pmzu1k=OdI~c z3@Fg*HB4{JDf6zzB@r)LdD@6Zmv#znam~hwJidJ zH|Q$xjF4+}BJW2$<&`FL?`V4(xM{EI5AnX@io}<-#M2q2Svrl$NoU9?EnL@-nL9K# zQk{hl>EaXVkN?Z(f2%X!=JSz#Ea`dGj^CYLh=$Mi4)=ce{%+^m`v#}%tDZfR^gQ2s zD4L0y_e8Z*_O|-8d2PwR>WF`Mo(scK_rF=V>BZC2y^q9?_jVIuwrjuL9NJRzKdU#t z7Y!#1o3_Xtgz9-)6qyW{=N9m>=&bB@ioS`qv5U1zH3K|o3=f6V(QA| zssq@cnA!^~=br+1J4D=0NS-U^lFmR%4_yPZu2VW}^vhT{^iif-x!r^z^Jbm@}GtIH+=3bwAXV8uElb+Kb@=C*ZHP5|cMh8$n9gR+dkSXVZ>!Sn7pY%3|?jQMt zIX19xRi7PZ7aS;m(~G0`J42S!#Xgod&F(nWw`p7Lg{b?rX!NGx(Zhc83A>9GpeG`K z{E02Kxhea%4|Ex8S-xsb>GNxyR%lW6+V4eo9}J!t9)0D0!ycQx!Ppj#C;mC8cEyHY zH%6n{bT2_VU(^o-G3|VP1hgkg=fShq-#MkR``5gvzql)r+CDg7-y9LD^EUS1z2Hyv z9*%lm3g@w7nx(FD#1B1tq0Jmm>g%70UXR<+N#6$@PDjmF{XKep6(Kvn`k~kUeqr(T zdoD@}yBeN~d#YFD=lx0!sF5bDWwT`RiL*D4FY9Hdydus-zo8ggOrdE2N#t?1ILa?f z#%p7ZVK#Sqnho~j1v4cKEP7GZ8>_1M>VoXLA2blZNtmuetJYUGA{D8TZ`AV>+3iWm ztqqG-+-p8JrEZL&S#Hv-6mwTwGe!5K3+vsL#~Jj~1{~&49(R|25@%H(xKDKAs+Oq1 zt8E!o$R%Kh3DLO&Xu)ZeVrAY!a4?Zp=F$cT{h)uBt3I{@L98aO_OOlUDE9_!{aBgf zr)9eiqr?6L`>d-nhbsZ2I5Oh^@xdX2db-I3<`7{l3eiL9wWWvXPqrr7RanmJyb-}E z?F%VdEuI|DG@=NQM*iMCKm5zzSS(%&jL>d^RXt7-$UT`f@)OLaR4wY_H}X63U3ol% zDbP*@nCJ<*zmbV*D$M$28en>Et=iDI2*FdZ@xlg>Mo&(kjO8z>E^KfC-HexYhiRBD zY{({=Bmz_TMS~?nMC<|+I$$}Kh|8|&nMH6&$~q&LS?|lyD=D5|A^*xdR3SISrv;9u zE&P@&VDd6G7$AaahoWCT1uSe+pP}jisZA?E{SZ8|A3Os6BiA0<5B+U-Rl;Ld*&a0c znSd9;DpocHCm}mzG?eEX(#KGBP7om`%;gr2t%E}N#}0P1f;0(3(vwUX9v46eG*4N~ zl~+D8{loSDwD_*iN_Heyt@skUE`V*2?`d{Ysbu3^74(QAlk!L|3IcVCev_OPnkvyUD0qhgYk3k~_7i~^JA{l0slfdIRFJnP+U6bSSkdqv9 zUpv7?o#%vrS(beDo0pD!ZWLvh-B(bPr6>7rkFaxqSDP#?A(q*>ZkYv~|Luuc+4~rZ zP!bSZ2P-SeHGlSI@2+qD4G&6UKt3`o#!b+gNlCUgN|mlv3@PR(nZ1kVc8HfGx)RED z`}v678W?%Sgx)JxoN6hLfY7mHDT7lD@=hq4JYXtO#m|>QX6IKlFtU?C3+C1WpXCRI zcJo$n3r8~vb!1hLGC{FtST4faD0g|o*BYxp4z!`C(Et?2BZ%KBFoqRC0mdA7l2yMv zT!gKrZE8YGdp;u+&^|K?nb|R}BGI^?nC(vDBbS(woZq9$0fm5hfTOtJISi(iAZ9R1 z_Wy`vz|I%8AZo*Odnj>VWCBsVHSi2^Og7ZE8GoC+V?Rw2bZa=(XlmA~WujSR&4tf1kz3CR) zw$?e@0cs=B73Lmq@EZD)18&{mr*>=qzUDWZfT(mNsryI#BP@gSssjUK1D=!290$T3 z-xO8U-eJGjyO0dd-eQ_FE$7B{ejMKImCTa!*f}2)=4!pKJAdmBzdUYfIgt*eM?=}N`8yL*G` z6|F0?I_z=!oWTQgkG0at@v`c3~P4EVnRH$(eI?$8W_!Z)p1$686Vv?46n^Bhf($V!4(R)hVX5`_q`RP0VF} z4^+dMxMj?0g~aJ)Y5KkU=qzD9E=Zb~(zv63~0w z+DvNAC!%K_!)&XKW7qKKGG_FA|6O%jw*_M+jGRYSP2CeyFs4=q4m!MhBQ8amaW{jo zboPeRLChaO$3mqToQNxHMeU*~x0@d}><`0QB(@%42Uc6(pyzmL&5<5`TR0xJ#xcDL zTFp_%LTA;fyem_p6>ltWnN{Qb@4PYl^5^$wljrEyY#}ifw`jsEs;Yi;@F=5e$$_Z% zK*V@$5=Qk>Xqe@wzA%$G&3rRulbbx<`BDQ)m{V=9)Fo>`E2@?py0IwS{q$>w7HPr( zZ>a&1r?g-ggu!k3+wwvW`7>|`R0rt6p8T5OzZKxq3q-h<+215>H(+X`W6Oy&VGIy^ zTD^ILyL^ZP>j71GkmznNIe^b!oy0|N5V9Lh(o>?u@;0+Q#d|$Z^r9 z3G1PVU1a&u{#}J=utg(+M)DETcE$5fi@wR91BhB#vj*)tRG|F=_J|DPn!UHL(}axe zP6urWmH?7s)!~QE94bdEwBqeku`ZqRF#Rh~&`2zRu$uPZE*JxZKr8YBzu8Kgt#LF1 ztk;SwE2?=UJDQ=;IwU7d%Y5p|AOHHU#o_ye5lG&RUx+r29K2Bby@Rb@{QaAHzTjE! zFoL_jFspSvWZYq2F*7=`KdQZ;+b#Rxz`~82XZ?v=7jBM=SQs}AZ|sR$qX!4Vo}->$ zz4hgqKXqY~(Pi8rf$fQBKj+n_Z)&a`(lH@!3QNBik;i>TaGOpb_+~J4#Z_U|yfp;6 zvvJhHfzh7L-iN)RkRsV!AL2YONorr$6TA05GQBFC+|r~->9_HxbNd&fmfkfKZoa~4 z$@wB?-Ts5ME`q_|?KOjA(G{(mn!|SaKSrF7YCh-f;;_ATn^)al;^haduHhC|(tcl0 zYX4p5^oSQc$e_U%p1Q)BH`W=v+et>S(|+!%34dGj&+QXY{k&xMb^U}lCKtLS%02h5 zP30wC4?*qU>orS%99?Cz!3}}jzw*SEuJCw#)qy&J-7yL|UkuM(`Al?LhXz8DiQ@3a z>nSW%4u3JCSjO4EvY(0U3$ZtR&-GDgLEs1ffYLPm}1!!YfDs{i-ac8ETnv8ixJhnZBW{IN;OWS2Uu@UY|@jne-}r-bvO#% z7kwqMetqpZdt3C%bg@fb?mJy~V7K9-yU)ln)p_~#(V7+}T65@%l!iQe2bFJezK?8q z`z-Aq$@$VbeI~5#KNy(2ox+aZV9eO;+>Ajd?cQhqLO7=WmybX4iGTIxBP-kN2v980 z@rzY;5XTUnD5CZ%Vd6(&MN5k583$}8>Y#yOBBaAiD^Zk?sZ=&FM9t0%9CHGG2@cYO z!c5Uf=^XxaYZtA=pQ6(Y5;97838 zW5Cxvao%a+GNlWHiI!i&W0?yLCmnuKz}bM$gbOaRkc)kDwOX11GE4>AZzg_K%djBl zEx%>A@J}gVb8ottsLBlFz>Hw>iXg3qr2@s2rdVd6tnIm`UCki`5CceZ{Q2@OL1Xxg z_l7CG8gNIr^HogUq4O(1G=XNr@BGxw%YVGIhaIxZ>Y2ej)~ze5S4ScCZR(%uXyJwyLVEPDHEB)y$nY62=nj&>{Z6?hK70(G zOo+F7%KQU&(JGk~-w}=`fe3B+W0t%q;Y<%BDd*7mR!|K`MHOF2^q26c4o*2OT=mj2 zgC758%JE<($*&Vh9w5t+Noo^LDTT?q1(k0m0?F(kprv{LWT`z~tZ0>aj+t*AW#(DFh4iOWony?t>FOu(cf zyqZhu7_S3fIcJ)NK{>+*Ue%deQpY84NtPqYL+dfbIpx9zaE3xFI5mt?77QVx8znwI z8CO`4$8RiSuWC%k=Dol6_YeHV;%`k0FOV*_=@me$(uO^|QqTAHMH8Zyt%MdW%`}TU zj7%?A(MaIzYAMweTA@|noAQtDlmRRBvRYNcs5)eH2k2#|d}wfg6>lT1Oli{M-a(Il z7}^f18O6LW33kv?MboAJ%5sva<&I{SMy`UYIxVW+;uL4fB|si`DOS@d?P>6q+a1!!tsdKRNz7JTjWpiCupspP141)#(eYBe}C1? zqVp^5wxlu3mfz{1`J?{Px&h-Jpo3yHVT}4w-FPW6W`&_GtR_cy^q*?VVCqu$eAomg zPhaeyPta!_=H6MwT&FRsV(mgt?efMv(rL`+y&1vD?e=ZsvD5HT{NZ3PZqT-sODG{{(rH;A#+8^%p7QfTA)RrqN zb4F@fN)Q#-hso+89Z3R3Ocj-(r}jRnAAQ%6fI}Dm!7auBF^; z3PPS>>yCbN7h`q_p_(hXVtvkjG-B8&!7Y}mVP!N(kkI)O20tq97&p7Ks2P!{O0O5> z3+GXRMv#WlNa|{$os<~g zLpe{V5Qw$eOA532PMKlKFcL33o^asiyR;&M8jeys6)6eBTK?gnzsE@zWXq}|%L)^(LWfCXx*35|XOr3Lh#Be*geY3dHxvD|$6&3>gb?4D zF{4VZv6g`ImBCWd(6S%-sFZk?ZB(>IY_Q!G9ZuJ)>rM1w$_kj#2!PP5H)IT~lqlbf z*GE>)VHjY(8|WI75s}f%YL5=RcD+rT+?m!da-guenHB} z31V@{swTTh=&55KvVdEwJd1oLC!l+O$W)UpMyw<$AXP2cUD`p@iEytnn-qel@Dp8} z$uq3$Wf%U%zQ2C+bJ|C)?U>BcCZtN%wiX9%?yE@4OR|*7K)xHCr*0h3S{!f#pK|u6 z6M>h6b7-PY%a2^lPHxVi?9x-*vvikGCHo~`u3C{<_z;cvWvP&Fe`l;I`M0mc9B2xk zZI+dLB+o|Y?u;9`DL#{rP15)3wodVOa8ciEdXHZbvi zH9Gs9!yhaj_~@6Tm%C2QvqA6G=5w1z;hXW1pVus_+uB(ZffUEe#r|E010&)2`Skx~$rcC%hS-~9E`lU+Mss)jFjy%MQw z;$f!Iy*Da<=kWcdO&{V?*E1u39mOve=aMo;?2aUl|)r z>n|=$^QPe<+XwfI`RU-qD|_SbMGrgi)plCe?(5$<<~u_RW2>$^?Tnwe?hx}~v@f=L z&$jG8DZMg2eY$%(-F(DYR!auz3<8c>kAJMoc{V&{OplxW@3FoxvU9fnz}nLj`uKq( zDOHc}vIpz_CuYyzKFfN5xho^8WA@)-y>$NY?A+mK?$(z!ZY!oe`5tGm-v8{}VekB5 zFE-wj8lU>{tH1hlANWvbYYvf6R?!|`1~by|ORIv`i#QFjd&yTWNW z@up{0ouGF9a8b9rhV8NU&W_DFDL1j5bh#^pF=eabo8at5{<)$`PPN{F(Xn4=yI+~A zAh#9u+96I2CKS4TR~e^>0NC1$-MLBOr(SCMwpI6uEH`8@!CAy>zv9n62+>Oe&0IV>O~2Rr_-sjxuBiYns^aB!kMO%Yzkjk zh7Hu`ACBZilJc6Dz|e!?$j)ev?NHga&oZsEoS5r!HqvZ}9qU{CJg>)0TxdT1k=vGk zJAkw~o$?d=8 z4t``OP+Mx}77Oty1@SIn11sPf8jF!YEysYJWnyuFrC{w zdPEVyyx4QgyMNcmy$6YFbw(E`U2+XSJ} z*?!AVf{M!K2o=p`aZ9Kq?Efef2>`b#ivVddi~Uy;yP_5npM82Ej5luuNkgsV`r<<> z`RlTj*kA2ulw>twl6IDRy9<$>?biz?%^f#K^&luR?Q`kv7*L+3T%jgsd|8iH#)Z@< z<&rd}62}!>?rhPe1$dqnWz7~ZaYK}|$EIR|;_5>YrDD%AwiXmhF@+M(R>juNq>zcq zFxuCDl;TsFTzku4h-eCV;)s>OU>Nyw8PRD#stP2?*ap&3e?}u(8GE_lT;51#?9rPr$qnue}5Q1E2soPzPKCT}mkT~L&zPUsh6m5iu?MUS^NwtKQ?ipEyu z%zD?Jx7gw|x7BF))(W4d#52fVH5H8kXo{u2y8ukQW3JwI67{rnO=_;#Hl+Z9mul0L~)88yKm zu3L=By5Cq(@>J-$v$@r)XBP8x-l%Yl%~!7{B*`?^6cLGTw&%& zucTM+`}@7`@8A2r-#5?`RT_S%tx262A2_1@$1tMko5fFTQ@?-&{QMEmF&)-q5!?5vPu=R2|i$ z0uz2Vol`(%B3GE1;@9-M0+q}D6bf5J0~4F88R(m24WQMqvX7EVcB0M9I7+mL_E3W@ zC=ZKi)N*glv@h`DUsm<7RrAl#P=C8==)WR{>47iUIPAI*WQraTR2m<)bwubWaIRAVwAa2qr38mPcjjvW3 zGd$VQ1mR4#0T5bO^XyP*xH|J^c?C3n;YD?co{~_e+*SOHepsRKo#?8kzVznBKX_1{ z;}E7;wJWvBJT%zq)lkkc6~xkEP@V@Yhh&}Qu-+&sLB-)(`IaA61fYaNF!S=XJPl}_ ziJmyRuez4%k_L#ZDjl73a|*N&U*dfBn@zzxY?PoXUaNkt*tj zRkOPY6XZk`J!*!xn%+V_?C9-SX9TjE-a!#otql?D+gJTuziF_OdBfi<Z@C20)al9 ztC-YIlgjuFiEs+uCZ4Ns?Yn^sD1v~oBB)&+eXVI$9Z=qj*iRB|Gl zoL1MYj8z!zsu&9<^>il}Tx!;du4B>?IeSVF%AAA><(0ru(8)NHu7F{^Dl#$AB9A5d zF#i|-*KghV&PV>qC4?xG>FU&vHTAPYUSQvTbXrknc=_1K@REJKr{_nDWI*xvXI2>3 zQ;oX1Y(1Lh&cc;Jb=89kdNoy>y05qN9cpl7deJ{QQ^P@YB0%|LUlp48Sv;uZ^#%J_ zDe|rLd)3_jTF}}0DRUi5K=QnIWSZ8HUMF$en`e;oNcud`Y6de@(m?5~`cNIS@+>QP zaw?@q1vqI1dR>%EC-B)8xTvqc9;0oXRaudAMeGXGn(E2aa>g(HO1GG1N&B#B=}tr@ zCjEn~{IN66A=SCn%iPTMb7p4OVg@L}mKVB2x{;hS!bMB>d%Ge=6|p#rRN0;KiApUy ziWJE-B~ub}T@aUrQ6{aro=lC$BEAO_JxnTLvVW%f`pbXxU(R3r+gF9Z9L7Ql1~~0g zqh2DJMUAvnnBHYeFBc3?zy?s36nr5Y&KzoiF5#QR$wEZtkR2?}S~Wc3 zqfxRznHA!4kH}xBD|1q3C1iq;PLXZXMoZHeS^m&jF)2aE4#nTHord1c;tfj9M8}+7 zU`8RfgRX1x{GG!r-Xv$7%uFi_o#=_#DjlpBox&k^6 zFV>jgAHM8nke308Fa|ldlI?nR;*B3Yxb8oklQ-6mNlQHv2QjATu(1WBaxE0=IT3Oc6-|S}8``(3WgwEJHx#ViE$8V22ZU zCAqOnCEF;BC6tXyO`+E0$~sp!)iPv9L|)E;%4$IDrrvQ3IVT z$z%)_i1JvBieF|||Mp*xeDbEZf8dLfu^cs}t)BxF5hD&L+(h4kBN*hvnu{toxjF4p zPj)(R(S~_abJdXzRVYkfFJG4&SYjxEP9hM*4u!u?WUbv!kTaI+L97bBlbV+% zAlA}W!vMq1B~<3pV^}HZZ`4vnbg43WInjPSH|F41F2)M1fX4C^ zX2F&6jU#r223D+KhSGRr+M3d%=!$ZP*#mZAWYEMB%KQ{bu;6p3rInN^ikQF157(6xBwj9yX zvvh=^)k4{aTc8HcFk=dO{W0}Q6|O1u!zufhYf_tdAxw1ToRX}sdzeVRPEnD2^kGPQ ztYc7EWtCpbvddb<(ngqR4(uqJ7s{r-nruVFv{a1E)YO&B30ZwXLOL@TS`H28yc2-k zj8&;Acqg_PUk>IY%jk?AeMssWjcEI)@BtR9^W;78Kz-O<2cd$`kDyYpV~Nz*1(vax zU5skrZJ}A`m@!NNi1tBuR30ST5K{8?yA~Y;P;TVI6~+`{wtj@0_~qA3m{0Vyqln*~VkZhHB+#EU8d! zxyD##6N3RnRUwbq^<<5ugJ&Sy6!28V@POsA^rD82q_|2C_QaNPrRMWIe2S#NBdUjf z(2-qSc&5j5=5@7P9w{knU|#U@x1FQ3Bc=Gk9KG_{d`ez7Hn$+ExDmZVXI=d&CJwWJl51YPCeOmu+p*X(YZwL>`(xs1sj(y zxkyrnkvA5s5ups3(3j}gkxoR1r@DS!i#mtU>>AqGr?CqytjSeu1O8bm7J}E+Yi;5J zc%PY3Xzc7D9j&?~=BBm2NMw4a3ttvoWurRGA_Omqmw2W;5K#LaX?^I_h!nmr%^7Vb zhd1Zzt~4u~{R|fhv|#@5O3i!Gh_yVk^iaN|qd{{_gleJhhZ*xs56U4^p!l-{*wCgz zBMpMm-OgZu)+|-ALu|3}5J7KbjvqrW+7aFz56{xF#Y}4MCDVPW;&gjuYmlWk*bgRx2VVNx5bj^#G1WZG z`PM30NNEPW?Mb|xm#TwAYGvaD>fK7sAD}%T52*nKbNDEO=*&PXFIgDkMT2hjveaMp z6sw*_*xOnrO_QR~5&hn5zm>20%&^nKeOT7Mh5#bRFs~=HcH+ZZ44WDmA<{5QP{wxI zj_n_f|IJ@~QomF>e8ifhxJtDj+DlY4G%b?JbV-m^q{Sx@@)YmD zQWs#OybwWuJOP)#b;O=zl=CC~14#;-6#p;tb#!aB9cprmHU4;2G+*gDfxo$IHdK*I z1Pb{SkqDZ#!&f;W`T@Cl+1FrcfC>~TPHD)&ukhDjE+|Asb12gx9lt$r;5H~J=IwpSj0Tvr!J`I#f4 zNNK2>(zO&JCf7FlO0LLU4km4^QJf2DxN(^U6D3vpGM|R*&~@6p2e}^=B9da%eE?|xiDzjGkt`HsX$_m$V64ONv(AAJwY~diK zYE|ZN+mOAM-kz54kOd|Ia-|}I7@fx7eV}(x0wj^g14EfAc0#KXaB-=VNWJ)4RbR*v zTSv1*cU(wsX>(E)L62VQbL1%R>@9M((=g#r_3Wlgj1KW-^AojVn~;i zc3F;L&`c#84(f@t(37BSZkAA#BP=^m*@A>b$ZrzKyS&dUZvRE9Rqzln33R)%xk<69 zy?7Nw^DNP0KV5ex)PfIvCOKBcNpvb=NG)8ckZYnEC?yA-JRugJ=)P0=FMs>RgYWp! z1DBQ!sh!YwRsWE>4y8cO5&1UawK0kc!@LHgp)YF#%YY9 zEgGFt6QV{+wJV0AVtAHHji^$oz6DHI}{ zYfodnL7r^QM5W0=F!8cL&826h`0)J)v$f~hhoVH$*=HuEUBakFYj^mJZcS&te(})b zpS((Y@0Dw;D|u7FFr(TohNTj((hy~U7TJTXqU4f;AJ9MeO*|eeYl9KZ9BiAG!4fu7 z;(od>)RWwDUZQX=KV{|dR^Av9C{M* zT7&ygll9+rHHC#bRyZ81Y}xv*QJ zP#TlG%=Du-|K`M3FMjZk%L_6lp9M$S4sjEDj?iEPp;W9>oIWvlkYXVyLOgE|H@x(F zOC7~66g%%qwP7A@uwRm7KvEbX>0!H;*x(Q@a5Q9H=+K%H4a{Vb@}aBv>&jTXg{=aC z)QhH0U( zC6>>*To~N} zo(rRWyo(37&-RIt@JWIQP|M^jk>YxCpTl$#1~4T@IGpxbX-dh6bF2xdj>P7n4Mmh! zeJ%1xV11Y5lOx?|vxU47aZ{&em#pXVLvo|T9qARQbeEHm(v;H^{mStSnSjqIqM8Ev z8Y-|X3^UFn1sU8g`OPAIF!e?<`9BWoPy|(bLaRQ z|HQa>&vzxA1E2L!_~f|h9JkjiVMDuo<%Vek-%=tPffW_Ma)xo53wXh~5!6rC0?)eL zuH%Om>JcNo?53b#+V$#Q^;7REf|pYinKQiV(eA8hFH%?g44LOgROosaYu(p{rJIElHXzHSfmq}@z898{mk5Djz& z6j4DOA;{)-r*3U1RQCn+W?xJ6Y&Gm=AwdO}A6V1R(y^)=@?!3!-dSqv*{RfceapZ5 z(eJ$Dk!^G~Ig+XH*VXof=SJs!qc`Jq%A9hJ zL8v0ymMh9E5eda-(MJp{RLB--je|xjR-mkZ2XpYTl4ksp|7;=dFZtsz`SoxZvUWnOZ%Gc zd!x^EpYA=s_s!5GVgHxAyNCGozTEx9rC;EAZ}CoiA9UWQS10#gE0^w_ zo)RqH&IFHKI=SwlP&@Z{vJkL~up9)rDWz7=ly;{Mkc zCvRPRZ~oc?;fMBq(tLW76F^qSPh8#jqWAg`a74O>D?RtZusB3 z?c1)txBa^zP`$Tp{_FNoo0B^?-_!ox{jVNxZ`%B&J01j?_q-%{_Z@%h+s>D!9t5KI zJ&m{8t>%5le{bS@dwYB3y8H!~_j^(WaCzTa!{uGPgvj)vKhCw4zUc^|uP>c4`-Yi`@KoO}v(y@tzcUA8pWHtc2NT^C&AvACsmH`IbnMzDM7Q|Zf@fbw2z+!6>#Zy zCxXYj+ionzw_e$a?P^#%XRpo+SZrv#mPRw+y|_^|d^)_T{+_sJT+?muc>00JG(a6L zRJZ-$QxCY4BZ9~Ke4Iu1yV^nRiZE>cZhFkVCWvo#HcrQ&v$(PHn;D3_%kEY6c~*W; zgF75M)1I{$Z!&7TovoWX<;0ej)*Ic9~wuO z*p{!MPxaFO^7R}$O_B3uj2QX#tZ;t7$$ixd)CF7eC}EUbG0j2XWtODdcRS=gwpv=| z$MtoBI5Pcia6U{o$p!rVHYJ&uLV0XO*J5 zA=WLkJ$Wt$N#EYLI1*yFC6O*fBL>Ur?M8?zITBuAQd!Pw^RRUFu&-G5T1QZ(Oyv^Rmptr$LT8@>-Hn+D z$Cyet*ZdxKWhNhBkuoO?b4~GoG>~VxlfU=(UvK`0i{DG7bR0}cas8`9k3}fbI^6Nt z3Gqkr*l6oSM_Wtj@IcQ$45G`l8SCOp`SK47QuzajI2F=G}z^1ew9<1yi46)?8&SGe|ssVc1&LnT{Roy^QoG zkt!M+`{5)*zTS!UGLZyMhH zxr_hi(XyzNNE=!*o^g6N1SzXF3&7Ca=$m57Ydg2o?eu5yCvJxoi1M+5Tgl_5wi0vgsXj zEG>_6*OUKpFZb75>)=Lk#OP}KY-hUz3~C?lm-{WPby@4Ok{!S*?6un?Y5d^yc0f%- zX6JA>oBXOjAHL%lm4%u;e?C5yt#Sd8S{1I#{s6N&oc5U_b1gJs5L*|+lq?HW0-}t1a9tFx_>^8Rdxad!k0;cn$cj2wV}J$5wvD3 zYzmBv*k5wl&D~eg2DKYm#r-vY~f@f1AKj{>Sh?g=#>Q|V->B0&c zE%h(K>_C0vA;Enk-kN$)4@Xjtx}XBHhoA|jC#v%^TYKCPHBTG7nG0*&_P z&GmjtL;@GvS>3-7vRaJ0`hp$#M>aI&wFvPK)FmV*+7jhTaT4?J7H_RI&0*Nv6& zXX;aPSi2|Qmw&DMwRAQ+aLTyN`GfR%<6LxPY7T_l8}_d>KU8e;j$}W`zU|(WUS&KS zfl%B1uybT~1$f|1-tOl7-R9O&p!t8uRZo!8s0Fy zJ#9VK7=Ge?t5+=Ub~o+c@ddXr>E0b-X^oz^qR#@?xqXxc6RN(^49F~8%L(! z9Ol-UQE&LiA=@gw899feyC&UtXE%QTV`=M4?zKa_cTKwMSSpm6bbo2t=>FhfJwIiT z-nfKeYdn7g6#GQln?Jv_2rkGbAeDBzY@6}?HlBAUVt}v~-6O$kDL2N=>1(>rk1QL< zi-`-H;<4uWY@!7DeIbab_S7cl@Jr2Ki8q})mGz9)wiG`AOs2!(^^ZHlPa56#r@Os* zdF9>3=H(a&<9mv!x%NHgsgdJfOW$mH^M7sEThAShm*N}hS4_JA_ntCp57Q*(f63nY z!p0Ze3&q^Q{K(WR&wjSy>u(0`{BPUQFCT;;%OlgLhNsU1JG|exW@X%6cDn-h z`|hIN-JhPl_I0m*U|apYurA&W5c9U1-9MmyKkQDgwtwu^pZ$&ckF#KYuHL?h-(U_}1#O#KjK`InFX$Iog1^$*t? zcIdJq*zr?l;=Dr{nq$ts?ex&540_etrrmOCsyniOQ8Z>>inNG0Bi~V|N^I_RRxl%P z5kuzIMFX=2`5n5VV$NXNWb8K(bv4lMoqU;T-e(fj#xTLgWi)3YNs+&PUp9vh96(+m zQbJ56_88C&kJWtZTolA4TNdPDhD`4~R)YfLU!&RA2Gbq9ys>78tWpn+0XS@n-lz49CWV0REjnu~oi z&}&Z@K0;|w$&@^#-eI0C#EZzUFl=oQHR|M9{`IT=_6s{NKJ)4&wqT>y8|z$u@EG2N zFbNw6vmV81@3EPe?e1Fy2?)(0nw#P>nxQ$&6FKc!!Lpm*m=_C^*!CDf3rob@F)GhB zyr2=3>>#DRoZ$$e`2D$V0!AOpf|V)1L5$Jw6F?`keJReOL2 z3rk1DVqzAtR};czPSukj9&9(l`Dq&XDp8Z$8ROJ3w9K=3>E zXgO9&$qhhhaD98!4U=AG-exo#Mgk43>uU0J0V@i(8Ee3|cLF3nAHW2H6T0XX;o>R- zHl;0tX+GF30H+bPD*ySw0czHC=#Nd!`OU}+EBWVM|G@A&-m`c~v%2I5Y1fy^8%krf z^gYicENejpHi14oV_Ci(SCSbkG{&@xSj;ch6;zWK=eZ@%~9fvNJ9@^Qd^ zI&EcAoCBO8CskwC21{{=v5Y)`mbj6-N}kudIauG=V!25(UNE|ur=|s7W{fFeYwZCX z%bLMv3!$D%`LIs9jR`x9@*V@51*;9G#10r|$dOu^eiY;3Bdwr^>iS)Egbi$oldE}W z8cNZS);Cn9b~{2!77<|j_3B+!>LV>d=C|;S8px=9R&h?JG}N$+ahK!+U&m7@M@cd) zt+0;@Ow^ruoQ#Ubsu+7rO%j?HST14Jix}d;5}_NpS{TtRfkxJbwMYrO3{xmUk!&*^ zM*Mu;SN%{8xz&~iKsK$4>rodQJ29;G+{j;sWYyOm-TBD-FB|<|%4gVcbS665S!#a! zWUbzOZhCPjeXw<0cOEor3xRV()+$~?nI%~GvqQ7#Z(c|@G*QQQKi~`zZaWl*aX8IS zrTb)^Z4K8CeJ~vYf8z>g=*D6E(o9tZ3E4Pd(SJiII zVtb`Aynn)rUJRB}xB0BMe5@H4_r@n?x^rn{jE~0`^8I;RoP_C#aHugkabS98ygrw= zFt~T(8s&{(CqCHR(Oek1CcIYu41_nYL z=x%Mo4=3#!0%=GCZzAaI==@QzM{oT}5$v4qSrfVPufzLmVBNhoGzQ@LIgi;YpV|p} zn*MJy?}P4gD|;)-!u)j6WU0ha|FL{e7_=vjjmGCv{^TsbJEVF;=j+DXz(x(PH0I-I zs(s~jyFC@Zch^+#`C60`m-+I@L6pivW_uz&_~D(`H694EH;2PVuewrsF?2r?pLr-^ z2Dtu(=5}*wp?ye?K2^-s8OEG7FSq|_h8-&&-@-yW0({3?wu5LP0Ijy92WHKGu zR%?EyzV!HEyE#!Wx_HmifwxiJxHy&{(2B+rnQ06)%0SRE$ZY6I(Bk55qjh&0jaPOT zc>#QFXTlkp%ZA1#gYoH{ew?#Nh?ZfF#f$a_Q(Qim(f=#MgF!bqVJ|cmT({lUo++N` zO!Hq50uBt?irP3heFF{RSV+KziJinr?t1X{7wTOmpt>w03VZFK_nQ%#1o5^@Je=x=D{l_Eem3g(&XeMb}+ojpaR06f18@6l7JdnTGW-x;q(!Lw;T$}@RPL~}Zt zpX_=yP;hbWn)T-1@Y$%hYbcKywQK;+&v(17e&)C&6j#~BNAa!Bq|b^wcb$2ixx}6# zj?#^SGl6Rk&zi#yL9#fu2ozft7z~$(=Vuq=G_&WUUff_OAvf}Jp!yo#-t4ybJ@<{v z{^cL9jWJu1Gi5h}-!XbO4V}Eb+ZbAI9giw&+?^gSX41CW9#V;iTu}^PNaJEQ#Vp5w zDcReKr}2k`!}yMLcKADTPwkwy(Y~j?v>h2xZ~jU>ABtjK*z4v81VHbJ?3fXO_8Iwk zMNEji$T5oI;n)r4@)sd%65C8P5ccx#?!2`>$6oX+Q~q5COaAV7DZOW?0)q*aY_Ct% z*#crjYqztIZokH0zn2Sw`ScCNT~~&iWoSDJF*%m+dT{!g8@mrpydc`iiki{MW2*;t z($^)xvj=tgj|`qGFvtj=5XJIVyt85~!r-nBn&pO}LwhAM1BXLBb-H7dziI|1@%KwC zW&=H8G5;71wTuC4#JR-dx@t{ko$TaPd@^!P@53MzvkUQXaitour0?gLyf=1mSk1C8 zmu#Mj!)RWIuRqV`c(G(Nu{&>WxwqW%rZep3uWxzl$K8uRd2&tQgDkw_zI-tFi2I&; z@3TM)zyF$*w)4;GF*v@vJmc^Tt_#>Y0QtJttc2~4uHfozJmp?dKfH2lR%^d}a7Ivv z9}U{GY4^k1-nHyrTL)=YxwiiPI*wJnw_V_g8S@BU&OTEgH6QbCnn}Bie+2Dq_3kd& zEM>_!7y$FT1+3X(%bN#-KFBbbw$0$fapS49xn!ibW}D(!K!(qL*C^cCmBTBItt$lj zNx!@<*tM-YKpjRGbw}R^^6#OEBQ0YQuVi?7&Zb&plwsGu!gqTAjej^HLjyPQMkr@}Tkb%C)oUd4Pt4wi8VM3vs`l;ayW#Zu+KYoc*qQ|G~vEfmr@Cff@!p z_lC5c-G1TL?3V><81nE!EJT=cAi{x(3$VTYO7_yhiAeBvK@W=UQE+u9b_LfQWE5z) zLe&I)d203=f#K~&&u{C44eu7P;d*-ZIe|L9z34uF!`IR+85usEx;&BYvv+{z>;UUKb>-!C!S%gk`@5FUl{DDA96w8uL252GxnxPv=6}E| zfqQj~V_BcR`{9-L(r_dtb7v3ct*5izC;EWHZRfLfO12z(?4s!2c(4sjaqF)$S^}{L zykHQAw~n^Hke-1F!W@AL!lNARxd%R7pWHsW95q350$IBEagd13SxUC;Y#qem{qL_2 z$6!F0xYX`@>!&DK98rKL4dd*eWWN~WQQrCB-}QcQ@ukJJriz87nau#@&}?}_1wp91 zrtDj+Cvym+m_Q__mL+U8 z&?Pn%Ra3Tw=otRMlo*D13k8FO7>3<)G(zOdNh2co78T-2XxL>w7&Odv^tH&J7eg9- z(eTp#In%<(E%tgCtO^TW^dX11V_PjS5i7nPWRchM>M}*ob}$i_QjrBHAZCJedu=On zaSO6bHexRpTC$_>U4(HqutebQTYvC_ z=id3rqigF_5c}bR@eKOm_U@N&?>^Bw?hgHGUdwA35X18`sVM(iyM{Mu)UGIUR0R5; zf1Y6*L1`vp02C8Nr>L8CQ$W{-Uh3XcTedGx4}7M6a@*lW^aFg(qkJge2GYub_VS_9 z)5OnoF#(JS4MDj`V-`vm4Z%2H`Pd1uL<7~g%R#aP_!Q0`_+2)q1#{Z z#q)GTQ~c&?d*>0c+E5j(iVTsoS=()kF))Ww(i2}%Prb8;j3ej@2@M?AyZZ4B#}5Hu zFP8{&=lIyYH6foEkpvteyr?7HX*9NJN|9QJ^i1bW!*#p%5MbGm}*2JvFt zC~bm6p_FTRzJa><%76aBuzu(4nsZRv1P=809juhwUzj|)cWNgVL7(Y&u^no?)*h0m z&P@70XF2{EOm|9_V-oDe`cEg*1E2d@j+aJ3x~+Dg0?b~vkil>rD=g?qT*1TNEvEWL zL2Gq6XQ#K4-#XraaD2BX9509`iB*u9xjF2K-M7!~EHao?T73-~kB=|>_Gdb9x*g^v zO!eMI=jqPV&hyUmz8kSWyIb7#z}{#6M@|Pn<@7)cw||Y(ojL!I*a0vzsuq*icrCH} z`m81j)Y**s?a>a(Fwl4OF6Mp!pZkWN-g4`?aRNq9rhaA7Nu3j}aWbmGXuLicy@XM) zl%5%KM=NYY0hi&mf>F>VLHKMBEJ+`@#N|+odsolkv+}bB0ahPuZsg{Y+bWq1vUD~- zo&DwC{=vf+fAGvDAxm(mIq@`GMohlo^n3PZv(Mv#=3lI@*CvOY+DmDOS^v{sJsFgC zA9g)6DGT2YVQ)^K#;AwEpDr1U(f6}Gdf)&{VGFhn_1CX;=N|4}`~ViK^ye=9`B{1` z=JU{c*gNA4ozD&a<$dn9pr485xoop&a(B=2fy7JSP7)&rp%=!btDRWhNAM1~Vy_FtzeN}7dV2B@D5M#sK$@a76;w}~-s15c#^CbEQb9b>EJiFh>?#E?U z&d{%!4Hq!txOFiCQ(ljLz7M+?^`*F`xz8?o!_7KN!pjakIoHPV=rO360lxU=<XLlrNo@5u)CEp-g%h|c(# z8#;Q7hqsRqc0XvgYrvXH>kK=h1FN;5;<~vX*4$8UREV1FtoSjSlr_Y=v^~UC08S}F zT?rACMOh}Dz)2-23sU5M&J+%-e$c>*&z0JBqDUW(2a+flA#`XNQql^f8d zvF}#sVv`XQJC%6{W1leIxO!%ofD6Gf2ephMRklz+ZAR&w0ev6saSP#=-1gsep8SQ! zE)L(j#t?o8?{L)Q#8SQTti&Ws2;4XpH%XIY;f6#jh$uQca+JC!Fg3gA8oCDxa+1HG9ykE^kZRRP)tD&Dk8I z&9(wo-DH< z@Yr$uo?)>Ldt5EBV`rSRncCDs>^?}ABF@KBWt3oHYsq0Ax6Yt71UNBvR*MekSz1j8 ztJ;LO;zV}`UghDm22ubfV&HUp(eSy{ucf2f2|dxA)sPV1K30Q(_||i~uZ+$zIUKyf z*a>25>Rid6v@;f4zf=cQn!V?2KDMMJ@BGQX{qcj(T|D&C57z%8o%oHBi38W(c=^ijeYSq8*K2Xkp`^%pmKJ^R3ujB)_oUawXu=U9Fwj;rh zvYA(Z{WJAb_g=AO@5th6?a1D(N8-nf!>?X(H-n`t1Y1`fbKCOk)pb_RIOF%_o21=9dn9Zsdabp?N}Pwy`Ii{`7C$_>Gr-!#n%r z4f)ky&5PqJIs3}oH9Y;#fBp7XZu+zH5`l}0cO3=Wc;cUrOnkCEalZK(_sPc@yYFQ- z?#;w~_3Ov(IN$u>E6aJC$$AZSYjfh)niC(tap=^wd!)vb>1cf=WqQqBj~k80x96K~ zSZ$AdfBVQvdVM%S!0+zn#N*W9z>ZhUkyoR%X5JV6%9YKD3r)&920-mMUpDJ6ne`QW z&&##RhI95w=j^r7^4Q^g_eyQ_x6|F}9*u3IUO6y%>cAc64t%6|cqN%)zGlb%gni=4 zv9l*%IdS2NT^H)RR#zJOUE0v&?%C!Y-+Xv6fA1B$&#fGNxVzXHV^@Mn@4$1fyfiX? z;fk@B>Z7j}D|YAO^}CkFzF{A@=a*h#YMXf~xHh#PPVM+R+0;z?p3$YdZ+_|Fm-2^S z`obut@Y2~0Eoa-i4}5m$)W?T^IC_7LWhTz#C!Dz--djI4-aYlr;7^v6yl6O+bI$i4 zzjpONbn2D*ExYR9df#7vY~NiL=~WY=~~@4uqn zJv5sVXP{Su4$tNJY~tfwUl8zJWou{niu&3Aa&RKve|g%zJ1r96pbejfHvRs3w>LMu zJO`dJgN*AML?+rd1*hhW_6AAmY|FO`1~LtCLt6&{tRBQ4O}95cU1uMu19Zt6KJ<1b zV>Y?`=nDO)1_JW5q;QGX#^*7XXk#F2w;sRYaC(4gH3VekvG{FgAHRVp-&(@uo%`zm zC+F>cg3-CW-uRMn_Hj3Fx64O1Dm0yD&~sZ1Hx{Q;=39($iPy|lWL!dO0Fg6Nx~JT< zt&P@$+WLmpB8)Ofils{eBQq`5j5ysbQC=pjcRO=U@Q^3Z5#S!>0aj}R%>2#vWO4GH zqoa0R{WP97DMfqy!pI;<8u8ZZx;|jcp!F|JcQqDdeo;@{paPi~A=T;C(9mf$!fe+59Ke(GPuBjfsn+tUe4PQf zwZmN#wN_B-UCG`pZ=r!Xk?bweTWg2Ki$1y;47k1^HoUdmk^~NdF&w_GD68ekpveMFIpebbR+%o(lzC9Pkds^<=?_;(xH32M$G2Sy}RCUaWY zB$O2-5?K=(`ReEMRg7^Z0fHwzZF?+Z1??$W{$KZXJ%5bPz@oE^~isR*{v28_*C%RwBd`&1qVIY_*JRuIZMTSX) zE=sT}KZbJJp_mka^5>SGypUFCfMJcfoPFi2oThm+D7OwrG(V&f$#Q64% z<%r9_|G)o`rTf!|f13YKQ-1!0TK<0=bW6LuT`t}He}AyFfPQ*Afo7e_PyX`TcHgv? z=4(l$DT|@lUvx=>F^%jwr)LW=T=db_l&`n!iH66j1+5`-4{2t!6eF+eDI++Hiz|^6 zIf=fXymdU{hH?2^vDU8@zORcSu2aRg?Z%P4&tTo+NVQT z-B4p*N72=WdRbSCGCEHcjbRh(w$IFkr`@jBU9R)$GVz2kwDd@c7~1=j6i=~2ywu-7 zF{T{iw#qps%24b;`Imq7C2Z|6O~+wn2z3=0c-lCV?|!ej@CCSEl>4dGS$(` zl<~-!Or5I=U}>s(RKAD6)tdT4}Psp?r zYi7UUN{8t()d0%k2iAe8Ng{6@>|jYk!2E5keA+Gh6jA}_sKa-)Fa?lDUjSKz>C9vy z@0U-)+lr+_dLcB`Ph|>>C^$;RS_`MAIHzqoRJc&I24z;Nbo~%%DDhC4pOa4o8Lbc5 zupGiRU0@f^(##Yk%6#2Rwnnrd+IKf%F>1i80j%7=fG0&hu97Vj3g`^l#n0XO-n%z^ z>z}>7ER~|14p~LY?BP-8vJtq(l+M)j1KuGNY7}mw5hq6l;^K77Qxf9miR7p`UC&R)k(YT{kyI>|dx^d#3bt9AgmQ|&NZ5o5 zzYyz$(THjuS7ypDB?MEH(8@I`bjGTIhB~A!`jUsVJrNIW7D*R@o4b+7$^|&f=TzP8U*Y;a|Q%FQmPVW?Ox zlEve3OCukXaT6q@rI9-)WmmwYU{bTh1Aycf|RE8?@v7Ud_#`14=EobQrB%H@&pa%)>I%8~s6Q98mc@ ztB3UrE7aF%%()W%>39Ak$Sn3mM)_$EMf7)+pN%m-bG&DWowCwcFsnaBv{oa5ViSGuNLLXLI@o= zj?@MrEEPjqg-1ngnw>46$!n${xj7f2?kgTnH)efgU8K}m*OnY8WXN|*$? zOdZ42w|%(Evu<_$P#EkCh?l`tgL!8a)_>bUVKU9hbrv#sQ;4DDD3)WZvov>1Cb0BO zqB+Q*>RfH77MKl2yEh7GNHDm1BTrcRNwXJH>_BtFvY?h4P!x>oGhR~3hqFq(u@u|P z$E*M3jkkVb|LOmWn{qe}dom>yw(fx7L>z=pu9C}c5cCx0;Av1+OO^a~)DDNs8NL@zZ>lRs*T7O^0+k%EA2W7*gVW)c{d(!#HU6OsWX613E!_QDXG!x86k)Ez3<8!J|Aon<;3mJ`h% z%oWAIa(vwaYip9qK4jNc<+?FxCk_|^^_uT&ciV=;?sz`Kv{z2e5bLtUK=e0U?_!DQ zJM?^?1F4ewdWzyYL33)!AB;xhyG_^E9W$8?UDv(qNYm9U*9cUvH=3pA>et0gb&Ztb zkT&NKILjF{i?=J+25b+atp1=@giHBTg*C3Txw;b89m}mmX8L%LPtQ5gC$hS0)%CMW z#`xg)1uzbQj@Y7yQKqyA9Y^iv{(7>(wBqGrHA{?HmpMC8c*af@;JX~%UHF31av9EH zugHO+G1D{d*oN4C7Ry5-_e{$h z#jt{kf;nIX;Y86y_2tMuqsf|!Cav7Asb;)jFe<)GauTJ8Woh*Qux?CD7qLf!@oi~u z4r5Ct9FP(?NHK&mj8(3K3$EhKVYfIn(jBlv0l`5YONSPF)MIG$ptqFo(9s16`4u~| zdmVl)UAmfv)~V@qGTD&G^^(iLo(Nl7QZE=EEwV86wFzvw2;k>XWnfyPlZm}2k_x+G zqc^CW0R}EtX1m1Ll_5v3cBcz0;lQyf{st@dbTjaKIXVo3a(PT)!fz-I{!#Lv0a6Y_ z=JaG}oBWYa|Kyi;Ui|$_2zj~BDh~R`=xl9FZLW7dypjz-pb(9>dRHO7OTcTjH4vw+En;;28ba#Xo5Fus6R*3b}wK*zK zNEcp^Qd0>BH=tZ+jxc63x8QMwgBU~QOsL{;`Ne_YugF!ZDZuGMxbCIisk zV7AX?@D+@TJj)R!hqNOa%GczI))6XhUe6xFqaCcHa;k&0Z9UnUKT0Ffsk2*G9!P&% zYM&Udwg2+L_h0<@_b8hj2z`e|nlxi&KizH8F7ogxUr&#O`XU(e7SolJjgc8nncFNV zr#eR*&94Kp!CI$oW~h-8G0?%ta4<-?ZZrS!4OO{bwS6_6wp1raC}XTB%EDNp-K{I* zx;LaN7)yQ}RFDU3(o(mp`gXQlIvnQHX-G+0x}`5OxP|_s@HA|9(g8-gMySu=+>!Exy6s8lYMYLku?crQ*S`|oJGJij%O~Uwx?BK#hI4FxO9cceC~}e?oMeh` z4HfcfQ@5FtlWNt0nFPU1FpiA#ggM%gkQt9538Cf=J<)y4-X*6rf-SXKD`-+OIlSf= zW4aRg72wX<#e{t~rL0Juq_%!+-B?!BSZ!?r12X_&i^#jniCEhVt)+CE)g)EjG1f28 zl64u5QXF4pU}qu|wkR1gpq{k#7G*HC{G97o(n9gW&`=Mm0T=!lrX|~6!9RLc%#Xx! zkWaPsAsMmYC_fWnbW!}pEE=mV=ZRLNBq(m7SjD1O$BqgW9AYdli=IhGE4!X_G_ms& zDN-w&64ym}@wUJFhj(Ax@nI<%MWbDw2_=>74B~yVMC#kL}};P$E&PGlXxwvhW(9Al-E=e?z9%t?*G6-8VhK5tbdy4@Kw z?W~ra%{40}h>t3m8^bYC+O_4;6FOgU73#%gEX9e4y+q250JFK$jkt$>5eAO317qiz zqd)$`?_B&Bo1|cChhJHU8in4Ddl^02hI+nZYb^Q+ZEEB1oU9-9Y*GKHH`}w^RF5|z zbr>CIRA&f+Eis-O+L4LU8=+fwR#;PG_EUK zY^dwt^JcXQZecB&oy8pCH5O5Ic8#|;_>MZ{Ob1Dtse~$1N=KojX|$ZlbIy>bdqF7* zD9BuOT}$Ww7)G|Ek83b9r05tUdh$L3i5n8)UXTl(*D|D({jGbSKD6O0KY6DlDX@r@ z>#7w5suN-K5{lUhjeI_ZdZ_z>mY7+f!Zt1mKa02ItCG3m;Im1xh$F>z66|F(OZlRt z@@W~6FLT0Q^5t2yo#F((3WSJUO0GT@BsYDCKQ=pMxe%~_SUS;GJ}6hN;*4Wv@SIB) zzMfk8c!e&8vT-e4$6;@JFd8Q zWKUmRlBtSW0FIrqMdfjMljoyJulo9q+wT0)+rHi|Q^*fVRvu-Jq3tL$qvbnT)2--k6S7f9ll?Q^b!L2^ENWG4?c&brWrhKAbD&B}8z?FIc z!JyH&ri2Jc-_}A2Oz29$!*pF$-XRu7@2*QHarCmtLe)f*dx@GmvWb?QL&Z=DyjrG& zPF<{+(vIosQj3sBL;Xr!9!rGzl1S0ENXpGKKYH?=fBwBo8{Cv^E#EDl>9+t@t(RAQ z8ZZPvJ{8LM|8V#A(QzEtyb6y}zat6@sJqq??#dap?~59o-y=s)9nGXus18ArOgzn6@@4QF1H> z&R5HIh8j}oz9kSz6o_=Isj$t8w1SN;*NhqoPx!ohR|?iM|r)SP8XfDw67;LLR=Z2;Jb|oiug3* zynnO)&5Ij;`q=~kBFL1n>(j%qhI9A~QyL6o%S?+zB=n2(3Jc%rN?PhuBhZ{=OPS4cD2Dt13|MO z=OKn{_Tv@+KuIJKvH0_ridWHAfkz3Zi#9m2MJ&|I1tcv&K%n_Z0Bt!j9&mu5B5|`b zd5Pqp9;%~?CyaVE#4W9eUw{rbCRiU^MZ? z1kDV-XUiCyV6Q8F6e2}d4UF|-P-m5ZDS!(Au+qK!3|n{mUnHWtC@{lPxFtgg#g^hx zxbd(sSTZa`ZHOa#ol!MF5DouDKLkn59Tbs7g;UK8jAoN>mZ>0AOl`izkv%$6a>7w4 zp#>36v?-QU^V16N%!s1JX_bJ*L9^K~6nZ#3$TIPND~-|1$Ss#*iM->Rgjo?m**J{` zF$fb!4I~#pz-ZtT&lN}SL@@$sdKaTmW1ufkk7>XFG}$`?)G}=_0K)k1mbz$+4pyg~T{WPX_3e0JJQC_gPWTm0y4Olik1agLkj2QJbjTuz9UuM?#CYangre6ZsSTJo3fLZ@v13%{!u4!1-{NUq2XmnYSk7_ty|QeXJU+kgK4 z$|0erNiK$809yDaz!S0skWD23r|A)(B-mpSo=i=;vnF{Fxq^Z!fl5%OKrLL(8dGsP z?17}YNs!OciWVNhV-U-cBYddA4pKqQ%ve+qwN7F};zcPl7?>1&Vv13UIt8FOM3AYl zqro$)brBn1Iyc?xJmD85y8?y@A3?Ev!CfwbMcpyGBp%ff$6WVNrh-KQUC?ZC&7gcV zz!7`T1L2CAa*^rhKlje~B^F9Mb1ERlhWj#am}5+9R~Iuno5 z?V2(pZ^}Enlwqujxvmdv^EYWUOB5_DVFKw_`-wVy$&3$s>MIE3gjEc%{_UtA?5|yh zmRg1$(=s{ZlVFf)Jdbm?3dVdrJ3$(38`y_sDK`jRkGy-l1oYezG82{sZl%id3N4cj zy7g+gtc7p^=Vkti(7uf_)#oBC&jM+Arl8C8L2|C;mG{ww%%E50@otSZmYbMut^Oz; z-~Mo)%=;FbJ=7<9fw7O#ieWEd+0@e;EmDw6ZLD`Q(zxo^#|!46+vrK%ri{)WbeCJ6 z!`^m#>k^xdtqSk*w9VD!uif|4j~`w6^cPqAk<~IVu!X_8{OJ)FlLlI9WWzC9@8>%8 zWRHR2qdLylyDqcIsBt2J#9-4?x25Dg8FZtjNjGC;%492n3I!)dVfHdw#jK2drw&nk z;UBBXh=#s{RgQxLF2INay%u80*^B`L{G2#0`LiiVijHh)7Laeo%B({-(LrIAeTZ+c zh!hcv_A3jFOE}c8rrBA!ET13)IOX?=rO3<|%Z%9=Kz@GWs2O>1n8(X*Zh#VfH&$n8 z&a$;-R@3jlWZHLlHG)yVt*aU-BM#Fq_S3B~X=1U}RLX1;OFSW&)5C`h)@a5dquf+> zhhf=@FH);#!}LS}v?pQ@V22*hwl%MB(qs2Wgkt&Zq|QxagV7ptkL#K1dI|$BD=UpU zk=j$sdf{be^(_`N8B^U2>*d{iNTy2<=iGMGrIwU}Y{bU!(3xs~9bFI|?-}-ILu+&r z6pTkpD=&}SeeQp_{T~Deit80^D3u-88*o@*dh3Is<^_1Nnp&^rWHS5>Ny}PF&xjW5 z6)eK(Q+r>Pun^bl@=@&VH9#j0ShFg~v*!plrDQ2ESizz(=#h!dOUc@SHO#?nVtLNl zkVWlt8=%NUv9S=9K(1?sLk@9_kTu-jL`dWhDswC=yHKXv3jJ6rr)K3%Cy9&hJK0in3IxM~>nZj%(@h+>jhWBfQR8(zsXfw{WY+ zhNa~)38AqZdy$)WO@cHA)8nK>*4Z?#Metw77vmCF;PCdV53J075U>*0C+Lmc#UryX zv**T&$8c+X@Xq)_b_1<^>eTC-U&hARJ7>RKe~NxUzw^wONpk`N-X;-pE!fv+wLZ^HK6R-1Obu{_5zV*|SI9DV@1B zD*|pm`G4dWx?Vf0gt_qzRO_P$@y?~Lyb-@WTko*8|s;olv;jrNSb z^@x9c^X;j|Go$Y$PnE_~qjw%bQ1bA^_09K1)8HVw`Te{8b$0a5W7k{Xzv~@5oDvV; zsocBw^=aV}_{sW_b zIJUEK-Kj_YM}F&`#z#;6!PtKv+jLIcKXPyNQukMnJzUyU+THv?Ebe{pHH>TA$4h

; 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

(_&whtx9T4+(k*jiMoIRj>EG{(xULQW*s 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 Sbhb6ya@(9^#qC5Nf&UNan2vz} diff --git a/releases/MultiComp_20180629.rbf b/releases/MultiComp_20180629.rbf deleted file mode 100644 index 7a5ba398c6351aca3d1f64bb80ebc60e7f3e9550..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3389564 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�-usv=^Ps| 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

c<^m&1JAmQQ+Dn}7w@_Rnvq4HsVylk&h8H-BZm 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
8&TY4w~G(iYL(yMzMek4 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 mSz$o)sJ_CZM6HGwhPw@tR%l>3gHf`q~26K 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 z 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

Z`ROYuI|5SQLuxK@gs@Yb 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

  • a1c-mRPm+c zQ4Rjfk8on>Vg&y5GC7cQF*C3=RG9oF9 zqFP@Q5keCpBce4K5fteNM8-u#FuL6|rvk@T@h>iT_!o0zL{(SIv4IfE<+N!;qN+YE zRDnB-7$S3OTiQ}V7CCRK;!uQYz=!BdKTQ{KC#F^vbOEbBM;C!Q=_}DfB}7*Moo%cP z#*r%yHU`C6DdE#{u1+06GJuYSil|I@QC43tUb=e2$4{*>DC~wLm{=1M42d^seUV36?YYBP2Hq2 zK@~73sA3aVo&{Baid4bBQH#+LS-@7bq+yfPkOAC7d61(V72>*!uglE_y;>6`>dj_@ z%P`8#23X?&gR+($K};a7b!91V{7o@dxOjTSh?oEc~rfesJ> zRC6ieu$pe}27$jA;^{rhpX9u<6TJxDgN&NA(3!H_)tifnHfnR`q8c3FcnlR(rkW}O zN7&PNE+#(yp3^V>;zKw8tENM^7h6Gerd)LuMajnEjS6qCwKsAK_Z8_PqBlvLiNPem zjygqg>eAiZerO6dN`y!x(oq-?88%$DCa}reL4Oq!CBf^UwIoHu#eg&6P@jk*p$iUi z^%e$%IX#lQ-6b%r6$XR|Y{ZD2`>P5IVoQMv`#eXeB8GREN1zG?9z{Ghw;(3Z5(Ocr zO)XIYk64owb#+Z^LiiJ+78FG=D1js58Ve3IfRb&#WI17Dq_bkkNz_B-#&ZTlOJ$P4 z(_~9|1uKxl`dn-J>Q`R+!=JfmtJY#qh=x*}n-I1t2|F_m+GC32!!X2x6DJ~aLTtDg zG}t*o^jupD3hgz+Ygmv(%Z308J%ttL;>UH}#+0P)#8Z+sQ0ss>2}zWo791Z!5~y@J zMTi|&puvsT&~Tlp+^2(v7#0+EiEm0QX-EPcBG25(;~%l8u&KR_uzIt3#g!I=GN=9AtcKD=fkHv;l-eO?9*e3k<+uVARdw~vEMSG~(xsQFpM+6l?**uL$?7%o=2?wm}ldmrA-u{-m zKX*=ai(fESkymH&fo8Tw9Z0{aw2DQcA<{>wUYr_;3o_HhpvWVGiv2cp$$^|Ud_tkC zo~W`Rq=5>xCN6RZ?(scvZSgWi&x16gA4rQB|443PBf1BDF(Psn)r*f~+E$UrXGtUb zDVt*5zhP65{Fa*(2#XvSPZx@l*c1_B+l4Stqd?6$n*y%0rbdB_Tw17+jDH+@U`n(o zx#679HWlc?(Jh2FoRInN5(q(v#`1dz|{%!AhV2vyk zrwNaOe%H|8i?9&yEQVbX>OhG~MVl2w4ET;O!4AQM1UtmG!;^jq=9|L;1z2~2i%9fY zkbxKDoVQ7YMUDzZ1ozKwV9A0GmLA@Pupp=5ELpq>6OcuYiL!=w532YCOJL<16tY5B zget`FR8gS{vcOyreHN-XYgRy`7S%v7LuZ%hPq_Wo)y``(AJOuciQp4UVqR3b@JI` zYiJ-%1!{26{uIfgMUib0!v-*ad46bFQ!|TAZoyx5Cm3o8sRj26WqhP7Ee88)}gJ zHcvyYleZq(P9z#^%cPK?MUdMR?Gh<(hZ(hSq37z;re{9<_y6UcCu{%sCRF4UfjLp0 zW=IJ^lnDLJIIYZa7*k>16$DW?axu}5n1BFUxY)8r5Fn$UL5QI(`V$o4q_&HkfHdwT zLq}MXWM9!6v z54o!Y0a2I|IUeW^m};Q`v9Tr}a*FsDuz(=n^y9xe{p52e|KXJu7Wj!3B@}W{0yJcF zIq;EFsGLHJ!v!lBP*Lb_P>EFT2STiK6c-ODq+C$IOMFr9xa(Yv;bR^=3M@| z3T@C1ElNr$N3zE=$XtvyWg=M5UtXe?HF4Lo$?2kRDvy&2E5~_@vLk#X;)k)A-^eb9 zHi>2m(lwCpz{|t`oMKe}t6N=Fl)w4m-Cxt5nO)1|aPbZy2_shjiL@Zp%S6yPov=njPojncHekjfOU;@Ipu@$E>(^&RLe`|CYZ9j%=Z;XBbf`XJ>(Q)6 zk64jfp$HT33atZ<5<&9{v0hRyfUTVNvP7Y^2*7%jon?R{BXF7ex^KhCqadoKE{*#fQjmGM^Wd-+Jq(aWVAgYpKr9j$x(zxJ2j=C}+IN-SCq? z`Abj!%B#1&e)1dlw=T`zlur2NLTeeC5AS=W8a?6SN|J1^Zock^m^`RZ+(_Yhh2 z-!pLYpgF&^ZQlL+xvcX8Go7~#S~pvp|Eh8Mz%TgKquJ@FyRVt){D9y2n}eHg9^8E0 z9o6q0=pR@;|FWK6z2)Mb=6liuk53(FOi@?#;yqV9@}#rd+QZF*gCD$Q(CoUj^YX!J z&%P^OYQFEu=6jwzknY*-E|AzzWZ0{T+AA_IJGN(i^|w+&KG%m-brkx~lp6w@=J{xb_>5 zbSz$6eQ~qUcQujnI8!>$vH1_ScUuUNyUT)tx&!Er+Q2Fy=1@l zQgf{5$;II(S&se5DQot{#@GP0R=?N$7+3c9ywu^o+@YDXw9}qnc=0ylM6>e!j{f9n zchi&ADXVSQ6>Yl){$eos3u|&99d>GC1Cs-rJD&KPWNhHt%CQTQZ5@*x(e97Gdf$II z`QdDBi0a@MOct5yEH(W2=JeT_zNIW|v%IckshURjm715Y9+)Nx{6xdd z+)nSa$HvpuX4{Q(ZPShL5B)IeUp;@_bLQ;$OeY52<7%R7fwtxqo81NDR(u?(JFvRBbDqS4<`u);eb!*Z>2{??>hRH8v*Tty zs{7}xk)PkShICaYpPCoekv%JpBbp(-s@JiWYcspW!jgQ)E z?6bJa-@sL!{J@ht5s!s5V5V6~1#g{z`x7a)9z;C?seqSgcCjDAm%PPhs(uEsZ2Xk$EFpqSQ4- zrjBgQTtXzN`0;vu5(#`Iw3oY-PWn^4EpL+O1HX97X^?-stCPo7QJMG`$r;gvYW%g; z=EYLr7UqOpue~!q}QTO$&RF@vvDz3txyh_?xyc3Pva9~#^RJ$K zwVEIBhe|_=6?1>mSz@i%$;gdZxj2fAgYMKk9s#AlZ7|Dl&skd3H5j9|xMSJsaEzs! zg_o-pCvw{~yHq8>JT>Q14$uhGF4mVTTb?_l9+=ziW{TZEXSn{9-%j4&z%W>-Wf+HT z=?SB6?sv#Bv~OlH`~fd>7i#Y0Z!7kHo7a`N;cMx1V=!e6`Qh{-OKO?V zsAWpHFr>U-XkAlAyZ+n}Whl{X@0M7tC!#9iwwqJJAaO`p4ID3&@k)seDLdyVld;lN z6J_DT2>3D*P+abD^tQus2ClkFo2@#$%P$wN!q#-q^QB6`c zx8s-?-erFLmOuD|O?U6fQ3p&V6UxxKtT_^s8-&v3`*RFBl9~eReg!82>(Y%kUI9r|dq0y=1_wXrz(CKP`%dRcO z!>acJIT4d{V7Ev0606@f2F*knCz6s(-Wil`ucYabS=C-I%d3)|bsk0N?4I|U=25+q zdD@$lh_s0tW2Ifk!~}e0J+&z}G-E`)hkBQ%liu-mN8jUAX2vmk7tFfKn$Nb2x$ zt-Lk0OOLBbFEJ~_nlz&8)cHye26_fi0;XBNG>jdgw=qKmRo_OH@BM(qntN7|PMOv~ zFW}sy7}geS6}09)TqHUg(!jTc>@z=&lSqR0P{j9 z5*8YDI@Bnkpr>+Y)V$O&r$H22iisjDI2tAiS*$D|!?LZBk@7Z6S?SH}gtUVC z6!ANzulXM2YXf#A0@RsGkt>G5??}!sVlb|>F*e(aeD=5 zQ2xl3+&f?IERo0A30}KP(?%rAA@F&$$129R#M*GtGI+~~-2op4X`m_&Nh@hM8T;q} zp;;w2htADUXN=a&HM<<$JR;OhJGc7g?T$GKHzZbIW2XZ&JP8yB1qnlrwP}G|!Zf!J z>3r`T3`&8Hl!PylZ)B1|!E#u&eVJ6F(0{LR7z&K4;{hlLz=G-5BUQ=7D94jMW6aXF z;3SO(8aGY<@V-AjIsJY)!xkxBaA|}T>lbU|H*|m;&MC-J`XHMf4l)PZ0YXvlOY{Oz zLO}xA{sxdAsEG`Xw?SiJ5->H?jojE^h2vfVHZpAJGhM1`0$y9SUAp3mhLF&ASC3pd zl-H=hvS5`>=`BiyvMr`3!T#9sn-QxiguSDInr7(sfJ|zyyKdql-J9A0mj-da;%sIv zs;$W(l@#H1)caCmd7aXhsIbe&=Xh4O0G`2H`D4dU%t%IsJHh~%?;BuZ8p&%Zr7~&G z913~P$8llnNlMsg1J9~;F7|{W8PCr={=r?SbV zYFHXDvQ)X$T)o`{myEv5AUr2)MzAjM_f4q~6G(wlGGo0|C$PE4=_eKmMxhi|E(j<} zjThZ>Nuls}WoUBr`c~W*5Kf@l>SS6yYE>hjaf5}4_q-JK&RI<;n)w)0nKwMgV!OSj zuo%XK#R6~eaMfyKERiau7_~&kfMGs%Asja`CRygiakh5(RaDJLIi%4{VypdD-AN(v zS=4R6uJ)+uq@PUipAwz?!y^xNZ+PE#*Zg2;$M7;Joh7MhInZKJ0gj6Xy~<*wbv1yP zQpmhCZR--+DA&Z(q)fIsUZAh$nxQhhF|s?nexEZ8@_NPhol@o|@~8$G9y}p#Jo}Lu z#KExIMLBv%8A209Q9OrnG^-CIVs)Dlrlf&G=v2q$RN~EzVY6b|6~9tix1n_u^7-M;DmWMYQ$CECK@ya-Zy*d(1=O zdy#-$V^=NBj01C_J=^bgYjLs^xQ_c7H!zpIdPQ?)J7RyT7TH_+BX?Yh?N7xEVHz=d zqsVX6DonlZ)SaC~^aF2w2)$UouQCJ0#@JzG5>I8wA%<%tmR6^eK!xB#B|9={B4_2Z z6S&g4vfl0K(Un=ES5?;rKB?`)6C5C~O3=Cd5pzXioGc+Rt6KMDp_Z_V{S9wHH-P{S zbkJ@Z+QjY_Afc$7RZ7*pm4ymM}euCuzy6k|bIp-_1VXT1GL&6qw2u{NEQP=;f_C1oPK zy}^j0)i9k_$^$jHK&+<9OP9JzGK|uc+UrvVak)CoM4MTvb5B=4TthiSgtCmb3qOoU zj=PS%g~D9kd1ND+dc6;_&_y#?ryWD2@J%11+Wi|q?fXpGQd;9sVr&(Ys*1J$~1!&xTFki z8Q&wQBR9mf$x~7)#9T?kKy|r&Hc@R22=l3PeNP$q9)c;;pp>>!g@r+x`uV{2p0Lz= zj3S$;GT0k+b)>QvHCD-)|2;|Q^kwBU%Z&&B;;q+Txju(D!Mto9^-l@hSX;oXSx?Oj zJ?*OWvsf}O&M41L(zNIAq2jgZp3wc3s&XsZj2_BN02!Y~8mK~m_9L+x9$=oJmrx!l z4H4UQR?w>)sXOP*l6=TKBX?G}S35AnT(bG8qz)t^d)aau>lL(H9225g!J@`3!w5>> ztZ9e?39bN1KqTTgKy=pinv0~iwUC0N$X7&<;?kA21mmb#nK9EOMX-gb8^GFk&beU_ zE`~OyEo1;8Pj9DUoNPpTI;M}v8^OH|x2L_!TZ|Jk7sy8}i4XLp`bD{akzBzeCpr-&Py8gb?ho3lUF6Hm! z5BzBy^6Jo;9!jr)sGaSlCI@N;v0_-Gy*?KgG>4OT86 z#YWHU7(^&cU$!+AS5B#7cc}e*2w)YizXHd#XHuAv{==G6Ezl1lKE!NhbMcN-u2P&FbhilmR5B%9<$dsu?R( zMJy4fpRpRuO?N|IHAX08c|qpf-XC9TeACx(^9|PEgGw+}Gf_o=m=PO0YxfW#PXxb- z(pys$)_ah0B(ZI3juGJhW5Tu8D4CXn#!)^hJ7)Hk}lF6I;|!l!$w$)GC2oNM*u73V;yOLG8B@Z zlE8&P7WlUCQvft;vLf`ZbR{?XD*Ee{gLA=($vXM=>EHO+?``_{z2`{>*eZ6Z9;$9e zS8O#PZOV={M&O8_Q7#mI=n(~?N=#~Fm1&bvFL%QUiOgDD%R&stg!#riOl>>m(9dx?F^&>XOWgAsiG%9XY?_|co~`!6LO&@Z<(*m(yEj(TewicfE@;$h$;J+ z8BJ#Bh7mW&OZ^17k{b^fop|*N%O@}RAt&<q^en`St#%506#U96xf?5W)jFsqtE;x|I?3d&BiVSWIJ_Nm z$u~N*-v1FNnX9zB8`JXW1v+uUE)|`!r<58d)&O)&W7lYV)L~6rxt%kngVj~m_yn-+ z0fESzG!i}?1~N3KVo}>OmBc`X`y0`_m98+17oF5^w4p~tI584om`W)P}7d(dUae5S)G^)bsBO4MPn z(3n#@Xb`c8ENUyYQQ|c%&s0|2@eWm#B|BByRmPIX$WWqf7sf0})vaFg#kG&BxqIekcKjKdL%um=3Hc~Ss-z$C#GIYO7=2kT zqZV{B_JlGx#)Hcz&1=KXd1zLkKf!Kg$MZ5xIH}MOw}f)97!BJ)nlNbtAo+ATj+7(( zLV1DCtyS$vR0U&!N@gZ4a7rE!8-x)UWN6a>10?f>wkSv##bUeBnYwNoa)ib1Dx#D~ zM|c#0BdQ!MJBKh$aarSexhf!pGk^>+GdW`>lkGb_R5-LEd2_&5xM(tHa*D^aV_6V8 zog&$-9%3=NG`q9M{O0?9@LTiW{OCGqkVm9i2wUp%#ZJOf9IUxmhpWlzfVS2s^-hai zRRq~WEdoi#6`$`ij+krBU8o7J&GLE0hjVLz8{nHiCC$qgvdlIgp6}bmPtjyR(`PrX z)Z`$)!!0HS#dvBxdc$d$tzOUXFLW-%y`lsuXLudrhVBL0;~Ha6$}Qzsrzww-pa@_) z#ET}2(J?md5T+yM`C-Egv_u4{Y{totcHR9OZ`rZ3rV8X|6-Q_SQsrs6DaW$BfRk+W z79kuI7nPKq;(YNFx-xzQ|8gfi0a7Wjsk`z(D#s07IRbF(q6HAl1^MFqSHX8e6r$K@ zdu>Zla(HP9`%lH>;!;E7V*YNy1`XiN4^%iIyScL*Z=Iq9>%6>~I(#b>9wxpr&d7s> zoxLR20h~fRk!$sr&L>wz2N`qZm&Hc7NrYoAc}PE?Y};$V4`(k6?|%65XeWBtPz|v?Dwz&5=S2 zT0}oxWkJ}@R_%Zlf_hXO`$#O9#ySa99R6v|rY#w2{srVa#iFw0qG8(f;B+Bcc2qdXQOvG{&Sv3Cw_L6c&^fRV1S<|US% z30nf*hJu15Poq-^_yc)MnC1Jl7KkJbgM?~&p_EFYJCms`Ap4glM-rZ}zZd7n}2+$cv$$X9EzT#JeuWCX~TLSsslqCatk z?-bfaq{cGDi@0_U$$Vaf*n6Z3-+?xNz zD3T#5D796Pn=1-jU5K$K?O5ayaAI)NRpIZ6fQ4ox{Dj7qBme}6=_W>L$OQondU^4N zQY_t&a{|vCqEyS&s|1Z1M4Vs+^PFKFECIOEq~!4wtfGhdywe-!MS$v8!@9 zft8tj@X4?LNG`GEY#atD$t1j-Ewmj*OqAf7EA866!%bb%<(<;xH3&vIALz8p2njqjl4IZ#<#+NJ7ubsD*~vd3 z*JN|u$JQeelS0iXw{mB`0Yf(0LW>j?u|SqIW2bNx7HyR4bteA;xlgm;BJwWp;8cNU^YK&>#Qq@o1zxVGJ-}2opt!xDwgOk;VmvF;xHLzK3iPXeh zNwCb0CB4^kjhAOA3%?RZsYz%a ziP&pS!1rSH{h<lXd>=AUfvsDskbk?sbW9H6f?cLskRWasI2ZzjOeeB3vh%7 z(+@}z`zK<2xc+2?B&nFf_wJo>TQXqTD&=9fM{Q=j7{zd{w5_5~w>`SNH*8bU`0ms9 zd5*gn8Cb8|m_iLp%1rkmZ*Rq9Rq=-Ygwy9o4eg+w21%c%1S^##BgB&fn`Jt>(YWm9JM!`^k!F9I&iUYTG)j%U`POk3)6RFzo$v=~$)1 zQ6Im3|DmX_cEkN@n-i){ZRpvr{{7ML$1c9my6@!=ye64$KN2AqtDZl) z-$a+WZpw=KkKm6r)6{m{kFdb{9)pOnUv;+jd$(`7)^oqaLZ_dK)9QH({&QwHs-^ec z>4U(HHQ#pLN|{&G5@%t^tg5U25!3Bh3IU7h&u1DbOnvb})vSg(GQdP{*=bdW)wmit zxo}N@IAj+%p3qg;Jki0bKt@*xQCt;HxabveLbUZdd@f67NBrQ_3Z2B<_^y~eUl}@0g~4NI#y|7m(CORO_FipXyE{J@zuFvO@7gU7#;0WO2jlO~ z_kN}OvWZt`%-#1s|C!U#1rNrr-8CYozFqs+UEkr%T@O$KQBM5NYvsgqe^|R<_h-)>?tb9#ZCCI9>jrxtYrbLJ z_Tbp*2c%}@*z4`@-hH1Gt!zHPj#LV*{Q0$fgOsbh>jC+!yD0DY;P|O8Na4zBf7ne` z#~*O&FsG!@BLypqJ?c9?`=-5X-dhlUKx7h-tq6cluG>7WxnQ;YcKoO zD_3)B_tIy?fcax3xEN<``8)-!Si`lqGwI-)NJfmdjF|)42b^eJ7-{s8p~V{$;A6zA?Vc zcP;Ls6epO;_r}pCBMGG}SC-pq$64ai_~qI+j~w%czDy;{aK@pq zH&2SZ%TyTj$^JQ9$keX{A-zv6NG;T~^q-rCzJN-}2QM;33mK;*rv5zmlZ*0bYM{;|d zm$UpuXJ|EPMmJWhN1e)3ZX4e$1Ra#O5`-2D*Q#HnK0N-BFaZoSzt&qkN}z z0vufBwB29pUP*lU_9yd_mhrocWNW{5d))o(_}t^hZ^xNce7yV9B`qmi+9jVp`x(Am zN?KM9MCs<*!g#Y)((=YMFXGuWf9>Fqdu?sx#>%nUMQ-wx>&)L2^WnqON$9@doh@tG zb1I3d&!^T0va=taQP}cJwbLInFS~Z#_4lsjZk9`|3bwP|)&PQHTf2-hiI};SNU+=w z6B8Go7=89!KL&(>Ba?jGBo*(F8%)VWQw+yGUl~Wlt7)Ker-~z06-Ni&4VCh2h)8@b zWU>2_eSsd_Z?ZpL?7J$FL0J>h#(a_K2WYJ!H_6qSJj!lvsz(GX>fV@HN0r8yWn)};B&gFjmSe@-4H zYMO6J**}lWryE@LVgp@_{LSj8=C)LJwIyW~b`)nE4WITunA~V2uIa1OK)5$M=pJ;> zGwdz?26W(R_kfvHw`vWN{D+-=SV~jv_J#gd(yzwvnZn&XX&sqWt0lk{v5uDb4mPF_ zna7>(JN@xlahlDcz|e)YFe{Jx_Hs*PX5KjP2p-_fHO;G)sp zm$`@BQZ*jnUM$RosIAYddt$rbe(2T-Hl^IDyOV7dbhp)I`umB9_K|v zztWTC>seCIc26A(AM(9tNA*8qnJUkYQ4!FVlUa(N-YROnf z`xv?9VW26^#{Qa0BTl!oF*KDSbsIs}c2vHG+ec89g;PELvv|%)oo=;l%nPbx13N8N zIG*d9nRKxwnAN z{#k)NC8?H(h33U*;b< z=nneg)3mz=vtF+;z*1Yo&Y~N2O_@u>YC73&pLe9&-Qs%DRJ*`zh7=0im|G~pZV+Qu zlqIF@VNbsji(mx2C?VxcvPYKnaeq~bBgJ+7FYDW{w9orajuiX6C2)y}#;wFca8#RV z$5M>WP9y@Xm9ekPE4|z+F>Th2?X<}HSGIng>YnsMun4-y;j~3FS3eixW4e;&z=0h( z+8u^|>&Oj2!9|vj^1B}5+ihgQmsL}___Wd51gyJLf zu}X8La=^6RDZ}n|q6$mM;^x|BwsT{XsRPH%(2n=V)iEze6ZuDYzq+)cbzloTgPgEMD@im6```B1rWQk!al5m?%nH^JY|Mc%Ze$m_R zzP#n*AP4BV8zR+7FNPqoeRF(%$scTM+}P&aXb3`W@-<3J3HW9IF8I`j$lh3;cjpA1 z4Od7q4SScPFfsgS#N84>k&{-AO?z1gvJC{=8}ET2v7@&POw2k%WIvVcjdji39xV*r z?zMZRIO_F!J#%~YAx}R7;=qP$YmfM!)<1pRIfB~`DqPxbk35_mcdGAq^r{Y*nR7Qr zvhE?AE2l}b8YO!xOmwmtbKb*V%)j+@l2{^`B1q+5861)X5lyz4(=Qm_i|vdjL6Oj< z_BkQTQ-|V*4lzn@h@%3p7WVAp^OcWOToc5aQJ|V)LxWoF&EzSN=go)4Ec1YwbwQ#e z{?+<2E4(32u)c*tH#Rm_NBgoHVyvx(U>f>sl)9oRH&{0$bUlo@);kkSSJG&kU(Ou8 zzJDg!KcnVEN?@$kQK{|s898l}u5ng#Q z?!+zRG%L*ba1YOIadNf`Y<*WV8si2cERE>tl1P_#`%tGA+ODo#<%|QfB}B+Z130fo zo-Orr0C)EEYUnI8A%7q2MFJl5n@|e)2EOWxFE*0k14RTqk8WKaMEJVaS@JA7q-)Sw3 z?5q(1$*;jB)m8jc$MHsiA(GUhxKmEAws_~S5lTq=lN!GgPOJT#cO!qamQU?^vj{IEM4We_>SmZ-39-g#=lDro2LcNhET{#218^nmE$d? zFs3h)G)O#`SQ#iZp9D8j4F_+L9ZgvaQ2>K%!X8-+P9=Q@H(`UOXkk`>Sk6?C@phbF zlel1q0D5R&FYycS^$XJF_V`o#25LQNE zvAW3K5SAS?BU3aQ>GN~u>qT{vWup=FkBk27_2Iue>HIFJknNqd>N{_W_Ir;s_BK8= zk$tHD=^Oi<>4TS9$9mpb+wR97vcBg2#|ztU+5EA=TiT9xy{j^rTxR)~C;O;X{cKPF z`3HZ!{mhsAZBFB!%IY<*r^&uMlUK%T7q`FPon7odP`i9E?p`)WrkfYHzjDI*(uo`A zOyi~_i*3ylcTEq?-(z0o+}xL5)c(Bj^5*f{Y?Vt!j-1X>U_F~&=rR&uf!^^Ch z&5c`@f3fx94s_&fHK6U#Cul-o| z#b+nRpWgdNl)m1hZEJM@`u%4TXZ!WHPks7Z1O11ccaE}7cXO{BU4E>s@q6KYAHB%B z=U0ZlcVYbbWbffB<-oaM-1F4p8;`79o^3Nfbm7n=PwYLsEzX8q@2LCV{+tQR7g@_* ze6cz7b4}xky~&W9Eqa%~9wpQ7u(rF+Gj2HapP%S>wnq7KFWR^0-OMAyKbvg7w0YA# zV|#a4FGpjeZCAvj%WWgmcWrsmI-cxkyQX%%VV=oWx}P20dwBSSwcG}9DyOHyOOpRJ z)jZK3KX2Y|{P$Yh*eHlGu5vD|3|wS9Z@m6;m^{-zQTt;a{Cc*3^h^>~yH2!?4P0bC zZ+zQ|Z#ncQwf#Md#@BAW6jOn2yB%Eh-eF!+`9_G@_9wMUcBA>SvH$*oWIOe}+lM~C z@+sq@juXk)6}Oo~M+d%kxVx|C!Y^en(W9Z4I-WZJZn@TxZ0jG{^Pjt?(vD;9{J@E! zQ^%9{8@oGB93GoEwBI{A(B@3vdP#EMOV*=Vbmn+6^y^PJ`$zwhMn@j63?4Xm$>GMd z)ib{9bB&=t>7$xDJvnNAlq=0k4tF0<=Ervp4858q`^G-*|@j4zwVO$HbY2~o5p(v-xgZcH+?O{>{Pa+Or8 z%{BuJNP(0rN?J8>bf24uV_KytJF;B4H{08+MOm^HH5q{l4h|V$!I%$V@x2Vn zRf|^UNzJlE??JP_$~(f3U{5QxH$`xmdes77!!~gBHXawY>Gp7FFtleR`*@2zVUN^h zbr@pUO)0ZmwADwo8)BsQ9H>caIwY?rbvj2jLn_85-%TMjZ?y&9||CrVRcrWjfSOek-`QET3_=;UbfXOb0KW zs@dku2*W&RGEDp}nI*8kVBnHm&kvJ<2OSh}nLJRrh=VsxNk_mKC8oYW!{vw*&fWwgO|6gS(m@@{`$zi zbI3H;U|9MYcjG;ey0sOKlYH0I3Nc@eXfT$OC2NINu(adGKqcpCNUj@gJ_uI|?WZ@O z_!&sd$`&bKuO|AcMyONKi^%T%s0#lAt#ub(_F*Q+t~dp8G-XL9rPVaIpjYco*LB!Q zuyCTdnVUt4^`O#nu;bZDTm5h9t8ji`r!jyG{il+)x{|t3JKTXWb;>x^gNO`hfTdZQ zlu1yhh7`_`3U=6`Huax4OWH8!gPK1GqjN;vU(%s{)#5G@9s05ZI)NUA1u;>Uq4BBe zCS7SmyR%M(Rhf}88X_WS@I0~cGq}n}=9Y|wp!hatxC_g4l|;cWz<~nu1K+B5d6;E% zCxycJERBL;SH;{KoB6k(K85=0T|c;W~!vT6aTfQTp~np)v$A2Z17 zC#3IshPRYc81M#+K79rM;YSeGJS#); z0w@=r!!PqXv>VMHe99wUoiuwa&Sh_6lZ!uOXPJoQy2PA9T83}Zq0u9h97i-D;VQSd zAwz3J&N^5Wd{Q5@huk3xfode(+B~TRpt&Gq32-|^Zt;X-+h7i6+9fi^lnFCUECNAo z48H_yKlX>uB9w1}kkKwwoQKzKa+ z(>OSNlrL$zE2LP-QQ&qVDce$w8_`zqiao%kYlWJ&bn7UNL1tiL?=rOLChN zIHm&#vG;Ni5p*6+ts$n0e1+6{2bo$LkuEW7PJ)l&C208Jjx?%=BZUG3hMP{Jy&>VaH){y6&?S5HPLqb)Bo!a{%q@i zxP^Wz2HZF8E+>D7sJ*&eXw{z4CS=Xk8ud}Z|9;g$`5`ecidUOW&GW|m7QfkZACevT zD$g19E0Jc7rCs9V#%ES;)Gq#ZUCOHzg=D+2R?F;HJE#E5 zU0=?e7;LtWJRr26lAZ|$Mt3a(;7%OWY9A2S=nY!`Ql<4&b+f08HNUx5U9Gp+d414v z#^ixcb-mOf!*PVs-sVhX+kPlu6Avq`R!XGpq{`)G?dC(-=f0n` zdUj(mk=#-HO-FOoFU!t8yA#vPVM~KJR5NKcXRJx*6ZYz4PDhG*!;_YzRUI@(n*6pw z{nS!SWw+k7bQ?)UnZe8s;eZG#vZ^0+uD7UbzS1$|&?dqY)!>nF_Y4a4rBEa$zZDX&lk_rL2^v!ly6 zCyYXtXfj~ivIF|PYKzn+{1gKBR^!{?3$S^Uzhf&8xNSpvyVU0O-+B*BT;cV)TgH#_ z(eOcWfIGx`F;Rdr!z&KmYE zDBL5hfqH`>#95eD0~D;3z&30^TS;WB3CmtRXgZh-5}MSYGmT=u)$I5CgD2`x4{0XRsU+@sO$5A9KD2xOs z(l$ILAp12TWFsPDsgBAvLCdIDb)&AM354gYkTttVf=cuGRDO$;9l&?nTSz@(<0n6+ z8fr&BW`>Lj`2rI;)o?K2o51!RM%;Lpi2sec*bZB#N(}K6@uSAgcV=2H{qbbj*U%MjGwQm*CB0g$RYTuG)@cZJsGX=N1MP`cXe*By4+*2) zBBTnWmMJi3m^X}C^< zu47~LkgttC3x?a1#JO;XbRL7sZSw)nSvn78h{NpAzzkdWg6^x}~@E z>*#c7k61nOSD*j&J&8~LBu4msRUdX9xvSUCzLPi4X_?-7xZ%21<@8{?(fpEmkN3aH zZx@7J?gPK@+*5t-@OH1s?eOk(&U7!eHut;PcW@bI{XuuQM_e|ws^MNI+bwoXR^BCV z6vrl4RpAQiHB^1%*cqD?s(R~J$YV(yssC2F;|NYU z`=8Bola+9{;dEQrt}mPVY=h7{IC2?P*Q;dvSyvx)-Rvp%+!3)#K3@g*wHrTJ$EQU< z`zk!`Edwr{myF8gXL|Idt9<;dbz5#%f@jgGn7{^}s8_)PoIO zPWFYFj!EpcNBpkYF@R>Ns-f+j**E2%)=XC6IO6S?(VBBN|7<;rpC>X3zk1q+gh()i5LDjbKvTg;S8orKV%uD>w}o+^&|o38xk3 zU@o1)=1w#iE@Xi1h;+)6Eog!4e|8%R;!O6U{1%D>;zE@=y>XY^+fp-SY%%34zPs1d zP%o{Az0vGvadL*X%eC)uziS%enT;*C)^s4+*>(3FuGfllc(Zj#Zt%K3n|&2mjK?1F zg~0!eJ8ZjC4RD~dFSuw0)F-Ah!^fr5IDx7&()p!t)zEf~mJd6v`7WpB4tGnT%C+yv zf7jeHAq=0n+MrE_ zhNPTo@o*2aT2h9+u@uX^{D1uIm;U&-jcsl)Dz8q(w2a6B`MEFyJF1$d zRtSaK(D(IR)m8HiO-6UYDp=$yF~eXD)aof1bl=NqQ#$0-Gf)(y5tHN!T>5aO{ub=Q zgTi31bR?^S2SilBs2Z#?wZ3YrXd0|czf?WgyZO!DLe{PwbkIlUGY9RagD?zO(1vD4 zW~MRe^mO+iH;>~G)ivSmt%dy{rxG0mE^t;oRikw_g|FfKVoq+b|J24en6+5b@ysL) zzkSed(+6$zTU#h;(6$!8O+^PuWINvwA#1=utcKPg*!?1G#&~rS|Nq*#w8zF#@t>Ik zSO|(mw(-L=_g;LfsR{aPvdE=U+V|@Rse7s8lC#xc%W&jR^2QT zDL@PhJ@0M=2`m5vh@qq7SKeg}s2<>{8$qH&`>}|nwOEM<={)RrLs##zw=_#f?EcM? zw@dc&1~EY6E~&oBE_5G3Ehw)x1%Y5%N58Kzdph29v@+M_WBE{mmT;s7833O#Hh~$VF?W{Deao* zxr|5sjR2X-y1Yx?s=EjlQp}B!f>6@JbYvAs`T`R~k3*OOp(r#?QJ-(~Eo5_Ui#lB$ z3w5my6I2k%ywJ5=snFNJ_yg%$)ai&w@}aB+83Z+Y+!`f_semwuhggN%?FzR^|04t9w=t?<{k}9m=B4d(lCjsdW~s! z*zgfm#`}}N@xirfHFYayWU#$8tF1N8eV7d_5~q-QksFl$ZcsX8SF*Xe;B;sXaA?^k zresCebm&ijd!hM7sq#m}Fol4O66EM+ai+?H9rSMfCg& zsh1qfY!ht4^|pZi3r`6z+yX9`Hqq&n0nC7oTm?cpL+iFx=ywPmwB;;xOr~T;NJq#f zi+2gbm}eWdV{L!C0W}OOf*JoW$OYtp7Ni!5;hYk}8PF?n5+Ht9X@^`L06nW#>e3U8 z3D$JU_}^EZRwW&NLc89v%|0d2&-$GC$m=(MsXd*HCm{UON=#3jh?ks7ZW;Hk=&$s5VZrIx4 z11J;0RTxux4y(6~jFrrxfPQkDw zk~ny{L*!QDN-0=yrir_R!yWsKXW;XD6}rji?v)j!W+1tnRum~VpZgsH5l@s;0a1X` zH3Kf41M`@@X|qr1nTbLNSR#o}ChasmavWN+>{i@dd=kG+g;8*e9^$QY9&>aG zwBigu5w|p*7H&GWu(#3}A`9J+<%ILG=&k5Uj>p;^+WfiEce@5J4L=Zljef34zbgm* z71k%(j26Hb(IT1|KE<1QvO!B|Y^SE>BF0M3(Ev(Pq0K7hfi_G8i0|6eG@NT`3ih7H znNWkKlNR>Qwo!%>kvO!M!Wz)R$JsM_!oGmV=tc*`CY%luwUE^lZl?9fw8_K>!V~r( zstkuZB-pA`n~~4T>Fb#`jQ1;0AT7Z*&Tth=bk3spb=sR{HR8-r9swg=$9K3H+TEoe zZ~WYrfBVVpak?CeMX<5KsW=Z&;qj5sOU4u2uodzr-LsoQ+9*zp?s212fnXip6#8yi z??i7b^gySAn@M*l^}>E=xKG*=-l#R>8~b4Vf<4mkVZ$ZdRgN7Uo7i^t3A)4gXaj3G z`pD<@e6u$BF9Xs0-iqZT+b?zn56Qzj_NvV_+FuKWM+yUDJ5C)BcAOG+d}F`-Be^-F z{y~SoO#`?KXUNs3yPku2!?5`R=!yYtCtR zw!Si~-Y2hEmG7>>|G(6lFN@z*Ge2w9eqSExlH28cm$WOBeexsC@8mDkXz%;#so@7| zhX2#SZLQLuw6-jt)*k<8^+3(V7uCP-eHKOIpYyl3wp8t|{mi5xp3@$Z-yW3DZSOtq zZ|{9>~BCm0FL5tk2y>NL*e_=weol%?d&hb+{&KhU< zif@l2bJS^;*4Bx4N?P{#S^J63;S)Z+Tdhshtr6DZT2LAaa1TGxxy#JFCrg>By2EwI zU1*zV8=i26pK$WRb}ap?D`YbR(w0GKx~KOX{%@CiB>Xn$3cstjO{{A>ez`~ft~va} zyOHTw)gyH`FI6+g-?SfJ+q0L-%ZpjH>!7&H!vD63we8Z|R9qf4=Jl?-#h04od_mf+ zVdKPFslByooBz1*l2m@GZ2In%HW*{!>f`XK$Iy3NP`iKS5xO~<8MYouFStGn)||4pr%n_AnNPP8mt*MGP4;^WwfFnmW3#_f4u*2hLL=#yk;+RoyNIM{Yz~VG#JZ(Z3 zy@AG4uH>rC=D-WM6!tky)z_*uvgoMdsuho~!iIk7qIAkdj#-b?tgI-k%1^B7!=_h< zw?p&qZ*~Wo&m~T!)wSqg=?ikpMosL{YL|GHG;L2{K=orNxY|U0Gu&oy-^18s?y}7- z&2opfLI<6iPLB0Bri%dag#HL+Y#r{fK?n33VWT@VIEv&D_c(}3iHCL5Letr9k8^4` zi497NZXu^nI@bfQ7Gy`n`xXsa3_{zqRYB*iX7I00Y(lJ0<;CG7adP^=dTD)&=ynK( z4t4e%(ucCOFp@4rFT941YnZCw3sd4Qn{DWmvHNU69G(>OaILkz8f?i9xY*=&s0cZ$ z36zY7QloXP>fk}+HHpIpwQE&%*D8y91Tt-34aB!I1z|Xmsny$fN|3>Zna#o~T^n41 ziwHEi*z!1SG4xvfA!(_jE`b_XO&1ifn(3#%|D}6xf9mG@pDHbxVPdw$tecKzGjhP` zMz2ja^V2Ju@xoaT_u&)T%)ZK=#8WcfjNfKcbvR+OkI?pL7N^&xb1i${W%syaJ22x{ z_+0TF+Llhl@5GPAkA@pUn;pLyK3d!*{iC-Z{m?oy=8>G{n-F5iczPDat;nq48T(0; zei|MX^`x=QgB4HVCsL$TL*x@Tls&^&@o`Gl!hf3@jNV~PCOoCXaM!6lEf?=l5kJa~ z!Yyj!@cT(B;+W>K9}5pG7K@-Bg-`KGdPbFdaRNG>Z4P>hhF~a;MYld?dg#dLEbKMh zad=PXLLWeR422Irg0sf4;=^O-KHkV7DthUs-}==TE1nQ#Bs6QXE2!E#aWURjEyDuiD5@aB&981nOYm2DYn-%dmn{w*i_8B+3rpDEQepHfNfnNzca^uj5au+&)wZ zGr1ZO8GLO#7ht6Dmd8~igxJ-KGe~$^pTK1kh$n9afAJdBUXR04!IamyO3Yn=qkwR# z%Z)&@tVq@K9y~1<4Unkj9b|W-ybI0;9J`)Z1XoQ}B{=veTKa;DMaSz~xIP?D>r*p4 z=j*S3@xAZ<(^fd*q%5Q4<%h^{s-VV>w#xC92?P$yR>}exa(Vlza$P47YH26=C z+;wT!p6H8SUr@)VQ=ZCIj7WN`81%_rP0DjUN`>5mUcW`#i=q$-wejwXr|Rn_^nR@^ zWd&xSPd7_O!RkJ7mS(4phLt@MIlS|G0E+AeJ!twNISK6 zBeAS;Qpq$)IwzuOt#qnBwM#%XniZ9M-~rkOF1KVqIM~oQ=mB?Ts0YNYEeI!g8Jp;4RWn-NUK@hw!ksUQ}7*jg8dqr zDN$H2lRSl~c#T1W*J||o#I(tinK*@A0B(7W=c<}IwxYg-M+kCJqXxC{(TPQTQ4=8> zXVT_SA(NR2R2PuF4jwtQ358djcmDnPU;oi>J^yxOhxehH`4KfvLa)T~WwYdkVr8%xL>3g?2O3Dq=d|;uY0JFvxWW41>dI*}pQYg1$!hC_k`nMd#qE-+>w^gMM!|NI6;8Nto+Z50fHBAm`1oHnTie(bpuZht=a4AJ(X*xx9vFIzENA^5JZHXeEUb z+u%9FENB>=O2R#bQWdPKl@jhA#XS@rjg2><8*wPOdkP2Uq>-e!i_)oaTy**h%)K^F z2Hno3P21G*5m&)^(X^)l5}4U#1!=(e45H(F9>A*RPhxJ?@pT*uJIWyAz=v&+bk-P& z6+X7(cj6ml7-!OnHW!t~Tn{uv?Z>f$B%8}^PHIbLP$A9* z-}&c1eS51BO%`d*G%zb8)xl09yPp$Xlzd2GT?nsG%9+cd-%yS(S<%KLmnxTZEELG8 zGEp|2Ycv|Ce7v-AguQD1CdfhXmf8=YbzPTa;a4*UG&q< zxT0j*Ku)BHaNA8Tj_;boJOr;Q=>^N=tv)HRgC1%c51^IMZW!J8+2~I+y_Qqe1fov4 zq-LkpHWk;juNlgqT`?pp(2$60C<&cv9eZgEG05mue9kgbhA;2uDtONlEu42lcc8gx z3aXQGjuHx)B^Vua6di+f1SMKAUEsTYs8nL1nUztTRN|!I;*0_zq1FISP6}n+%`}7< zLvr_^!VqRxEa;IGAJ6k?y=V9(!!Jx%W2e0pzG)(jB3@@AnAaDCQhey$b>Ax!M1GL zG1`GWn^6)Wz3-uK@k)=C)-e{*a`+fbE}rEm5tQ~yP0nruxX1T$Y7&zxc&bNRJucT2 zDEJUCC+94hd|6zOeFFxS#sa;qu+ETL!yPh%1CCWjC9sEE*dAz9DY@!3`N?4Es;kJ(1t{xIl%R; z-RetnKo^<1DCm3sLQ1$Eeyr$_q?In*luCa5UHP)xz!2GwT3q;c_?(9OW^#{NE|)sr<0uG2nm8$z3=nX_;xN~h^VTHOr&Kg zkq&|zfayyRjPXS-w<=ZRih&CdHQ80XbkWG|*X7+b#(A8(VR3zW`UV>_tpUhEqk*je zqUHRJBa}mvIcvIULN6V4oZH4jO45hE8il z{a%2XieNP!;M{!bfLl9YdR%?Wo{B-Za*B;fV7&}BPd@}b4a0%OcrPZg5Qq>$mo!6B za8PW#UJw5;%O{**;r5<<#n~3;J-_sts&jG2H=N_(!ZyW&REIfRq<7 zRPly}vqUcDXlisx`erN5d&oQYHYcHsUzDAsic5;&eFwkA+NvdT$PRElR8f@z38w&= z$fz)y(YKz-p{+5ZvHZxQn5WpyQB^yOhexiAVBq3p@dLpoNBP6*J{v;<&E~@3qhA!; z%Rng=|qYpz>XPg5ROW{@gxtIiP zP;bvP6RTjphcv}-@HLDzPOBkO=wq@0cjuKGxfL!=(?l7xTBKj=s++(Bz{minj$(Fk zl?1+7;UP$YL5p8%+wO9gdsMPKw*k9E?{VpyYCX8~*a_;xQ5tfPK$GDrS)79M)Lf4C zfKo&<=PP{MS(JTK5{(ur(eZ`Du#(PL0%3TpcVA*D$-|~;S~OTNCEAwy=FW>UX`{;eT**Ip(%dYG_h)JT~Qt6!QbiC_>__U#I z6k=iAR-Z@}a0(lX%M!S0-A_2_UdWd&t`$bnGR>30!jZ4dX)gk&BIagH-->GRre?{Q z9K6H0r~|HSF~Btrg0?q0T15(}IkgUc9p)Z1v9BcHDJlcY@blMuHY*~pB=A#g> zAI{&v2Xjfu>{XiT6_6$FY%bv2_;VNzjdt2nQE!-L=e8R-*hv%3jcE*KxfS(%(6Tc0 zDhxVqEMe(hABuMl^KKssEFn;>jwGG#bOM%Cge$SJ%YCs4U+2&xxY|dBqv}c2^u+qb zq$$~rXJKD#9yJFN&Pi2rIImg_j3p2e@?Mq))KO%~#lpHV>tDoUtN-1vLtb3Qj(7bnu56H0bRB>g71hxKcUp4 z9?HwfeHfE)IXJ9RrSFN{3n{#T5G>u(hj8%(fUW6Q-6;3pa6G zt(9EKV`T!`y;Dk{E(2OH$KyOOt>O-&m97Vcjd`AWO~gTSgk(dsOV9uFum02TUK;Sj zJ#y|T7q!Hlgm3s<&c%e35?nwqDK>z<5Z#_xPYdFQn{2ABT7m1Kn&|7_w#WGOL7x+7 zG?F<5m$QChK;~XZs6hny=!HqAm>(|Gf&Q7^@9l)P1T)#VI$usSWXsW>ww}LAM!CS@AfNt?AKq@~>Gn?B|Z-uL~JgD3lyRt+was!WI<869&|eX=2sYN^v+&R$XwGx#c(b`PNG zU|y$IdhG@$-X^$@%a4g~7>P>nz{mbZ)bfUw zu-E(YNc~rlYvyP?j9ofmR`|{Y&3b5biR~nC2;GF~?wF;i5lOH3ZflH{UT8pAM92GmIWt z^SA)fLP~KAS6l?NvxI7 ze=w>H*hG;V^X23&y+YFX;bb1yd9Zk7QR1Y0QJE6^8kWlnDnu*Lho?q(y*h#8D88=C zla6Sln`$VeD;+k0I|p-RE-ZN}*zdZTirM=_W2fN`n zVFEaboUb?J!jS3hckYp0JGb9K6ZfgLu_JQBeA{YmGXA?*@EE=Yw{H zN#J7>glpb1T$x9@C4ReZXsMH;voF}^;K~H>$-K{lsA}9+Oo`Nx6|P>(AJVIb)W(C2 zo3}2144G(QOcM6LyHy`N5a-e9`WKbZ5APOil#y#*o;=E|Yg>g3p^Z6ti|q$B2%BIWC3lTzRZoG&)0 zYGN$0OhctZcSs1T5-UDTWhDVuUONkDm}c_Qfqy*KwPgHEtdn$Ny@G0>s`VIEa)&LB4~tq$2(Mryh(o|1Z6Jc)~`z&zqgnYNkKz#Q_4+>#*IBUWf#X4MSF zshYMiZs4pX#$3ZsHd^D3WZo#+Cnd2ml|$K_R?|Jejp&#XtA}iHaMS^F;KrulSa7hb zX`^YZN(gkGTYB@-l$k#3<`H1@=Z`^+{K4(DOyX!Y<1ojhM9 z2MNRY3xCUKI*BW`NL4M!^WzPd8j89XjYk>Vz~0G^k@aclJ&In@Qzp!a!= zt>8CClc`Lt-0!&+{FvT_@F!2UT~W26YKq-K?g+e-s+jW|40xGCf`RzR>g1!McdNne zQytq`W|^NA0L8#LY$}?Xzykjo-Iy^?2USBt2SnsfKG&J7c2C=Vs}Z3YLKZz_=-Qi* zp9Hwd`wUKcwC?8z{^6BdKKU(xAiBX_zy~zaYAkH300o2qr-kpj^nlqXrzgljc?yp> zi{pVZhrBH^85`jXYXEy47HApr`b$@CHLg&&k$HaL+XyIiZ;7 z9E|=Py_ZXlN)R&W7&K=F90$h*1lCt>PMd5u1|~huq21-=WX?$XI0abKw7UnIO%4Q} zPRRlh1&P8l+6$Wmb0&|Y;stK3`jIkZID$wghogbiNdNI8;~)O5m$$H^;6t@5lb%5z z&LzlbQ%m4P!e6H(xe2_^vHex+jCJAkN!g~5p@v877ag2VaA+L5(HAY+heDUyzy~-h zpnE!bv>v7aJci0CJ;CP^=mdP8BOXmh!pXQfo)bXzXmX|ZaYh1fVw{6Ir|~iJ0*g1C zG~PmE|7Q4Zrk?iQu$Yy71Gl=0t=@`^ZN}ywuVQe|H9~_JBsPjMaKUV#_ zuV0O$?gpA2z9^ecDiR^w05&q)vQvxeh~iC*Lq$arCias{ddqk^0NrxE5K9yXZGju9 zwH0<3W?PXH1q?7Ws)Lj33kW1QYdX>B=GCE9F=RcP^)4cG7?IQ{6)F6J9Cefi(&FKS zaSMQGV}uT(I2wj9Fy)|$lR#jS^K%LAR+W7YEu9NzIUE}+o~0bFICvKD^vRc?k5Jp- zun5`E!PqT47@jJDt>TyAkUD-pgqW+3{KJ=ib;Ip`WM6YQHv0xn4i&)TMu4x$5Jqx4 zfdjvqx<>*mIm~hNB4A(B(R1Mr*h_&%2D{;d=-|;Ma2T8$=>(t>q*2zU!N6(Lu>dx7 z20baBHO?}?d2&M_zw`$556~g%T^u9FzJy;(6BACMQd5&TV>E#|nmfooLBA3=g-46B z$=Rc%S=x%RlA{INnu3`bfAlFg>806G(k?HY#184$!Llo7jyyl`Z=P>uAHqhQG-qQ* z*ow}<9F;_`?Gw|y>w-gL9O4s>3};HiL2-^@Q{Wk^T#r&a_>x}XZujwqhs|gKoV za12qN<})lcOe!jVT}ZC+;N_Mm7%eoyade!2&JZyfy2I>zxs^C0n(GufNanD~rOzek zN@*`zM#44%SD%Z~gTaM=xFB3k0_nx>AfNaNZi+sFuR@kZ=de+P7Nc(}`1N#j zc01XVi<*8k>0pba@D)&}@R3XHZ?DVz+fRNC{mX7&KH{q#=Phjr^XNv)alI8zpY5se zt<&214)tv1dd+?GRwYq?T>d@=F~ToHqshaf3#&AcS5tMm`dCn(bPpxPg0mZS>s5%2 z2RbIqb8gD9f~B`C)s5;MgHwUv)o+#$2SVC2oG!P`^ z>=)9ezQ5W_ztX{Xs&c{(YItq92iea($UUFYD|Uc8jwbsoQFZoB*^YKVJDZeJ$AqS|QaRgJ>|%7_P>G_PHAeW|hlS-fXb%6)c1LR~<~S5l^TyL(FI z?$N5YLACa}U0g5CO*pzCHu`}luJaS^LA8U__d_Y?u*ylsfx~x5x$o$G%W6;}^Evn=x)Pic z`Vcn;wf5SM1Q^kQ8_;+_$}fiMF5Af+ghHFsy(AZ$QZV1Zzme04r70orXuUcpLK;EL z0Gf^|`J9u*=b$Ad)9Pvgx)j+d8#Z>gnbwosm(Ti`S-kWF0wPu#-fB%JR1=u&^Vh!5l79`4dEF1kFdCtwM41rhVU%k2~Q0Thl4=@Z;0rzI32l}l8(t*)25iQDQT z(gKD^7Cl&+!aekxbU(~o5_2%GpVVLn#E!yD2g#Nk956^Jft9}bB%lNcyC1IaF?8x3qQ%l&k$$2AKsjevpY|i!f zIroSPE(<;Cdr72`D1vHuZJIIRSXk@M3!*OSRwi{g@G)^9U9%$TuLmFzZC{D1oHpco zvdgSW;l{bB|a03PnZhe9+Lv41om4S}(Q zzu!Cw8Ps#@OqBIaR;4u0xI@4i3R|smv{xM;vx9(~W~g+OIV!symNA8li+!dkxw?N? zRP_C(RufnSXT2zxqFry{S0(FIsl~NbUtjN-5Wa5>jFl-J^?%h@bmZ7usRlu{-Sc|F zReiI;)CXNh3k-D(OZDwOS3#I@0ukR1AX0U8aiJ5pM>P#B=y#fj3L$>UM4K9V}?G_un59d8h z?ahC{X*+RyV{OcpEr0Z1ColcSqhTj=w+2hM`P=O8>+cBKa-;I9>3mLq*8W2GMPtX8 z-#3GGozDs{-f@Rl^-s2z8O(l7{aVoOpQ}Eo@7n)0ch|wTf7;x9;pOB3>5VkEko(Y8$Zc?0(aHWN5#)%dXlle&WqXg^ou~^@ugE$X|5MJ1rd@ zS3Tj;{o~Gl5v2s~6fd9k-6t<=_MOYVFTeYkZ})ssyxc5&z4?T(ea&h6&iYs6x17tW zJ?@+ro3!CSKl_TaU7PG)dD%PovU4Rk-QFR+?j0YyJnGzOeP^?IyLLIS^F!x8YK@D> zM=y_>`&=fN1xN^t-t6vS)tX%)G<=U{l6ou zS=sJq|410vU-^CaN}IN3a7Eq!^d9>5ZLAqj-*KltwErG7qZu~icPCfBDm^0qc-anT z^*1;FLJHgQ#GZF7eSH6rFfLuNr|Rw$-Vxo}SFE?&F52&C4^&+qa_{hW*~`_H6E8d} ztkv)A{C@W-;nA60_M`SuzvC_WZ{>dqq&r&Bm>(6!JLSi!KU!?d``%H7JD2`qrMcVs z(-(0m-bW|)R(%-a(RoqrZrv?EYS&M8%O82{W#>fj#Yy|!JLHeZUk^@b-`SkKqKe~A zOK{{Z?M-S&*Zk_i)t?aSf3aWOE3Wy2uU^r${NK7SKC&*DTzadv^x-{YztpXJw0ob` zugo}mopqD<#qGHI9W%IHEjaDLJ=Q8}$G1jX4;sH;yIi|{|Fiz!31gi;@YSVF2iN)E zZ+S;3EMHl9)>(%E`HyvP-Ld1~chHc9{=a_*)v8BJ8uHvB{T_9E|68mfd(n`~_pk9g ze=k_8FCVSCz?yM68rRtG{h{9WX7|OecZOzGUUhJBkRN9Lr#zv5*RPuqYG^o~aK7nW z_4e1G30L-S-i7gaq4P0kWi%cyKjwGZ@7AIXx2>G8zSY)wMeBal-CNagC9psD&_B7t zrOWq4u-bk4*yiKT>B^2P)0MkBAOFkXDjuEZHy;nqcez)N-n!fQKO6E_r>k~5$F>{~ zPD|`z`*d?aFRvWK_Io7f^|y})+n@S)Fg}fKPgU=BR=e!srRn_DDZG6B=<(o0rF-Q$ zJl}LQKQv7byI0>kVQxBlX!~;w4^NM6zcRf#^Mu*{^r7wN8y=n-+kQTN{l(X&M@OcE z_HP~9(W7qbIXc?@+#v_ApZl7-sj_NY&rgIMn|>nn7J`S~UG6@#0b711?7*KB;J#}| z&jVfUuPq;b34c!nS2y3be0Y3Af7hog>G85WJTZE;w{pA-ce}!ko3Jr|AQ<0>$MKEZ z5r zY?&$yt$Vug@V!r%_di|uG5((1+c5UtYacnZvq!zW;UkCM!{0e<>G{alCeW;xdp@#! zV%>8Wg>wy4>)yR6?Cg0!SohjR;k}+amQU>Q*hBjUd<-vN#`eDpy!U!}Y{#y@># zCO>v{YD3NY_&d!W_Ri#|gYnHjl;3}H!(Q{Y4K-Ju+_cyHN`p7P<%jZ>CpYdjJI|P3 z$Mfw|+SRFzV^^NqICkD1zVh^^$F@J!aCK@kwrn0d*yFrD{e<(3q zx>ufFzT5fl5rSR@vJOfPJrsfVS3uM62{>(Rd+y`Gk-x;lU(ztx{@nEHO-BzLnReQb z9ct;RCM>l-ePCqT!Dt9ye;dz+rp9)h2b?NJAZiDIH95AU=O@c{pbIxWx7__>{MC)^ z*!Xi{$3_&^dJW*hUtO?cV>zmZLsT7G2vwUSR2?H!JszRz*tJk~j8HW-idpELTp_<0*R3Y!vJpROKv4pw%u$L&u?vlcbx z8Ue%M&jX++|JL-g^vLEY42XyExAGeeW52x8aOkd{>MKALp=w}ij2`aVP`&-N=^q1M zC7{~2;pmh1KUaA2slpU+v}`9@^?u+9I9opP6aaMR@`)Hg1gvw$6g|W^+j-y5gw4U! z_-hv;{LmxtGYXjDfx(O(H~m2PO9S}%Jf5SM)^4E39||7_^fsQkFurldTnhxfRatZQ z6aWNtZJsgjqlXLf-BUnW<=&aE16Sv}fS;Yf&y&DU)n1cub-D*I1GE^-fR`;#IQR58 zFTec+1|<+Qfx-BMvw9d4{n+-WLy-Md^%za_Cq6!gw)4rG#vv@(_f3$&I(s*8 zftP2m*HC>UG*mCYU4owl4AskIsHD(PwO_xX!W;p^^~Ljx8me{}stqty8$Z}k{RoC? zAxOESS2xcyRM!P5W~k;siW#b@$WRp_bu=y8(mTn9)^jsZoXnIbgZf4tmG zy#ka;WoC*f!Fx5>G#tFw`@1FZ=_{#=#@Op*rD$4uJhW1Dpz!U~TME*8`{B0;9f15!52vgT0 ze{;-KME>TQsri_?F7n6B6v$txnTjzrUPk_6OffUX?tm%w7!qq3q;Eu+dYQ~r*lc9H z7BW-cDlt%8$gX2Zfllv~)XSA1fR#tdNC8FjjFePr zqyQ^2Qh3-YF+MQyGMdIhkNBa$b7Z25#cH4b1Ed0#6w5%23>nD+ryrz;uRV>XJQ zbf(Nkl_6@@MiJkOZPYHJf=@WFe2=`Tqov-|%dlVe?~^?uZ;G`WHZX7MQww=hWbr?~ zs5dn*J@(6Y8Ox&y^$X{xSAw-L-p8o*kI|%Lq}u-rpcEns)DMViKmN6ecA*LwgDZ7B zv{9Es^f0O?{j3yF1gzLb$>d3O^$W{^oN*YX>Hzo(H!jvrT4&ifcKdN%RA4SBkbB1xh#Vr*1QRIh2ERg)D2^x(>KZ-0=A+%5tpvXc2VxV{> zfGV+2F!Ci9Y8^=5%lji~_ZjD31E|=M`Z2wcvov7WH5Ar3X(GMJ|v3lT1XLZ!GU@lUxyC`;{0g#J}4Gs znDUT#2w3kwi94{A?DIQ8_Pzq&a|#e*sswn-97l>-DEqn`sp9Me*0+d-Is$_PbpjR& zKJ>$AKw^FLG_+a2!q^}{!RSYTdJkrb#ED9x&UZ@F6wApK5<4bghU3#@d7& zu|9?_g!>>(M5J#hB7J0{A~%Xm)B&a7 z)cD7vQawe^$K0rv(2csLi6ZJZ*F=>{6A_~3nJ7kEVYYr_L`5bFh=P4BM^sP0K!}lIBDQ%+%weoiKe z1i$$vYB9l&Ow_u?1;5adg3W&zLIjy8SSmsk@D-E3b)g@%={QusqvS?i15gY_KoZ10 z0#bWd)#Z7BDw?PtFcbB$&_pqe!9`kuXt? zs3PeD4TS&nsWM^WTR;@)&pSh5f)E9YS5Erg-E!ze&!oBT=_9M}55+#T<7zY@9=?q~ zCib0&*vAA@?t9JAI<}&XiV#Ik^&(yru|0TEME;5bAbC;04~zPC3Bx1z2@*Oz6a~OY zLMJb3F=YZ?RM_9!Ut3&N0;(bjJ@%sJD-#=kCiHp%fc1e!>al>4zhkkH z+DS%=spT+ITdvng0aj$Bm~sUSySs%&gv#bv` zisbW!S>J*-3W1a1xw-@kO2zW|codXkMDK%bRHXHl1*PCdG5S~3`W6mK5xgiUMMleh zeQ_HVyHWA<#3Fo*vs}xK`og=@6q75rMHa$N!jsdBPB9)$=MW6iONx@J7; znTDI^Xyhe!3h`v!t&i9yK3OaG>V6QTNTd zQHVM&?ncEHYKYvZ542GEayN=uC~~7n@SE>Om02i8{zCRlk{$_t3%gNs#q-FGTF64d zI(^}}>6P%J5Z)_^MwNI`7#4Aicjs$Ip9GHvnsx$IlVdy4q{U!Vxq)IbIgz|Q-aG?E z%6X(pd>X(ZRiZ4uOUii!sD=jC1$ zSt#%jmLc)~Qs`sRs7N`#J_~gWW+=<iUGfIJCD&+C+pX%9;pg*oV=k zC0P^XMZv=+&iAL#%)$A3=%MIEZGzCpf>HBL6xpU(FKST}MG7CnyCk5K_Q!<2O&3Bh z>hsukjqvVV8(lnHX3qLc}G8a8Q}7Zs&UwAaRnBHI)vBE=~aR~Ac|Sj3B33{hn?? zJPn*J$oZ%-KR!>FKnBXgWlj{y5`Yl-P(Trk7Wq)vFst(+v+GF+6R`_b*)I^=1N~zz zR1}FK3$+s*uQU(^bWtFRGLT}GFSJmzvE4X0MHY%>8v#yG`B=6@B%E)Yna!3cfm0;& zMQ{T1TR2++7qx{bK>~V7BnsIQMNwh`ID*VqCQ6XZ$C|HHlqh3-N1S!X7~?AuB_hTL zR4tT&)cpB{;M5sqApQRfPOq_ai72%D8^LLg%(qA+stiudh5C)sCFaR|F`SAnR9Pg7 z87PEy*(1s6;DN|BiWnc$B<5uxQHXbLSnt}5FS1YMK>^vzO5Z#e%7(~a653@h6ot~DKg7CJk@aKSHFR?}eXb5u z`Y;qolXz|V+jv$U+6`0sNhdC}3rO3t_A5vte0Hj#so6q-3l8-{Z7bp15Nj@UJ2QD`!MK+Qo zj$8vzlp+h&yay?=zfCJB=~nchD8d`_y#?`9ntK!{o-gDrMX9O;`yTad{E7yOq8kSW5Kc45WStFN&IV7^S1${Sd)lUbB3d$ zYJRjdv>WN;v!PuEEQ*mc)jUqJgXM{Xlz?75Cuqu5Q@_I5QxGL z0>rKXscQzJ=8F=MiJI#|vCwX8qL>SHT_$Q#Q6gT;QO@}yV>G*#BhEgWHBr|VCFc2~ z3!5m)kuAwSLhvMJeW8&;V*igZCoiO`FnU92tI1UvqkcpirV2j0} z2xF8WTNa06@u>MZ=TT^PLDCoHoD=CQNtRedlqkuNh38aC`sU}HM-l{iQOG$b(pQpm zUXm;k%6u%ei>MRjoMQ{cp~65Of_W_GoRTHV6J$$NzVE&e1FD?!{eQ4HDvInb1SnGZ z76TMCi4Z`u`LXi=6{>vDc@fzy&5vCyvOCvC1)+_K(~rn|Li*7HHVWxSAFP{4Hj4OO zoPJc)%~|?UY@=9YH&V!ZSsLH@IQ=NHT(e$O`8tlW1lc(Z`u+vhalk%BfTB25I6+0( zd=!TYH~h(K(@%~dj60htQ8}9)3sHjT9?~Xe@f77n%!%v9c#0FwNzfw$1?MT2%}JDi ziq1G6OD@OT<*7%=jQth^~isYkQfv88A#(Ilem*b+2FsYek9r0iHJ zj6%gOR2+pWu}{~~BrqK@7b>EBv?^-XAH;Bq?GuUS-wD~u^)KOw?9;p@9P9_o+NYTE zT}w0%?GsVHV!AotM3gVoBxtQ+DDln0DPC*1Ae07qm}ot>JZL$If%1;;`<* zE)?^l$b~8k>%P38XwD?QIQ6K^J}n;BEpegHe(;_j#@|X%Rf#gyd{&hx zCY-}ql^Ccfn~(WS6xd}lU#v>Rfn8+tT}zc9%D1LG4h3T$XG-AdoK;c(YbJ(NY@t37 zQWSuSGtTEG$dW8k>~iQ4ae{0-sTLQ@g5(lAPu zm@iAfHpMFq%L7rge)rfyfv7Uh_Z!LP^Dwn2=VNes9_V4~cNynnYhhwpf;b;rzgw1Z z4oop@#SI*r zt=NDB5oJrzLy`8~2ijL^rU*ch9~EXI!At>fJ3bbzfx_DeMNx)q>_)*%vEVK#6J^;) z8)#Wai84WM6e$yPvn8U0zVhI1Q9DPDc?7E26j_q`$WAQ~+>PuM#0p4#6x;>Zi)mj8 zsIavp>ztMvjyFXm&B`iWg=Yejb#HdOOKHS0(fwZ6HaV#_&V zuasH+C>FH=RFo!5S$&IQs>Do{q)aRnlA60DKGyp_ z*q{19y>DSmmHSgM_xt&Rn2P-=_E>D-IE#N_?iVTOB}qu+Pa!5nt`+nNIM*?zb{>S@ z7cPkpvnGn`cgdZK1iv|16D2`jvR0HevC#6}*qb6q5wzl^9G}PYa^`11K*wKLq-CB! zu}}`utT#m^CZP0$dFLfDsrd`y!{vs>9HgjhOPPRPx*$HXQqkh5NbdubV!aPf=Xg_h zK2}_ANN!YIW8!)i#Iv-%(xB8esv*sD06tLg1CYuT3b2+)L7$s7K|v`}(0`Ml)HT){ zmM`Uq1;6WAZ^#6{C@94QzlDQRUkMW=W(7Y6tX?-E2C?*weD@*GuS;|2%so4dH;ZlzKODiFjhk41D zT1=pTAGN@e_~-uvRrJKIxZaQmAj-DJ-oO^}5CvH3MyVsRpl@y?19lrIsf>M`pptt>V_ZDKB- zA`=x=7K@ig6<5U5(kN6GE5p;gnk`o%c@K`%^^`&SUq2*zT8B`s|~Md zq85lr74s&_Vp42Ld@&|PI657dn26W!{yHXoWrANB>01a-3#{LbMRdfZ!uE^PCg#SZ z(4b{`=Q|~Ycp*$M0iA3VLcEcH&Qu6m$${1I1gyw9MOjF2PD6(Yu!$p5BvF(`q~euP zaeWD_I%HA>1$fVdMa4?8`W7)y@LWzF(_ztBOVDX>lKFQT;rU`ii|B`cP$QeZ}Rbi|gkk_09F6 z*kl^(=P*xEr9Py}qEcU!)<@=PzAk}IUqC;8uS{P2TE>WhR#{oWC$T0^_v3`!FQRG9-!fC#FLX4M6AeE-cLf~U56AVw02gQWG zP}Pf4Cgx`Kv6Y4~c-SLjdt{y{1<+F{>{ufW+#x#CW1C*>XG)-HYN;QHU2-YF^qo zbO=_YZ@wl`TBNTiotGBr3#IeYB7IxJweXS52bBWWX@RxyXiu2?Z_f$wQdZyoiIDC6 z1}R9!mJwNDsrnF z6y^ScKb67=)1MqhckmN;jEQu|6oz6elE zfC$%dP}R#wH%EY%m1`L;mTMuA59F?LwxSreL>WkP%C(edAeHFmFaPwKOW_w>#}S31 z2v=pg`9h(nIZNTMQ{!Wz?zJ_(@|C-bYJ3mP+NTe2pAd>->p14xr|ZDDjPP{*f&@$PT)Y4ha?+wovQWt%#(Y{5-;Mnz7^qFCD27lJd?%oX z{3oXIN!Mn402B*FMOhTF$QJ{O*(LBk2oebL&SuG0&QCm#JtzwAF1i@L)Pq`RF+Az! zQF!;-X-Kn4eSp*)-TeQd?QLK+yRPdn)s2%TZDG)!Cr=4WhGiI$6~ICgvtU^xflx6T zR)(gd%o{Nbs^usG(}Z1XpS{l6``mNxy>CbdnEBp(f&=M$-@1G6wbxo3l->YR zK0%>s1(L6<%*99qQQuR?ha}(T1cmMH%*nCV^7(f6BnaPGx+Qsqt07W!`DBYbY#uCK=iUDKy%V=mF-(tC&2B^N?4?4cE ziK3{lbSNSuP@B3SS+;y;L;$c-M&B{&CBU3_=@M-A1SsF_Dn>TS&dVO^PGE?8s5f)0 z^01asL?2qd_xixpHoG7sSh7%=YPN(#=lvRraB3B*&z4|?viKue;qPj2I#-;AtWb-V z4;AW{50N$jW0c1q@kjJfczG6oK7vJF%sT&b|D#$yG7-%fRYbDG)$Y~^rQf%QOW10+ z>r&S6762%Nqaz^Qa zWeqgc5(7YSgvy*bP~YO(!kUYgFkn@wtZ0dAuM5k!#1yD zv>^I0NEt(s_fSIAQ(Q(V>%4AuZ;+UnZ+2S-lIvvM%YmuN_E4Ootn2&WF&yMTonkUG z{kyJ`)gDSU3WbSM^XA_rm#%Xh&jC9sM|Ywe`4q*sI9Nqm!j%$P&liKvo#zW^GM;a_ z)-9(4mTTRxh9a7f(1*Z@w$`;ZR2R&g*H9R%rWJ}rU+ntOHPg%S-`KTD;Ay|tkkgY( zWL2OnQLN)7tU&Q`fPpFQ_BYnLK1B6RU$Vo`v`5pXFX;JRSi(t7pLscSH%i*0qwx}b z)0g3tcnQJjQNk+2X`Ppd)!u@-m*+SF&*y7h{Oa$;AKeZpR4VPePD?<|2ROaU)O?mA z%a)Hr6l+u%q6npddG{45WS%E3y73DXh zLg*zoyMPooyNGHQq%c{P%`UHT^s6Yp8C6v0c)sJqi|$=7P(oC2@BZF@Y4s@>;@R`9 zx_2E>3t9pS*+I*f6tZy>HEH>XDBC>Ukpd=~ny+l4$n+Ijf-N6@Uq{(QK_MHR972?} zd_AJJTfUK+&lIvdn7*9~*~Cj|j9L*&keASf8&;^&;ju!wny<6~3}&YE=n9mvCX_e_ zR8e`v0tG~I3)Kx##k)}=kT5vW4$onVJYO2304D8rE76A%_25AnqBa2K=G{=ER@8hL zpo}^PF%cq=!oet~&dtV=lFrR;*pkjkOynVoB?|A9MJ}4;Xx_zV7kNHxM=6i}fjfjJ zu5`sq2v5U+iCKku{qR(TM-z1{@Z=S$;c1oT^BZhFLaj7>2~SEuI$DL=!JI4T{E|0( z;|ev{MBxUTB_MU>ezb`KB_TMuIu;FzRVYkM3_355+!xVSla}Bu4y<-hrxaOsd}?1y;&>)F5=5eK*ifeRnybU~>MzCcP$D%8-wdo)C?_k1Gy3{2MZu|ioy zAEZYY$Va@&zouTpr7a5n-GPTgS_$r=@QC#arF;o$`O0?En?7bB;VDIRtY0;>?Jk~E z7Sq?sC7|Y#Tms0F{HWF_XC;y&-X|;8DvnV~LFys3M=xRPU8Y{j@M1{SPhiqo(f$A!SXU+oINsR8q$hL1ZNi zUmT;_=>UvTJBrjw2oj2v$H;PuDj%N!#d1}qDDU}R!3>Z?kZNSh6V1V4`XeXxN|CY* zq+{-fmnn+NDAg$Nd#q99BWjI0NKN0mcef}fil<}UXK1Nnz*vx*GXg2_5~xVzC5oP} zIykaCHXMv{<{V8Q1V|V{$co10?ouydkECyS!`a)aUcwJXaVfQVC3HrdFV5R|OkW(O zZN(3+Vr7addWlq{(iD|=313FBMve7+dAZA^^M?lqqi*~bhc9^Lb>8Eu+d@;KVtns3MW{q;q_vrjJFxC;5@% z$v8bcq?#kj-T|DVAqs>!AT+S;eraLbjamsVqMF+Lu&B)qRUMpSq8LN^(CXP8Yq&Qu zC(+%p4vAv$@izBH&q<&dF;T2=66*Lu0Frln0GXWd4yS8xnP?@BcF<6V17@T|gp*pn z37nb}elkR154DiTqB%KA%h&CpL`ux-)9NLT5h*d=Ly6|I(qzL^B_$RuU&7Onln|b{ z+wGk2#FG~&AEHq2Gi#2%&l8Zm;bWi}q!PFrZ~!zN%K=EPHn(}HlS;4yL_#0obQP88 zPEX^bMxysZ;jP&K#ct0}SO+syrud9CXSbKt<}yQ(nTT-04vO7gFheEQ+|I%m*4*G! zy1nQx#7srj9H*kXcF)#QO&%LKzW?uv+C6C{BF8u6Bxb=9BTm9ubHOP}k0x+(jt@;< zlSI8tv0NVtrS%*xXlmUyZut;8eyW4Nd_|-sw>l>)hU@lS6&PUMxlD`}+|b z@s+T=^*H7zk5F&2kBBJQd_^9CN9zWbwrqtNODT?-H2HBKoW{nDRa+skbTs3J4Nm;4 z4o=|E$w-uwYc)GIVW}7KMJ#nbC=E^xOkSF5yg60os7_qx78?}hMpT(o!go4^F~<-w zkmXj0fG7nXm6L1dd~mvI15>l%z->AD>u64c7(=OMOE@^}M_|K@%8||KsMC&0( zBGGzYnQp+O3myu;{UkObno80oO}gfR+hx)%HYl`v4-L>H8x-fIMR4qccyr%LP|^?` znl@;NTA8jy8Sc79{Z>n$3+iESe^dZjes^AoR!ZvlBdc6xX>gz}LkFU6@|+3lB4 zV)3jx*~K+qM?Hg;l&%G^ts{0&oNV>vf(g=lw*p&15Zj-#0iNCi_Cc*4q2;pk7#%yC zoXG1nKm}gUlVXc{FX)Zz5IlKu7e^FcFY@GU^~&lAg=oHdVyovw#Dz}`&sMLRHaI!$ zA<9>JJ=)&ajfLp#oG3?q!tbAmx>E1ijEsfT`ZOiV@z^wxxykp2Sx3sbys_+9sUsc* z%Xj;m4(@(AO-@faQEso5DA%^Da);7AWidMyQBN598F*0VRL5c-t$+$VIlDbzi1kUM zQwE0QAv|^c-sos`tWa7!t;I-Ow?z~1lNL`IPjT_27>ViZl=0+D z#Axx9)DcO)w@vI}@kBXnzst2sHI~D&z2oA^@bs|~f7EVPkCV+8>WB#wLH!;ir_k7)PTi#6Q-xYZR7{dch}xNM&PnS2WZ57ak*MPZt6sq$`uis}fA)b4t6 zK7!yXHQ%}NA}|MhtU{5GfF`o?5s}^VRW4<*?F#(6(C$$iA+p@owzj@4>>f)Ls}^6w z5%^vj5pHi}b}uA{VU#LS5#sld|c($8LH}GJ(?x7e0BGPRd`8Z9s&xW z>UK}hU+e+JS!z8wY(SPvVm^qs97)X25>P8-d0FN5WI5UvrZBJUp2n-(EZ}>gNX$u= ztL2;Tp8g;KWu>X^o&=~@6TN4=xad7l61IcVE?4z_W0zY5v7jLC1(MAAj;{eA7Od|r zo5i#Ez(W{cZap9Cl=yN#`tBYmYWW%`QSU3MXR;4c8l2H=)Q;t@rz*tOG zHP@WcVKlxUhQL@XbJ^>$LM^i-YG7<}>M}64xeAqQjtZsw8y#OBa?Kl}@cD@^caG18 zD3++7{io{r#7c1cwCO4oU*7e6BaZK=Js+aOiaN$wi6S;)&(~Oq5ns+3YVBzCc7?KK zZmLk9{F~>u73Qi?ar=}qm=`k?nemo&l%n_yP?h6Lfa>pW7-2fs@1+@vOawkc-2^RD z6~#s*B|J(ZR46j$oS`U=h>SVV1Afm!E$a*=afIPXmO=wj31D_SnVt{pC(cl2Dbx(* zdRS8C<8>~%iKvGiiTC`*E~-`5!`3743_GfNSP$pxGR?Vv@{Z4ED0F-;t)Dzdf^hnmpB=;LHbnQVUkRYjd~d@S_m4-E8lfr`1BaHmeSLC|?rYFS%qa=L zY5y|!h$EEMCu#RStPv_X3Ns~fgs3Ax$)yqKpIM8bDfa=2%!CJ;17E|W*k~w>j5!!S zHh1s3N_n}Id$HYn&f2`jma9I zIh6%9C)Sik<@|e4e_u+=1t)sl zBb-Q&14`s1cpd;RykbKa|jqHRJN4QyobJHN% zQjEDmmfihyEH!(KW$}X>)vRHs3kOMj=i+sMNbq@aVkyeK-m*AhqGzz>wXav@UKGOa zi842Fgql4bTk99PgB4Vrpw|g=Z}yHZj#&EL(VKKhd{n}Yqs$FhHRebws1INj_4U;x zzD*_ULL6ZWUBw(FKwabXRGU35bWhfw%3TJC!ci#HCvJ2jy{DKX zMY3>sLX#&YY-S^5)WAlU!g3llygt#Li;ZrO?qO0wLTr@o6?(4_=5?iu8I&apFMWaH zO7~y>X%#39Pd9Y0`Y3qfy*=P*=G16}d4IgHETAwtppJ%e=Vx?;vsJ`8EtH#OsEzl5Tj|pW4;;R6aS}>& z#Pk5XI=+sMm{>JJ^zzL`BT=;F)vEF76BfOkR=S2L)FZB-h^Qil4d<%S>v6tk%ZEQP zIE;w;dIZCJwrc!t2chHYK}Nh z>jM1GGu()gA`%^$f)8cIYLxSPLBVGk5`G(iEgz6|8SP*1*61Q6OgNzkiNi8OEqXpI zb=mVRDf6h3=nT53PnNz+f)77W4i|E%TYA1lSgZuGzz=$5>-iF*w1UdXmgu16cy~Q4 zd%kb~t$(*5s@~cluw;HZ@f28zE2ofR`K^zf5PI0_iQlu<9}!1xCNzFe>;s9t?!K-l zsWpv6D^c|{K6h1!!3RTKmzVd*55p7El@ijbE5#L~^Yjp_-0wsZVT8BVs*RTW$xpNOn&u3;r zsgCek-MJ;re8*1LNeMN5I<^r>32*v%VvWt;a;GZ|ECGe1WjEKWg}&2e4xbovXZRAJ zN}PGkwq(=iB?>=UiK1VlgoeFzC5tWkad9#);-J^a$CubV1%s4!Pn>}Jz9)A5|&>@A%(zqeR6Ol*^8+ z#S<-|ISTcu>Li{+Z&y7~w+wTRI7q#BfGG}Ax$U#{lV4p6d9i~nRBZc#rO-W49&Q9npIYu<P}=5V9q&471|t{nUrik zQwbkolpd9jP>ZOr*S+*}^$;k_Q-8K_N}l&(K5`SIGUb>`y$W}cn_M5uR5fn^Qy8Oi z;|Jy(zyA{#&#xPyP^NO@_e^R0NS;e6F~`)d#coWI=%q(CQjHh8k8-;^7V|A8DLc9W zacokX*BrK`I2L$f)Dgt7U%M_@gciH_WL+nL&otyO(+LG?LfTl)QBMFWQ73^|BSRD* zBt(Hu&xjIyh%CUzmr(*45hb~~HoNmPHcp<8HoM{K#v7$Qa=E#)eeQ-LqFioXwo&yg z6h^C3q$oFs%l*rAxr6PCa&syrMD2C4EU5M)YT~cIU45UZiKvd90&294>Zl3ZMs=5U z_xp5Fn%XuhY5Ce}w{4@2V0$N^Mz(jU%~hnNj@_x0SldP|05vF5+D2Uyd2UD6M4ro8 zm|`TfiJZgA|)SZg*3lIeR~CcVmSL?70P+a~su|iIBw? zth#)_H|f#9s=FAZUM_O;u-*ld#Gd2FZjk!n-~7fgGf}R99u-h~*1J|@q2*gY|K4+b z=?dt6aV!SupD0{koTDB-Z(LvJhcbpDy9;0Q9K}2dX!b#qpMtRb9BNV}&vh2c&{aey zFlr>NL@Dfe*D6#`p6}rLu#JMclVcOAk!xe|lUFEw9X<>B`MIA*wxu2aj_wUrC~kP= z)lD%+x~gkpq?#7HEKpQQ5KyL;a6mzB^a{xHcxTO|M{eKn?Jg@*PLcqw+F2-jz%{i(D!{s`vOi{cG6@poc8c8i*&>lU1*B=w0@_Kh3%rc_-M%yS- zeRjP5krPMk_{!AOhzalbijxtP&YEv` zjXZ|{X}*mb-&wQPk31?UbvU2=&RX_wYyzr_GxwG+Y@+}p%8qoXx@cqZW{Z-bF4mLy z@R>eF`-aIS(DyNa`MNK2IWZl>B;{P6D=1L+?XK?C2q>UO_6_J|i~ap~s$sX^MrpsB zE7V~=xe>Qfs!(J9JJXjlEy0eD9n(mE)OUPUZO)Fb@OpQ+{wNfvCDZpC-#?+wH_lX# zMyOsc;oN!jzt<*ZWrPBE?ttn?r~)W=?4sRkSrT)muK?;Ew0YUFi%_0Z5F7YpYU)}eF~JsZ~nKV0ZLJ^Lwn&Y zd>I4OmKiDzP?LU-W+)SL`T&JTX!-ZE_=(<)D+4(n1}Fv{P33&yJOBqMuzVv%g8Vs1 z^bZ#g@B45HUM$~{%}^#amtA*ZFT6l9!umV~9hEiTdU=vvSF64iu|#(s0MA$O5Z>>R zkw|JjdZ7-!gIWoa5})!kiJPWb=B_j+5m7f$U7Q5xr{kzj&hXj%gtu-5!o)|s*KY&3 z(%j=DxY&I>EOrO>cP(~Z%$M4|#_)ye6zuQIbQUsvQ_>s^ALl0ohjIIq<*|5YL`Zy~ z-qp>7L^-lHTttyBAFXy3D52kXQ1hwZtGg4Fr*+o6F?_yiqlJqBYP;Wy<;m4YwLIA(N@~6;may`~zphAqM6rbRd#OAXf}Ajm{&#)Au{=Hb zwhw*z;xC=YuKy8IRH5H1UMO}Aapsb8tpG~uBWEP=0pbJA0~8@Ph+Zy{M@r)}H&kZLs~hTP+F@N1=``#n zxdf__LRt#p=Qp8HxLBngn9GmQ;z@oKNQoX(bnNz|#M5?oL#amrQz71xRjRIbJuUX+ z=cbO`64Jt^Z+xs84<lH`1r$JecP>o#&_hH7ewxkMJE zM4h38sVOP3Ttk61kA~gh8frglt~J!c5CsRkVXHQMDJ)h^pS_a$vk}TT39X@OjWSMR zG(v4;NUYDJl9OpUH|oOjCuHAf7ZvT}PLvwG&Y!Pv#xcVbf{)Po#X6NUE-TSDa={Z*jL!Z2-F_2A7yPaS zX7_Qt`qPy;ccRZQwd&*WNowIT^rIWKC|!Kwyafw}tiJkaoipd0q>2l^tfKIMb(bN2 z@=0pJoKII#WX_i^c-Kp4w`&Zaj8SP7g-Oa*QLB@bfyxiS4|lr@P#KQWZZ|XMW7+u# zROUli?skWh)Dly%P8oTsBr!pXP2UVsP|0$Za;8s>Ut;=Ds-ju~vlMr`GquE_3y{e4 zHQl*0eG>I)7d6(M$80{YQq1PlECr^I)I_LK-ua~}HBd_wZA7Hbi+&=iWId?mzxbZD z&Tl9{(!FZNOO!9dBPXt5yt>kbFx$OqU+${=uM7Tpu0)S03{}~;+qelRWk2=sgMMgj z9MlpJ6)u4~H*x7O->WvOVUMVt3M3#3V^oelQkkmDU6mIt|9ipieK&Sb3C3b@SpMoWZ>;$(_ zy1F4qy~_7?Tm#)-r0RN?kV<-q0x4QK5~Nmh%>&){LZka$CrHI2#g!CAePgQezJ1#^?nUgd_I}Rb9oK4V<*ZoQt^Di5g`ST8KeL*J7fdlG$yHYB~A>Lsbxzz zKVgCiXpp#zimE;~g96phLIK;?DQ=_;VBQTXu4RNOzYVpo^$Q{-=p>kR`KwFud35lW zKrx~U;&ZQDykCewF}gV@J_o}GI1S>>%R}f6zYT@YkTX7Bp2Z*2Oh9xZ@%i7ldxWa* zFJ`$%hJ`9BWi?JkRiBCyIY0X!(006$^P5FpmX%abQQ+Sm*U~!rl(K5AHJeg| z)QQjWjI9?8DVo6VA0MET=qyCsbj2DPvj*p08}E*6(Y+H(1fz| z#K$^ys(IqE<5i;AH1yIV#Yj*DPkbJx&;gc6u^f6?BE=}{8-|=afZCGR4IWi{{&$P4 zuMAUt>j%|D;Yh*i^d~``pm2i}6I-tRiEkPc6e}{MFiaJ$%3Hrtof@=$_Gq2Ae$8^& zhN)7g+AxK_m30avg|~jbmRd%N-7_1eV#-7srnHvY?~oeRDI)3n)cVz7O6S&c>nBKE zAeyZ8s}}$f&d#ZB*Mn)24~V**L71k&u4IDFDJhbQUdIE%BSE9a}N2wq^=X6DOBIQgR6cQbT z9~ZusdU*?8k$M?xRNPBNcA_a|J9c7XIiy0?Li+HUJ-iGR(;5nr2|u!{P%(CWFhZQ8 zc~@OuoTcdHXeBBOCs3XuJK=oa$$xXhLFdF(Nk45S-qB);&7T?->-shpQ|S821GFjo z%D+R5^^HmN=H&?fC@0Z1N+l9qCCW&2@qL%heDL`1o`!UZEnvAP04Czh zb9W-7@rxqS$xifmy1+|@wM1!@G6>mU@^Y}&+oD%N=lMj`aFnVKr&T<8=q18h@Hizo zVKEbh!1A*;2BuY+7 z!1rw;D)N0)_CY{F6EBgKWBU5oOGKTAIqI&5e;HBdJX@_`W+)}%nW%DOmlS%?$^uJf zly8sqdd z%7{W|i9(+-W+zDa{nUB<-AVh>9OYVBLsm{g+O3tv97QzYGi+Mfg|zP}iqCzidnZCq z!)co_-?wV!(Bo;v%z;^(ITORC53P&%K6f0RgcONlSwCY4M2$?mTu6zVu#w9BQBL?B zXWNIVscfYh;b(dzC;a;C7WRO|6xFiwb4XB;O zw=7eY@f+@XBjeZU&%N!FIbP)&iA3qQ{#8c z^ZKrqyguh93{s~Wr0#T!6eWIrnG&SNjo-mifKC%H%TzBw&w?bE_-QTWlT^6`@17|J zjM=t)D)9rzu9upG(j;zTT%|DH(-;5z&Gnd}SE+Xf@x+wv>p65)sd#GF2dPoq`PLw1 zgH!MvnuPY*MU`qC`i)6u)%YcDBCVxh;f(mVev3pQYXfYKl9M^;;uJ<%4esN+E-=hMLmIxG13!elOjFgGIXT1wENX2LkFmQnj)xt*NY#6BFRAY z&xSTBwSL1o#h!0s>sXw*8A+11r>XKA_d10pu>3nrQ!%w~eVS@@D$4x26inmLT{oNS z)RB9?VV#n0Huruc`dFu)B0aGfr&eTsv5{WUBw;&6pA?KfZ2s^_;vAJTk$|gkh^@oa z`+zC#dZT;-MadX*j#EvMR4zw>rC98x4%*dSvFMN_F~H>vtR28qv>u)rucZcBbS--u zxYjNFN4)0?|k~52C4PduWruA3Mvn*hDT;JQnKk=_&Nd zEcIP|dW$!H8`eV)n<%sPSdZjk6V~|Ysai?jb$Y^D|J?Xpy|~u+q0boWk$fq21o1>- z{M7iZGJb0O7P47zJjVFt#xKS8MaIu$vtw(AMyVv8AfDDsRC6BUw{MIetR29S6BaL` zZrNFmYL;S^f>}yxByM?0QG~9K-~rnc_`U=uVTZ2;PK1$qzB))Pt?{uwg_RWQ6Pm!g z{IX$PNd?&i;6&L3ioLx`h2D9kFh~(jr{UyH`o4FUO9BR`((~Dpx2ciDpyM51@_NsQ zmuNi%gU%)I$&c1SDl2B!t?|P{Y_9K9pC9ogy27XFwLz+<`|vx@`o6Z2YJ(K;G^YEA zr$YC|manT%MooOYSfy&qcjWrCpe9(Kmd=g^-Ir1@uW^`K1dK^GF`T0&@;-EYVkXMc zKX-fpSa9-ktgd9A!HErD4<|Hygp!ke{1G2&y%cKw9>60O;!facrb9Z!thGA~iJ3_2 z>OMAn)FF+}M#YU($!^g`s&IYc&#`}cQe59>G(??5!`FFv9Z>Z0;!hZ&2&mtDK@A@Z z6C1u_l`1*S!|WCpO+>w{iTgUetl^2w3Tlz?R9h6hw|R$c5{3kE-$;SJh9{t^(&y!n zfYImp&Bv&T8>P=l^~os}>GOHNN9MdzeKtaED9}@VQn9bQ2=sdcs*n91`17w_w|Fr; zUCn!_l~lo4Bqs2oqJxftSum*JgYyvOECdHBk$rf}<|^g4TotJJ3Q$E6ItlcHb*q%$ zv-X~k)oGC5(hX5oq{`_i?xq5N?&o)1G0U6@Y*ZVtAjl$1^V%CQ!wtDzu1Um4=NTe$lS*Fv2!xd8pZk4h+ z^{(&rk^T#`Rh00?KwkD#&FCsoeJ+3?h-vG`Z}?n%AO-CDL}pSXoKE^p~IQA+_n~B_W}{Z!|}xzR&BFz6Cqy zC=2YlBi#$d9EIOM*SzTaT-=xXKF(3&%!!;a#yU0X`#h_;@)8EAT~r?-C0@eoRCe@= z>N7}vOuR&*`uttb7?b^Q3@JUc{KFhU3N^}3TC+~QTSbNs_huBR>gzytQaAV@-kxJXHhl!{axOP5Ta7b#~Z z3R9XwT-XR^JaNZcWD{kQLf3bCDL=RI3FW9=IJB)4yu5dvfBeF8-t#e_?@ly$iWp`Yn5o6l$uA&K*$4KO*fda$3SACv!NE-#} z28js`QrpBiKQbGnbdim(+(6iZ*NBP5g4YNMo#*Hq=s7VFR#7DS*z!5iSD17$6IT?1 z=@BlFN|f>hjt|(1=d8^lMNA=M41cpap{?dcHo_^6P{(h{yoABY_fUh2Y!po7h%vN& zh(}7hUHW+YLjutCS*Gl1h$!+56^j$l1BQ>sIqs?rpZTMpl)WwbqoPt4#R*fW!Kv|l zcn+~#q27y@2oYni{#SprG<;t;5#hAQ8Nc8qR%Cq`{K3BftrtV(9itufhX|Mw|bN%u!MxaSe6M6-c8s6b2|I zA|Yzx7!F*ElX%WsJF8CxP{fr<&jX-%nWGa+yp{DyVu^*QZ&aU@*{5qa1Qe#JKuSbF z@t*akPyB@4CL|J`ucU1j_gW7{Aj;+^HhoBGp3P69&ckL``~#sxmJiL} z@m|x164fCJ64@q`P4XkFRNef<6imsFRH86Hg%ah)_#izuL@i3xM0#HJN0mCqNRRUd8m^g{TorC7}mM=hR z%t<(;f}7)^9El`IaVJ$LD06dw(YtU4~4?f37DqB2@lqd;@RMJW~%LmCsy~FE)NRspw>3N~~ z%0PvXG17d1nIwJv6t%>Zw|x;)Ym&aFQy>!KTS8DX*Sl~Wmi2D+@S0kp1|pTy9E0^P zqXk;q2Q2wqr79KLzR%VnDk4f<-`X~6Wab#iWNjOzBDG^1<$gmj5p5flWU_6$o4P)3 zqsE9@vV5Z;%wgAeWR`Drh*}coG{xHxH8ykD$A)#Uw!6!&Z|>j?+uZ^mkL^SAN3jHE zQ$NB>D~Ij+KOx<@^FfNvw@8~WiW!ZSmk_1 z^7RJZTJM)6pJ;QJ^8r98PZ?3*D4dn>6uXio^uFKFv|=`Y=D4;Sj_`FdSlzV%O(_2{L@X-1Rw%aY$~Cnl5** zmwJS;5ib!dRMa0Gp+fcgBhq|5FHu(e9)`r8 z&y5`Sph|t$!w;UhcGH7Uw~&+I7`5-Nwa2#9J=D?kN2@fS_E1$HYc!wsPzEfHQKsip z3}$xl+G@AIbrZ*^aa1!|b7V}|19q|5y;?WBX5*l-$Ih{F4Rx%np(3JU&xcPol&C~Z zM5d3#`HhJsa)si8*A;!KLMiXETw}8!q(<~{igI3}!;=$z=mB*+>Rd7KVvqYIu#$O+ z>jgbvA%rIqeWmED<8$7ec>2wsP=O*J(FEs3D>3zObhP=%7&X!#`Ql`a=bO(^c*go( z7kJ9FIUb4R`Nka|W~iW#4FxJ~q56ag+d_es*iM*OD^NLBHf^CUkdDw6sun2WX{TGNA-`K3nr^s|#EF|L_>aN4AE-YB!$d0F+pu zg4`VMT*f;!VS@GPma^4l!i4>(HIyezJb?drr02_#vOy@ZlGy?XDFrE-qQV3fQjiXt zK-O<_oU&sAK_DBW&)M)<^m*6t;R%IiZ)D*3!Slis$%uxhmFV+m;E;FM4IC+9B503N z!{^sR*9{y1k9(ppOO=j4H+&eMfT@r$LG979;XAXq9mS*8olt`O-tk$k*goyiOem4O zyH=n`oSXJ26{rfR@me<(D0S4aKn(x)B__k6KJm6YZxlyIM+Ahl@ufUg-TLF)W)%V(%e*%8qP>YS~gQ|F;XiG#rO5Mp!>p7@Jm3BrWgd=>=OdI#;~Z04Qm~ly zdW%fi%M_h2mQkBLUuWJ`uo#9YrXUpnaTx^wu}GC?>~e_0r^=*0dN@?0qRY?)vIJDl zY^l4bweZV>9jt^$%6iYoB9&Q*!?BvLn4;Xp5rV~><|BSc^MRG%7qU%Nohd4~3@a-E zIV7Lyq$1{#vLXEP6MuYEq*hspS&l9UCUe!fw!2oOZaDms3_2c5;bLelQo0ywODVo< z%P8d_<*qMjk7AKB@ywW(C`HP5QTY7i;;1|yx4X=jfL@wiA9Q@&MIo|KC+F}>!Ut0cVV?fC0e2aiml%jIN_~SWk5l3KBgto7!~EQ z)2`2H34DHP`tU6vbB=eGYCe=G9*KALk+Bj{E)jUXiClt+;wCr9B}h)xT%Nj#KNgV!;x-%66YvSl$*y}H+)OM5(7csQh!81L2cdxifZ%7n+LUdr$6$* za|2Wn^g(~bBk@w3V~8Se?mQpldr!iz5rg`eEHUZ%2q=}Pwu$<}m-^K%E7h;v=nxeF z6^V0ItvX7hl1%``)ou|>G(lfk?c$5j3>bG5l~i|dZI6hB~}xVjOgnU zkPJ}cO_ce_!0{Q;w@5&GosN-ItO5S-{?OL)#cjJ&!iCm$G zBnK3Fy=vd+6|$^Qs7&)kRIN}YOBNN%SqZamK+p$3iIotbs{Dw6l5=-U(MRU|?Av-; zV!K2+EwNZdjjX%Jigj0mRrMSIQ4?Ci#S&=sR+BG}AU~Q~;Wb1JnLe$eY=~NQ8M;K4 z-VLntEcwzH^AD|C;Zx5?rq6~bg)`^$BQbq@OB8pzPMzZ$!4}V_C?bkYpYsyH*=NC2 zoTKLaCaxoZpL#-I;)XZJ24t~t?vkHCFJ0y+$CTX=z!Of9Vk%NfKTy&I^$Li#>(LR25Clvs#ZrGzO~sogG)R;9{% z*Q-=d_4)az%__CC?UO0Ws?`2yR@YIX zN&!rP>jR$D_qhg%mLMd=JF~BA%$Wkmm$MsQ@{iUsyor>EvShcd7czV z0a6Fw_I-~d>xNiz=Wf4{BBTVL=G+Y`+1_R7hi-B}Gs*LIK5EeS6>36|3W+Vg;03u8 z0w!3d9{uDubdd5gHMbd(laNZbpQOm1t1of(oXDzlMQ#2!8^1b90Z4h0f~L=nQHecY zoutBs_k|4!k|rrNe%l+~(Ih2E8AnkiNMg^&kV4%$@$$G#iR-g6)pgM)KR4z2RvSM; z3LsONqO8wDTRi!a{P_W`hQO6Fkl=i0nd%S5<1Lz_>@bH~Kj4X)^SF^hC)i}NFmv=W z+0|hx_I@0u4hPcnp_wCykSIOpMk@4v9HvU|*UTJ?VXAI<_plQ${mDPo^L;E=n}<1i z@2)2_r{v4P_X%gwyE`M$uS>>ve@&PutxMSQTBMxweUU()ZF%njkVK$|*cM%kx8Bd~ z@Rjc~0$oDcO#)pqq}cmazAq8zAJdjsy`Leh)~R*b1nX6@##qrG*D1O=ny!!26rN9E znj+!n6gsABPE$^y15+lIJ#ah6v0~>i9g?qfOY$YlmC|IXlm$JZ&~tOcgY+{<1rCtP zb2}OU#Pzxf7s`T^__CL&rEbC)^igI@2^JgZCSvCYVkD4VL8T6u? zz$v~{U)MCn<*sxS3t`{(G&KvD;54<=O)L=gCikruV&^v%_I(Y) zw6Nrbe;2s&H#$IJkcy2T05#$#2qw0CVav<9CC4GRyhfo@9t-%muurV|8lu?vxe_VN zQaMT%O!}ip8M|^SNY61#amo9uSv3(FznUyot_ZXmWp_i{g~QnRC4RzYPhjj9-}2() zpa91VI<|VaBJkVquF02~L0|9tq&$}p$pJN5NiB{D?2ea+fWo(6$BuVdqD~KYybqtB z0xFlNw|xZW-PhN_n*c>G2TK(X@v>CyxyGh?FLTr`2QMoW{&14wYKjaxl(KC5aER9? zshccU3{?s{DMWVI@u*0kf3=016Hgv6p;R$VQqP5QbUaK_Bq!JiZe5FqYJw#y11czG zE1-IE0)T?wa5bvWmFKbPyUQ5#Ncb(H`bhZMwRn`M;5S@KWzjful6w2!`FFZW%E$>( z=tFlD$qD6(2~tN%Y}w8`$0GqPiFbXV{=DmJvWb$|f?+yn`^MqS4N}_jvPO;UQM0^r zt5KU>pR|2$kFp7BT%$OBR`GeYN5K?tkjfOgRij{!+8cgJ4Ru^fH6c>1QGS*q?4+nY zrz;*5ItZUip?AtYD^XW##)Q*-&)^+#6DmjK&O?R5hU%4DfvUBh&jGchCPrbhPECM4 zZ!)B2jtXJ2QcbuFDTT>eLc_A>^9ohWQKBXsPW7yuWWoS-wVF9%i4vfu!oD6* zqZ;L6Sx!@n$12{NHGLSP0H7XF_;;>RRW_jm0^^`Qh-KX!71+Mc6Mrd2APuRB)t!`t zeRM~WM(1T~Q4>a`KZ=`dx4-EC&cbg+HIh5Z*uJ`x@=et{uSwW9Kf)_IbzhCj!am@M z)e0Xl%9DhBKTiRYWu1EllEmknpQ5nOi3y(MfNJ72yT8tESW6UJKcEMIA|IhH@K#`K zrj(64sT3&|m%LKSMqa{~ympae0jMtQybMutcj(MbI2h_7NUoYd7f7WnpGU1i5l}uv z;m3~aJNx^UK6gN+3N-{2RTH|%(IsCl)aQQHTHk>t3iM3NJ6>51T#)UlwH_?;G}7*?863wX)><;O79ajFvzTNLnJ5D1%X>&(-v4 zBXwAK30@494v9=3wddf>f1ue7yDhH_@kEsDhEa!vi7IH%qYjDmIi{$VB@6AWYtPqn zkc##k*byy(&ytA3%fKG>{BQL=pRwmEQPZB!?+0ihb&ZTVmb`lwQWkkXU-CA8RLZ?v z*Pb74+z+4*>C6wFB0YibWSG(?*@Q}z>5#CH+D4R06iB`=t{Zsek79RMVq0p7vgUa) zMx~x_m@8)Ml;Pnh@A;Zk*0tvZmg|rRDB3wl^c{T12M=(I%?=2dR+c>96C}zD&v*Lm zC`jJn6?S)wtF9c7|lK%@$C89al<%7?Tx+6JzvxzScM|=d7N|ba+*7Ge&lvO4BYXPV{L|HZJhp1HV=Qxc>SOrb{I<~O6Zw^7#a<*dFKeW@BHOZ;*h z6(PlFF{@D`CRn3DOu!$-8YN4-h>0{uS(BV@+~6HNkE&MoN>iWz)LX@!v)$7T0d1p( z>hrkbRgscv;&n1enU>F$NB|RRETo;!;w#}dczwl-&hJwXKST^6z zqn#tG&t>N@s&AE-aPFM-3D2dbMB+BexO1t`Yix`05`Fe1G1eV7RE;t|0@6Nv?IAUw z`ov4LWfXCQuYj^I%NIhTiL<}*iO=#QeWF?pJ+04*ltapvQ66=9tcfN7GR{-f_Qfz+ zR-`~oux|0K2Q^1+>~~wV7`i@ie^q_1IVy@}6)iU8&clA!y1ugCb*h3z3Qzdl^>r6` zr9(n#k8R&nhxF>ds%>9nCcf|DI(aV9#0XJhA)*ecTcDg|{N+R~+glEas7cJkPDHuo zaHC3Lkm8=VMvGb7cf(aGF%yd_Wo@5TDGgHPgM?@z8KlZbiFa*~>SHFNpJTd>@~#hP z5_ukc@!s~GyK2%t(tJP_VfGp{t|7UGZO(&ftkR&A-09< z-M9Zpm7hmuVhvCXKpFz76U)w2NM@3o1Ip#+X!csNSOOGONQ;~aFHvi`Es;9!Z1J|< z?FADimfbCw5Op3))DG(W3Jg+py=%;b*1K6On*gE67Zuz3I&O-c#KvrqYpgfNsembMZG5*jd$uG#jek|oj1JnEpJiR zM@mA9iA@tPA;p0z)u;|qR-+Eky#hXqZ^0gFqCv{mkW&Qaoq&6KLV$TV! zTB9WFI~p~iNh;N-%%029ktZp!=a-M z2(ll$V)2&-sY0LQW9?0cagYL6-YF)e^dmPhu}B>NJ>ZUR?1aFCniz0>V9%q8w>u$# zsj1yIl*Oa4=heg;ZW}g4T?f}!J}otU_~1JB+{NcyM?L?kUNOOO3KpsDrjLLsq;C_S z$1!RKC}o~cnm(^l*y=W}4>c;?3SEp*_!y!o^RmcMUBVjSa}I>rF6wJ{PJf%KB`cgyhJZS8f77Iuj}EL8l|<7q$~ai+b9&+ zCP8vnJSHgo`k|MI+o+`k3EL>Y!!`iaeqLe~P%}**0Y%PlPt3%Ji;4pC67=U+)=j)B z_tn5TZ~8uuoR;e~t4DqWRN;{tmaH$h?+_Ioar+tQGmWRKbwOt?L2*z#3cBH5!vOPFwiN2!I09$0@1^ z&^)+hs_Ek<3J)pL5(h*7Nl)_&%<839MJ@I!e4mD^jG;?JNghw?ute zB}+uPN;V>DsXNycMN!{!imJBwGDQWIESbKC%*87whp(f&=fhlup0BG>9H{V+k2T7t zD5zv#`mG=9YZQ^C8g=5SyFfym!o>8gt-(7IG2t#=eG7KFc#Vi~Vgip+=g!j035^7^AoEat!xTV)|@~+J@99Tues<>J+tv6!%ef(HhF63ml-X@h|$~lLl$n_0@`h z+w9T}FIsbmDnzeC%9%cVA*4a#e%E>yTSqBp;-Fl#j^-#8BrttJgT%S&GGJBBQK(Ti zGGVn#ULsCWgX9(+VxtC0iixH{!W6ZGJ0~AuQ$?d7 zm_dW&MvkzI`pifrTjr`L>Z84kOy58H#)7D7;Uztxs~kf>aTztTMk!lN;PIx9l}aVb zz5>4AU1|DClXrjF?_!)P9g6RFS)!tmV|~AiU;VH|-T9_BKeS(hbYwiG{q7h~gbxE{ ztyHl@B?;1sk3%g$^=>YEJ`Zj|g>nNgo<$s@(4VM6wadHi-=&_fOi}nmAHzB0#W8C! z5L`Zm69Nl7iGslPDdNd0)HZXDovxfwf#>Tl#0TaaRf%+j$F|p$*MpZ zhOF0HPeRJ8C>W!Xrf=OCMFEnxe0Z8(>F>i+bdKIdiau+i?M|rV5@1eaw3rEyu-mmh zkM+p}eS+BCfY{ba4%VqHT4Hz|KF|_%6GdNCj#LMDat8{Vu~Wk7yCVVIHr>Gj^rDNkLFhRT|PsSe6Yfs_y{%X_Pd`(nL;S@ zf;G<_inG-BMgp4-9DY!0`oF6tZMz^~r}N>-P$6&N`(mSzkkG zfC8n*8*DUjge+Om=4F7YfLdO%_N5c*)6x}%CsZ(T5Kz}X)elhb35P(CZ& zY1a&|C`*=|vyps~N~{1%6RK;ER!kiE#0^@0NhR>e3XH@@3nKx6EP~F>xcfwjJLe8+ z;EFOo6r8)5P6;xKC#r|TfK;S=Qu9SX9n4Qg$rZ&4RXiLcnDQ2BbmgpiQ%NNgSniROb315|%8$}U+;%7=>OQa*`exrEAu z1m2-cqU;=0pYTCaCV>|be4L-0;QR4=hB674@(tk>3BFjLdILw;L8;|eeOlYE3xx%dbfI7FCV+Pu1J9z!S0#YY&y2g2MMzq*5xY1aTG zKBA&&Wd~(Sz7Zc`k`oYooisMYUQ#CEJ1BeuI6txDD+7QZvbK&7A1OAv!37UEMX|XN z5|HhY&SOFH@^sn*#(G9#fG6yDTbkHPG;^DvY;?-e%v77RK8@7ov_uUV2@OnS_@LzT z9n@X*1RH}Tx*ZhSJ1Y6GgL)b8DIb>rg)VOZD33mR{>T2X2nn}D86mL+s9qbZ`n1p; z9i8FZtWQ@=8w)gr6%>B^uGqZ%}a@D zh;q(6MzvsvYhmYU2~`@rJC+A-K$2FS1h#nG>fU^A-12RZ65Yk9DWb;G*t4{6Orn{I zs6z2IX>95E62;dL<(&CA^D-bR)F@nrUmyx5L$hy)Gq)Ng&U||b1w^6S0~rxG^Kp%m zGD2X#qoKKa^VqYC}+*t^VuWz6Gof+i5s!zlb+Ah#5hBN z_j?9qi>&!`K0{fJ0-`)w!bl0$sDpV_i<1(|B@{`CehHPs#Mtv)dB+#aVfeuELCY6N z2_CrNR=3jV&v#nBG0Ru7kMQBmYZSGyX!@v){o8*?CCZmjR-#rpbIwi*mWWLswz@Od zuAZuUn!d*J#jP$nl@-@6@=lGESPPa2fbu1jwz}I*-!`B|DhXW=s9Rk%eO99EFD#)R zWxe`)+Uh1hR34#}&NmvNx~9)ZC{`$M`p~F|G;cJYY83Br*!Q6VN<-8W&=iq6mm#XH zp=8?is1{lbO(yXs@OS7K%%O`mPxcMI1u#|N(cysR3zy-Y=5ygup!p6N&nMwg3qMMT z3ams%6j=#2O{2^3XXm`Rn>FfM7mp#?H)4r$`^Mk7S0##2YOF*lQJYaMLexwg`?>{Q zqCSO_QIR*7PU0wsLPud@!!;Dt=KE+qtf97f^QtyC(=J(wxQ4P4_52Z=K6h_SN>ttJ z!t;EuvwV1=G#1|l*Bx;S^{$)jjx`E@4QfHpN8?84hhonsR>D@ijpbv2EHjy_G`7ej zP^auI$CH`h2Sb!dKA_?NxnW;qC3ZtgIapaZo6*-Rzj9tAEGcaNg9iCq#+8d zMA_l0K%rJ?h{9tku;wgK-}AqX;bivhN2aX#o*^pAB=k_-A(LoBRFg>*H(0pE@fF|yBA(X)2^dFo<%SXz*%ayQP7IG6EFClI0Rq^J01(sys zP}RZ|HOrM)D*4DubdZYKM;&i&Q7zylg7RqTFog0b5Pg0c{+DlSyaWJrfT$LS6p214 zkIZ3Mb0zRdB6WtBN}M<4(MxBp2vhI$5=DMO#Q7?wB5^*-m2jm5Uy@Qn#Q9{5nn;gE zhNz;HV6FsyVPj(Ao|!f_j#29RmYDkFQNoY5rAO-eSd9uXAuV6+`V3R@Z>FjQwi@+wcn9UGaH)={cj02xff0Qrp3lVQ2jl1?auA%FFhkL`0iw@l zD7<4clrNn)Ls4W7JaHXWtCr`qycbG|w;sOn=|gsYzgr--XNIzluj9>av8#x4ap^@F z8#=zb2L8etasGE9G^t97-VcR>G$qdQn34w`L#V}Fez-1nvy#vJg+t<;d#K4`H-+=L zQi3m4iv%{pj)~yCnKHHz=XiWJWo&tz=Cn(cCp=L%<71b0sIrH$MCOsduqHB_2VQ%q z&BZP{K31p2V%K6??4OXnkwY_;1$&Iu__QHqry2N57e$wVEjx_G{HFv>lKftTR;{U)tWA{c+or~nz5c8E1g%8i&8;a+1bu4PuD<1`iNPUj>k6S zM;NW>h%%2M*z|NaAa;FMTdu^9R6*bFt}n_ZBsh=cdFA!c?ip8!u1}NHPDj)Z@;p1D z@EaSG=exSTZA{%5*C$6*o}@&c8^=dXQ7FsH0i3VaQkjLRRP^V$5~@=#H@!s3YVk4! zlvs;pEw`fe+a~*>NOmYeQbM1#ew>+%?2|~=sEVrT8y{hlNOoc3n208t1j$9R#1SgK z&P6%fhj-D4{Pje$2cquBfJ& zNEg`3S;O*i#VS?ad3H&kf8n3^d17SI1*j=Cp;^ivxKEtNExt!i?AS+XCrJ^~OeBka z6#m-+M)%hPY~|kz_PoqeV$a7SSF0iwF0$yc=xpqQkM?@(kW~mA5zn2iisQ7AjLsSs=je7a{`pn=U%p;hGkUC z?a)Si1sz~r@Fx0Pfbw0$*};`i6sXwqp@{~+hi6nXMUhT-s_%WE`kix*j-7Cv~ke1-pumjhfT`|2H&mhTa;S13K7JAgdm;KWns zf(govQ5>gA_uop?>_%wn{I`wpc%UBkkx&SuKU`!!P|IJWU_qVyav; zymS>84b}6xF>2iN-G|-}SJ*y$>OBM>RkNVfFP#CkcOOhp@4+P-@A)F#XOzT;l**jw zKIh5rv_Od~@NrZ~8Qqs|gl6`faT7Nyv=1M8G)8rr2^Y$`j|1Eumr&mGu|yT0A>L%m z=Q>$q`#?`<#rrPwe8iJ_zUvcfRH#zHYG~)y04$3?QkBB%g9pvY0S5g`r)}BmjUc+d zgLI9<+P$1Dp{|cg*|3pf?$Mh__o4f9>3Pug$+!VlB5$Pj>H69UHa8nO-G>*^ebkVAZ6CDfi9)CL+@!u8g^p=@!y8p7^Bcg_Qig;UzcU*K zOo8dOq;td6P&DzHDRh=AsHHF5iMy7!R|=hMMD<2xOlc!Ej*&G?jmlIe-$#7mBL=oSQ7mR&K2g0<9f9s+6nj3MhevtBlgcVrEmIC3l_~1_0s|;Sy|>6F z(oV|RKENo3ORNwRk?nIcJOC9`6ER%k(>iYxsuaB(#_g09FQ~nqKQC3PJd@%WRo>~x zC<(7xIRZM0TsMaDpDlQ zk7KFCOKc0X;n9keyLYYKJ4!^~$A-ebTBJlw@U=3hRfDqW<|s^+2z0b97^Kh%awR40 zdE(Dad(I+dZo?Wn#m!ni8(D5AVFog$Hl}$K-4ov;_H&1Q{l*Vsulp?fx{ygra zR#X#f;`2SK33RQEKXPJ#OG<0k`n3CnGYWS-P33l2{1B%==r|L z<_{;szBsyY!}V@Sy@4}6a}%B&R#g*LqcWtRn%KYQ9gR|pnz2N7*9r>O1aD|SI|wE*pEUaa(yn9wYCq{DJCGH~nKT0F2h ze-mvohft@}HAw~X{Q3X9KN;m*-}WR$<6(`M@VmRI>tm7f9N9{!yKrKy>nq}OJU(03 zw;=mUk!r$;xg)+zQuknzy2mG}P^8rLS&?!B?`telkv-ozNj*wY(t_<9cYRi*V%Ile z&wY{-+gGZ*)aOe`sqKU3(4|OtOx1H7tW-^XZl1%;_t{%?NJaU%Fr`rnAGV1p9=s)u zQac(yIHX4O1RYYokwUX46L04^>>I!0IdpmgDD%coH={^TK*`rTq}&~@oO&L*!Y303XLD+=c)0Np<|fMoC)+7052!d zQ;`}9CyrF47Sg_*4k>P?bda|>q?X46kb;!L&h=q#cn-;+7fgBDIU!X>D>Z(2$g)b| z8HH7pu@lGKbjS)NcH*mno!~C&rygeyND3X@b&Wem+b8sp@MCO?zs1*E1t?5XeU;)y zYS{MKVyfFnbuM0V667YxQ3SPYlp@s&Hyov$Q>R*%gZ;TON)b_5=mxbcYSPQKCPfCl zw9=89Fh|Tcyy4G$K!D|wroZEatbO_&sEam?C+WF?z;RZ^ta zgsA%$=L68I#N^Au_xU7cstKq)OExpkaWMIkCSKwxYWuK~T2d3kl@!B|B${Bmr>(Do z#U_pp2Faoztvfnoi&xth933oC8BoE|VP_2!gKi~iRoh2yLVhUCQ5c}^7;qDA;=S^a z5EaQjm8i8H?`Dabk$p~}&vv{hQRRu++CKc7C8`kU?R-GtCYUV7wr|ZL72CcU+2`EE z4T>gq>1C@!%E&(Dw%8z5MH5=`4%)sxX<{EY;U$WN$(K^z_5n^+h*a(xdfYi7^+bV` zaTBn0{G+!$e$ol_cU>*qgtD1)iMpzKL`0z;&2~}`40ck1?OQ*>rkzxiAu&q!$~%~Z zBnGf#^(|#c#l;(`2__-=Bo(L$%uO^&p=$XRwrS#3TdT8jg@`)J~Xu~OBDLPd?$3tOt3^PlP@1WzZ9T5d!FYgSPu7* zeVyfSh3s<_OC~H`gLDN9hK>0aEpH5H^}r+ zG!gNH=V zzs&SOG?5FGk>`^Q?<}d$0fo<#nj-=VebYOt;Au6fQBh}~2 zCswIok;1XElRe&Ng@O*V3UQ$%UQORn#IjvkQbnxaC} zclo|gpU6{Gr|SbRVN(=j6StKq3NzD_n3*_5frRi1bsZQ(+Bu#>5m5zW&*I&h+)^&w zy!8J*IfB&Q5+(9{t3(}rin=nr6MDs_C_-vcqQ;OK9^T~?h2FmDkU*Zl7DLCyadOL8 zhh&;Q`>Pr{T<+IuRLVk1$t`+jZPX}eky;c|gcNX8=ycH%u03bV$4N?g=LajULx3n0 zDHbbYDv8g1j`BQNgH%UMd|*X1v3ks!b5w*BrLvfxET9=ppBp-;J%_aK7ZA`aX&>nG zL(KKT(DCUL=GsjAs7Rl)Mj;T>WG4|((;D^C<-a0CiI||mPep2|L-M9?X5y{Ca1avM zr;RL9XID;Hw{=wGC2Sx0Y-;*ik>WZE9_}$O!6G%aNQvn){gIeHNoAFV^x7;^hN!xZ zO1y+2YGLA)^n9S~>!q^$lzn)_sz_m_5{eW)PCpZR?h2A7=t3>YEkYEygqVLB_fcB$ zav|kpMZFqT#eIRAxFu5)cFp<_@AZBTxAJzf31`pyt5JbH2b|I%6)=TCikR|9S?+iP zrXD*Hj@+1)Hw;p_Ou03Fd6Z*Nrapb2KqYP>TH}ZGIY|lW&z0Un{rQMKUrBFS@$%xS zfM0pzCKfBHlHO8QQtP^jvXWx!r|gJ zn^G{d09|_7w34dg<5k_n$x5HQZi1P8oh%gRaXQx%VT3F6Uv5L<)o-eze~2O1T$GG1A+9P@syHN)-B( z@atVtYW|{f!YTArswzjdPNBzn3h<&!3V9PN^At+eIB$ZbYQ#^NVpgDvVx&y?y(UoY z6eF$dc^4w|1*ov+9nDiAWsLJwQA{If;=7qQ(LjYSgnF;AVg=yL;=N>v1v z&r?K`ALr<$6DbwRQpQO9#mEUOR1btg1+AaSDV*`c4l3&VCTrfD+gE%YPp{?n-KAp! zoT?+XM$1=r5FFC&mse!R0+~>%>A7p-y!sL;%Wv%yvWOf-j;hdjQ=2bGwR3xub zo{FSBZ(t~#LuZvj-C8=O!1|z>j(c90p#RYM)$>tP((g^jPH^8_eH|X$XHl49%s19j zE3IE?_3kg$LvR(P70fX%peIV}w`VQYw|?gfi>@jaS-)JRZd8MQfd_APw0>mKZOT6}7LY0qODSPVHJMm39aqhr6zqFM?_s6Z&SKI7F4LY_` zWY5W>i=ZH)lD-dGi3N)eL>cKfkWP^F%Z;CDCYA>}dV!yBdQCCASW9V|LXm0$ziK`- zcl=4MrGh&?tfd<17vh>r^W2kuywGv^JI0OQwylFhRfUvKQwdT76?)~Vp#7Ucs=0ZK z7zrW@hg942mT9VOdMQTYrgv%USPJ~Yrgx-5&yZ5%w@Re@G({&bO1<5Xvg$-gnXO}N zl}bc<+3+z^%-x4$$?V7~wbA(bW(to~X(#Zbvwmv)AfXO1F4**1c%N9myqb#B6dqMl zBPA8OCMWHBfuov-8IzIV=)K!i6wN9nOtrIYlkmQY9BE9XTc5`=Wy6$KQ$U%OsiL0X zFm<01=}F*M)DwRZXAV);@u#Y0m;OVO9e=|ce(1;lXaQBe!~4A#Ep2Sr`pp=M{tj;_ zQ+l#0%!kg76-)s`X!x9=0H*Lrz`wJ=FQtu1Ju$=7vP><9sUbtLt4z^;IASO`Oi_-G zVqdIMRXt&m6U08_JQ4NS_J(ei>!zEQt8ezm2cI^l@9QU={UbJSxC1#B@33 zyq}%Du@sjYIYIS=1W8_}sOl5#M}oqKDJuMG=Z7)O@|n@<%_5ukb$%4f`enA>(o5D) zHAyD-WZwoZnWJBBIcun4xzjLr3H?y;8MGy(Z4j8ovcSkr5@%&lvT(?oCX3c@l*?QmIP0 zTyo9WfnmxohoT_ei?Le#M47Hd`iV*}62Ew;gB41U;xHxJoK0WL?<2xmnR0^f6s1Y1 zPjNX#&hH?#ekMcTnR1u>VwyTa zkjum@W&7T=o!YOOb%H_xe(Sjt1|#Fov7Oq(qnm_c6fwJE?QjW2lc7tKM0f#HczF?= zPm@sanpEK@&K=t@OI-~r^dw2D3JQRU0`!G~0`GH}iYc=lqPo>oE>a-V3q3(ZwIU^B z2PH}QI$O=1a7j`*CdK_PAQt+*7L4RoJ_sm0S1i^j5*DB*@JA9qrzcK6{!ME8a*)er z$n0p8N~sfU`$k0yc-l7fvhAA(BaN8V}~S3 z(b%D>$unk?v4h_NTcoUSrECjz$3#F;IP@l0s&AtAS*2K*@P~b$K!vY_r;S<4Y|;5S<@c^9 znzutGCOp;X3vn{t$_!vo;;ic#M=#YP7b;$cx$`Q3; z=ye@>kEpokb=|BXN_}A6_irLHDxkCst0zOOm7y(;rVZNOeUjgpFMnxu-cQ;3=lKU@7HA3P5FPjlC$7Qv8IeA)$Vb^M7E`A2 zL)lt}HU~XY0+cZm!6LuZBe6!IYLVJ&H424E7J08x%tdnZ;iZ355fy8cQxhkiLg3hy zQ$O+Y=f3rk6NTe_#B98(QF`xH)-6AAtr``T=v=r98}WX7i#(k@YKC1E^8YvrxUC;CZtWTlnrp{H3LoYE)fE zEZII;JGke~kZO6DUZI%da<*8d*z-~8$MZK#@H_C(=F_3?TVA>Dq!V|#bi&%c0x9z7 zl|c6(^tTdHXEK34_VdEqfyt^S%^A#ZlM<+8eDMmWh&hje1FIFkAeI(G|bu}u{tD{#%iWTVqkU{Gg_q?W@!286@o|9z*(J~n*v z$nSCVnslOz?@J7N*h%TZ8h29LWMAF$CbEx?-ol`lJ+D-=V{!r=$~?YLjb9Y_T{uJt z(jh{S#GrqGl*MW!=If!FWxY4m?AXyeW&5n=k5#kTfr!T`_q?c5z>!B{Vix!;PP8o% zbpSCE5k>x7bJTJrW#DRt-l&`?HL4)0AEcy3>Xy8!Q5jHOjgn%vvvzQ~t31r5|4=#! z@aCrCZdxS9_w^yOJvAZ4Y;sGvZ~`CTM=+Xx9eeTz3w!<>|J}c@8Wr2Vl9IKaF>8Q| zGW4E34{VajE0ffGBSmT=EqQOrMM_$V2l4)v1CgWD!Y&0}Urig6T}mo+IuMB|SD`zmf&;M% zCmtgKy)066AT||xcUj=1{8GINy(cGpBlTB*uP;)>mQ?7|SxOtJu1F;YeI`cQj-5!D zD*C=AobZiQ6;7x~O)-@j^w9TdlrlH(&@UwheYNki_`Y3|*>qCM`o4u<%4*a!zAr`0 z?%48v28RTisTXxB_@(fP(l5n3qMW2|`et0d@hEf+QmjuS0-e>VHz0!XvnnMKI{QA9 zCy*2UBxQp04Nva^QPJ1Y%ljNrT_9#Sej@`S*uHX6${}WKA1C{8_Yh1T^ZOFpMTV(G<0%94@DN~r4-droSP5?LgTUByV{*W^dnq)?7r zGrB4>5Q7uwj$ezQ{OU=Y%2y*zz3upmH zGNjMk(cckuvJZHgE~LT~_2|cYQ-{&#J9J2C#k(^O)4l>51qzZ0v?Of$ddWm-`dFZ% zS~eD_A)e6m;WuA(NJmo3?o#&o6cyF7l|ElKeT5(O5Oga0meGC0)6gP6jP4r{6T_e} z=OqGr&J`~t6Mp-q3HuZ}K}tdeD*Aa@pjzmJ84z99C;fRK&ue`GyqGUr-MrltrOb)e z@fpRJuL_WsV8_=neeC!^o?9x?m^{C0fhTAvT43|pmMh=rBAfa^h7Msp$<-t54~}bVEm{lpW&9NeO(i<2xM()pW@6)RPh_PiX9lpMxvj zDwD+orMwAEOT^La*x>_!)&Ndfd2UOn`7SC9P?k6GMOY47c^WKtQJzY>=PbqZvK)rE zW-m|JJTbzhz^O#I)B%c~Lo`fyN!wi?pspYNrobR&?3(YQW~oTpMS0JEawTxWiSxAG zodiyRmuM+t^X=|5!X*t*==bIlq}2h+i1UlZb0|q4%MzI#!_`x8OWppa15o7OTDDG9 zM%bFe#nx9BAncuKpdgeMmJpvYaky2*=^0{BjR79^E%5(h?{ zyEQ&Zklf5+1qz%VG!kZw!UW|Gse0^?m*cOxID#xWqcA;NmI@?D{8pXu( z#Fp<8J%wLwW)6>=z}G;Mi9qz>W7eIH zgYWp@X+-xmo=-)JK`x5Iu@TR1ZbYeU^q*s*}htg92}qIjk5O7^P7E!GPT5^?(zC=S5>PM$!fRz zfy3fA)GCT4YO&iD$v4^U*6@}^iK=PMluML@0u51$!US#J>CV0D1ER1T7oz5gNTEdC zy72IFic)aj&=w!MzNG2vk|s=nG>#dwuI~tPiPH7qJ3vielS{O&55L1zM4icqf{|nM zBCmw!JCi2R^+lF%MJ4OS=yq%Us$Amncr||9^~rB2MAdpf?)v06bSDQO)j2uvj*=$m zi+7$6k1DvM&Ov*84xg$K=Z8sw6g|93M6$BQ!#CFV0Xd@e?(|U#?H|M`0ufCY12*1KZP$9jpeFW%R?_|3<2 zhhxX#_Ih{C!%J}0bBE?QT&#B=W}h}F|BuRE{AV8jhn?b&6RNSDx=j zsZyuR(hXVcid1%So(*?8C_dNp>~@Z6$k?P%wLHwG>l@G$t@ZQJ=CQ61y!kv2v)A>R zokOjk@-VjxmFS6BsEnQ%OJ!B4Y#p`O@1{%F<)aLeiR9v~-k7BZX(2wRWP-do*HPsA ziYQI=Ir1>eewSX3pqL<-;x;NyQenSKmg1SKUZsL{gM?q_;k^}a^|HQE>(`FH4>luFm;xM-#Vh8lr6&)e*cRYbRVWl>&Ibg+WI-7!Z7v1QYmZY zsbBE!Z~aDyver+CstexnFqM?Dmxlzp5q@g@>LV*8B6S2h2|u-dluQ)MsWa&0De#QN zi!pvpGGXF#-|#*$_D2y@*zgvAlnx6R;di$;el$oKJ>i5OICLVb<@Wi>!?tH42FZlS_JJ_x@pxu7f8q`cZ^3+( zA;rcIu#$@xkUEK#)T^)5#xFx^#UVv3A!N)tKYQXr05}R6bHb1MzQq85_qGYYxZ`E# zmv+3sQx^736Oo{q2*;%GG@YGiGY(xv$~=b>A#H0WIu2daROZl=jkj{>X~%nwkgA%A zp72XMUQJUg`~*ZuK1|`sL_~ox2Teg;A3jhSq|mfTdtTbUN}+@5>rQo)SqiAq>6@aN zXh9Q3^cB9GP|{XPqf~TA^^9Lg!rW&3LS(Zseo#`p1Mh{~H=POzZ65r)79-v#P4MUrnad!*R;6&ihlDewGNSG`M2McbjYvZ+j|^V@k_U_Yj0JG5Dfq@Q6b-8@{BsX3-F zTo1~WOD6)P04J3x$j`m;!)MFzmaC1OIA-jGlzpQ-B=&vS_BL_?530wW0lA*`yjHC8 zBt>ol7}Hj2fTsgr^KNqJ?D~R>*OU_!BJJt=LW%mcF2|$C`|`yS)*OXMg+uS?K0Jjy z&86%5C`7vO;i0h4w^F}0q9%OHo0>kxU`i;f4b))ETOX<`O&{pKBt$A(-ci#BcH+dv z^Ah&0(S0mU3K*LS`-XR}<%?gnM@72Ng-BMJC`3wh-+0Trqv=a%s*kJr92L;?a@EP= zVM=!tAmnqEQYP5+f$KZX7cvvZpC9DQH!ho~Js%1b_fs)gmP(}OtS*&<)?T0Z(x#|V zpGZbfiDXLI_lERyY#O`5H6fw{LzFKHl$o_`x&RZbFB56JYcc{Ie-VO3Z}Pkks=T*SEXplPz9jRPOnf zw{PlF${E0kEnd2bql{5vCh&o>!^3k`WFMf#K?*NMO-PJ{uLP#3a}ZAeRH*v(a(uUx zqV8OqUSlcjqt0hK;Nq1p-dwz*D*(6$Z)rsezoi%~t3_|7CeZY4v3)!zg<(o++0VY^ z>yMu)>hon{AEPD`+h?B5a84?#&#{xjLrII?K%kdTuntlVDqiWh>u-%fwYumfaXt!f z883QAm|9!(j`(wnM|u{I*B0I~oTHYQy61-Z^Mt8g)I{XZ6Wf=i6XMV793{Cd-?-5^ zs$=_DrRd@Pd`ZDXi-!-7kP2fI{^ezg@^kk`0aOgZJmwb#B7sirgoY-ZrR!}4`dZ^hjsl-z$!e~RA19|Ah{WwL-aP@{^umcNI3zl_CZ#~6SoBv? zFpG`X6|-nj?#-Paz7Xz^a$h_eKers(7zH&F$0(e@sp7t4F7D$FN-L>TWTai7`eh%$ZOX5-hBeKQSu_Z_ezwNu}Rr>n1|7L8xi_u+RqCMLY` z3u>enmi)Ojevi2ZUHrL-iT#Zqrl{&U95;T6Ki87iUdsm=0JZa=z$9n_U{c@b8!6x? z_I;&n1w>(#LV+UJCoK|YDN1GKkvjc$8=P$YL_}qel$|^TqU4b(S8uu-9f6v7U@}TQ zT}COtdczsYO@~o1i?Qicrq6jus*_DTf8VE1#ORi$L~?l_N|ax{iFbJ+k3GN@Ufh!c zTfvPKM=4wKVk5O`;?+j#bHju&)u^>IqER+6rTX|t0IhcfM6vDb6UJ8ceXC1ewtXeD zFLD!p^+pPGQhdi}CF%o=ZaM0S4qHSm6zC>JDk9@hqOAS%cfCZ(7Qc{9q}yyUv+v2b zedx;7N!nPu0Ky|*~*+t ze~wd!u0m?zV%>EP!HJ==0Zy)&z*8!O%CbPc{mb>1Kwj{!3((~`)P8q#KQsilBzB7b z6IQ6cmuqm#c)#mONGMKC*+XR*_hQ!3KAu86V^<|U+s1oNIqAqZV zdS3fo^YGeJ2=9uRu-7D+aN@jMMs-6J(1hZiiE}{7GbR|)Y&;cSOoOzNgJiPU*zoCw z6!uaJ(;>j)4k_DCMLgM=n>T*xbU1gTRTNo?ra|gh2`Odc2<5DVl(Kn*nn#P}5lTwg zMSbEbYToe$KzV(7`{)0dW~dm2^t~1^yb^^3S|YA@jp~C4X|{?|eTu87BXoR)mhg`6 zicx({*0*;R6;dWTL}?Y35T%aq##T||jxSMt1dv@iWG)hqaT%gs6{3a-m{UYeXbD$L zpucN~3fo=p_z0wEW~ z>3Kd@DtQivGZfcQ%0U`siwQlmZPe}(Rl@rEZB$>Pw2d0aw!phR&lbaz)5PaQ(zN5- zCMDb!PYW+TJUhx}9p8p6o3*Tv_JI}bGqMT^wA zw|s?__#g_DU*@2l;~3Ua9HGce{K8MZVk49@5bX6D&1V~`XYdxcyA<`QAaM`X*Qi?( zaX!jz;WjFaQ2CC4^?d6iR8ULw=dCSRtUDa)VSQtV6nMYuC|d9wj+N)#Hj1g|C%t@E1uAJJtmUIY$_i9!`FfRXl=O8ipH#9COEk-& z{83>Qh3^A{#k}b|ESo4)sCqG;fI1xj`AZvxi(dIJ$^d=;xIPh2(Gwp@^Cg~^^=Yn_u*R>RV>^eU#q3L~ zPkR`NSf6aCTN#PZu9D`4u0?%XAW|d% zu{7O)-LO@th$!?Xc?|_pqEsk#d{h0=GWik}YN6)qeH^M#+obu($01U}I=``x<0)0B zvHmCpijU!x+TPK*?NqZ!I=99vnk)~1k|0@!ZU z#?fY|*7NZQ@08~2W~fr5E?h;Xxmfez4E12FQLBnRpP|_AX@(lts4;79%^&wrX5iIg z*Y;4AHK)n&qgw2aYSdtc3Sx;eGO0*mmXiJmT!kGG_!ZF-=1W;v%ZgBB1cnz`GrPnZ! z5{E7OvKXUWePj~ZLQ3>mvY(-%509Vd-Yp+!6(3z~K}i4gw~t7PJ>sJU%h#DWMky1{ z@~!Q4oA@Z@w&2c9WBEX+Wbu*TV!P+bUeI?>6CVYZ@6#n^LcF)9r4YO&;7Rx0HbEgq}_Lt1Nwda$0H{)q&h_C9%rFnPBN#Jq1-0Lc2f=!<-`pcag z*Yn{+HC7^*sIQ&|pGUi)YLptmj_0%VOAvb+qcmA5V`6})*!4Bh`K0TMhzfbP}qWTE%A;-r*5+4O#BBr*K;i*^+4`SE%J2zS0`3j=iF3K2*@#QEYO6Fak zqf8;&Y#dIU2R}Sj=d4k|#_^cMN44q83R%ke?(0)q&^(h$@0vbG)T7Vzm!qudlT_lU za=t~^*WKW?)_erpCDyjpM&R4b3;`~ z{XNO~Qk5!?q8p2tp!!I*D3eCqi^micvZ3b##y$(G;@r3Z~AJ!1il0_mtk>n z_yOKkF<&slzc6RcS*b8tm7CVaOXz^WE*A&I5{Wt20p6-OPpe%Up6UUCwA!uAxy?(I zP+Y`cO215E2@h!AWX>s%MNtwhfhQE+d69qubME3JfXRm_GJT^8MG^wQA&^v|+ziiL zF-}p=oST@hYxx{cHSoNrCC2Kb!6u3q1j7AYsE=qc#G@$zYV3t)yo7r=AnzlfZfbxk z=R#v*OYub+Es=>nuTb9ekvey=#D(Ag!`&*1z`{xE?RW`e`qcErcnS3+&h*7yRBZZI zc!^SxTGQth>gvUh{Pe~1O36UMF~-ReNmDhfjS3KkXt@O)B|{Lf++5G55MjE9!I?OL>}ASw`+^xg}K0r22cuB;BTj6hevaeAftEyUJ$n-_-T!>m3qavb2 z_il_)J)+P9qEs!o^DO9_2DS{DzWo*sL)0qM7sn_Rs@v~=8p3lVG|$x%6iS$dW0BB& znXno=;l-V6Ce?>I;m*D1<8~LHC+d@nC43o0eXRFa|=KE znV-}d0hX+;=NmD7k{@m4^kH<8T7nAMoY1^Notr`y=n86y7+~Jww6y!{-xqZi4fVpI=$;t^#VUL~$!sOVm^6Jms=_qH2k< zClj!AO@Nv&qk2FMt_Xw@1%;;rN=zRg#-Gdc;-eH4g#uZ zWD}qOsz99=xkSFc%bTIMqF#lVzNZgascqyLdM;w=|f_R8FyFasG~7`#m3PyeLhE3 zO`jAKTTGu^QM|v~6{%J7+%!m=MGE(KBc}3xS4>|mQp>JyQKW{V^W_}HW%+H7U=&Dq zIas7zBI`CodFOy zf)j?}61P9q1FDQs1yED!eB|O7hf6G|z8y_paT&J2mJ%q2Z-8GB0MCm})bcLJG+bhx z>br3G)#DGrx0|Rw+wUHU>cb+c`gTo%B#~^T`cjl^mLS=a30+?vqxvFcE{;^B98jH$ zgWRu-yG_)GQ8Z9}z?J4G3+bbgyKbW_@En!j+P-eV%gRJpHJPl*&dE(!3X*I1*yIh1 zl&_^Ye8!k(ifEiZFmf~p6t8P9yst)tNVb%8A;`?|i*sEN9cDrBE6^b$3ZB@@&j z8GvfwInmV(QZAWb2-06UCP-kv> zo<47V-&L3lkE)sIFa^y7Wqs&HPNC(0NSX=5lr$4b*0(J@??U>>@fF4t6vbFGVVHtu z!d|Ne>GK{gku?*hL7Lo%Kl!<_W`Y_dcSe(R=xe!`X!lIkXUJ+ zwIyFZ7a(=~z`RkcS3=pXwIG+aQI9ku($dQ7R;Dr2eCCDu}8PNKQ_ajnrD>7vm*Vq+(!8OzP{%2^02BZU~@H zVZ1~tQq~9tVV^gCWyc%ryVJ%mB+0&j9dCyyYy5_YQsDWn9q*#?)6vjeq=cy2_?bJ( z-)%=j=kBP*<7tVgFiDZ_v$my1AmQPp@JoClOehQguG4)7iS9H0JlYMhfKuPb^h-bq z18NNyC{tdA&aU~X=sLjEk)*2{3W5Qre~%!$Vi%u zWUUrktzlx1`SQX@!Ta>s-RG{Fo|%@w#wfzemt-H(AmKrP1;k2tdHdFq03&R_V2DV( zPTm6(5(AqAAxnu(*6a5>x9+X3>VGpL+3(wLzim)Yb#-<9x%ZxX&iS3+IhW)J@{?FJ zl;M48k!pqaB|=ghKyQUjr13s-rD7$O#`_*mFUygl%F?pdN!COn$je143i3t`xFJ!e zuZ7*mb<}_PL!qMtHZgBRsulM<8Icm=(;}Ng1W`Igq>#-K>7=F@?^zb(t>;HYIx2}x zEF{L;f_u&Y^xvs5$x7!(p_=TaMWi5BaYQO6_BG{4F>Hd~2ta2#3fKfGtvZ0-j7=aS z^#Ky%37cRu(&u2I5ZuR?5a7@Rb|gqhq@qBS)sem{;!&igMEWk5ClaK3Jc?;5zO41j z%-G|_WFb3ZNsa^wscndtj6S|(Xmc({(&!^-g5(K|Bf|9rG?891lvhBCOSVuz3JV-! z4PInNaas~vi!I{GHl*+NMm$+!_4Tqfc*%L<^3>UnTJh_xiu$x5@w}OXl+aJeDy`R- zXbkXPa&AMK=FilE>NVQSb>JP{y9-5^r;KU zRpQ|vQ6@)SLtU(Es5B};0)5W2j&^;jz%q&6e*E! znD(Qn^d*RWDL*PA_BB+Qpcr`+;)T})^^`RG5|jz(twc(EI^QtCJ%3kkOo=CWq9YAy zp+wmhX5T_2s(q1(y4e@iI!_a2J5eU!O*JfXlcFJYsahg2ok--Z5aAoiuObIRb|np!prd?YH=M}LwMMc6q> zlvqAMq(>34FP$F6v2%_?P&6u1Qo<0VXjCp;>^z-s*c-1B4^XtTM6vub)RO&9o3bq( zvN;mSM3g0WkI%64R!Q+3nGmK5&ySjq*cV~v|Ls<^o=VqkX-S$$1$gJj&Kr{AJJfCA zK2v`jjbhk&%9DzjeM}t@mEsuQM1GX;q+-~#8JQ4N*{^}e2eSoGA4UTspF>BHa7Dh= z+t5?Au;E!o?86KN7b^Co8qGfLNyWrIu#gb!6}&!DQ35(AvyUXIfijWQQEXwuMreWu zcpG?q=>#cAR#cujf%UTO}X--IRCOFvF$(5pTR3rJkF&xERsVE#pDTf^F zTSzzxecu?4Vw?$tqexldElN4Obg&O@)bnKf#dRiH^N^ZEDwQA=gA=Lx%qeg}fPGA) zC|ceej!J@k5wnkqi*d7$L<(jf{=AJnjD8N^8ues%LqS2V1pAzn)KkRbOTg#6lo-iX zf;BM+c_JE8rxdA1YTxH0Y9HBs$;CojCh<0EsYY~yTq($vsLzVYpNb;C=o(3}kM3V0$ZQ^^o-QcVeNUuSp%Fkebd zHP&u{AGNnhraIPc;S2Eo5HbZdwF5k)<69Fvq{a}hP*WeQLbFg)j5M1D&>>SyLmelB zPwt9BGlURNib1c*rWk``k0X~n)$+FcAx5ld*ig*;~ z^)aiD2XiUL%dI|w`ygJ8D+sVE6R`S{3tBIO42ile9iWLc+6TtOGBW;J(E5bcC;TX? z)(5$2u6Uk+&pF!1!3wtcZoO^`6q4|x5-KV}`!N4(NI(;jl7A8H7o&ZgD*JT2_%7)t z!95pfUrWYB0_{s#eZ1hgm_d0u2SfXWIK=?fytKX;?E^#=#iw4ZQ)Qu|NSu(ydu0FK zL{|JlRTLMe`DuNi%Kj5LNKjGCp^C++^Aa~Hw6BF9)kd7=Lni80Uy^(d5yNPB8*NHv z->c9~sWKBI1fU~{mx58E%tRZsk87=$AXce}6v+?diY;xJKmhkb%n~V5O`eosA=PUk zwU8;&Q4QDxU)zwekP_(}oYyB(q?p;)n9f0-RAOzzra}{FL0(p(!INrMQDpZ0N=E>_ ztwtQAmnvA+;@l z*&>OTqkRi1*Z0A(2}00`GK*FO3b6&G*p@kmj4~k{sh?3us>zXJR$nJas)5!g94XNH zI5dIw6A}ecB1cMCeb7;y*N66u*5zP}g~F04M68LrND(yAkQd*$5F6@Urdbmr zFTQT}0W3$IzNVFpErBm5+QcjI!&y%!1VdEuqlrRNj zeCiTt6OgSoI%9Xgdr0lXZe9mIL1fQo%wbqe^^&ry9v3<)=|_ni-b*$57Fw;3cu4JPAtA&Y3D8}QRnK3Id9ulB zeMuftJDw~wRUG1Np`%z1FOqO6^)Tki3Ler2H~J_qo*8{YN5w`T3-Ji6vH7v zK}tYUqmxL@0O|)a4Cy0G5vf@QCB%TTd!UVZbXWi$c@?vS$gvg3dq(`N! zKAv&7^D+CaW38CyI}@w#@~rp-dd^i85Al+Uy7BvqB9VI1Pp{0euz(arCJFINCUb~* z35O<9=y`0Yzy+HZ>8lfwQs_A{4gpg_KXIgwCvy;0w%O|YY!g*>J{={{bAj|-+Cl;X zJr_t{3ur>GikRhkLoVbFv?`qCMPEvq!gjoC~@;#Hc{^)E4@UW0fpsVW|!5=5ki z{3wvmf%n`EQ<^Qm%ek^V#LHMmWbT1{PTW3DO?rXXZfW35q<{&iDx&r!R8*56)ok>o ziy;B?tFI$aH~L7T$mkbr3+2k9tG@o2oHj^ch) zQb%z=s_$1i>8MWJ^QH=ztrj<2mJUZP(2auI6hr6msH1GD7r7f12~-+7@5t;+bI(bj z8X~+*Hyv(Bi)RA0Afqq2GDo98G3fjulp5>*=rUw&d<4rFLZC<+MX9?&prVVqa7N zvnBUjAbs5CBS8Jq1&Xh~oAjbcMWwmtqRvD@pc+X?Bv3I4iIXVUa@L^A-c6`^h;TT0 zQArX~J-&N3?LEmA12Oysl()aK}Dj_kXFN)wL>R&SGoa?PNUQ`N}5CRo9 zW;0cyutwsONmOP@Wyd_!8XW8zE93!n;K3_Y*k5U4~P-9@8u8!(RU)=`OxPq!)7H;)U|7>eRBU#hZLJDTkL z6((Sy*5wJdU-Y?2p6W0kg`!&1WYPWehoZPVF}N>ACGMtbeIl8oBXZ7@Imp_>WK_@I zB~*emRXP;)?;?tMeGLJosc3KAhe9$(i|{V0wh)4Tm%vfE{X9>2moFEJx%6`w3b7N# ztZEV6eITmVhmtLrqlkdCjJr@zLHBUJgb*n5o6xEWP=XvP;vcmtg9Lfn(kiywf-fP~ zxuFUZ^+g00C{WN+#6KdFFP$9~`%qCq*#+>Ak|rOZbV2D$n|yo`0jPa}n{)cn53guc zP*EmFhst8)I|&7qjP15kP_1IS1od`+`62~HvE3xhS65Ix9Uj!9NI?mhuXV{5bUiQG zl3qEgDScO1e5pkQE-8I?ffgS}$fH%Pg$u>CRzoBzGM*DI6q6@m04z|RE{b*6J_ng1 zdE!14q>K4b*ux6SB7c`)J_yy3s8*kV`KZdow|eI`5zNOUQH>RvVFki9jaLy6?7b+s zyL}nVJK6>1bRUAdopPhnv~yw}ak2zVy|}KJAWI}P6bTX&C$; zvmqf~q#L&Op*UHhE>MK>ae?9}ALqyt%J;KxG?r}PKGZxM*+z+K6^Z(QDk=ib>nbXW zMAap#zPMqeqR8Z%k1YYiKQ{RYI9~``f~lwlkkFCGgfuOfeg%%v?^=PhBrOVUxW_vS$*T9=q$taDLLHs&9-FENpF zqFSR82`36(0QpRqkqDGP9tXA}uj*~+EFwz~q3@G9ibUKEC5575z#*cFLg=(Zqw9eva0rFABmNdx6s1gvT1Vc6f@^P*a%ZINk zC^%JO34xDCARp|z69P4lBfC`jk}94<7vbLlv=(i)&*J#EpAq6DBD+a(x}^228^wuJ zB`y_{sEbovojDo~2|8b6s-Y04c9GpACXtBj3OZkVOhPEAh4@ee@TGjHI3d0%vP(f- zwz>@|sBe&hO51#$71RQ4J`S5lpahKq4x5WO6zqSBL-E8YV#r256jxA0kfp$`P*CsH zEk40Lf>;qu0k5iF_>x29OesN0C2Al=C?8*ltxk7pVRA1V=t z;uR(Yrbpx>)Ij1UA4wF}3T0%II&2PMS%wM|Fz{%tP{`PY$iPbo6dJ8Xl|G&pwdtoZ zDv=EA@+Ac36{w^S)vDY%*G~dTXZnfzP@PM*)P1NrC=pR58q1w`w)mi*07{U>C+K_; z$j27B5p+IIm1qGMq~-9_uhpv0>Qbwtin0_1C_ zp@#XI9GuJtOiwHuMK$`;8Y&gnO*16~nUBj;LPPPKC?fOyi%6b$PE?DEEe&KoLir*x z9|=@~DG{Y^ip6(%P81Q&U;D&|BNf%il<2%BhamGY51SLtp`lt4&XXD{9s@A=Itx^L z7pk#FUlKKMr=gMp6=^7z3@-#KsiD#+pAe{yBQZ7_nqfembaTuz3 zksA=sQ`{rLj3n++Ll{aJd|v|u0Z;<+1nGh2#4w2{3PqR%cc4BQ6_*%^m`7qojs^uK zAc>a=_hU&>Bu9-3>Sf3i1I^jrNI^lY7~%Y5_}ihlL~|-UX{N0UN{Wih$fmh`iDlRb zHRoKu1oJ3f*l?3z9`RIouApGw(bBslJ=l}B_#k0Io(PkGh9`OY>Na8Vi6~SA@u@4T^ z!ih&okWY|f)5Ig@KnakK8G0hckhB&9%~KVSB2^?nK9Lh8K=U|8-j;au#9ZyK@sza4G8>siWC&gyesb3c?t*FeWL6oGN4GBDDp(OIixENL{Sb01)^T2092y9 z1Q~rKQ(FYi$3wfH$G%24DzREIH}VhH3$N{Vnk9_!^spTPOZ zjcQO*R7jRD9MvRLF#d#4aXKFf)n~sVgevVuMaX$u@)2-8CR9R6eE^)VosxnZ6}e4! zC5xStP}QxzR&G>lK4$d^H!4YxZ3^u!j3C>w22zufB8ZQ>M#&#^z(CnYTtV#n^m2wi{`w z2=a^UKng`Q=NYDPK60)0LcA!?u*HJb@sb>ryBqmYumA}VaQA4me!#;}^B~9)VAN$&I&Jm1??3BCWU{ot)0*Sln=x%F~iX5rW zCLF1Me&{^Omf(&Q(@(9Di6*;Gl$W3=Z@o5is=P$XkrH01u=`qwlyIboA$x%_%t4T3 z!6;s_CGxC<;YZ2v;CG_Z`Q0%7X#Ic_(Nb&-nc#jD8Ggi#V5;eFsrDt>mJyQRRlV?P zJro6EEn9s9j?+R)$qGM;BYiOTgdat~Iag799k$qyN+W#{`>2^M(Mq6FiMzZ65?>)c zs?(QVFL_oa_BkYkBIRqIht(Nkw(=qr?ypv+6v-T|7W5yDw5v z^;)tYjD3{wqlAiLepI_!vP?yFMEa8Q#6wZBJh4!eP*G|25y??&6%{A$G82z7JC5N^ z)Mgfw6Kl-Qz&ZI*7lcOo9Mn9e84_~N2$IC+qd?S7z!E$aKB=NWI%f1EuA(?wV&2sQ zxF;2HB%<;XWc5MHl29L32z`HiYj;yBd~f^`+Hi<5g$l>_erkEkip+3@7XV%TPM0`WJbCJW*RIQ~& zxpS6=(!RU|tQ4w%1P7{3=5AvSN5}FKaGzV0JMZL5i5w2*O8wI)=c2qsnsVOgN-_Qs z2LS8EWEuaci7&w@=MC6-hiWb4N)dL>1c)R`EE*LtrUi6Pu_zSmc#1L3k-$N8K2fbD z9g2#Jodf8DnaAi8gjG;+W=e^o3=ZKjL8e#+2Y0L(;rwF@ibZiJijY1Y+D&RG5!y{= zaA4oOtM3vrF;eHpf{*kVOunc{A44XhEJL zilRJ2?nYrg#azmRyDTq<)2~ zBc_&kwH6Veg7%`kT~@874Wmy)qw0*l2Cz?fQORm86paE+g6f@Q?B zL^KLYOC)i8ydK{bzyy!)66c)9cU$Tx06aoR@o?0g55|QrTZE(9dQl>aBN_?y!k4rp zhpJa##qtU_)bkA49Qz`Sl=_k!F!|CYklJT)v|7=+6)@2u9Mus$ zCz0w1Or%7L3(tJOMDv$N1HK1h+s;z(M3 z4Zs8hDAH01V1m|&Z?yWF>$R}8LK|}7F()7|M~VlemWisDU>!x2 zz9eIUa0#OH!PsjENCBT%a9R}S$hPpJl56jFBur3g<|NQZMfxCA4eJLq)RA2t0exik zaW9IjK88!gSy2(tm&}TapmRtM6#ItetSIc=2TszD6FA@P-xu;EjJ_xy)d82Ftf)&| zkweH+oV(pV5uT?Rws4{_rILa|`J-q${U<9Z5#D9Uc_S=w$qZQ*-sP|av-#riZhHkq zHXn;iaZ8Ys&P5VO>_oBhN5bZ7YRu+%RK4Wo-(QRiNpNw(#7Yc5v?f)S5NW$Ps(J`H zN(G~yg6JfJQJif=!1=u)6DnBJ@p>Gwf)d(DxKXh6M0|>}q7oJQno3LXMcCT9Q9vi^ zg_-Mw2@#7*kL^$b1@Gw0#a|CfW+gw*puK(@VwoG#m9gh zMY{PPe=ZWJM!v*6X;BLhsCEj9+5Phh6qx39RDxB%dXWnhPzl^TDJWp)yyzv&6H-vk zl_e6WM6-fAzBN%pwq+KFP*5H7c3C2Pt5WBk>oPMziWL-BTlF-M zPH9G8(&GC(tiM*l-L{n_I4;2iN^oS8xI{!bZ_SbAK2+OsV#&%9Eqo}>K!Ojo5Q%!o z=xUHChVyYsUrQf~@QB6*Zg|Pdro7!YX;GbEi6|{9g`Bs7B_K_8TqxLqacs9yLvd7MD}-%6(m5BXW)~_6^tBQwUY`$^Uo)jI znH7aq4S5bn9h5k6_x=lCPgj;mX(+<^2;6Hn`LLInd=!e}IN!$(H=2AzI`8O0ag&e! z2p3A==E-G3xrS=0ECCm4Cu$kORVuVAK%WJG5`u#S`5{Y>R1{49L{=0@6!x&% z64BBDn56_qmY0?gtaI)|kzz_Rkli_1Xi-%`B;iBk@liM;+j8? zBN2<*^l#&mmn2K5*1~nvJXRkVNDMnq(k0sP&WSFOGE^3nyGu$cPUMJ?-UN0IT3@WB zMDA|uRoEiB1UkKecb=ljw)CU+QZoF4loY4QvSj%A{V4L7SR#j5h3z4TQ9Y4ED5(|& z#e^Rvu=9C%eH=UIygtlL#OI^08!vH4e7Wu3k@u zCoKh$dI6jXvA_-UnaFqgSc-Q}l0|M*qPPUZ`I3BzW~(pFmx$e{1YcrXg!47j6XS`7 zl)B5^C`vSBMpK-+%M%ULYp|sf4I|_{Qt3iTVICrm9R9??D8eQ9+5w;Xf>2Td=Oe-D zSgnQQe59lVaQ-tGf@d3WzGQ(uF$6d+!IV@R;GE+UDK{zwoS%)|sI9RZ1)Oi81^Rwi z=gBVIjhcVOsAKz3-m)RlZ~<-_w=6a|K+Re0qlhcP=zLMF78cvB+k8NEh#B!}9hJali#$Vt zN<7n;3D5M?LaT{2ic=F;Vp+5_d~yT`RHBVI@i-J+hR6xwC%qZG`SQcuJ_B8Q5Ki5(|vFGkIqK?xCu z61rZPe8lE!$l^$V5(#laOV+s(Fro$f2<8fLCF*I0jB^g{l;p=UP=d#yC@ZQC^HDjZ zcxfA`Akt2v^bsv>L-GW-ibbXnhDubHNZEUwa87K#v`429xHTFB5_xYff$&A4cM7+j?S;!dzfGGncI7fbUw28L}iI~pajG!w)Y}|Vu9TT z+?)k=V}V*YZq5U{O}KfJK&9z?DSMB+QAn15fvvjRl(@@qa}+;nA|K7qmEiUstUJn! zs-t|cS4g5LuzQe^kC4E@%U!ZHcY&NTff`99aR4MwCUF3Xh$B-%L-7K#jJhXWC;|PE z3k5aRsemkZp*U`yaG_d>R1!C@qY??KM6$9(R6w@D;6vgrEdu@V2$i554#>~4RN^ja zs0bw&62&zXq)F7fOr&t!Jkti{`yWW6c=e;i+G|HIVePf~7mG?3kR_?2^$c0POJVS( z*?c@lw@vjUQK}_fO)OQaMa)*>5Gmcx-) zbQd~GM??zi@G>bQRHA9sU1%pt-6d~|XG#&y*NJ_!jOW7F*+&b=;Xr7Yv5!zsjQ*y9 zzJw1&Wb;H#W&nM({u*(N6F?s_Hj*`&BOi(}BjR-f2=ilmW?#g-6vuYC4|V4T;X{#j z66>$co5Rt_J`zq8S$(laI`&izB|8c5i>qKJov02~&Ka`TWc5K&rP)W36Gc`ZX4KYJ z9~|bER$od`}`4XT+ zT&^Xq$t;rLsklV6vW=+8+#pbJtVH#rm?2A`1O%!LC~@jiOrSa@agZC;K>QEk%H(Wb);~&E zeMvv+M{&6p?nfnYiI&;$gqM?sO2T}tVo@CCOKGUsP?dx4_ZE>aLEWrKoG zn43f#3VZO0yHR(aWlQchFwPN+V2tx5Fu}bjQd4!d1k2@E@wX{~V&Pn9sDwa8S%!a^ zMEX)TpD4;qiSTWmDAG`boF`K_gcC(691y6q6GcUtMczA@vAh5hkM&XtM+2X)1^p-{ zoF^8sZm{`?EdeD@SyA`>m9Y7Q6GfV8-awRy?23wFyy9i5V9N*0ifT_kI?EPc;}yjq zOc(+Fv6?7=)Oy9;dSq7!REtD-CQv*p>iE{(23s|hIZ+U(I}qW;+su|*mth(CZBZGQ zQ=^Bu# zduYj6Zu222iUcY`N+|+G&^i9l+H2%Qoju055*QEUMUA8r;h~~Pn1qVrWC<2{BDhar z=bVy6iH2g`00u%37?BpKD2F2|*E0V3C>Yh0!vUy|(DO9ZM~GjNfJB*w3G|%lsFn+a za;Q&mBX|*6UakeWM55}YARskCeN+O8+Ut(k=;JDij6VEJ)H$bWEf3|ET(XMd;CYHH zkt`xBB2QeT+L0yNf#(pZXa>Ejb!`a}si<5_#OM>?dD}$8e;U-sgs5X|S3rGpjj>&p z{S0?1Hu_Ra+c1s<8GWg8E$@=i7vmDb=o7d^iXxkgMm6McByb6+e7<;LqNW%c7zSV3 zjiRE=JQZHx5+qS#Wt+|t6-T24s>lAObd*SnV$rC1ayaTbisKTUqPvvC0ihB_FVjX} ztfS(^*An%Q*y3vd`aT||8AhD*27rs}^xhgiK(H zWqwo?;KdBZ^EjaR*Ti z!551f-`YY&CCXl=1H7c7l4*uQMWv%r(E_1-9}n<05GDXj(Bd|+9hg`aey1qY*Hm2M zBEUb8WC`C(kYpq9v=KXp+4tm_Ds)s@qB?}5$bS-MpCI%l%{~z>NfbIy`O*accL?xC zW*-EJ2YA6mip-WYp%3B|>8NBO+2#N*%)Yda;=n|5`8DQ0i8_5BytoAEs1z{Kq@y|j z6QYo83{14l+-16|sWCeh?Fad32~5!HYmwC_R$mj9&f!Nj1$YxsUm|mtS%PHt ziTV;keiE6xv`AQ5FEAyL2~ zh$1_JSPox)4eP{5iH030vJuqBfC*TAX&sfY`Y6B)V1ikF|IjiOz7qwBtUXakHt9!! zAQs0^_?t`kDkvB<{xX-DZJG68e}MB?uGg_^wDaOfAI`gFLOX zIEWxC5_coFso9ZA>L@J0#-RzY&e`Gt2=Fp!LT~0wBuPjdtq>ALuW4~nc&Dmnn;vbZDwqzp@~#{H?DOqQVpYURC+GWxkHYe6I!a3r={$)`P%sKPPz)$% z!6;Vp5^fdkX;)eznH5EPYQE@hbA>(-kjU~ACZ8yOMA6-Z$w!zuqPz1Hk>xDeIIDwd zwSXlXM|WG*ycA`bAw``{KCYks_M?sZiF~PzQKY})Vo@o9N@nhMF!>lsmZk()gY626 zHR5~-^Zs+1d_M$2u@IB*_&>?y6O=v{le!d>uQjEwrOC$^H0+E@Gzb)u3K^v@vH=?` zzD=mhO#f*00IDdKiLcA|m3qc-N#+P)W?3;#) zzlYp0yqmrf=B0f1mb_V0q#`?sV`gmWB%V?Vb%);R#15V_Q+zXL$oRB8gF`3J1d`!9 z=8v!Vo1MSB^hOaoH`k8`l5}k@+*3T_WFNFcZ*wVcUa$>+KzUxDGrZLq>3MZ1xXaF% zd++U@>pnv}^ttZ+BcZf;j54X`^Fr*Y#4ZCsP?&SN2zIuZ70)5xu;Twyu-=N11Jou$kh9-r@`_D|3TqP{6IDD#9wn|~~2gXQg`SyG;ozcTV z|IE~||0Sa+5BmC4_?!{kw9DvMXYwbFQn$Ois!oNcjmbQH8{Fsr^_;9tRMlYPU!Re+ z?lnQSb~?9joo;5PGGENyGv2L)6@!-q zHeonh^pjdKGvj8Rw{3YkGqWYD-k_D|CJeRjE#nA|$xk9r&Og&DPw!i66z2kL1h$)- ztJ$v`fo;hvext8!NVP+LzxuUY@hxNN=8a|Jq){tw*;owT3{D04@CCmp|Elr2p**je zZ%qbs*Xhrzq5rE!?OWJG8;7pT)<&H0Lyh%m=No<5tjql{AEzz-wBTE&f=wy7ns})uJiXU75lb0lXE9L2} z>4oQr_G$bpNKo?S;{*K=cS0g5NjiPYe{|#D{pe!u+%*?zSM;jTgP3Y5t4dx`bt{+) z@GeW(VeDhufm*B@sv+TBugN%N#WJdR&t)LFcvZ71c5Zg)iY`9mOzDl{slbJVRq|)( z>(Fhom@qc0;F`Dr?O zZx!!!bi-Rk!H@B4ekb$?uNs{L_h-uJpA4oSsY)$Ut*E$8hAu{LVO7%dMYUSPHjciR zPM(*t7j`}JiMP-F-^=Jk^zv=`-lk12`a_#IIUP^C6C1df(9Ysgc8DuGbOgOjxyJq; z3g}M--)r>N_`*T=Qi~T2%#N8N8a)$K=~1fqhr6YR!Ot<0G8Gl4GU-HglB$HuiSH8| zG{YBtx_DKpRp~LLisIuf3{`s8##hm*Vn1mfN%QcfiH%AgWB2B-{dD8)=W4s^KbX)k z!B@j!y8gc51N(90<^z&6;|81;^+xX~G0 zQz^<)nSNciZ~oVRzvn0CzWo$Fu$Q=NTvsa8iumy)J;w|aph-2GSEWe^qg3#5!4kdu zw4>rw@l9pSfm+8NywM3fdV>PT9iVSKQ@NbI)3*xV!k!EiwQ1RT)sxK7p=R^Fl8vwN z6M7X%E#r@aw+h~@JiS*u8OIdmNjyg}+N95xj3z`&;Vncf`%=-B1K*U3O5Ea`4Sa*v z)Pty7bP_uqY7p;PjM8$Bp1)hB&T9Eq&Pmd_ZDThd{)IbVl-Vt^aUz8t^()@^t>ZLw zrTAsyU>bWmd!w7gj6ruI`6jk1>PehfqPJ3|Du=pW4Dm-&}ox;rEVAH1)Xi$vNyNLs7H=d8(8nuzc-q7(z#P#_*3Ph{}D&it4Kq~ zq?^Ue%KotPkuk)YC#2@_`CC@b=II#vh#Q9uX)4i}GBYO0tA^&IZv(uQqT@^%$Cn4&%GjPwxfdkfD|wgMcpJ*l)`h0dXS#LtTg+oB&oYJO#LWJmfHv{~&?t)!XM7&RpyN;Zti@k8Tu(`dpKie6DPDR&?z6>Yg&u7%Qa z-@^Pa8PnD-!^Cx|XUlLnGZH(U9`#fxxzLBcQ&IAg1Xt@!Bx^tWHy0lM^>a^6(dqHZ zq7iENt5I*+QHx>=4S=hgQ0%Y@;uqa)^rHTC@UMctq!&7Z`hp#8RV56=hL=%)<8EX>lOi>Nk54v+1Q*r4#oJK-3#xFG0GKIdN zUz%#wl(Q;MaPIy5H}3fG7oO)#xGd@9f)i3d;HdrRF~{5Qc=)B62}68|4yAj`X0jR0 z>&~g}SLlRN)*^YN>%q4!W)4IHhlZY4R7?2vWe4zOkp!ip($n^N&cK*$kY$3C1=5p7 zM$=Ygn2N-x!7iW93$2t1in^SGmdI(IIsjv#L^5vTkfQE8cutM!3@Idm#$W+D5LlVY z>Wl|y0awE0)}x@G(3k-Zpwp5ru}uRf(Wu>Ol?={e%K3`I#E*sod)X%17EUqjpNg}j zM=oQ0;0F**k2*`2&Q1O2|NQK^e4qG1R$p&R!xkF{P?x5IyQE(@McfEp=v`P$j!gSV z>1Ylcv8U0o)N*=7U7^~{>cNw<4Lm;X2~uif#>D+du8Es8afg%_P96dFq507} z?AIaf#63E>J-V9za*tG8XV{uPX(_B@%*8PJDx^N6s zYOt(~+q7kAIc~pFf)d6_(Vf_h5q6-WOw0Q{e8x$`&3d-v%Eg?csdP`-jJd|wJlqB> z5WVCB^w9MX)1Z$>C(9)yd%<%{;lN$5{Pd+$6Mw`jS4nVWJ?%5X0_FsQ6KU(?Jk z+>L20r8e_0Fb@S;rRHYW*{&tI)R@sLr%O5V2yl~TX%}YoYVU3@KUA|+IQQOu*~N5# z|IMY6M-w=`Y$>q&RB2F`v~E|?pePR1*dS)#vH_y4l7YeCGZRPCQN1B~MaDQ8=vfv2 zqs1`_LwA+pp_d1GGUbxAxmuB@aPx4ECfDO`;G*DyFgPn2A10?Xk_}zeBE^R9s39b2 zR+H?!r^7rAfl6t5v9#BdX%?XyJy_DEezaYP9?~HIWsHKglJ55A)I(aI4@_rB^JGt& z^=xwqwa|C)oPI^VPQJeHsy|Y9{vD04=w)MI6xaKO5PvJGIc2M>lvN6*e>};Opc^nGN(H-s3($zoOfsvk zs0@U8964n<7)y&ZI+qDu<>C4mZIBSOYmSX5oPt`jh`}Y9H}(Hgr#>bcDFbZ?b4uKV8RoSu`uh{kdEj|Ka6wYwyjJ>LqwthY;t3{E+p zGu-{_s%A+xpL5NOU$ksP>G5+)RWJK9?#5-lTV3tDOZzhz3A!{Ix|0g5zO{{ zu3m-F7+^j-IdyUheq`X=|gdR4EQioHV58+kt{$tB%={d6!kO%EINKNpmt6Lrt` z3>Xflawl{9w^yfgYSjpft}7dQ5Ps|MdQYD|W>k%DDqi@_MFUnQUy*Ok<+0~pPu9co zP=2;5o!l4debv2l)l9crQi`5Zn;w!UN|)&aYfAbd-KiZiu5)T~P;s~TMb%z`*>1zB zoNMT1&DV7oy#LakA#@vL$QFTGHL^f)gQ2yb zjM%_j5<*;Y1v0Ah({^M&4*Fz>!BQYP*`sVl3fflIL8}W zMxRvZdL^k4)=rrj+*=VlEQl$tmy!A`8!c3G%J?}hSCpYaaXz%db@HUTT3NPewUsGU zF=y$8@t{99?m^nKrlV=~MMGsr;F3S&KJ zbvB(DQ%7=>D(=VhVcy%)A*d@_j**RR=T28)O z0JAG(hK+^an6_o3Wzj%K!tMd5q-wBU)NVz(e5=3NN9W;~Ai$5&@L3giKUqRskUA{| z4mz{1+mNT#EnkMAhufRZgvDvsQEc41r0Y{qR~u#Rkb#>Wg^8e%j?gAmayJYKyF=Va zUb4$BZUeGlW=hhRF+M{Y+K82`$(Ik%gXtRsdBRr*uoL$I%}KWf6^$*XO3wY_?w!AV z+3}BaI=a;FC=#?jP9D9AnJUIQMyY2m)}%w2Y|KT|vWM|w>o_4UB^Bm+*KL>J)xbVg z%yqU$mYjJ+vyE9>n!+QKy2DqvCY{zZm&`(adF=c)K9enGV?%NaRkO=7ajOH4421?& zgb${zj^bOio5g;D2jPWhu(#|NoRifGsUk!MV8wRVTr?z_fgUj+j|8v6*jl(rI7dar zNRy>LId5wf1v`qclU-Yavq$}c-|SP2uxypDA-Tc5xfriDJ4;awVGA*Fg03Tg&(<_) zTA4oI{l+(j7k%T#c>WwLF}a1|OxMN>M&tnhgy#v(MR+9ardzWsj%w4T?C5ChLr-D{ z>nAjwsaU3MTfMMDF@*6m`V}26d0A(;itjb^GK@9LRM2d6T08_g1_#iq?35j}Jm!U> zDh<;fI&K!j(aOs-q9t>!Q?b-U8)L9&6*|OxCT{MUYK!Ws;!pGf>MxBN3 z!dJs)6NB|74o5dTS(W;=P|5-a1sX8zSnEpx9+d>Ra8TFw z>9{{&s+w&&vVRB`pb6C^8DGk|evpMh{9LYVc!s2nR>LFoqg9wXv;O*xXw9N*`c_6; z;VTYiB2Bvvwc@_CEj49s!g3yrdF8Z|BB=3x(4DE?9D zspdTE4P%XCLh0JLELzPx6-eDy7bH8>y&n1Bc{hJXe$D4%Bsrm7tlAljo)U%xL}3~_ zLzN~hgrwEm75ED1RZOyOR?$txHD`0uleINYA@8FVy|SS{X*l+pJhZK&j-t11fCLhn zz9N6gwJS0Xg5aB$uRs!XyMUQDFiLrc;q|5sMBIV83yTy{X5QK9a(=UoIoXBTx~oQ@ z2yV*390cLDav9jK75R`0#mFRQR@%3&)(u@xzEWQ%+`qMyt!A7l{eN(ks?mpY+~md)9|n^SNb zfWKGNu;qm=hC{{ar^iDJqib9ZvxSnat;=7v^?$o<(avq`$?-_zxD3g&SHOg{OmVzY z(SbFs9jxS+R5DU`hQ;9|^O!e#HF-}^7fUP4mP&SEJ)8{%qfYZpJ8%>L0+~TS=*uf6 zY;GJFbZ0QZ&f=3~=h0*}jCsvmgm0kpJ?cc$g|Q)>_N38bzUG(mzEyJIB9{XY3~+FW z4(!ISO~+cbhR_kyQl2Y6XJ)2dS2^iV&iMhFrGyg}d+f|;Sh0q7-K8#8atSS%W}lfv-i3(z9PxZph0bDb2KvCn?5v! zjd{EXv)J>@E>juJF1Fynl}nme_N0?Waf6lb%~$2+@(S3@m>FelIW(j8$f)hi{M*-# zfA~{kg(<0MudjNphB+V$R}CNr?z39X^(n)6Ry+gXzKU!rz9endObgE)ZpS19U1Tnn zELfAaLQSW55>#do9P(@&iSChRgPYVT#WD9Q*`=rOw1;3Lgg6lXHd%~KLbsn zT2M0M2sstu=@!>Kr@6Ia-jd;s2YA{*nv%6qsKPN=Qv(Vb!NGupZSF`xi0MU=2FE13 zFH;I#Q|%97hEDI!tIK6fv$zbV5X+R&boVMnndWoTs;w`Xb|zcPJAr&it3bI(rCLxf zk%XYtF@*7qI$Tz=F)&qYwq)Qwsu=yaGTioey1^8XEe;G62un= zV8fFFX%v?XOpI$2cZYAY7@=ACt)>DyX;s%O=5x$5Szo0ISn>k=h+buz-c9ASiH0@+ z7)W2PL9yX-7=QuZNR8kRY{72XE#G27TJRAsI*hcNP8Y-(=mOX%hWL00TSXZbd-3={U?I?9AB4!=f>9Df9!qOqsdUUQwQvUc2|tzNdUiEE|pQFv4IF z;VsgQrb3U7%LH@}yYTD^J4f_}2F0Nmk~EXyRYAinWn0mkc$ma4I#={Dpg*P(AWFj; z!NpDE9%&!F^U!9+C}A7P)^xzN+oGG-(+kxKnltkR{ijUF%4*|1fy7TeK2d<9vJ?gB!Q&CCE# zr)%MR8dpI3OxZ&}(Zhg;wM05MdBYb@UG~u3yuL3#6t_Ce?g__Iv%nFROjfeA57J>O zIP5gOv0?n$bO%yEJ}UltOoXt3mu+^TZPiu1qzyfK4nkj#FFZ!tuO9>99Nh`pqt@DZD?^kw4^LN#;_{MJJQ0*oN< zBD#HC(M06<$R}QVcgaCP>Sd8|Njr-_#SvkP@vUwZNz&hUc=zeG?TEe48aA}J! zf_E+J*j1W~>3h6FJOD-<2Kg)=(56o{G#pHNHY2Vazm5bT&=r$&&%>TxWn=yy; zKuFEZAPq0N2fWzG0~?8qcO$fEhSAY3tS`%MG<+&DS)+9JqFRw9SZijcl7o$n=R+d~ zQA4sBiY(%6=2if5QozQJM=liZ9ewUW=VB9lgf)NquUDPBWq^IaEo36c2q)VNQyB-d zhqSW}o(sPq&;&1+oEhxEt>A6x6edRrt|>hU9u!6l-emMSJv7~|7GzmFkPilfFq-)= z2HB(0FB}Ue$3=^ZN590$OOoA9@4Nx=EyM&0Pz+~9I&Hf!C`z(TS5t5(UA{XSC^W*+ zbb$Iw_#4ux=>W;V#fo$(v}*A(3@bD>UZdGpE{!hC$y&3f+ zJCYO!wGSOmt%Mi53$%%X-!sK#N7|h(=HVYdj1CRy4WIF-Z1y)57r!=T`XPIf&|;5d zyLi(AYC?Kpw};OdZI-5H$4A(VUZjCsltazTsi%whp+q_ob_{K?cEOc;$b!Ww4R%`g zje$YPHr%3&OVg`JGYIxF?}Th5_6uo)W#hN7mGRXm8iwu+Cl2uVrh4wZZ+_wV58eDJ z?ln~im!fkVf(X!GOkbF(*$-TLMC^oxMPu4j`f#XihcsLeJ)?spehm8_b3oZ9+=tyX z<~OUT)W0Vy!BonaEwK-iw22eogbw_Ec9F}W>Cv8jOKs>Hs3P13%~uY-ELsX4l#Pdq z9G3B0Rl14v38^DG4_@#%3^?L4o0Ck|tgM09m(dl_eHpt5m&2q94HGyTuteW`cG1}d zvC9E?k;CX`_Cvq&4`1s&_rp!>1h@>$dunQ&x}rw*P{F22*N$$$Wq%-j?BVev8jv_R ze$hQp%TOd08>^@TTskkF3|3(YzxPZ+RPl+uli7$Xz{rQ^9sP)H(=O_IHY~*znD(Nk zrx)f6dLwy=cHlA|PG6*(Gw7UVblYCR!l_SVM|p_E4+DwjbutZ4G8ZoTxh;7${Dvgg z)1}Y;i<`H}Fa6iLQRm<&JQE}=FRn;8g4Ti|VM`P6A<)%iq|v46E3#=q+rxbZ%oL;V zmBVEVe3}q@>bSX&FwzUKKQ|&{Nofj$x988z|wT9`z`@9@$>iVkW=^@%tcp zDr!D5zS3-4pS;oA7ExwceeZ33Ij%=D}?4wx3)U^^^~*`^H}X3;bhk^*+UwjC;G zSPJ@k6tg-8^y~6p=*wH0kslqlF&_I>rvT`7T3%b;fyWId7nv(ybY3&W_=o+^{+{-JePyf2=su+8Q^d+37_b_?JhBQ#MmYPc0UvAl>I(E5+ zXRh+d$y*j!9}b{T?6OhrF4PWzuQzJLEU`um`wsatnFAB~jEC7ohauKutv!RE-)}mr zA>lRKmIf?cot1v}XaC>ZiywMdj8?+cmV||mZ@vyqXAcAB%4XccnD+4EzNOR!XiE%5 z`197<63i{2wdNALpchK8Ga)_M%(QX+EtjIT)Ve0XDX`}hvsF33@-v6GGg0!y7CP;YVoWl0TqKbJ_Ttg{2q=_ry-n5 zc747)XfCoboXugsyfPT*>H~CL_R1S4#${=6giP8JO!-0{ZfBP-4f*OuSsI;K zXL<6|rs^14%`4|1h`39;q|Fx9N>0Xb{}K#Z!!W~LB?A$C8SyoeNAxI!!c=CuF^(Y` z#+3Z5il(UT0<6)K8K~|?;CevqQ+nl~+sY^T2Xo7 zquHfX!7hEX0i#Ko(Tnem-oNwaMK|{erL0xM>P@yn=@Nx!vg+hzj=ky^2q1vvW_{={ zVRjVu*lyuL6JGpiVMXCL%dYK#xxZEmH21DWyr{A@CIxeoHMKRUFH=G%opfQ zfO!+BZRLTi8Wip_WlswyMpVcAxuCGFyrHnsT>Pvh7fLm)Tq^fLB1#alOn=vO*WlGf zX<(c24Mt`AHc(5o>$%DP+Z6`IYPx+?YIv3VjUIV;LZ4c5#^_dUjDl`; zbhBYdBr=jW@u2+dQmuUObzh!Y_IfBwGs`M+VD7W*r>lqc8SPx{ieeR$1E38<8q{i& znQ1hwxvplMHdomn3d%-d#9SPH;on^R${&9B7!L!S+qQb;>W6w?K6+tz^%qya*8ASn z(2ZM9e{AP5zVXRpJ0HEUkG}uF9mltRd)X(CZF=nd(23i2pLqXZ@9~irx9)uO zd^NGLjrP29c3j+g3_G@dZDi-sZ(VzQ$6pO$ z$M2m#w)H9>8!N9lK6EkIw&}z>51c>WmUORS?9_753+j;Eb14GB7tqXXF zksr}Mw)Gyi9=q@WZvQ`N7f;-QM;Urx#l;8i*!g(0(Ytf*l^y@j7Cg|=S5O7*;;X$M z?R{eFwcB?-@qP{)k8R(1^!+W@9^ZcA7#`r$*ByJM_yiz*2kB3 zETdiL^||9CuWHz}Dfs@5_rfhZpTMpsmfdJj!(#)Fbo71wQ516zX%99|Ok!ix{qG+e zxfvbs*ry*oK6D~LPi&fc|FMxj-@fUAcbx@4(;QtG@VtZ~yk4kG?U*{yri8zC)ik^1FW1 zi#CS7Zt;x^*6_{~@7(|X{?b)8o&%5OpS=dpvGR%g#-oi#@5^Ij+oMSH>wWd`#cfZ} z#zkxB##i6Tz5n>|4H!l5Z$Gi=*k8?F7(Q{I{*On7ZoqK*{`Q|78G8Khcbxd*1DlRr zurP$)AHRRoV`mSaADX&P|LMUyK8ju6Gk$uo_bLd()QXF=@&3^Bx3P`y@A#V?7tdnP z_jkNGd~xL1M~^+x-}_fbzxCMh9Y=;geeCz%Kh}Tc@Jjkyx?yA_rG!g&vC;r zHePvu{{U^A*N)ydeqr_Soop+A!P;@-%jdNt_w~}&mh;Pxyo4=0!7D@m_}hIiy`>I* zf|)SLj+p8@u%R@S`<}DL*mzj04o$Av_ub|BSDdGUv;HZ!I%pd`&KrR<{jnf_{V9LY z4rjbaeh`c}y}$0~r)x*F%WHeW!^jz%(s%81j=7IG%jWzm?hmfheiV59-j?y6J-N)4 zntQ9={o}y9_f)W{V6Di#g+KehZoBu})>Xbfu+=Xvy(agJr~No6^}akjx6b)pzjQQL%ROlH zZoz{;wNHH__%3_!_iVS?7v}Qx;3tCWD_Zp~XKgU!U2UxN-R+gpeTNMG+y|;t`tAGN zWAe}*@!-FY*7-y*wfG}}d!-gc4}OEO;+c|nz;*96HjW3S8;t5Lj`lD8wb$?4N6)=+ zE~skSzWA|k%LO*-J*my@!>hT|Rv|IeOs~>f4J#(k~ z;TwN9jy_K-;D2UdZ_UD#l?E-ic{XeXm}G>(cG)IOI};&^lG)V*+cg8C2rN@&7}iE) zcn^~a78I(QxfbpuYy~9yI8wHnSB7hn7r^;O{9GE&Dqdib%Y8P;i+H1OX4`jc<}U*CP1FB&BsfPDoE75^=n zT;djC#SU7gyh@&2GFv!;|8)Gf-Rv4IjDy_(3h%^rb+|lWF7C_VzsveA8!l|O>C3#O zp!J4f$P&misXPlCx&-r~3kEeZqm;E}V7MAu2INqeopm@^wR-JPu*zBMfZ))#sBej9 zuC`TgE%<|QdKL|?HoLru5-e+5djtj~f+l@kgR8;ED5^7F4PKKwp)1>*(S8_A9-TrN zyr!VTAe?bG`xALYtm#VGOt&(lm9_G))*}zPWy@5(ayNZ04}W(|-Y6TdgEwBzfzm!b z?W${W&Td&Nt{%=6dq%0@JftP#zCMw&SHLjd55K0mOYe2%o}<($=&p(zY|$t3@{ERy zPAVStjIr7Ot{*&=mv2Gv>R>t7yX$Ou#J(dqtWz`#o?_J)$czA`D$1tXYpq_ly*EF- zOD``kBYfus)@rBgGq9Ck`_1?NWY4*4-@_^CWiCB{o`0Bn3uGkt4ux%YH;9{BVXlxb z9MNVA-Dq0sl1X)PF}#oi=4D^)$Hy7!vEDV+!a@AE9gLR6qb8FhbQm6S5@K|3c4?p7 z*EMW*!T*`b7xL5x!{+L>KI<}S%i)4&uToc`2m6%154om3zS;(n&bHUs<|>PI*q{@5 zT90EXvsw>zm^!$+FoG_dm_wgUIN^E+?b|1#*W9v)v5pfdgI3`n>oqjr6!!EZ9|sHu-pe%(Z>;EncT1TEbdc6 zSpNg^fO?zUFW+Juf*W&08$g@(?$V5&F1rYS!sy56iG0_LMlOj245GTlz|(uiK6Kn6 zjEc<%%X;r_zw3^}+8wg}WgQ%1w_G)5$nYMJ^+MGP3%WPlyJmZBwAWhPBikN4>2)PT zE9=IQnoM4Ua^~s;X@VN6Iestee=k9t<^dYbibRtD)`ZB-+b`>$tDW;=nmT9jsHai8Mple$znZ2&+nu{@KL;08(xtpCcQhx}n*i+3> zg3};7muIxi8>ET+;(i%d2f$jCpH(DDqjU5V^96H2X`-qaI2H*oB@>v;;B}^gQGsr$ z<;q^IU%_k|nkxIQAG09N166}Qv7yW$wHeQF%Q)4P3=QoXIGUj9ilw-RGy;gc-Yo_M z@E(E{vT6=8bU!3y26q^up-tzgcBwbY?$EX*^SL@d=m1K&4OpGM*n`AKHD1G?+K#=W%NajDpR#p$n#} zyHR37E6SBEw{3O|_R)sczr04D3;FEQSrh%R^m!Gcfu2W{I&&H+0R3Pk;vu|3wY(y$ zJ})CIVw0KF7vxmUxQQ$iRW~rupO>}XH6VrJCPJex*s{@_+Pz*qO=EUW$M*qEX8GDT zzpMMOHn^cXf7HL{BSZGGr{6xS zy>;ub|H!~y;Zd#Mu}%a>J~A}h?OZu@eK0c+yf8jB^6B2))qC-UbM=vr^gsRbS?zm% zY5UmJUH0ld>mS$bEB%j$_+stLtKU0Qx@m7|oBvs_ch9=VwP)7`x7@h@>wC61zqsuD zv-oOYo8Ld%GdS71=9jN{ru201=G9xAZGBIl8k_9X_u8{p-!!NF!CSextFQF;xS#!4 z|M};=?(tIhUgwe3H#wt|H|E|Ncslrc$s6hJ-}9=y`?j&*1#2h__B{9(+IZ>mXU1Of z_xAjn^Qq8y!M$m(-t%VP;hvlRLVL?Q$eOEXi?b;=r@gSNd+%-43w!mUJ$rA{?%VNP zu&I04|E%V2GUl}B$AU4~@Q0n7a_1j)uMgfq!+3B0(wz3JwY&5O!G$qx=#6go{15Qe z%(h@=&(ww5RPXM4e|~V+m44rP?@@@L+h_21dzTzRkcP-!ffx$BGix}iP#6WX&62DeBw|e7tn$75P2CH#RlXf9%BG z!#8bv%Kq^NG{fInQ)9gY7rqjVK6}m9jr&imJG}1JoO6|a;U4SV+|S)I6OC}NIZkI4 z3szNcp$4=Tawgy2wMr&SYYuvZ3}d7uJuFWyp2S1}pzwBivg@m*!gzTAO6CYRw6>dz zz4B0bXfs#@q@V%B&Z*Pt^XdyeEMxq?8H8%g3p1DkU>^@p_|9l)!g2OM3oh!*z}V`# zx@2En%970`_bJ;jS2(t_#>OnP)&%r7qA(NLW@;OO0J6EU6Eo2x>LXQHTaE%N*&cPv z{g{kCL%J1ue9(d!KhsYa-Uhu*3fJ8XH;D|a+4Ayv!C_*Hd zgy7lq<0><7%P^af$2DvQYYgLSI!v%7Wc)$gXL1t;epMKM(vj`L!SX(IFi_;`?r~T` zkH~%3ICI)0+01LkdqI{o?R8M%`z*4%J|hpjH#T+rIrU3dik{3IhNmVD8U}hJ< zl9WV=VH78AYybi!TJhPm;`;n?|Cj(tQFWY3QQW52>p8G$C#idFAVqF`ZDZf}9e}c& zq@Uh>Zb&Y7=kNQz&-*;j@A>mSQxGGJx#*cCw-8nS#Og<2`C1YtECwXIBO=_#CG zn!0crXv@>li3#5olIgMpZ&Is2O_Sn!W&-TTq}QdH4yd@O2dT;=EE>}*Oqh4Q_FB`T~+;9#kqU-6Cj5cX*&M$Oef8BO|~LN*qUSx2v{yZT@BYvVmAmF>VXU51!eANPm6lUtu=N)~y)xs&&m|C4?>Tuq2+XMuB0pi^#qeot>y)j4h*GQLY=pTilc?IJ+;RT)Wf)eq^HGl zkHjLB?iMnk)E&4SxYy006HCp>AvH43J@c18_T|@#ZQB(1sz3TlD`=fHPmj8lvqrwL zYwS|t$mv7Q<*DY$(Zq>YebLCCov1uCG;*aiRMVR{=2qO%fmdc=z!oQ+aQLOxdh1_}ia?Z) z6h+?$gwgnz;k13!2phKr8~B37lCf*1(jWl($$YVEeQf8uv8EgUX}^0Uw-mR`U}t9M z3(Y%V4~(m_?`M==e=WCB@t2`>aIXQi%ij)WChs-O!lnKr`mr?9QI9UP|t0 zdYSoKOz#nAhdTF)Xe(=I zIE5ThKT%8^1Pe$tEUig`i5kPu(ERQ$>FUW$BEJ@J-P&zJ>Lt-|Mk>M=zNLx6>xD$p z9o{tbq%higy>(a!&_&3-If}f*a3n`FE;^s(#&;S*jLm#`NCU&zw;uU5BJ=M|yX}KxQQ>vLYm3#(j`_ zk))!^6_AL;zVYu=F1zZB_y>B_3*xYSsv;?QwudYP+&ky%mF!{@JzB|_N{|w=;qiW%?_K=C?{|&gzs=g*9?lLbqQdi}i>IrIv($!!1|)S0ap59> zK=Ly_o(3)|k~1t72i+vOKJ7PsJh<3T_ z;ceB~rXn006#Ba}l8RA@^#cPpsVFf=EZsd4bLh(X$c}7JJEk5}7axYKvmP1#yMb4% z!!V;0(L`&cwHN2AGF3eU1tou?TlFa~_UC_;hyvfLM55b7ls-D>m=1!v17(D`1y8d! zcq#97m}1cs(!(QgdEyP&CSXr}HltXhF(lkusl|vn!sAKm-1&5Ka>8xm04l%v(|_yl z`I~?DA8ZrQH!4KdJMW9nh*SB>W6jUUtB$egmqykmp3n8j1MBW$JpWic z9G^%|no~|L`1lOwjd3Z&w3)7yo{3Ma7(G*tSz-S-`=Z*R4%F)lq&cd)+dTGsBHJa>h zIr0(xv`Gxvn5wPSJN8cR>0drDB%iTYJ_CEIac0%nJ3V0Eb>KveD2#I_&lv741-}!2 zre|+nK4f6;SiXOqhVJOePmR#?p2}f|o(p;+n>5mMKsISYoa{a9?D&k6@0s3{cDynF z*uw9`mz@0d!_J+qeEO01#g!AsuFg;0ap$FhA$k5&apivQGi5yGGa?_U99@gQx?)^6 zzm>mK8JdZY*mvhwoyJ2IhH_%XX!zF}Smm}~erwI=cl_A<;x~r;k5ryww}@s+FU8L4 zjwUBp#NLloc=~6A=%H1F6?-Z_W!%}U@o;+w5BFtPD<@`R$9}Jm{W%~0s(f->T941H z_Ixn!z2*BS9%;mn^)etcYyMO58Rw0dtL_RXL~(lTeenq~*$Usw*^a@ur5&$8j3;Wz z{I~M%rM=Zk>Ghnu+Ot=lJh3`(E;&>&TN7fkQhFobTJ7n{Pa6-?Yxg6SEAfOlT=9Q0 zf9b%9na2Eu_Zjo&(+cV!KdCH|1b6TXSQc!V6^~2 zbHKU8()nvp8H>bmGQ`N<0SW@YVWAYfcETL^7V!sh#+K(Rlu4Ud75tT;PWl;@6umam zXjZoth?tCMiE?!b&J_iQ0t*}F+fC#?hL;? ziU_$8o~_i&HBV$Ab#pCfh9{p|R#%Yc8r4AQji<^iJ>exTDdyd>HVxdX1puiKi2%L? z@;RDE6H_IYrr%2-9(1b#BZSt#?aIpc6amsX1;Ye5zZl3K7vjJ&T*on5vtVk|Vo}}_ znpX+_=`#I*Lo_l8;PSeSgqf+j*d(Pw$#G?g=L0BMO@6M2`_O7@JYv>3AA+uMJ+0tgjNEC-xgMrl` zr0xCEMUT8bjFk_@LhtTMtwh!bAWaG9MfX@84nn&pGNXyqF|p9zqfJH_gdXOUHjvEr zwJ>OV)SObV>$XOx7~LsvUJ7goWUU&sQwW^U1I#oAPdd4`|M=)zEGnhmV)Aw-#JZ%Q zp0@!Ujds9(M?%{cLkw-AQ<~UPwJ})qRAo77=+CQ3a6ULc;jT6(QRMa)zVN;O^&3k+ z@z>}ET*9o!YDGEDJF%n2{O&JYWJyX&xEi$SRPaF)N}1fI8;*u8x>-;)rJIapV%Y~N z;npytq;m!{t|9v@)ogH6&8B2qEv(-pn-ANJDiF#Q>)~zmN z0~3ONx`mW#*pn&_nHF;dgU6oCi^ZJm|LhWHou`m)N;p1#lyD=nLyu!_MZ2~LcM*n@ z5tO_4{l)Jc+WdLRv~v3)%WaX)(*ha2N}29b%5Z71VN3`I!x1+)LwVPC!Q2!eT`XKo*=_o-vfJX1dS#wvA&S*r zizW(}NXvUvJ$#dPQ6&nZTFYsrfGOwcxvEWv=$0hjS}xzKCO4^)w`H)7UpaJtIYQc#$WvO z^~*nZ(}rEdKaiI|w>$54#z<8-pt6e${emlg-%1=+S;sR2WX&cC9-AGRi+WkZJJPj+ zeYX$@EC$5Od=~;g?_@kzk1c|$XfWNt>z8+9SzgqV;hjc*Pc|5GH9wLZoLG+084Rd+ zgp`FQDF+l~5QgUr*=i#@Ij1rMVtfa4!%bWXZB*)xQ3)8JqCzWP7on0GBr98On%768 zplVvXsNo{?m~Ywz2200*)8s~rzSVhv4qLuzxKmd4m_FCaqO^=4Bwsui5ws(0WcJ3X z(d?XS1}wazJ?KMZ8}OX1eBx zZ!}sF>1j8=aO|&Kw)K;N_!~AKe_VQiFE=*?<<^E1Y-@x4((RoiH+O9B|C|1kZn3|% zS^DPn)^EP&)vMcgp3`yWHaSg}(XyEbK7CV^;dg&acY%7?A3{JpmUNnL>9RukKU?=Z zole(Oa%wtE5{%es2L(F_2=|fmGuCH;sfU`L)@5`xFwC<8rQkV&TerssGX6}hx7mUIwVV=G6sunf- z*sroT*8xJc?T>!`yB|BS`6u7ozM%ESfd}5` zd3-^fd_sJzSNwUeF|_A};FR?bE9=G|4(&Smr1(I7TM@JTmJ3cU0c-wg^+Ec$KcIZ^i5Jjt9oB|M=MTi@_fjUwrHV{jI{A@yof{2gLQk$zPJa{MeXY zJSg6?puYTpvFkrJHvj&QjX94LgYOK7-+89>@*lJwzh*x)J<>DypU2GF{SA70`@(ba zc>eyA(--@C21mw*X2$8~cifY4-^u3k`9=T4%*@cq+12yM^t*O%?8e0xjSU?-Fm$Lg z^!eFu67r39M<0#y_2$JL@%`+#|2KidZFl&`_Q|;adWz=X+Y&$W4%M)9qSE#IUjsKAN5AP#Yz6=Yk$;O-hHlNJMSNT zbKm1@&ou9NU`U?d|Knq)8hxYReK2_|>TSJjKa{`!&?kz&Ft*yWSe$VGS?GTM*Z;+z zJ>UM7x3{wo=N_n871up9U|bi%7V(~iQOu7W?xFjPHDOo{NAJ^jWOK$hN7k&i5e%xX zoWfkXj!UL(y|Au$;-Ld0aa81&)#X$}W|{n@t+&>@&1rs$23{@!5J_Ucap;(6*duws z*#Z@o8;7tM%UgR$<4Rb?1vr|*PBk;Ucg{)MI9B_orfy2BVFs> zj!GYGpVvo%y!FJ`wRqIyHxHk{WuCZCj5WRIa--sg&#t_X4SvY=+Z=oVtH!)uTk0vW z3|(~;N%dToB|7>7{y)VC(Jx# z%{NE$!3Xj6t$WW<&ctwyOXfj{+qT}?(HnA-n0IzuGDm`u){ZCKE;CO)u$W(E2P69{ zxUgT-1T;#mJra0sO-o@PbZ`^L)>E^*73dmG)vU^K-%H!;L zN6X$kU;e-Oj}HCW{o37k-qg*C@X&eeD)&XIQ{KE)j^JEzw;PnO0aJ4W6!y)BPP(75<5 zwtK+M7_S7nSSqe&GMpi2Rva4dVe85rGn~IO^l5c5(tA-uLrACRRTO-s<6h@J^ z)QIJn0i9=c7=b%MAp&36X&6x^5m=#abu@&!bSK@%r88&iv85Sv60(Vaa`37UiKmY! z)}FRTMYTqJApC%)@WvN4$~n@;bcnvTME7h?@x$mqxuPmP)YoYv51BEZ6C^|F0xFhm z+eyE8nZ(lPRN=wTLPN<5Vv4q~z7?pR8XJQ67|U@RB9=HtD07%u>ht#qotWX5L9>>= zl(Y62?(8#4;h!r3VWm*uWDmq%(d7p|xyYhxzz%bxE$c{g;LX3Y|5JnNt6yn{P;#>Z z#(>E+Cn+ZZ2i;D;G0kKNpTuT%sCanz4$_j0wZ*_zdI6I^<&5B6?67qMpF>>x!!0kN zpsf@&&(Ut~O`j^~Lm(gPZQn9I`osAZ$luL$XZo>ynr(YD=0`Un3#YORx=H_)b@PUd zIDy>lb7T4c4_^Jx=BG9v{yW?Im`<2H1BG%x{TK4Wv!aEKaM&J^)&FQETqT~+5{IfBeq?)OBR&S-5*5;X ztIeMmnj3CtK z&B!nA6h^dD1duiKvZXyW)>R6#$qCAU8Vh$02J|h*RekfEulr`d9^`G0$V~UD5fY!V zn7Z|RsMg)kS8G*M1cFL_o*Ix;?*!S9=(F7y6WX01*e)2#0ez?bZ}htkn9>_%HpS*Y z`}se6^!86Swkg2`EHOqb4G5HO(MjF_g!F6*H3_34Dwc0Aoa&A%P(|9<56somZ2Gj^0PNcLp(lQcW zsOF2#sirKoZK;WQUf4>NX|5{C2(;)X?Z?#DyNO8+VBZUJXhk$+brADI{PbwnN8FVF&?I9!VS#~yMMUo|wBsFS9!%&J6#hf`>dG#;fJhQkl zAqR`iqD&SBmK-C>-i3kYP0m)`!n$icusTsQlAL1ZOwp&?mf3}wXTkY~5V6gWwiyEm ztuexA55~`B`_}0OO3T(DbI1~nSlVHd;pokrPJw%65x2x?)oQ91Ri{JEr$rHyaizlO zxv?70*%^v61$Tvqi~+a9(iA5)Vn^vu%jj5Rw&jo6K@ajt3LbA{ReBV7eMrP}XUar+PE73F{S&P!9vS&RGg6t9Gj2sY$1#((a8j+9SxOLx^kFJv5>EHppUJl zsRwYqCESeB8aFE?--q|8XDh6GcmV|*QSdD-7$Ob#gj%UpYBWkU5(RIiXrBuJPKY1r z0j-&nwAf?a&sfC_0%e!#E$8Y&BUyex>K~IUVP{XZ&3<2%YxOU;G$$cP3XcN;CB?6Y ztg52yku@t?aB;qw3sq0{YTV_alm!;Np~sqa3b7fRYhKgVC#YQ4=%jC?5__)J=Vz^0 zr8O0sY$RO)7dU#e+LW?1KV>dl%b7`-%(=+BSS5bj%!fGLNMyDjHIwK-pd3?UQe0Z9 zlFxO=Stg0UMEU8j-2e7Z^lx7OGdc8Z&^c?-UMa!0$rCh+!@YJ8;Bho#gd5t#rhP zGC^=>dvrUhd4Z0PlIEj?P~E1|r}fJymnSFAU|3Jo*leJ@YZErRJdJ7r6w^b^qF9x> ztKm9l=6bsE2_{(LsU&-ciK49YKnPLNb91`CQ~`JPFwjbDQ3a`wifodzl6*qpN|O&t zQ+UJk+$f+{v_7X=om7MmO%&~%t z_uNcCSz)pS(TofV<|xdoF?Q(yRFlGPh4D&x8+RL{peQ3uHAan{#STj)wsAjdd=e!J>FUYG)%?bX?Una>YE#)*Q?Wi<7Ny7AN^Q?S;p@-p zS6OCf8?0$CqeB!xnPXl3Jj(<9Ntts-m4$z8bub>t6v!_J=Ib8mdu5%>NMQ{MFw0xg zVwkf#Z7aK0pH`KchXl@S{^IKAp4C40eJ)P7K4h|^g1g1YdR4LvQ$fz{2F;RlkR2l| z?sEDVb4!z~F1-ZZU9ksCS+^AhM7FC36yb23<^jH~5gf<9=NRqaIi-pmN6KXTG|-SP zM;)dr{8D%JunZKhnIp(cz#<|t5F-QR{ZdrY0VTzzykmx`ZE1sc)rnq-DvFSBPZ>w5 zkjt5%1Zgm7MrK%eRIrQ$@Q+Gih9RN#C}fzJpA}C{C;`D^xr6}`dP6U@as<}MS6N_2 zmb2EW{1Z7QNRa_7v*&Oo6ba)@)8u$ii#}RVJk!+4C&h50^RDO!{m4XoclC5xBFX7i z$ZW}x?x2n3|9&l2rEc<5{2Mm>sFA!hwypm-SG{Vf0ioa4L>KyFnw1W=l;`5N6_a z1@!wBhED@RQcOf-3uQ}nlt>_8yqpdu7oOf!l9=Zdz78Ej;(4#R6xe3S>J^X(1B<9o z<~vB$CD@VmShIp`;w=%33&t;sXh6T#O$BS24ggmqV7TnFnrsZuRYbIG>0it?WOXbl z?rOf#Vo)?0v z5xGo`y`&GDuNwbhzxtK`l93Ngx3ZiO4O0WuX00QkWur$ujeQ6_LBR}!reaSb2tgrA z$du?d0E&TNYA|@BTWI9dcllB*C^&m07XV8t1tEpJFh{^6R{J$}diu*869C;6M%>b8 zJk9pBKCLe+t2u*B=E*NsgY?XR$H7fHZD5YKC!D@`L5>jfUJqE$YauBNUPGt6+*#I& zS|DkbHi6H+HaU8N83JTrE;_U+@Hz(6g=~=_wlX!3`#@GKYtI~E5}jwRdL5G#W6gAj zyap;Wz;EeXDIDOuYaW%%&08>An5i|MqiVe9yUsZD*r$#Z|x%R-D~K z3dfvQNW->CVPB%e!Q5Cl*aT(B$)r%*nYcHdr6{c9XvdQ5LI@+mriCMM0A>ALlFQmo z(Fwy^2pihS3rl7CJ(mq*tnP%_uLKFjkh9Couu3Bo+PV@a0D*=s{3P1LphmlJ9`OE_ zVwTmoN8`yLcIi%jycw;YG1Mz`gIfKj<5h;yl0K|K#szZ6Z<2O##Po7n7}#M_GlQpW zC@^udwR3E(3Zzl(dMkD{Y~1pW?CIfIWyo2{Tfs5JZH%6x6){4dZZ7(QMYlRKit9CH zSwK=H*DQ5;z8m;zA?VhkTwDmvb<1Z3w3z@=ygO&59&8pIx2c%1U;Km_y5~*9V;=gk ztO47v+n)NzsOH>FpCu4!N@cy5EYx?t>J3p7wh!M=fB$ii7qlj^HmwQ)5S z@?Rax)ywF7JRCZbPc;Hb5n&l3Csa>gH>}u2yFI5qr&{F3#^8K~=?&f#3QwmYe!*ci zXo7JtW)xn}m&N0kfNQc4vXm;=Du`uw#5G$G(0qZ+O>S6Bj(-D ztwVmnZ3@Lji}*?&E4`@qU9&x3Z)hXl6wBS2feaOK(E)V_9$m1er&{0pt|D&MQ(APso0-HYOk#PuNYS{bpD(|2Ouq_PONJXseqI|KRHT$Mp z@yc>T50xY=I2P!>(Y1yprIQ^}$XEB^=d$*>YJxqv&LVWJTH$35f@Jmtaohd3X;s8a zgRELYdrN9iClNO6o!zha=c{Jbv1Il8f0SX)=2YtO=-oJmMBR>^Vb4JEFvYD zHP$|&D6!c&7wAPTlogVxrC>Yi_yO_)b{sLfAI)9WY)gA?B?*{=3U$E)C8R!45DLVz zUgS}^$-HfrLtAr@<>jfoJz_^>%vBQIoDY3hqQN!%VhOZ9tV*F`(?YsFv`q zl@j&VnoY@*aHY_KU8)6@ESBB))-h;n7D_GOlS&FxmB}n;WC))H&F+eyg`&I@gFA!s zv%7hR*C$NRm#_>FLbkIrGD=I`$7U&>5$Efxj66R9p-SEoS-%oU9^d?hfBY+c_K!Zx zUD8b`mVmDx>7dz(ut1y)R{^z#fFF?3ht1MsIV7Q#_2gyrxh;S^-Qc?z4-ZG=S?LCo zgJZQOKLm1Ks^ADrSmBPq(>_&fpC@%LPZCWJ)okfaa<#94L=2td5>9(W zE71<9h|x9AowhfI%IZQ9jBo(o6su{U%quluOZz@sQ||tIzxWOP_m;QMl{aI0!7z?S zZ+L+04+m}Oy-}p>lwWxs^H?G}S%6xe#mPqcDG|CtuL4!bIVM4{Vi|nUSx%5!QRjf% z*keQqgpem~Z8i1{U}!}?sN2Lmq8o*ZfS?Rh)GP7BJZ+Tccy?ejvcXmZ;0X*aroY7*kZOUfjt=QL`e3Bg+^4A35{aU|`TJKQThAA=0PA~*E# zbU|~2y(Nx&T1e-VB3PRLnA=q^%?A zCvN}`UDf4dI2?0!jBD!VoQ6V7MMf+=zbOLYbDB_^46~eP3T7Q&#r88;7R?nXHU*?3 zPvmxT+-)s#I1NuSkITYHTNiVTJ76V#>*2q6yJz#BtLY9-(Je!7TAI~1qS!WAkj>KQ zoBU=Q+{co4$L0W6dZuPS!eiDM|By#E^pPl`X}~C-t96wIuwjoE`k0|yid0k~A0e60 z2T6OH@US-XR3zb=9xa?hDGJ_f?`TToFXg&%HCP&^wZl`y3cj|OhEse`x-p<@Zw`>G z2{?nTfYO&r53nPdmV~Spds%lF?c|W;CBeTSoy!QfzyJ8BUcL2G2jH}HvknQMx?;y9 zOiB>YCVyATph!Cs=|yip-9Z-r(6%2&8uo@Xu=j zgUCo45yK94LiE9~@`Z@pN-%>g)#nadjkG2i2JS9G~6@`>EU zK%pvFeq0JMYD(~_uYG(+=HPd?$IDW^_Q1<)I2jy`d-6EWc4$BVt+}h6c2h}|Zo|;i zqhLRIl9%#=B5X@TxLVo~TS(OrT3S(+$C+uC{301U6zLwmamS*xk<(j9&xljj*zzzOq0b|#3(IGx~Rj~gTuxD8F6)6RoId9%z`?tSzNKCZ^A))~zoyFepmAH=Hk{o)%|&%yT(R zHlP*Pg6xr;d#UzKZ;N0Tay((Nbjs0aC6q@ZH$4t)w0&QP1$5bd*}p&@sI~wIwAdQd z@ei>B{)qX{5`tnX>4W4?d7^S9r(9u7xG-(o7Tayua!6!*6eI8h#GP!(yd%`27H-MV z^nr@cy(_~m0EGt&Dc2&K+!!>Xjw@QnNv;F|6yTk&3zJ{@9rcrcOWsp%bezmyYztbi zNd}a%Uv^H8%=T7TO~1$&<&uV}%fT>(umY_}M`gcc>;-~svp=k;H|Zp2t4&Vk_GYYf z@6iO!d}ovXNhmLO$*0n8OceRQS>-z(4o`KwjKI@_?o`<&*^s%CwhDZU#~A&?bGfxN zuldRzE3j!GmcN{)Qj&2%`cKsBs1J_b+0;HY3FM<7sw4OKm_8h`aWPaZ)&$p>a?EnM;X9LC0^{;m zwiI1Wuh~2eL8UD=J;!a2VTP0|e3?IrV&QlnPol4$ymR*fl{tdpK!1o1ag-LKFttE_ zsBRy4#6Luw@jh`e;e0e-t1{TWyD@r5}&cXc} z;DcB9UDbF2liWmi_)SAqN})tA)Pqjr_}r3_6uPL8acDt)r^Al4uW*%i}4IRcU^n(W7?#_8l5 z$&>YXn_1GC*HAf4ZWdo?j1)nNIa8oxq1+9j@Xx67D~A`h1n2g{xhO9cq4W=dJ`o`D zG@i|Ew&Iop>4homnv-pYJtT7rQvy4whqiDTEy{SdR3%bGFa>c8b%!w*bH_PE9!-(c zzM)(B?|t>(|KP=2U%h~Ok{dl_E8CoFIk@8(rGOn=fMilUL&K-L#Q^D0DbMPuy0ZwO z0p2C`tc+lm&?tGYfEng{yh%sH6yhebTQ@h53tuf?Eu-$X+1zSlDrspuX?k$~5(YC%+yWqs-fb0^|~ z6xcw@6ayPWv7|po!Nrn(RAZv})oYlUg(h+$u!$dyvy{Iu5q;hk7-p4-IfVRBZ(QKD zv#Uv2pQpk|!Wci9i%N;uJYdS_F5VLbiBUhGm2PP`S(eJPnx?3xHO@4%>XP~&pfc*M zHj{E%M14umhm?Y`-c7xQr}N}yco{ENdot90BQ_Ka)8zs6oR3C1jnuQqvvvlxd@QlVpxs92WwYGy`QZHD<1{N%s=^CP*<-m_bzk<>AqLwix0Mp8(W!f)1% z?B0$Z>Sd4c_7*uoaSjlXk;2^`&;q==_`j8F-TF(_0IAni)JnJntXg0W#!(>VD<>WH zl!;boM>!BMfj!zXSxq3_dbjqxzR(pGa8Xlsx^ZjCt?j4&K$lTC5QR)5=>XSf;0b1z zANf{$pEe#-d#?awFM?!tapo&5>v%kMP>TY^7JIrH>Ocm!VRTnvrEc8ru&hXbxnqH_ z;9Yj{mWB3X`i=9VoK3{yLzvsQ#9pRZf7GcN(J+*Ij9Gkz*WoTnJk!t@eTG#RQK^a% zQ)(aR2t|*|{ndDL8VCE6xx#07J!t)!HqI+)K0zgxGsL?H#VZs*sbp`I3!@&d2J@xx zyD`O}dYJ~Zs_m*q@BxvloAp<+%wrZ0PtsYTOULAaf+;31!)t5j{^I}qL-qaPd$wuw zNE?P)QrJU!Xubdij5Q`)Sddk~$VHiA7CoX4blOb(8HGp?E8GrN7Yb(zM+#$B7nSH7 ztCOb~QBej@tPFt|W^(B3l;F-5+ZP$#>lL+50xNdIhcieAgP4vn#X>Nn3cpQ_srOo05S2eTend^tZSWB%deN;Y#Q}3b#a(+ z97P^3Hn897p)1;&K}{*_QAF|k#=m>&lbb*I&NiKlUD`oc|80A-8C=e{@%7X4$8XN+BqY$ z{kcawH<>xO_36m(4~k89YGYL!%KQ^;`pUg?nGb#X%H(Sov?nJw%lB-$lbhlD_}sXl zy(%&vwKttf8g)?U=e9rFhV&HG*UN$>F7i9KdygZb7xbwFsmo9D&O)f28b~7JczU*W^dT}G+V`*~ZQ0Kvw z%Rcb?V{=C(d6o2Go`!9$&A=@B1SmY4W9r}uVNUd!Lgzs`O7lk-m> zxibH>v+2fj+`DU^{BV8lzpwM$r2KeT-#785Te=)}o(uGYX6Mj5ANK{D;qp=tu=8vn z9=u3P(vOdH9!&I)aN?5}FFSmk`}6Pb`|jrSZ*0$UQ({>~H zT}w|qbsR+@bHbcCd@)|zyx!a})LxBilo@c+J?g#AmC(yL@L@w8QpcXIRP!_kr9x?- z+MIr$6j$cKSRcx`bGlE3d1CKTYiSqlTS7}CFnh8?>Vq_SLV^eC6z4C8TII^=>Z%m! zydKec`iS^w>}l?trqHP1O8lCGk~Nl+xz5TQ5x2G&v144Zp@xgK$1leJfc_EghsqjK z-KSZXJx7~-9x$gvl%f_t9WDj50aU5_GW@v0kGZUu(;cv#Cfn1CA>X}6kCN^7Jb|x_ z{HeLOzWDP$`CIK@`GcDVLQr)I{F8|cD1l@PrYS=18Mn87`Ld%ZGlrBV@SotXr#mQ= zPR!K+>rO9;Ns2t00mo%7rc2U;CGi|?jfgavGJff9*U-V8E0(?>gaob#P@Zhz4aUUW z{$4`t(rsxEGMe7ZJOl)r(HQm~&c;v-De7o^@h4rU(otBSwxMR#X8H7xp6F%n&q4l3|%O3LuV;F*tFVZ zWylhLd|vIy%0t$9F4hWrqNMJCQ80#qhI<^*`Fs{f-`2XxAPQKWY9Z$<&=P!QsXlr% z#91EKhqysQQiI?9or`N=jYcPkuSijjQua6~WbnF)jt%81;Oux@@9A8euRq*HffTBz z@uvqyU~y<+R;G)ptP0l0=L=Jj8C|Gf%FL^4-Cc*X#f<#fQs?_mwRqazEV;DNGnDe0 zhBj!w1`E`=(L8ST8%BLkW^eW-%dW*dVO~8q36spJ&rA0ubyCw6q_0yKWpM%vvwDFV zUm2D|4(K#k8-IpaQ@;9%sLZ=Sne;gQ!DPokBhnyhf+wgrjJjpElOHu62dt#_zW1Mg z>j$6FKOp6b+$cRnFllg=DKw-f#v-%>BbJSRYOVoMkpjYkR)fnh&xEZkmK9s+H%=wl zWpaKRz^)bQ8x$@O`{l8L7-aN4Vjkm7vs4+biDQ+Mt`j(u2dW`~;9{85n$=1-BThYn zWd=Kz>9h4c`c*MQ?8iTVKavs!@_nQt{Rz7-qbQWcq4hNLB;p z8`ebjXy;-K8CUAAIf8dfQn4OnK}J*-(Z{L3TsJ$%AFcaz~Q0M zS-UadxIzDDQxxri%=mmtN!LDgNsYztncdE*sVrqoIu_+>rc;-6%6zr$&Gx8=I~J#^ z(}g{oE~unFnw^Yd(a`5JSH)Xh_8fuUypU2kv*H6>>TH-E6n0fYq*Q#e3ab zgXoErUEv61)Ol-2bgUO9locD7%e{J1v`4Qc7eav-V8A@?m>%YIBcyhr6Fw{5&3uwn^u3b}@A1-kr`tL;Yf9dmr4I z+_%$Xg~pL$5(L)tg<#xF2J9oRFT8Zge#{MxBk;(nslRQG?{uch{=OBX{LR20amvF^ z^+Nfi>HEXs1^-;A@^{4-*i2?4vpBywyK~9#RJgt=V1{Yepx(3y5>Zr(`%X@|qf-O6 zGu!;ZhrhS)6R*ATPAs34m_8ONT!inX<*Sw4;hLom!jLYWqG;K+t(}t-mI*H^$|{Cq zbwZlQXg(BV_a33oV|T-wO)FE%_Q~7{Auz60{3|w&D+|%B&_=#X1Cfg?6{}&M^b3@L zwnAo+TLV1E=q3wySh150%w{#Puu*)ax>~432y8u}HT(pHOmYnQS<+TuY2`4Y+>BUU zz^fi(jGyWriQDlP8~UUuk%L^54EWO1GQv`l89!5&exFozJ*2M9SEniPjyxC9GfFh? z=>ZH{Qdc7Ggeoqp%9PbfN>os70)V6BO3vzh5>;74a0I+gG^1e4`<6By``j6S0d?rC z&L$U=g==yzGot6TF_yknj5H#w+{@CNuYTjZcg}3~{OLBE;@un$s@JL$QBr-y>I|q- zDu42f#dWEc?Rsz5MVXMiy6z{2^`GCQyVD-_>T?80klmaAX;xQ-F%pjBc3| z+ONY~Jg?JHAi`GpsS0)SEDq zKcNj8^&Y8f4tIX;s=7G7R9kFNKa&7ZOzA(0VDZKnG?Gf$xCq&5&y3Qr) zbGMv*aA|<7$No%M@74F;VdgI-|f+qWqlx&FYc*{n=#c{e^GU zpH=sV^|0&c?JpF~#m45WgF)4=4qmGMr~2;pC(Zg;*B|Tq@2mD)?#W))k00IqxQUKD zTc)pr_ivhKnRnx*%d_e)bYK)6+^rqYZ(cZE|A$?RrOn3;>y{JxS4rYIcxU!%_C{&* zv3zu4!_<$dH$MJaZ^!SM;?+<+m~icG|FvoT#+Z0Ax3OP6S5!YZ7X51U-pxv>9=21; zf5+yR%*`*1Mdy~Dl=}{}9~@C%eMmjKW8-Yw_wyU?&GzDmtB!6wr0&(f%&RC4_GS;7 zdg-?Dx1t?P-g6Ue`ybeBK2x7kZ~V)8@2!i6(8o*0*u9m!?4(d3UI9|#_k_2)8!*MLZkaCkMsfXI$7N4%7R0(-m(4RA7knhLS~%!!(% zB@_+r076Qr+oY_?B|z$H2h_FAsr=Jm-6#jjS;(9Qwtg_bv?Ka8?9=IJYRLc~eIbAO z3sg3llmZtZRMa@*uIMx!KpTn_?h;$Ol^7)0sMJ9fyYs-^M(6(Cr%kXC04bkYd?v!W zz3kxn1irCH?dcFp=3K7HozEAh5tijmH@C5i@_`0OtS8&BzvyC04zU9rh=QQ}Y+}9r zvrqoT)aGL!yh+XsMhnzDQ(dRb(h4N4s$&h-Ay@rC;R=vMB3iL~XS z_K51&C$o#q6!FqoicY17S8w3=qD-{OQtxM_-I6`rc}%SlGpS#|prRsmw%k#Ml$b78 z)wRo0h~(%3$u5~iUIrLFxOB%xgONVWj`>VOYiRp-ZI0%nXDsZLc@;_-OLxgLNFtwC zB{?_Uolymbt|&S zbLNct*&Kw#ST&dpXANo!8lvc$D6^)Qt(`O9`i(Db{JYL=LQ31ZfXZCP`;Br#QK84t zo{l9A`W_Gno7@Xe0AEr?-IR+Jv=DXVD`05UFB%Wm0as)2rg%l5!Py#`FRy?q65=W= zlCSy76Sya*qh?W#_;7;iDqtq&XAydlp*t@x0{6gNvM4fHGNn`p9hM7y9W4zUTm7b9 z#w520@UnD=7nG0`f+eS+q_F52>kKWx2jt6GObX40WYE+$vnE3$gI*-8W4xpGrA_b8 zNj(S}R8ZJM%zl$xP<|+8o+hQ8Xpjr{qU{h-z(XK?0=q1DgnKBP^MCSpznuBOpWbwu zC{EQdR;xyo+$_Nx#dbdwr$s`kvYuy|B|V1FR}`B}@9xfWeiGc5kc)wwi-k3UD~K%e zK=b?|UduFV^kGv@;Np^r1A!?SA5vn)s6LI6QVx|ov$~Kn8#Okp4#=O`MJiFy*N?+{H1VY zwLH99UpQeNUyhpPldpH-tvO&)9JN`$P&xT*=OX=*mY&br`q5y#wKCoc#vMU1rrm!8@cTKA$vY^&X{rUGcSMPWc=0_a+Xi7u|J6j%sD8v&zjDc z)t;Jgf_Zy#I{Aow#8~)zUft__&twscsPujP0egD7{HD8e;e5XQ`xXBs$G%`X2X`JZ z$M0|!4+Z!64rOycJLMb{Gv+}-?G4O7(hwhe#s6kG_pJv}Y%ltDM`D(>hJJ2JJvXWX zW?Wm`w3QSm3k9PFm z`oj6T=vbl5+cm4}_^;I`JNo(4&|;8+V;@!f)#vnO>GQHtFD~A@zATex0>)cp!Q6@j z52tZA<zm@z0L)SrBdk;LiC;Pe+_v|)oX zbSu^8@!Iw2gQXN8!Q50oUIuvK$g6Y>s8bOjqTZA(u0;K^Q?h&?k4{Ss9#c_>52FxY zt*F17=e0=tcYZc&Uk)s3%%VW#GvydQVb0 zF62c+ZRic4tE4g>x%nt&Igk(#8TdnexsYWqY7EQI*7s=ReR#(P<88SB7%j?Df0@A; zPeBS{Tv;Fab-^2&lx69;JrCshIz-0u@8=AOUUBms?mWKwZXy>uk9I=#K<~={nJaZi zdU|l`EXy*{*C^76m#O%h;6~_48 zRNez&-k~zJ#4`scRopr+q6H!wHQ=cqQO!AZ0KfY-jR!IVnIZK)^J)G-V5po2RlkT> zco&J~B-(Q2q`VA}1tV_GO0E7`iDl1&0Ikef<8sAb-L;fwT$<7_5Y~VG^#ecm)y;40 z+oo`}$7(BO-=Ej_X20F`Rn4d`s1pQt>+9+h>e05KFjnnZ8Yq}mW9g3SeM@2bdkb11hOt60eKzOLU3z^fja z(-+sOdzSS2>w2%gx9h0v z-P%ST55jzVr7-4c-_hdDW=!u6V1tV4W7h3Yn(Pom>J9&j&*0p0M*pCR3t)s4dR~cM z9i8KMxBg<=4Sy~>Qay6T-zci3winytD~%;^P%rI!Y)N?fhZbb z!W^j{SUO<6^{=nK`sZ!G^0oGDN&+SaP5dvrqJ%eVSh{ZvA`75P3b+(-T~S@OfZ_n0 zl9t#dZ5h)i0O|U8W3n*-5dhkc8wlT2>Ini35w;MkOvy)VT_5}ZPd`w&wShZ4S&E+7+73c^y9 zDNB8?Vctkj+ zO7OT_J!4vh}sJQ!9sMPg~_1V41e~zc7qqd zqnjj5%CZX+Z;y_AZ0pPPsi{pUpDwJnNeF{*EDYV$fw%&MKFA#*NC^r^VMyC{$r85G zBcK$%-G3KK5D+|{nc8%6o6gQ9w3deoL^ckn z_w7WmYd<0!?~^{#Q~{b;ic$flo|`S{i25VY#-9oP$ai}p2^;DpDstA`$RiwiIpBHh z0`-L5q(PYYlnwSVU&N<={J;FyKi-^t@g{Mnwuzf+x=T20jG_*y5C4$1MXjhE&sBRE zyNPYu7PH6Q!b0^7_-3(;-M)&0ISm-84fVP9MmqLT)+W(cA5020G*v^xYhxjt`?Gd; zXNcbW5P^rz@#o$l?H+DKX&Fiu^9lofF{C6b>?*9=UT47|RP57UN-5Cg6FG&q;7u2N zQ__wvlkT&tz6)$aaE{v65ca6{0;I($!8}`)voYpjhcWld*yIqGH>#cn;gmb)v(Q$% zN!xy06DEl^mokeFqxH5GA8IekNyR6P?jND;eW~8Nu!U}jECX%u+3i}o%hRxQ$RL>J zNxNbCcaavKfV9}(A?@NJ=@!6BeHUpLbDnzQ9ny9*X!yCZ|ND}%66+K@jKVZ`nT7Ju zHe0-B1mOVZ{@|y+cX$8hy??MxUEZA%7*Mm^aS^b(LQU?VaBYj1jTF5CHZ%cxJ$e(p z^6Fts2kj9FULW4#+m)2K7noluaR)|3w^p=AOw+gY!3A@0K~gt3R1u-oZ#a{Q^yCn* z++y9mK-WGM&PA^7LF#tGxc!7L7r{ZXrM)CxhjC+1kF8r1P}hZSeMTlb!nNT^iCwGD zSDQC!JMj)}2Z>X5H9*$g;mK8P{L|)mEFE*?MNN9(LXc~VSod`2VvmHbxD@rGJHkvC zWmSTjXcvSPDdR3dTVY1LXcmmPG4T$l!JmVOgahBmv#v!vL$sR0>f z@uf+J501JZN(N5ua$N0z2DOW-oiw}M&cf`9Z;1*{qi!J`vWfCM#eh+g)k;8ahgMjj zJd=()hqa29>pJ$>6GU3~*<@hQNcpcMobZ%$!VH{UN6d?QQa(gfog9w;hr4%=ucN&0 z{AcFOIX)5sY$1f=sAkUiNEXK66TKAIrIgGW9bGU63$5e0Gzo*^1i#WWobY1vBTX7~ zMmJ*&cJw3s*lZePaS4#*hjVGV+q6ZNZA>q_I3$~1e%nNGOOoxj;lL8wkPE-}=b1UO z3}oB>yASwi=9%a6eZJ54_I#h)P+@S5^DQ<&dzCf$vZk%LfV9o(qakd`YjfkpUF@hF zYV#+2R-!fI@ER^;(RH!kHnV1azU}V5xW8wu);j{+*;H(hvLQ~vKV{WnqTG! zc*+x=SX2P z`NNzJ4;~a{0@hISNe^c6lojd&uk`qGrbZ#wart)?a59>|%LU8rNKB0exT*qeLwR}< z@aC@`O)iWso|iuV!tFmi^_z_~GFCxnI}PZI)n&`dF^??QX9o)*uw`yBj7%_u&7;^e zfm%$cL^X^qOJC5^SLJ^H9n6v&~$KlNdS@Q(Mh#R@@$f=^uF zV7VdSgdmoov6$36rl?aPBTutcLRAeoQ#qy#d1?!CY~h+z9%4`ASSqDm1*==8obDDq zTQs%I3T~grkseUo%_FG?aCz$KrN?jk;f?isi-IBzLgb{L^}wthtyH_+<+!9e{q~Z` zwLpcd@=c(n4ear0IheQ<9m|o{q--)?AsHG%D5l+*CMhPJZH*f|vKIa|4;zWsO8GQC z&1L=&P5rOQ5-KHCHa?oCBzMP-$A0^H_y7BJT1Iuu-q2p1UiJMRMoNFS##{B_{Q8y+ zoz=_j=iHgY)hlziE={w1yUTtq^IUFbta_z$D@%eq8TdWtJm;M3FLiq7pT-XwJI}e_ zt@gCc^p{@p&Lczqx!iN-%`7s!3ccLTT`b9e?mQxn)wlL|xv`P%k?!ic=I{R<-)Elk znDd@?HuQ{K$Bf|2$?D#g#i+A1je+zJ)z0%CTs4t9T|MpIj8iCgB6qT2fIM&gc{dMN z@5!C~?vYOW!+C+dzUBKHO$=avIDgeJH#IDde2_w~Y&rS2(M)vEM0|YY-9#MAyqteI zuZCn!WKOJ_Ii}^y=f9kPD)W?mVpSTkIJd6)&CF2e$WN=Cs}3Hs?^^Gj_xGG+%v{IG zPbN__{X{h>Ds%F?)y~|(zpy7(osQP=KGXs5C(HHQ+p4$cf4FAp-8uvLcG8?=965JU z^#}I%aJkhFTtw6}-?eXDnz1?5nCZ>xfmMIDhP=1Vy(40Fd*sTIkJYbiuU^@_CI5;^ zA^=bJ(~6gyImDP0n?^oR-O3p?rUlN>CL%U1F=O2CH9!8s*ZykrN1N{$Y#cE%#+=>o zNZ-i5Y8%HPy^nPW>sexP!amX54kzu>yUTm#Pqr+tQ+J0~7HQ zgJ*U>TrPuxIgx?PK=VvlNuI)f+;2}a^kX*lrXwAAGL{B;ALX%`KERAc`iiNM)x=sMSMhPEuGuHcuT{osHHy~Q zJwldeQ&V80czC9zy{p|t>2F$Rq6}tY>(#4%^gGYi2R@L*O7%tE5Z%a^5%aDhh0waJiWmYm>XRB(}87$Iy=Rcfn@%|6UV zAC6<=L@mk;3>alf%?~;_U6?!OBs}(`dro|a0m>{(v;+l%YY8;DNlESnH zOg;&fASF-F4)rW>r$uUwAOz}JSyl%8b<1`F1p%;O+3~ZJsS*RAP@q0B@5zr)mxOhY zh{>0Lki5j|p(GU2ze!1k9iSb7r3SEkWBGgfkhCj#St@*UL-Wns8cBp&p^{BI*iR#! zBTy^b-P~^4FS0Gc%SdS^yumPjkqufUV%MTeq7Qh`e+%Dk*WsyI}aPw^o_+Ue77{e!JHO*S`uu<9l(3Y2-XIU=P=?IME z_%rpgmdG=VpU^TnaOl}z;_9!!28PnpKmln5*oWN3{bujn8RmXGnZ{)c*lTL1rg@8{ zy{nlYvaI6)K5-p+ZCUJp!to>S-J(hNYEMQGiH!oA0hJKDC;CLBp*Y4iCjpN;Rt*x- ztT+W6{G%^#&fL6HB@v|LCbg~_lh&POsUywow^{S=*=*&sW;g*g$d6L#o>GxHc8po- z9R+`fVXTUmiDk&je4GYv6vx_WYjL&XQ#6g6#(@l-%f#j%zFE7XN})^PhXjSvte1mZ zRPPkKgy{#zZ~%gdQy+5unFsMu6by;NBQt(96a^CX2C?DF9;rsAPJ_mqjW%kaDwp6 zmwpYTr-X-?ZkuHTTFZ1!^pFS~Xf!GS7k#NQ17Qv#3fT!jt#Hjg8o@Yan{DlfZXqxo zdIOMwWA*VfNd`_2q%QP>mkk3I4MDPHPm3fhYtggUA%LF;?H94J% zUbHuuvO+5=iZqc^W%5#tbg`T^^q__@5x6FQN0(2GxqiFUXu3@|xiKR);jZAQn2{FIgv4N-xP!P~^z^K;K z(h;(?ON)9fegFz#0_RWp+t0RGWo4_YCIu+ZV7LvGvUrwp<9vX&2)N9P-sTWa)Oy+4 z{Clt5@uB+OTa=MdV#WVi}8tcixaXyC>Q?e56dr2~Q_8Q7xCbL?gOsGq59R)3n~Abl@KCy~?ilU1gU=x~r5ItqY< z>E=P!>xtl*4yP(cyr7Yp&q_2KV9ggs@W|52mO&Rug+mv_fOzIpJO>kf9~n2(GFmaSc2J9G*T^aAqb3=OG*px-0-g|2R*vjJ>NO4I@3hMh2L2RPA&EE+ zB!o%)-ul}*F2V59_y6gMUuycbX~ih4W+8AZ=xdF9t%v6cGc;?xm$|*8W_H};NEgOC zz3ildcr}rLObXvS}bHwd(YX@ z#5w^yhS;k;7VmV?Ls1_}u|;er?j&`)Q;vKN+{KcnQAJ8c8B;ia+3#-8?2KY&N;rSC zEedsT()--Of4=-vPabeTyO~4^FlalXtq`q^9xZ_~7XFv5>ZGf20@6&javnDub0k6~ zl;LRGLUL|N1lJ=+^Tj9@ME&kGF5wVz)^Y}`Uo)cZIhGKzPnnv0aHM|Z2wMb&2gA@T zm?K#Z2ob`?go*`F2nQi| z>rQ(L*|BC^6h8%l&5GV?o^$PmjCDCEO!ow+sW|LVa`qN9{62O?=Xa9KLhW-$Kqpz? zk9)NYpM=;Tj&;E9UESg%3aZER2tZ<4ySBL6?I2P2OW!De=aZQm*ETk(L$!#V4lh&i zoLXQ{(e~B({mxyR)G(G@NQ0w3E)N&fLJigy*32=QoIse>I6%O`EaX4|pVW92#a7_T zx3o_X%AMhg1Q1Qjm@($0=oaYNvi7@=yOIfg7U)4CK=g2Azhha4S2r&*LIj`PoF2g} zG(ZXONH*4wQqZS#=)xRAU!u*~+HX+4X~Mpu0{(AjhhUpdn|C*LyBaaHCRen$eK?MQW9CjAk&`oNIY8#F_h5;G3azBX)U6O zPSrMQXkAMp2I1X(OskDUo62{eEg)!`q$xv+*}$z6KWETi3Md zvoVQbaj4UC%34^UbjKWw zl6`uj*MTQD_WVV!zO_>S+xMC{^Mekl0Up%Aau~RS7RR1_IJyw~2M{sL0@}yZdRitJ zByBt_A<(Ji?e0@}6j3)&Wh7J5Dn?_0jpv1ptTcu39DD@=x-&4D8q=Q}1UQh&vv6b$ z6+E|LdJ@M&(igR&{MMLss@!Z0HG(bc!`iZ$ld; z5Cn3^#EPr{041^#tVs+F6loF5#F6_Cj8NEs8J-3XhcCr^4N2l0bC05aAtIXQmesY; z1Zpx-`JVKKRYnzawp8Fwl7@T1FzOh*c{#A$#1-H4BS(r*p$;hWML$EbcL`8qIif0e zLhJJtL+@k#@t}IBq}%D2KY-0N+~tCCY%O#uTI{yK@!@dwY6MKnTDu#R2BKQ4(-brY z<+9=r?}aS$?hn2Bh5I_|r>|EX1QrpPU(X(s{S{(Ud9)WyfOu3$%oC)E!86Qo(26br zb{XLPHbOQ4Uw+`mLIhnQLT(zRV?ckqB;hl`6(*s+@#S z3}VzFb^V4vx_DFe`Co2KqnLTgVxXhO_#Bf$81r1c)_4=i6!@zUf28Lr2L-xBIPE5 z52kRMFAoT*R|eIcFxj-8fEj}1Phj3Cj|YbP$+y^~fB;6!2Z~D(V&apQE$5{aQ%E`a zm}HeI5vjm^3{3P1tRUr_njVu{G;wSKLK93EMbhR|hz6SDs3tidmn&;z0-q)miwxCI zA;lT5?TvT+{A1r;`b{}X6hyl;!*jYE-b@!z9M7#Iv2ZwQjcEEHVb{R6P9y3Vh|m^X z7k#o%P(U_BIGGR*;vC&n4zj+optV>Jq%E%}|@)MhcvdU8SeoZ8!7C=qlh}95_B;tEiL)(CW0n9oP5-{k4xJChh zctZwAI0lS06bZ0;Dc^GCkFWT5^$*;kS3*FGHqb6)$v)L~hJC;=U?smWnQG8`VB=9% zyg>mE`ZUcZ90okZQXE~)FQE*G2qzGO8sgblaUqFpp(^QJ{`zV#GztHB`j;^SGo_!HUQzqZ6u=Vq;&oO0U8HN5ametp&J$L@B^DcC-vw5 z!vnY2|L;*nn-DPhX~`EN@w%D@s$5Dizxq>DTN4k+L*zi)Gb2{i@Q1JS#)%Nc!ZJUa z4hiTYa?o+9L{%ZEMIWeqRhgnrXywIK6ws;}iwUZJTEM}EhBneOW9We3m5UyIbvSeI=M-TA zB}&|q5Wo^@c#v-b(@j!HTPY&YAbK^-W$uhogygcd$8&E&(VDcpDkNe*ri3^GLIrUN zRxQInh%}&rew%7g^w2w>WxQCX46jL)*DqNX;R{nIP;nASi;YS$j{;`(D~{$>KcF?% zui;CqZl^3^n^K;9L3|+$8uzB+1zA+%$&ZQvA+!_gkAek6gD2up5Nor9=FN$I%i^Mua!8=Xq)*~NH%M)6AA6tV> zQbR6jHt`09@oPN-TFgV5kEl@SVZ~YC*3z8VN~R@}&W6f0ZR`Whgc}E%Idul9d6v|$ zj-k|Py9gX&0e%dZQkkG6bVH}hgUv`EMV!C8|ADvVfA@oWBSah3#I*i^bGfNQIFb(I z14uFF#UoFNQYC<&1ogj|83Q(_t7EWLR0aKjIYve!Mk-{d3|vegf@s3gBs;&7j+9Eg zfi3B8edozEh4g}jcf4pqqL3cw_$H9b$Akcrcu>ho__UJHbIR6Sy8&6B$L)$Pl~B(r zKXOn%Ngv8ZV@6@*bt^mm%-KaH)lZYr(v=aJy zNP`C`2|ku%Jw$5Kkg}y_tNf&bGl-K9+w}AdBtC8*qf`P66(}eCj?A=z7eD%mi*Ie& z(b@2`@JW{!5^%cfk0$4=0yt7sqY(|!1St{Ng(NG!YzkI{z)y(H{04@^h_0AY64V+T zDy^Ek{GtemqUeEDBK0Rx@DmC6X;MIAdXBRImNR;iO@Un`dC*9jkXWM-6AP_rz$JV! zXJASPD!0O$!D#*Wp1SCpOSgeK6TZ5tP#v}BgIsSlZo0L)&nZMKvt|>JwV@p%@dHf% zQYa@M)pHULUzq#wO_wl6#NAqn5M+>wb6-Zs#n?kV(Wu8Pz~lHK?e&>{9OcuvNO5cD z+8tyAXERdPKrZI&N`_46BHTK-ue_F80H+`;F#55QTUi>w7;rsqfjtaQS->^Meh$PY zM=~m5e@-JV%?QwBF0Eqt8b=UEE61Tbi-8?tHW+2e0FVdmh$nY1S)00DJh93{VHGb2 z@AQ_w0#cEu1NgYn3P=lXYK`UFg*r};bd-*36y2YnWzWR13EHgcR6Z<%n||j$75@>0f#Eu3tNHSz|E5tkVc5YvMNU%E)mV-7Xd7IW@!- zL{VVpU3-2*vAUJEAl1+$V3>*8K2B2malNPenm!YllSS6v~ zZTkpIQnj)kYlu}M%HE5&hWSrxDU{meHdBi7GSl{G#5{<{A**d*zdsXJ`|SQ)zdg#< z4@u@d5P-#=gnqkRs^~xg7>S`qsblGcCh)D%s2H3>at78{K=R`_%m(OU8q2I=i9S^-CLan%<4978k=aw#oo&9tN&OH zovtSQv@@aCv>^=O4!hl%X3bvU4y}pyvo~|Voyv5(HLQL7D0qrL?K!vM)o1BWlV3fa zqix+P{XTqiUvaJPp=+46zzmm_5?#PauE-d>7c#VGLdY|QIJu7uDw6p3Xn32K8(I_C z$7mK_!v0lOf41zMi@$)e&{(z8nFS5IXm^O-;tPB-l^tqljE~7$KfVTpQX7l6A$Bj* z&;FE7kI5Lj_mK8dXlA2&n;kP_bzi0<>I&Q~&I|_TL}q}M8gS3dvy64vnPXkErn)!J zVYi+=Cb=SSgpMfSNT4=&kRt<&a~E=4B+G(Ix0Uvd?4(y$bwmf)Wzu60x*Y8T@$B@P z@PEL8H$MIH)Lr#&d@2=5OV>O1gh$r$Q}5`T8$NW!+%W6w_UFEE;atzDQTrah?!SGh z$Jrca|EqZ{I-5s%Jf-tZmv-xCID6gtx!p_b&CkAj{nAFxGM&4jK3X{PPwYf{%=L$#s?2dx7xjnn% zA?FFsIQ386kiB+eegE4}@jh%Gch)PPtMBLc(o@^A*IjaIZ}z&&I9WAzHf1lmVE$Co%(^`T}SE052G z)U2P+jk`O3uX%Xslg*pl>mFMO7xeE7`l~ZkuTIWU)!%c57Y-k)EVbniXB zt~*+9>sjDXn4SeneRN@92|x#q>}-CgyQ9{;T|dK1pU`otpJ={3Y&>mr*L`6w0d*GJh#HC#sIXLtQSKOb4gtHmqTV z&|12t$8!RUw%IuSnsJEVoq|v*%Ogdgv=(=B4dppf53pY zu#YuX0zDT%fzfTiLL`)PXoy$kYCvvf!?zC#_+Jh1L@Q{^B}WKQ^CH8(3;2CJW;j+ zEytEM?t{em)7T4Rtg$E-9XoD@4J)H6M5&?xpi+BL)vU;5hHz;yID@FArnMBfL_j$< zrcM@n;^l`wT0i_nQy-u@UG{$VVxUgPogNg9CRDn0u>Kq;tDtv_Ym|VYpJRBk z-`&RcP<`W=mpMKKlwqL+$N7Zc3v+=T8lJO}S5Bg3Nl=Z|K0Rd3?{^2BLR1?e(_E`H z$JfAN`f3|#+vb=ZV&XaAjb%hoF>iFuwgf54kb*1#JS6Z;ik7{x=WZRsXFYrrmIg z88xSJWM8&*p>^D`Ht=(I#cS?Z@?C2fY!n&u&_?k?7tF~J>T=;Pg3-4*L|ua`^d9bK z3!EL3yfcflB!t}Efw`vLiin!^&%X0YT9zGTfhGF#RuKzzvZSK^?&f6`ZtQtTyoBv z69JV95#*hMZ_QQGmU|kTCZPy(nWwVEOA;hT(#J6UYiWd*ghC^ShPRStCcq92^d>@5 zu|cDlUsU*bT4lUkx)F}1MDG9j-<3`qiY6ToY4NIf%d7AGNd1m?nlBcTk)Z(NLu8H> zGbBf}dm6Vgq1~nFIGiH|@^{%jAI{+srtA&eMbEJowQV57vSg-gQIZJYvT==aI|zF) zgO(Wi1%h4W%wc6$DA}SNWpqzPj~;p!_29{CfL}}&w_I>&CE&%+gHs5LTdsGM1SUIw zM!|B33~InY0Rsj!hZbTTJMEb841-yLz{{wVphnU~>d;7_Xol6uFM*=+#*90OQAM7* z)oO;z0uD96Gt!fUdZzGRW_t|Mdhrj>wSMsKS06wBKqf`wBldd9EFFOr1}y7jSylm+ z1@_h_sKm|Y_R1%179$%>q8hg#s^v}QBpx@}9KqPGg8MK60S@RqE>!X&RDz!<1a1qg zv}yqcLwWo~2AQ2m!S6u!S69v=OMZI6{J$N;t;V)CJnmYZ!J^2v%Z2DlmClBwvXJ zG|=j0Oh>W^t&c~L`L$oU=CAAf1dNh^Z@Q#%%$jtsNR!l{s@ zL7t#mc8eyry6J8R5q=W;L6i*w&G8IUe<6h)69BJ6E1hN-zCohnHh5*eNcGP_TNcG@ z!e4V-@{IWjT9;`Qv?l0_YM@SN1;s2w0IhUbid9}qn><%jc1GTSJ@e8+GYrqmnKhu* zlOXlxSMK>-{T*LVvC2UMuC)RAGUbfPQHNvmumzcK$CQ2c;;CodfYu*UaR@QGC5dfpW z@MIMi>K~NSqSYGkx|csH!GW7h0*zkGRH#9sd%)gk*VLot9!#IruZaY3%lLeD;~N*L zPT0jG!+@gwUmt(A{?3hRG(niv$w&xPXN>ddS@qb1Pq-#@!g1y(9)nve4jjbj zlslQqRIaQF+*wdCjjzR!t>v3W8mbk0Btn%sAX@qYY8p)hqM!wG2f|L2fY%IjPqU@% zEbP)ea4e5bB43fIyb?+GY5v2=)UuZWScnsxaxg;!rCKhF6E~q=>kN81X3SlIUT_6i ziDYHT4?eZ=26pdEuxqu=aXTrJrp;@i;(paOpJ3W!JLl*)$v`duAYR{g`-^J_>isog zmVi=vE!pzPpjOf#kUvz1bt2%S36>DE`zs|{Hc+f2TKv$dgbmDyGru!YR|$bayuOFr z%9Rs&AQ^zrGlZKH;SM0ZS!_)j5snD8R~>OClDgWa0?HDEpvgsNjJ%R*yr-iD<|om(NICFdTch zMaMkbp!gS&@3AxFdj`kQ?^yyDt%WxPWyBd@iA)dy8_dc?fJzY%P%{Ez1qBBZyT%g? z0*rtVJLR;PZNNo9a7Oz$bbjU$(i`~pfe(6UaV5Y?TJTuRN z5bU#}qda#(>Mhb{#^ypiL?Kyo$OP%Mvkh4Kzmk|=GHJ~}FC!a5|3WD=SQqIlZDWN- zm+J|6p?MK^5$>e~lvgU!E#P4WX^a?2dSBe*qz0_Gr#mrVl}b~qGG^6!NEyJT52a;= zJ4v!$k*?b|&U$rC0q9wHJQqvK=x~|*8((1DRU{zX$CWF%m z;4xiLXhw@+CN!QCTp|Okk?r7aC^SZ-P@JNb$A&3u(fx@f8$g_inPSWY(t=BaSHtj$ zATnmc7&u;O%6fD-Xg%S=g{(lFRDUIC)vmS#t&5rvJ11VNPm^?&pK&z&|45`w8SY2$V?sqDXXoFO-x}Xw+S3fY%4VzY-(uXpGP9mri zfdJ8Hg2`GzuC#Q8Su5lxl&L@F9}+jQF}Ej(tsrx;{b;qJS1U2V5_%1>s5$SAjETub z>_%;{l=&seYv?t%f?g4~n7DMM=+$6Wlm*J^_aRjR5Njm~j)FW0D-pLYhc&LSY!jkI z@`_!J7yD>fCRgSWy$oGT>UsI5q z1~DjGL=T8=NZUxrm308sCTIt96(-XmRw!1(H4#NO1flh=A|hj1B*+ydC&B>Qp(5@U zGSWcNXJOaZkP?e%nQnz&UZ~O-U8ACm6s$xooyU zhiZHvBrrr<7PMtHP$XZHk%REt0u*3FMhnz?%fJiAFRxw)t(bsJ7(ki96w>EBaGQ_r zA;X@YkZN9ybF(FkV(1s74>4*;6&n6lq?~NAA`++1gRrfJDRx{UI1>lw8Y2M`Dnbs% z(3Qc!i4cjfm0(CMU1?kF1>w^my=Ejr#!xXdMt0a_I|v4OG|4?7hk>yfQgLe`^UG%& zyCp=&Oxfr!4PQ`f+4zjLySHKO%J?ng{dq)ER7i%>){2PHImX@vBFWvvBxAB#1bq$b zB9{$b>}#({1}`FF?gBo{wLY-(=WDO6cb!PF>@_1JjKvF@@jS-N3{J{5d^AO~6&+R| zvN-`UVR4$PY~ChA%Esn}lntI4|4qS*!d778h7oQN6S9THwmd_@&Zz!CC)kjQ@`)J` zEsNjRp}9fGMNt*UZk`dpLbC%F&}xQ{YO;DIb7Xu1NMa`-fKxjG{?VYq<781Nai)xE z)-KZw-4@t}_BBQTGzM$ix%<{gVa)17U{9i=c4k;1GvP=dn04o+-@rekn?++OLGw{h`_y8}1IaSZklg5TgV(c& zIh7Z*|9B#czbPaq9;kFUOimbfT64f5;71rrsr@T~L5qF?IZM~2qBKMS()8OjV+SHJM*SFH={Uzm9fvgNyeElC5h3uPZhasEN)f7|>1E-}B9+%7yFt{ORuDC{HiQRM z{f5$c1z8&mC+G$V3^ZOx)?l0E5>kPa#s-r<+>R}rh-ml*W4Ixs&$foIxj~_D$^rc1#%!wxVCDG5Lb- zBYtSqZ5Qwu#zjBblY<$*|6^-i<%G~%u z&+UJ_z5Wp_a}x}5b%Vu}n-DVIg@>u6#*N|{jy?y6pms2joCo#;c^UXclpVPN5Bx z^oyL7wB$=XPSNr+>%WaT#Z(!BOawB0vunGM*v1QJW$dAE_YUUWyhj@UoL=Y_NxH!Q6a;T2I>64ahH`3Cy#3D9`g#B3$7 zQ)_tIsioF%;2`Nh;v~2vc?`2-I z)QcP0a4t{%G7-)}9*JMfFm91j1p};_N?4V(l3wLuQpeM&exg2Q@-NF*0Hr>WD{7{Q zC!OwPnVM%8DaVkj7Mz}u1R2X1z{uK+&J${~tVPih(fA}c{?lJi)sJ1!z^TmNQXKpu zoGy#kz$rAutCgS>?$?T9&}isY(pCLJw8U#VfkrzK1OV-f()mVT7?vj$ST*=#1$>HD z+AP9F!tpQjMtIGb*7l}~3jr&%()C7h$A9AW2usfY-@YLsSiwg&w45 zL$5g%tB8P;L#~-zhh5{zhYk_Ow)?TsQeKGXMr%Q_@+ot3Y$WXc);VCpuOD zq7|6}e!Fn$GDyIJgC6B61JM=W$RHjvjGyTzs5f;#`ay!-C=@*fI=QQC)JDUVBeO>X zHV`cup~oc~U?U6S1mQAY5vdLDBN9W>)lB+`WHAzqYdNt7Oy8`aN`joV(t2e%x-kSKiI&F%4eJ%z$CwMf-00XtKX~9b?0@`H1Ffu57-1@An}F~pP7r6noLKS$zK*bK!GXONl_>uYRRT#gWq%94C#{LmO6q&ll1U%7jR zx&?>ET6-94L9MSfUC~)Nk*oSo%}=TIEc42cD^x7jGyL+zyI=aN-s(poc@w(r^=u72 z3$G1wl|^UpYD8?ZOHUFu6#xtq8PwHsu+`)X^2<&r!gRqQ>Gznjpf|1T7_0w zt^NvPU7@uc5i6zuMA8cNSYNyD#@{~w;y=ozSdB%kr5MAFv!y3B9*>PFfH;K|5p(Qk zG?JBNOv{2*xMauy%4G_m!;qyk49<|=5~<36Ye8~-d`cCVY#NBpf>yw`nP`wV@^uDl zs;@|DghOJmVjCtRRr8QgcWSTVP&6Xd44RjT6co~vWuq#6o{fD+VGXLJ?;F@OKB(m> z9jV9|h%v0JGc<|?5<{1(aeU}lR=LHgpFjS^SN-Rk?2Esd1y2h95-wK^07RRq5dbO) zfu=1}0+ojHjiuTUrJm7BDS3iCa7hCJMfQzWCGd#I)QUZty+Zjjdjz2xTZm{+QoETTI}4i#wnY%jFr;Do zJJuO7>YyL%Yp?m>uSSh6?Vhuqinz4$b#z$^fK6di&4((XMk7Okn^j{%WzE>C7L=Hv zvIUxh)6bRYF^^H1vH!Bz0*Ay$?J94;^@U0}?X}ivM&eUAq!xaSbxK+nkp?kjX<*o} zPJK<-B)WbXmxkxT-?FOD87??mdTLO92ASzl%1nvv5ovm8rKkXSXUR`SS{h2F@>87z z9mU>@@q@R##ku22U`|4UP!7l$OGl?NPs1p|XVKC!);K^(2%nIRK_@wjVjtswE2>c` zlQ$$MNYrU;uGZ|(ga*zthXD${1r;xvlE0u5^#XjQDO`?7#*Qadk1V^ zwxWF6lAMMjS5l_~7G(*mV}(&8In~JxS$P&lR~V+2!6>a>R!D|CX~cZO>|R51syU+1 z&+a+tA9=DlL8b)nFkSM<_arn@HQxWFzhY{@Bfoh_UWpMAE`NG` zA^z*5mSdDvv}?*(@sLFF+h{?OFiDKpt=@jwEnmyMYlk8fMi48EMU0`b0q^qw9bikq zw&IV|rcFJf83#0xsthoV{^Ad^YM#wgSEi40Ydi(clre_@t;nlIN|YG_UEV&DCXr;E zLT8d(i$zY5m}3~JWmuCz7EgK{CNp1{hEl;WGwO+4q@_JmiX^R7<`iUQAh0X}-AO2q zn6;#OAde|;wR-~Jym{7@07(NZ&ZvYIO{NpMGC2c|bXd)i%?37zjwAD1{BhfV=3PJi z$aM8%=*WL#sH8Q$E?ebwG5?kb(Gf^BS(4}1=3Xv8`ONF`!yD&X&R{-&=Yb#n!9O0_ zot9cXZEsjt-M?zX?e&gz)sFK%%xwwg>WlC1CU$1N+S&Z^;b@w>FgA3KTrqN0wWs;y zgVDj2F5sTV;&k?X9=9aZd*kb`&Rr6^)$&Sq z)V}DQugfq7>=Ox$f|=VV2F^XPY9h16{d?QogmFAGbp1$YeQV!RKM_Q6v#~wI?G@R( zE>cueBdT2LTpF@J-nO)EIn_;3;mGawZ`<6BvCf`eHMEsubvtt(@8BYg@A2Qs-POre z&m6XgZkoG@sA(!6+Fd=6dFF5J9pANY$lgE%@MKS9p1H~1QMO;PKhA9#wBWXpzWSA& z^}f!fgZ9rmqAQ8|*ht&bG5e~{xr^s67V0wt=MSv9s*||WbL$@X9B~gG}2SO-x-RzTRpqD+IcTNsF^Ycer{=A zj5Z}(`8daLqEz%+7K6-t&za(6->sgr=$-rC%yXGay@MHAcG<-vTdI}J%+ctChYHQ> zeu`prG`il)4Kfm9k0B?OxDVQ6r7`Rh7N-s5IEK^XCcSC=0(%Z=SsJh0F;RUyTP|_e zrF#Wx#$|WnZk=E^)9;-Va>az+%G__#>$N<^X-d2S4ISRn&$mAe^ft$#kBcLH)lR#z zROTvby~hy3c04q@T;A^!cx|g&+JWe<_9bnP2cQ$ox9AeJ_tQJmSuW<`EY5ajzXjoR zX287`5cBJ}CPOejO2iP`a69I%_go@Iwz4o0T(mCTWg9S=O5}ZO$I^rLqQLGL*%P=2 zC+ur3NI?B`;2uA+)!t|?-tq5$^wkUMYd>^`{b_}Vpj{4a$TSnW8nK1s9ch?8@t#V~ z^g&0|AurPBNCEUC(3sEXin8s8?l_FuvIdD@$7`p&_bF~wzSOz|TAl2t# zlqV{d54>1o{MM3Oq3k7MZN?Y+lnlo)C?%UI!sNrEjY)wqg@=Vb-IR+pB7Z+ z8}`n_7he3oatH5gsIWFp6W%k<=?>j4V3wGK_N_z19NiXS`_*WZeDs=+10#5m+MR+( zq?^Mi_R)ZuNzdirAZQK!w#%)Iqvcyr@K|+hMrEET?Ob1JEDShijM+H3lv^<-tm&O0|!s_TvE3xfEK+(w`5b0+BA}3Nih* z^;B{UOa9cQKi=3^U;DE1q~R>KF(lXclKzc>HHFO3a^o{qDb&pGxM20oWAbB)O}=@K zi3%}7&kifnYvorG&PoM#UlT-DCYW~XDJ?#UwR+OOXZ`t&8{hSZ^;_4cahy5Ci50fa zyj$JEVn_OQpOz#bu^=;mRA1xRVH_|?ck(1Q>-B6ORt%VhjD88~g`%0JZS$Jw=G?S) zCkI$wfk=@D>k;XMejOx^>&?u3Xk1JA?w$51d!`Ez1nG3#NWcAT>F*d*1dT1oqben8 zMa|1{g^rlPn#hKX>1LzB2v=~Cb?=%;;y1KJPI7%PYeQTxba z51h)Y-Cw>nbIU;^Cla*!2w)Bfv1A3akvjl+ta1?91JY-IUGw2ScOY<-Csov<-iR@p zwdm!*5Q0W?@?cIh6+^oos*#SqjfeKkBgu<3i-B+GgaQi^aKEC4Z|{5jGn)eJrx)gR-{BwfauRkg}F z?oPXEsu>3;EA)sxk+E)7ae*@?&#N+zdRo&0l)@rZoQ6Q?;d~gCN6}G%^?(HT;o27@3KdP;#M82(D1;s}#;B=Lc&>mp&zUDVpjjyI?QqdU;{b2!B!vl~egjv- z#kDFAl|z|6k;p9t&!L>Gx=mRi#M>`==^x&5>QBj#1SpRAphBsS*V4UkN7+NJcy_<+ z%2Bzx%bdcpRj1M!uH|l6H7ueIO>zV_{JLQ{aGA~VVNjYTomex#^B~EO8R2DX(Jui4 z#7QdAicH;Bj)`}afTc`X%3`4wrIdQM9>dBZOAEr^v;`hXb##7dKa{a zOdw`D&fd;(6x@5jf)#|@xvXN>$B=WdXwtaTZ-xiQF?E3+y-8q3&9LGJNmbShaU3PqE_oWKYsahPu5%iM~cg6z~jCR z5?Y+B!wcFAYe;@p-h-bsHFU-AO`SmmXR_gNTZ5CrK5d|fmZf#Pa1@734!g%3KN5n(|$0_ z5ju`J*BV@A@_~%#O*FYbA0vS(sx}0wS|YQklt7WOWgY4vevxs3um#+F0zsf3ITnxW zx||rr!w1@zsSz>l#g40$zT$I{VL zL~}s46%EpIQzYJUX$okeKy9dDyG*9QiM3yeH62>vF-irqkU1NPU?On41=nWj+ryi8<)=D?DkGv?Xf%Ao4I-9c6^3OYZU@a&?};bM#sp@C^> zw2!l4AsaLppm|a>Qc4qWM#SzdpEgj7fT(atSjc2zvqi5#7;bmA8|{C`AG~t+ruyG( zRTC8gyAW|Ybgq_Qz{opp-vD;Fz827y2}T2KPsGa4wCA!kcvB;d# z56A%=%X}6x)L1$ArML{jvtz&#Vo5#dsODJwY&|R9B34p&QafKI@Vtx~MeC{G9FVR` z?ML{AIHe@8tA#gBNRpyQY?&Ba0!p(thDQc5zM05p?I!jEf@%+4tAONB5=Qq1&Aow~ z^#Bo?qty1WhSU%YUBxs$(aAR{=f&^5>1Xfyllqq%hi6K6tGu-wAmvmLwG5cp44@U)JPa}+^z7UkPC(*w4{4k@upgoHL5YiPZX3Q3izrMN zifxS!=vcMtzyI0Wj@2*t71gQWVcwDzMgm5j#vN|MQ1_!~wb?U))F+|L2x)^%EdVbh z9@%JBhwW}>28=K;>Hz?>Cg=Ma)TkE&r#R;aTsJ_gU1Z|SCh|oh$v6O{r|dD_B`P_| z&06YVAT))FN>Xs}GUiQ!Eh_VzO5p4vtvaJZg8@k(&+CurzX`Dz_N-t7erOFd6Yi$G zvVJ&04=w1?SGGTnVZ2j%R{fE)!hk{52OvcRNYowx5S>Ok)+w=AQ>{gm3^)w9>cyWt zUpxQguM(vYaJMP)V>lZ1>|P^(C%8x=0b1r)zj^}c;E?t-$NL66i+h;) z(CZPa+Eav4q-@Duh%}zc;D5RsVSBFYm3ddr~D6 zRy&he7J-pO27hRw^0>`l-+aY1lJ12JaS;Y#6w-L~Oy!|QBsEs<@ZGSgwR$E%5P{3z)CQg4jN@+IGiRZ@uep#v5*e#oI!b$^ zi+IV`B)4+J4>~}aEK|TB;Q@+oWfz2m7q2oqArTUbek|FIA{rv13Ll-U8`&L z@}>ij$<)W_0;>l6&^TlFl5bM&P=3v!MqNS}CM*SUc%$k9K-uZ$P*~P5`KUv=0h#UW zMj=r(<*Ge$B=`aOjDX-?8Yhe@n}6l!|MBhhAAZ4I?$4OPG@Eee$YNei%3)Gpz$~z;KkvQ*1VnVYq-Ehv)evuV4;U z77b~;<@itE;n#O>G4G0@$Bi?HVyqN8Gl&W@ViIl()Zzig;?yqj5i6s7j1ZC@Vjvm5WGl9n}4KpQzP*x#^5~1lk83Ii!2DXXdOQT}~LvE%(Xk0sU z_~WQDQ$HWV*#|YYujDlnfOOKS zBaEHK3+NEN6R69VQUwc{SBW1rnRyF{#Nq;l@eQMnli!Bv(>4 zPE;>#0%A%iX|&l_4L}OT@N2lvJOLpCH)SdZ?xM=!ah^XUO+su$B+trCvM98kx$wuo z`f&Z>e@YUl4ndmaV5y1H+7qy2fS^{i(8ymRU?MEt_M9jZAfWSz%IR@2SIl9!BBL$l zH&I9A3%&=jsm>;~0};{-TsJmHBmqoy@{ouUg$_Y;YW)Aj+2tV%-*utL2oe8p-F zx(Vv*wx{J6Fd?7^fH6Qz@g*eAYocc;k!a`^ZAB~8S4jvA+Wj9wSok!^hLGXg`Z z!?JeV@RR@i$@-H8)DJL~lmC^(-c!nmx)J_u{xU&=tAfgtX-;=!QH4T)eAS;1e)~Gm>Ch z8+00llB5H)z>MU<3`2d;Oh89i{`24a`HL^qcip6jG^k?;;7fFacGX)X_o6&oAkj#0 zrZ*XksLjzD86~P0@}V^-Oh+vj?n$laG!P#LK*VstjLnHQ(jfgzJ3Z*EQ5jFjGm}P< zV3yk#lcW?qkssq3Gg@`2!XzkCrI^l3qE@@Hkg0^RKAI^4PtJ6gS6^5&c;nYt>jCCD zC0M8a`ls8w>Z28XHUVF8QW3L26eX%cVgr+?of;^G4{6|04&0iCk@T{581m6@j0lX| z7Sn_nCp-xjwbc~EU-?$Rb{rLDmwPTFYEsmc?7l>}DSkPFZmLD@a>*+OA3iK2dnpTZ zEB3IwOc(?a!j0i4K2jmSkiKLB1t-DS&gM~YDSem_`D{QM4ox>OF5Ugg_uK04*pTF* zh|m-jWVpa1jZ=F-vk79vkf+AGBGp`lgmn!XE2f)GHwCitbW2*16fy=ab_~=gK@tZ{ z!lS%tz^*p}#AigjpeB)o?Jh@MV9+M}by9UrL%39<5N#sTKxrHERsfnn-H2YKU{S9m z(r4Q3kdbdijtJ+`_$R1Ir3KQU`U4a#*5C`@zWUWs_qV>KxFiT7o;X`wqQ+M-3JfC1 zK_^IQ(hjJKrEq|@MmI!)QzA@CWWzoZ$OuyR!Q-SBz@%rmCz?iVbJwnUSF2^HgpGL) zUin~^l~MJYK9pS)l?|U_J@OgydMH7r0akz+7RCW4>O*w%UXhcGYE`+!LbNQ?s9RWw z67MxnCW)F$BSDw10zo4vd)xZ4kJLZ-J1Sy11U9LXk!t}=k=fLz${0N{GAx?+SkXi# zUk6jUucFPDnB=bcQE3Tr2=fFm5PNP}h`??&Ck3aiHHsosbYhNANw8_ENilRmVoqs% z4ff1Q8(1)!QCk^Iwb9iHKBd*q1Tvb4(r^-oP+txe@PkEj?05g-J@u=8KaB=Pz?V5s z2pIjKY$C8?LJBnBJQ?&rXF_`-sa02RgT7KOLxC~hgKAH*#!9aqRWQgA!BA8ZByAK( zjLJ&lI9AX+42qwUQWHl#WhDqzcjLgo$4|k_WkC)hDaZ_!sz&GyB2Zo!4EHuEftcR_ zx3n=kWC(-^VJp1l4}bQfw^TP}O_k~hT&d0L?Rnl=J)4agsL`mwOwDtqGO!S$s}CCF zko^wk^w-ms1qddD-n;O_&z9)iX&V}8^UkZmAWd6j z5zKq;S3!VCpRSydBi_rhNOhXl)&ge`jX1;kIm2{aQ!TorG+ccenW{5LsYb@VXP;)W zkM==gQ&F@DWTg)+MTc3 zgSptS2HE&1JeD$MRU>}=l21rE+- z*VlJ$Jk{EG>^a2M4Lu~d_L4I{3xM$0c=nc0I=kz;E*sBo{%<^tb}j6#w|3QghU;s) zmST7F^_k0uPmN}-;>TXM_f%-Fqa1$f{>}ycEKTZyjO!lNCq(;BgIq0T-7jcGd2!&f)yes z-!WGl*E!7tw#5y_;|{v4uo^$p(L=4=5wcJj8ATp()KKk9SedBo*q8pyMDk4 z@N=VNVz!xNT#c*JxH{RI%1w>~(ta+FK%pmhM;xjw+!-*9<=MUC&fd8iQ^89$r(@i) z78h#c`I$;IHQtn59HAv|G-J&|f!jSOp%&Eud!e#`IFgC7(cEcqcWr^$YXi?1=~}v- z2`2@JNmS(FzUa=mR=^uK>)|Jtd_dYnfef@-5-b7JzMwgQ>BWJmS0|g^_5*~N30Tr? z{Ld%?X%-__YM$+baD+aFl$V`wLJ*-O^S{R3*=c8xGek5x#5=?~1(Y}+jBi(CNzaV~hyPU!-`kd0 zT7dqsc&;FI%R%#K6bJTvKtUC7MwuFUL_U`l; z5-EfHuobU4Bo;eDJLr(gs96>RWLu+DTk^i8{2+@n5=Y3M|jb#Z919uIA$H@Vbv z^imWqKBhd{=1?2s68YXDEZq;`>-1fSec>qfxXM#iDK7$;820< zk0OkXA&~ba@0?u@S3740v7%6G?JhGAA;Sn>oJX)hiqVD9Tcb76^-S4ti3=FRz{SWZ zd(QjtbaVqY1c^<@Of3Co{_FCbQ29Z}E`D-jKfBK7 zFUM6@GKw4Bptkegu5+V7UJZ+!a%QQX7ch@)=Vf;}Gi}(8qEYS&$3%sA`KS)<$1+PA zJ7E(QV>zo@4o<^-izCRRC?M1=hO}ns75d4YX@}6V_c=pXS1ZlC^7lsfVGZ5DQBXRR zKcpg5fBqzm-s1FU+UXdkVVVAeJ-Eh8^i_#iWK#OdnV#v+`cavYbpN?!`Xf}|G>2TV zv5U*aqH?qbP8kAg(OcM=&_UmViz0oc0uye*M;;ZZy`8T1yHqvMWy~74E&n`5?X3TS7 z`++@8=cMaCh*Jqb4Rh4!NlDR~=hh-Ne!$fz19u`}K$Z+iIe->&k8&b)mZGd0`&jnS&_xJ?{KrrAX`QX5{Ihy{NMa)8;NxF=cz`sAhV|C{o}8TVR`v zT7AtZO5I?`)WUeos9)+CuzfOf&Zia~CTdxjiXcroL0FVc;PU@GO@aZW!(6Ne4fmic zP}@d^){#li1-oAUgc&fw3yd<@BZJOCJfM(So;;8(2QFl-zFlM;g}%&#UC$kGcxm+< zgPs9rz{MWXiR}D8fZrYfL9gOX8_z4_Wq?aY@iv{MdfIoN962`Cy~l5BBZ?aBAG z-16(-!GxEcU75{Sx*KjAxvI3bx;1~-#-$=dp$(T+*RFcbxqD6ZKS9p-_)#x1=d&NG z?s7hNQ8aO6ue-_VQ%t$^?ju*&A8xwqx}^?hzB-$kxjHJ(T~yj#f4V%^6Ky4i;T$n@ z?Q`2pKd2sXKD)KLuNnQ7xx)UGdnc6m*^cV{%`;<5zVm*2@yOHeNmlh#w~}P;vbi^V zO?M4fw>#WKRJ#BFC+>aV&&j!vTPh9RN>c9T4q=BS~!3e z)pcDimkh2$NZJ&YODJ!W7VWO2H5f2)iOc7H?pqe|$Aq-OH%)VM`wt<&P||>#r1ZA; z_C=+=Nt#bv7DCb_O~U*AJu@rYU?6$h&*u(iH8bbTInQ~X=RE(;zsB0e+oSWAF7&sJ zgsIJKbJ?d6hVLI~K3)nlPoTf*Hy?QlP^XTjp7ZMOgI!m-hq8-H8@+W~mU7wpRZ~}Z z``h;DYjg3Rqr7c;&-@CNVy}^B^xU|}vTk+eqssECB z@_#q4?^~L2pSf7V>qfF|dur;6%;<{W=xSWL)CZ=wT`=|8?32IP=wEuf`<#2()^Nqv z%(h4Q^#9GXnC#}pSj23zsgaJyPJ8z`6n|xHX`^3G4P-XAeXipp-nMg^J8Lw9OnXo$ zUubMP^0>F72UqyXu`t8xs*bWhcx)v5?#jf+qW3NBa&PGPp#Sa-Q}?+$&dNS{akP~+ zbGtgW`|lncnrY6|Sj|_?{7QGQ;)DJ-ya!h7_`kDHet;!&JJzuR>w~ZS&Ls!F?LV@y zwM!aC)x_{rDK+aJ?jCv&1;gsE$sx|39O5j+p$9P>(ZcJ_4bt}#^g(NK?3ahG!C2UX zVK|ITNn@i8R+ssnKB)Gcm&Z&KAIwxe~z)Np3I+IBjsLE{{hDM@(?5#7S zonac`HFPJ?wS5U8=WnAQeJ0U0g=i%32GXC2MyI~Q1_TAf7@DVjz#r|vatqQsLqCs6 zu$5lio7&~~ruRf+L-)}&!OSk!$zfs0;@q|#9Vzvh*%P!sklywI^kFyf>qa8fL&q*}vwLrf*{xV?bJ%R>M(2WJECM}ZGvtPtsy@Ul zQH&pKeGD%>63Q8mjW$|_wUa49^1E21I19~UB2_UFu%$J9KaG)qosFd>TUtco#X-I^ zg*!6AIT#Rv1*Qe{P~<0cqL~%A1B@41%t_)egGLW;tfNhE)fasu}vfj+Dcf|9#lH*GiDD! zBlN$!nbnNgn3($*1I`0JbAU=%-(h+u6qDq{ddBA78C@1+=7pu0LgjSHKu-wd?}@fY z+ab@k56Gg1Kzl!U)6p~D`424up$)XTIWq_6F;s~&N{`EPlp04Bq9us6!JwV!Nv#^d z$;2E2V`aAzf+tx82=hcUC3b)r6=<7uMXE{cEzM8Yargk7F;gUtbE^8}p= z6LzS*5?c4rbaDIM#>@GhnI=^P4jtt_`doIWd6R)6n}DMd@=-1%h@NJ~k2h}+gz#?( zEhOhJMBh4cAW`P3LYvB~4)g<0wgouWfk*Y*7u;V-a4EGp`o&Ir-p;q7)^~ z&wuEeSFeBDwa;e~zNZQ_F}RX9uBZSUj=8}rFqwt3m5aC7DQ%F`@w_du!%R6{N-)%5F8J zK}H2NX%1z3AAU0AouAl^6D^dO;+KD30go-O9L!O=QvxUQ3FK0jLT@b4Kd|f@cFieQ zY;tG7SZ+YA=9Evez5uy{gNCmzufv}gU0qm%W;0U~CIgp;G?n77Y)tNlEV`TpY2;E@M0Up7SNZwAU*cH5?CV`FQuqWj1e zB2=<)`BzJSDexC*HUJjzFAyz$eL!xLI`e3{o+GaO%c1``v-F=<*%)Z~g9``fIp-rd-1?=s8(;Syz-ke2 zWwb%rFK6i5>k)iAyjDEeH4jCQxb6<) zBmDOuy4h4U@f1Z+a6x0o{a!Tnth)z24H3H&4AtnSSzyR8={fNCP}YNtmF$yBKnsBD zS+4+>rVy4!FvVL?A;IbRhUOh=U}h~259ZJa?lRgFHa^P8Tg!XLIov4G3q6i|?^C;Z zf=}_@Y4RZYh*3FUMNJ3;G4)s#?vKGw7f1I&tvjPTryfk#cSqNRnO$IL7aTRG|GfH! zs2_VkzM)%26J*Tp=x$LeaFJbVU766=00SO}eBgH=8hCqJy%2yx$o76@3wl?s?o-z7pgpr;_*H5wF zUW%E3m%0^tn&Cujls%zP%;?Ihq05OSu_%Mpi1ex$C*#7&2T;=VnV3GPrJ^ih0EpYCA|IVJ$(gdJmSvEV3(tCQ+iN2~R!l9Th@bB$_jLPWInV zrV-G}gU^X(3^tAf;0LTrL8OV@7*%tbIU^E_qtNE8)sE*MS&<09xfBCDw-1n*3!)M2$TA0$~ocj^?Z{&r5yT zkGPLg>XvNIYPr1@LpQV~%sdTT3$;e?#Mf!ft?ulKQrK}}mQk_H?Zw8*Fm(&S2_yBZ zSa$XHFh#K)1*>)+$(il`W<3t|sf^Hj8ied^Y>FPmC%R6c4u_d z;m4bgel{VU>;@F{tee+lJF^6sCNu==qYTi>nxBjYmPg)BM@Rpfc~yy{_sWEZoebzU z3J6eWK);ZGA9{J|VQr(wqE0L=3;^Cc++wLk3?qj!KB}?hq%X)2M+7h^un}Y!$SmQj zSScrC2Jt5@eHSSGYGNEPFBYTWB-_BzAOifGS4_a)8G6iK7kHXpgYn?VT;e5J{CSNR z#1BMVFmY(I1?(NP16k-CPF`(8evQ#c%rpK4vYlL6a>C5te&L5b-*0~H{Uqx`)VO%n z(kvMI3OeybNJxr>_QwuJ91{6gNi|RMJLKGWQ!>nY3a@Ur{{9IoL-h)ZcBDC z&L;7Rd`dLT=ltgYy!HHml#KihX1^1R95X8550)7}8SoKgcwD`48q6ap$$yev+av6` zIn3;}QE%|M-Piqn+c~d*7rSIPKp50NzB$f1c20r$hG4>cb+i_d`$=Nt@`1w^nSx9m zEBXO+c8rtbWRlGWgs*ee<+;J6{ zA4D^AFcIkNNCQvB7NYskfPpMgj)F+UQ*} z0C3d<{ERGi@@u*gU$=UZcnJeUu&E=?Tc27_>TdO!ghHZ^1z3zinL~2cmnj5NQ2%A? zGIjJn{ZKZVLMn;3o{5?BYi zS_BH(VdrQo|3M+-zq*F{BLjqVp;B~JbdBgg;O_Z}+S&OdUvm=*)j5)!;S8o7p#%6X z?=*_YbICj^D7#;>2dt$WUT|l78GYcuNkqjunZs2Hv2^ty=Zp}?9bnYKp~S$dYPgU} z7<(Z=i>|>-BX33Bh20&)%;W@$BzD;qVc7^o08j~$$ElKlKob#5%7yNiG}VqC!#~6^ zf=~YM9D({ljlMiC&rbexdl{#_H(gy|>@@IkUCqbc6Add-Q~M)FH74%`Wc1 zb?1R&;N1Mf|Maa-U)TKd!wHg?|AaIWt%MHJjRUs1&_w^|uI1@e2@nF#E(jT4$(!Zp zbc$Nm!++4f?jC63$zTief|8c4_qIdAg z2x?kX@*Rg5g#E2jh64{_R8&JxoZ21u)zBsIU({C+oUSVbEB|{IIiOi&Lw>s@t z86c_zuJRU%d2q43i!Q*pN z0*rVM1G`fxKwX6WSZulb-iPl#{gLm#&E6jWQTzUXT!AWHzVgd=Z*jBy*$H0=ys@|V z?#E6(?;i{4{a;HyW2e0r+_@Cv;CkZoiZkgI* zFJ5N1y`%2^Om-xKn)5f2d>#*T&pHnnYJ;`>v5Z>x_sw-kcR3n=oL z)RVtD)wg1^e_e3KH?ngnwkzz(^k#0*^H;%M{OkeVS6zF)F}jKzt>+a_D*u}9V1;c= z7~L4%$jHy;%ykVmKa5s~sq3dc&#rt)GF$xJI5mtNeO~}PY{bu_8IZQ-ogt3ugb51a5Ps4gz4BeiI4cgTywWtT? zRn8KHPNB*$+-Chskji6sgxVFf=H@j#CsSL4WP!H_HER(Azvk{?)SQwTaL2q0GJE7v z>uGgB5)f?T=?NfkOM05a13doJqkTLBcR273oQ<6w!%=_G@ic2OQ;$xJ2dUx4B?iwE z?BO{K42-m-Mkf9YM@$g0D4S_Jt1(XV0HLP>1HQe!Kw@j0Lg;NP0!37o%qfH!EiupR z(Zk;4p|tz}4DrLnHE>W0n~SX@C$0(EJ90B^=ZQ%D7!busL9~D^Z}Gj~`2LqaHgz*g zWq!n~a8f==(6_!yCuFhp>w1nQ9yf{XJ0Z^-+_p5zsggxd&l0L9B`*WG48u?SU(f%n zcWFy>NcQuEvXv0nttt{ZMq{N2C^6K!mbkHbJ$kM3Ff1HrNUNhT9SRchr0AKu)>R5U zZdJa0W#w2_Wk8p-YUN1-_81fKnw22d6v~z8@@gm;upk`96Oz|Rc$Jt}QbF&ybkBRr z5ja35+lk+*5@}|Ly-bl~j`LIJzxQJu7oC|_0#_B=DL;)#g9YBjLQ`!cuo07nnY-hd zN7&AoNvuhf;gu(n=?~zcvJHoeYXb1j)KeW5uw%G7=uF!V6BNrdc4^9e-11?WzyiaR z01F;F2{icV=w6o~B9$24IPo0;`(Fpv3v92wQAk;`cpV@+CH{-= z?2(@ncuc%>!edf-E2ER=%eeSJrB?W#ts9gpuRN-usvBLQ7yq^2q5(U`{lnM(@cU0T z|L#v(iJ=Sn?E$;oNsMuZ#c+KCnQ>I7>GDirv+_}i(8SAAzxa&Wf)ypJtiZv*nxaEE z2G0nVv;38S$rX%9cAhc*$f;XXwKDIyK2B;SJBwiJ{yN589rrq$w8<&;OlWQ zv_I4w^;0S>g7m5%K}|#Q4)-Pgkrk9ydY8kZ2>;fm;cfD#inmLT-H zd_vj^<{7YdYK!J?v9(g|+naYB z`^RN3VGc9NkPrWeg&aa!c{<9_ZUb80LVTu&ASENu`h)#|YrqsW!Vh$CErXEd&e;QM zfk_>j0HV2SZjnzENkal?VQ7#s*x(X89BqaTzr%mufA5FCVaI3JS-Kc_^w9gjlmIo9={Hq1%EskFLj z76iti(O*(^?V)DL!9V`RcRrta_!F(M^(sjL6Vj4guocLpaEgjw<-|r6EviyEDjB(N z7a&6)_)^T$>x}_h6@0iv8fxHPF4rei6jpspr=QJInu{pyZFa@i%b z_6CxUHb>nlhD3mbbd?jv+bk&)#!>jU*}0mL~9_kidY^9V&}X- zl^wr$$ps;4`LiGSP?*`82lA&=s-dee5Z!(ep(?TMaQ&ff#$04;iRK7J(7S z!$C6?+Bfw0v^%QK%0^Vh=;r7tYos`T(P6apymv27y{k3YDg8=PXFzxf>Cw`I%a?5(Y=SS(JJ12x##726VdWPUi}y!k^G5GhMNCWL^oPJR0;M6e=q<+7Nn+fm;faLJjAn zaMclGajhZaH=cSUAC=;DceCwn|7ra^v``ZomX-#rJfH zj&NrI1#LCQ<*H*!jGB%>5mJ09c;!!SfB19$tCzH5!a@YXLOqDv5RJvnJYQN#BqkTl zjW4~5aXOaNo+R`z*p;+Vp~Co5mONk-C>nt$y6aDTnfQrK6$86UrEJZWx4M)I@*q$V zypIOHKGCRCT!v{!VZxF%Zme`Mon4k7bX!p+?K8!9AXP|!>Bi#b#ju1gefKZ^;}@IN zi<6H7m3p1pk1>=BIuwYd6}(XK%%XFP#@b+0P$@yDZ0Kgdi(x`-D)SJQ#6dI^SQUT> z+Ho>h1NSo&$sfnr8L_fB-bdBdw=`{t!MyA;fuml@W=MDK}m##8Ov*ekK zDo1o>lWVn{%XSrDg8~<-Q!aUdstRnv7Z?D}z$GV;smqWk?m}ysIlvnRi1-cYc37Im z!U|ohHz5PaE`?3mP`G5-_zm3><&i;}zv}Gx^}qR_r{DB*YP2p@SdD;B8eFu)9i(`{ zfL+Wr1kF1zOTew`^evzpp=XuRi6n=iZ)ZpYwq~D%fK0t)j8`xrv>4W7$e?2n$f#Oj z`7lL{U%~|WS&iNmTU|5+i3<=lWPu@(%yaHyh_IU&@9el5UG&>9`z`V%sfo_8)gR5o zZOjL$%>or4)}OQehL8z-ANVuTjQv&3^yJ}at7%r`r2$VBzCto>yC_mpu*h7OfiSC& zbg5(54~;7ZI%ugBl^*H-?$@7cu6!WQ!fzzR&~6&Q#foW^Gq+__ok+x9o}z|b1%Az7 zpfFxT0^ro>rl13=3V5g}3j-o5Bd>d7D8}qtdw)8`nEbgo(RfI9UrS>-iy{>ANrrY( zF-q3z_MN>U(%EV^h78GRmtY1ME3<5yQN;H&M1@qfYFN>z80AG?9WR^**?QW|jJ;pZ z{^8C)Z*IKSUh*Sf0l6c_1WWui0`7sTQd$scf7i4t(SkmKE4ZM|5QD0^jis9W7q~)- zkJq!=Sq#p^OU%>O5{1OD$NgcFM0!n2V9;a7(gbz6 z*pj5W8DLDIg#vH6p5@3FwaVMz(p&_&Kbg32r*B#_abn6N9rhSrm64#{J8$^lJDT78 zYdzT|mr-&Au)u<@F&1*@uaGdwr}ny}H)=&*8AVPje%2CsP=kbD>(as`<8<(qp~mbQ zUP&3od7Qm*@xX{^P#MK|Pwuc)p4A}KQj*n6z=oRTL%2$#oIG$?hBC|}o0i@{Qb_oe zQc8LbVRAMx)-CO_$_>Unb6-{1#fRJ?ZU_^N?Vx^~q}< zTdz;?H__4(soVmv+HH(aAF}42@Da(n3|uvz=DsEqIbQpbbI}vu`RvWd9*DoyN6QYJ z9=HnepMUG`kKSl%N}3YanE+sp#mP{dl&zKYx)!z);=k9ff8^=x^ON+lH@V`@_a+%m zOaj*eF-G}`2|wz6+(3Pwlp_+-KYoM~#S?FFHGlutUp=SerYD!9iEokr-z7P2(i;~= z)7~h{DO){8QLk^R-oEzQf88Uiv(JC{ls);idH;Q$->4yPTKXwl`KDhe@ih&8`04LF zGSmEv<^7r8^80^}3_l*^Er{Rbt5z1H@R-PKKd*;%Y4b~e_SLBiO~t%ERc|c*XPWHP z>8E=8CXk&f`y0MnW`h==F26YSC#`I)RH5Odcg?@3J%5k)@K2g3Z{_+w`!{LQo1pBq zjc&C_t$Wk!3%`B$v!}oRQ*W9ld~>ON^0)g=e*CvQCG8bkChd3=44kT^Ei5bp(fr;I z&iT-acYaN->YH6ZmLhtyf_{Xw6Wdgf@;UzVre9lwU)REuKWRSrxou}RfA@)#-~L;l zS`ZgbSx_tWl!@`nQ-1hH-_O&5GBRFcjb3~z0|z+fB)Fuzr_b{0qiNM_ZCGe`7MfleF@9hQ__ngKj?nC`OTkx zeYWFo5LB--cX^R`2W|~TIam*^51>D`TL(ZbwT#ll+%ybdL!8z6&bhajZ)((%``}w z&z}|@g$?6{Q+}-`woEL$KY{qh2FJg8c<^)UGe20Hya*ZFmXlsn(_Uttw?K*WEI-CKW29O_D_0>d_msbJ z2};UP@ZO8={pcm9-?U9}kK>mDnRZp}S0vRH)266cMtl)ia+vFqJeA_VCt5o>qpjYv z$}&#Q>(8_wKR8wWZI!Qkg1*aVxlI$7wkv35wSX$y zvs%mR;_6QR1;>D8FcwZu`L{ov*zzB#G&S|jFXM%nAx=?x^B+HY(eIt{?96h5E0jj4 z(L&%>a6(1y15kR3UZK|(VkL)&Af$x$E}@o^?P`%cej0BP$wtxQcX0&G?&G0)MOdBb zjAC_h>6W%!aHt9ikXbBlhMbTlzVv}En_`i-2w?mo{=L-zT>9PbUi>G``~JC=V#U~l z##-ZxNf2FuRl~qPFXI9A%CyVBI7i+vqx(6HK_p*VD3*66CGeqzVA&&rCqC4?BnnNS z43|q%oSXQ&1t;~LItc;Q5g0zllE`V(DYLBR?s)Ff7os|h*% zE8ZDYC7f{GsS^~f6OXYK>lc3O*P55N&Z?ncO*FUI`SB5AYjCMmLIQnWfpTjI)iM93 zMeSL?(!z-bPHZ+r61`Rl#G_jUCCIWz?S5;hAYSW9C=1KM+t+Qd%iD2jtA!5Boh zT9~j=V6Zrr-37;a?{{9^($)Nb)>--dgtVJ6Mt+BYzszC}TeH$i<}agGlc1m0=Rqz+ z*CauBKm-D=5+yh}wvOXfueMeY=>xCGj1w07i!~T08np7r?QHiTAB~z|Hh`9djZjvN z_fQVN8Ltd{#^M-ff~!PsBM|cln3=;kn5qw`&o0roHB?cWrYCE@52f%E4+DSV005|ypw4>Si_?uY92c8L$U z4gfL3GQ*HQo{tQZ2(w(8Xr#?{E93;dcB-4+che|~P{GOr;vax4d#v>0ZQvKDKFh8; z-OGk4`bH{Y|oX}S8aUChr4!JY_iTx2gHzFP_1VQmZ+xWh_`n`fyo zgViK*veGJfrwt23roI}tKn~DTPQ{5#541`caTHZzI%`bUIEr~dmC&yOeJmH%Fo$Wl z^m=v-%!4eD90?s&Wn#Bg~W}Q7ZuT zDBMZJk`ukfo{(0jQhxp8J3ev77YB69wZKrBL;?u)HOB+`gLCHjX|6%u##&9j&AD1h zHUv+XW1b-gIABna?0W)F%~vt({v#|`lsdKDTUP*-Hag@4-r(>7g%2S6k{ zD@S4$=euc`j*V56m5Xvh)ij2zNg66K5KrIZd!IVRrLisneG;ljc3zIEUy_AxHWp72 zF|kI|gg&RJUFEbxLPa%f<<%^6A_kPi79)0^0v~6q&#rl8^#_lARPU3ExkHdfBLWwa_arKr)JZ@uS#~yNa@tSC_ruFB9ABSv}l(868l#k#vN@ zG|>8GoJNOMF1r|zSGM?tzDV>e?~*F?aZ!0SL>_YwEsCc>=+WR;y3V}Ss=*dD5RT3l zfAgl7y#qgW+-F99Yud6noz=E>3Ta0L`KAJlTL)Yw8)P5TFy|S0HY(JKP_nA>)2{vj zMl#rJA}5cIo1xLQwxi6W%7ZP=mz6Bqpc7kZmJZbpm_fKl8*S}lRvVM0&O|>>yECEw z4NK6#*wqDeQcq)s4OQ~=lNmZt);UO<6I8*v5lmU7bpx(?(Z+a=l<__rB8-OY;9G^E z_AKNBq%L#lVLap{e~?S61HEgw=GJj;HmoB@Bt_X9-`#A=gKugyEdIbUI@fOh;pI;? ze|<52vi4Vx!{x*rZ;7IWI&L70B@;zW{LtO>*X)dhsv#1O!zQK~?+#FoBVtB%3K!cuoutvjK`%c1u`Au8?IkAC|1Kt}Ct} z7YylMM{_lwLX4YH=?Ds&dCKZ1_G{Cd2xVV!p6bjq;6Rz*1$I0$S-R zqcU(|O}n~7Bd;bCg}kDulDDrb zbdDhp-df~;3LT7vM}@#BSd76W1xnzc0=RwAd}9^BIwbYFtp7+<;XL17=sFvjLCYCK zd3IJ2j^G1|F)*2xJ18LB7;cGNs?Zxvq@|u%eFBmgx2k66Et#1VI=X0QjC1E^Obv-# zp-Ljo+U$vlRANf6d zWqCm-29hv^ikP)bdS6nTkWl>O5?i1ev~l=@*LMdpZ5=wl6l&72HY3OfXBb49>7A|D zH0uS%(&wUt$;dgw1Gb1}w~-`HLiy2K#XB;Z1TO8%izdQmjz8$>5MD+R@P|HG!9eC$ z)5hUZSR?@8Sx8Ff#PbN)b5m=_5hggK?ckg=4Y+98&J(-gLi0TX0XVM3wq z$g7^tW&~ESehrejSAP2LKlxxm5(ztH%kE(1ny?fd%@Tg1css>y{ z9J*U5kyayWDC(d9U$m6D?%Fao1Rd5LU~7hE9_m|%fMRv$%i zz)Yu|xmmFOQj6UZ@uMPDH_H(c-{@0n<#$$|BJwb915EE&%e0z_;>76{HAz*$GAOW; z3>O|vmj!N}Gg-+bo>bShIF-E-Jz+_#R26BRR;yr2!i352f>jigw%X|9kmB=iJ@kp2KI9)bNMUvra8wM>2D_{WuH=Q(1;te@qX`zP8{)dbY);~c8PLY1G{h@~vS|clT}n=VuQ!GTI;QF` z$?E9%7%ocU-SGmIu7UwkUnkW_Qz{S4YpGNoswrGiF+`AoME=?faePan-E{N!?#ng* z?z5Ia(J|NX6i^JUm9T>6+2{tJTa2gou#Xb;%Y_G=6l{+benAj+fM8^G-hlZ6aYcf3#%zVFn~-NDh>SmV@#2bEd@DT8sMwzx16i{&DkXYbrIq03$z5 z)_4)Zfj(C(*KaS99M+pr0uGHa+a)0q&z7x1N`gGP$nr;w{m_Z@m0Qpc5jv1B7k(P~ zD!?3;TIqK-esK1XN;?9r$>IuatubAqRjBL}^sy0}1zD;b3dYMj@hfPyy{onk#FQ6g zcvq?M6>FsUevm(*>kPj5zR!Jl#s04(IqVP38I~cYhUEa>q9id@u*3Msh$JM(Ohd-% zw7Qv=d;^i#sokUp@8T;!0s*=)1Ak?~kq~!XLlaLFY{XUxXnZSsz-9;UOcGj>T47;(9K7%iQFf09iMJG&VYVl=(gej~tV>nFR z0dj?wUw8t?KE>!_U9M#46!Jf0&&{Gf%2m*=j zPJgxSi!1&Jh3RQ;kc`uOq0d3U;Pe0d`~Q0Sj+vyZD7;`;Nm^tYW|{d)NGYprQ9>ck zV&w=fZAfBRpd%BICDl5Os?kLb=&#QqVV)OpW*TW1>&_%j&CKnWs0dT}h!$h6szZy& zCtYQ^M1g%wZy1ZyLPHFYk;Ls*&t6O6Idd5i$7B##0STd7)Q@-t9DzR)xd3rmH|3Xq zzUQJV{b!$URg4JDvp-1yesq2#=DRkbIFslOwuP%*8FXA8oBslIbQUnPXupdfZ(np4 z)l`Dh^U=rV^@L-fjMwd9VDPK>?Anta+tF$(3e|Gm?Vo6Ay)K}EQz)`dYND)rBE z4#S~f^B{;iNNwzUfjP*k9PZo^XDSac#Ol};AX+I8Rx3?8VbQNH^<*6aO;xs}bMj&O zY6!nG6vvuAqh)1Qj=CiXjEFiaM#^%4CdUnN#uPqvy6i#RFolW3+p{9n+H8tF61^TR zk>3dx0Z-j=E3{dS%L&Xy1xwcCxWl!c7{sRTiO!t%M$@ak+jCLjKOWw(CH?A8wfy`6 zq{vziZoR;|5{ z<2yK_5-&XE+=Kiax@!Tn)!No+H29Evfm@1JAK_SnK6qFwB4^#RdkH#Mf;8twP7S8W zcFq>?n+vjQ-JYQ>GRnMzp}YUgp{fQ`2pO~UR0(x_L6E)IEe&m%cI!E3iM`1$2>jbt z5-CN6rE*idQ%?O{sKZX-8{w5o#D;3kLG1hb2v{t`kwicau$y^i&K+O_%m;@i+1uQi zU+9Wpf|`3YvvX*0X}4R?M+}fc1MtNmtqRC-7!kn-+gzQ|n*}yIlK(@+Fuv16YcR+{ zIS#vAjyWZ?GgZL!(qXP6@LX4?KTH4E_AYhV%;d3xSJY{jnVvh)!=>ol&?_#`>DXx; z`7jo7D4#mQ&Fo^Vu#$FcVnO{XZ)cFc#A~kni+}ypk%wDBeNLLZ&tFsEhvOzM-F|Gh zx8ojvmXjSb{M^e46rAyRg@5UWg{{r86MmL<`#bLQZr4jTAJ^>|CqC+S#=E_&+iUzC zcXE2*(pU8JbKZ_Yf6ZFXuw3F$%LnafOAfVEwe_vdp6yedOnFbH&Iyqpv|H~s-g3yL zN~ZRQ7PcOe6vqcPSDled#q5yPE~}giT*M*c{x-=LaSQ`GFF@?aA+Ue+MT&@}^?H9KOiC{a(r$ zkF+uQUCR5HeR83+)YE>c{fsvX)OVTvjOdOdGsl<4+#QvSZm(G?bL(xQt%FM(p*gGD zoe$b=`w6!j(mOt3&!1e{uG>%VYVQ0bXLag!vbpnjm-6W=Kgo}dnOr_=^3&UwdQRJM zi+|aFZGLuqsi$qn&HiN{pSm;qEB5o}+->^v=ADC$$!5=k`gv&i=a%I=5{}*1zG?E< zOzUUicc|x*_8t6WH(kCkLxs2TOHRTvsT9)&K)fQ3_Egn%35A`ev8V;B&p%pI9>bT1d@d1>=_2--AMsry_K|tKRv5zK zZGK|#kuRpNJ=_|$E188NZ&LQD_RL3ZB8DK2l5~rxnnXH5AKvnS$R`U|gqGH8lo|gL z^A-6Ly5uuoOO}XoB6avDy<&eYO294%3ZQk%&6Se0ldEcA$&-CStc&7_tLPR})kj>} z_msAi|G^~!n!jeZvpZ<(n^4m|NhUZARf)tgPb9w2hur(c2wf8js=WS=x;q;=@_QI* zxR!7Y+Se=UZnakhY@W6wabLadTPxo_^-wG11}*tl^ZIey=Yx*Lsctk=y$eGLy}J)g zQFJY>U`D_ZsRY~aWk5xP@WLI)-jB0`=C2BI=`!Qyb8Zhid1cYf+7G411Qs^x2P{=I zRl=RoaW|q5X4Nbv0w-*Q-rCe`YJkV?##s^P9)vFH3>#0UM`I76Atx3-t*#w+cPA=nmABfvET>I*l!Ie2uFN~(f9?9#>?6&U`^5lU zfq&FnHzIP}>&>J1pGL)XL6O5<6YLb;U^-Kf1v&S+^)pFzs*P1cZ0F5kQE7B@+1&v0 ziKUF|+{RD34`Fs;1MTuk5h|EdB)S`YPNOSu`!VRML;E_R=kPT5lS3tFp)HIXn1}t4 z;a-2%-Ne~PI+2?_s5!tY&sgezcJon=Nlg$3SBgVJ+BdS@!n*VHjq{M3UmA3cST+Cf znMba{Rv7R$F~H9u2ke-=)B}YUFc)G9VKih0(gW;OtTPeaJhqXH^+L2(72u(03u-o2 z5-&hJOCldHb|TZXO_ci_<56Xd$pQAB7>-6cs29?Vkm}C*^E#BUFtszajh=ahR|)-X zbP~>w?165(uu#WBD78NHF7fsk7SRw)NQ3mwN|#AQmz~ds6QZrI--%(%*ga zrW;Z>{f}hy!eKjZ@K$p3Q^+<>|9F};;_JE~*DA;bVIFLBH&#vLq29ge!(EVTKg8SM z_P6yzznYAx1HB-5X_ZLEsT6mt>h#WDbz~mP{~(iJysO=--F4kl^Df~u8M@Xl`-X0z zq=($T#!BYE=}@r4Jq>o5Xsn_}_9WsItL+rp9PDazHCED<)^hY%eWaQ1I=0Fk)*E)g zaM!^NQTLGtfxEGKp?hl5U3VUvQ~_}J0{^Ltag@lt>HWQs@qw6#IrgKUgoq!65nv6v z3maK8B&Tl17>Rl<7C2#G4r#@Iq-Nx&4gzDt(|x2vyk5vSt3>#p0w#7(><%S1b#51Q ztRv;1WRRj0h0voyhH*PbW7|gh+qNDID5f&Z(#hy`T|>A$(a+&l7%AD1zByi4+Ui}l zmcJ8>&TPv~-3ckL%+n2_r-M-%<(fP5{ELuZJO1=vx(*!Kn6Z9GyyM6?2OMt?7$cs) z1M&4i&P~q)<0_kyv4Ig=&Kg|hfHOFq?i0B8I8dUeu?j(myOEoAbB$F2#4~Z9qL^u> zy$19ZD|IW?}=cA(A}g^NxFj0C63VzX+m@l+OQp`i!Q?MZ}JQ{ z15*+9Mg>n-kzmelhddViVuwljWV0S26aMKK$qCJMlY8wzX`7Fy+vvBL&Qoj!Z6 z;aW)_Ekvu&l%yTNFC$x7r)->J@zb?}FwW{9zhI^ghK|#6s zY4?RjkDlZlHM)?+exIF;32+j}C3W{9_FU=oE~nI^P?#wjfm^ZEYNIbqGXZR3u+bHG zb3nHxWOTd_z349D*`?;}$&sfytC5>}E;c;ymgyrpC4&Ih1a216GQj>r`5Q%;`YEDp zD~A3mOgu-YX7q3zAr3uC&R-0@D*F@9`q0IHhK6s2N1rTqW-s?DoWSU?ap4fgX=AMu zt$z3~|7GVxOD`#ysOtf?IzD@RV$am3)G)_XK9t(B&=vi})aB`~or{p$oZa8Ov?;X- z$&@;L)zq5Qz3zdUyMMCrGl=f0d-&p^ONLf8Z#=7U`O+G4MQ5=iXT8W~yTeBwN}v5R z&H3)=d?Z8teSyEOxA{Vmt%Ke_9Q7^qHT$4{uY1l}{=4FS|2rDzb1KhIH^)b(%HBV%Y!08bwBP*$#Ls!n z#nI^cse#nGmCeuh9eFUdG4)K>)R$6+KRm_pi(N|^MSg% zf7jAL>Vecb=VuRpU})FSbxXhHUiKcEb9RZ%|> zZz@iG-FxCloV>Xm6Z}bZTIx`HZ)TPEGhIR3&Hkg1`JU(lOYib7VA%aY zpZ|oblQ{bt@8S^4->x;EDot#h8qCxmi)xK^QGc_i)|?p)Gf%9*K)Wk@03Eln`FL&U z@u4eljMt1z^>GH^jzRCzTC=A*)suSi!_6DJrgnGS>~p~AmZkGKWnsrw??5?q;4i$( z-q)PTvDxsB^RwG>&E19Ojl)NFd$(QHK=$h0`sNh_&FhDe_?H!*AN%%wf7mSjcjF2N z8y73rTZ@fS^B%$qaBgweacBf4|4AJ>isD3(ae`cK>dx+#*g$V8@_Azw}B~+$Sw3C|dd9ResQz@lm$nbMw?iniF!y)Ulq=lZ&%~%?&TlRxkucOM&H0=} zuVVbp$xf+X6YDyHmo^`iQxv4^`a*)w*gj~XcM;|+;DOgm(WtD@ZMiU2#A-=1ITNGB zEKH0N?9t9Fnr;wEqRco7>^-4h^XHgGis^#MvZl}+&n>Klh}$^qnPMOy=fVy07UO&y zXFa0*5_NZA;9KwiP;=MEmPsi4ufQggoNIzo!*Mwi^ww7@Kza)j!WmKAu?C%d6czNV zrTg7FmKf%}?eE1wcGr*!OI4W-1m%#6Iyn^6gdb6kb7%K4yN)esWYYEfSo0ishehge zCV8I_GVe^}8RAG`{e#T^%!Fv{4)1<;%Epjk@F4V#Vt{c<4D3`LdNAU=3rvK(C>LxEblms22nc7;JI}uv|o}D=1Rf$A*lscy!$6B+y2*gEQDTdPH_egl|Ji ziqrB0KWR7tSS7K2*&7|cFp9dzh~+$_oz0h znFIJC>-hYZp$|c3%U51Qa-#gzf|yWo?iOWho1fXX%}7ZCSbP34!lHt`wq4OEC=Z<^2vwFpf@G**|a2F zUOgA6#O{`j1&sm20ydKgD>yy@6}5()Q(~&5mk-=rU`KOHtK;CBMU$4tt$?C~yIbKM z3Q~1y6o(XtS5(V)f)zDwo^4Gg1{eDMvyLZ<&9TW9Nxz;;F&{{IlA@ zUV#7aG2R9v;$g_i04j?MJOq=?lY;Q9El z6&M;cLKq;Q7}vi5I~h#w)IA2ACW6nV%|fVh7&xxYEa#q)EsM3MAS+@Fa{v&imN>y> zxo7|E`!D`Nb5m=>sfNM<3-}s@l)ZUo_bqj?LV-gVi$QijwjVOwEPiCXIs9!0F>Y#U zr(TE{ib7I6%0LPyys*PP%yo#cEGGj;J$EqNQ_HUMx~Fln8CqbX>I(sGFV;Ohx(vsI z*hBKpG`O@D4+?8!RMO3VfI|h( zB7)#^MsB8d#sCXBkjhh+d;Mu-_%NbjSWd`e={mig6E{EI)x56{mGnvJ5Kwwxl~;cU zg|7F?-eq}t4@;M1Z?7y}LqmGKD2Z97jtH!GbH>DG ze~qT5691p|Z#&brLf*CsDY9e4-_{$wXKB*sJ!d0N6sGQ!)bC5ze_>*rd=e)*g6F_h zUcGp1+?!o7nvKQ&;E~nHlVf*zU(AIrM=D4A2rg{*uFNgypI9e)q&>S92H zkQAUmKpu!1X%3H#y(0Ux6MndF;4%-xPySz#2M48vxb^4Tj zDc!745C7>*%gLe3@iOCB56UEVLWA~)IGXAZ#MtFYwzt<;$wfkY##k^Od*Nx ztTPf}FQ}u@YkJ`={YStiq>te;LJ;t2QMZE%{xCq=qLIVlQJ5W|5*5x#Tp)nvOKBU8 zqApO!I7v*TG9xZ^k`ZXsBdUo;nox^Pf_Q*T>T=YfM@kW970d(1NU2tt zJL*;k!}LzL1%Nn*bGcJ7hKEdaPNq~GFo06fDG3;yiy2ifDyHxnNHt^}PI-qv!N>Ty%5mq@6i89}>mxp5VAe4v(~BEq#s0jzG0+Pon@I zIL;F(9Z%U~=R}g&*}(yjmC%(p#(3wfPXS@-X=K%0YI5Ql&Wv=nrWQj~3t!(}bS5t3 zc+2F>ObVamd5rR$r{(J5nop~=6fPW7?1<;>vSU7bGjj}DZgqL&>`I2|ZoxI*N;`PAMsjZD%Fd44;{!McqRK)o z@M17OCJc4#*n)+@u`-RWiM@mr9z8aa#r*X+8gt@fH1$!=&x99M%ETqpnfjxh{w?09 z%lVr>$$^(w2@6kq-GFvMiXg;Q(=YY^!nOCbzxQtGZe1l=M$*sDylGH{Lg+8_IwTXS zns~OnK_t2ZvJsHd@u&4^gk=ZmvEa^vaEeJxDKs^u|?NzmVt5zTD zq-lDY1aO{;>32c868JI;0K&sAD7$&;0S1`@t-7%zSfey6+q~B+p(2CqYI+I}4!uNX zT$EEcj;%TYz?ZXL5B1OvjFiMKkh#R?_#$wSjx9hUr(;V1vw#~VFk&!)DZngeRC5Jj z5(IQR^n;83>cF47m*(TfIyyWONkcF~f>%Qb(kb{6^)4{NNd(ckSk5}5S27E*v_?629PA*e55mTaf{9CTh=V=(JXioQ~)+vqlzOk2|*F0iDp3rM%@HA zmsN|7c05V52wLYvais|mQjM5GlG!!LPI%L#sUtxYtN)FtmQjC{quYy;O^_#c`QAXW z9K%aL?(?lbL0*AEnK73mN-xVnrw4xJ#l2@dazkql@lm`fbT-yoy<7NP3_66}de@L< z8=w$--4P?)vTl(w)?i~or;2O=RE5-6+2r-fbdvjvMi4>H#BL?CQ-Sxe{Nv666TVKZ zj4(@yNjq9~s-cQqDI0o%kD$^9N;)N(rmm4c7fLnNG}xn&3~>)b2~ghcc@34yF18vX z(3{H$_wbR%@k~ikf+;o`Y9}g{XjF7kznV?+A36lbTx8l-2-Cf$RAP@0t>WSF^;sV2 zEg`3l81`>li{;RA%?G9Z6^Xtr$5^l!-E1@?(=T59{QFm2G}%%sj4P-+$;y6xcfx*y zv!gC#gXV)k?{4*`8uPp&MA<=lT$v|`Bv>Yo_az7+y$&gl(`dOfnL~e!Se13GkXS4S zqMh8C!0HK9BDA9(4HG53$&P|uHq(gqp!_X7a=bHPJTgqNboue_gfXJg0zoSE&pEIO zp*ZJKghKrzgpX@~OaULU#qkAkf5M<1bakHCse6=>DyCiRoKFxSd%dZ~%+l!w>CfilZmKHD(_sBgD7)$ng8e3s>DU(=D__D+h z$jFg0o|WBmFv6Hy2@!-+MR;zgl4;aaH=%gAZI5&de{nP&WDo7PtqmA_2s4C^k$0vT zIF4W;&X&clb)x>Lr%^=qwOn-$i9n;+k(*XO(_xVRXap3>DDUrV*ieOO1qeAm4GBtg zo*rjGO^F7l@ec_%&`zj>zS4)W+dk*xI+q1U9(jc&NQ-eJO>UJq644(I7022t*PZ5D zP|Ms+cy(68bLPD>E`a-ftOwoFraGRM!|D9Q;a_^W`Sp({_&xpygq(Z{lv7=;jIH$6 z^K0|IRr+i5|J$D7hf`fIe&RcO-`o7<1Ff`9LZP~6>R}ZQm}WL1|6>t2eL+gM&i#xi z*<9ZfUdFfH29g<;K#=e6ZlL@*qO#rTo+hg8FpDu4xU6NcJlu5?KPALtTsQ6JwJx&Y zFm;yMtsYerrZwld)4PYRXSYM8&h~;c*Sjr53paD9K%N_Q1ynK&C?}Otj9OJW7~-RFTL{Z z=69|>v9cfGJ~SYIgp6^P7I*weAA~eBUdmxNCww!;{RuVmXm~jx$6MZ>z5b%VYPM^|7dQ*^r#YpO^r1dZyIc&;m~+>0 zW;AjABZ&J9BV4fNoLgb|2e!zM&80_|y zQ@5lN2tUGUoB;J;>ab4epU$s{SS)p6-1L_~<=u6b`Zhx_HYwM^^ zg3ReUXLph%IlEKN>DBI6@xkU+)UQIN>#$Cc&Ec7Kj=Rh}dzH(ZvinSK>edz8Ze(=r z$zN=&YrG$|aC?q3FF!W*M|#sAyp8F%t9kLuQx|5Q9Br&`Y-|iJZSkI1@x%&-b&lML zpnIl&=|Y_ACr-oOBYER9zx({UwjF=eveNo-q2}DRUPV(ilA|#1(V!t`q4nbda`+{B zl;M36JFs2u(bKg1vd+S!&(~6lzn{_H;f(O$F}dIcQc{-Ua9@=oUu7lWP4sI$_&r0+ z01o_lNu2@~-(Z7{1|BdVG?OW{-R<}1nZTAu+G|ScPzejBZ(_pV6Loji(Mham@XA{InQ)7ZP@##b?Ze{)O5?4ZXpcm@J2_F4QLvm%o|r1Kwh=$3p71O96g+LjsOs#%ws4+)`H#-2-*xOut?5y3*+oy00ipI*m*m15 zWox;S%jvO*IiW}su9B^-loLcv>4bczyp^oAO9klK@i*W8^FL^gE>{;w>^sgLr7>#& zLqd1DB!WXl(e*(7i9_WI|=|8(?brl&H(Jf@Gz# z1>~1HQ?!I}>3oP!!T+sGpB&GxoKzEdmMmz2*P|gx<@Uk`Ct|@2->E4Sf@jLg9~R5g zgvOwA_qV?HJ9jrf@sIX_YN+{~%)pZ>Ab9E=W9~lSNw?vuM)Gu7eH@^z=xf3O)}B+u z&AqiVJHj`mkhql$Jx!TIrMV?FJf1yB8VzN}6Qy|f5FZexD1&hL_(JyreI?N7IAmv~7lV3b%>YkQgBT{jZ*U87X$*-{iwuT;MlyDX87lg#uiHp_rCQ;Cx zULF{dJaNe}hs3Y6m6G2|r8#zufxwy8%j7R`mt@-{7yOmeZ32sKY4UPOPF_vm%GcQ?9PSpv~q=N?8>oqAV5OhZ*`Y1JL-IP4WjWH_~djnlvxQIJWKBHk?urC~Gvu zQ9OIbMu`LLgJlD_sj3cy69Y*?csc;^P?*XA2TS{yyvc@Lq}n5!(BKCVzol??iDMN; zEHHL?TT@tm{3}{Med&&XQwo&*mvx%Ia{EQMo^kD~Eval>tjbIvuSDO{76Ix_WIS8z zhWUujV|{^w4)VHc^NV;x)#5Z>5vrjQbQlmh-A6z!SILRa4RA=A55y!>%IrfiMQ3Uw znHpAd&osi%TWhWqdmS8x_af$!AiFSN?j@7DH`5m!$kGoQp4kKEsKV8I<9v*wYanDI^i4j#?x2JyM5NPu7r zvIbtB+O*u6TTs*zumy6HW)!asZ4mFy@W#&pOI$P`2sB%5q^hdA-^07Wr5)vTZ(E%? z4rMqe?qF*PXR?Qpfdx1^c+ie$5(NH?rlQAJKGZrx+H1H31p7o##uvemIL&qn0Z!7X zL*5FmP3RZ2hfsEmHz*Ilro4hlrug%B_XXd%@E>3Nl>6j0@e60Fn}x7}H>rAP6RW!^ zl#c;R+`l#+2DA94me;Xb2gVY{@*&B4sGs)EW#=@TT7kr(ma}MdgHLDpg?AU}biIC= zvgu-<4Q*O`Rn;SU`A1{(0f>t3QM>730h*A_$Hc}qt6rVnaqeXoKK&JXL|3)iWNZ9m z%PaLg;Lr^^s>lzgs(BVh8;ai;dVFHNuA&=cy?*92shsr(PAQZIVklT|7ehvB_a$hr zg7P3!diXzl=I2+Ob9al$RJ@xD!gwxcq1nrg^mIKC;0(= zz*@4BDHjF%KU7cP@l&-ZsKkQgh?5Vz0YoXQ%Zby(C}2TWcT}YL)a0{BLPt;%lrL&g zLEtX3_>gy#^1L(sKrZ5fSrj85s7+K;1cbo9m`~@$JMDuJ{qAaIz)&v*>~s9(_22yT zdCm8Ki&u70oWPk6gbT8WYC;#p6-&^=MK})1B>JO656u{oOoY$XR`CEE9_b#Q;eX*x z5h?~;75YSat6S3tX?fAUK^u@Srh@jdlQ7G z<(F1SM8TY22`C?2x`3o1m7;>dC8nMhhVJUb?jpV=)D|$3s0Dl9P?iFusH@qdQcJR* zR58H_IY*$a`H6qJ_9lPFHw5sHa?QYJeCE*pipgEc{Be6{k}U;C<+ za*Drkrc)%G@M@gR{H{G3GhzZsxJT){{Q^gHyP^wwXc|Mr;E z%u@l}yd&?$$puW5eOe>IeqX#zIfAV~rjL^eC=%FOp!Na;Z`X7gsLgIb2J&WJEl}zF z9p|s!@8dl{+TXnLE4_P~IgkmoKOU3^_5oj^Ed~>%(`IeZAK{8k?u4t>-!+0msEolq zhrgC=2&a1f#<*;AZo}YNLx;Jo;4H0-akvSL1MPcve*K%-PyOpjbVfhC?kYxAy^F2M z*QKh9CY-vSEvl9ox8h8TS8aE`<1Cd6#M{QE%$2fx9+MiBl3detM0M!+(WewcuL(!k^c21eAs& zFz}X8jHt?(9}+%zJwG_j?PEAQAb#B6$1Kx*&0EJE{u+0RX>akJpUFE7R*;;?vvbUr zq{l#JcvT%I`9rVL%Q9&d1BA2&jM&%3pU`VD!n-QYQpqnJ>&}+5x1E|_kHMbj(C3t# zhavU>CSW~FpW39>&;|1ZJ^3?yGI(1(=b3%Zu>xjg44&bQ{+9ImW;g2BxUmvr5N2H} z&>dmY%kpvGu|5Ti>MGsY1cx7YnD?NrH<4h7)Pz-Uy8DOk>1rN2&Z`0D*C|*vp=1$e zHS>{YOwU!GP0MRB!E63v+l<*O6jO_v-lF(Ue=8fe#hga@-P7LSYYIKZqxLw8U3L=l z)2zZwxcd}&DLmoXW$2q37F^vaqA$>E&k$D;PChn*PK(dvx2K zPP8fTD_U=lmAn|T(@ZJoU~JFX6S&$SVQuJ5hF-tlJ#|pF3d1qp7_$Z_gYa0%jPV=H zt*H0L_UN97!Nf@!3DWm~#BUX_oEZ!O_Cmmtz)ph05dfH{b17$0x7A1%44DX#IT0Hi zj|7~`dirFP3pG2qjTDts3S}K=@ztE4he}Ku3*C~Ch3olLkgm$TOgUqB7r+1Qx#sWv z>T&$jN?G68U2RT(2U8s?K?W>ix)^z75aV^uVT1wd@zVIi?Tz0wItf^vD2_X${ZJflys_;>4jh+U^`;zZ=lgu`NeTh2mLm z8*lKplikLD@XFS6n;-gPeZV!8r)cb|Dq}tsXW}kwJP0UDT^C2v>k2&hvZJ5XZ*svI zDvr%skvJ+vFpjHEPG`>K`4CpQGf0;xHu}@37$Sbg8_fJwK^Tyoeuev7Xa=GBvlAvkOL~D@HP#^l@9iXc&V4*+AA@Ap zA?K&Po`o}w5e5{WVRMsCf315T2x4M{{70wCY+Q2`uaL7VhiMG4<3Ad@1;_wvE=!c_k%r4>!Xng%IR)upfGE0m9>9v zA+pCNDXEweU4_{oZPq4sZKXOsF#m&z{q4?ZN9n~4-{bhKuYS!cpoCnIea-_hSoz>m z*WqF`3W>`CLay+fn^Ru|8|exyG0)dN~izr?{(PKk=ZTIlWpCZ{xHl;p!Q3?o3Q zB<1*@4|2g7UkZ?Op~pjf0XZq!Mc>nc%0o!xBKhU63&rXGp)uZ8W?&zoXO%G?A z6P2NcT6Qt;tAPS*2unPCGO*n?$R8}SLP$7J2P36T4vOm`v=G((tJ^>Q_&bH44#GV{yI6{=%M{~V{q{DB5DwZnb z&Cvn$o$utReO-j&^~0W-~m#YA_0au zZI2pe2vvZL0q~pyVP+QqyIY(X3sN-`as@3_t^`tt3dS+pP&d-4#MklS34s!b^qCLL z*FYLw7BM$rK6TAV8F9D+T`_XYT_aS9RWb-+SlI zcr=y`7Ge;tW3I-dk?a_3ypGo|FKw>II zKSNB6szj+ZZbqg=T)aU6=mny3m|LKXZOA$B#tX_QAl9ZF{F|q2CR7w!kr1XsbWm9) z`XYi=xs)d!Vgp20wmN7~mRiFEVe$#^!p>C*7FElKs1TX>w~5-CH@-C2+WsGGh5P`L z3IHZJA~FM$7wj`y)}e=yRM=$5fh;bfzcfYnd4m2B)j}TF+e4UxWi!ajM_n3>2BoYu zNgWxTj>Hus(k|o3ik%qL*bdR0OeK>{ zaW=RA3d%rLOfsT)H?#|6xn|Tbc)+ltrYfL00QE&@BbJruP|<7UKL3IDC8z(VVEcgs zy4css?Yk05Vn5mk3bYVsQD~bw;ap@tKPo^Y8T%_}Il{=sR?A&R&qGvUVhe?<(S-)E z2ka~^1Cuw*z0ZCR~?CU?r>6AEV3 zCA}Q_&ZU*F&)w9#X>p>T*Jg+c3m`(b(gtdRQ5wCH=e>L&I0~F$L1n40=8thhlRi_H zUt~!zBgCNOZ$}%%K&VwTPy(#XqJoH>&bmxWiyo7c_pWdegTRfU89g;IHqrPG0ry>%5;{ zrONHWJs_~aBR-vHh&+?VD_~yV<9gPXG2aAP6)?we}Gt>!h}l|fGbpiva-Ak_;65O zAggW}y8;B1Q;3@B^iTifyaJtN~s+N`)XPLaqp= zZeXk~`i)r{ZdKME|D)Eg-4@kqiH0X8+}WI{S-2zgkytT1wWgs(FFf%v^C3A-7Q5@r z(iq)BFola|sZ1Zz6ac{lFai!RF+9Ztk&Q9qzH>$B7iD`)B}i-l)RD{0tP8N}iUY-; zrE-jZmdFbZ_`dTI8?;psEVhtxR+iOtIUMGEDVIFmp(B zs6!Qg=@3Uq4Mp9eI+zDHg)$(XEAOmsQH;Wf8kOYFMxNUP)6bHTr^BL&RflY1&_k}N zN^S51&GoDPTZ>y=v+Az>AkVdxW$0JiAB;I3Q~juW`*p6;C+__KeEVZHPfzuoiBDYy)BgyarYsRD++<-#i611ng9) z#aJ)|4=n89^#QxT!hjcmk-{472A=U7VTO{D@c$Pd8h%TJONPM zgOMnOXTwi@P!5R&iz}*Ltdeq^hJLR&s+TdeM#T$;YC|8Ez%Kv};UhZo{4twU|0Gr> zlBRv1KakB=(_o#Sj6I7M)7TIopX-w$&SO7EyeHy54X$<_G}ex+fV?nObDiel?_E66 zdXU%NI@;rp9>|Q4i7y1>(9v?}(DHuseQKVu4 zN2+nsey2!j0Q6M3RYf2ICj^TN@a*Jiq_iNk7qx;V2cy6N*~M2J#0Jk8iuzqFC&)rY z6_#>lg9VWWmF!dNtg)xK5!>eVX5O)QBCaVlR0!VO^@X4LgT#M*K57-nq0<=NCM#&* zzZt*IFs-6CuS}9EHrcJkD&6A`5Zn}#1hIN4Si%~xv*>R~z45$bKB#~)IbQHJ_{Z>_ z>LeoqgM!_VDmMNQLeO+EpYITX zxH3oubCNpr&Q63U>%I6p4}@Mm^onj3@f7$|u?3#ufR&JyB%&>Wv}KUD$bRJf_~GP> zVaG*qIhrb)zKsurNw$e3i*Q=bosz)HQPErno4hvm1d00AjfdnEpeXYOF?W!iv=?2a z5H<$_Z^01oE=+&yPjB@$d_fkhjx9vY2F+mTZt>=P_-g!t_!f2svsM4FxrjAMfHse* z7o(49A3Rbq=%*Xz{boNqoF>g~h|E^v0e=K1`zmawQ`q!NX50lX|8l%1R%4e198npc zO&v+DN$q$0$ciyZ$h5w2KkEZSua?*>l-JinO~U<@9PrXhGUh6?mIjD6Y`z~mrT@X9 zt>e$enHHFYmu+mIgo7Q!Ja$f8%~IOi42q8RT=73+b>U=ZolSQm)ax!VU^anI!g8aY zHmsFt6a%FMP-VlL+6$t+?l!LQtYN{%Su7*gBe6(4?J8SG(ao>~GGrQ|=xz%6&r7pu z5x?0?f|iac*1(WYB2|o~iA?2?s@@dYR32c6r@BI@q!_3v6AU@R8Xj*;vVIumKgAXo zg-lrA+nEiMg@5|sh8JS>KeAMT2fRw?&5{rY2N?07{LfYM04QBUoUV8LFqF*%o!Xbo zh9U1|4DDFKTtk~X;13M~vH_a^9Hd5B2BZCto%!+e%bfZN^WPjkJ~;j?D>ah!GNX&I zYC1W>jVZDhe~FAIh%omQd2+R$8nY^6ZVSERE0_=1WPUni%}kjoy!j`K; zeASOSmEc7DZ`QCZ2AtHPoQ$8zj!B~41MaENJ1E~CLQgZX#H^9sn_9mLjfGzpABM_V zc(%{1W>}eHW(6!tY=MZgSrK>)sQN$<%bSmx9D>0d4Vk>ixie_>$cDZD| zee`Ojy4}yI_vm}hks;j$hx`I$OH5-y;p}^*6T8?z+?!+xsd1dRn^kQkSd#4D0v$_o!()_^3`t zJ}D@UryjkHT)3^Hx3#*@KYo;UQZyO;-ukIlW%SbN)QM3N)1DY6C+&c8(hkJ;oTZb^ zLTc~%`1AZ_;B;3)E^Ev-;=s^xVfEdzpZ`eT2+2OtKX7-FO@p> z4kT!`nrRMm>b-Z_-nH$Y_}*UI)NJc8q~ugTBhinN4ny_S^qAVzc{z38aPtB`^JgDl zuRgA~eVmO?)6-dhy6}%TzW(Qb>Rp4aQCr-a?-DIL5;mbo3R+W=X+U7;P#S$*Ic;2>;6o$6z_B8O_nFzBeDBRY_!2( zV0HwTI)cjNn`M9BgjWiZf(lih>}ik_cp}+*C7H>2Z@oum+@!uw8@8dEKMYiH>=bvG zw=%K1{C2P?8fD^rU?N2&-9zlK3p-XRG4Mo`h<6$F&ll#W5X3&Q;0brS8-%S&+FZpB z3aYD7YIb$*$e8>@8!}SMu^Q+UyS!{I+r6nowb3=7na``vD?8K48+z`~-e0hQ`2ZH% z^{pTKrFWm}_?hjCtG#7(qUMPxpeQkV6ap#B1|?87m}jNu^n>yfjnXN1NGL zGPB|sc@7UTQFKB%7AYzSqnJ1I9o^;(PNt1J=yhy0TqrybCS_7(_8g%sXNl?p75@_j zP$#q4#>1u(yz#=z(_czHR%_eLj^ZIzeV(o^SBX+d?ZNFpMF(CcL@!Ns)Tao0l>$mY>6LmXEB(9WFL9F&bjB}eDV*&gx9+| z`cJY`tZbcTwwjZUe&_+#kRBJUE9mF#;2=Tb97E@@AW%&t$|)%{MRUrjrnv`@1G-Zz zP|z|7HXbnzjqQ*c1)Gz;jXQTd5yW5Q#UdsG{wwwid0}Hk!Ui%Mf5DyYGIt=zy%{99fIrla@y0$eRObr~c86rSU`Pb7i-Qh_uf? z=+;N6c%?al;yp87O6A-!Lz0^`RwOjhCoG{O+x)O7N7ZdCtr3hPf0CKOSpP?rdu?Q6 ze!i=jcaM_84k#x5viiCyaEq8^WVP7}m2&PAL5i8Bew)uX{t#A+xV*ocY-_{N$+8mb zuj%er$o5fir~I7wy1pH3l-#k98Xy!YX2^}ljSL_X3*jpY(2$pvQ4X>NFi}MdhMDg( zlVpnN5YG#kju(Sv%I&}f3v@-Ktl6wN9d}c(>_v#g=Nao2ZRc+j$wb(jH5s!G8kHj| zjVXsi8EgrVZpcD5gLG;pmG(xlxJ9G=`e^Q%AYKjr{?R}An^#+J+^ylsK_-S!-)$$m z&iRdm0KL4aVwFvG*sbjNr(N`m4kqfw#bLCay@N1;&LlEsKQ|V~(Tqr) zi!0kiL?AniHl9by<&s;HkZ9Ol-?7Q^=5^-)aYao`J$FCY-MFuqK)R+RpEMye z^sR16->BzAMweAax{4k}P-N0k@}X2p0;WFQb%u*Rf6=?j{*46}0@;Ib^|;-_F5 zc;{e8>*|yDp7-DVVYG%lkP=xtormB|BIXWCb-3^dR~WX)Y%Nxh?+_%1vEs?Ig(ji3 zii9fqh7c^V6O=%=nIsI!+GD&B>{&vZ3t)c%G@>7dhd}TRi2ika4TG#$QVWXi4N4OT zA?PBSYv2JXAupSEJQN$Ia2~mp5kpg$I1&kc+&l_c(KXJ!yxs&*1v5299DB~F%Uqe< zWLIaod7dt4CRhCA7JgdLyOVvB^A^vbIJ~lQJ);ww0cOz zrflcEEf(y#)*Gd?B)~3SNz(P23n{yG((1XE^iGqhJH38VGLUAZuaO@AQ1ZS);|9A@g(S1@^{02R@Njyi z|BYVm^*_KjZ>BoQPCL2ezCDc_%$?(>;>tza`H`OHjQfq941#QorBR2ubx-p470q|} z$G49ki#;?<(~l2$yGV&V{-XQPd&s2A zGV}T*-f)glahPlyUx-cLX43)}Nfq3`vUy{&erSBepWg1)ztDQE(8yistwOww`s84} zruEujBWE(r6~um!y0>>V(v3YE4~?%U;gfpf4>zuE+}b)kIDX8l-!%TYRGlr?&8yuP z$wIXQ!L)_F-;L`V?`Rxrl?KOm$LgELw<6iU%L1xB<>q={x%$l{-PjN;yS?1}kAAUp z$1FD{8|&vY>>z)6Y5kS)?xoWw)rUikTyte|HJ#|(ajsc+?@8Y2-^rTI2ak+D(7B_` zopi@45-OXOg7*&db7bsIljV0$U$pVOmwZ|uSvleEDg8;|_0;LE~V|T6`|D4OUR|Q5=CM&lf5jxD4GStCZ&f`BG7ky5U z;05DVy8j3Qn8*wYTnYK=1gyjs?u$b=4Q(3QPsV>45e^?3=)gKyiHU##ibP|*8!o{+ zTIaj5II+e8IHQ2|U34*SBKnMC8UiInBl^&3{0kNmv!x001aWfy7#wLhwoBx~HbQDY zLEAFqFe@>nFtvD11Y$bFKB>dbSlfpKuYwdMQnUqAyM9vSi0ruEwgg%}2CGA$vbed5 zftAJ-l=UscfIfP)I0{+Gyru&0;8$<{{-6A()*lqxBtkDU=@58j{fGaB!Yea9*>#kf&x1 z16m{WKMY2JpM|U#G%^}ES3RnY!i+ErIqh;2z)d+MG9#W}k+ z7%OCrUuE$Zp0rdwe@%Jby4$8#GlqdLv_KO$7E7b8eXUE5?cyN?0>7$4LQR_#^4syf zBjXB62o+J-V9|AFA{2t#*s6^b*#2kn$Z`pe z(A)Z{G!)X&yxyH$MvRQSqKxD^QYGlT=>EBod9H4T0W6ER*tW(uumu?B7awefw4VeC@{d=Oq6 zcOy+sV?A^aon{y_DI=lcAMf3W6aRP*91Hfau9-(@ov)Z1!qn{*(qK^mk_BIl0P_q| z#$K77M4P?Q1aAEjL^q2m8}AtZD&l4ONw<3G0p%9VadrDn>)KDB#5uk%Z`PTN`J7b< z$AiSHfd&ThhCl;qY5Wl0Rt9l%X8gUW(NukA{D7Ntcf1IH;l*W5J^0oeH(xgzKcRU< z9l^4fJp>)TqtwFrptI-|;k|Yk1{Yt$ZhT)y*%Wa~*9CI$(>|J;NJ87e$BOAm*3WW> z5CE;6GJ{qYCUPBh9LmVW_fQr{%v!v@PrEc-$NG=`BRCuHLpe0pq8zM`Kj{-%QJ#Dd zgCr-_{QzF*Q$EW3Wj-SW2{HNBk!IfRg6@BEV}6K_8}NZzSX};C{RN8=8W^oY4z;=ok z3CtkMNXCe38^($;N0plES-6iUNi@bPDFAmzm%{f7WKE`W)RxA1lR1N@%CMMGAHLDDj)W<)3`^&xt!6KXzBB~nT*k5Qi=NBa`ho3 z^MGifISiK$=p;uU$Yo^BFiln0a3iBFMjtl_#t5u~9S4(K$Ll3X6NgfawHjk>60rcK zrsSh{qsEV?FCAj;?m_$kzWh6h9^m;(X4M2qeKW?wfcupHl#eD|q*MkE+Wqcze#23n|cZ4k@AMi;V@0Cg!L8Th5f`RLL`N-aA0Rs@wT3N!7n8Tld^ zzC_Jt2+54{Pw}2PxDpl{g~?`|zxe)}nb!ONbDL7+9J(t^Jm+sB5A8aJW`&URROdyv zXXs{J$4Rc0r`Bm)HMG7_z$@vC>DrL}YG^mPa_f_PiRA`N^!}bE)7Dfp86#IM^JaZ~ z|ERAPP)m!KJwxl!TO_Mw-o3G#EV%2V z^uMtILB?RsHVQ}?n@#v=lG3<7^>UP3cNKdyw|mbIVvuAT>rs~k-~O_(+g{QnZ2;LT zW)&FtLM%^@ZcYlB6Um>@_g@NTGIYNV=rn$ldjV`KYq4-kcHL`2f6rh5s7eE@=TnK& z#OuFvcKUF~^y^3ydqiP`(8cCp9v8`2MRH&;SAupF0Zoz*FcUGVY^=sc5v19tP>TL+ z=-V&?!Ea-&tWequfeq86%d~6UOkIhWf=w~yXD65@H`bn$9w&&d_&y3cKWbkPp__D~c0zn!-uP55XAL12YQ#iVDIXFW}QY_-7^xE(Yj{-!X zx`*Y(m`2GuG!dB-7#sdsRc9?5b4GTPq%BW*Ekh@HljiA)VkipztJb#+7ciPEcP*K4^rryNRnaoyR*b7k6d;aHy%>p6g`U6 zk{rWZoMY9#oReW(6YGq`6}pZzPV%vl5G0~e4HVH-;rAvGk?j5mtoUzblJ>{%&>D6;BDa;gs` zS%rgXirR4HE>0%v>kwsW+?jYD9P*~57_vf+Or&x2BrA%v0WA`0#&U#YUQJRgby?qJ z6e&!1q|sT@1G5%cC}`;yxDKh099xuPwK%H}02(Rjgx}e4bi;J&XMS~YcIF}op~uY9 zM+&EN!9-3y8WnLl3)@3>5SYkY=S@C6eIJELqC)jDk+{J`oTRaQ_!<7$6sc`0oors6 ztm8AHZr~`nj2|Tf$U`I0=yi@L!blL$t;T6HUl4q|fg`f#u`(l%(Pm?aaAoe!qi zCfEO2eQ-tG#!C>X{sl6&!JQClMmS@FKOa$vwFg=Z!ki6?M|yu0>)l7$h_7W7ungzz zL~X6u6tlSW7;s>!&nR^>-l#~FH)n!G_0RwIBVS5>_(^q(!>l*g8$1HCALp%2 z0Euv=tiO96`IE}vu&8%P43X%qunWeU3~+@K6n6og^)wSlK9Fl9HGBlW{GpMdVUbAY_v$Vt+&M;L?j zD$N0ww4%oNlpvKkaG2(T`{K@VGTp8SQB9}=JV>WEa1R7=&=z`+ zc{8~&-x$QvmoNuoM|fwqn`LzuqP_q|Eavk=17!DgPBV;}%3ZS5kcqG1w+DC(O;m}IObhB(g6|hhza`lf>WhRtI6C__oMQsK@ z@L%Y?oaFO|fp=Opb)F6U+?x+P`1!7-dw;5fJNC#dp8T-Cp&LCxYW@hvM7#8lP;{}# zk5(~gGO|x-~TVLi#;lk9VQ1GvX*rVK^0YsVZxoPIBOx&{-Pts zLO}})KqoRO&I(*af*zy8iT*|A&Ox6ul??6lfPJcE$?YaoOH7_pMwBlgexR|h*2;8&H;*2* zCr*W{kbYGd0_{8h@SPW4S@PIVMqSZ6Ix_Y*_+iwH9@{cM>QCVPs3rgZl%rn}F=T@M zua4Hwe&mJUi@*DkMQFa}e$6G%>xagBmQTMzVE>-vMR#HRd~~P&7pC5<`xo7d?$na0 zCH21<-`cq;xZ)xUBe+h~w~>PO?^A!DqCm_Rc$xy=qCjlNDn3c{CRg>RgXOQ9A7`n; zn?tW*XHP$k0nl0FYl;tjdwk^;^$X)4>U@rG+VyWG#NKm7{gu{-y7}l~V^woC%O-1X z{SJ(M=69y2+;4RASw!w7n3?EV{wp{&lgq#6ZupS<&>@w%!$QBNlQh1cT=I}QRDZ=x z0lsbl&4>&YdeA|y+FZH&mexN*hw4*7=hu^f6=S_ZPpWX6H7=`$34l9lq`%}5$m5C-^z`9k~I;5&(PoqZcT!8y}~6o z-a@*7e$6~>CL608t3Ut1FCXpL`x}cv%`waaQWEIv<_aiC@!+}WatnJ&cx11(BsT^A z0>fqK5bk$u3md(awRQ@hU5`2!LOw`W8hVzI*}iy|3(t8qNNOcT5A=2#nDdpPO{}=Q zFupau%iZP9vO?OEr&phBbT`r#67K+Z3$t25LV1-17-mI~$m5E#80^r{A&iXnHNf!U z$8>U~OX!W!4d>+>D+2e`Hf$^#uos(I)r*Z_cMa$qL^&2R&}c6(W}MByRfeoS7d01= zfmIsIqZ+`6z1o6Z;LqubfM(gSQWxxKsm>hx+KHsujLl$?Mf6C> z3OhG7x`H?E{l@2i)BE`G#c}sTM7d+79RrvFjTrmi9R(E#FW0$PJiB=EgMTIX-hM1< zlYdqLO-D!j{^IpzcrMHJ#e(g>66rb+uJ&&x_|Tf~u0Gcq8MT-EM8avz$|@`2O-1)m z(Y8cczGmK@23}c(?FGu+!CawNw&KWzqOAfq)MDi_3J6qCRr{KkDB$rEnJT(;WZ+ zr|S)`f4B6t*80V)cDQRrEuF>)lrdG%zRcwDqB#&GH(AYV-5Zn^bAbgdmUHTal2MsK zatCZb#RR?9f`!6jhl4?+euVxr7|u?8Crs4CxO-+oySoZJQIwNapXHF z^tPC^B~#w0g$jv`LsXlcXjtY4W9Zf6x(mZe>&~e1CGT?qbvKn zxP`5K%M{-B%$^EUZyjC1n;*XJV zsh1Zc^AVJIK^D<=z~Xl3XIW6fbpOY~aX|^-a z&9HoneSG(`q_!$nbx#|`xCyV}e`nLWn|e*I?Tv55}gFjF>!gw7fs%W|}A6 z8~~|yn#@v~0X8F(Gh%yU9Lc)auBtIXz>GD7N{j)=kML5SV&9p)@z4KZ`S;)TwoU5d zZ1hLf!K1{tV(=a8oFqUF-+FmCob5+i1B$?5A(Ig;2?3OYrOvF#qg7kl^2|Uq?8$~m z6njP!BNe$d6$Z&{n5^@(+w2Op4#(4LX|l{D*sq~E)vz;b3e502`3X^x=$W|+f4mwp zshe;%QNXjC;Bf!+D#>t|w+y{Jr$hMl_FhGvB_V0Bc`dOKHb2Z#BEXzhIsxJaEV+u6 z15ctd%NwCrp;oNxRGFMBftwG#gKkDa!H~Ue0V~S1NQ|L4(=kR=0fXa3DD~7Ntyi1yNHnkk|t+=>wkLly*A~!E(%cl20`B zVTDRmN0`jZ8**_en%Q{Z^9R4X>vvl>{JP-f2;z{JP+w*v z39~_z#8LMUS*fSQV1Oxc4U0tY;|8)@PQpL~^)I2FrflbMYVus8$&fq0`fHP?3|gyYVbA$U!ETSij_m9QR8Abne+ zNa_;@nZnK+Qa(XiI?DR3iomVFeKB?oLVCmi>f)>!GfYN>$vM9eDgY>)6B$Maqw4vO z^?g>4puKoq+w!g(I?NEcy*xi<*c*+ylS`G3p{7Ak(UT@{H=DF!y);c813fuEhxZ27 zCX(xsc1*6I$rUuc%jD>ljjm$ou{RfqsLp51O+>k`Z2)1aNPfC0w;FVAVGTBvQ$0XB z>AiYoayE1~VHrTs(5t|Q^!cJT`F6A(zV6aJCis&SX(j%WL-;ns}3ks3DB))CB|qi1pi~q2eKhD z`i_|fVIlnXQ-d%3`=#&x2P?{XbC@o{8V0^7P_01fubLV_qj3tM4^?0}I8WpI6f4Md z3F(=*fHe%jRwt-oOe5Cp1diwcrxow8L#F1;XIB}^_1b>r)x zVr8dg4V~?tUqQhJvPZ;eed)a)czO8?GmGpfK&xPcCNvR|P989W$lIZec~9tCF}B9F zTX@8+K*3Sv&m2Qm;F@*juyPozbMpccX5v0a=<%c3Aq%>*jX`ZgoS3}w5(Drr7UOf8 z2&m9K=4RDJ*#V)XNhfjutYYhSZ$g#IQ@(PyeJ3ZqbtLtEl#$F&XP)%!FdLxn7N+{Z>!y%HrV?Bwwd35SHdTh=uv zdff`#~Bzf;wrNDJ$C%mHj9IMbv;GzbFmEH=wpRa>+1CYlo?5NgfaN4|c zaNeZ*1f{)$vcsU9>4iI4utxnbF1V#V*n&?OBk?CQQ2-?q5ufHP53+X`ZPXhlZUk$yF{QS3pSmuvi3^yGRMOEe`E;kbtOmNLC?A z>q+usiY33s6#XhQr4`DAp1{qFbcEL`e*FV~=e_&y7Oh0<;E)zFgbuV4YH^muHzbG6 z7)@M>Deyp5Kxo%qwH(@j{^7H*R1X!2#U$>~aNzwqWpaMr925$;q7Eq>25B?!D{ z%pI^NvsP#(NfE3p8bRX7s{l1cPcNxq^)#cApiXOHSHbRUIm|n|LLXyai3Bu2)v!)@LonCOK3|VA_Y$aWTvqj6eB$(uUL_$P&@o@ zOJGYD>4xHytd(c*Prvs1)ZF}b3hJQREWlUz%TdGIipFqJvYOJEcB<_KINO91H)hsuiRGzoW@a!Ar$H6Mv1XO7;WSa{5^vu}Ii zn*!)m@gAWedY>YUxcLQ@>YA4{5i3Q32i}*sVuw+`RrEW}^ng5X{)(y>HIuw%Gg(~s>Y z+CfwUb&NLMjAYCRryO?Jgzyxj8+}Z_D2zd+*-RcXBqP~dux0gz8eKf-8BkJC6?2r@ zi02;gbLC}KOVvKKP+0sJ#!SW*u@7`lHCY@+w`pX<=70JhFOTo{+C`jG6CU&IqEBQt z@CMcau$CzS_laccAZsBxi9_pIy^2{8U>wspYe#egy$ier&VbsEX5CdO+ZA1eWIv~w zoRutGSJfME!)bx{4_MMMEM!Yi4qZ5)*FhasCz*=@E@w>jP#_u+xoDhlE5rYiSfEGs z+~ijQq%8w_Bj&ougtsuiSR(T{{MfKwL<%Eb2{_XU~mi*sOP-Aq! z3~(p%Sxhg#o_;!5__mV~?+E?0o#h$T!-`_I(9d&K4grX3jJ&CC)9RIVh<7BrO693nG!8w)mMjW;$b`u9yn>Ywcom0g@|3P& zeh16&Gh}gEE;9%h&p9zj19E$+stF3^VyAcqXTtPSf?KxV0q<}CjXeZO>(AeR-PbyP z=DEd&0X~dXh7JicMH$lwD@j`fQ1mjYgPTNmRK*C*796ynS)bw*PJdlga}@q1EW>@w6^xn{dIo!$Z7R%)32N0h zpk(#wP)#C5XGH~JFAfYlod_;i2g$1oMdL#5R6@=W&Q#n6+NG0nM{F+|1qsLrA)kum z)T;mX&9g{3-3@%}d_ou0omq$UZ-73@0^}g|^8zB(7S%b$6q#^nga(5*^GC1y@#PzS zTTgUAZAj=i4U7mC3)F4?*f&)``i!oDFCNi~#Fj>b4uupfP@z|)haBpL?Fd66bhDiE zh#x#c`XZB>HbOBU<4jnA#EUEvk+LE{12xZ4i{s4dgpB5)PSWg@t1yJ&M7>O5g@Z!N z$m>*7j9X0>tAtKhaO|=!SjRI z%Sh>(lE*I40ZA#DS!ro(1;gn481ftP%*86!;FdxLk zi6Ya%$dmw@_6>jx5?0z(*-j5s)>vTFB^aYbxlpDDf+vgrc=omCuPvhj9Tj?8nDFwP zMh=L*8~RhIr#2$g2e|_H+LGrG-?E~#o*=et2|QRyd12T&6;%;IXU}=Z5*4`VRmO5t zo6Oj9a9C(j2rjT2C1`04mVlwCSL%v9-rN=bY%UK(^sI0RFXVg;F{z4bu!M0VfnEvO zCriV#p^e`_qY_==Lt_Fah-D*olQBeG{IDf|)D-9leO4w=Z14BpT=~n**PzMU4^2R8 z3zw9Wh)@oJUs=k;XDXOp(k>3txLbbfW!q>)cdNo7a+H?}dQLrHO$W?r@x&d+ITf=0 zi{8PjW*Agw95bc|n|MaKsGz#3(e*690XH-J)x%>FTa7_mQTGI;^gu0TE*B%tfJ;O6 z7(tVdo~jUd12gs{&m%qI9V^&5D_uA8_y1>q>kALs0**7E<0()vYNGLf5U6nxLPG5l z6QOD9Hs$XGim^-2DGlqqJ1#@&%1tn5cB$f7s9U?`8z+lQq<-on(*c7=j&*;kZ z3XDP+Dn_#~`&Ii(R+p=Prd;T3dFEvb$_>(yjz+{kVhzibYKarR}C zKwjC=h*HOEop4R<3N#e!?0M*o5Q0%Yo>QSdLIL(9tvDf>$!W2EY$mzMe8@3tL$c+i z{i@j}%$*7ewzAr%Ko9jTik~Em<8GQKdxIic;LcpDypx9E(`%Ud%Y^P0*SVYJ?aw>S zm5iXHrZKQAN|^Z>v+BCJ z@4fT8t^TiwG92?6^RF5=G%|R-e1$t$TJ!2#$6t#(Q?X$ocEJ1;vjzyeQ7?04@+o&S z(u_#H(4_1@iHDX5K#;&k4w*(=LT*}BeDEenj7yi4u z`k1MiFNe#xq=#%~9%OEnpu&<|d?EBR=2de$j(Z1QuA;QC3n+=@JTR8_Rwi>xAG{Ev zY@fmCYUIs3NI-({1x>I%^>1!=VOKP-^0Uor{Mpc(W0^T5nTh2?Z_h1I2`PFJ|G5^! z3(qB=43~bLgq-Do#o!flEl_kk0Rs`kh;0UqSJA^=elAvoibd}p&uP^^bMG4+_x^zl z2OSGxycW-H9BAIgj@a{Hw1=tE0VYGvgWJ*6O9a#XI#IMPbK7{yBPS3`33}myItpe6 zslS3<;zfVPRl3iD`PVQ>{9xi#;4$+?BzsAnfOZe{Z414Z0(Wj%fwh6)p<>=J4{OQ- z)IlcmtmzGxRt$^o7&A{oq7>c=3vrgQbKX1~dJE>H`L|*6sRV;3T)Np@ zFt3A!Wm#VBc$EgoB^l3zOD-lWX3UOXX9lr@(#kD=604k4C)pq|Y-Tx&z3k>vHLuu7 zmViWe^D)2D{CR+$1Ku;{MBwiC=Q@tkI!d70+~SWl5BtZkj^djeCG&|e`4fZYJ}h8F z4C{5$9uPJwjMM)Ey%2g^I_KbGMmkefih9R4Lm}euRl5jyhWOLhyxo3fe$ea+QhWCH zzxMGPu9&`iktXlVwz8$xu3r0lV=KF>wQGfb*R8m8Hu12#ch>t<7pV##R?$)GWCLZm6 zoa(yBE%^94o3U}242rFF0FZjDE57$|>am{qt+OOgy#Fk@6K`FkpI)0q(R);RA{X0k zlCd!pU)|SQKMbS4P>HWT_jooweOqd$fBdtLSN-YR$Xuw@iKh=;+Sjr7VdXO3@ zBq%)op2tUQ?!;MgC*E>~RECdtr>0BsovCSX&FQY_*VXx*@x7;0)4<9v{eDU3dme2) zq7;gIKN-LM9N8hsp*VgvHT|BYJC2em(%;?=EgV6dm%IxV@koUuQx!)Xf>*N-1|SElakX`FfdSbSybg~R;ZvhVSp)Gej^ zKlh7I?>)5a!>>gH-+8>$PE>e5(-&I<`84$NQ9o_HlmYt4~H&jhIn9a0}^ zp{jP0dnb@s>^4wFz+>*Mz4sT|2^1Z^kJz|_WFgz!<9+i=plFCTbn#(OlH?|-r^MA; zsS1y>v)H=>v#oQjdp*ethY@c?QkX%?W9XK36XPsE3CpfVbf>*M zR#Zik9i}XGhegQUcHo|#5(cc8vbFAUmMKXEXEF6;V#q6FmN3AUR<*jT$3zEsi>OW} zq`s^*=CO`EfHJ(#OCHZ@sUrE850mSB+0-MUmkE{mW5RkSc($amv&$C(h&$Y5>!2)) z3eF}S(zzT!Th&I`u1dW#V48Vv0pZNB?Hi*+vpdxg zQxp8MECK^h>yt8I1A~CoeM~~kvAySE^Dx&zf=LN?j#-Gq=BzM{$$_q&A<~5MKbXwL z=i&#@s0upUc@RvrN&aaQAy$mZm`rolzhPIi>fesuExMV&dn!4XJW(=_a2a!)-}Hae z|FeAadNf^eX^v%P>-=^8iTr#Xd+0O}Kveb~nUi5hI{6H`*3YuGFg1g3s5m~$-_M#e z0XT5R%s#WfdB{IeG}RzpbPs;#FN@dxyV%dX$}%x~oX9{COzKH*1k>AJz*dfp#_G3W zN@?N+&cHzO>mw!)4WRoeQH10=5Qi&PsFT3KnFJxuOo9pBQE!YnL%iFmL@l92Hrh4J zv{nI~8Ur4EYz^ZLO< ze^$0sHSElb2D2=nCpEw`pp_&#qDY#{QD_HAfT0EqX9M^g3}R4msl^H4K}4B@C>4mJ z4!33*ns5p2y}9I5$rE{~RE!nfMWV2AkpE zWe3E*_!)SL*r?clGbvIj8o~pNjA()aj5c)GX&Rd83VoY(11Er%UplhAH6%)BN&yDYBne z*ck>N;^(Z0HH@vtvWYo%H&jiTf7<>_2Xo#Q@A*=53W;=i#O(5)XC}*RM#b%H?1VJe zGeDlS#K|`pE)19_?SKjBXogh{D{w-9iS=gDh)ERzDR0uDI~y`+`pg+w>2T7CVsotp z=Cql4>~FtycdqrBBW>c~9Pu(4x4n_TLnM!xUR<*<&dLzzf+!efgCn9X%LTjPK`TAZ zAU^Zx1K7ZqZxY1m>?S)4;E{sv~VQH~Q2}R#^rM0X)Y> zQeC*hGSsvA2bUlpg5_2Nm4hXdlu8h<0L>%{q1i%+QJ)Q#;3>|stAIu1XT`csCG>Hd z0g>W)3ucAV^Fw7*hCR3dMyr8^U}S3G&IU+&S`x(_2o7?zdL|+ATC)MB?xIT{?9qPo+@0Xpdn<2&wd z{u_4-2?Iar_21O|jb#0=#|z2#ui~ve+*;#3c!Vu$7n*Ydy+QuF=Cx$pAK$n9{VSVQ z_e3d3ZTC)0hN=1ilWU|KyGa33_2yz*lJ!@clip44DGNEmDOn$DZtzI^cq~bZl0q!U zXi&bxZwxnAbv~cpSQvsWFx;;<{mpkJpTEW2J)TW%GLwzm{Mh`{=JnkR zPiLApC66WRgX1HqkMx*&qu3l^!{X}uz~7FkX3f1P`E~!(y{2paJ|@MM-@ejZ)7aHq z4Opw6Zaq*0_&qBr^^Khy*1b8>)fy?csow1K9?W3fcvCXA3}b4++-PppzPQ_r(%mRZ z?AAwggU1X4X>f0tMWJk#AO_4Hx_w@D;~`C^?J|eVFJOQnBoY;rQY|s%VRp!Lsv&)5 z;YviA_#N4ucuETDMdUkbgHLikf%d_6+e{;Qvy-~kDua_&@kv0k>VgcmC&Nw>FG&&4 zYW+ZWxQy|N&Yy{td}j{LH;ZC9&uB}HB4!fKT)cuBVG1pWSl3qf0f5XhhGZ7HD1acA zqo|XY6^1BC-H=E9PXU(8C3$sGFj=X4Pqt^rsCRoFP@a^~;Q4w6ruir@lnJQ^UX27v zpiB0~n67F{m!x4o22kWsv&b05xVBl4iSD89&+>1^)HbaD)|Woe`u5sIx?J!58B2_d zUY%4dd~Jh0eHHT=^De?WJ@GPhVt~hp0%7RZnVhH~Y#>X0knN!*2_}+0VTkpR^?3lo z=${CKC?cT>#@kxfIi^!*G2Ls3AruzcXPDS}F2NEy$WlWC7Kj|r21{pP+G5Pfn7p~g zATeh^T?nhtDrm$ETbk~CMpT+b)i|j8Sx92mVb48G^`gj}n{#XQy=;(sV`u;+YNl3} za-x@4nrqEY3_#h&H9}^YAa#&r$N$_iwl|oa0O*C!NHR6EZ-!b*1Ul5BSf4hcOBuYBYiafT|`>)7W^u z+!jgbj%^$gj$juRXaPxf+r@95U;1uMf7s)XW7F4D+f^n{Aj<3-KaYs)ynUPbEd<2$ zml3_wCCnTC;WV8#zafyJFsWpa7@$brPfVF)zKGBmdSGZ3;gw}GiJ8t}lMUkeOZ)gD z(fHxS^dZ=Cbp|QSFs;RBO%dEr5$QdN6OAA`z?fG`Ii2?*A^u<^LHqGj3C)DC`I0qx z53Fw?wV;ScoXRD6y|o+Ldg*sK`(s*&JUV`sEo+-L$84cyU%l<#3h zHLLb&438OaiYN$lbn(z2TY}t7h)5(vufgNM*4 zHFgpUd6^7&MKrM_IfG+Qo?b20^4@?Y<)|1Y3Dcc=C=#uONM#07CPW`qIVF-K%>>d< zSdmZr#g2o&-T(bxJJ;M-4Gv|XD3U@P(0QXGZV<60 zHQ~SzEWOg*PBC*K^o|l8uf@3bxGoPJXbhMOgnD}}Zz~A_!^F`}R*wtzo0IF@spUug8+wNB z#)9B6uTlOcTG3lIs;$2gD2w3TWE-3ey*rfvvGe_86(mLDmZVL{n7p}D?LIGHvyJzK z$rF>olE1Xiw|gKqxvCQ`?yM<~BCb|Cd7>=v09V-wC#Yt#dNVI*2b(=;zwQa!o7KRo zE+1&Hm%q8S6T~imesI3$n&0~L2U}Y|(k5f$vS*LYlghL32aiN+(QI@ZTb6yyWkz)t zM0sV-+m?YdCF=?W9p}@3p*IZsR2X(7jx=XboU#RKiiM(6u^vLK6|WM=s3`DX;5vxA z5UU`rkUFwRG4T$08Ade+vYgH+mW+*L&9tm3vtCW-ST6xn3NpG( zuRL{~;x45!oaeEYIj1s&6ZLa16A&oO^PaBaS*#^%S7@n{oOjCF-bd$Zj=t+Q5fZ^n zz@)71BB%*zoDJgD;EiAVFaL1M_)UvrOhOD#A=9gcof|bSd78=*ps4K4WeR<8zGnIfM@Z=wf^{j@&>u zph{_k@tiTk!~xxz2q$_{b*kdDN!h@&4y=sVW&=5ht- zfiz^VG1|jnl?r^DMxwAwK^o;Pogzxs2xLp^k9v@Wy5tfbiu^lF6tdqE#y4X?t6fAe z_yN_89znmL)VnYzOm7Hbu-L3h38h~wRpj8|-Vu*H2}Cx4%l8g(l)qx~i*$hy(kX=A ztxh=trjmynNOH03VG^Cd@34+SN-xhf+ zmLLx6S}L>+!~OGdBcn{Y`Ye6?nMBbWzDyr|&-KdYKh{%nBKC2Q+Z7!e($Q zL?Ns4)2V3W>}-#mr5ZUV^1($S4Gx7-QWXSBaoOmyMXldUzXyeq9DcYmX4W9k*@@)3 zWGz0&qL%?NZ^mdC^{76LG-$*yipB~d_EAR5qSj}M%2KHqna}@{E8fQx)oDwkz}u7O zyB_JKPexQhl7hGnpoJ$_yuA5@>23^$aVrp=EYi|0+HJezq+UW+O2p$#DjDHRNK?NO5HUx$ z$Jv}v^9ZZr)>4Bh(gfjTWED2Awp>Z-q88R9odZ_ts?mb>iax^fLfdB6F`r<2qu=(; ztByH_TFHbMH|*3!`kOo+Ih`9oR_si&>T6b-f{Pq0oo45=FhCitfiF9TSFY`L^3YK@ zEHtWWBbi+BS!bR(PGGYxI&<&C^D8g==z+f_r96ZV<3rALh@2ESQkqtApn-5Bt07Tl zr67EXsK8>VJ@;ny_rIB4zV~W6U=K7Jjr`D~q9^~K5?JQ{%LCrzK({WI%1YPjRP1xVXTkXHC_uls4kGHB9-ntEJS!aS5cwbvU z0^A;+1~F%W{z4%SwG1g0!>}0%LXR<;i7GGXG4JVV;N>k39$;=_5k5Y}MqPSw$rvZ< z{1^+bIHN(Nx8od8TYjDe4|>QPAx*8aNI`h;jJ2Eg9+(cWDhMnXyh2W~w~0JbBEu?+ zLH=?~_&56%QCrW^$P}cV6N8KdPGyw9y&R1~qtM3SE`OJr;n?MuY)5Eu@40_`>W^D% zevl>>oT%u(^vi3s(XQ(U3fLzDz*(FEY9EjM5ZdQGXg^dLdZ;a*Pam zS1@O>wR8G{_i8|1Ba-%gTWJW%T-W(3YE(B~Q7Xaz#s{Pp5Sm*JS^JjP$t-9li8d_Y zc+{4pm#3GH;-b~uui0dZ=9Q*$DW=KMhr_+Z7U1(!xY^hf;gY+}-Ex64||9for#@o0%T(X5I(C?R;(>!Kc2n$9KeAoXS|M_jL zXSRh)-cSb`dm4NGcFV^}`FPdh0{%Nask#GrZ$w4z^z!Pz5)B%up@ef$X$Nhlzu^G2 zjA5rte*vFIO6iI$gzc*ZjM*VFPIWTcmfMSGp_k)8F@UkeYhNe_;fM4Dyek7CRB#-K zgvE?sv3OAk$u6i1(d)ol7u{ikRPd&bY$-C=7~*-|!xV1K-IdJFPwA4$$(p-|aX%7v zZek*a9%Y?y8OAdgAj@&m(S=aSxWjZ{wjyy9)NbYq78x^X0xYF4mW{A*kig~J9(FfM z>J;#iYjA!L+vx5vAuvP=WXb^t03T8f!Vu;@uH;ewIT58Gki6$!`lWyR_WN5O`?Vh& zaX->k2>d_#QTWk|s$^T3l>WuHh+wqu%d~j=VebcT2^nN@^!W10_-o((;=gWPT>R(^ z@&_3tX^r*Z=iKT)la!Lmm;wMq8LSp7rLmM%t8V4>%Q_l+?N#_=F6caPp)}4Y%t53< zwMU2Ev4^dgwlO;*fvKYQNmuA$IY~L$j%1?;6;P7l6c5@As$5`u#w~k9S3pAX#V%O! zj(2L?h#&}Q9*5Ntpb?H+AHDViPkMiKi>(FduVuod!MBbNXbmvqZd1^)n}t_cMwoV> z0KUXS6?{6kyNLmHyqolIl*P0<1;mc8$0j z>Fz?eK)Xt9gP9m6R$nW~szJvA$9xPUOU9UeR%3-;022qXYQPLkY6}qwKLge(Y~zP+ zAd{dqQ$Ar5XWuFua{;^@RZtSGOUNQ|T6D1)s1%ycgXsxcWy`*oodA}icg)vJDu%`T z{33G^Ji>zWolX3eeOPhKY(T*rzH{hr!$0dR`py>jOa6j$@0suY_q$pjdqVZ;u+vV_ z>03$t{$KXq21>5$I1lV@%s?P*`H(aQplMnf3_%JSlOR?eXuZD_0?Bj)s3GqKLs3O zxXt0YV>n6N@Y?LE>a60p37YwXDSS8Em@f6emW#}P|3FQI7JNyv`py0+g$~U|wj&ZE>Xy>bs zz4q5X-9M*NhFPTk$ZId^6cy<*OdLss|JgNDSN$2_a-%bGz`tt<7=~ zb~|su1N=3Td8Ckd`8%MD!n!zw!(5w1M*g13jh`NWD!Vf72LwrMuyu@m?^fJ(FOKP<8nv(t|5Hc*Uv7Z$n~>KH1ss z9pi8Vqz1ZEctd^?fAY)U_r*W@wp%}{gB0d5zXB7>@N{-9iQVAcC%aE^{stmbZ;qls zm@wZ9KmRB{I5?lH5chEVF??zm?uolm#cbKwc`FhfzJjD_eDS4iXi#|ko?j7jC4JWIz$N@D06fkRxB1y# z=h-W90q~)(;+MG1k(}Bv)nV;(JFe~=T*$%gV~@OU57IAu=38LEbkS4yaCifrhqeB# zundfb>TJQ3U5ap)wy^>8L2$1tEWsjW;|ufE`K!~QiD$>w9@zPZfBB#H4}HJ<7^;(=9y8|Dw^nZPVehZo6p2^-G zTsM4J8#_?#bTmILtlJKVJoZ z$g~E>a}{>1f#S0>HH(^dx3dGUw}eCbzi}*&bboFZpEFDj7Xk-+bThIGcoV6;tisy( z(X8RT=nwgZIHn%iSv&`y@9NUr5~?M50;3rBfrmbwf3y1HTz3u!JB5Et=HW-jJA5G= zzLU^TzLd?VtX7|I5eZlHkYqHE#HfVNCP*wC1iFyNN%8P2xY?BT~py zCUJ&x$lVSkxj2o^=A-yjrtr&2^0fF{IEA&@v1uGIPhk@K;NfNQIbMZAp1cNrF1FCa z6-P5@cTWe0PZ{14_bNb(=TtbJkK$V3sj$LLoyXuT`SDEl?!anUJ9-T++8kdEZ04#H%+oiz@}f8$W>82v=)vk{c;ccc)&w z7Lii^bm}92<3IlNq5jYQ?|db>EukuhZ}9GK;>$y%)!R0?>348KbCcs(?!0Cjw~SBm z$>bKU~~En%#j<2!8@=+O%*p^ixw9UU*e+j-Ml5q=QY9IjZm}NN&R? z%C~{9AUO*VE{g+J!)Bc~L!o*E%EP%ykregjfjJO(t68?zZRtINu#IcJ9Y26O zneD!%v-Iuw9aT9SIzI<1z&eBxh#-J8aEoj32=esKHmfBQAdcf9Tg z-o8POKHNdBfjO=?agcnSLjfk?xT5i)8F8M^!-C`UXl8huXt83|ym&Ykxq?d=jmcx< zCxc7dUB$Qj-J3w06S6Gga; zE@NqU2-7+$f7J{3_zA9t90XnpKZHxdZFYnFnBQV~=xr8VcL7$y?D6dW5B-&|ex`ft zS2QZ{c{?V@aW$|8PTv3*72kf#I0rd{1p{Z+-GLK)2@Vc~8bHG#4&GS-m3KpT+tI66 zx}Dp5n`sUJSXiL<%=0sO;ru_t^G1-np#@T()}j_Om<2uJ3N&wHcoSMo7Za zHm`IM>cvfMUYa;Rk5unn^Rt@{Q8~A5X>IAy($vxv{1lc1-gbWWl_#F~$Y(bGiDnGA z9Jp+A7(dl}3P*Qy4{{@(AngrB0$f{6CfGrsi^JJNn-D-YfABLv5QpTH>8QY_BOkkbo%P08_v%_yLLU$1a26fwDcTx&{)7X z(5=f2ZuY^YJuu>xE*uWSF|H%dVjEurbvAk8$DmWfUlG)B-V{z>lQkYXa0Xs)vNr{|GKZI5+0=RTC_Zlt z2+`~+9;$N1|x!U(+5lsx%5JRRjlU~8ap9M2uxa~2mAKLXssDZo6Z<&wf$#_*Vb zI>$4(ySrTu1&0o2k8ihij;I;X&+&3Sjvudd--q|WyB(dQDNW)5>~W0le-_X!eh|pb z=J2NYeYf*ASP+~A-V4vdXN$iGH@rO`y=4~H55HPlnmWp-;UHnv-}#M`d%Iu#83C94 z*;BJU1cPny*Kb0qfdj{t#*^1DIhN;vNWf*vljX@Hqu|B=93mf1Xq7mEHUTfWig#Vd zFf=)mDKv&5uLYmN)r7FeoQAK$-|k1{50QvNEIWS}6>jJ|(E)?wn*vDZJn-APojvk~ zI0cv-j)`Z9Yl5Y-v^u+S3J(wA-`pfZJDTdyLntTG;eM8nV=3eCPhZnPHIy4%LK zAAGvYiQ4%18Jc8J&e$PrMse*@I53_DY#anOR3!3dod>b7KGt1@Jx_~8VBF_R-}#YS zH#~5^j*`X;-PD_BJdhhM7p;pf3g?eUomFh`)RQb51)SAc94!WJ@);kci^eLy22bL3 z#SL|P{ps>yGz&L4J9hinr+9$# z_|t9oAhE%9khUM83a0pqhsfI;{SLg}p`~liUW>!sHFeJ_M|;E5+_Rkr50Y>4iW58V z21~dY0NuyNZ-7A@LBztb-EqbBe7BDwAdamfP~XIydE+7M@P2c5dk0qu*K{7>5TNkG zxYk&3cp==lD>07%C%P&>K;A97N?cM7s-E0{IJX^S0Ybwh3ug?H+cl48$}Fyw0JO?jlb0qx4iT z$4||6Z^Looj}PGww$F~O^3TR@kyqqT@v5CK;SXUf+wsv~3p2dCw>sOMI=X#@uYqIj z$dwXi4u(V(Vco(ut;nh(a3=6Ka{0o2jsqgP!|9m_w zIY1a095nFpuk~&pLp1srPri4oi{bF-N}dN;$D!rh>;`n_-rU=9)s@fSWWS87Fn7=V zJ$JyB9NBSj`=-yGo#XsLIjKGJSNLcV$Mzr+!HfXLBs;}OhEFpy--UoNg9KQv6biCk zyw?f?_=cZ5eKi3M3di{A9b<0>=>RLn6%jac=pL*Rz+w>S9R50gb~Ch8{O;NnBul8L z&UW{}sCO*w!8;?Upr3Zb6dcLb8`n-xo!&l4bMO3JtPyBnu#ZINop%d`fz6P?zTbg` zh&G7%(?7WMG+wUr1U?TQ`w?7MhOQlW<^LLK^h&RTtm3g(-uS*Vhc~|T*Wxw8LZ2L4 z6Pa-j0r50!WsY>uA)Go#*e|Zo4d61sDks^cI5&$NVFh3gq3&tE2=c`@cduFLUe~)# z@*5n2%;?4+k(?A0o9irLP2D#3j?KvDFhUky@Ze_XqHwkGN_fS2JP(JuYyQQx9=Aim zl>;L*c6WE-N3QDK-ra^@9|2@}A9OQlZsj2a66e9AOn{J6(VV+$bR>ILx<5F!`KUOz z+Y#~bN_h3zO`XGsup~BJ)4y{MXH(!UXUDKNFz2A&HTGo&?kzZ)`CUNqh=41-C-&eJ zv8JE6X=Q9}60eOL&u8v5mdh-xbpdAa*v1|Ae$Scj8vn`viNEG;7EkFMf-B-QVBQcU zaF34@KSR=ich=i>Uf8Gjh(DD#!1p*(z2U=_jJ8E)Ide|W9_f3f^CFZciOZTg$^ z|Iz5&mXIyU=M;bQ2wy$j;tO@6HPEoJqX3>l+v|1UkJ%E*r{g2z$2i%=^~8+_iSKa5 zaSHME<8OE(xWP{3WaTX;`NK8*L#YP$>4uasJbjKoI=T%Xm9z5Xx;aK_Y zHvS&(c?kc@w}@W+>v?&IyO1mDqmZMdN4N;Lb#a;H4aWInc|X3z6#kU|$D6!9-f%HI z#+mDlS9~Qsv;VLD^#gxr?5jVgPzdxD4`-V`oB#9KGyufTaG?5W@t3Q-n?>%(w}+<= zZ?v61?F2jE2ZJZb?Z)uNi?jS6>6-cY$@j^N$rJgW>9!`{fknW}>GN>=;=lV3Z@9hx)Gx>b-tlDPZ5#jR z5#exodF1gVnd5j`a=Nql&7SZVI8-hX`FN0*;D56<))^!|w1}d`D!+{`TNxIC!|GdH#mS&I={~1ITxt;QHeY zXMks{gs0>26kcu9_T_#5>EV<8zxFfo6gjGGvjA+UkLbnM14#E?UvhsL(ejz89& zI(;=VtwZ3Vx`$S}+s@B*Z|K2PreG!b;p*8PxEKH$xaLm-K=t;Z%XRgh?X#GdKXyA6 z+)PN{umkb$MixjQw#3ER1N1`(bQctAsB?fE=)SqPWgI&yV_%-Ddf1@(s!cZ%$$hT> zgLH-0p1r0!g?t8A@hH4G!X#Q-kX9@K@GwB)lR|YBNAywPz$LudBqo%N?U@A>gFg4R zO{@2;O(Lb~BEUlddC&Hh-qT07FHJ2WR`q^*>6%@Ovzy*Ab@0c!;Q!vYX>RH2qc<*H z1IUd*IX{GJgv#Ok(amVg9K!{mBR$k%ZiT$Cd+m|;O!lU^bk@7@98hE7T6}!R$~cY_ zp%90HtP9tF?W$M4@K+!B@asyf%{7#z@fTg3AW$4Eh_%WNPF$>`cQ-KR zN^cHkIES-fkVVl3s7*5I&3M0Em@bb>NoSiJ#R|g9N|#jB&B%Z{tFy=}q|ObuG>aq- zS6H-?JMfNk_=ihIqg6CTW8)`;x4Rp8*DPKKAM_Z&@71$-Q(Q`MG_r0_&*N!hj|pLc z#E>`$WC%Xi?X$f*ANa+;^_RZ&frZ!c?{OoXl~cWDw)bX~2S992cCYW<)tkdUN}J|! z)Hg6A=x#m&@_@)6+X`LP!x`fPqW{B(b%-@7oC1#ETHxK@{8h;7c%9*;Hm!m<=&r5w zu)763(i9f>Brg_rxtFLohZEUz1YQ1sg*7U&>)?G zEhD#F#p^8LcYJ@G8{X^?<~V^#J2F4pgNaT}_U=S+W7Az=X7Nd)>Whzk`_Vl(fJd=< zW_!5cYs8NE3ZPIr&uf2r8xLSDT!1+MWxB`6og9`sA+p^H=v4){Y?8yyD}Zdhxyuw_e@7d&8~s@H%&l-Fh_&Bp=w` zpZY7;5w ze*AXqhTbQxJvfE@_zdPO{9ym)Yx|GhdHTNdQ`oX+=NzVy9XfwQ_wQZv;;D^$r+Sa~ z79Kr61r~8(>c#D2zkcVz`78fL@6(&^>b+s=;2LTVpWbxa74N*^{3p>Sv3Gk9W5duD zI=g9kd+$v*9^CS+d*^#!L2uV>V{h1o-`v&v_$LqEdBySF{cEm1eX2jVed+4+^PBSN z^xuC7=kVt46Ib`=*5rJSubsd43OS#h*u!t9oDTfa;cLb|wsB`Xn<*UeO=H*gAD=(? z^w^oz?%_wro*&3m7`sp0 zaeiw2$u0dy=U@95ANry0Yg?2CJ$YaEy)yY+f8WHB>HdBE|NOoUC-2>G ze5!w70$=AByC?T|kM(eeuXj!KzcI0Ey}v$zuhYD<54MI=!`a>4#a%e-7q*<8@1FTa zJhkVqJA$*mE}r%A?mMpTpL$z7wc|j`IOTBGukhSnzH;x0-jmb)m+=61_&WbwZ|^Ua z&J-t$i|}f1LC$UQmeV_Mjt3XV_nzyWIoEq)NB=$F*MASrt$TRihR1q``G5ERiT;Ns zcJ1iDe;>ZiFODDHKmO4k?(p@lef_WR+x1-kxrzRB`%dq}9Ut(2KDhVbb3IHU#Mj-t z`}lPKx&8g;_n(~~Kl6=oeunq;pTFa|x z{&)OF^geyP?69bb{%@|CfnBTY+K!t+SbBx ztf7UIVpXNRSWmYGQ(8E8ddI=V*Nc%IeDCW&w(0OWF{ItFt*bV{ zv}jek`ybl<;tm+n>w+P@e_ymQET-|p_jf;f<>C9r57STJjt}tv_$tR-vsEn|8BRH zfQxQCSkw8kbO{HdBR+vxls#7rIh`*;vJ-A0{7Ec)clYGG85lp@{rpsa zI>y53EeseBb}u{_W8uv$vG7=L=X8GtHhysCO8Bgu(+3~s^?s(eZ~~W=hk~&9@-){p ze3eANZ+W^D2;rWV&-K)(5Ek#h<({AI-}imdjP`B#`5w%R7Bp`&MtfGIaI4im*Z&exs zogwW@@en2!tf~uxYOpGV!0V2{bA?zBtCCp%;pm=1tVby9y)c|rT{xqxNwBJS6O+KI z1a65{DZ+wP;WGom605rT4Xp_4m?A7JVI0h}SIYHXoCd6V8vmkE&0a|#ML>nGCZl@j z9MF{sfG2iXqxu}o%Q>pu(Tqj~u3%Jt884gwxKdvgEUDzI0IOyuFivRdiPq zqjpyjci=2}X2~mi%gQUL>ab=vF&frDJKUCl_5`mk#(nrtN)vyaqw!r6<$feNV(Ee4e)B_ZPA!AXus*oy`Puh2P|t+rA0)-6#X3X$fkwh z;G9-OSDF!ebY*kE5e7mD@wl_uVMHFzH#^J1i9X&_pVfcwEoUF?W#GQs0{004?lJtm zUx7Q4!)^xd;{@*GHQ>IVz;^y(a3Ai6{z*gagJ3v;+?u!@ zCRTG<8X1=>RKq>10ksRj%1i@-;O?ugJPD3Lg2c!G7UKQF@py{ia$~(jvtnkbsR`E5 zPykD!>5DZs$LfelvC3$ZXN@A zw-Bom@hevK+J`)FSBNFR9idQwyM{s!vD$$9aRT>K1nz)X#}r}#eJoB#;EqU$uP4De z1eT%MT?udp(@-ezTqrHjxaT83n>3c@iO_Q~)WfRG zDi$UMc}qxuqw6wOr6DkyRmujluj(GYxBH2yLOR$bBRY{t24eU4z%Zhc4)U%}G9Vo^ zuwB3vsNV#xJZ$eV1h%sbA9)Q`B4bxbz#VQEx@w(P9$1E97=17S0CM46ua*&BCUpC=S1N3ewp2q`3txaSxhy!7?EFl_&@aZY2r^;vLvZ;1qq8cUUe8!eMPGlcIvH)L{i|<)fe!6+kqIk7zfnli#J{ zn&hyqB+=lapc+;!3L+samvWL}0l)_gADIUDtjI&-;x9a7azF-!WMvt(vv#xpmU~uB z7$kp{62h+IuPkFV0;<80qBue3;~_aTOhZFH2*X+nMI2zr_ug{Pqgul$rh~zhOby3* ztbL?K)ngf=LDE5Zta1%U2&_ajjI&skJXR$g91Plj_o?Wx0%%`v2JKop+v!SYji4P> z!CX4ST4p+!Aypuy18gUs1B;T}sDRrM9@+sG%Q%_Eg2NpFGirf*h<=X*`d1B0>w`Ga zawyDpg%dt=4&4zZ8T6sB=CA^6cMeOF!RWmLY)3M&3;f z0Ss3EE81pgvOz85OlvmSR2*z9;~*Q1hP7}ElzXBX;IH78SU01M<-Am|2hzkyl$t;o z%<9HXur0yuC4436Ao%t`V8v4NflJM|FRhEeS~w9RyqsjJ%x0Fsz{m=4chx~MqoIyN zhjqvV!VN`;B}L~!5UYj15@xiSaW@W2p?iBIyl_l=;}SJ0kx(di$p@8kU*8f7IU;HZ zlzU?&bfShCTG_(q19V@M^8Pa+NWiqRHMuHBlWAdHR~RhOG-QW0I!%Mroejte1wvSv zO9{m<0wVxq$>$!Dk`gH9m{goWVZp;6Cj- zPavy@?^2DhniXn|5T@0Z6-teeR0Fecm{u%3!<58PiPsYGjMDBvwUQ+jU>2-N$WirL zRlSU`4Wlj-l2XyC70%9{WprVgQBltvtn5`3aBzxA(17m|3Ue{1im?hh8I+#KAqe`q zgH__cfVBi;-K(YN@w>}eAzYRz5~7$RI+=vABr8mmd-4l0_s!XUR0MVUKm1;Yv8IW! z5DJwT6}awoG67>j(eMS9Bh`?_S7aIfe8gADsD#35kAtuMZPnDa z#6hL7)Q{)fh;uQ;LJ3zJ06h63IRf84R~Z7mML;9H&$|D?Kwzg;IB3$RRd&wQXm|m zQpUimXj$Qe^I0|-7M9GAg3%=HD^v&}?aKhm(e94LLQ+_g_K|V7(mu~(l>n9|Uyk?I zNO<;pYqExB!-CIJdNcv70*fW|=*}R*f?b9s2OPj!wK>*fq;`WddV)-tdh+MyZRhgx&;&T-u|^6h}>u&Icy@ZC%2Tq@{ThH@dNjb(sUZ5;&JwUCo^eL{;SgUVuZ z((QvY!Tzzkokb~RU#F0DS}f`Sn+a6f4lTn#$nGo(7dxrGsXG?>N|b%xq)0J{c`+x< zCWQ;We6AOj?Wl5u+Mrt0M6#&e;I2kwQBi*!)EbdefP)gMT{6N!S_a7jotJV(g|?)q zWFTa(QKCw`7ouO45*=FDZlWKMdMWy~iu(G`ec2h6xGBv8gPSr&Wt8pGrUFW|oCk_$ zl70!fqhCtZV~#+-Qd45kqG zTIhs*RtV!B+?&A^>oyIl7?f;6jd_sdc(5ww%%6B(UE5MJpP(h1;G@7NXvtN4<9g3cwa6#*Ifx1?i_ZkXo= zinnM{%=d6^lKZ`ME-Q__CRE8!1y6;})Bi8Y&u>2Jz5S3wQiI?*%qyuDM8sZ3Qm3T2 zOc6Vf6pPCg!@!yro{2#Z`5xO&W4hN={=;>q#LA?5Sz<*?a&-DA(Rn?pi?f0Ujx0%| zIU%e^#uIKT+Ec_$L1P@$RexbT)E^YM^lIU6owB_|cp5H!U8NJTo7^|b(?KbhF7||i z*fTviDAH2k(qE?Dn6xs?iU0#)FEn-4L!N*rTyRTDv5tHs31ArWMp;j`MJVDXX;s62 zINeeaD&ulTc47eqg>f<|%SaV!e%cu5!kl|>$z$FRe2HUFcrzTj=?oMOT}{fDXBsh- zqdFz#MGieAKO~}p07i6GIqEeb^BnfDo-c%|Ul8oUO=T9HgBPf(y7c;&02JeV3Bf1=Jup$(s_RE3uvJom*JC0ZxTW zE(ss-RGM)?v(hUb;$M@mTDHycuHr}5(?P0{cAIK{T7~f(N>K&F!dIrz&jjg9R_moc zX3$fG!c1NIVjR{)#j=Jj%%nbMSC|Pbj9kE0GRi}{Y{WwuqcZMFs(medLULDr=mN`57wfJr`~U}z^OmG9 zPN$b!0>LLt7s|*5eoCSsxbstWot}2Y2fz-D1=lGcy;2V|W`$+EY#mlL5c+8zBgz4_ z24y4)%9~JX9MeF;NIM57+Z9d{U(L!FX*Nxfu%+&oF%^QJJb;PG$e67{RShz&W~$1Y z)({O`d;in}EOA)XOi-y$I4o5t1nRTwuoPekRW&n><$O~Z=<#x>`(Y7BY7n7NQ*R)w zVkpF7W}8hQ7jXG6RA77VvtjK|Lg9#Td&~s`+OUR|3H36+K;Y<&XFw1uLU>dtT4T7Q`0}{Y-&1+UR0tW&MByh zJ!n^(Ds!MSVpBo%0#AkO9g8&NK%+nb9H<6BT<{`e1<%xEQDm$vsXjs{1%rAaOh{8w zz19=o9R8w3;Y_7Ybzk(0fo@fu9_(HjPyE8tag!0{JMZDv8zB^UACiPQl^_m(Bc$5og>gOt)6UHl@NHw zHrCK#T?}tUpiV-;LHB^x+j{|J#!mwsDrlXqLPmuSp;NyV`)Gz+Qz8gs@@U-;b!SF<9!VJa))M`*6mu zYR6V07+h04?23Yg2^qG)av+6z4y`Na9wyMT1uzX;5NHLNdhP>kkg0QqRkKVzX7t0G z)yY3-nVaoc_6EH|i%k7gG%FqrIDh62;<4bRvQ8ZjqGTSyuuNPbN-SrF0go=&t}WP= zPz)DlrRr&H|L` zL-Z{7-}$|DvofM$q=8zy!2l0$R!z;Nj#_|i;Y&e#qBgRUdkB05_XLBwB~Q%$&(6w@ z_OBP34YCp*^j_sbFRlYH^*?ybE`(LPRQ<31uCuCjVs<#I>Dd3^txEDjQxQZ*P1#w^ zByxdlj#$+z4oo@E^`Ao^y_BYc@LOi=-f$tXk_j^OMOA3E8VJx{t~0lVKT?7tHSpe7Xkyht{X;32;`j|+aXvA!yFs?YN~oU z-&ZqT2!ZWP=m);TIjiYNFsQRK?7Ggd3hcV>7*SwCL$j75D}+Fq7b?gKA&{A$m=!L# z04ws&B(4Omrw4^B5XSWv3ReL{CfRzif2b)7yhvxIA#ft8*5R!5fjFzJE(8{wmEd(t zTgeD^t&&t}EB2wahQRah^rCe~hH4Xp2>5)Fc|a3HmM)x%6Zca2H6U~s4~x^C{(oRr z(I?|SB!mfisAvnt@K%&^0%JX$warKP|E zT8CA6TqOZ8qIJ34fv>7+32jM#`3q^EH{c9}KFt8JsKb5{VP;2_t>WR2Vw^FP62Ew2 ziJ4)Ze7h~9Bk<*r-(MuPfRn`6y!3JyR5YSiL-<}Xri|FdvKrj-qMg|xwuQTTTOhoa z+liz+gx$nKhufWk0kN=s2s@QAk-7qI@0$H09BvPcXe(|%`*Dx3v@K9um-Cif>s#z3 z$7EdP>P?<$EC_4qsn8G43Nr%(RWTwCwP+)ko=vscmu?2;f^3l()u17_WdzSMghH4W z>@4#r<}|Zqi9FQF**SVv#4zf$@PFJfVu05oZ^g2pB6lASo0xVfIJYqESs$uh5-PCD zETkc~J0JKj>*27>v_lyqR+iLOO>YY;`K~P->BI{VTztUU9}UUe56l zk1h-@-&}gf6;YPfoDM+=oMNV1yfiW(YvuBiSZr<@V8~gdxrLXRBb+ zhmNWy2;`opc!*iilnPxEo};sd1$#>MW*v$~SA`0??P})EN%c4=eG)o%mR40m?;$M| z(;|c)G}&^zNG8LU=(b^h1N>X?kL;G%@V0=@!Cs$&-tgH-_U(t?U&;7k-% z%t%E?X8Yq{RCbJ|j4vinh87hl9fX4zQ_!;u<34Rdq3k7JVB8ap6?ctT;8t%BCpU$77s1vE#6IavQL2y*wE=_ZGTq)>XBM;ishLUt)(#O;7p4E9BI1$U*e9qTAINjTijh{(<5%d#s- z8MKZQF;%GJ6aiLg%LrmCE4#X`zJFk1u?Fu15F8sY;!Krn@Ku$n2g4)_`r#==*<60Q?0V_3h1iPDya2A#p)6Q z^?_j-2&}$|nX^m-?abLB^n7O@@wi>pfsRflTA|!6vTDi)QFb=99BFP&$O>j9%BvIwhfrP}`y2Hz zsN@yGU_s0fG%~2=w3An976ZWSO?f{q@lkZ1h!=}#7z0eoqgi8G0skzKBNgK>4weqA7n;8;-q;d`{DaM6B!gEJm zlZ%_hoIMtna_AgXySmVr7>;o4qiMy#Ua`S0jD0D;?2S0L}=&1MxO$=*HR<10xiRs`{JJ6+h43}+V}i~9(2s7z=ArdcE>X$*xocz)MtaogvDCm zyem+Je(YoLPc$qu4u84Mjrv?LO+IENCz#ab5&*U6Oj#eS3tu?`dYVrBmKL3{T!Q?H z_EniuDaah}#>M_viRFoNMkA^rhJ zz7iAMoFJ*EGFeG>$Ihx?Oj>r9L@;kAL0^?;^OY$Ek;&*dQDAjR{`RG=FZ|?Q1?(+_ z93yh~nIJU`nYltHI7Iivtv^v1Qj3|7S>z6AHSMPVE3|?F3n8$nl7kCveC%EIgG5jbbC)66v+@jyj98Uiaoy~Vu&Q>AwYrf3JFd8$&{y+UWUW#Zlv(W~OamF`5%q*# z!2kN-k+iJ@EUDzKaFSKLp6i1w;W$FHwuxXZ4{Qj6Qo(6%Ae4C@+B6YFGKC-rWF;ro zZdPynjGujsvUA<6#94WEA(frWf(GgCnh6~_LKMcak3d#*QNdk>aeaj741eVf-=ut_ z#X-0$XIHypLyotr5d=a=txri(67XZ%SAtkF^-KtWtgWP+23E0EsyYwS^QoA@kya7| zL5+%T)WpCt&5o+G*Yo*i=Zl@p@Zy(hS)iNKUT{_#0voeHk&4DFP@I+7@eRX7(=tv$ zP_n=BIMEumqMR@3kA3lGL|O){8WwMIuY{+bW952Y2S=oTrwbU$wiL6GnX^*au0-|ywXq|g>!M+|&;Q+eO^!<~l-Xu?z zuXm1r^i6p%AKX^+q>s^+ZK6?y4z`zL2b)O(jS#kB<2MO^v@N6OQ+8dtC4^Yes?7%@ z@fn7w30BuCvtV`jCv{o^+_wr=XMvfbt3uUA%Yk9yqco%@bqtNkmIH%PwGUZ%ga9w@nnQQ9!6Y*qN~CBL7b&{bk$YE?>m7OYAF9!<+;fWfLb zl88Mx1*?+iml_7us&dK3O8JIyRd2n~xvFVfWQMB>MP?n%=R3Qa*s4%K$^&G8)l(xX zKvl9TnNJ&YBiPm86cEATLS^QEwyKGdj(Ws;&fGed4ty{jvIA9EH25l_Dtcsc3phh7 ziV3iaU_AxFRJExFK~!yYI$zBD%xI!24_d0)sNPDZ^M$GnlE8A+W(a@P|DF$5Ei3b& z!Lk~+{BEMG91n_`P1YYTs$wBVK_aW9mRpkukgPY#tc1{ z!Eg+;tBb_${d@mG)n652p`t8d98yhCVj*<)$$JXsySk592!9o&e2j(KG#EleP6%bL z3`nb>5H;|_*cC4FGCOgyguyorT6Z-nvl8siYI-0%dnu;$s&pU4g z@J^28z)1MejILl)IS9gIr4DD8>0ZQj53%X-~D-kdNxT9cW#%jZl=??SS zjatwh!^&q8xLOe1F_0EVLh1Ipk}VNwv6eHGEC#l9a6bo+eeIlgR;e46O@k;AjAk^E zSd|HZyuu+P%=2SlM$~EWzcfNM%u}m}z+7uaF)-_50NG_wUxB_d-b$jLhQKP#UiMai z?7q26M8_fMR72qO5S-`-|DSpYTrYB>+T;Afmb3HSGooM^VgT~OF+i(lWsfwnS5myu z=)ivGSZj9IJEwvO2${TsOs@MLz4biO9HaNL@qoZo2Cb(YR z549}_${@8FvZ6@7X;ypVoDa6n%Q|MLkiOJRU}e;?>{wACtK5tlH4LJSK~2#2qA~=I zs?;3wK$ueSPk~6mX*y)(Qk0T1w2rLuP*J3Tx$ z9>)M>Xi0Ib8onW%)#;a!n8)fZ$`qWoj0t(YQZe-fkU}fNCQnQ7M!6A*;rKr zzYxfFAgfG^f?pUFVCUMg!(-sFBEO)RLnFO&%9T9OjwQ-U_G)3UOfR?w=Pb9Hh%oEk zOk2Ta6%f19R;GlL`Xdknjob=~C@ER|M|q31gN-@dbIS2+!=*_AX3nl!LXTLnrq z*%h4CO(q6Lb^(=+Ftqy6 zQp@VWT^(G(OJyZ{+_fvW3Nj4FLSYG92_LFqP;7~JHVh79SgqiSI=;YLX&5{ZP7UTI zBxE!*h3sGatZ%$=6B%4_Foi)CF(3@Cch8iiF)0j6?u`iXaJbA8`C{Kq>gS5Wm~_1z zxNn$};na`fE6&zPm@ihbXSv%yzsrY=oSsLbD0Y`yW5VE6y zlY^kP-AE9G+^TU#EmRCyZj}l+Dz_3a6VgD~lng*_hgSclwiBFd63oN-f=THJHK?tE zNfqkNI^^RN4u&Rm%+NWD(?qd8CT}+C9(kSnDE74)?1!lq1pfU(CF$=inShq5fD3Tl|LCOVA{ zz^|PXvm#f8Nr++oe|!+O*&PX5ucNA*1V%@N5HC?)(q4U#Mzt@TQyDwXv7%v^a5DBX zz3vz*p%WzhAq;wM;hP*BV{nzas`l`=_j`SZU~!zbQHE+KSE$<{{5AQi7eXf&F1U0E zQW**)6~NRYwK2~K{7`a1*6v_ub)hO^sKvigRhc8I%J^LAb%n7!Q`1?LofQz3v#K+; z$Xw&sOIx7^6`zbua{>klhT3z}=B(snq{qth(;#5b_;~5R>f*_UMNYkf)*Z6SRpv(0Dpv#d(L?dB0j)PynX70$ zkycu`5q2SHG*TWSXQ^u`^Xvcpf2tdnGNCXmlxmb;uQ8!AL9|c|3{|8kUXZy2J9TF<22 zGpcEND;QPTTN!FW>Gd+S%0(Nn9ioT{M5wqcAgCA~Fwz4HHqUz0RlMwY(1*@BqsqvN zuFCZYj!4Ju2&+1?Fq9yML6EVKCWaW8_LCrBC$hr-)Rx5=M4I;botp(r!AsT6>RvUg zCS)ay70fEs0ugqMAcn3g6AQ!j$nX7;L8Bf~{?j6}R0b~?)p0wqAX(rHkrkZP!!#u^ zD;ph1wg;t^pxLyNjbRn2&@@9-4J)$kp~gHC$PUvgHOV753{hha-YOGTw#H0*%66sm zjvco!p(8ySn&b_(YV44xCW7dYFo|I35Y!NOKoeX#s4`!5=H6PW%$3PV>1Yo6#V^M{|#JnnWAh4ov!PLpL7D&oU_Q7Ecj2V)~ z!_u_0hd782_`|XbG^-5PRk<*dJh0-cvdRj}DAt%8(?BvP6|Hd!fxBIgJVRh94GcQ= z?5bE0$qy_W`0>NgIzgQ#7t_llxxk9a9ij&ext;|i_g0P|*|MvHv+kYCZ%nd|n_by{p zp_N%X1P!;Yu&SL1y>;2cD&6@;wR?F`S|ZntQ2|z!39G#S+YE`T$gT(X6iR{o-i~H> z7u=yL7XUAW`Fn{6&Gh={Jyp@HgqBMwcd#TSP;vx>4^E@f&?smpXlv7r)B(vXGz~d6 zO*hgaug;1O!kidzR$^BJn{I+|p~_i>Iv@+og9q?^_RfM`LBKAP7qkv&;JRu;1FmX! zR)p&a4fx7-wQvHNpAhWNG;fQRofWy9gsT`TDumVLQMOqK>I`F7(IuypFr_3VXGJe% zl0fUMfTuiNRX3^t){Rk70Fxr%a7Lv>s765Jtnl%L`Fo11f*PhBS1n)XaMe1cx=L8B z3t?5oRYAHZbJ@X!7Py5(SjEi;LY)lsIu@>ItQKoDhhPrF<`{2k!)y+{5hJ_P--0ZRI26|-Diczq>OP7#VstMInO{N;~ zlW&GyfF35bae2T#I17B>OPiu$os_`mb|`6qR-tTDZnu#vP|G%eR>w6%N~M}eG-S^9qdsnHCO#|c32GemC{XC@DW%g zy>VF?s_du{#jqI2Y%t0h48U3h$_ni0nFHhR1O`GaEOagl#+7B&&a!Z#S;=le7BfP-7ivKos?$9*`bkYtA9#;-ag+G8 zCof1t6LKGByZNmJxs^fgS#CA$Xa>Z>Mg^aZg-8cu3yvt+!L%n%bdfLwScDxC5(I4* zd3IS?%CM=}Bgm!Q2C{RaNKstlht6SWnsTBS{G@-$2zLvCMW$gyBiSVmDv(U5 zDrgvF?O3KEpJgT*kdiPE@;?&4uqs0Lq&W7o_=@#rC%FS6Oll`YMzKm1{SHLy6l5CxlP_gfl9E?I0QyT%o>PHL8I`L(qq+ zQL#r5{SiUN7o#5XK@5LdtThhk^X_h6K`;K1<)?y7#{;w%4fzeNJsO47${r6NjivY9=waQ zp;55xu-qQI1HqL`2hk%@0at~&?5#w@`TwIAEvvv_6}Bc(9YY&~B|9nYq~-A7_nZrgmDFGY}Rov(WB~EMB6p6ORQ6lJQ_J92%+t zS6z)OIx5?Rqf*gJFK8&SqZh$p!D0ClVUjbjn3I)PT6uQclS~N2(iR*MvYTR#v^GoE zsZ*Fq1Dh_B$W4CSuff|uT?;GBiPN`5&Nb6hACkTsCMLU!`rTk?1h z$6ojGCEztaD1irIp5X&ayD6A5y zVd+^4fu%W0fR(Q%WqT?T#@^;MNOXuI;rP4I+dRPr2?g)^K%!y@ggWLb0l=0L}5W4^h>5mqHb3_M}yrfT!RUO-20}a z>jT%IfsirKIxHE|9>*_0DuY0{rBKNcUX*v)VIdF}92OzX5P|Tw{0vb?HcYFkL5F-8 zyOKayP6`8ql>t`LAloTdFfn|^=HCzpvy8;JD4t({##t6dU7Z4rr89{@i?VvdYtAi}DoZ&zuS_|g_$!j5mrd{punqQeGq1aGbW0}DZ-%2l^k(b z5)RG25{Y!TW)+aTGb?0-LExVIoGE2U0(Ud0T}bzmS(OWfiFD6qrCQ|n0^#8Yz9qV= zz+pMF(q0^|8I=~V#9_5)k!ONtG`lNJ2+1?h#$-DH)SbfxN0Sa{=`Jq)awgs3pq5#8 z4y=22SI(|diBNF+2xxb+892gUs5HYP2WJ(n3c=p5ojU1`3WHV%Ezw|Fyvk8f_f?W8 zD7amt;J*HI(v34*6odvVk?zus6U2QQ1rH$LpI;x&uKu?-yC^953Kc?)f}xnB_zIBT zb>ozAd%c(gYV_fFnHdFzXyEmyYQ`bj6d$VoYPb!%I7Q~z2zS^u5G$1lah_F=Rg8mJ zGWd!G9Xc+%A1cXF%+p3hWRFNwx3jB0i#e&G$%A_{IogP@O!Zl&Awb`k)iP<<5@7d0 zVrh&olA~vTqd>cBB&-TY1KFVM6YaB!UI_C(2y17iv2W!o0%UQa0k8;a;jbupS1)Bp zVR(-+nRf>WzPU+=W3EBj-&k6QVJcI!2 zR4C=(qDPxzSV$9UQKS`h0}(8)w;NedwJP;iIUh`@J&WAQGDuhINbCy1K2~yK^;uR< zmA=A>mf)58Dv5)c7}abrqxLc}3V7ARGhBqGfzUnj3`Wxc3i1HqRiYw?7^C*5Z+BsE zJxYhFtZ)pKRImcBYUEWgDrMVAwA&p9vr)D6c`0T$EjeZK z>Od6Av}5*)gjwb8guRF2q2VaImAq3XclmQRY{x^sYP1p(nA~RRO zAhzc0!yr}2Oaw;~24PvqP+kc+kz^&B@MgoRBFGREUrnXKNQmMjqrXx{G&fBUTkYCW z#q5q^P*y=OyFLh*oio&i#q1S|!KHz$f3`=#FHT%ph3vWJtliE+h^8+3fy0R;3L@~$ z0J1}RCA~N_t4LPK^@hvB#ZT}RSKOcu=dHXx#?JotRz+|%I&URrrBViFg2t*C5>sDD zI%SE7+AvWiMA_qY(PLyZ?oFied?2uV5NzFCFlB;5E+7cDkqfN~ne!j=o50C7^GYs= zRRLQGAKH)zw(y~+XjKAd;j92VaG_yIu%0lUPrg?))i9pV0(O!)_rKnbyK=Zngrd6< z1F<#e$^DkU`i4`$x(8bM)E+hwZiM<&OXahAxgB6nj1^87UrNpKM4P(1aF%QMr<58TAR9mNKE2dm(v+;F}i4b`~}98*N*nY?;~ zQNfUmtHOn^z;yvua9IQ$BV$6baH;_?04r}+)w8VOb*>sE*`2c8i(?E=_5OVfhsXm5 z)oxUO+}<#usw*I?KrV=gLCJ++SmfAgO0BM{|GwX7H7sO)Xqa#!QB!G#VcD*0=QtBy z7x{6T`=5x=SZOYbk(OQU=AlA&mkLA;URTN0sPMWH?2`LgE)*sfl`(GZWUC@orM+Es z#wvR&)|u<5N~SU(2^4Q7ArE)iTj4?QR!9O{T2X~u4}}{^0zs~)!j0Qk(9!8-XZ6_+ z)#`zQs&qDy2o^N{8EyeYXc&0avX=zoALug})w5TskWZq6I8IT?FghSGAPa25Rk+;C zO|4zDtW;*EK6FGfK23Cq)e+Sz5ip8>1gaZFS;eMO0E{BO&@RY=P3pj*P1R?}>{Caj zt@8C0P#o0&d1&`8@2JMJ+UlZb$ejNZFAsGCucTtLz9nfF5D!(m&{kwt!irEGcs-c`*TF5wgACVkkz;=|ClzrKx3$glio1afUprUtM2+J1k(F&E zC&{f{@L18T#CPRUqTVHEe}%P^r~gY3%!58qyKx%}mQ^v#Q4Zg4Ey)bMQdLY_p9CyQ z9F{5D7>8A9MIC|){hjY{cC{YuN-+DhQlW*q4U(iL&MG8H5n2(mA76S(p%oS}B0)$4 z!7osCoZD|qjL7st2!pw`D`tXbcSH7rGHLKW(itB%&vJ+|+hbm+r0mC5h3XnaQZY;%a zQtt-Lj`PCTy3`Np2N#aGfa;Q}E>)edaz3KRnZ zp%!l{flzz|+yvuIIUPLt_iH0X^EUIY)I7b#&OZ*weH~S#JUCZ1(Awf0k$Y%y79F3? zB|^CjQ4n9TU$B}gRsB^CgW80e`USbOgyO3(`*BqLg32-AN}HrN>|kkFc2i8q2umak zdEnIPpQP2V`;&#u89%!|z3m0m3 zC0hWf-b!Mhry0awrHpV8%`iin;f3h{uwYA^!=Ql>{>s9QBEDjFlv?MpsBKLUZtAk2 zM9HNXxfRaQ?E#?fiq5!opLv{KjcSKkNjey%?WL`o5fn{2NFlo)R$JY=x#X_ItO(xg zZCy1+)RF6s%8H?<)Bo#!R;{Fi>k~?gV+C1H627@EZS8_2hC_AshOn` zPSZGsRKn4547m&S<>;Saw|dvXflFwpbdJgpdv^ZLtL1@d!(UuG$Q< zO2|FL#3G2yrnMJ{{hW(~u7u-&dtDr(DBesIWiX5rMM;yUuC6WYLoGQhQdbnmXdFZd zN8@14VGS|(@gslFOZh~1Y@~c*OCn+bzM2+h)QA|`8|R7JnS!T;FhF(G^qCN%hQr!( zWZNB}^=9QtI3@Zjn%Ky8niu*iJ7sHB_!oup56lrztAZbtnvLNXWYfxhNeybMg2H0ms~QF&u43K!c|V516IW() zCC(#CTB`$*Dr$%8XYThcH>!#$Rs{uRT^Oi1)-*7?sfalii8+9!0P*lmSk9~o3XU~u z2IHn+L{7mMgP+R+BQ-k0ZQ$Uj60E}M5uY>Dm2f|>C@7&XZwKzGf&}TdDk%EBnoY@Q z53wmQR1=tm9xBavV01AmHy)0&Dl4sEQ^UxO-}R9ysB*d(L_60g52qDC)xg?K9KoP8 zp`om>a2JDFNy`(-P~jGu{8XsjJj5Nl#82gI<`q(jiH(qBFXe#ZsIYD%`XwC_E1z1f zk_07f2oBSFT=$i5BV!^LN{T_+0|$-vsD?j*R7x#KNw5)85m#kuLBYC*RFqo{R>l10 ze^oUr$FT>q($dXvSUr?(U{+CX%uX(07J#JEmR-`^9G5Y!uN2D!UBPb|SA~ncO#K4x z9+HA=+yy7PrvTKIu^M3`S59=*L5WAk9n33Nn#nBaS>i-nA>>;7g#X+q# zH&UT=Soo(E!Mx2p!ymK25C&NitYv|TStwR+T$5lM!=CplsaI|?!;Vt(5LD=UKj0iz zwba}g28TsgT*-E;5|HW)a@3qV~J(C(7w+D+2N2);sGEOG3>Sy6U8;tmNdsUrYd zfoS&25mQB}b(_b^(;jQ4C8U*`8B;SYM~7yF1%jawVQKM3ho>3RD$${A7?f>rn31$+ zgD2n6t`U{ujkv7!Ew(5)KqGpb!Uei4_$!!JJsTttSu|T43&g^OE|;1e!Qg=V1jio3 zbrIB#SR`tSf^b=nXs2M^GpEzc90OJizFLv{Zb9ztDh7#ungmWT6zYQz3Uv$TGRV5` z2!_UlP6;0h$ui_liQ#R(&g)VHVHapo>xvy)qb-}ol2tQ=? zXojL~&Zd965xQG{RS$&0VR4G+CondqMqxQxRG850umI$f!)ns=0lQ0Umv5F(7hxS1 zvce%`S9|w+@Gew4WLL_IIvIlj?*nBF8VOHDs{P@}TIv4a@$xHP4`@S|a)wyIv$=dz z@mR#}NgZ=J*wsR6i6p2Bn#B+lV+)Qy%j~c;5Q@jbDWCE37%yvQPFS<6JoOl{uWnac z9o^m(2z|?7qDIL!Si1edV1V_&2mLgnD&3x|f*xQEYgQpAd^XGw72Zk}V6ZC;`!LA8 ziEkHi4Cql|Mx*#x>GsP?d@Nc%SuRLVUXCu=mT(+V7fkHcYOe&0>ZNloBix-c!bWf9 zHkAuw5Dk>6qaXbwHYDsR8}5`j(IpI5%0z5ARExrs&KI_5#5a0BPr^~@o5cb zREjH#G}5MBxV$0zqvR_2tqj?7W>WQ4u{an4poi>9(5^Ecl~phU`LqpHtt$Jfi6N}& zItto-1O(sitx6~cY8Zw?o_V>-inEMi0c>z|S_px7aKR2}hegRAgIdQ4mUZcs$Ih~nF-0tS!U;r; zOLm3@b1Dywp|=_;2$~^R68FTgU{m`z?Bia6R)ea}Ff7w4(Fm=Ek@EfWzpfirt&pP~ zgQh&Fyy(qEUBygl!NGX;Bs@lN$U8Vo(>&^9S>l#O$QiLa-7z182_IS=G#mrj_R;pC zDkYj@pcHYOS($V<$3SEvjZ^<&RvEAlqi2_*Gwz(`Dq{2j41*~;2TD}OXa|L;_gC%M z>eT(ttfpgU*E(U}x-bl87K1mdr~2ht3;|nZh5;1T&dBRXqeNf}!HDAe$F2dy!LWE6 zQbF}sITaMcBFXMJQ9CW>08izBPG-2jd+bW2w;{tVsukB+;Rtz&D$9_UG)~^tT9w3l z)T)f2J=>K8MQudI8OlkjQ+Dpk8I~RONW04JN~<_!s$C_aEZii!8g8Ew(T7sd=fn(Y z#E0KlX>ca^)pz+m3CRQv!H_ow#}${F&IPRwhAUpE4nlZksdh_T1+FTD!7!e$1U#0r z>=<0({?|t_10qFL9ttI2F5ryDSph_bglPfv0xT-RSB-&Luz`qQbXJJ%_=#<=8YD1SIyWm6hd4qDJvlust8Q0h*@H;bkNHS6J6S7_*|ocQ!cq!qR~}lmj85~I-DHBb z^37o7)%lHotQ4g1xn3aqU zLLgZyYgEh#D;=n~-bCzhShAy%H7RnT41mE|>9FIG;PpH^O~DjA7FBOH@g77kSdu+U zk6rPm5n8ntZ-#7<$g>!NkU{l)soEUsaGDCXL#wxckAqh0#3MlL9$G14_q3Iyf^ALn zx&<5qqIUgqu7|8+MvJh!QnaOjU}H!$-U<$Cxzv24gs8Et(Mj5YtSTEgM;(JVE%+yV zHLwg=LNOTxg0$OKPFU1VReQa!Ya(jgO?NZ#3u%?7n6 z39_ylx(NwBWU^uk*6DxA?@|KOT2H1my_HVNundB=d|j~7v{Wm4oWmLLAePJ)l`NED zSAZLdyfWHcmkfq52614!!Nc!lh+!kIb2%qzrKphT(Z!<{f$;=ODnY=l=X8O&3OU{-$E)rh2` zBHz!0v;(&u`X%6)QF@N6Sa5qi7lcj0EvG^d)CyS%q?|V575A z)s;yF(JJUE28o00!5M-QJyCX6(=_x!&QcY2vHtERGSR4i|MdXNi8^ zQ0*#?DFi`hS5c7^Mlr-ZDO~br!X>vAGhN8bnPb2*77>F6LDw%xh*j$sy!605unc*I z8cwWf7DH1Q#Az}e?caN@Ei#rv#l;LQG z!$0iBF*@~8X$Hq#iIrLI3YEb^K4>=ur%Y7JW-^jU@}n3A;k*_lJQHjLPBa5rV_5*P zZaCkCQVl0^4sjmCr8h0D;gtC+183ol4T{Y83KoU0YQq?rgB6v+pn!I;qk`Zs9<;ZyqQaoG(+sbE(SIDX6rL0hLPNS}njHhe@;L~Wi) z6lhUR2N7=$_#pU>+Xpq_y!I8}grn%Hg>4@=K`n)3Sh=FB%(fG1m?QaUQ)2*%QqGA<)a@d#j}?=dx@S=Zt5s3i%+Xe7uWrJ=b*9 zVTmo#YeiC2y1PWm&}LWylugMQQU>MQX;`l0e8AG6^|}I1t8?qsete7;`RlMfkXNQU zcyp7W&(8W#cqLmm3sR3|oWNvdppJuS@K`|Y5nTa8=ty$3)OMqk^l-oM;puOBf`}kT$^q)m~`93CW=DS;+{P_Ns!NYtH3h&7MvDAUlm@F6V)P);B@J8#)t-PZyf7^_&;Cp zWk)i=Ta`O-NLtxWiBX{|VMIZ+i%X8+N}?d{@MTg#o~53#q=kOg2W(5>mD4i#N$uG` z>0lzQIq!=#XJOafgL_rZ*Roy7eMdaio^+z{#HM8sMH9&d+bcM~?RBC8uN1X=vnsa? zmdPsvuZ|PzL4-w;0V|n}%|c$m!0-hGU&@oJQP7S1@cV&Z1`-)%7__fE>yL4Uf%-Kd za(H(Y)eCknRO*jOwmaQbpcvF$ML=axyBQ?f=&l^u9!OE+uBP)0wIM5m|JHX5u2*0? ziZ-q?h-@(FkK6Tp+KL*p!5jrMyh0!Zk=0%r4Ctz?ydrkDW_3BpM6qTn6&wexT9j8s z;tD}fa=~a~r63rr%1k}3sQCCykEW=|y?Q_g7J1xM?Gh!Phn%$1FTqwSW6Jc^iAq8Jbajq0iaTd^|bx9rL> zkmi&o$RHIgFjp5516zjwOWSoUXns5$m+^Mg~tTi@v01qHDik*L&cwA>sB(cwg* zxX3d?cp#5RV~?fY41Q2mqVQX}fK$X)6_KblDnKg{$7DKmbYnhP7gYF|d{r{AAOQlX zGPTb|5bgwSUDLyMGZc74*rz4D52PO7gP~2z%`XA_BMrRqS!?;lEHeq+JINM;2IgQfEz}~ zD7T7%K zTDtaG*|Cv_4%)AIv+KM8R8Q@v-c1cL>v-?yy_Q{xg*s!kuBsT%Se5I6!l|p9nz3$5 z>NdhyvCvH1o`gs_JE}tUIOz%&2BXS+mFwt&=y+89r(xx+OA!HPBxx@0WJSv|D&od$ zR(pLh@Jt(BB{LY{oIrh=46yqyH7g3)X;u?99W)u>&|S@F=n7_4kA4GPRsXYJahM7j zV3vnYZ;ix)$U|%Lg?3qtcHVG%UCeuYg`QIU6O1QJCs=p}m71IynaGf>iVPL$D%_!0 z9+$srRt~CPKGi@v;eaAZpQL`@0iX)!XVnWzSc!UpUMq|dEzb6kzGfv8q#h^_q#n5M zn`sm@YIbi|U>1g$?eV~m`WWa4cGrKI3DZx&6MS?w#W|uN^ z0_!zqAtl`{lvOAQhIVjOu70IQ!0 zR+aQ^a8uHL>iU|coPjGW7g;N?#;Q~kqeJLOVvO{k4#`*D z^ryurSfJOH2Q_@vbJD$!qq#2jX<}NgG+7Ir3Zv76uiBZ_3jwAxLPXbPfk#@(&ai;i zZ`l#zAgnA*{ZH;HPxlz%ETTHPio-ob6vOXB8i@1D8Vy-V;;sN15da?#t%3~vwnaig zyZ9?|3(_Lts(}-NwX_;2bsMswsYSvhf7(8d?>o!B!)mPu{?Ml&=t1>HRRkN!`ai}yl$2bVT6~*k3 zEl49*Mzng(!RLhKtJl2AvbdV#q;@eaC9Z;Ljd1dDV<=2z=b&E@=1Svzc3Bbv(S1V; zV|HRqYoe-WZ<+tE8mnAsj$($eSr_yRZ6tf%Y#!8ANxvYWFb1EO55z@NMp(aEkT2*? zr~=#Ju)JaERwa$p6=1vU&ZV$D%lJfaMPt%qk*!eGn7Dvb8MbO!niAs5-~akdG`Qjo zJ5fg`xq@i{RlcHGAWl={iiymMjgZZnt0as;xDR{m2I$VTFwyLgFci84)q#a>K~XKh zpp+A(l_kZM7}oyaz|I^Pe9yjdD*!B}Ef z#9CpV_Oaf{{UecF3E!?F2CSYZd9HfSIVp5C1&gr|3-h*>E+>S;^4gd>c8A0Aon2CH zu48wJgbnS@PI{cm%?Z0_5d*yP0X;Dref(&?2Y#V8nlEz=u8QLsti&}G7%V$H284q! zALP@((+bE!VK9Jqa--U!DQh`dSv3$gfOjIR?6BB3Ke|YmDHShc2tY(B;PRLchp4;+?b+%q$(K;C2bfgDyhdMrPikNFA5{~s8l5%o7~8+SPsgZL;Ta#J_293NBf>4mPE?#}E>~rL1wYJ4DCSi_?ygm$46sbmxym)Mjz8; zS-99$?Qym&IIKLE2qS7oC6EahJ@%ps+n^yr;g)q+$t~9`OE4Dh&YbIIc9fCOP7@s} zB~;`tR#qjk+K{_$2?yj3HJ|q27~R!yDdFpV=!Y*->P zEYG^%JYbk8!XawUVUQZk311`>bXox%)}U$*4Cx`Ac}3@CNq5IIj1XUmtUb5R!(&Ca zjPJy(Of@Ixy}?DliXtJF4o)-3L}_B7m{Tw-knV+M36SmqxGTAkd%Gg-kSMH1(p}ZZ z>aTpWgkc&8+=oC|AAh21S5-}eG7Zu!kr0+NO8{XN?8+l7spf!>2EvjEq3tPAf2DN} z2R&Myl?#IgU@0@I^Fv3_j4FJJbyw;8RLn6noeP7sEAd(pVAbLvDAJ&5s5j1g28$su zO%ru?wI8FdT6UXv^R7Z1)KMS7t^~Ocmk=)huN$gy@XC{h8o0YmN z3$GCWgcFULnUM`qt8${Uc5t$B?qde+vUVz`Op+nQ!CK*2AQh9qEWsLLO6^1}Jd0t; z1Ki!~09ILob>9()8-fI@MqUX}R-H^B8QSUgKmG+528Fy@cXJ;#49YxF(CsD+0=5^L zQ3KtsupMFWcogZv!Xw&1+hBSi4hsv}7S5LI*`Se(3e6DJ$9B(>(E;};8TFzKRRg(t ztZTXriz!={Ls+>XHPY>YW`JcCo9BJq+3gQ5ThB+Z4h2?2-PuJ#)Nw#xL4I7W;|viA z&wTsqsx(6n#Czc0tH?cgtYIWr;;|T)K{Mnj`Sen#@aP|Pa0W$pE98~upov&QqYicw7n zW#U!#S9P;;Vq~=>iG=%#qaO=YgT$T`3B3eMTfI`@c?hcEv;X!A=dg65s7kOh#0tEq zsSn;PBd^N5Xo6UDSSaJjtPlDtpsIwhPAI~vq~JadR_%)OL^TZNqBBWRrh_Bk8Fa|= zE6zWq+F(>O#8@wJA0R7&ty^J8qHr(6_T5z(viK?`77Q!u6z(*p#EQbq0=!~N>fP@5n6u!#Q4AmNrNe6?kD%h3K3_IyDRk9P) z!AOgSMClnASLC5X`km6Gs;_d=c02kw=Yq;yjmlL$E89rn#3cU73F14~K_4Kx=DXRV zgt^L@U{tmzL0=Y%l458QimFK|b(QT)=MoKIL<_S-3;Gz~s=$aEwkW4xk%q)RIRChq z3a+!4aawxlwcf1CcCWk|mqUH!9HVVpQvDR4V6_zGuTPltm1QUy#Yi z9LO-Z(ZiqpG^M(!mVkpkPxZItdIcpQ%~=}o*g3qV zmI78dEAXEJ*O3BxvuaEMZS^KeV;+t!>g8!jB*|GhcSVExf+4W#$Vy^hE4e_k8XdWi zn{blaI23Qh##F`7SQLb1MYFx!!hRr0xJRF(BrsLF!d~l5Pn>RN5`kAY*W#J>-E2wC6l>@u5Z!jhl)0l?N)O$3DrZAkgTnwDHT@qjyfTm2Bgx|nfW@#7np@@P1FL&<(UdMIa_s$Fk&>;lL zBmyCbsz}3=BZy{XiD6+zZJl~}bOgb)B*F|t>*~7pgcp$&r@5pPUEefGYvAwzgsGR! zFshTLR}f9BHXU0^uHrP!_gN5)FmBR@OybyWza*v=*KwXYw&ld}Bfh`?+VeaBD7yJt z`nyAL&di=Yd#}CrdhNB>-ZNpbFs1`F(VVWEw+~7b(d<}P*(!;2Bnb1a^I`CVGTAqB zFXX$4Vp(0gx*Po!qAIgx%`>;I3bdhMMFUp841N)AtGl%iWd8Z)VwprmR=s36 zyC$0zah0zZTxWf=rUPHvX20&O)rhN116E{J7I9@%mWQ)nNCWolA%mw-t0ZP@*B<9# zu(1Twff{e?^vlI+r;-AMi;b*$JPg&H)bhZXOBBYJF22da7ka%`B_+R+cb#UgKX0=} z0j^!rmCXfa@~K$Tg@3^Yg-%#0;`k2cZZ?XF!E03&R(aTQF>Qm_>SBb|yWYE2SY=T$ zPFQ6IJFd{ulCJD)sOtzTyjF#k(H=tEvNKy{wX~@Kr{LSkqKv^7lY-sN= zFmqdFMCFEo|LawtnN@{%!EGSw2H`ZessZy!gu<#q>*YJgKwW36d(;*Sn`Nqtrq(FH z!e^C{(cP&wEYXxr1+KqEt@*4jYJS;Sj+tg>G*XsYxqJPs)ddon0<3yM*V&@>0s+TW zPw0CfuylU8XC*lxX$&Y(Oj2#=TR>D*zJ60g9A}XWHV9Oo~;M;$H&4RANYtTJGZd;S2&+8B3}3sMDlL(a;fSKo?MDgdipB2es%I1^ zlRf`hS0=FVCYUXiJJ}119f4*3&q838E%pnpYtEHmH8eDfU9dJ@oHO+1|D*cl<}4m& zt&bhoLe;Rs8G7oaV;3ewR@o>pwWgeDHIprJ&Zja;D6i0!g~aqYtx^%yvk${1Gp%eK zSaLsS;}V;^Db!%uek`;g{97fNlO0i&#P8(hRryYa{q_>&iJBibZQ1 z_!kgYYxg6{J!G}P1wZyZy)=ar;VKsuv)!U%DzfV0SKVZrr`f8TEG*Pk3FdJz&fA`j z1)ZglDa49tg|K=>x>5VyJb)qJsl6J&aEWG`dt3}KjJO3O1X;yR5gAjF$%S=gK8BLC zTF=dn1IxMDUy8CY(F>y;qB1YT>tD*vZX&ttWvDKWFv@aK?4m4b!E_Ck>3WHX%JL%b zx;Io8%=cRDy;C0&N);gc2{x(3}va46!qDv=AiLRvvuZuW-jHNl}37sI*&%bZu4j54yy zZp=HHlhp-x_sBIpVSN4WTMp0IH%dxz?72fUBcu(SSFMV`+Ah1JB(Th@;360@hiEB` zj|hf!9HJOkK!c3RXK&Jp4adA18RaVn(%8_AXK#e%{jXRXz+huRlwWC5@DeIPv)R*D zI?5`Tr;t~@F1iX`(a<#N7z#UE3XPGRD*G7L`4SEme6ec`5~@&yRdJOCTy5lNM_lEK zaHI7R8Vp`UWXyl~*A==tbrr*O9PQ>5MG-o>D(qPlp|fW*qkWy2V`sFd%TH})LqwMC z$)}Yz6$fo$d0fD1uS^RTPSMnNh4n5Kk?!wtNsKG8lKUojrutH!D7S@=p{nhjIeD{l zETH1k37j6^mFTLnu6f;%tCCMNv)YTen39*_LYrLKU@+UJy|g|;3a1FU!g=+UvVVQ; z>?f`C4j!(mL0fo}eGQdGf;RpuExal1!?2+mtSr1i4dT3VamTRk?H^31aF}|wpuS(u zSKSnG?FTC^2JEY{8qCA3B(3srD?IIDiML#OqH>DQIT(zn+^k@#>CMkjEHnC2X|cR1 zL;0>!>ne*6Ed?=TtL3Y6I2IpTvfEAb-K{ws6IXX<%ehQkU0`0YY+aS&j;nUNHm7}Q zAH&}J)`VLX&Z}%uvrRS=7{kc$BG+>j;a03YEq@N~_V;T3FAHsF#GMYm&G3+(ut@J- z>#Ah7|HqbXhfB%z)V(|q4h%P)0Gz>s+$A_8!$ZMh$>wt&&*B5n00;} zs0ox8KAl2TK~%+ZF5S3YY4gCCwIjj*^~qe6ynJ)vv6sXwF1cCEO}AtQ=Kk z0mmCo-;|d~Kw4lO5_5A&sk6gAUTHp^OjtoxBCOo*I9Rc*Z2IQSMJ&5a_G0Y~O3<0? znG(DN))jQc--mkJ$)vg)7?vh*Xk!stMx!wU%Jvl$=5{9P`OaW5A zuM*8(S=D?YkyU(L$?X}_Uwm->n-*Cwe0`01WxHHuQ_kkRDv7MjYInO_tuM07Y6s5~ zih_1l`>Bk$%oS<_rJ0P-Uczo?aAal986l zt0nPqJ(6KB8;fqU-ptat6AH zy|kaHei;=%gZZzvOQN3Yb+{XumFCUXUxCvbeC0;q?rSCRaG?xcIHijcb?l1~vaaF2 zCibeL4RbfcCH)4@dhRPHveaVd{Dra#XG%q4m2Ir@dciD0CZj3~>0^@FBvc+D)8oCm z09CCY(s!@6D=RC*()?!@)2^*!3f7@zVwd%u3~&148eLcsSA~;dgJlxyo9%hvm6i*B zAV{a2ZFHnCb~$J>ag~Mif#Z!-A(E;z9(=*AL#XwBoB>7mn$}f3^OXQ8BafO|E2SS(Hp_W}yimQP5R3b(Z=J!8L#D&pN-9 zD*V=PxjP52bB)3~7dGLg5lt``s?dgo54n#yBfQS`c--X~&1VR0OQNc?q2j|rUKJMn zRkGkYeS5a!qs6wbKlj}0Y_QLAo4!Fl$bxs{!i$@G{+%~eT<+V;Q#no*R<`-b;~6Zr z{bE8$-UB>r9V5zutRV1=vh0RIlhhxm{$_+$zGx67_^m-$V7{U$jIv})a#7a!8;6Vb znph7*OZm{S@_nUs2rG@o`ka|nkkMM_s3R=-MK@S9VK&xCX{(QtbF{iC!^Jrq{^%Df zgmp@Ul`Wcpu-sfuw$+E(Sos{G#U@>7jxgWqgSni{;b5vco#sGvp{FYgfY(`#iYaUA zu(ZajIx<|lH{Yd-aPOIZP6-QUB5p>3$h|Y{g~Xzf{G}pGj+Jy=n8jdKt@pKC6XmX~ zY$NSrT$pZsRf-uU2J0oYVRelcqRPgFZ$V06OS0XEBAqV0iOl||Hm0oY70Rkcz1b`w zBI~6n%klD)gBF4Xj!kAczx#Wktjw^L;9_5fTuT(rEHpzwSk9SMd<#c*d)Y<$%1bt( zgQ1n0wyBUZYqBh`)+qd5Bg+Lf(B7UPte0LkK`7(8fqm(Gp(CmbEgY;Yo4~|kim)8m zS1g^ExN_lhc|Z^ij)LJjA!OYcgsXU~G>F%_>#wgz$RrR_^-E0n{LFqwfU|qx{AqJLtMNKJk zW7bw~U~RN+VtqYW%;uC=I$umo!-uM0M%~_HV4(*y!pgqe<@DeMVjA!@OqjGx14hk| zPh%;a>T?n9qB2cHSIpRS=k|jY4=LiR_-IMxi*VUWuXK9H%|Bm)X~JFu%kgh+VU>6p zcHYR1WtvbnJbQ~~iqL!vI2Sc4lDW{aKW zl6=M~!izJpUih2pVrTQdue+aUb)qm|>a~u?q2eG-z3;_#YB-zoiNf-f4(V&XSWaSX zyrcHF$n-xgf(PB$|TlRX;?#PQpduP zFA&y{TkcHil>AsIonpE3Thd^ex1`E%eLvQFs$U4tR?ug&&%IvvY%|esj;Jcu6-KPv z^$IOXx0LF4$EXHFo8`?`##Y|yu ztV|x+m(S&-1Hk+5P8ZZW^Qs(lm46ARn9CW(T)(K#46gBDxpiLV9EGUlgZ%h~iR!xF zt!`19MPOar^z*5UiD^JX+*Ed_X)}gAWE7`Ewn?9}VK)+28+k|5;66?2d`krP6~P-N zk96*7aEAN3Y7os=T|H5WY^VnJUBEe7*-tGS8&)>GvIWoU4F^pNmLeNU!F|$x(t->N zEj0OJJ`w)2i)$_SlA~d};;#6+LwlwP^Sa_{$saI;oXK`3? z^SX+V@sWuvtgJWR&CLrv+doPXy6K!tXSzF__pZOqP4|*JMT1`GE01WT$zRF?{Nfrm z*18kWJ(Q*JhN^S465e38yBt~N06%BDn|OF3?1eJkr5N2{}irVvY{RhU_jmdUW3w3yOCA+AGO*zU!Yj**tR)D+pL zIOJju8WKZ=L>RoSO3E0z}C(W)cMyrb)?!wW^t^alE6jx4D|BdmOK;Ua3p(~kIZbD~W zZCDu=3g_id4$8jLg8ECX4rwBdEj(HIBs4^odbKJVP;GWbmz3kp&cjfweKvQ)+P&4X z_=a`Hg_Ri{b6!a$N*kJLyHcZWZnDDJiZ}Y^_2(v^(<3;>BWQxpIfs9Nb#A8 zEZn^m?3cx3U1(%z!G4)GGzR|LO6R}fX%-(bGcjCI^V_)F{VSzE{| z$*6pVYW7KhyL)4?Y`3CJJei~YsNSS+`aa7|!x;lq-3brDMNk6u|( zf~VwlFAWM$*`Tnp$9C20zTq4pbCl+FPp5O-9@{etmPw!s=H{0~mD z+D!$1$PEY;){lUd%pYv)lMD_hFT6_Uw}Y>x-)i!*Y2+y)iOcFW<8dxn=l&>2=RC ztuk5Fs{$(vR4>u)AJ7y=JM#)|-}dShN1+3uBK|gZx|gY{2*F|~SZs!@q2RiEj224p zs-CIm-iaK=x~~m$$9+{Y*i8xM`^r>9ur4l8<|ALNP!&oLuR`%PXGc|82$oS*DFkc7 zZ5k?6g|xzYPltl(+;hgt`G>;YQo@bJRjLFvFmxM$6h4NsXY^9ZtIW2_*NJEmJ@i#} z@)R5B6k@qoVC7zhvcMvmp|tcl+qSQw2Qy>GL9 zxXwSZktY~D(Ls!9fWn@w~uhx1+3$tAk zs~jw2L8BQZxg``tBNw|On^!?%D>d8Kkyz_5%qdB%%;BE97{1w$Id`{JHjI&D&i$WmEQ9G`;wudrMfG7)6(s%(xCu-18rjXk!oFgbzX-y@2zjAA zm7_VrJZ3bXe!e6zqdlL96UXFMWZ_AR$%E>;s-5Ed?nd^mW4&rLj2wy)3<XM67P z$hKRPyKv(ji!f;qYBcDaS1@+!6ixkArI69g+5RmMg9S~=Sho!+(k7>R@Iu?yX45!p zeWK=V&j@Rs&!py-duFUxR^}9O4cW?^4fn6jwi$H;!pz&gb{glU2ZY^g{#`F+*-}E2 zSlcs+Re0O;xY2AM_jN4y%ItIcZGg;hM_A!uPiF|Z=@~3(EWYkq!i=(<$SS)y=oDZ@C1NWkbS36&hhdQRct0R+iQhu4lU|_$pgjpVL+DXjo?!=K^j~c5yEZEPSK| zT@f#Hq3vsZZP$<)SoanyzBG$d1T|y=>%#FeFFabEd9K9E*ov=`Thtj?nOhVC>(s{6 zgIMbmf`;kAXS6Qo0a<(aue423MpteZzjS`1q9Y3Tm7B#WEcZ-cr4xeR8Wt8!R4bi{ z1yQ;9m|PK7m}gyoyU|tQZZAil=C*l<;@2+@k)o^1$u!DwXWaPl42 zO5a_=Z&mS&UWEUuJN{F>;>sKinSphx`0kReohXZ|Q{4-#e8#{kZ(o~!mCrHqOgf^N zDX+@;AE7H*?6TZ1xnHz*NC^8BCRVSrp~tGsqGga+54n|u;wAUBR8xMHVC3~Daxz2S zeS^KB$j?J_A7B`e<%w^mJJ^>Rk)2)M^~LFY=W7m`6)?_{on_lF5&A2w~Md6s|C9B+eliK}Z)tmF1$#a~&(IIb7ac(S+c*(oG z<&iiXt?lN9S0+Pmc+Q^;hdu95EA$@nz1v&f%9uC3=6tAQk8iWH=e^3`?ZvfgsMH(b z|MUoVb zU0iuT*mv0XwoUJ%dhgA**ttFp$`6eP^Pab(v3anqb8XT0#%taUW8R@{fqs(uTyVqK z=2|04e?oWX-!QymDGr7Y)&2RnZ+J(2$CQ_B}Nc9(0&`cIJ1V#dp76Zw5P!{k5Y~fvI7LB+GXmp6r-wih@4|MHUFo4am1xNuTvSjr7wFA4 z|D#HKcU$3lX2(3Z>j;xN)sy+TV7HgduWTh{w6@1?mK*7f=iTb>p#?j}mM3`m><7R4 z@}=&t|7luM_Cw~E=#{i5=lreY+)N!Cp8$$XR-`N6y~1^Nu@m9uNy3#+Jdb=%LOg0? zHz#_}^ICR6YAjt)oXE|i{1q--&is{iFGx&}?wOg#|ETY~e=WOzsb7J6F-Jq0kcMeT zu7BYkDr3m$v|4(a#`)`=+ER>u8`Xk7n*&87s8L-td11TXjD2q`3V9ZV(t7*2_mrp; z+Mqbu%doBItw=M@k)^Ja*FFAcFZ@~X!dtQ}nxxiAR;JQLJ-s8f&Hvs*^zV*s*+ubd z#T2((%~Kk0U?_0Y;eYu8##M5oLifFy*1pCoo;S~?BGofpcm7OB0js4;LUQZ5yNt7L>)cGGNyPc8) zLd|&kx_gtFl-Ni_?}5ut-TB*zl5~n|V9 za#ClOvwP3IM{e)_{C~Bq>z%0BaqI>c89VFUIr0uKLw=FSa-GxWfCkTjxZ=<|MzJ~Z zr*~=cJI5SRr*F*jTNShm0ZDnXyCh{!$)yK*jVB*YPiEzVVmqD;%fGWm)l3Y*1^Wa_PcDj(Bi z>*zhf9@iWtwj@ie#V*U7kX;-pNM4er<{&9c>^q(+vgcQi|D&%R{H{aak;QjO*6tXQ zkZ)FWRR+BgoqL%U2vgfse#T#1JM?W;o~S02srq^AJiFQ8RISdazBgy3jNN5L1h8O7 ztXBdgd;NHJ!TajG{CITo%UeFu{gJbI!rBYNYLPsec1MRKa7wKlb0ju@wrGgL zIz5=e9A|Lx2Cb?abf}D2G8f7|5nbMjYw$|g?zTmZ1!nj(%(X^;GPJUw`lt;8Fr41cz%4#>|w#D^b9M1|<)9<3n^mxLqDIxH_VoeK3HR0Ca=?s(Z`z$lp#MddX>% zY$th{GFv~c7I412?yPny8suSzvXlt>u>#MLA(ML5gBRY=5@zC3; zdOK#XfCPsAlba?%o|F0Upo7F9+Ki+K$vG!u2v?8rMPcp`8$A8cuifF_{IyI69Sx2; z`1UX-@DAG8Os1kMsZuikCNOa1wjEPDmZI8`6G=UJ2vcrzO~SPe2`-Rb$1vE?ZU5}% z+AK{8+sj*@Uh)t7m`H~iHn!!v@NPst%mq?m3EmT^B@ljT#AU;V53d=AhAlinM-G5e zkVg$rU5E@cIf4}M>pLicM=)X11TD>^lZ+)}R+NBAZh`PY=xN>=59-NQd{(f`elmW0 z+*e0J#cppzO*G@NWnMxv0%qqRx@7yN7d@jh=P>8P6;o)-<> zJ|ER?4MxLVc|V0M#6Yr}t`0i~zvm}@WAHnFMNn`+hkDNgNdM}R-N>VD5%6Q$hTb9> zAS*zQ=vSIE4iFG^GxoiDLjP~BT^+PkoN_nG)Z{8K-Dpyd2PzCZw;dxcRiUzzMdAfH zq=R;m4f!AYI1J}Wne#n{IgpCsH4d9%Cly7Z^ro)me4GnAbCjq`DUy>MjvYqyMrH_P z86B|%f8>i`@Q~Rt8mR4{QcV)ydQJDb*Zs-YKfY_=>}*DVWWP0->^sh5cxU(K@bJ*F z^IQEJ{UaTfBpDk89Xx$IteAQHXF-!HC6$JEY?~gFT=N>6gX@DyAKq3edXd~@8O9N( zhL1~oiT8~gDG~$+jcE=2J4O)?`NPXwfO7%kG6r+efcK8tlEmzA0$q;85}BtXVHyPM zS3)EbxqJ0Fe`XnC!gsf_6xUQU0u&hpaw2F~dOaK+oTS(|pqJX*`OW0}lXfy6`3(;& ztJA>10%SfHj_~Jk3syN|*e8%$jQc6Mk=&p%lPS-8^ra|E42LZFM| zm~bExAOW$%jmTRx+4f>`kQ9Ie)73H9n8UK+;JFM8pSJ=!inj$TXVU309=GPWoR0%W z@Or`evXykm&_YSN{3N%cJ`W0NbNQzFSATq_`|!U|ZVuF7t*-LO6E;1dX^GJpHw)8d zv8YmD=VcKWDmkj{LI&{;U?bD?ZagsR?}9OrGE>Pd(0%f5=@+9mQX?1#0|eGXY}AwE z$tUUQ@JwydsthEl-pz}EAZ$m$tpWWC9l~jmxK)^-Y{+&65sw;Kp7K_J5dg$zbN$LiY*K}52|125`b3V-QAxUZemr&{TM|X(jgA?1Z{n#${dbE1d%?#(p6Py&=Sdbi7?<)e<`QZdH%{aYpXcbp$HEp_meqtgG@8246XxcuRM@m> zx5AEU(IFlnKhjcgaTsBE*Sz(v7eD;R-QWI4mPYPD?@9lLI}&rxJ&3s`2;B<}-qZ+< zQX(~&#*h13WB+;-b`-bf)V4eJZ}ZjWNK-T-IU8a}n@&q-3Mdk3(YP#9 zE@xt)i9aMyM;Mq|-c7|(Q1=qh2)6=r?ZEQ=5l$X2?rX$@t1;6}Evke`NwVpjxOTwd zur@`T7ellmx|=zS;Y4Dsk=*0OSJY#_`*)Mi-aYi_Pf<~N084|O<=DpTiBYWzPUcZ; zbiSDj2zbNncpzGMtnUQXIt@lYy-)q=1`kH=WZC3xg?s^Bxo8TVBld}e81QR{NWvW` z(mqtms908IFM{f8Xy2lL1X~nXz$RqjAzCBQm&~j6kV$x2_$P@5i+%>Z3EWOl z&qK2L8q}h9C+WCr)REMsG?7}mdo;EgZED0AN5??2o|zQA!+%Hw z5)IUO2io>d0@WT^!1F#62RC789!OeqU@Puxf^XiBg4sB%M+~M0y&G!_HH1t(y5az7 zbk{g^83;J$$uNo#mhI%-@&H4o$%L@T(UAD-P}ZUhE>N(_J9Q6ZKT^ljV5jA-yWy+< z?b{B`XV{cEJ|6JKVU583;mx&CU*id|98zivF%F-%gh;rh9~Oj`S_nMGucl?lgfWfr zU|Knt5G+CrqrlZfLa&*8N2I2TOQ?XxdX(Kvb^{l698dwT(HmAo6hgvHl0=0lt)t@04ek07ES zf_s6N5+#0wHD?`djlS6cH^DSTbfj#FBr(+SGfFVj9h9~G0I=Mj# zVqh~0Qlwe;MBZwOU0|-dqhn6lh*?+F2RdwQI@u2>5xNQ$O=Vd8t1-4JRdawn4q89% zObZghA=zgPM0<+)hD?jXC4P^i`_t;^ODjTo01*2PjV-cktH3s@KwvLl!ztkz1%te- zUTpSNdta7#tP*GVZ|`An3&Amkn>;upuk72u^o4sTy5F1mz#@v%F_LTrt?mH#^mWq% zx%1SdwgD=@fGnN$dqN#3iqIjk+>HD>)dt*}v;<`Lv=s{|p3!g;vkJM-kCyVbA{$*s zmx(m(5xuM8>|K6}H#dD&}g8Y$JRa2RXsK^WB3NmV|J1rt4UrmN#l@yyn7%vyRvp4_mmF>hIoe} z1bho98}TOZq@YuIm=;(FfFkjQvO;1d^Vsn*cc(o{`;1Cp^g~Cla;YOxSMy5SgPl%O zlDQ$_4)hWa3>X?D6Bql13#g_kI8Tz}i8xdS-m(JJA@q#(%JRsknm;&m=#QbO^njZk z0ZDo~#{k^D4!sUBfLs8Es)j&xXsX7T8oVL= z!FECXyx!t=K;`K5(g9P7SC%Z9O!ku17i)&S-nUya z8|9hUQukqQD9v?$BiRZF?ZlubO&ANPISP-(G!W*4#Yo^4^?+TtTsHC)?OD1rAY<&p zy31ErUbqzeNJKY54GG3z6BrmF6~@e?l$*Pi`5hYUS{`{-3lrWomDcSQYIbzHh$X;3v@nb@cI-8>%`0F>;e zc=a@}Q4eevTV*Lgv8bh=;kf7BcZD7fmRMI1@$`n-!C^z3`C)z(IdbBrGP6i>b##q3ttAYZNcp&4pl4Ko8Yt2wyIDg#4Ht0)8y@-qg7mhs0m)*> zk4rjjrm*fssvH!qXEJoWeRhuwgry#P<-zZ{;<{hUXh-y59wLd!VS190zN0cUlb#I7GIaC-m*zx#1 zU-`>ByFXD+Z^3_z#~r?5{^@e>$>8Hjn`RzO{xd+D6%{JjNJjIN28kGf}X(iD|Fkm*Cp-OVE<+lScAi5~iW*C@qi_4|JGV`?lmSqQTkN zA0KQd$H7r;0x1&@%p~*3@I;^|x5nYy_<4^|8~XRr205JXW05#|Y^vDWk*7+?sbsth+Gb(S! z;TfKeCGU-fCgN}+IhkyUFvdhQOz`o%F_`M$g`j>})viq}{Ym_cs^y{&IGWnwDdKE=B&HThD z!&SLGW|2h6LbM4SQ^twpT|DYP7H=9we(~0*f8<8*(C2~~X<*p3lR#@PM&WVB{`B+c zP$yv!c5NGn)^ng|)8ybHgq6HM*`46!+mGSR9A!9?ye$eR2Ue5gF(5aRUlcljkm~!9 z5?H0lR^%7Hc7K2WDDyW6o{uNhRs;MQ8xxJK`HdB|we z|M0*WzfN5@MZqHO#h2|e9~W1BOxf0xpNWI}!uy!a9GdJKzkD(r9hyjfSzR#NKi)@! zV~RK_`il_dUh>K00AfYsy{`yf zad&s7er}&GZ@#yG?@68S+}=GgbB@bB{daEbwr8Fm32wf>|Fv7sPxT+%5*+QnIX%7h zp6>A0Zs%S*@9SQ@wR^I8?&`k1_3(pRx)WUbd*3s_<;Yuf`TpR8uj?M){`8)HF5k~r zK!OkKV`b9Qr}|l!^nrW2t$O$9Otx(QW-dvaP$c|J;6E zzG7?lp?&9ugT34OZypKuZV#VI&wYEhaoxA~{hX<8z|O%_GydLpaPHr`6nyaR?&`L4 zG_y0vW$RS;DCZO1qpv&H82rFJ=OzZ9n(Dvv3Bb_h{knYL{&ORPk8baO!yq+Z`(A23 z|GL4m@9V$zdbN9u^PY3}^zD6L_$bwUAbhmt?>#l3^ZVR6czCAUIdyKTfA25oa+O6k zw2pmgv-1pl^38Nd-cveLYpXl*{-@s;?){m;2k-69eDLY_^}q3hPya&y8{hl%NuZ!x zAAOyAc?FZFisR3_iNA|26Dr z-~ZZ^1_D(9$P?Wq&hG)rJD)hGW}n-p2G=>AwNsm`z3u*opXfHG&W(NLp|^hHdxL}T zlFg^%mZz7(C*C=-GQz;G&MeQ<_3+ld*7EMT{%vz%`%v4z4VAs=6fws~L#7aJ3ucq~ z^L775ZoT^EaCd|g^)2ihpY#x1JLiI{2X5Fh-FWA=^Yg*j9B&U@Pa%g{2{N|a zm?JuSdSY{JWQFj4T*;e*ADEtshhFZ#Jb0uvEhCT#2|}BJ>b?G*!!8`Kxjfaa?>^KB z7Q$<%a=>;^PbEvsl({@LSKB(>n7*GT2(D`gN(rCCyZFw=)1C0=Yqt%;hWIOK0+VL9 zZ#_4~Od*gp(PVoYwIe)z_wvcPkcA`@(^HXu)0UO3%Tp`!%*ZYvZ|dh;z{YJH&J%S# zJlFT&)b!XpN6t+tPB*A8Pn{ngy1hO^k5^#kKP{ z09{9x5PkV0H+<^FD~~*qW{868{i9)PTFO)r5;x%QYSI5=$-KARm{wD63%2`@)uwcZ zp|LsKPR^s@o?t8YVQZQ0)}8WBPtg(FH6anq%7w7LJPgTD!u9@sdVh|R+RIbZOx%z1 zbPu=QQJyxK9D}$h{%E*+n!C<&BL@uoe!1ZQJJNKJMZ9{wzcfur%gnjV+3huyxLdc& zfVw%*Z2{a0w7vl3W6QYaZ{uMH@}v5r;nblP_ToYf=mt~hsF9XX^c?L3x`dYn>owd0 zUV@#tC#bJbk&r_}_XOKk<_VTD@UX;|8!NcSjtIP~lO=&SvObx8}>WKkI6@t2{ z$G`teAN#THlUJv`b8eWe$6HS?^$(wG_}h|smKSYXX+?u$-A2e?sZ4UMX3;o_r$QgRB9S3)@IBKL@XZhFBuru9wdMfDTV0w2B zFM}U}d2T8^G3TS>nkk$|kR1-t#|+Q~ShNhO?pd!DJ~FjqBo0t#^DFPDfO>w*U>$*S zly1Bo>2@s+tqP=~*L&t_4pKTvkk+UJNFQm@r3UKCyKwP@58e|Y@<4sVh_p+B6xd%uWuD+X7G8k3eO(r*SbX z%2-go9Hf8W&X}o9q%@Pn80UCXNW>wQJm)cPY$v;U#3-@JsFsYB-Bu$yj0UlLy#{qK z%o)W2&g?8z=-N|eyH=JKh-Qj|nkf*uEB8dgdlQl0p|(kg^%>qo(=hhKR?!H*5!F~` zI*#pcZDYXpg>KXa>)={Ivqfu;Ccy440lvf`*+_REDSLK0kTasiAMYm>HT+QZZF&s+@QN7T3lKsg?s_G=Lm; z(NTbnQk$%ya!*5pqqX_y3I=M{l)er;OgCXKr34w(J|4;Y4fgP7vL2QCGm11gC#exS z9Do#zB%umQ29bsUdd$!+WH4(KnFg7NTY&={6ngVM&U* zNo+zZ!eOj|{X8B3IFQlrG=V>O(jwYONqxDmB?yZ0D`7K}Q&i+vP zC{d_tTSW%B5e8 z7{MYvz7K=jAyEV;`KY?9IPA+=8p;+85+dtFGyHAc(*_ihvbq{oD`b@{yXNT8F?T!z1|W;Ie}#m?4&kbcjUiE|f5dToii^ ziM?#q`l?VVqP!fUY^y2}Wr4~l*l+4+BuN!dN|aH?m;Q9#6 zLL0!h4@_hTZ6jI?qseaQOG1*_LGaI1WEG`!6&@jEpm-eGrthF6hf^pCeP<|bsXt+I zlM@sqt^h8WPAp(Z)k{JuNI&h}-1_mC2XDH+KP65GG7gM5okYX5Ul^zor+~9+Q$`OB zrwc}%YE@7N4fUi!e{bTlOE9!{-BzK!wr+4y87i zNA<#@Pzu(CYW+}xIFu3K0%FCo}qJ|_ZA{;E`aw{$P{QfeS$Oa zW%Nle!ir?irhJhmH$kT((HR=@9MCyz*5USOK3HA#1ow0^p8X*awbJ$ta___PU+G)p2$U$o?Mc})DOwC zt_o*aifz<7BlrrBD^VykYe+gU96S4_kDu9e*U$E%P}LyHBfsHLSTNY>+^oD@2#{In ziNhdHnUX?b+q6%wSqUb=v$`F26|w*`w(?`idpd;2GK}ncR(MSj3NaUEr9H^(A;~F3 zt$!x)CP3_InL}3jXsUxmMkz58W9o=erlhbS-Ph)lEM^g5C{^*8%sVNH%0`IN*h~S5 z2z>;V^&dov9)I+aza75*-1k9eb}VAs6|^{jG;ul&=$~*f4S9%OiAhKiS~JGBp1~ri z$0)8~vP_FnZHD)r6A(gV;yM{(T!p_u>Li#nIhkX!A!!fETg4L75{O1ZVAiM<UkNB^rg^9rbW~)47P?G!MQVsGIBhvGFnjM zH@1F#@_6^_HfakUGsBWc9xN?1nz-;vXrwL9t^|*etfZyUV`^6#9wEr%`8db%G{&E) zo0O@orUO7)7?wFAjU-blld|zx?S}Zwr3{ z@nwg442r~#G^;g6eNHn&x{In7Bp~UNbm&3SWbKzA5h))~2MT4?_0^3kQwD?Nl<1Jz z1Qg@${h|?M#dE;tOgt#S5nvottV?7%gkelCOac_wbgLWq12H6N5dv_5C^9oHlilD0 z7-ZDuoQ>evFJnR?Qae83mz9h(CE{4vXwrIg(J>dCml%%KJpol8#0RGiud z7hq9{V~UpEr57osWMdk-#2~^aIl>O_L8b;T578u&4RfFW>_`6hqlf;qP(dX!rPf)- zo{td_SM73rJU656@8iiF86RqUxwxPLHkub`1_E@sp=+XECOffhg zRhSaonWJ=;b|BFTl!D(JrnCt zd5oF~!3J=i@w6nFFcCrp)wJuvovp1 zxVcqKZKy+n0~2E!*$EABMCf=!>WD5gV>1rkAmxPI!z7-fHZlpv!0Lh1j(NyHNZ8RW zqD2+vRub0ctG;%2wR`9PnpcA-^@FbajU%y^ePnEU*{`t!FR>worNqk!#jo(^>kE`Tas zqKF)eQ%r$PIW&dMO?B)q@pwU)ot!X_L*>3_>K#E@hve(l*{C6!m(t~dbX*SV4mciH z8?vr6@oz$_2c08eRa)qDip{b=vj?3Oo0IMr(!4fZGywfs%kRLnOOZL?83H2(1S5pV zk&(lb0!F2B6TG+!MX3@{Gsn z(TM~q#zaEd#rOlfxzB&^^9S!4_{bZCNDiZQ^Ppyg3ICxPG3{YNyz4#(M{`~B zq)%zYNGyvJXeS+cM)GM2^N!Uujx=mKsV$FYq(NTOvX}q|nUZ2+box?s*>vQIQ6U?C z<**Z+aJ5-Ro(FYC2yW!&vDsDs#NqT?X%X}bjsfHW2lKlus@=HlQo7>N1o30A<;=d zt+z@>hf(t(?eVFF@q^(s(t=@$7_(slgy(EVoTRpW7uhSV|X(+p*uR0 zesIHfCJGN2eZo}ps3M-Yi9*=D;WT?PFX?Cw9SLf&yRo4$3Xn?z)6SJPaA;gJnR-7$ zX`(oMCRgm)Y?RO`W*5Z?n-zPrk=vUk`AJ`_wKp^QX?h(LLS4>EN)`KiZ$5t6+wVir zuZK+xW4eTBTP_iny5`fwU#j@ zOcvV9MJI7$Jqb2)$}~@BV{RRzvx!hrP5_ks*-?*3+JzHPYt@2(|1Z4oqgUSi7g?B5 zS#0WBL_J$Y=(xxOaCWNH%RQQ5ioFSqoOYbfrOB>Ho}@ZV>_`)Y!f|mRnP;TATD3Zp z`3U?5$N`XOM3~a1iBNP>AQCodS{e|E&!q{@q=M629&yR=oT2H)1R_q=p3SUD5Akdg z#7Zm*)q?BYlcrJITLvEG#!>WmuCf`Gzv_nqe{(ltvZArM_5y_C=^{-^>{i%z9IWaBgZ;S zi`tx(MXHX2-81yg#{Nloj*NngywIyt?QXp8+(>YOb0fuA5W6XDjp^Ai8r6uwbh}|j zre`BFm#z_hji%eKdgwy9sBnA>wlEq^QOX-q?Vk7MfBxWab)PtxVsx$W%x$GvY$Zr2 zX_uv^@R>V1&!md|bR=8aSl%KLdMGqQCE4*FKn{)A5thC)5u`tcOjFH87EDzeHu2v!;sbED=MX zIO@zi$Fu=o2nX$<%@Uspt}(H@-K1uG!>AXNKA@EuaUwe%apdx|N3o~FA}OP$NZ)3f zQ)EIax%|uxPqBdGcMMM{dqZXuxHd97Wom+kR_y#Ap3_AsF6pqs>U7BL?)~JaM*6P1 zmx05Y12Zo>zy=2ifX-3ZseHs?`R?z3-K2;)X!9bDrD`7f_d-YalkeSo`0`i(SYMWj zjUgauwQtdfiL9ZgX{RFV5T6`swLI;5B)CAShfHe5zDqlR?AD@phprqG4q4J-xPBlz zcjeh@6cP={tY~o&sLWRSt81^m+~KST)K^ABo#fc^du>r~!24vBjzv^)d1Gq8DOW?! zEPr-Ij=I`3>z=stvy)%q6MHXahI08)=~^`#MEOPO;o3`bMGnrMXZCten%!2it4~R2 z>WQ_>vh>_qTKd5CRFR@9%g*oGXWid@$HDKr?C}RKPha?~|NNn)%N7S7zIOU^$&utp zG<3#4az9B&{`kwpoCkl{Oj7=YG+uGX9*uYbj#3R*Z#V;$Zl5)1LRP` z7owNleq(aW^p~gaPd=J_G`jNnk0;T5m(3=BoP7HHJce77 zG4W*&aQnx}qhx21t!{xq?Mfz+k(DDWM+~ORezd!K`24GCU#tBTs&qr6@b@=>5 z?b=6I9zFljVAs%rXkcRHutE77$w!wLqXD(iz#4j6?YFlqUqc(lfa3;g50yEK3PmfE$~l4dFAuVEvK#erQ{jt;$XDp`nzPRIQZ@bJ^g!|nwE`yBrs z<=?B4YvR5MgY}BvJ+#_)rtii0veBW@q2Kg>^Ydf>@$El6boO2oOZ4Iaw)I-_XV2a5 z;}4Don!t7S^!;Fe{`}#v8L`RB$TS@~u&efA0xX7Ldin}cSQ$+)$)W-HecYc->IRf2K@c-qJe)k}gh@Qm;^sY3I2nwr z9F9ZoqQ2&i&dTAH2V(&w-hEZ=+QaeCwKoD0l3{`#eeV2om`FJP9YD`T!ChNQ5bg0N zfoQS6;XpE6JUUiuIH0^`+2Dh-$pL_x7pB@VAcD8#9Z`7NKx}dI9#{f578VCU`KNcR z#(mESCbrJ|+GjrYrc-@q|7;xr(s1H5<+AjrUA^tSOXUE~2EHf!Kv1lU9k9W<{@^tQH+h=PT{ z%p9Qf7Hp2mLoyTlC!h^HD9xYnZLcc*pW@Q~!H$3a^uu?Srzs2yYvJ63?ZN84*Y zDe^VG_4L%z%^a2*;O&;nnN|QYrLk}^IOxQJ^l|j19G%B$q zm5y@cXmEde?iU+>`}ntYPm*fKw6=*Q?)Pxu&@ce)uQU%$1t%grsesD6xaAJZJo`2; zX(e^Hs!$tfv6pZ_EkLq}TP9$`UF|nV0-J)sJE$_qkw!F=Ein+t$r*(=%mW;?10j~q zk*2nE^OD&}=!0Px_2EN~2Pnjv099$j9V&ta=ZJ`64?~PxwHu=^R!HhxFy7aRYw{GR z+9m4>%03Wp>MT2*PI8-4gcG`KJ_;YPt?MG6QfCwF-aRmuhGsHg+Z2SkYmTF4vNiUb z0QfFd>?Qw+!WmF^=6>g=|K?Zzs{7CHpgcKz#!~Ul}nt{*0USR()y`_SXPjJg5S`KFpD_ntQm@T+JM$op0mSp3lWOo#v#6`r6 zM%awQ1$MMJauq0r>u5#r8C}b>S@VuXLG!#uLo5UqL{J^RBN%I*mW{Jj z-_L1^%y=MS|GL^;*LW)n-ZDJG`h1aX(uy@rG8!?M#S_dbTQ-Mi(EL_%tCfd8sKu@J z(Poct?L123W5zv$&A9I&wRg1tF>TY_L3||hh;XR2Z#M2bmLZoh&O@4%4#?XA@LkCN zColt1Mj*Qp`yDlBAHd54*90DK`oDhYk?ya5nHO|SFGb)0r&u`eO@A!e4fYt+XokGT z4iMV7icQwz+I_VXpeI>UXOD)5gGtJkd7E6XqK~Ou3Lo$H7W=(j?6o$|&S!n(M{~h@ zAaj_;Er!Qwu#C>{kh$gpcm9P9_haNy-?MGJ6iC-Jyk?bl=fM?p?AX=?ikN{PY_ zuZ^-N8e2chb*e4_%^dL%jTb>M2%@xAnwo6Y_N1$xZ5DP~0P3)pYHemK^f2laq8s--~9I2F8M_iL|xq4Bb}pG*s-+#iiZKPp{ttOAf^ zBI|Qm&E1*{ylVpLpeRNKbSpr|P9nFkUW4fzHKD&!zV8sxZ>R9k$Ob+sJY_6UAo3H%V z`?`PnNxOA$?Btqu>kSnNp4gMxcGiWBXyC_zqM7XWk^|J-f~oZ`W`~{`h`a+2kr)Lq z25hek>1Rs#=$H@yu_LwN0XTv_g)|Hes<`2DQ}?)nN3`oUY$#Gq_nbqFiG4V=_#-!* zS$h&}vDGuBME{e#`}=>J?W4zHb~gz-MvfwU)0Kb(VS>WhI9QZw z7tb2TSlbp0Z*4F6-}s3J4!`&h-u?K8FWdX^%y{}Pe=F(GXaw=VEXOw2PVcxS(GG`) zd6RYJw+$V6P0W^ii6HM|>u+HIj*=3c2Rl&O0elPU&!7d;z6-N0xW0cY1q!L(=p7_-&Ux5QV?#LxBK)BV`TN!FnC@ zlP>Mh81TsDws`QyV7%65m)?0v%d3)q%T~n#0X9LnYJ}sRe|OkeX~y9`@ES3%6o>!k zHuf-RLs=sF*spun-Sd^%Yr6jkrq7R9v@;1s$AgpL#`wgnAU<{CgA^z&@Me*m z8AfYbuwYC>QgK#RD^+Enqzkcy*7-nl8;8z zqGL3KF#DkiTC4X|jtR^_wdVe&?f5)X0AMZ~Cua{L?>p`j!FZ;21X|!b;OCt6p*s-< zl-D_Qe>eh`7q5Ul`2}{2Iw7;avEy@b_@v?*QC$8i+xre$+l`M2KlpgE50HZA*;x#Z zg`~yIO$uqiXmRbs`lby9#r>1vOmZ{|4-oYb2kK3zG1%WnHIY0o{s@XhPOkCLV`Hl! zifNLko!l6O_XUT8Ba*4!jHbNfO%P%nLdkciG5V^7%-dDU*{*~$5IS3EaXaaQjAj%X zrs#sn+J2@D=KQ5Nd;`0DZ&C|G(5fj*rUO5JJReNL0Tcm~?b3T$4y&iq} zvv0cd6Wy<7L0SS#;u1nf_NklPHWz>nr?M}PS+#(M1{@(6ly;A@o0m9%je9>bOS&?r2?lht@|SK#f}h${|3)8r;$-eX^RFL{if)~ZiHBoVYE&w(0k zZhsS|He@o$m)gJ#E{6=ICwH>1BTs$nwL?8dR3xoYciiu zj*Ppoqohn1MByT1W!)wxz)Y;2`shhV#_7*ZGP}RWQR7*y&toQ|Jn^WkhHmfxb$kkBJpvix!K?n{~ zBSq3hAj@7fkj6n6M9A*rDAojO2gc-h(&qJqG88_Kz~W9OL&IKa#RF6pQE)4vOe=_Y zr-Tk}YVD*ohXw|L4cW!2zqXH#iG$U-KGG#98=iOmCO%im+c46A8UeRX(xYw2g3km4 zWOEtGVYW{SHLLf>YpwIU*~{M_lNk3;##$HyZ3lH;Sgds)_{8I9YTvjnla7em?*Roz zX1&d5ksIctkk$ef+CuC?b@T<`p_k{O3KNll1j~kS7p4h#NKDW-l0}2OrS|$7Ebx7> z$lr&IGUV+V{A>W|SJo*5kf0+;FN&QWIn)CE6pCf*MOVy%3C7eQM+M=AM34y$9nX7u zDjd;&>Kuy)ni3q)ByX}~8*Z!w5NUrzboJ0<;c0Q&c%TsHNm_+aqD55N7AnJkD(qly zu-M;=VQ+z_9lD_%MZv?By5A1JKT`Guj602k#!1eVSi z9t75P*8x4CjVm=tLomHO9<<^R;r9+YEi$qe=3-%xfy0*AEDznbl)@7g%Qbmt;qC|- z6G@`mP=Z7tK5AYRs!BkIj|AQZ>;|YIl=|572k8sXP+Bt*abX;wHo2GuCSLo(ul?@9 zJA#A%B8vw)k<@MEBH%pCqE58wBrSu~I>|T#nkYEH>-FUO!F@~1oa>OVsAe-C9U1qZ zj|Lkyw`asK4=F(|z~yk8d{5+4{E}`pHUW!I#6G@J=%bH73XaBHv_D(C9EG^!o>{T|CXO~Fi5xZH%X!c}WKC)znEP#EcHo9q^OB$tb zUdB+HsFY{=7zn)tq3NhcePEMsrimXwuE{rq$qs_y#vumYqSKp^veWWmn2XOfsls{W zA$riLb(J_lZ2>@_j4&RDi?!dxcLv6MBp@%3QzgKJqXQnu))BFS%6>JBTB4eh++kCP z{9qjj+0>XU9jag6*wLguuT5L(dPR7nA(%iQZW-mRU3U4x?<9?Y2xAq|ed|ZR`){Vd zjVn8#EPKOS<%hEDU^7mSWPoh$xJM3+5CN~ThU(%(ZSpU0bvQh%`;G*E+ujvF0s)8o zHT=Xiy20P6Mq(Nad2LcA#Z8h%*63(JX+p4yOw;<(D+wx^yT>z60CEMC(^z1oeQ|h< zQUz0k?Yt@DYNnH22LcjkK@eSmpl~C+2KZ=F6P-s^iFCSzwB4#IJs$t-7q5MJ_fu!H zd)qXZOdKFWKV**#INgX&sD+XROr8JsMMqL;i3Syb%2{{|lt+z(N(?smd%JwfkS+Au zG-xf)s(Z!60y#tau)~iOsY)>@fL%qCli^cS#7o%-4)V3RB;O=bjH+AAFe@K915q1i zcYrnYfbhw1&a!oF6f}(@Aaq$*oK~$s5s5G{i3Zg# zbrF4Qj~rwqdj~)G;*UIg?h{BHJBB5DI$BWUvTy^vqmcBW0r+y#pSOHCh5#8gF&y`M zjp#BG$L$S}w$qW)8TSK?9 z(6@ZxCXj_xpEG;9sbo30r~&a6Q9IDbwV6Z)=2-NV|NNn6KODaOdqg`r=E+Q+2CzCZ z6-p#J>}htAO4cDe6MF}Ca<5t8C>J3`_^8`LCJ_ko$=*mn=TSXvL}1j8wCq*2)@8Ni zw0dYt(o}Mhj3?YH)^MQI8`P~a9tRy~hlmF;AnwG3F_}Voa=;UoIU1JBU3W~Wk`UXY zx)*=>b07H6@9zHUD=ZV~L)OYRw_vv;bS&^iM=)|J=T&xG(i!JVqtYbqUT z3u!b02S6o%qCT1e4~s|XzZRf%l+nS^Qd*m8RU?lm5jCZv5YSi-N;D?1e&U9*O%<4z z$7{{m09m;VCkPcvr*6`X_$H(Ox-*s7i+ZJP??C!%l4$I}FQxIEL)^wzpORAD6QBOj>(BkTm7+(E2xcg^ zQAi(>la`+9pm!O?TRGNn4R}o-@+>l2*-$7!m0|}P0w$yl5MWPPK6@3=!V|i8N3y`L zNDgFL0}(EBUn4}tu5BR(x2GOciIu_>kJN^V19gh19WaC$xZ3DC z3J%Mx3BiWw3Tux=hiMU$n1iiE1EU7E+kUeyRB}6+2X`uv8`n3Qne=v=uezzX``geZ z<-~qV1vlq>{-7@9hh&?03Me$$64PFN_=;B~#kV?A(C$keia+TX0XM92jE1x^KvCeg zBJaF$h9m~;tV3)IO5(5)z4%+#KYBWRc1t!M0ezN*Q%sHS(7=|4SlN;t9MtPbtxc(7 zI`{@Auie3aK>OreY|h*aMqX_A|KDm5*vqtXv3 zkFl6Y1}1U!@Z>(qQmZ@4Z*E!ha4CQpC}qD;Dn~~r@^c8I$?nJ>=T&!%dCz|3ZU3bI zpWTurKr@Sw0dBJl)JJvak>S}SHW13B zL7_W6C8lfh$HpuToll1!{9RfYVTvo}@Z?%tIXq9qK?0G5ihb8>J%b%>xC%~Z(Ho)nt(ZEi&qpx`<4&9?E!*(*9+?KSHpG$7@l8-X&iC2Y> zv7T4h- z=zk2?<|I+EbmpDdj>+@-jNMN4)6iJLNWU#MtS2+eTjJW80q;ZFPN6$NotTPR=**h5t+x)RR{jag6u3LGh-y0l>=eBWIp{`@qe=ZL|jF=jAtF ziZyIyF#fq@hMwB7bZF{jqk(3Z_DhLCpYag$5%Ex+kz80$UdKoKAb^F?don!C2RIk} zkwZ(^N_;wZCSgD7+L6|dkL`FjoAo2>`sR6MdTPfQL)F1!2@^9T8p*zl;*TdCzDCSf zubUAOsBQMWzk;tuMszRR5A#t1=>71}kq&g#N){tjLc)+W8uae-e>V!j|9IGraL9wn zR+XUm%+f9!8V^;9Ee&n}--Ib#b=Y=n5?d@D!V}KNk3}(j8-`fI6B?Ohf&zhKcE(6y3{5u!6{0lQV}< z1SD4ux@$}DeBKaPz3E;#Exf;2sWX?<;@-#l6GYd(pb zxx-Bt-QMPeyKUtTHyND|R^9FXfB}S0tqTa$ytLXZG<)4U;l2mlG@~EWk}q`Aq`wy8 z-qXiq$zeLgfiOD8UJY?#IulW6TV#Vc@=Rl`$%XC%5PCbb!WiR2?M|MPm`WUa<$w9b zBY)7k{2Lv5w0hT*f?Ycr47b*9ZB=sTMwICPbA8HpKSCmA?P>5q?Pg$qcBQquK|XbC zthJOnUDn;KC)}ZdoPLgv&{{Wdmr_l8f%SR%jtC=@^+;n*RAn( z&D*U7QW0$}kg}T!u+6|4mpuEQ>1#c+r!~^on%mR5i{I4g4H0%!U_XQQPn=B+`cm4| zV317>&ZRxJ6aXguuJ=ASetJB9cmf#6uzxQ}`csj6U-Q^r;JP{Q<@R<4onQYmY%P#$ zvB4t0Bm9o2&dOc-U0@FdHW=_eqg@=1-O>K(n?H8P>A5&?l=L(6&Y#EQp98EXj_tNT z%~JgE?qd8;b~m1AefExGeAkna!wcHUU^uRw42ELtWN^6BTDa@naEy%%4$rkJ8_o^) zQ03td>9jwx>xuZ$-pB{p&EWQP3-N=L%_%!c*qsg@j~}JAGjTR=xb5-Q>=W zXGa15j`*MC>I-ZmK&@qee|*;gfB#DT#CIL^4^~=p`%Y8mLGNfG#;y%V^F90?ey#Od z_S|k2dHD9$I6E0E|Mop`Ivd&bNc<>US=e88Y{-J%lia>-fuEiFxpRT769zs@Q`x(L zwjN#0uYdUD=fC%}lP6kl{6(ju9n(GrgPo-O^ydTqHU2HcHjDo5qBqQr?W1WF{Qb(s1Fw1EPCZK@0K*o>#}tK zGoifg2w*z?2z5DwmodF{=~!!@X?h3aszHrDw6~wNJu`xpI zIK>zJ*~`44(X1)4?{%t?E5_J9oC&V&%@rE6Y_5PL>n(Z*qHFo+aJrGz1if-Gw!DKu zF-|J;KJBfLB-?mBO^J2`11!&->E;NNq%`1B3cTx&4Ii65)^|)6YAT45xjb<*Drb3T z1=G*Q_puWs57&kTwhSiMZt86SRRfg+Sk9(?w)ePgSYU;SMVAc>{`}T^e>?v0Clo2s zA-h?wA^$NULK`sT?S--|BG?i5*kiteW2l{~htkEcXxljzLb${c<;5$q1>!^fMf`J) zdZa>y8FM^VSOn#CS!^7|$t~jNKC&GjUHAC_32)B`fZN%bx~OPNA{!f)6JX>T@fJ!! zicn>O7%hjVj=ae>09aDf$T4-4iRtC1f;SIWZaNWr`D+)0m<24^<6(q|e8`-qu4hJH z2z#oiaVfP}?RGPxwtJZHQ@i~FV@#kfMad<3%y0lY&PUnVKN%MVhwZ69WAYd`KLI%~ z98I2KCXHff&-6v&V3@QZMYeN!l<2@rq&7z23yW?ennB|r<;^@>v}PkFCddcDjG6MM z5cu-}9Vm$woACDnlfA4Mrlbc^;5mizyOm<7ITOo7s(ycSm|aA6k}Z%w!)Ca-&pnbf zSHY1v^Qg%?%{}g>WOIXiBQBFj2V1+(Qo{uQ9A{Hsy|;e3OwI&dhf$_YeVBVA{82NR zKtqxA4A}h{bCT~9?BP-GhaVlrki%s}>Ro+vgopr5*X7>W-k*N+1G}Dxyu9xsH5dlY zbkEtY5qew0l}n@Fz#Pldb!m|K)2aSgo)HDngBcxutzdGxpnuC$V6I|@0q}AN=vWgq z?Tua9JPR%u{_B-dD`%nt^$MUZkMF{tL;NGG1W;@y74$4Z4L1{+i98EotKOnnFbf*M z!1ln>ON?QB@Rtq+LE3)`5CI$TgvHoI;+>at^C;a%)6)D2499Bd&uc*K&VEchNJ=k& z98V>i)9yCdV607!jqV>p4O0q;dsEk@KC|B(WKjW~uHFmwKfs?wvp(<(@stSCU;+ZB z9vnKP$x2oK2(3-V7tHf!saYT_Q^!21=pm!UaE81$I*dMQ@CUnyk}O5us@?F-uSZ^9 zTy~4gOsoi*68V~vdLh;eaWP1OZ7wvZlZ?$x_4iC9kU1&D2m2w6F`=fm%p$}P*aMoW zl`xk`uotRpJl82%lHe=DBU4ZKDe;KN32f8eDG*tWorOlzKK3+C-*4H(^o{PG%3@@* zahD|v{50)Vk*1a|5pa2tF08BAix6VBH$Ddq&zpkm`1YkZ#aG8+6p*bE4UCSj!6qi| zKtGE=MAoXGZ{7u6>X)0cCD%aVxMohxX>&><5G5Bze zKG;rO9#O}%vZ7mFS zM92t=hfly&G)FMFb0N8nPick}kg=-jY046ctp1=Un~jM2h%*L*F#`W2${>JIxhl(T zogs>_!5!xnq&^NWAmkZ{cj|17nG0zY9G)^K0UHA5z(1cc0?+4@s26I%r_ME)KLUCk zJ}9`Ew+=tP>AkH_e#)X&eYk935AsEFPMF9~w+ArMo(P86Or)Us9$-^*HGAoS!jzr0 zIIR)$aW;fe<0`l}mOd4gD{)R-Ck2E#irb7C62$TU0{S<~RCuabJuCY7^A^1_B}yIi zhH|A;kd|4O=tuS)UCdm(a3-u0)q7*WDkAZ|#cdfS<$>Eli(4m;wS65IK}2Q#6U*S8!>cM%~TE5}j&C=)CE=%YV;_{;9E z{z#8Gg08EtWP)R%XZyRhbte-e-jUQ)uB*DTHaR-U9#6G1Q!n@EGpD<*o0|hlzu|Y!fxoEU=Q{>VIyAa7aJy?!2=3 zJN{Ysmg`5?G60>(z-R}2_L15+^<<>>c=r@N? zzu*zE1G}h z*7h{7>f*D+0sodsr&)4qL-k+fwb|ydzdgDsX`Va%AKdSIzvyqyY5OAgmOah?tTJxt z`muNCbaSI$ShamsGB&WTneWOr9wDV?V!QWMcU$Z%cs){T92ouHRDRVx{pQP!d_80O z8zq*T<(rG-I5{U}crEa(aesbve^MCcH(1 zs9DlvE_{B1KH@Zh!&t*)@fL`t(QTZ)7!F`5=`8^?jU*6*spE}Z)Z@|_(q?ZBTr=Z+ z>hNA({cT3}+*eUmN{K=$G0W!>w&cs4&-t2S~0N7b6#XKnD1K;^`E*fEnkDSSwIMw=hMR$0xIjKM{zBk$bJ+#FLmt zPM5KJgXlKNxHcvBLyP?c1OprZ&d}Y`-UVGsnOp6h;$=;P!;(NYQThQ_7S*AS@;>WN zn!B5)u&E}x5tju_D9}C7+q_1)23ph!5H$~C=1SS~hJC&TTD)pw&X7V@Rp6r#P1W3N z&hUBFKjlFT^MqM4hl5qPC}kpWp}!dQ?cotGSn zn`a5W;i6cziDJ;KS(?wmt&A-%ZLh#T8bz`dlzR{f&BZ%q{=xx#rxNIj=n$TvP#h5M zlnibgJrozqet-&6$Ja0caVEZjfCh7tGu*U*4w*-IOU+7Yx1oTI-HKo+YVMKVx78vI zl5u*pV~1$^&7ggt8OToxxl%)QXt}{9zMrE8DwQe`@1mY}pt(~_6QF}jt8AcLDH!13 z18Fe2zdq)v+T8k^z5n*b*4M`ch7P2O{X*v?cc6bsA9HALIsJ3WAcHylflv5=SJ1U` z*{ycAE-yZ$bheO}<8Kf{XY13HrVT&@o#S|7;-D1sLI>!%=mT>f=a0WaIZbjDY2-8n z`ab$5eQ6#DXbSpS-Z$S1(`aO{2SPCp04xturJb#z(D8$J`2 z*o4vzu2AIUO_}aVZ*y|yB&ogR+o(-KEZ9aJi_Y{zHx;^RXn;>gvxVpdjgP=$)GN3f+gVG{+n7#?%Kv12>z0Kl;MCZ?M8yPXL33!nn2Q0Qh&MG#x-Yi61pPOpXl*`x+xS1wA(+(t)%Lf2>@f zltZEa1DKSF{O+U~f?84Vd@_vRGQ*NQ0!2sqMwgHzEGsk9=EM(Q|JyG-(0XfmJyM7; znlpWdNe1fkY4bkwh0$+Ve;GDN(b7kzcK6iIY?eMug<4vOk430q+-L+7@jDYM$>7XH z@R@~*uzPQ;*1tK6OrMoRpP`K1ArS=hrFtqs{>Zpwd=*?mFgijG%^qp{YZHXW`cW&q z|Ezz)dllzpVf2NmEZUY}Mq*LodMI$^qjyNvo$T3T3R;@fmg~<03;NcQN^*HGsyk;# zDaU|?t*G(RLc$qx(F)KS{k7~o<1Nnw5va5SDt(fL4EWM$EPouL(7k{)$)Z;-Ad_f> zCr^J|FpF}ZLtj#R0q5=Zu=|vM3K+mR!3yLl(;?w6|SysAL=u_wxeR?oj&awibE4gx}XQt;J&U5W~ZSI4U61a>$?VcL8 z^f8QwGBbL1a~20W!mI{VFXl)$ORh%yH?s^GA*8@nKjFk!Z6xrZ4wllm5j)9+u6F2C z68~8A9ya^orvfT?h88~S9}jx)`Qx?4ODSY6A|rS#GbMYVP_WEB6WAab)NY5h#7jz~ z=^;6j7;#t^iZ`8d%Q#-i7%3FQNp!xa`kHq^5r$K6q#@DWkVq3*BNMWU%otRW^)>;> ztjXWBhU*(er3vpm@rFX2d8GM#9m_%|%<+fc{j(c>zjf<_ZK>x>mAiwsUQ9(RK`lc>7)^i%N;{E@->rqLII*hBrJll5W5 z?AH25VqI1Dq5jJfM~1Mi?yqk$XZY^EaMg@Hk0+DJ)2 z)O?Ns-s^F-%DkuRGj6(m1J|?mdWU%~?D{@2xFaejO*s~TZJ15h$2t&ikB)#kw%Y8P zS+xj$w=(VxVD$_+NoMgQc@7_7sp=W?`QE+AGN*@xHgewL^6fTt#!YWeXG0FU zXi5|`u?OM;ij7Fk!)J~?pY|{`3z$?$P$G@XHUfkFtQW)>z@2BVNEqP};v<4-fPl@& zOu#(Ip^O7J1(YG2F)ktK%v&qLy70?p03E*Tk!)B23iAj1b+kH6)RtU8pF7hJR`&De`dtBCUoqAZh;PqC;-Eou#WiB@-nStJ>`MBT`%Ak>W{vEuQf zG&4hH2;Y#!neHhf!3SLD&VDR|iS7xO-^s;8qiL0v-MJ0cAoSP1*93W43zt17FZ(2 zq-(eZnljyc|LouV^uF)3_AhVe%*@t7=+ZrBUNv}(Sp2c%%4CNy0a031WinCd(IA9+ zSBZ$7Nt&@xlnK2G0V$2#hwkwZ0gX_GHuKO%HWuer(O`qQ2M^%8m7T_ZDidu$pTg3! z#Ag9lioatP%%Em!W5jB)0~p=6&K{(h@uB!7q`7DbBqPc0y%%*qibg{#%Z5RlG^8TH z6SAZ+Qaf>xCNGn%qi8S&?qXo0d6g^w+iDtUV+QM2${R=1pjR@HXJbzXC>ln3tije% zG>iC%EW1kJ7Y59pflz(sc3R7r%qi=B6AsX{jI4_xFlea*$KeN6Kz->_H6seWwf|E` z-%i~7(`8HG1jKK1j_pBZ$9%!OFYH;;k}wMCPP&D}k_I7UwPC24?T`n0z_L!o8PzZb zvlC8OmvTk{5h54_Y|GXL=r9hGB%0+I^DvU#Ab%X8gg$^ehs+_!UO;MzK5etWsr9w8 zGd7lf!aolmi^jM~7dQvLNkWbboFg;fBC9-44?^j8%r;R6Xgk!wW}2~_6A^i2stsHq zPb0~nwLupyxy9g)Wrv(d344wEfyuRD$`B&;2VvY z4S0lNA1Wqxv(Y_*``>D9xVkOb9GstCV#08P_0k;k zd!c*C&r8U{gPLfhIIVnUZWX!^&5mW9QT#$CNg=NN3Sza_IR@{^(?tc9K|7L+A}Il_ z!K5S3+Fp7-bg#mCLvi3tvD-H;Xwt9YsUO0->$vJjrd%DH)3H49fpxl?&*)z0KB;%i47$n2 z)|E&jS9Ei7%NvSR%m-|94Tu?JzO&%SYXOinL1dw0D_3&e)5OH{MR%zv@g~Lj)(yXU z-PXiSuj9!6RSqBs;z4%F*~6l=TeJ<2M}%U8WT$M?6- ztNPWQGPUU(Qu9lW31bxNeV_QCMXbzl3% z6~ErPJGp$T^T2*AusSEU_4Zlk;|n)(mwv&yect}8^Qip-zZbr_aL1kiHqX2cRdw=9 z2YibaWM8@DNxpp!hyU^+sdVwM@3l*%rVA&|y}$P6uYa-iEAQ{TY1RdaYP9yCd7bQc zd%^!%CZL^KaXtTCW*ww;9UD>jkeQGG#{z9=IN{fY0!e@vA1hS3K{A0$Oz z?YZDxe{F6cuN;EDr>3lZ-wLAVRX|Ve6|Rmx=aCYx>N1TX!HsO<=$B)i8w7REOg-3B z`*N`Ay9|F|hpGHpZR)|;cOzHv4R>A#st0VMKweopqCp?ow*oOSOHS8QWM_I&KeYGl`B`;xSR)s?s0Kn%z{XP&FCtq+)Y z^Jya4bK|<^b6wwO`L61oSdn}eH@@tC-+i)stIf#wdh_emq!s&Wf5rh<#} zgT9M*R@pmy-8Q@y$qb0pxIW7?)M{j4p!sdwt7a{7)?Ex&+|MY>jca-Si+-Gjb-M9w zmuinPwa=_GH|WN5+^D~&{vPwk;F&h@cp9j_|D)fy|2<2qKDN9Nm}!allrWu?7S3m$EKJuiQ7J!Sg zJEBZX-WG2Igl^sz+Y%%e!!F(;ao+~!BrE6Ok~vfF#b6RVB<{0UNx{>VwpYnIS2R7e zxdiXRDYlphX?ha((!yu4R9_uL!HZ#@&LjrijRXp~L{5fLNTzAFs%|p$KOoZ%KwRRD zxR~|JEmUZreEo6&`R{l9-mc;3O-sw;P#0O!`Z&4_VeAXi$lic+bps?WAH=QJ&jDWEf39ORC65Fzcf)DI7 z@P@GhS}>CIRVDPnWq{qF7r0mEh8=RyQ$5lDoGpJHxDrBE-o zEF7vz)p)GDy9gTU(@UwQG?S${a>0F>w|5S;-t#?OaS%!i{R3`AXBa}n&cp8gKA**E zX&xK00#zuwKoL$UWFq+sxb@^08=gutMTE~dpA9tK#mUkLOu1A*ARo_}z$PCp@iWIu zERQD8zWF#9VDg3Rr%;pS(sd@l=N+rsSOC+^s~$&A_97oLS$mPo&`*a%EQWPf^@o@j zLK(z{?PU8>;BR0R86XQ41uxY&M2BUcIvEmx3T$O_#!iC}4V*dXt=Z}ZJC2Hc5T0}D z42?6#4Id+|0T#-J5Zf>=X8#cl=Oe`$%87 z-M*Dp4@+IR`Aa9%`OYK%&dc^y(SPUNHp7NK$gv&x!qcohy8z4b{r2tUt4secg2K*m z2`Fjj(i&TP{^q9ZBkx}J4K!Wjg@D{dVYmD-Mz&}j_*7q;@mT)R7&L?Cq&c9qmQZC9 z*G?m&`a8Dyu^>8+WLs@(BSahe@WgbS7BRBKKP9(_qzTs0

    YY5Es(lIaOtywVrFQw$N#?mc&`$H&f+OP}CyV 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

    gJ>ix1x>Tjms+Xl4#)}> z$kmR$c>105r(b#0{l{tBpl~{VH}SX`-Zx)3lzec$&ptTsSR_xJci8!*;$fw6eu{N5MR{0=v2qe-l?RCFH_vStalmlIlXh%I3DY* zA^pPMnyVC#UDdma7-ypwr&x|haeSHMdz{ACW@`H7ZaR~3H~ABL?;hT|z4rFYdY7C^ z^7K#C{=^OMzEsWc-k|0cuTcyUA0Zy=&A!?3#NMl_8?Ue3dr5D0V(%%#8*i-Li!aT) zd#8Z-Za4MZvADn69yp0FI{1ktctFM9C$2x&EqQpSU4LF`*Pk2g`jZ&fpTzI%edNuG zApzH)V~Fnaj&b@)nizC&eRuEfh)s$(#m{J&rZk#2xpxzPFo?kOsho~p1`+iAt`r}w zbo=OyFSqN@m)Z5_%k277@zRaNxc+>_^Sb`D8_;v_%0#&NAmVOw?}meW9G~80$EUB=tRb&D&Y8tinU$ zn>$l;@~U}iy&|8Lozn5=bl>sk7@>zTkE$JW-C1ma_JfWW=o z`VAxNIF+?m&DzdI$B(?edSf#@lk$jR<;dA1*R?y_`))t+Lbx1neFw+jd^3&U0fFQd$Bk2OB>az>fhI3Z-1K>mPr2-ICY-;UJV5plQJ3 z^umQvqnsI)$1Ez22wYQAsq)ODp9dEl#L=-VT=Xb)MknR)ueqz@G$hiTq+@ zHs1DR-eSVhJSu{xJ9m?gO^0ZQ5j6${nmSm1Kq1L^=B7FTq@ejk^do1=`}xqI$tdO~ z9|%VoAT(J@sd(bOzrO3E^)0{G-|?taO-q)Vz)0l)ZKX7nr&*lk2EjW3r=$spK&4g+ zCCC~SlIn@*ZcNY;((azhVad2;;Xc)*&?W#9kc2+#^^nD* zwT<|fq`V@{03uBbnV6INsVuy7)!Cf*9ohC<|KYJkf2w!O`XOiJ?=A{7iY!l0Jal2Dh% zS*3^sco#L%PG5^=qYOYTZM?b(flvvIdS@tv<3fu`f-KiCY9ZvxC`3wxZe`1*Uw`pq zy`M8<%88IThLt)QQRo`&tQ%y@h&YgFM@ob!Ro*(gh{tyc3a&xYl+6(eVd)|oYa$Iw zz4#$k+~0=6X9k2ck(ISZYr7n*7+tX!Dgw=LZgKV#T5xOYBQm?WrmoPSaNz2X{$%ZS z|HUD{x`fk~eo5J|;XUOxIDeunYPEN{rC@T0Kj)jwT3c}0cy+t=co`Ev&^tzWPT zXUsU(ZF7Iz!4>rjR(GyGwuS@dxn=uw|6uj3t2ZqxMhCngpNz-nBRgomY2Bu`6h|#z zdhN)kYrnIsGjZ_M^>st*j#|EWX7sbo#*&wg+;n!ablnSh=NdZqjc*$7yn55qo7U_* zu5*23^wYJMj^Oloc-_!x$91OmwdFSYhLP=~>u@u?eDO_d53YptgF8m9d#D&aZAB2f zsuh5DXeyLD%`(K?71Ia0m_d+yXvKI=eWkVFT9`M{l+%MMqI}fBjJL7_>3qE&Ck| zNSi}9ul9vFEHcQY+mu`PJ;6z%WB5}c6nHi#G%T#rv+2sHP+f(r;WlZ-)2n~;lYiNJ zNA@{xh-_rAH?e3?Eg5hA+6zU5y)Q+?YXZqq^s6}s(hn68`~R3Qk&s3{k7Oo_p^sRO zo!MFdOej3AQ)l1IK2lb2U)QJCh!1R0m~#5-;j+cGGDP*Me5+?@4+ zH%CAGop*n)cV_-pUBD4Sj_rJ>rIW#=!$H?%mrncAp@o;h#$zwzy?>oCZs5D2x0G4S3LW! z+BILVM_!K2^MK9G3Lrr=w1^v|Or3PNB-#>*mwc8St<7li6QIQ6(W1!&R*NN@3(vF8 zL~UG;D}QPZXwf=GL#*;EErt_Xgp9dSW|KleKo^%TITF8kfiepcBvdjM*H9U=4tk=5 zX1$c-S(<7ok4fT*Z~fFS_AY#p0V=$rFjZlTS=YOFjaqBphR#eea@u(f{bVv&FgUU~ zN;aXrIEobzXUVUxS7tXcHa1~5x-8L-E2?j-Egx(rRqo646pr*Dao@?S__j6pJ%0%q0k9eYJAx$og94oRQgmdQlq* zWAgZuEDMpS@mZ~0tJg8F9qB^J?7kPnKK{r%w-nXWHdN-cn4YOp#lL=oMA%HwSZWhC+})JjzPSR$X_~exrq+(Los|eRpy6Bgn5lqvqMda04QxJ#^3w zK5b%m6xxOMi8FLdM!nFS&;<{g-UL8qkmli6-;*U}R7DRV*2-*<7SD>ptc;L@+&sj} zLp>JCAV3UbB3HzNu=g|T_dIaamRofM-4B+S8w|!N3F4JNOwev%ddBCLY8Y1YBnT|Z zCkVtvL(?ipUXqL~dDG>V7(~Lc`n2|uqV`Da5G=6~ZlckyFnN79un!2yMn)=NL->$2Dy4Kw^-l(ayWt%94zH#U~hTqT@`sJf9Whu3NbO-CCbw@$qvDDyp zE`Hy^=pUM-we}pp%wX)NawmdrfC7G;c;(3WrZ?-i9X74ek5J4EK^`AN>PKfpAHM^# zy>9HjZHm4U`?}gWweH*w$P@N;L+9`z<_=45lInbKIBDWmid&>Nr5}oT=-`Tx(^mM` zCq~k*JY?w^xqwC9il3U=`eP#-&s>x`DK70$M-;M5XaGb&JstWPXk^=2jM!AT;8Nrb zo6d_OG}*5)G=LWxrO4Mjupl(!PWZv0Nh81hw*c&UZc2<@Mlx`r+-SK&x3cROzW&f_ zdT;p70u)+LMMi&FtFe`UJVKoo?Ft-N1P31XWK61Hhl(mHkQlwEhf^)pX4v6lP1^i1 z6*C%l7xnqHii1vmv6|+n+NCxFk_I838*VjXg;OH)FlL0xN~Cg%)HKF9u^1fd%*X{i zyhwIV!_|R=(;mVy{IO;irtY&({@+gzpS(5z16tPIX09s|!{D_=QFJ97mh$nolQKei z1X9{M<*KZq0})k{guF1RBhJo5@Fd|$LOMKSB`o1#g+}J7qUNnJViqZ=d&IS+!rZ`* z-~l9@DwW8^oVVJ+JHS>4RfFC@~p1T!RYQiXbD&4O<^^%|IU3QBrD{2^+gistF4l6D*66}$y z9ggVVn{#Np&w)?MG!V9Z{f~DZed3elyB7mR|CZ$8%&H5I6zEWgL(5ZsneE|X$XvrW zCAWvS7)x(N&#zHz4R{9@)mxxm5+Pr209{-hR z*1V$kf90?5HM{Yfcx->1S8Qou0&stFo zKZ1D^2*=;;&RRKgP>q;eI$p+r3PViNN95Hj3)Va{RSpDS-MPA`Ux`7I_k_;X+jboF z*uE2VyOMubQ+Uit$E+W@fb|+<`>3}R$2?YGMTLa}LtbOhGFw|t?qGm69~?UC$BXJm ziqUy|f)qn*iWe+@L3iH-W({{1#o~_?BkM<|=j7bt)t=bqP1DfK5Xiv5!W^(+QoiAK z6E@`rNk`V6f87oy^aj3v(;8m+Y;;VWSK)f1#NC9a1JN^6T}Oc)3r#nk{(%R-_=mkK zKAt-R4fCrayh;+uB3>%NZq|Xp{=^<{8Y2f1&mnvxmy^_vPiVALU_z%-TGFYyrnjQj z29K$$U1^&pvXMUIR9enobR`@#SXh8{(Toe|NYZWPt5es2t&7={H2t3Me!f5BU5+lO z8zXCqAt4h9%!plo&V~eQm3if=Ip(BDqKM!mTA108s4HsJRxbKq?z&)zRx0=Z!Ph^2cCUNUk@!&8E(}tWG|D3(kV7!`YXH(z z7o?mL4i#Y5i>IBMwj)p+@=b|oOJ(y05MYU-%yB~Vbs0*8cV7RZTx*m= z1twOdQUJ3RPdsp#PZ1#VK}OIcqUdxZj7rS{Q#{f;@v1$)FuG^g!j}bF9;V`NAVAG# zZn>oGp~}RMcq5zHnnqNqsJ0XV=U_VE3s6-saRDZLf`eDK0|aVtKTE`{n5rv3g2>Ou z4j|A00y98S18cuEGf7qGB!J3S(b-i7w{dkJDTgA`%6#^^Z+v}4@4nJd3I%OIJT+}B2Daj1VF=cSN@dfE zP1;Qba%3DE8dEJOeO1W?5lnG8qr0ii1(vqM)$!G3lSyg76P!{?80SAgO|7`DP-{d-q8ntm=;!@?%1K~^ppitJ1W(g?)Nl7P0ri8l$HBgT9NqVYg zYz3B+ic64;>1q0CKSQUh#O9!7iByjM84Uc;Gwf;0DFNw3B52zUQ0fI<_QIGeLL7;L zpl~6nX5nimZh7(0$$7P<4nqXpf>n|bJShC+u=q&oA%(+rfDeSHJCH~(Ss|i_fu<={ z7ts(D4eJKnIIrNs?j)1Lwc&Si1C6k)50QmF3lpwWyfzY!Xo_oFHw`2YJ;hM$P{|RR zN;jIJEcy^W^=u*L4X{sh*rVz)Dt4$zzaCqkn5;$rG6pAs;__QBe)ys#56|~MSg*98 zN1_$|_#kp~MrE4|Jqqi!6g(uT!%}fYG8iltvISYU=94cDKswNoLfKjxWjWvd16^j2 ztqFW6o%)g_eVT;olC^Lym5x@#5kY>A2+Y{NMyr!Hd>h+e*)@9O7o3lM!Yu~8L@njf z`=e+Jo&qqM{AnFdw_wcMQ3aP2d@;UK!$>k4-fXjAngW70rLOcB|A(8@3JCHZlq?Gl zk%lYt^p`NSSzqsG194k$rTvAUBhkgJN@q57fHn1y5D|*nW--NzYE~ykuhvyYNJoxp zDNL=ZSx(?Xm95grULk}ItACwKQA4Qj_dvfeV2|f-M4h>z8PatUBw> zA`1XchWM{Q1+}8Pz-P$bHIF^}ouj{Yi9sT2$QeCU2D^LbN*H-5y#VWcsy6$Y3fE#9C4kM+Cb{f!9zAa2332 zt0JURGsybt*ctOWuyi(hicb%X9*r{kmETNfzZk*^loj3^;vq_J!&^`Pk)uxhlfa@P zun&Zye&}d-p(n?HOjuidAx;r@lE(mswW3h+30h-K;-|a-1tc;d0Ahg%VdS`6Rgp%l zOmrmx(v1{xW5mS+_i|mAZj*>DV`WX1DF%@y@q#|T<{STf-`TzWmz5|uLuO*YD6}n4 zCK?mkrsa%SW2u40yI089+i0oBrno8}8cD6s+Ev-a>r6>zBW&ywv}ZfFT(T6V@!+L) zVi~y{?e8ebBLVGha7vk21GQw_#!As-btQ(RhE?F#?Y)kT@ldH;Nez$*P_pe(ofoHK zORuHbu#BO@c%!zny7P(u`q3?4u5P`ZZgJ2cpY9w70!Y(BE}(Jf5k5TvYFuhp=&VM> zV#4%f0_}24Hz?>7$BBq6E|N^aV0I|#Y6AsgAQx6`l{ke}kI}8WwxQKhN=OzcscNSz zj~xsrs|p0OD3!>PDPV{aj%Y@C?Xqq%SwaRokKgvxSEqaPO~EK2fYv}FCJ$y#p>8!& zzo6>TKom2~vAC&mcbw3~_*O?2)j!jgl|*f<^J-ydfr#M<-p4c{7+q20#V<;kZdJ{p z7#XiL*n1%BWS9DeVlxnMC|%gEb%a$746X|~QY7Xx;ZgrGb7I_#l^u605*Y6nZSU%=;(`T{OBIt$G7!5h?j(l&QBI*qLw=+*QWCK5 z%8DvdXo)WQ9wb{(_SGMVvRQn7dD{u}3tOC;(EvO@+2qnyT zi|7&?8gnK=1qSb#a_F1$_;+(KI1ibjRQ`Y}<&5J9l%69HS1 zpfqYNj5Du>=(iRXa^b=%+$BcKd;rx^M+m*v|F-4H`ia*2asSeNOlM9Q*)y3m|Hs0=8*E5t;dDyXDe6IE~0Tji*m}!|DHY^uw>q0|5q2MO478U4W@;6Aoo0{d7*O zS;fR5dLTfDb9gyyN4^=nii4mfdTu|1$s7zU4Fle$MM-OU=3|-!`i_AJ!_5X78caWv z+6s?M6BbCOB^M`ov5;$DY?a=!bz9zB+xk#iHV3@+$cfXG(TXd}3ndnIm&%+o9Y7He zN=g8AA`OIY23ojuFotd>vp?j4b|r0h(wFCjjZbQtD^ZMmGv9w1G`nUSKc{MmO7qG1V%!QZH|@(5wys2VPy36q^ts5GXYyRW0hSm`}&{0srTr&Q|@7x#8Tw< z^)A7=^iFOv*b#^Q^C5+Gga#{`^`Xh6n>K0%A0*5G%PJN@dIv#Fq;)oh+$;!*+vx?F z35TIgEIQHqtrtJKe(A#xmQJ#CN|r2(E87Zz?g#^^;@LrMG+5#3Qg;xN4(sV^wd<#voYxL6;9 zi0Wk>RS~e8aPD9)*|1A76uhUg2$T}6cyvuSr**h8^}W5SXey~x4*vDmKYV)cYu^%v z9Mq^5gGUZ%>;kDA8H(IKy8|FlRBakJD>)GXGLc1y++a0wh)pu>LG*J4YOI$f91KTj zn|?3tf*RTO<)?rCKlYwpo2$|M-;(acdXa9`GKdRQ5?auwUw0VYFG4jHa=f( z7elIOL98Lstn7OCcc0$eyRtkWr`3}HrOtj@qIrqS_v~sb;yVr&gr?O|ES;>td?0Sr z->>t<$~4k;py4E{me8%QaZy>J<2g17@X9&!`s!{9{jCI~lKmjF8+>cv?AAV>XSDl) zZ1Cm=EWx*n5V(SH6?AHi8m1Q+VtbfKibP+NGG3-TdJVAZ8w8_H(`VAf5*?H*hnQdY0|?_nhrIMoo*UHedwS#BzxnFNdw>4}DkC%&X+PCigaF1R0~0(= z{-}Erp(1*et)-n9yjb^G4Cof_rrA}i>#vCBxaEVf9Y$PN+=9=_1=D7?qdrDXVhr$l zQ&e_#OFn`GW_`8U>B6UH6`dx-%n)LVktZb7mG(*M=>3fL*}KV_r3T6YE&#?lAJY<) z1qtNx;tL7Msq)}r`nyTTpcPD8y!c_Fc|SyyN;uXBI7edY4&JGm0GI-#s|TOFF*($` z;G-LVdeJxX+x(}mwV#a(BOb!n!iQef`-t6K%;M$(Zxg5Vu8MfG(s-A6Bs;i}rwQCy zgqsUH!NA$YnB82Ay-Xe`a1bF+6ECx$4Ptz2ydwG8_#o-ky$^=F3;WsFO{0T;Ht@Cq z0WVB`Hq`XR0|aDZ#_UgH>>f84=^!BD3Aub2dzt)fyhDCAmfO$91M;)6thsmhFzlau zPVe~Ddw19OTsU;@IR`EqI`>@I-aET!PrG{VD)Bxx-n$AU!y8vGA;z7A zSii>(HzK~*=?^%*!!9`Pu&)c^iw<7AWEXBG?%Ml7Ihgq1rQDx;S?|)jXnEJ>qai}h zHE=jVe1%7pJY1YZ+wy91=|_7_JbQdpzD;NxuO`Gu`_04?y*GbeX}o+qLTqmP z{ypxomk(l^yw`Df`6%OXvr#(O5a;+9Ni^&dCG}nHXHIgS{Xguz51gD=b>IEWXe35!;jA}`DvZIS zVJt6>uoT{n<0b?@J6iq05KD0ua9mnX7DF9D@rEiXp>OKl(drMz*u_;KAt_!KVJosh zPNL*(6Y|<@h@ei291uwwpjI6k2&MJ_;y=Ot{?5JknLD$y!pTc`Kfdi_dG*C@U=YAY{Wef7}J2ish$0@9H)Bc*HVGt`yIhsU@O0-Udai&XZPgENqa*H;al zM+}`iAN&CBN)9&9yvw@-X*n=|LtqAP8(h!0jGE_nJ~*2PbUH9`2qJWj)K*-xVRQYX z|9s8nUk`_wa95Zh47UzLZMxyKcOO)o+X7p80-xcQ2yEq(d!&T#TM-0Wf!3ek~Tt_`*+L za^~$p6`-Y)MOVFS5{#i~Iyfv2b3tk-a!{=nr=bNTQ!8Z{r2$?7=sxI^iB&|XA9PTA zo8B~(0M1!6Xn{bk!!#BveEGTDbM(fbS3Yfo=p2g^H4tRUk;SL!R|O0{qyzy${y)M= zXD&0#MK2wI2Ht3Pj64p217+7M#oGdICZ5Q5qssE~trx$0%~f~C*aC{WiGChiR-wk5 zcB#X6lUTRP+wg)UArHUumM)yo*ER(rl>6>FaMZX-L7X;%03P-Wth9zQq?4ww#!DL- zLKKtMcj!oKPTG0$HVkDD7ndvA5E+@I#|3Fe_(eR(bYoBdsb<~D=E{Ldsf5(Xc`Ws- z3F-0zyDVU}1nT8chB94}lvklczq>0*)qfQ7_XblyryhE%)sz4eT#cf9h+&;wED*;hYA&OyvLVM&> zH5s%NQ5#JNZze&KsEa#8AagtPMu$AT5i*lv2o6C8Eu3&TD$#v~Kr_@0sXYrHFp0?y z)oD*+nc-2wnV^j@CtKUrC{utOcU<|^cm00nnFj=q9?NXvy+XWOS7chyCPEM0A)x9= z)}w%;7K)G&n^mRZ2Ue>JjFg-FQ=G#Gcrq*uh22%|284{lpWh&W4HG8GE476cqO(V8 zn50k>SOlAzr$}|2&bw0lRgi?5HYM2+WrchtauX}?4M#SDVg^8lq^eYMQysM_5Bj{z z#~=Cjs=MCedLQ~ft%yOIsg27l*N0kA70A)*u#R0Ne%L2)|63u9tb1K}uMGgrNCP?8X&<3qL&@)%O> z&9GxqYb>`663_qmsk{E>X`fILJ+)PruAP5LYl8Lk`K{UcO*6ReXgg0HZ>uiOH@K0> z*WkEYIYR0LHxx16+F#jP*;9I1^&vcaJV%lYmjEs+jm*DfzL8Vh9C^%BYi-SrD=B|K zi~g!TrH3lFR(6aMv97wmGCIGmw&tPA4jgXi^=jN>H0NJ3J;63>c9?sSdrI3^d}N$= z9Ad2In&qp@myVseud@C8ZA0s-l9?LQ%@rrB`+2{O4{TAvB_(<8*wL6@*V+%Hn|6}A~Ky#2*_W!rfpNO_yijMCbH74qn@zJ=$JkJL%uM9RecL*}{XGz$Pe*5WGXtAW~Dg)5-#+3lcCx zrv!L`HKQJfXK|FyZ9j6y)cFrQ5yWKx5nKx@9RP&M*{i{?c+rx^-34qE2}2>C{Cq!^ z%kuF{(ssJ$LKO9nXJG~J7Q3b9T!tB}&D{zuza{vRB2yZLgIdUdX@EtyYN#|w1wi8T zr%h+$Zh#L(A1H^V#tDFr|K8cZyruL0%Y7pv6uVSVD@VPvdOT>MD*n)^b z^OPdZFlAXs)SRK~h~eMxMGVOF1C-rz#mAqude@%>$@rntz6xrA3%DmiU#H;Km8opL z$z4&1j&Y`X>9SY|flu>+Dz`#~bJG(nMu(B4=y@qSR{q^mc44_WBia{1NhM|zO)$ab zpxavI5-v7jvwi7}O#U0q+Gaf#H*aNJHkIRjRz*Br`M|2iu>AhhvX>kTk*OiS>#)`xSP z2IqMGXwUP7=kk$<|3hi+LG6|vt?6dkLcaR)7uE3K)CMn_j+(Q^)mosU$&c8bEXnfK z+e&JNvcVB5ss`{q7^jSv49#?*GqSo z76=l@zc$s297AR+?&wx9Z8uJV2yOp~g2dNQ5!ws^SSdhhrHSm8gHHJWc7QmNvl3XN zhG2?i5{aAa147u1UM?LG?$4eVf_-KZC6H*)T#4MkkyA*GgjiA#{E?- z&}(1P77Xf*mI&(f%%8ewac%ZLA2{{(@~+8n+~s@TrD;;1|o3D3eak}+E^4?fgiJ40im@dCd2Y*ns`k`;ammCpgam$cecx3 z1N`USu&kj@%aV>xtKV8c8JN--y%7Sn_dO3>7hy6H7TOF7Y7zz+18~Tc660$Vsm-sp zB5q{Y-taeHIeJs)qCEnH2Ui}eCJ_2oY%6~bna+6zS(K}bMRV*SR~c*P*WpHl&uil; zM2e*K^XrBy4+TdbM6NSeBYFAivV4K;LDc-nI9058G^fHTJjA_3-aq7uR2Q2W@*l23Xbo>3EAaQR)`2ItB)s7} z1wSHIy?mAAD;_G(QbL|TZXd4+=<=Lu$j`rhoYuzVY6Wp{boXa#RY8a{@CEV~vdX-L ztNWUY!BXqgc_{IQUd^rpD1X*r}#amhB>6mPGVqX=m>kF~}mhH<3l z{!Y>AI8NCD?(eneeIW~t^(6$x^ zlEe;HJC=$eH1P#X^#iFb_W>=t#%m-hn$X(i2O#l*SAOM=-|zg~Us=<_z#>?wBTz4R z{J8F@a^cRQ%`juj9>toBnEt4P2ec}*Eho`{Y3VAM9SZ1GX16Fg2H1;6fE5zOzu;xQ zjEF{?i#dqd(4$>Pu`OZk64mHe%Ay>~vt@}JFJwJR}5sMN95G4Nd=@kBtP^kNK= zaahr)-c+;aswSso(4!cxTbjgeO~Z4`C%^sY&%FQQV1uxT9h!(MsJYZ-WF00d{~{y` z2Kr{S;we%?B`lIcPSw(bMXG7e&&|)NcI`s=Z-p)6^t;?tw?eF-r*_6%L*&Lzm=KaE z&Aej~K0<;@N`ev&Gp4>GGL!HQ^S3va`egYCD1R#h4s;x%QrJxoq_mJLZGG!Ju0KYG=7Jmc_S>&7$a8vwaR*eJYcX@=R5YsE>%b}CTKarSm*#h zN7{z-H4rd!YfSBzvQev@{K&@a)ll{Da9WDcqg;%_95?D9%Y#UK1arT)VZJSStTX+wR&{^mz<1bB zsGam~Ws0T8{m+tUz;}6yYNAq0;+8~2^@p_1CqJ<3Cx#w4WMZt+IlS;qh~e1N{};%M zF8e;%e74Lk1>E|=-A?-CfCI>w$*#yyzp7P#7?8fFL3JU;Dzq$7-;3s`!(%u!>`GE$ zfQX0&yM?Y#Jdl~a#a`WpQ%yjnW}pwQ~_^%gn%v&21B+Te`eIhW=5=D*tfXyu0g z5M=$oF8wtleNbP}oT?!Jo;2Pe#&C5-Z#LHKM~g5ln6Q?TEVJ;Ai}1|Eu$}*?T#e+V zb*1`zy|!jitDy*^Rw0{Zx4na3tljE)>Dqk7Uacjpd#++WSR%mvfPg z?3UOblFn+}I;zdn$?8e?Ijb|w^yJXVD%@SxCcMFt8@ma@gy-NEn_8Rlp>^lsxP+y{ zRd<3t1Ut~ebBP!%D+8WO*q5ok(jpn(;17wU<2tb7AYj~ADiRGST)QX{R;-p`-WS!@ z@S;p*_5Mnr1uyK_uAH7ji~!~B+8b^<+xYC6KM&}i5|%WkwN=d`SRn{{ne5=s&n*zz zAF7oDV(V~JSe$6SR`HV$JiuZ^Dugt(2(r30rS>Z@r3JBgahU+WY2(GL12bzV0Nv!a zHAWyHz__#jH1w)jdL~TMPa#70CWTH{Yi6C2JVsS=jWQqs?yl|{eDp(5sFg(tXvUXd z6`)l}YCrO-uO4_#r~OxY(PMbBke1|gK0?mYhf;@JY(9YB_vN?w^PTds$n+IkcIGe5 z8JD!yvh0R;eR;z#bzb`spOlxT6atxTAES;(o#WNLIfM{)F&^$v$`zgonSEVk(qNml zt%Htb*GGkF!=}j>u|JGIWJ56bqreL7;IFZ8mn}~eMU5e&3i*dVMg0h|_*?$bufBNm znR`OJZS+?*Wz?fOS~IGkDAd9K5V-v|=(SZn%&lUev!_;CoGI5qhaO9{a!|Ov!8n`% zgDhqM?yF=78)Q^VcbDdRnhG5_qQ=$2aODVbR*=>uz3}8L*`(h_n*xc|4pFwjTrpHl zkOPP*#)egWvV>Z>{h&cd1d_UMsO{Lksl~?OG9;3{^Vm0j@PiLO7SXQi{H{MUTvqx! zJ~QQk1q>?#Q+%Y5)c1fau&|TgUHg9Z^3E;cmU&*$pc~GF+et2fif<6hBhCXkAx~4G zEk8uINermvmF(1QjFX@qxS#!P_-K2{4ZYh}pU_Z>TKu+;A$2T>zYygtKsI1Wj-iuH z)J%P$an(f>w<#yo@~su*VG~9m62=+*D3k3lB~UDpK`SS~YFor{9NJHn*F%+ub#-h8 zP*q~SUDJfkZSQ{km0y10-4Fjo#bw0~6+iS&`v4%C6E(DY_86Xo5K!PET-V(T8MSIS z1PjYrIc$2u^I3?65`%~ewo6gQdlL|NESCa27UNmsf$AdFG>G$E5yYU(l~QgiX`QEX zqTAXqXbPxy2a4rpE*NCO5Rb2pknI8yDA_FWCIq>$?_BW%$A4zUU4I^W$dX8k`e-@$ zVL&0#*a?_F3GRn0RLFC{ zsaagJ?c9JcU>b@tB&t`m+{GmTPU!ZjJw)f!6kLadHH_F5Fc*f)J+;cqN)ucHwnxL4 z`?^&*JHu!G!~^eKeajm|f3j?$<}--+nj#g$3+0>qPuTwvT;NVRA$uG?9kii@O9{U$ z@~$roCy%jJn<%~6KWK?oYaIxAgp%&lliMn+A(d%_vTXh~CZFJHx?IA2Kt&F=CPFoN zvE6|oRI}-mUp;iq{crPKAyb?Gsgt2~VZE|8ZDELXn(Q9QJ8nW)W^QCpP{u$C+gwjb z89<3JwScKN=x7kJ0FAX#;Bw?UK0W8n{;h412bC$TmM3_T(>lsPIsPGs4~t;enhfS+ z4is=1wTUPx>9iKY2=%Ce0t-N)Dq7FaSJV}v7tT+>Bm4gLXPSiS*Y#7NB&^&Mt4e0SAt~DsMrO2+DJ)m@2wFjUCKu;HDi70U$@E1RIb>|n}=G$h6Ljfq?KO!H)L(Q5bSR0y@ z$U{|-kGN|FnJm!xqL4)fnziya4^$(w*Pv>`FeJ#hrH!GfRj3+0AUmaB$xDdR?3bLn zi2~|}SS&$F;6MV?3>Z4>A+4=x)GBDssa21dYI)I0x*y6?`6l%ZfUQ%tHH*qBmD`$Z z(R59Qz|xq;YP%an8oT&o-}r+!cm8CTGV1{xdhWzEF}Dfpi{oo_BWqnt1FDHOrD3lk z#VMp%F_OCV$3!FnLbOWh0TV9JB_>w~DL_qK6_?JG5GqyHmmo;p2g*$s%en)QmMn0U zNq>17FcDRwDAF~K4VTu<9#yI$JXV1k2Q4&#VD{N}-Mmo#iNCN^t6a3AN1bs&EesqK z(GH9?SLt?u!ZJypI1!*Iw|DdP1JVHlnxAkJOPH2~>YkuAt+{Ti73+TP#)@%s0iWH{ z1k91vDDsP{YJ{rtGNE;qJNd0uZJn_$x-R%k%B*|^)S#WuRnW?~_w8{=Ic(6RuYBw$ z?)dbIn?Kr92ek@JCPnB4$Ui(>=FK|qo8k}ItbWA^7FrI(!Sqli_PA=?E8G&$MN@6T zq4cKvWBqi&P|Cf{=~a$c{GfXTT3Z!$m2Bqmf!Y>z0AR(lY)qvNh@}cP|B!bgVk^Ri zrXJCa{Pq9+Yxlmp^V9G2Syfz=!$SaY{WFa4Mt*Bo>4Y;pi<77BXO!zI4Q+v`I7W%L zt59Bl#UfR;{n2iSzyu?uq)g5E5GXaoih4+P(2!|i+u!N0xXJ~vJ(lKzd8PBC@BE+d>ik%6E=)V>6clF?4!LNk%`Y4xY-oAS z0AsE-(z?)9Q>$#`2vx&nX`~vOTuq8JXl?Hr3N)#6^$7JcpI|<&Pk`tbS({~kI;lDp zW1f_)XS_CubT1YVru2{kPB>M_OXLvtJ+gc9P@~4L2xY9IWuzAjqFt z@ldmSX!T#;d;HbsKmO)mfTnoZg0Va5VT4y%3_q&2uD?3=p`>p{^TygCR*z-`&rB7i z1P4Wqc=)raAR~e8`dd_@67C5J_U4;#g4~*h;)se{Qw-Jlrx{o1v*p%VRqH~IEL6an zf>3Wc{M*01YV%JDK6`pV2$A~h$e9ufYQb@d^*E0U8`1gb8vEX|4^wic+I5_4Jt|6v z-r5{t?)U^7aeE_s$YW_ufzdQz{JSe+nHf6OK#TFyEnoC<*Z8;Yd{yVyj}+Nz0a_PR z=MPc(;~q=znJ&IAYcS;MZ`pxEs%O1@fH{=9zJw%)HhNhM4aJ*90~Vl7&|*&>$lAZh zc_Yw@3hsLO7dHG^=d%}w?DWf6hTaXeZiv-6E6x&A_j!F&0Z zM`{GQlMd=6f|)FvQZ5PQO$$_t38dHX%=rLBZ_O|2-NB~N_7bpa0?~V(riajKRD^#l z+9Iu}`WM&YbG73*Pl7JV3$)f9--KJ5KL3#g`=oGQ!S8%NC$q_dE(VK{M?Gi|6_rLP@2Cg5ii1a*Q>Xt*JRlTTRmG{$tl71L1x!8Kx=#v5k z2E~qC9+w>=RpV;aF!#t@dz^- z`fG^>eIJW*7HHDHW}*D?$RdKoZVSq3J@f4c99at?&N4Z!5z4xH15^$NWPk5B4*p8# z=HSbXs>>={7kr^IzoskRHw^_CRCSAyj9`xmX+AvXNR79d07n=)29Vl$n)Vz0xOmXu zH^G+FhCr0SfclzLPGK^ZRVmpQ`3d~QLmqPb`dwp0wq0ptJS0UuwbR?qe)(hb?{ja( z^meaBEtD_9VG4A&&b7)EQ0RVyFXqm4{G0xe>>gF5{v#pHDaIqi5=ryJ?y;{9($4{p zG~t6Ef$69wDj8r80ETutcYpAK{j1)xw_8=n>0|s{@P9%!#?TQCw32%Q=-K=%dt2YN#ycVoCtm%*zIFQz?WN z$uC?lIw+}{>UpfQl>;nl3i-_21-=fHKJmH-HdQY^RP56=!&cRcs>rV9#LuK|r1I9Y zYh@y)TI*`7Fw-zqQ@izSOgq?SPB|Ej9>{H!lCvyvN-vv>_KcbLnY{o=0FAy+>K6M> z>jD_HOA3oFH4|YqeK;@CJIYZvh+4E^B80+HC|Cp-KvP~JBIv}ks}hfjcSvb zY)!}ovZ)hUx7W&oBRkyVkhfM=hqQLI_?Tmsy_(}9Vt|A;wqwFptDuio@6;y$Z&HVD zMQ=jo2g-}2)1K7z8K6;%z@GDg&G!rM;d`g$A832y0 zLI4+ySR8E-iz-8)VIU)z1vOX37%ou+ImpRhQ!ZLta9di{2vr$TYO_?5nplD|WR2P< z@BY#YPIqn$uA4j8Hac@xcdoz0et%fMSO0M5Fuy<0ktY&<@kC<3SHG0-!`H9e^&92) z%I%1P?4IX+q1b#DbXAiM5erSNa8I{q?#%>#)0eXoVx?|TdYerYuR{hjjh=E`0B z%Xdtz-1W=lJL)TMcE2B2c=N~0e{7CW8rOA3E|DXS3*GMz6UGd-0yujfdPV3bvXoSTn`+(7Akl6-}4lnIB(ax1;g4s5AR&f;NH=6zfZTY z{c4D=r;dz~{BMqZ9sdfkys{{FMR^_t5%xBrMpoafBi zuA`5<%0WAyR(;;MbD%L>xo(ETcIS>{Cl^&OoWZY0CO029wPt5Zo65IqJ}vP^GHLEJ zt_Fjm}gK4VUFEgk~PZ#m5Y%)?03C>AJ>?8~=9V z!9%-`G||#)rHj^8y?H4Coxl6fo{s{Htd}J&5OW_qYzQDVT z>mavJJctf+Vz|1m#4F&v$@w6en<=4TyS4J+fWpgG0uY}zwj~Z9H|fR$_VtVX1XX3jr2*t?^1yXhA$v z#Sj9-=oPa3zA7#El{O5{p4^|qi`!XCN^~KYfwFK-YP6d42M%gEEvWUYp(M*uWQuAD z*}GBQkXxh#p=*QCc0q3sQCh}WlPT02+DQ&6IruZt2D`Bugc0eEY!s9 zD=hR=3c28RMu=W0ntx?hFPdZ-LPu(dAgtnAS~1&{nWf_G#8ADHO^wX%6{kg>;GFXF zSjhlAm4JOq*TRzfX6RPi@TA85D((tW9W~oJNU&***qU>oeA3*v0W&!Swng*i;Z;JL z1P0RY0&IOJ_JA3vpZ%*hyzb8FO+oarQ8Vle`Rc$G7!-+!Y*@)Xehh8AfS^^NilMjW z3D&K*ys2M20*Z$wg&hE~csJgZQk1|pqzY8>s$O4^9JU%G5*$EC2}q+eph}f&Czc@D zL%GnTRZe3P4CswVHL?JeXy6Ppi=lPZoiU(*+ayF`Kw*qo$pwroncA2vaf=Pfp;o#7 z$S2>h;^HGuQyPyT@nof-U=fKe@R#a@ta>*{OLR1w(vI5oNH_>Ngg8HX^o@rsU@n+a zsrm+W`C$d0?!{y->x96ede;kbn}o`J4uPWH(hZPD7Td)c?kuy~^0+eyP3p-(FBo&p zyFpq6Nq}erMul!fRf4<*B`sS8YA(j0gfU&qG@P7$&fahS_ViEoP@Xs#i5g1q*M_VN zAY*0LBi*cG^vF{eT?mWhRX)Wr()JE~lw*onUSUXMXgS29$RxxnRk8L*SS~nPGcS`t zWTOUrkes=d5=@~`x6(|)VAQ0729ibkHmyoQ2L4>bG~jNy2^KpP2QHJ%o7v_+{mR?l z_3$5Bf)WKQb(ZyOyxv00I7!-VwN{6(yIzsYhZL>+^u#|jo;j*vpqiFuC{;*U5W>js zdapQ#p{7+KWE%T*tgk1i?%6}V?yqkZ;0!ye3yX1%Y-~(KMGmP*)XXn~iU>ujH3-VO z6{xdGE!u)mImu_g|Cv|4YRwH>k=^Z?;p8M%JQ7CYESvn z5x%*HYmhyqU#RY>e2#bgf9>2dF~6>LaQ>S4Ohn zow+4hwWE$36W-;O1fxWR9lV?D-Z@i#-37HZ`1LTSBnR=yF@Irg4NgngV63a|t3D*J zBox>RD0~Z^_eZA}OCK3;P3-1E>Dzd}m4<3-4)Q+3`{Mj206FAgeHl(ZXlSPD+^4Kt z{gLrA7vVqUR-BX=s4FevKpC$f<%2iQuRF80bo+P>mnjd<_5jO;1L_!^AF1KhWJe?8 zcI_cNu^cPi%KJ9%3(RggG~YOLdFh%q*HL%KCCRK@lGM(Bhz#5DK(fvQdo`B-2PgTo zJvHL%WuC*w{VR8jomq!-7kXc--ma><&R*INf~5fKd;@ z^pZ{Js}7k%%mkrN-2@cX^CmtDV}Le{sX_>CWieh0%Ta#K0+*Sh_9#cLsT(qg_4}Et zSS{sRw2f;mDz_tkky)5E1Xw?GYVT`-p4}S6{Wm4hk}|uH(WkFxQN-+;uTZ(J%8?tM zDjJ8t1(eo6vJh?yQnFK*-Wv`k#PYb1U0a7fyCDyMlyH(~;)>YH?t+`UtpV2X8vYK72i|khDlW7dhScOp$ z0n-JsDNgJG%;C7Cl9z9w?)&P+Up(_#0M5st|k%rG-I(YH)f#5*bLQib}a4QLZDz2u0)s&%7A8 z3aL7JO50?G)=JDbYvcf7!O#PaJG%cZSuVb^{&h= zD?dM*-%!KVRMT@JNVmFuHSC( z$rgU0R>et5UcIcMFMMirKm>Xx5CRBP&*%NP!3BWZ;2?)_l(Keu4nQ>jUdAdVXC?C+ zT8(+$VIl1Y#i+{HP{|=8uoXlAzOuIFBu21;Ew7N?dTnd0wU;-(2X$r?c=FO6YfEeO zaocw7{KYeCD;rB|&y4Vu+6uVDn$?8FMS<6LFqMt1X5*ZfcHNcWUZHmO+N+-URP})m zp6`aj6IhK!K=ZpvtXTh$jVJJ~s>91Hsg6xg>2A-gr`+6CkN8)vQ_6x?X)ZBWXcjm% zx2-d>X+sRKD2+cDri)Mz^iH0PdQ_IC_|*&Sm~a!a5n8M_piTWe0H(lxlNv~)4Y;-d zx4x4HJgWvmx`s^UZqTXiq}-#72{LTr%Mdd`CV{bBhkYAfVpX$xB#BJ|ofZkDW%P?! z2Ary!0FmADflu7?eUCh`iZnfr;OpuXFsV}@kbl;xDX>-pB4K)}w(4%zd74=@CGZ6` z|Hxvw2?8C{H%I3xP_2tlP*_Yv`%$PdckO6QU<95%Rj0rc{2E3FD6slXjAl&M zeBe`Gzx;)rzxaYd-gRbzXO622XC`g)^wHWU&m_Uw$kmlA@JyoD1Gp<0$Cchb#MjG_ z`Q*OD{Gs6cV;BV+&PZ@yqAHlyU1ug^a%OT#X>|98_>1u(gEH_4fHfWg$n*_1>$*;u zR>j1q4wRkv$6xxJpY8nUnD4tV1;xeaT+p%=xNbmaHdRAr*y!qXjM*?mad4|)p&=XB z8GSXBRgCq;AX>9XTJFSVf@&8UJHS;;6XRkw;Us+ch> ze&b`8b^clS{+fCy3ai&>T#$%9V}#n9mN9aymC>*3J(5HJDn{qsC_xm5y%fM6V-016 zIUO7NZ53)Pqfkvx1KG7}rGbFAfKUpmC*%@2xWxo%ld#dN$LDs&6ACx}gn#s799<<_NXbbFTE(XJjeBi_sP>b61In;dD9j(sQcWjfN|} zpK_?2Z4wh|(+uO-oB?P{GhF91KxM5lVOlxz@($3qnk?X0B2}q9gBXyPn`9(v#zZWN zK##gBMp^RHz>NU3y_AW?9z=<&Td%pC2fS4bk=H0=gXmbqrt7qu#RKwas)^i_|1 z{%IG#Q?TjrRO4RG@hdRS{XE&4TrCES$JV*)9hB-y4@v>KJVkovXH!J)hME z)`$E4c<>=VC6E#N3|YEen*oQAs7uf!*P~<`Y`4Z)96=tzVF4Fcz||&u98W^SSJBo? z^4aZA(HGI#peM>evhp}!Iv4)87ynl0FR$q@a}Ff*XML)?Km5aI&z|nQemXO;RFqTDb4eCvsA{H~0q%0__Bo8%dQZ7$QjR!}(%aetQYeYV;S5LXz;&c9x;eLxdL!joPe6B>IJPA$SZS(uaia9qp_xqhgh{m zIn4mel^z!SwV0<92bsO$e+9${P6xGwNc@~AO&2z)j*Y`f>nO{hy7mH_6>9OK=?|ih z7|K|Ozx9q^d*n@P?s&Z7kzN-|;;F4_3f}~5VNi{r6&P(o5u{54gIcH#iF?BUwMUxM zEYxIEfI69OObh|e9+4%+AVoK(`I2jqWT_&Y+tTQ#5$K>Y%_pGGOJLW9gl8X8BB?5> zK!xR{uX44iH7G=DHF9~42CTfG$|bmvnTFQ7N_#@Cq0f(f{hgOi|6HLoR>r^6V^uFH zLEHcTKN|J;x%bnLkFER{VOHj)x)KZa)6|=fRIvBy=3dfaR|DiwJXA$wkr5JD?tv~K zQ;)5tams$E#ZOf^sr*tYRa1odzB7uUtRBr z%scsYq;5rNqYf1!m_W!1qEC{Rjm+X*BiW4hM|xV}?;&ANF$d894VT;bD)Op?+^5`r z0clNJaO!fPVl0p}HOAIKiK25X@~n<=%^)SMfoYYRGt32Rn=0n9ku)IS3dk&iNY8{J zgt}0kWf!R}N;3;aviS*sL=2O1TbGfEwKk~I+Cb)#L7~<1#IL^bRcm(rX^`J6?p!|& zpO}|JF5T30Ppy<~2;uM2-SF)y?sD%LiS>8acE( zu+~d(iK!HOsASRdZl|8Q%PML?+=cTGS7#MPeU>uS+DOwV_1GjC0V}o*aG}Mvn;ky8 z#fFCXOTKG!?ccT=wKk37puX*8fu@UZIr=p%WnUV*@ZztQZ}?$aaZfvEZ^)+w=`s_M znX7Kw)6_5MAxR0EG$Q+~nY*2(5-pEf5U?xBzgVky4Ad$=W7UwzUC2^4t}CZ5ru*Bv zLZA{&4ZurLLkAgzDoJ+J>&vs2szTZa^Z05EW|6$2SX=ZC7D<`}Wn2Y-Vh`Lxf2}PA0A{7`LxU3Mg2q*9g(fn*k>@lx4mm&|`oC^; zL_t^o^k^yDZ|4%0V5>CQYO8f0nveET8o%aSP+^1;YE-1b)68~%dbsi@EYg58s~Gpx zl)8~EBb{_ZvU@$wCm8V!S#1TRtfyA}V7`*C%hXCtg9>g>^waP)lYVCnz(@4MNbqY( zoqsud!!uUg{ON$x14`zZvtQLP3XxJ)^sC5>qgWf>B4 zyTuF=;#!c=MkmJrAc^F3dMvao(E5SW0%XJ$YG*cw-<#zd>d2H{b&(;k|U zv`co33~gE}Ut4zgkOp05rW~Mv9<*F^j`R>=i?UX@FwRmgp^HyV*wQj7f*;m=OM&a73W{bgVyX^3315mYzcW_$Q9In)2meRCeTe;Owc&l4f(3S&+ z*MI&SZ~sc?Q^l=RtC_Mq2e8UzkQwZXi)iYPW`I3yNoelTE=7+)q<|v_u(zO>vJ_KO z0-3heF?(Q&lb&7_or7A#2l%f^ja3m()5DU660bt*z8T`?_yN*!@*gbe}N@Brf%y8s|nJmdPl#gT7TR# z&PPJ>(#UYNSzt=+o(B@qACdY5e{-0Hb>G6{hS^zk9~XwoW^0vw2#r=XpW;GOk+pNH ziQeTE>yS=Gd|#oyT4iHd;N<)gPe2?-6=?c9l`#>JML|IfFK{&lSiV9b%5JP+OEv-n zyyc_c-21nk)6Y;UPXVs$j|P;G`d~2Px{G#sw7yE{oh9r^!Q~+4->%Q*sjsMtEWWTx zQgB`AMjvY1UrPl$0#waed%S{u=PAr`QHx>5b6+3FpIji}0$ki3{5R~}(A6wfVmO)e z(1lWU3#e-j(H;KbYb?uI32yAK(eY@;E#W0_B{!XQav4$t}7&^DfTpwd?1=9WV( zW}22iY6UcY!Ns`PVuNm0xh4_t#EIR88enJpO0!#DGF&-$m>RU6w4e+?r9vJDwyH7M z^cNiGE1PW9RxQ|T@xuyKTj_{a{onx>{h`kXJu&C2=N_4S?59>fW>u0VRMbin3YEt7 zE1y05Y@lrkc&fCxdS;bd3n3VD@_u)fpRU? z`^V32>O)d+aunsPsCo%}J44p|3qSY59Uttx_4W{vwZ?&}j!;X?aCw9YWWx`Tf|+je zXH9#{`e74hfCVp+!Zz?tAChz~>RCHn*{0=YHh1#6jfqi&s>zTvawlWtm94Cp)JufO zI^zQ{tsl~`Z%30uQ!pGMAg|D=KdfY|ZOB&>Id;2$W|X#njV-(WzL3%mj?Blo43vte|+%+ zE58|xK`0JEKgaYou8#ecgX5}Vd*xkt0(2+?i5mzt(N48SHP4hmc%%NDjih~QM2ija zkP)o85)=31?i)?J@n1lL zyU~D#-a?GbgaD$Q>KtOtetaT{V-`k{JWy1Q)KUDO?0 z*!4jne63+pM3S%Gp?gxRGyQR#kjg|dR7zHwt4~kB8g{P-GWHjFiRwhz`#yc@>mU8& z&cYRH#Xa)x#RIs47p!e0RQHMY$5<0A)q3a>jQU}9?rl!5jZnnW+zb{XgeK>9i;(9*c_50s=;`-86pJd63 zo(b`%-TW_9&K96e=#`C-9)nVFHvCvMEE@fb$AW`Q_|YIKwgy`Ks3}gsOeobqir^hQ zz(qo2_iuv_thu`5KC|=B*se8|k08{`vO=Ky0Cd1?H`2imKCBzVXK$T)-KF>cUO@vc z;|BX<7>G+6aZoM*Stk*ofsJljeb!+PzO1{o61*)gzcf6n;-XF3;t^6@j4@6c3Hm)ld;9K455=Qyy2T zLbJ7si=k~jnhg~THS9M+i7|E;>3=&f`I$#9JMZ|jBm5{u&UbtAZ5VdbWFo}Ua~|Qv zg$}rB2x|lldYUs*Tvx8{#wga7yut;CCgH3L z`^9SXO=ae+t0H@MxsC_S@`l#clmOU$LkRPX5aF#u9FjG5OJ+b=C~vE7J5O?2&cx-* znW$}$(2x*WXhy`trq{Ahq_=ZQLb(8;)ab}s?pKLUwy0V658lkM)b%6TZ6e#PKPW{P zc1uUK53Y>aQMs{Yt_4?N8E3toK3tyL&DVQ1EORu4X~2eBiTwbeg1fEQ56ywg4;@Bi zMRGt<+`2%*D5vX{{nAnh1|c%9>;;zxr_`cJ$OoIPooGWcFo4MCFU3hlfLoOj1@B+~ z_1FGb=jFep?Dpg(DncW>llC^KFJ%EyE4!f>Mr)UoP%9s(fM%5tLUTflm!D@DAKok7 z3EX#Ll8Z1#9x6LTCT?*x=jZ6!E+1IALE;Rmb*OLvUyL-)T{?l&bB5r zgM>`er{4U9pZQkjz}+rcRnVd+BnLepM5>7K*4o{Oi4!xW44GHtAq?$Q5w%}d-E@~@ z3&^0MHdJ+9VZ8uC7&ijC?Mp||4_Z>$&MzeOj+^pQ9U5nA8aE3Z+e;GrAH0BO)GQnA zI%l;=&f3}ghFeWhCq1`@fq+Sagp4Y_T;GjP-_WwQQb0Yz2exLautTO@UTsp)_m?g( zT2e`r#%mR|J0o3^@Vlg4RP*55+Ff7!+8e(9nIoMS|20v1z!{uVA2!&=-Ujaq;N*E1 z3|H9V)XH)Ta7n50@XpG}3=Rd_)_iqt9&}KkLEch*22TQ)l*aSQ9Ixmvn9F=Gl8;+5 zDIadAPQHvzJsU!ue7BbF&yr^z`rnY35qQ}jKS>Zk#yGlb1L48hoK|q!g2w{T5I~rz z4hBKK5hl*eRt;q7C;|-3hzWo%1Lj5O$O9TKQkCoiXUfn{UVaOxHIP+L=+;FLP{0EF z$%%WmKJ%TO|MY7Pw{ z^hjx9x=AFLMn_6NxZ%w9^5$zR2iL*VHaxt(v{`p!c2@3P>u!Z!->F|PT)lka;q{dX zf}K(PNSvvcHs4gbV`rs)|E;AwfE}j!vIGZ^sWzPoB5qck-bfzcW2q($9HErYFB|$4jRtpT6Vcd>;Da(~~Rt zdBxNBR}X%C`nr`bTY2!MTrqyB3%-2I==4o155BB5$)A1YgD>OH_LT?!*_NZzM^_#M z^n=%uW0XGx--x_$aL@E8y%=3}@G^crRP55NPW z3r;Hd58sLFyZw3N^ig%Io2hURU`(W35P^++mk7QGl>9v;f?vDU(*O)$lKH zd-}nbw!{Kv`QL(Xh-UxGx=i7-EB6f@ydGXK$^YHp(+<`(d#3V=rc(Lf)bxGo#iQrw z#RA;GSewy<@5OuITknZF6hZzwQHQ>Z?Cg6;1b6*k2rc#`v>bR&pq0UvgQ+LYNwpmK zMa^@9vw?n(uq4>ZFsbz|9{GqM{=rCDYrsJ!q$A}$j+DPk6Ef>O>w)xG!KhflwX6t} z)1zVqNCRR8Q<4v+rZ+_lZBrjZW8@_W6s!P(5G$B;;>@HY2rUh1tp_hnmlH@Ze0`5# zsHLGtFzlBJJSXsi;b57-WW;Fp$4ud=xf~q-!32rm+E_5O*)PEme)=5+!*{c_>Fy4S zJj0VM#7Yd|kK|VC0AXXIg>%97f0Ui@nC3uMBbp=u#zuq0fd0l}dtR98YQrXaS1;vR-afs9}8>S@{eCux^NOc^^)?HR$Qo%B;U?H#qJ4^7VNZJ)7t1EcP7tVfteL7yF=)g4ZT1(8S#R&s9@~Iq8DYZGk^Sh^W9!&Y~m4SVVYg zo+&@`kCG&UaxgjTSr9l)EEa_2gu_Bv;Dy7mLkI^+@8LWtHRF=Iek)03L2-~2nH|Fr zdd-fXl*R7eun2gws(*z8!g=bO&|(1Og4muie+W5dYy+(us3 zC6fuBCQkpCRen84??}1N&J0dqN6G~ezzLSxnc3D*YC|s{6r6zRA54tCH`ge>hsxte z4xOJS6>tL~QXb2&z}ADV@_1qJWtxH&oN%WJF%?9YY0|of^71Q_6b*G7!RrbN<*^wS z#HWeJ2H6-zqG6#iI_(dSf`9;9NK04nivOG*75F0rze|j$pnHVyxxp7v{3SDXY6OR^au9Vg;w2aG0LTsB_?o-IOxV!^-qM6$df-XavoiT(`1wg^kDj7~%bhtXve#DYjT zJe{6!`2O3{qXI7$hzfeQ2(g*beX>CBKTb3%=oJh4w+P-DOHv!f``;KoZJ; zEpk_qijyP`5snSg9QrdvuRoUlXm3yv6dnr_WCj1`cM@d<&dSJG!D!^XBo+&n+Lw$u z%YqZq87*sZn4V?9J?W~Cy;NYPW=mB@CL8wONMb!G%uD*Dg2?tbxs#;LTf+z5l3EYU zx0yRnL`_tz2lbw72m>q&{NAv*hTzu&nG>YE9_;$#WY>dugYYC-0qen&JV}bp%Ob0@ zFaJZiRZ5rlJD&2}T9-Z)n>@ zZX_+ejADjGg=`r4H}tY$imYJQo&<^DdcKd~zm8&#jL;NCMBqP(GLRMctH}isEVvK5 z^f|dq?i}gVvl2W<5-W(QU=M7dmlfQn%ZUT;rI|qJsXz{p_XY*Q0k#Q|@7tsnghzHJ z`gtU%ptzmrcmZO8=?!CEuyjF)#e%}R#2*{@E2?IIniLh>vN=Is(7z(=>8=P~WfXY9 z(u>M=cqCq6+T%iHWR|A>c4B%|@Zxn&G)&A5zFgZC+GCi2yNhDlg7_9fzs|^OkH><; z+phLlw-CY+f)vR~v4UOSPVl;Vk66IS_bv#92lRpFCGmow<7I!4RImam5g~}Qj+8h3 zVzR7Y)HyX9c%;0{wKP~kVOS7dPSnVUgCy-1QaeL<=f*^dpzv>KMBvr~(;juT$IFSmnmAbK3ZBG~GU8yNF9fU$_SZomX^!Tz`ewP?IuwiY8oK{RmCI)FyK|ReKLgWPBbjNO+$l}oJ z%&Pw^5nj-5e;(aQi)6#J)P^^IAxT5C!osES*-%m4#8UtwJF_RXAnXkSq5mq1 z;|gg>1&=?sl%}#^bkL^|v{`sE$^z*PZOhnee(sG8(>q7n_0CF~R1lk=bAr@oSFqeo z6n_c9Yma4D;H3idV%A*`(qaWS-=6NJH2F4+HV7z=%(r229SLK@e(Q4)LD#OJP#(*; zIQP;{*^vzw$UDg5F(X;jh5oMo5YXI?w)% z^!5klu)wJe*&pcg$r4vqc1d~Zk+L886VAb9Y;0(EQd3^Tm zfDr8xPrGBJ(@9amBd{!ZFtig(g(`Jp7G0^24QHm6QBgcb_5;kgzBSV6HM6qd&YD_}uL zZ-emo%agP`?zJxIJwZ6PT|prhoQO6EURf9^3(^t`{_`&+x*+sAIvwcTaG>5$#|EZ1 z>~(aSw9|?kzMQ1Ss9*)&t{~na#P;X?+r)Dlnt5|Wb6t?s4&m|NO!rG^kyubzmvnas z3xo8A{ZtU$QZAeun&n|yhGrj4dxy|#XlB<^;#&y)hGt_D1qvVdcD(F&2w_1$HcZdD z#EePLwW$HTw9VDAuJ9GxUS5X$G`xgYiH}pG%ctJ3MFd~SgWW(cE zBxq#RbEa&ffOZH$WuzT~X^*iyUdjpzWr3FvJS#AjQCJX?yP(bR8JEK!$1^u$2X^)p-1^ytZmlYIJfxnuR z)Ozs3Ym(#yksBl91WUi1i5sJ3I6<*Xw57pw0-OF$G_<85Ezz*~ru3+QyXwK?G0v<^ zG;~z(WOM~R%44{~($mD`eBGY;g9I-rd&$sg4H#9!v&R0XAnz z2?dY;S(3*{h55N1BRN*UCb3svgk;#SHS`V*BfEmLZvM-}(1;+#>#4`zk)WN~VAU~O z#h3_8b=`bv7u8P($&md)Qbf>s`(LHEKZvfUqAAeMu&X(q znl`I~&!IFvcx=!iQvU~0q%UIn2de^cg5*A#_{sz&!=8)kN9FHaoS;u8Sde{D|MtM! z7Zu0Jg-l?ILP>^662Yl|m#Ab|I4&`LQL!GNFDh&e2T*~(k``?e_l8X(i-4yBafPJT zgEQA8>AfbpfneHVPXx9-C@f0`5P|nuQ78?)siCeY7nUVb8l<&7c;L6v_Fm(+2L%yy zIl;g^qSQrqJ59luwg-dPgVZ>|{Xd2N@lI2O@}!j$f$zEV-fFuPTT(i6`7was2UtsS1L*X>$6aUE@jK zKRDXwvSPGPbsQ`W`>7z>B^nhBQXLyXq$L%+{fE<&4f|Ec0~dtlRL9Y$Fl@)@7lgvJ z#QV2PiwZ_BOOy(F@2R^T0%CzbKv>4WXv`@HPDBPq{s6&F4T1(SHI2~|znGw{VRWDz zc{XIXXkvjsOSA*!L1&3xV-zn4{y;fW7Q{ZxB02G?>F>C6>Cq%vLHIV3Z4+4#3YQh} zCv=xyNHbR8ZO^@&s0HD)J3zD@f+vWisNl?hO^_AH?ARY8_1{fJZ|F}D1}cxwtv3wE zNHRW+=6_5OPfgc`7r#6~?Qstkm?+?P2zHKC93~DlF6lKh>%FJ$jSZ7KOzgb#gGnw3 z;oC@NT;dl5tdAudno~P7E?K%Dm?%(uGSPMj!MLQ?_&lxC#N#hc@HA1f;Xtp~W_MiJ znQ^2%NH*N)P7^&r#44j?txGl^PSE7^9QV|ZI_r{f8)+#O6bpjMiG^W-tO-muOj23! ztw)nw5C)wgO!a?5ci?R#85@rUWdU2pr8@+jAtWXnP9|w+cC@=gC}cyF1y6QC7-Vkf zS%J2RsS&{qH>bW$EQkOJQ8vgu)`tD-fsPP*rGmYYH9?RHI9`sohS84kDXKC0`TdEm z2ZQ{U9E~;zcBVYQus}x$%d7{dQ&k?nDnaj-k*Xl_aSA6Wj+BuMj}7u}=~ab(InZqc z;{?%-v=oi!tQv0zNlYoI8a}d-aV9CUXY+&fvzaWpTa;> z6fUB8p**PxAGu@KEEX<8TM%k`i)B>6C*SQvN<~|LBK5n zCKG6BIFOoTc=uK5Nro66OLbiMEn)a0KUStXHnW0r8y<@w*eXbMd^$2b_5=~_3F587 zQ}Yz*_zxy&ZMdwapt~N}#l-$iVm~VwBpRk?a{9cf^f*Cee9j?~_5|G<%6r@mWzPxv z_lRCwd}682P{)TdErBVR$J?Yh!N2~^^oSr@4#Eut=f(=nQ9%R)@1ZPD1cjBEmV@Mk zf{#6sC>31WBNR9TBhw$oLP0+(IN{tD87uHhLnIVTM*72~EKaBYFv0zS*B33lm{@3z z!%54^NjL|YGHPB7pyQlvOGrGY<4 zENstHB!VYSrEO&9m4=172u(q3YB-1!+zktG9!?{5k*NowGo+-JgU*jN(qjeDHI!g= zTwGE1qM;d?9b4l2-iwA~(f+^-1%+ssq-DvU{&;#+U>k%&G?XOJ)fdGV)t9j>@fX#- zz9_ORIUPj9)UKgC@Wll6Mc$EB-zgHbP@EzK(Xd}%q*J7>XjnKd@$*0E3R3e~vHPP* za)R&$gs>hIs)DH}1Wgffo&nL!?+J@I>$^el77{)2}Zw(XjX!N^$?- zGz0(t2^06_{8M85<7VCz`Tg;65=@9(!I8wgq8vNRAggc3XN> z(6245qB&ndd zjua^lO*Zt`kvKy*rZ1{5rGmn|gvFts3j7&Ddg|j{f0N)2p~sUIydb)y9N$kJ;Lj{N zNwO_taaG;)L_s)2L`X_yH2vWOomP0Kc5a(!D&xZR7*^o7i37!gWp5@HM1WY3o_)#9 ziwROemRS&NTTpy5vAC+B6ENi7HuU$rVdl~IqEQx*i&#?Ey~d@F6)1!1GR zi-K$@m607POK<28m9=F|&8gijwdkv}tbi3KNMm$;x^V*d$(*A*0>(2bl{aDo_g1<6^OO}sKmp&)p=HT!dh z-`zs64P*C$>QdL|>cRU{{cuQ1FU$4Uf;QIvz*^{nmzsx~SMA`kg{rLctB6`M$)r2dn{m%(Ed| zMLR(7-$OAf=obp2O9(6tJvOHZ1;PA0xdVj9elJO(AUL%P)`spx*$CpkRof~bTE_g` zM&7%>kA#9S|C6;gZ2x)ERDixn^S^ruq0ko%yp?vs&3`W%+9ia0ycaV>Lw|md-q*D6 z8B31{yveDQh6DBoo)ruvf__$TcVT`WT}@2yDDl*`1V4fh`77wZl;%&7mQxjYe+B)j zg2=dpwIRJ-;#IdNC>#0%Ww%2x)p5K_EPS7HpuAKzv_peIRM4Y3PHThkzWe!naMu$je!^pD;=scNCqErQw zN!>s=^~xl@7!?bGSrtrm4-jHi!SYte(I(NTAd(7FG%eY+HC_9nVm)Ac= zI)DiLp+T`86!t}ZMrLVg3ZD3r1c@MWU-L$%9*BwHNnTEkMML*Fq)DeKu(Rc)Hi?}- zxHvt15$6Zx?)R}Y{g)UWFYmraJHs*gx0JydQlj)lrx6IeeUXC6xi);_Hxd;J{Pz-# z74+^83RW;sb6nULo#?SDu#aK|R*;(0>swx(;HOjl@j)RJIMWgsLTq%r%>KZpza&E= zg2KSaG=<6T55AhF|NH*)gQd<2aACCc5{e)B6K*{)t`Lk0vZK^3JQDE zh!w=D;{p1jWv$E#TSG4uq@^nO&v&IK8ut3JvZKU)R$x|U=Vk?-ApB9H*^>lTfbJ-* z4Z>YtOOy(nf6D>3hIRqLd#~yDX66?Jzd^7QrD#Ezbh2T3XNjFp|3!LKVB5sP%c*S> z-8B?DOfWOEWqcTo=^9Gp0e|Drjz9(7ZDM-5<6X~7P-E18O}$rb=#9@823RY4ho+mZolL$5IQW@d$ZOPwV$@{u2_w6=-IKa=3)R2iT5Dvw14MkyD%(B`YQ;x zJUdCl0#g>a9YQP>6lcoI$%egNuM5LtXJd3aS`X5a3V!}eiL!$0r;GK#D+@3(ktMoU z77ViQc;8T&$pfgD~l?Bic66dp=K#3SN6d(o}%Ps9$Yp zRA92M~wV%?ddZ1>&{gsku$O>l+DrJdPaT zn|aAnDlqesfwvF}e`Y6~{ps0AW1OsE!41zy(v4AZgkZj`oU*`pLDylyF&UlqD+|2F zxG*}6^oA%40~N4kOlm>s9C>%@Qb8dbLJR#z2m@{*=6j3Vojf(Z6Zo8I7D+r%+B17X(Gab zOpiSk*lFSbRuF9yO+tvM;B+`mOzt4*w|^l?D(F`k6(7sn6CETi-6onq7%d1J3-gj_ zo0y*S^Uo%4ZYV?3zmxNl!myx!K`>U}^@eH5hC7a@#|lhi6x~oQr~uh8zKb%D6%^)% z(Ls_|6KR7$Ful8p4}31cyD0rGE{koV5W^>Q`^-!FFC_J9jG}94 zb}cn%jFR(dcJuxOec<kgfj$o3*NH8Hiu4qY{uwG5y59t zbzE^R_tht-&B$mp5P_W`Y|^JQm${Y}6M_H0y0Mfi0I)dYH#?wda|6r z6Tv`x!$&bP8(?~Dl7P1~^Lm4@O$<&h{XtS%dc)h&JyR}NfnN{egCwJZrFuiCK+1x# za6{D}AxwH@VXEuF@x3cNFSv(WT=!hR<=FHw{t$fQ^s(|id!~=E%|5p3p3C_8%(*Uf z`EB+f({0pj-}`Mg2Iz&W)81`j?6;!dyrlnA2>w%P&YED-5rMg|NQ)KxoBNVn5ab0v z77dHj#NH!>e$mia!QchK>kY*flCv@TukT2m2nI?8CK@hvTXCY#yd+u=7&FT}soh&PeMZ>~_jkhlG9&GL#8fT~A z+?z#4=O!8sK2koN;(G9@*Ca^w&+f=y!=y6$I5W!K73L zXWqBk6G3|0gUD-zmIJnm@lBM4L0?k#+k?pZe6Kq{h)5LOAT2 z6)X(Cnpl_^oro3$Z*v|rM#(J*H+?iwR#51UO>MYTcWm3le%&!6AKgbXR^U&R&CoPe zR&euwOVGPv^l6;vv+7tEnEAQiA=o}~sfAHte$LuZd>Y4@pWAw%Am?IfNd?dU#q?MK zH&Ob{&x@~Q6~{=hf~6-2e&om8iLz}OgH*sG;J=`%4MJK(@TU(YNd!_G_Un#0S1zuq zFYo<)IUo3*2u`CtOiov@Ykz{eg6k0ty;(t|D`1B3na$ zj8q5(|Az=7`8NAMM1Wz5oh7_K+8F*HPVm&XI*vGjX^yA5SCqel<~UjoPB?YZ-f(i1 z@N#hTFNa%+&1_3Mt5rt$-Lf;AZdbFW{bt#v?JTQRFVR(Iewx{C@~z3{^pj$RXn*20smFzGHDyfa>_OktqUWbX z%eGb4X4&){ur=&gk!y!5?F|QmN9?UuYHYc2_jUTy*uAq>%C>@oQnsTxT-{pAHdfcxN)uZ~X>g(j z#vYvsA!FQMc1TV7ZFBl>g2YWuBzXeXnykL0{^MO6^&`2O98i2D8vm^PM1^6GeN zgbIei#O_1-onBwvT6KTQ*;>8P%E8$!4AJ!Z)%Nn%R+}m=*fI+K*OlrZ1~GH4HInTf zZOsv$ZOyuuefF|1gT7kv?{lbYXI02(w(8l%FZ|{U8=dEV%W(V;_LI|%E}hXE5mXf8 zg1-5X1XYo5`5((Z;S2Exgk;d;IRo9?S+@D#ee1oqbbjicK5iJAv}c^(;mYiCKkrg< zl}tr}EQ18g{HO>&g9A2D0=EzG63jL#g! zSuNedIr!IGmR)uHZ>Qef+5Cy32!Vc7(z~UIwE>MwJ^3&^3Zhj*g99#+^x=wfxoqnO z=3QG+FDhm+Eg$gNOM%s){lSMYE0<%f${A4&wp+I z|J!-i2SN_miqf{Ug~jJ6tNmM&*>Dk^G>0$ElkZ%qXT2Ye#wmLo3> z&emIl<#w(3VDZO@!rqtxZpN~xxzIL&G0y*6<}yZ&5aX5^hFLFp`@+d@Kk(^QyPg;J zb*jfrB!&7O@NLU#SW)RoPmE6#`kMV|M1hJyJ>e;!T`neKMedL?3`J2uU zeX5(MRw68vgvTO0hiP}2Q4yULoNSgNTh@o4>Gi5!F=mQ&jX6%oD?nMpS-#qj=fGMViXVB!m)rQ7HK zul02a;O|}2<_~`C#ub}i9y|)UdfGOItkj0-ZKd%pNsA-8=>8@rKr)-OIU`pvUUu@2 z8?1F~ZTg>DWm{<*$s&xkd1brS{GNw)3iewoyCBv2ktC~)swNB%mAKK1s))eezS8aQ z$fjq)Q=2Estn>C~oO*ucfzKD@7}a9IX4ZmVR$Mg9e@!o}(Ok-XCd*m}Fx4sGYt^=I z-PMw1v$aY*gx!)$a9p>pf)JjCP+Whh(RG{JE#6Hw3l<>O%GpLY4i?}4)A`+(p1Q2` z$a9|-5?oFGt;V=`$OM+74OQI*S2+)5Glsm$oQ0)$$TQIzb+d78O~RW!d39$EG|dS& zMO+wddTDVgTU4X~+uCAYn}DlG5aa66OYy*$x`^?yDjX2I)}bD2}B#j`1-NZw4?%+(hD$oCoLNnU*wGWNeX;gm*Na8ym-ok&+YO0s$)<5C;Wp zL6RF@!GqyCoSXyR_O(ME#J<1(T2;OG$aY@m-tT7LsmRf2K zXWZUf%QDD$Ah@wuN*&Z{0DzI<=Z@bY1HL9#oT zPF%w92c;4&Ai8jd)>NT0g@Q*tno4a14ti0AFd}MW0MwJI;wYIqPurb>_TVH-X)UrO zl}J#dk+dyaJ2ujyF_gjpXj;&jiDLue6KEt=2g7vWQ&H@^EVi1#N2_Kk2yWNA>|4I^ z$=*l4O|32ECQhJi3dR~IAF$*_B0rGS#?7y1S`um$=6P0dpD-~)BS%6eQewGhy4Gc)BL>k7M%gGrCac^nLpj{a$N%EhN4Bp!dU!B6H7J7~Icp1Q zq^X(dhIQ5cYE>d22I5X&9Ori8YPdjY@4M z*uFomL84$0+O=BKaj*%r#W18WL>g|UJ9P_#>PMipL7CG>o_O)iy%!HCC?5^7=b6FR zrx&p^Gr-9it|29h204&=)SSlR13eL^UTvRCaRg=jC(@kMZ`bgcv5FvsqrfcB4yJ8} zW}XsVz0aj<=xP}fQpCsuM9st5oa(|@Btt3KN3?AqC=&;;Aw%oP#JwNxeIPzUE~JUe zC`3>yZtSAz+9<0kQZNRDDTG=!_ZuHjd$flLSGy@Ysg>5)wA5!3Yf_%B&^80M zUlVVgyBYd8L67K!rHg63fpa>KJ~q^i7!YTakMwT8@#t@_d+?9eMXbtDoPwxdCZ5-p z)DzbV!;;d*snC$h(}bn5DyR)l+rX?SsM@PHZ448~ttAk&^;GHBX(O)BI(gzt2QuiK(C$o`Z!sl^S;A7lT2($9xQ(Dmz<~-Y`4fv=Y0{ZOaAR-y(O|u6->~=A z7kqKQ1JAtXDRc$wH&nS02)!WK+a_Qpat1E|n?)wV$AL?7x2gyD#q5FSCMOOc=v)12~>nxkU<-#2`h#iRCQHdd@n_ z>eV@i02)gh8+@Ey8>(uA6ZI2^`iqovUzG{f07XMm_h~a0frmcs+SLd0jwX$YbV0Zf`sW4O)3zq z_1Hn0v@01XN#no+Q-q;Wk^_$P_5?-FjRXMl%_uOFt1?uJL+o#;^2j5KYYeWkQvMG& zeBlk_z4!l>7tg#pC7_jX!>nmYJTp~!YG8&Kz+Q^$N4bZ}TPPed2&c@4x= z=p<)jS(7-FHQVTNnePg_cW5RELfO)OE1q^`_r;|Aw<~xj(*1W+7@o{5*~9W1zEg5utt$ zkLDC2J|sexTt{>M-J-Nox=X29ZSSBVSPBZ_)dGfX7|>QE;F21dO!O|X!g|tFU1MX@ zMN}*qQWbldB?S%oDL6wPkR+?${M2jzxcA;C8<^rwoU zkpfa;&z5)AY(wrQ>{GV706Rbnmci`A8lKi9WSNF=2|ZD152>=ME>#mYBT&H{L?asW z{+Y0B1y-iXG)Nlvwb{@5s50jg9X-3$PghTW|2H200PnDeGHkhS#h%*B}HM$joQ9%PejSH+Ds}PT~+_|3gm>o zwNcdj%9Qg>uN4g-O+Srl|*2Vn*=wpJiwS+z;R>dnjTguiWL&+o`j$}orpb6`S zyD>rXa0yJ?znx7bWz2+`X^QE=nN62kAOT8~WSY@dGUX!N*fc$0Zb?(~HAJr^s@x5> zc-bruidDjst}SWC68Zo*I?_T+$DmNj@3bOugW^53oXDT}=>EUGzW3ulEQ^tP*R*@@ z-r2jsuhYu!obG*a=jolTUGEvb??t`0Z|-gO>+3B4y57ftT-&=gUhlPh|N4@i@-L3p z>y*Fey54nMujyU$QoCN%dmnkOH|YBA8+tcf)H?v@Z?Wr(;NRQHb&sxZ_v_}}(B zp7cKP_w2E2*6q484cE%@Tz@@1#`P|{9!!sr=US}WdoaEIn%;FU?Hw{9e%ja{aQ3Kw zQLoMQTYBv|2{Fy}MZJlejr~+_kLkZt`it{@#`CUGaprpcz;zD(qsO?uWAxb0{`JTn z<&SJ$_xk%#fAw{vAGu-mHKPySyY9TZr2Iy%J5OK#{9X5EN3K0<*KK|sR{kx+N3P?V z9=YZPD1QWw_xW{H`Md1;>!Z?=JlFTz^-jAkhU;zD^d{~(KDBPwpN-yj!|IfQ6Y-nIAirnuf~`Q}Qe zzqfY}*Z1_V6PBNN&+&WKop+xucO8G9_`dIYjDQG7bVc1Sy!BgOeW>@^r`#u#<>}*x zvO7<=TetIKAtSR`o;y9B?I`x$oSiqfe9c12uIGg#+tY*DJ4fzq?Mx46$pyRHyKn9+ zE|0Ia(>pW})@L8?EUwnASGA8H$Syi-`{+zL!e?k84_|!FzKQhq_UdA~ae*K)c2R44 zdh1N*;6iI^AxkI?9n3b2TyoCpL^{Vibl(Tz4<9dDFKM5c*?mo!&a5BV-`Z$0-qm{b z`02UUfd#_p{6hB9ZTs5kt<~yccD>1X@kXSY>%3*bWIVJ!MdaZPBb!@SqtS`QGTpX* z3`QG|&!oGivR@tvLJmzW-@JOx$c_t6&!y*0Ewr{s$W0@!uJ_Gl*NtpGYv(90Oi%2d zhV55F zo04#Oe7U_WGHWH|Eg!eyE7Moaop{Uc17&s~Z(X+BzW?t&dDRP!d|y0#L-FYuNuk$6 zv!bk3$53QZsSrqzT7fqNI9mnKP7Mge$`K@4Cr}v3sj0&>E2bbTj4CHQhdm>w3MHo= zGo@zjJmXJwl0^)a^F)kQR*gK{G#51Nr<9NV;oo2JgD*U~(U;7k=(z&H2)kg~!%d!5 z`S3g*ErL~^%{vcG@RO|wtOTUmZrTd(Oz2OnelC6M*VB+0&n@UcVG^Jz=EzOf%UM>+7HTl!T zq%0s749G5EO&j19pQ5MC?GhoVB%m>n#DBK(`0t(9`;m8wAxYeIOSx#5L^@cBCP-JP zLWBesUN+Gg_vMj6eYS@}$z*Cc9fYGpY3OZ5n;h7)TrgeDyuOs8S78R0moXcQFN-BM z6cM$s$4FUGrYkzVY6-qg}MjMby-Y-@09ffnsVd+uWuv$Xn!wrZ}NOjQPx zY2kpR!KNsO8rtHgDGLW003t=x;Z(o<#SeYF_uqcS;cAXnzNSV2$V+3)q^41QjY!!L z;%>M}I2v_>CXz~HaK)O@(i#@lEy|7-z*zLOWpsgSiR8A$6^-qRJ00-h`BDyL{)dI= zD;dH(0k0`j?4D;gwQj;~wP!_-AZ#tSlig=oA62%K!-@vuVLqfI-<3wdYE>x%KwZfUqKo7h;^@)6@r5Gvh{m(ABP$gVMqW)qDq97ARtGTF z;c?0uB8y4hyHo)X24{m7P2;{CzLl(C2)frFQnbEIYoVcfZG>lA#zP>)Qv48&0F@0z z+?}k{!jG0i7^9{FA98$0am{7kP-$J}b){lMv#|sWeMrXfJ3sNef81MffIw<(F&EE~ zYNnZCo1v5oNj0TnD2>T`l5pf)a7;29!~kIlDaw|?klb=36@G8V!N&?rRYIpg2<$@^ zTVe_kc72V6WmjypB~XE(2!nxN;A?V?tahS^Cd+!Fo!d*#b*1FiGowuE!Um%lFK;7G zkA3{SBj3C3p(z&omLA?$wN7QTtWxr!%SZO4JJX9NI-B;*t=pb%?Cj5n_oNrKl7rdy zbaRUpKt?s+0y~&(TOMcCvU9n8X|a2J_gtB6Ze6y#b9F;Hy?b15BW-4-F_%MiH{Vpc zbtb3z;cQd3eduDS^2MoiPpi9p)xMeZ!u0ZyTdUMwFxBkTL_K9;kx8-O5bFpuwwFTDOq5bBO zJ=v-B;+LJ+zwglSl}PjEvp${ef!QVyX0tu5>sk+NTjtZI)t8OjI<;?Zcu(uC*Ko0m43Q)YUGY> z`(}owJBybdVkL6k>ZXxX*_DW}VdTIv9|fs6t0KnRnVw1?Sj@)`uG>DeiE?+jy}EG( zf!6JqhSzl?JF)J>iA8+{ZFvLMom+16aUaW^8H}^;6t(RWi|euG^7umQ@DtzmzAH`+ zU-7MRCy%L3{#EFYP^YMa7gMxu23A-mPlNwx4$(iLK){rvRQL~ZX%wech>HXn#d2d} zBCP@Q1fP!*AZbfbsPnYT_M5y;?AkazSi=z1gEeI4nSP*ec|}cz8I2HfL!RBO;lHDW+MWW~P7`!b%*q2bd&X`9AejE3Ddr1NO|`8ePIx0$cJ~ntkl; zj~qRc-v9f3)1j%Ez|hQa3ZkTZcpjCM=9x?lrWu5|Z#2yqo-2`p=zs;psWQ{As6HC5 zvqe(__55k1Dl?j#OsjIpyQ;IKhG z-VE=GwlSSK1Yiu4bpa!$?@^gGk{Sn4@xt>@ z#^_PUD%mgEmv$8@nz5qW!Q40eWoh!}bm}>{TS15c%xwi6%?J@zD(5o+wlYLfFzTgm z78ojq;SZC8t!m|TYXW2=XOO&Z5NoMxsLCYBrn(qX$!a0#Ra`~d)4s2N?Ao90y(#_} z42Y5t5&Os@hDBr)lFOxBNCFg|hbe!Cr|1t5rs8V`fI?X07x2d!q-R={Mppf-0cnhE zmV#;^9C9Esub3QdQvngZ4f06I_t{em3;@!YL|L$xTdq=#0B~Dm(p|7iur_2BPt!njH_+BYNt@N&RZJl`nnJq zXNY671iT;MdrZ7U@WA-K|B_A|pOZ~k4-QwWZRvdpFAyEh7@AAzw0cJyeB_tXS^6)V zHN!A{&Ze{aj^1{&OmayPEgfcnqHM8>#)KlTkA4e0Vs>cSTngKkHdg%+ zWyt~@bHEu-CUPf5xSLvRaoVt(Wk(UqF0t>L%I$1&fP*6Z68%J2b*HVcEGCh~lauL5 zy`hvO*e&TI1zYPfup%pxQdN;hQY}hl9FiJ`tQqCe|NhDApMS;o4y%qN&3#%84YVS5 zV=V4vQi~vqLgqK59z0puS>H zA$nX14X^*wo@1=u}R!$ZYLtZCj?eKHW*>MQjw! zu*e*mUY=a91}sZYWo%vL!v`Qfd@wuA!f*S~VI#Mh7WMK5n6dk`o~0PnsbvrD@{#G~ zOV;zwJj~Juw!w{ZIdU-}YKGxFhHg~X;-aRcEOU7X%LQXGV z)mbbh(}`bMIj+6VIi?e zr8p!qxoXSdQyFI%K;LlZP+{Yv-}=ReKY#iUEONUh0N@MC(~(-qXb_OrWWdmn zaU|7hY7>(AJ4KCB#-u+~miiz8ip*RzG$akD! z>E2&`!7bmi&L9cH#&!T~SZd&Dco7X%21BbXg$Ly^%|NcB<29TIP%|CaOAIq+Pv}TZ z46$N?Vs(6EvPGy>0Gwt4X<;FzPK3uQlp?@U#NY z5E+V-Xs5jBMw`+B_J9LW%nNfl2_|GLdXm#h=yVy>OkD!TqY5qGWeE~XbN=9!#5iyl++^Tx#vIe;1_mXbbNn&aNIvqEvU0(jVe!B&RQ!Ab(B3S zLP466w&m#oZg9a^tzscPBq&CyWHTH3#e%-PRZEbfY+c9}uVz+fv6yE(<^f)@`MuDp zxfTVwQ|$Gkfm+V8EeB4S(vr2|+hLDNCF0~_N?vUc!(QGoX>38_i+^f5?A$2EL47v^ zd}GH~S2eF5l&v{=TCFZK-YS6F4kX(g8&O7OdJjJK)Sli;@3*=$FQWgoC$ro@bHw?w z$z}YqXkR13qZ^-k^i%u(AUh=DxGuKDpi5$L2-%}59epAkXYzD`w_BBEjkOFM_L!2y)^U_sAmPLhHmA% zbXz3LNuGlJ%)V;Uv0qA+8t)Vb%Oeynp4-LyEcg% zurD=V)-G`G{-1sH)bnq7ZPUw(dCEpZ20esMlewr@P@td!?iIvS9p}+GU>Ts}$+9X< zq?^n*8XsVjmo`t$f)-G4E?BAHso4t`1WWXGgr0p`VIFbEGJo5`!gQOM*3*=3@GhhS7xq<(zg9C$Ky&I zQ}k0evJz(^49iGgfb!hZ!rh>-B&Q3p8UMFWjA3aKm#N50PU~pZDh2i0fmbNgq*|;cPDnW_A)-GM^K25~ zQp=+;FJ>a2>?8e23gD0lNln^DGeWpe1FhxYw5V+yB@@gvB&-zhH2XO_a^M&dE|{Yc zLxzd0jAU~D=372E{Ll|YW0+xM@AXmbnWe9bbCgds$@_yM|)mWDdSs z`*Sbe`=i-|-y7$RuA3|fV(Sfi3^G93Qll@EoB&7x7h#p0Vm|iMSyKaMWp({aFjfQb z2_NS>^8k zOra_dCMJ}c)B!oRQFJRuk{{4_m+K(9NKKSy+2=?iAZ=_~8E9*CaF<*D^s!g{W$!aD z8mQ_U6xw~;kiWpxGSop`0C;~}jb9|INn55(rtMWGjk5AqPaQJe;u#tSxO&e|@Gyg& z!QQAG&`5~}dKQE_FoRX-h|^d9`L7K>{evc9Q~6b84uQQOYW<83c08ox9UZi&9tboe zlJ0BILN8?k*d9O@*Gexp*e5CHpw3B^r z8%cJ}q{)V}k|XUjIq#gLH&-ORaqg-u&Z3qN9p46c#=(c${d;jva(XVSdd0Zc>wXBl zHq8&s_3yw}UzsIai!^zcs^OsOnek-bA^5jj$ve4Gd!8Cyn5-^lK-1*n#e784UHldk zr}Nh2_*~jvJ*Q>DZaqiRrO8&)0rK3BAg$m>=70-N_wiP8`%Io~MH{QveJ)F0#pd*p zLvW&A_pL?C#48GuR`OUi;vETMzUz=lzxq~MNnAH(?`?oFSG=#jbtJis5q;iUgEhIU zx{w;^ue+J^t(Xs!$clVAiqU|sx|F@~$A0C(-ormW*s)(-{tQ2*@xllW1^9x#4>!IV zX#dZ0Rk1%h|K!wpy`PS2J2UdLI)PlY?*uJ#0=X!*mB+ddguZ`<4*-{s(AV;T*!S`N zC4Askbuu4A(s?+rx#(r?vClr9%mdV?8c)yd0lhN@lzB!G2Au8;sN?O{#8)_=dWT%h z)whHZg^NmDc`U}s=vgLy1kvOegh+kn+6OioYJpdv&jhyQcC4|(1-4^zC3+tR_rO!$QPA4THParIl zs6h%?(+omk1JIhGXDyM9JF5{sO%ZuBgC54JH-7TyJBGKuA8S<;!=o)v0|HjB&N2V?2$w7y$WLV zR4cpK*9EO9fUx>!^(}RU0*Ocqs=m9764Kl>5=PtPATzL+Vo!@Q2v|H+3H`HAeQfK^ zV_V-5=V>(!PHtB9571Dq5VkfrO7vEh*-Ge50)j0AJXWinB_xh8x(ZM&Fk**AU5A;g zzrK@%L76(ItF5dCZ2viYF78z<^X8A9$||1d7OZ#8(x#^IP^;90Zn^*vEsQlc7l90Y z(N2zj^b335)%)OnaSO>7q<%4Pq zzoffs?uEOqd0rqNdynEEOI)IHeH${~Su*PZX+f$21#Y(Yl+2JbbDKdRU?#*PEqKU{ z_!Lf!K!TT3QP~r*8Ar1?SwtB3&dbG=M9iR-8ml1t+8FQh2y;Ln?ErJDB8p(X>c^bs z_G+#a2C%Z<^vJK?(EFzEQg&?$OxFSnFP7pXuP!abnl-G(q;j0bnghn_Of5)w`KTvk zeXf+Jv8K(3tj1A*(AIh_svGR7YH3!gC6cU34NI)33J;RK@7ZzwCtq;%9{H3d^|~yL zfZ-Dv_e^c-RAHlvxDN-znKy5wB|Q;2(l%rpo_xOT4vkCM6D1Di zY!hwRsO^2n+xGs>^B?+otnrMb)*BoC+n?2V7wL|_zQ8i^ND#6U}+D)nhMQ!3$Si^yP>AN%OzcYkZ| zaNr3|>lcXA5Qb(-u}Xus#?^ThezPtXE*5G+kY|EmeG|B-4KsK^mo%&9o)lnXKHj}S zzy)aT5i60-lgSVZcK0e%G>9Ur5OzFHsBdVrde7tU`@P|@vGajc0LZS!Hc z;K7k+6*G1h9RyHtNNXXP7JY2VVfDfqNI_CTXwgwC13{fTF4vfc@DyEwj8Y|oT8LB0 zFljcJ2KYDN(>MI{U1#n6`~Faf3R{1&o`fv&2Ql+>U@S0O;ei5KGL!)pRpf!BA#ag# zP%=jkK4O~EsA(8IBofj+?4BzthRvRtFGYQPt5Qi_oO;$f!1GM)N?z65`~y!P9lK(` zx>L!z6h90`b)b>L4uy)y&$tH^>9`MAT}1bLoJt~8-5HXOuCe431@nQKMIf*wT3?15 zo+b__CRk@kbI?W3Dpch2-%<-~k1PiF&}A^QgoPwyYUA0L{6<4Hy&pXG%VSS}Djrx7 zx*VFM%3BfejH6uxb-4>qFy`;kXrLo$qmVbYD>ZqB8{6#6U3pVYwYH$KOlT_wNk*vl ze1dH}>yiO&_d8iV4u*FKXu(JVoY4q0O))|z$vouwuFG{-AHC}AqwQvx1>K{N1sRaf zP;K7I#4%OrbBnbpU`K;Bl|jAIW&xmN`l%bUW~(X+;E}{VuN*S18evR%HERgL!D_AN zsqXkQmWM4>`pD!a$FcPU_`Ul+{LoLnaO-t3CN%mur@C)9EEi!>T$?SL!rDw_;%FHI zT+({uXCRqih!j(!PXr9q2?Ut|WCAO?aAD;T8Nk_z>P}+Kz+deJU3ojkZdtPL^G{y? z-M#BS7V08}LRtq4+cHpcmW+97mDSs|TSXJMFZ~lxo&?1J7mNy#_TLXxq ztV-Knh;8gO0CO^9VJ<;qSIrp2rBfq0bg8Et-cc-UREdn%<@)}%-C_$&SfuWs1XJ5w=ACN)gX-Wfv`jeVssHnMg)i#jS$c1D_ z4-uL@^z@%#wF z0eO#_*ufvw#-cK>;*~SRf^}{GGtsJPN-fWcNJ1}21~tl(u01@eKB?{Dk=*Q%7TfOl zh<%dJ8)?@zW2z~ZQU}PsZ2YAaiz}Q_G8xYV1DlR~$w2ku!JB*b5wA8F>0R+#8iGHy zzNf?fA+VENc{i@5&{w7vR3#YF)NV9tuu#g2aAICQcJcnFfAa-bd_qK&CR<$|OUu?u zK5`Qu-_jg!;w8+o#TKAmAF0VsTHv3zXewRsG}&tmvp}E-HeG4~7h|rZivPJxIR-$+ zvA4z9>D7Ed{$*U%{gjX!2Lb~RVDCv=Qqw$onoR?pS=>&zpq9wqwr6&|R$Uo4UV|at zmZ|RAlkRpPi>b9uES08drw)+aH~KKdH4Vv-=f2uZW!A2-t4{!4zD_WL(5L7 z@@qV$%Fm~2uACTkS9;&Iy@}1IIX3D}%T6h~m>#>?PO#duZtpu%PLSIAal5`QeUSWX z(g#;`-F5G}W4dPdiMbt}we|q5JxIcNT{^)^SDoM$uR6!e4s&YG^qP2y&i4w}7x$*f zbLH?XzrIxYYhHSM%et+vOLsZ{mF(Cy@jte0NK(WD#NIM+fY{WT>^VP5jPL2)8`)0) zf!TZQ`krvrVPc#j#W7-BuUY-L9itVGk-9<0NZo74Na^gX=X03U?eEa(W!Imz>%GHd zIXrBN^qnnTi9Z zCZ6T|tld+WZd@Lhh<6U0@dev>e%76tA5O)W1Cc6w=co?(+LZYLT6|+~b88FVH{3Kb zAZ71B#rah4b}5(Jt5d`0Ee@RW#YD9B0Id^*ronT*PVDFPMvna&+uWL3o#P0tc9|_k zF>haVIY;>_7_eaZbv?tXQUUA=^&n28vV5;Z&3hI>Lo=vJ8Wg<3(V<%sUx}`GmOLSuFY5 zCr7R5fRyKyZ2^LQj0==@kDq|zfN(07$Qp#(G%_gM2^b6rHz8>jIMSt-G)a_g!47ai zn)OJtxwVO6U$_&TXEGq%rjbFzomgBWTuIx5nIAC|4?%fW*`D~#L%;Oq-qrVo?mIo+ z+MmuGKeTQfzu$?GE*@VDP}eQ)>T ziG`FSZWu`VI`M|HF3{I%^})Z27cZ9S)$R486TN~TD8FL{W3_oP=fGDgE8j5QcOd0E z%aUE+)?F*?iN!O7{bj@$5ca$~bB+we;l?>EU~YAh&!eY$a|aOiEEhJx0_zS1VK

    j{}c<(>_S!l$I-8hA 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%0DiidG9P%w3Q`AhFVeb6V2%tHv6fr+xqyojWF{k{d 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 diff --git a/rtl/pll.bsf b/rtl/pll.bsf new file mode 100644 index 0000000..46c16d2 --- /dev/null +++ b/rtl/pll.bsf @@ -0,0 +1,82 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 2017 Intel Corporation. All rights reserved. +Your use of Intel Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Intel Program License +Subscription Agreement, the Intel Quartus Prime License Agreement, +the Intel MegaCore Function License Agreement, or other +applicable license agreement, including, without limitation, +that your use is for the sole purpose of programming logic +devices manufactured by Intel and sold by Intel or its +authorized distributors. Please refer to the applicable +agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 160 144) + (text "pll" (rect 74 -1 81 11)(font "Arial" (font_size 10))) + (text "inst" (rect 8 128 20 140)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "refclk" (rect 0 0 22 12)(font "Arial" (font_size 8))) + (text "refclk" (rect 4 61 40 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 48 72)(line_width 1)) + ) + (port + (pt 0 112) + (input) + (text "rst" (rect 0 0 10 12)(font "Arial" (font_size 8))) + (text "rst" (rect 4 101 22 112)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 48 112)(line_width 1)) + ) + (port + (pt 160 72) + (output) + (text "outclk_0" (rect 0 0 33 12)(font "Arial" (font_size 8))) + (text "outclk_0" (rect 117 61 165 72)(font "Arial" (font_size 8))) + (line (pt 160 72)(pt 112 72)(line_width 1)) + ) + (port + (pt 160 112) + (output) + (text "locked" (rect 0 0 24 12)(font "Arial" (font_size 8))) + (text "locked" (rect 127 101 163 112)(font "Arial" (font_size 8))) + (line (pt 160 112)(pt 112 112)(line_width 1)) + ) + (drawing + (text "refclk" (rect 16 43 68 99)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 53 67 124 144)(font "Arial" (color 0 0 0))) + (text "reset" (rect 19 83 68 179)(font "Arial" (color 128 0 0)(font_size 9))) + (text "reset" (rect 53 107 136 224)(font "Arial" (color 0 0 0))) + (text "outclk0" (rect 113 43 268 99)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 97 67 212 144)(font "Arial" (color 0 0 0))) + (text "locked" (rect 113 83 262 179)(font "Arial" (color 128 0 0)(font_size 9))) + (text "export" (rect 82 107 200 224)(font "Arial" (color 0 0 0))) + (text " altera_pll " (rect 118 128 308 266)(font "Arial" )) + (line (pt 48 32)(pt 112 32)(line_width 1)) + (line (pt 112 32)(pt 112 128)(line_width 1)) + (line (pt 48 128)(pt 112 128)(line_width 1)) + (line (pt 48 32)(pt 48 128)(line_width 1)) + (line (pt 49 52)(pt 49 76)(line_width 1)) + (line (pt 50 52)(pt 50 76)(line_width 1)) + (line (pt 49 92)(pt 49 116)(line_width 1)) + (line (pt 50 92)(pt 50 116)(line_width 1)) + (line (pt 111 52)(pt 111 76)(line_width 1)) + (line (pt 110 52)(pt 110 76)(line_width 1)) + (line (pt 111 92)(pt 111 116)(line_width 1)) + (line (pt 110 92)(pt 110 116)(line_width 1)) + (line (pt 0 0)(pt 160 0)(line_width 1)) + (line (pt 160 0)(pt 160 144)(line_width 1)) + (line (pt 0 144)(pt 160 144)(line_width 1)) + (line (pt 0 0)(pt 0 144)(line_width 1)) + ) +) diff --git a/rtl/pll.cmp b/rtl/pll.cmp new file mode 100644 index 0000000..ac08beb --- /dev/null +++ b/rtl/pll.cmp @@ -0,0 +1,9 @@ + component pll is + port ( + refclk : in std_logic := 'X'; -- clk + rst : in std_logic := 'X'; -- reset + outclk_0 : out std_logic; -- clk + locked : out std_logic -- export + ); + end component pll; + diff --git a/rtl/pll.ppf b/rtl/pll.ppf new file mode 100644 index 0000000..c07528a --- /dev/null +++ b/rtl/pll.ppf @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/sys/pll.qip b/rtl/pll.qip similarity index 96% rename from sys/pll.qip rename to rtl/pll.qip index 715f490..41917e0 100644 --- a/sys/pll.qip +++ b/rtl/pll.qip @@ -35,17 +35,17 @@ set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAM set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "b3BlcmF0aW9uX21vZGU=::ZGlyZWN0::b3BlcmF0aW9uX21vZGU=" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3VzZV9sb2NrZWQ=::dHJ1ZQ==::RW5hYmxlIGxvY2tlZCBvdXRwdXQgcG9ydA==" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX2Fkdl9wYXJhbXM=::ZmFsc2U=::RW5hYmxlIHBoeXNpY2FsIG91dHB1dCBjbG9jayBwYXJhbWV0ZXJz" -set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX251bWJlcl9vZl9jbG9ja3M=::Mg==::TnVtYmVyIE9mIENsb2Nrcw==" -set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "bnVtYmVyX29mX2Nsb2Nrcw==::Mg==::bnVtYmVyX29mX2Nsb2Nrcw==" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX251bWJlcl9vZl9jbG9ja3M=::MQ==::TnVtYmVyIE9mIENsb2Nrcw==" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "bnVtYmVyX29mX2Nsb2Nrcw==::MQ==::bnVtYmVyX29mX2Nsb2Nrcw==" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX211bHRpcGx5X2ZhY3Rvcg==::MQ==::TXVsdGlwbHkgRmFjdG9yIChNLUNvdW50ZXIp" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWNfbXVsdGlwbHlfZmFjdG9y::MQ==::RnJhY3Rpb25hbCBNdWx0aXBseSBGYWN0b3IgKEsp" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3Jfbg==::MQ==::RGl2aWRlIEZhY3RvciAoTi1Db3VudGVyKQ==" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjA=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" -set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kw::MTEyLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kw::NTAuMA==::RGVzaXJlZCBGcmVxdWVuY3k=" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzA=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" -set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iw::MTEy::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iw::Ng==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjA=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" -set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMA==::NTA=::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMA==::Ng==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MA==::MA==::UGhhc2UgU2hpZnQ=" @@ -256,11 +256,11 @@ set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAM set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE3::MC4w::UGhhc2UgU2hpZnQ=" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE3::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNw==::NTA=::RHV0eSBDeWNsZQ==" -set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=::MTEyLjAwMDAwMCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=::NTAuMDAwMDAwIE1Ieg==::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQw::MCBwcw==::cGhhc2Vfc2hpZnQw" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTA=::NTA=::ZHV0eV9jeWNsZTA=" -set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=::MTEyLjAwMDAwMCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=" -set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQx::LTQzNTIgcHM=::cGhhc2Vfc2hpZnQx" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQx::MCBwcw==::cGhhc2Vfc2hpZnQx" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE=::NTA=::ZHV0eV9jeWNsZTE=" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQy::MCBwcw==::cGhhc2Vfc2hpZnQy" @@ -317,8 +317,8 @@ set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAM set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX3Bob3V0X3BvcnRz::ZmFsc2U=::RW5hYmxlIGFjY2VzcyB0byBQTEwgRFBBIG91dHB1dCBwb3J0" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "cGxsX3R5cGU=::R2VuZXJhbA==::UExMIFRZUEU=" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "cGxsX3N1YnR5cGU=::R2VuZXJhbA==::UExMIFNVQlRZUEU=" -set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl9saXN0::TS1Db3VudGVyIEhpIERpdmlkZSxNLUNvdW50ZXIgTG93IERpdmlkZSxOLUNvdW50ZXIgSGkgRGl2aWRlLE4tQ291bnRlciBMb3cgRGl2aWRlLE0tQ291bnRlciBCeXBhc3MgRW5hYmxlLE4tQ291bnRlciBCeXBhc3MgRW5hYmxlLE0tQ291bnRlciBPZGQgRGl2aWRlIEVuYWJsZSxOLUNvdW50ZXIgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTAgSGkgRGl2aWRlLEMtQ291bnRlci0wIExvdyBEaXZpZGUsQy1Db3VudGVyLTAgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0wIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTAgSW5wdXQgU291cmNlLEMtQ291bnRlci0wIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTAgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTEgSGkgRGl2aWRlLEMtQ291bnRlci0xIExvdyBEaXZpZGUsQy1Db3VudGVyLTEgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0xIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTEgSW5wdXQgU291cmNlLEMtQ291bnRlci0xIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTEgT2RkIERpdmlkZSBFbmFibGUsVkNPIFBvc3QgRGl2aWRlIENvdW50ZXIgRW5hYmxlLENoYXJnZSBQdW1wIGN1cnJlbnQgKHVBKSxMb29wIEZpbHRlciBCYW5kd2lkdGggUmVzaXN0b3IgKE9obXMpICxQTEwgT3V0cHV0IFZDTyBGcmVxdWVuY3ksSy1GcmFjdGlvbmFsIERpdmlzaW9uIFZhbHVlIChEU00pLEZlZWRiYWNrIENsb2NrIFR5cGUsRmVlZGJhY2sgQ2xvY2sgTVVYIDEsRmVlZGJhY2sgQ2xvY2sgTVVYIDIsTSBDb3VudGVyIFNvdXJjZSBNVVgsUExMIEF1dG8gUmVzZXQ=::UGFyYW1ldGVyIE5hbWVz" -set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl92YWx1ZXM=::NTYsNTYsMywyLGZhbHNlLGZhbHNlLGZhbHNlLHRydWUsNSw1LDEsMCxwaF9tdXhfY2xrLGZhbHNlLGZhbHNlLDUsNSw2LDEscGhfbXV4X2NsayxmYWxzZSxmYWxzZSwxLDIwLDEwMDAwLDExMjAuMCBNSHosMSxub25lLGdsYixtX2NudCxwaF9tdXhfY2xrLHRydWU=::UGFyYW1ldGVyIFZhbHVlcw==" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl9saXN0::TS1Db3VudGVyIEhpIERpdmlkZSxNLUNvdW50ZXIgTG93IERpdmlkZSxOLUNvdW50ZXIgSGkgRGl2aWRlLE4tQ291bnRlciBMb3cgRGl2aWRlLE0tQ291bnRlciBCeXBhc3MgRW5hYmxlLE4tQ291bnRlciBCeXBhc3MgRW5hYmxlLE0tQ291bnRlciBPZGQgRGl2aWRlIEVuYWJsZSxOLUNvdW50ZXIgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTAgSGkgRGl2aWRlLEMtQ291bnRlci0wIExvdyBEaXZpZGUsQy1Db3VudGVyLTAgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0wIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTAgSW5wdXQgU291cmNlLEMtQ291bnRlci0wIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTAgT2RkIERpdmlkZSBFbmFibGUsVkNPIFBvc3QgRGl2aWRlIENvdW50ZXIgRW5hYmxlLENoYXJnZSBQdW1wIGN1cnJlbnQgKHVBKSxMb29wIEZpbHRlciBCYW5kd2lkdGggUmVzaXN0b3IgKE9obXMpICxQTEwgT3V0cHV0IFZDTyBGcmVxdWVuY3ksSy1GcmFjdGlvbmFsIERpdmlzaW9uIFZhbHVlIChEU00pLEZlZWRiYWNrIENsb2NrIFR5cGUsRmVlZGJhY2sgQ2xvY2sgTVVYIDEsRmVlZGJhY2sgQ2xvY2sgTVVYIDIsTSBDb3VudGVyIFNvdXJjZSBNVVgsUExMIEF1dG8gUmVzZXQ=::UGFyYW1ldGVyIE5hbWVz" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl92YWx1ZXM=::MywzLDI1NiwyNTYsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSwzLDMsMSwwLHBoX211eF9jbGssZmFsc2UsZmFsc2UsMiwzMCwyMDAwLDMwMC4wIE1IeiwxLG5vbmUsZ2xiLG1fY250LHBoX211eF9jbGssdHJ1ZQ==::UGFyYW1ldGVyIFZhbHVlcw==" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX21pZl9nZW5lcmF0ZQ==::ZmFsc2U=::R2VuZXJhdGUgTUlGIGZpbGU=" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9taWZfZHBz::ZmFsc2U=::RW5hYmxlIER5bmFtaWMgUGhhc2UgU2hpZnQgZm9yIE1JRiBzdHJlYW1pbmc=" set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19jbnRy::QzA=::RFBTIENvdW50ZXIgU2VsZWN0aW9u" diff --git a/rtl/pll.sip b/rtl/pll.sip new file mode 100644 index 0000000..2b9d2f1 --- /dev/null +++ b/rtl/pll.sip @@ -0,0 +1,6 @@ +set_global_assignment -entity "pll" -library "lib_pll" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll" -library "lib_pll" -name IP_TOOL_VERSION "17.0" +set_global_assignment -entity "pll" -library "lib_pll" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "lib_pll" -name SPD_FILE [file join $::quartus(sip_path) "pll.spd"] + +set_global_assignment -library "lib_pll" -name MISC_FILE [file join $::quartus(sip_path) "pll_sim/pll.vo"] diff --git a/rtl/pll.spd b/rtl/pll.spd new file mode 100644 index 0000000..f0bef84 --- /dev/null +++ b/rtl/pll.spd @@ -0,0 +1,6 @@ + + + + + + diff --git a/sys/pll.v b/rtl/pll.v similarity index 98% rename from sys/pll.v rename to rtl/pll.v index c0a905e..35cccac 100644 --- a/sys/pll.v +++ b/rtl/pll.v @@ -2,14 +2,13 @@ // GENERATION: XML // pll.v -// Generated using ACDS version 17.0 598 +// Generated using ACDS version 17.0 595 `timescale 1 ps / 1 ps module pll ( input wire refclk, // refclk.clk input wire rst, // reset.reset output wire outclk_0, // outclk0.clk - output wire outclk_1, // outclk1.clk output wire locked // locked.export ); @@ -17,7 +16,6 @@ module pll ( .refclk (refclk), // refclk.clk .rst (rst), // reset.reset .outclk_0 (outclk_0), // outclk0.clk - .outclk_1 (outclk_1), // outclk1.clk .locked (locked) // locked.export ); @@ -28,7 +26,7 @@ endmodule // ************************************************************ // THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! // ************************************************************ -// Copyright (C) 1991-2017 Altera Corporation +// Copyright (C) 1991-2020 Altera Corporation // Any megafunction design, and related net list (encrypted or decrypted), // support information, device programming or simulation file, and any other // associated documentation or information provided by Altera or a partner @@ -63,12 +61,12 @@ endmodule // Retrieval info: // Retrieval info: // Retrieval info: -// Retrieval info: +// Retrieval info: // Retrieval info: // Retrieval info: // Retrieval info: // Retrieval info: -// Retrieval info: +// Retrieval info: // Retrieval info: // Retrieval info: // Retrieval info: diff --git a/sys/pll/pll_0002.qip b/rtl/pll/pll_0002.qip similarity index 100% rename from sys/pll/pll_0002.qip rename to rtl/pll/pll_0002.qip diff --git a/sys/pll/pll_0002.v b/rtl/pll/pll_0002.v similarity index 89% rename from sys/pll/pll_0002.v rename to rtl/pll/pll_0002.v index 952e7f6..2df83d8 100644 --- a/sys/pll/pll_0002.v +++ b/rtl/pll/pll_0002.v @@ -10,9 +10,6 @@ module pll_0002( // interface 'outclk0' output wire outclk_0, - // interface 'outclk1' - output wire outclk_1, - // interface 'locked' output wire locked ); @@ -21,12 +18,12 @@ module pll_0002( .fractional_vco_multiplier("false"), .reference_clock_frequency("50.0 MHz"), .operation_mode("direct"), - .number_of_clocks(2), - .output_clock_frequency0("112.000000 MHz"), + .number_of_clocks(1), + .output_clock_frequency0("50.000000 MHz"), .phase_shift0("0 ps"), .duty_cycle0(50), - .output_clock_frequency1("112.000000 MHz"), - .phase_shift1("-4352 ps"), + .output_clock_frequency1("0 MHz"), + .phase_shift1("0 ps"), .duty_cycle1(50), .output_clock_frequency2("0 MHz"), .phase_shift2("0 ps"), @@ -80,7 +77,7 @@ module pll_0002( .pll_subtype("General") ) altera_pll_i ( .rst (rst), - .outclk ({outclk_1, outclk_0}), + .outclk ({outclk_0}), .locked (locked), .fboutclk ( ), .fbclk (1'b0), diff --git a/rtl/pll_sim.f b/rtl/pll_sim.f new file mode 100644 index 0000000..8c0e05b --- /dev/null +++ b/rtl/pll_sim.f @@ -0,0 +1 @@ +pll_sim/pll.vo diff --git a/sys/alsa.sv b/sys/alsa.sv new file mode 100644 index 0000000..9034389 --- /dev/null +++ b/sys/alsa.sv @@ -0,0 +1,157 @@ +//============================================================================ +// +// ALSA sound support for MiSTer +// (c)2019,2020 Alexey Melnikov +// +// 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., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +//============================================================================ + +module alsa +#( + parameter CLK_RATE = 24576000 +) +( + input reset, + input clk, + + output reg [31:3] ram_address, + input [63:0] ram_data, + output reg ram_req = 0, + input ram_ready, + + input spi_ss, + input spi_sck, + input spi_mosi, + output spi_miso, + + output reg [15:0] pcm_l, + output reg [15:0] pcm_r +); + +reg [60:0] buf_info; +reg [6:0] spicnt = 0; +always @(posedge spi_sck, posedge spi_ss) begin + reg [95:0] spi_data; + + if(spi_ss) spicnt <= 0; + else begin + spi_data[{spicnt[6:3],~spicnt[2:0]}] <= spi_mosi; + if(&spicnt) buf_info <= {spi_data[82:67],spi_data[50:35],spi_data[31:3]}; + spicnt <= spicnt + 1'd1; + end +end + +assign spi_miso = spi_out[{spicnt[4:3],~spicnt[2:0]}]; + +reg [31:0] spi_out = 0; +always @(posedge clk) if(spi_ss) spi_out <= {buf_rptr, hurryup, 8'h00}; + + +reg [31:3] buf_addr; +reg [18:3] buf_len; +reg [18:3] buf_wptr = 0; + +always @(posedge clk) begin + reg [60:0] data1,data2; + + data1 <= buf_info; + data2 <= data1; + if(data2 == data1) {buf_wptr,buf_len,buf_addr} <= data2; +end + +reg [2:0] hurryup = 0; +reg [18:3] buf_rptr = 0; + +always @(posedge clk) begin + reg [18:3] len = 0; + reg [1:0] ready = 0; + reg [63:0] readdata; + reg got_first = 0; + reg [7:0] ce_cnt = 0; + reg [1:0] state = 0; + + if(reset) begin + ready <= 0; + ce_cnt <= 0; + state <= 0; + got_first <= 0; + len <= 0; + end + else begin + + //ramp up + if(len[18:14] && (hurryup < 1)) hurryup <= 1; + if(len[18:16] && (hurryup < 2)) hurryup <= 2; + if(len[18:17] && (hurryup < 4)) hurryup <= 4; + + //ramp down + if(!len[18:15] && (hurryup > 2)) hurryup <= 2; + if(!len[18:13] && (hurryup > 1)) hurryup <= 1; + if(!len[18:10]) hurryup <= 0; + + if(ce_sample && ~&ce_cnt) ce_cnt <= ce_cnt + 1'd1; + + case(state) + 0: if(!ce_sample) begin + if(ready) begin + if(ce_cnt) begin + {readdata[31:0],pcm_r,pcm_l} <= readdata; + ready <= ready - 1'd1; + ce_cnt <= ce_cnt - 1'd1; + end + end + else if(buf_rptr != buf_wptr) begin + if(~got_first) begin + buf_rptr <= buf_wptr; + got_first <= 1; + end + else begin + ram_address <= buf_addr + buf_rptr; + ram_req <= ~ram_req; + buf_rptr <= buf_rptr + 1'd1; + len <= (buf_wptr < buf_rptr) ? (buf_len + buf_wptr - buf_rptr) : (buf_wptr - buf_rptr); + state <= 1; + end + end + else begin + len <= 0; + ce_cnt <= 0; + hurryup <= 0; + end + end + 1: if(ram_ready) begin + ready <= 2; + readdata <= ram_data; + if(buf_rptr >= buf_len) buf_rptr <= buf_rptr - buf_len; + state <= 0; + end + endcase + end +end + +reg ce_sample; +always @(posedge clk) begin + reg [31:0] acc = 0; + + ce_sample <= 0; + acc <= acc + 48000 + {hurryup,6'd0}; + if(acc >= CLK_RATE) begin + acc <= acc - CLK_RATE; + ce_sample <= 1; + end +end + +endmodule diff --git a/sys/arcade_video.v b/sys/arcade_video.v new file mode 100644 index 0000000..1f853d1 --- /dev/null +++ b/sys/arcade_video.v @@ -0,0 +1,296 @@ +//============================================================================ +// +// Copyright (C) 2017-2020 Sorgelig +// +// 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., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +//============================================================================ + +////////////////////////////////////////////////////////// +// DW: +// 6 : 2R 2G 2B +// 8 : 3R 3G 2B +// 9 : 3R 3G 3B +// 12 : 4R 4G 4B +// 24 : 8R 8G 8B + +module arcade_video #(parameter WIDTH=320, DW=8, GAMMA=1) +( + input clk_video, + input ce_pix, + + input[DW-1:0] RGB_in, + input HBlank, + input VBlank, + input HSync, + input VSync, + + output CLK_VIDEO, + output CE_PIXEL, + output [7:0] VGA_R, + output [7:0] VGA_G, + output [7:0] VGA_B, + output VGA_HS, + output VGA_VS, + output VGA_DE, + output [1:0] VGA_SL, + + input [2:0] fx, + input forced_scandoubler, + inout [21:0] gamma_bus +); + +assign CLK_VIDEO = clk_video; + +wire hs_fix,vs_fix; +sync_fix sync_v(CLK_VIDEO, HSync, hs_fix); +sync_fix sync_h(CLK_VIDEO, VSync, vs_fix); + +reg [DW-1:0] RGB_fix; + +reg CE,HS,VS,HBL,VBL; +always @(posedge CLK_VIDEO) begin + reg old_ce; + old_ce <= ce_pix; + CE <= 0; + if(~old_ce & ce_pix) begin + CE <= 1; + HS <= hs_fix; + if(~HS & hs_fix) VS <= vs_fix; + + RGB_fix <= RGB_in; + HBL <= HBlank; + if(HBL & ~HBlank) VBL <= VBlank; + end +end + +wire [7:0] R,G,B; + +generate + if(DW == 6) begin + assign R = {RGB_fix[5:4],RGB_fix[5:4],RGB_fix[5:4],RGB_fix[5:4]}; + assign G = {RGB_fix[3:2],RGB_fix[3:2],RGB_fix[3:2],RGB_fix[3:2]}; + assign B = {RGB_fix[1:0],RGB_fix[1:0],RGB_fix[1:0],RGB_fix[1:0]}; + end + else if(DW == 8) begin + assign R = {RGB_fix[7:5],RGB_fix[7:5],RGB_fix[7:6]}; + assign G = {RGB_fix[4:2],RGB_fix[4:2],RGB_fix[4:3]}; + assign B = {RGB_fix[1:0],RGB_fix[1:0],RGB_fix[1:0],RGB_fix[1:0]}; + end + else if(DW == 9) begin + assign R = {RGB_fix[8:6],RGB_fix[8:6],RGB_fix[8:7]}; + assign G = {RGB_fix[5:3],RGB_fix[5:3],RGB_fix[5:4]}; + assign B = {RGB_fix[2:0],RGB_fix[2:0],RGB_fix[2:1]}; + end + else if(DW == 12) begin + assign R = {RGB_fix[11:8],RGB_fix[11:8]}; + assign G = {RGB_fix[7:4],RGB_fix[7:4]}; + assign B = {RGB_fix[3:0],RGB_fix[3:0]}; + end + else begin // 24 + assign R = RGB_fix[23:16]; + assign G = RGB_fix[15:8]; + assign B = RGB_fix[7:0]; + end +endgenerate + +assign VGA_SL = sl[1:0]; +wire [2:0] sl = fx ? fx - 1'd1 : 3'd0; +wire scandoubler = fx || forced_scandoubler; + +video_mixer #(.LINE_LENGTH(WIDTH+4), .HALF_DEPTH(DW!=24), .GAMMA(GAMMA)) video_mixer +( + .clk_vid(CLK_VIDEO), + .ce_pix(CE), + .ce_pix_out(CE_PIXEL), + + .scandoubler(scandoubler), + .hq2x(fx==1), + .gamma_bus(gamma_bus), + + .R((DW!=24) ? R[7:4] : R), + .G((DW!=24) ? G[7:4] : G), + .B((DW!=24) ? B[7:4] : B), + + .HSync (HS), + .VSync (VS), + .HBlank(HBL), + .VBlank(VBL), + + .VGA_R(VGA_R), + .VGA_G(VGA_G), + .VGA_B(VGA_B), + .VGA_VS(VGA_VS), + .VGA_HS(VGA_HS), + .VGA_DE(VGA_DE) +); + +endmodule + +//============================================================================ +// +// Screen +90/-90 deg. rotation +// Copyright (C) 2020 Sorgelig +// +// 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., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +//============================================================================ + +module screen_rotate +( + input CLK_VIDEO, + input CE_PIXEL, + + input [7:0] VGA_R, + input [7:0] VGA_G, + input [7:0] VGA_B, + input VGA_HS, + input VGA_VS, + input VGA_DE, + + input rotate_ccw, + input no_rotate, + + output FB_EN, + output [4:0] FB_FORMAT, + output [11:0] FB_WIDTH, + output [11:0] FB_HEIGHT, + output [31:0] FB_BASE, + output [13:0] FB_STRIDE, + input FB_VBL, + input FB_LL, + + output DDRAM_CLK, + input DDRAM_BUSY, + output [7:0] DDRAM_BURSTCNT, + output [28:0] DDRAM_ADDR, + output [63:0] DDRAM_DIN, + output [7:0] DDRAM_BE, + output DDRAM_WE, + output DDRAM_RD +); + +parameter MEM_BASE = 7'b0010010; // buffer at 0x24000000, 3x8MB + +assign DDRAM_CLK = CLK_VIDEO; +assign DDRAM_BURSTCNT = 1; +assign DDRAM_ADDR = {MEM_BASE, i_fb, ram_addr[22:3]}; +assign DDRAM_BE = ram_addr[2] ? 8'hF0 : 8'h0F; +assign DDRAM_DIN = {ram_data,ram_data}; +assign DDRAM_WE = ram_wr; +assign DDRAM_RD = 0; + +assign FB_EN = ~no_rotate; +assign FB_FORMAT = 5'b00110; +assign FB_BASE = {MEM_BASE,o_fb,23'd0}; +assign FB_WIDTH = vsz; +assign FB_HEIGHT = hsz; +assign FB_STRIDE = stride; + +function [1:0] buf_next; + input [1:0] a,b; + begin + buf_next = 1; + if ((a==0 && b==1) || (a==1 && b==0)) buf_next = 2; + if ((a==1 && b==2) || (a==2 && b==1)) buf_next = 0; + end +endfunction + +reg [1:0] i_fb,o_fb; +always @(posedge CLK_VIDEO) begin + reg old_vbl,old_vs; + old_vbl <= FB_VBL; + old_vs <= VGA_VS; + + if(FB_LL) begin + if(~old_vbl & FB_VBL) o_fb<={1'b0,~i_fb[0]}; + if(~old_vs & VGA_VS) i_fb<={1'b0,~i_fb[0]}; + end + else begin + if(~old_vbl & FB_VBL) o_fb<=buf_next(o_fb,i_fb); + if(~old_vs & VGA_VS) i_fb<=buf_next(i_fb,o_fb); + end +end + +reg [11:0] hsz = 320, vsz = 240; +reg [11:0] bwidth; +reg [22:0] bufsize; +always @(posedge CLK_VIDEO) begin + reg [11:0] hcnt = 0, vcnt = 0; + reg old_vs, old_de; + + if(CE_PIXEL) begin + old_vs <= VGA_VS; + old_de <= VGA_DE; + + hcnt <= hcnt + 1'd1; + if(~old_de & VGA_DE) begin + hcnt <= 1; + vcnt <= vcnt + 1'd1; + end + if(old_de & ~VGA_DE) hsz <= hcnt; + if(~old_vs & VGA_VS) begin + vsz <= vcnt; + bwidth <= vcnt + 2'd3; + vcnt <= 0; + end + if(old_vs & ~VGA_VS) bufsize <= hsz * stride; + end +end + +wire [13:0] stride = {bwidth[11:2], 4'd0}; + +reg [22:0] ram_addr, next_addr; +reg [31:0] ram_data; +reg ram_wr; +always @(posedge CLK_VIDEO) begin + reg [13:0] hcnt = 0; + reg old_vs, old_de; + + ram_wr <= 0; + if(CE_PIXEL) begin + old_vs <= VGA_VS; + old_de <= VGA_DE; + + if(~old_vs & VGA_VS) begin + next_addr <= rotate_ccw ? (bufsize - stride) : {vsz-1'd1, 2'b00}; + hcnt <= rotate_ccw ? 3'd4 : {vsz-2'd2, 2'b00}; + end + if(VGA_DE) begin + ram_wr <= 1; + ram_data <= {VGA_B,VGA_G,VGA_R}; + ram_addr <= next_addr; + next_addr <= rotate_ccw ? (next_addr - stride) : (next_addr + stride); + end + if(old_de & ~VGA_DE) begin + next_addr <= rotate_ccw ? (bufsize - stride + hcnt) : hcnt; + hcnt <= rotate_ccw ? (hcnt + 3'd4) : (hcnt - 3'd4); + end + end +end + +endmodule diff --git a/sys/ascal.vhd b/sys/ascal.vhd new file mode 100644 index 0000000..30d6287 --- /dev/null +++ b/sys/ascal.vhd @@ -0,0 +1,2560 @@ +-------------------------------------------------------------------------------- +-- AVALON SCALER +-------------------------------------------------------------------------------- +-- TEMLIB 2018 - 2020 +-------------------------------------------------------------------------------- +-- This code can be freely distributed and used for any purpose, but, if you +-- find any bug, or want to suggest an enhancement, you ought to send a mail +-- to info@temlib.org. +-------------------------------------------------------------------------------- + +-- Features +-- - Arbitrary output video format +-- - Autodetect input image size or fixed window +-- - Progressive and interlaced input +-- - Interpolation +-- Upscaling : Nearest, Bilinear, Sharp Bilinear, Bicubic, Polyphase +-- Downscaling : Nearest, Bilinear +-- - Avalon bus interface with 128 or 64 bits DATA +-- - Optional triple buffering +-- - Support for external low lag syntonization + +-------------------------------------------- +-- Downscaling +-- - Horizontal and vertical up-/down-scaling are independant. +-- - Downscaling, H and/or V, supports only nearest-neighbour and bilinear +-- filtering. +-- - For interlaced video, when the vertical size is lower than a deinterlaced +-- frame size (2x half-frame), the scaler processes only half-frames +-- and upscales (when the output size is between 1x an 2x) or downscales (size +-- below 1x) them. + +-------------------------------------------- +-- 5 clock domains +-- i_xxx : Input video +-- o_xxx : Output video +-- avl_xxx : Avalon memory bus +-- poly_xxx : Polyphase filters memory +-- pal_xxx : Framebuffer mode 8bpp palette. + +-------------------------------------------- +-- O_FB_FORMAT : Framebuffer format +-- [2:0] : 011=8bpp(palette) 100=16bpp 101=24bpp 110=32bpp +-- [3] : 0=16bits 565 1=16bits 1555 +-- [4] : 0=RGB 1=BGR (for 16/24/32 modes) +-- [5] : TBD + +-------------------------------------------- +-- Image header. When HEADER = TRUE +-- Header Address = RAMBASE +-- Image Address = RAMBASE + HEADER_SIZE + +-- Header (Bytes. Big Endian.) +-- 0 : Type = 1 +-- 1 : Pixel format +-- 0 : 16 bits/pixel, RGB : RRRRRGGGGGGBBBBB +-- 1 : 24 bits/pixel, RGB +-- 2 : 32 bits/pixel, RGB0 + +-- 3:2 : Header size : Offset to start of picture (= N_BURST). 12 bits +-- 5:4 : Attributes +-- b0 ; Interlaced +-- b1 : Field number +-- b2 : Horizontal downscaled +-- b3 : Vertical downscaled +-- b4 : Triple buffered +-- b7-5 : Frame counter +-- 7:6 : Image width. Pixels. 12 bits +-- 9:8 : Image height. Pixels. 12 bits +-- 11:10 : Line length. Bytes. +-- 13:12 : Output width. Pixels. 12 bits +-- 15:14 : Output height. Pixels. 12 bits +-------------------------------------------- + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; + +-- MODE[2:0] +-- 000 : Nearest +-- 001 : Bilinear +-- 010 : Sharp Bilinear +-- 011 : Bicubic +-- 100 : Polyphase +-- 101 : TBD +-- 110 : TBD +-- 111 : TBD + +-- MODE[3] +-- 0 : Direct. Single framebuffer. +-- 1 : Triple buffering + +-- MODE[4] : TBD + +-- MASK : Enable / Disable selected interpoler +-- 0:Nearest 1:Bilinear 2:SharpBilinear 3:Bicubic 4:Polyphase +-- RAMBASE : RAM base address for framebuffer +-- RAMSIZE : RAM allocated for one framebuffer (needs x3 if triple-buffering) +-- Must be a power of two +-- INTER : True=Autodetect interlaced video False=Force progressive scan +-- HEADER : True=Add image properties header +-- PALETTE : Enable palette for framebuffer 8bpp mode +-- PALETTE2 : Enable palette for framebuffer 8bpp mode supplied by core +-- DOWNSCALE : True=Support downscaling False=Downscaling disabled +-- BYTESWAP : Little/Big endian byte swap +-- FRAC : Fractional bits, subpixel resolution +-- OHRES : Max. output horizontal resolution. Must be a power of two. +-- (Used for sizing line buffers) +-- IHRES : Max. input horizontal resolution. Must be a power of two. +-- (Used for sizing line buffers) +-- N_DW : Avalon data bus width. 64 or 128 bits +-- N_AW : Avalon address bus width +-- N_BURST : Burst size in bytes. Power of two. + +ENTITY ascal IS + GENERIC ( + MASK : unsigned(7 DOWNTO 0) :=x"FF"; + RAMBASE : unsigned(31 DOWNTO 0); + RAMSIZE : unsigned(31 DOWNTO 0) := x"0080_0000"; -- =8MB + INTER : boolean := true; + HEADER : boolean := true; + DOWNSCALE : boolean := true; + BYTESWAP : boolean := true; + PALETTE : boolean := true; + PALETTE2 : boolean := true; + FRAC : natural RANGE 4 TO 6 :=4; + OHRES : natural RANGE 1 TO 4096 :=2048; + IHRES : natural RANGE 1 TO 2048 :=2048; + N_DW : natural RANGE 64 TO 128 := 128; + N_AW : natural RANGE 8 TO 32 := 32; + N_BURST : natural := 256 -- 256 bytes per burst + ); + PORT ( + ------------------------------------ + -- Input video + i_r : IN unsigned(7 DOWNTO 0); + i_g : IN unsigned(7 DOWNTO 0); + i_b : IN unsigned(7 DOWNTO 0); + i_hs : IN std_logic; -- H sync + i_vs : IN std_logic; -- V sync + i_fl : IN std_logic; -- Interlaced field + i_de : IN std_logic; -- Display Enable + i_ce : IN std_logic; -- Clock Enable + i_clk : IN std_logic; -- Input clock + + ------------------------------------ + -- Output video + o_r : OUT unsigned(7 DOWNTO 0); + o_g : OUT unsigned(7 DOWNTO 0); + o_b : OUT unsigned(7 DOWNTO 0); + o_hs : OUT std_logic; -- H sync + o_vs : OUT std_logic; -- V sync + o_de : OUT std_logic; -- Display Enable + o_vbl : OUT std_logic; -- V blank + o_ce : IN std_logic; -- Clock Enable + o_clk : IN std_logic; -- Output clock + + -- Border colour R G B + o_border : IN unsigned(23 DOWNTO 0) := x"000000"; + + ------------------------------------ + -- Framebuffer mode + o_fb_ena : IN std_logic :='0'; -- Enable Framebuffer Mode + o_fb_hsize : IN natural RANGE 0 TO 4095 :=0; + o_fb_vsize : IN natural RANGE 0 TO 4095 :=0; + o_fb_format : IN unsigned(5 DOWNTO 0) :="000100"; + o_fb_base : IN unsigned(31 DOWNTO 0) :=x"0000_0000"; + o_fb_stride : IN unsigned(13 DOWNTO 0) :=(OTHERS =>'0'); + + -- Framebuffer palette in 8bpp mode + pal1_clk : IN std_logic :='0'; + pal1_dw : IN unsigned(47 DOWNTO 0) :=x"000000000000"; -- R1 G1 B1 R0 G0 B0 + pal1_dr : OUT unsigned(47 DOWNTO 0) :=x"000000000000"; + pal1_a : IN unsigned(6 DOWNTO 0) :="0000000"; -- Colour index/2 + pal1_wr : IN std_logic :='0'; + + pal_n : IN std_logic :='0'; + + pal2_clk : IN std_logic :='0'; + pal2_dw : IN unsigned(23 DOWNTO 0) :=x"000000"; -- R G B + pal2_dr : OUT unsigned(23 DOWNTO 0) :=x"000000"; + pal2_a : IN unsigned(7 DOWNTO 0) :="00000000"; -- Colour index + pal2_wr : IN std_logic :='0'; + + ------------------------------------ + -- Low lag PLL tuning + o_lltune : OUT unsigned(15 DOWNTO 0); + + ------------------------------------ + -- Input video parameters + iauto : IN std_logic :='1'; -- 1=Autodetect image size 0=Choose window + himin : IN natural RANGE 0 TO 4095 :=0; -- MIN < MAX, MIN >=0, MAX < DISP + himax : IN natural RANGE 0 TO 4095 :=0; + vimin : IN natural RANGE 0 TO 4095 :=0; + vimax : IN natural RANGE 0 TO 4095 :=0; + + -- Detected input image size + i_hdmax : OUT natural RANGE 0 TO 4095; + i_vdmax : OUT natural RANGE 0 TO 4095; + + -- Output video parameters + run : IN std_logic :='1'; -- 1=Enable output image. 0=No image + freeze : IN std_logic :='0'; -- 1=Disable framebuffer writes + mode : IN unsigned(4 DOWNTO 0); + -- SYNC |_________________________/"""""""""\_______| + -- DE |""""""""""""""""""\________________________| + -- RGB | <#IMAGE#> ^HDISP | + -- ^HMIN ^HMAX ^HSSTART ^HSEND ^HTOTAL + htotal : IN natural RANGE 0 TO 4095; + hsstart : IN natural RANGE 0 TO 4095; + hsend : IN natural RANGE 0 TO 4095; + hdisp : IN natural RANGE 0 TO 4095; + hmin : IN natural RANGE 0 TO 4095; + hmax : IN natural RANGE 0 TO 4095; -- 0 <= hmin < hmax < hdisp + vtotal : IN natural RANGE 0 TO 4095; + vsstart : IN natural RANGE 0 TO 4095; + vsend : IN natural RANGE 0 TO 4095; + vdisp : IN natural RANGE 0 TO 4095; + vmin : IN natural RANGE 0 TO 4095; + vmax : IN natural RANGE 0 TO 4095; -- 0 <= vmin < vmax < vdisp + + -- Scaler format. 00=16bpp 565, 01=24bpp 10=32bpp + format : IN unsigned(1 DOWNTO 0) :="01"; + + ------------------------------------ + -- Polyphase filter coefficients + -- Order : + -- [Horizontal] [Vertical] + -- [0]...[2**FRAC-1] + -- [-1][0][1][2] + poly_clk : IN std_logic; + poly_dw : IN unsigned(8 DOWNTO 0); + poly_a : IN unsigned(FRAC+2 DOWNTO 0); + poly_wr : IN std_logic; + + ------------------------------------ + -- Avalon + avl_clk : IN std_logic; -- Avalon clock + avl_waitrequest : IN std_logic; + avl_readdata : IN std_logic_vector(N_DW-1 DOWNTO 0); + avl_readdatavalid : IN std_logic; + avl_burstcount : OUT std_logic_vector(7 DOWNTO 0); + avl_writedata : OUT std_logic_vector(N_DW-1 DOWNTO 0); + avl_address : OUT std_logic_vector(N_AW-1 DOWNTO 0); + avl_write : OUT std_logic; + avl_read : OUT std_logic; + avl_byteenable : OUT std_logic_vector(N_DW/8-1 DOWNTO 0); + + ------------------------------------ + reset_na : IN std_logic + ); + +BEGIN + ASSERT N_DW=64 OR N_DW=128 REPORT "DW" SEVERITY failure; + +END ENTITY ascal; + +--############################################################################## + +ARCHITECTURE rtl OF ascal IS + + CONSTANT MASK_NEAREST : natural :=0; + CONSTANT MASK_BILINEAR : natural :=1; + CONSTANT MASK_SHARP_BILINEAR : natural :=2; + CONSTANT MASK_BICUBIC : natural :=3; + CONSTANT MASK_POLY : natural :=4; + + ---------------------------------------------------------- + FUNCTION ilog2 (CONSTANT v : natural) RETURN natural IS + VARIABLE r : natural := 1; + VARIABLE n : natural := 0; + BEGIN + WHILE v>r LOOP + n:=n+1; + r:=r*2; + END LOOP; + RETURN n; + END FUNCTION ilog2; + FUNCTION to_std_logic (a : boolean) RETURN std_logic IS + BEGIN + IF a THEN RETURN '1'; + ELSE RETURN '0'; + END IF; + END FUNCTION to_std_logic; + + ---------------------------------------------------------- + CONSTANT NB_BURST : natural :=ilog2(N_BURST); + CONSTANT NB_LA : natural :=ilog2(N_DW/8); -- Low address bits + CONSTANT BLEN : natural :=N_BURST / N_DW * 8; -- Burst length + + ---------------------------------------------------------- + TYPE arr_dw IS ARRAY (natural RANGE <>) OF unsigned(N_DW-1 DOWNTO 0); + + TYPE type_pix IS RECORD + r,g,b : unsigned(7 DOWNTO 0); -- 0.8 + END RECORD; + TYPE arr_pix IS ARRAY (natural RANGE <>) OF type_pix; + ATTRIBUTE ramstyle : string; + + SUBTYPE uint12 IS natural RANGE 0 TO 4095; + SUBTYPE uint13 IS natural RANGE 0 TO 8191; + + TYPE arr_uv48 IS ARRAY (natural RANGE <>) OF unsigned(47 DOWNTO 0); + TYPE arr_uv24 IS ARRAY (natural RANGE <>) OF unsigned(23 DOWNTO 0); + TYPE arr_uv36 IS ARRAY (natural RANGE <>) OF unsigned(35 DOWNTO 0); + TYPE arr_int9 IS ARRAY (natural RANGE <>) OF integer RANGE -256 TO 255; + TYPE arr_uint12 IS ARRAY (natural RANGE <>) OF uint12; + + ---------------------------------------------------------- + -- Input image + SIGNAL i_pvs,i_pfl,i_pde,i_pce : std_logic; + SIGNAL i_ppix : type_pix; + SIGNAL i_freeze : std_logic; + SIGNAL i_count : unsigned(2 DOWNTO 0); + SIGNAL i_hsize,i_hmin,i_hmax,i_hcpt : uint12; + SIGNAL i_hrsize,i_vrsize : uint12; + SIGNAL i_himax,i_vimax : uint12; + SIGNAL i_vsize,i_vmaxmin,i_vmin,i_vmax,i_vcpt : uint12; + SIGNAL i_iauto : std_logic; + SIGNAL i_mode : unsigned(4 DOWNTO 0); + SIGNAL i_format : unsigned(1 DOWNTO 0); + SIGNAL i_ven,i_sof : std_logic; + SIGNAL i_wr : std_logic; + SIGNAL i_divstart,i_divrun : std_logic; + SIGNAL i_de_pre,i_vs_pre,i_fl_pre : std_logic; + SIGNAL i_de_delay : natural RANGE 0 TO 31; + SIGNAL i_intercnt : natural RANGE 0 TO 3; + SIGNAL i_inter,i_half,i_flm : std_logic; + SIGNAL i_write,i_wreq,i_alt,i_line,i_wline,i_wline_mem : std_logic; + SIGNAL i_walt,i_walt_mem,i_wreq_mem : std_logic; + SIGNAL i_wdelay : natural RANGE 0 TO 7; + SIGNAL i_push,i_pushend,i_pushend2 : std_logic; + SIGNAL i_eol : std_logic; + SIGNAL i_pushhead,i_pushhead2,i_pushhead3 : std_logic; + SIGNAL i_hburst,i_hbcpt : natural RANGE 0 TO 31; + SIGNAL i_shift : unsigned(0 TO 119) := (OTHERS =>'0'); + SIGNAL i_head : unsigned(127 DOWNTO 0); + SIGNAL i_acpt : natural RANGE 0 TO 15; + SIGNAL i_dpram : arr_dw(0 TO BLEN*2-1); + ATTRIBUTE ramstyle OF i_dpram : SIGNAL IS "no_rw_check"; + SIGNAL i_endframe0,i_endframe1,i_vss : std_logic; + SIGNAL i_wad : natural RANGE 0 TO BLEN*2-1; + SIGNAL i_dw : unsigned(N_DW-1 DOWNTO 0); + SIGNAL i_adrs,i_adrsi,i_wadrs,i_wadrs_mem : unsigned(31 DOWNTO 0); + SIGNAL i_reset_na : std_logic; + SIGNAL i_hnp,i_vnp : std_logic; + SIGNAL i_mem : arr_pix(0 TO IHRES-1); -- Downscale line buffer + ATTRIBUTE ramstyle OF i_mem : SIGNAL IS "no_rw_check"; + SIGNAL i_ohsize,i_ovsize : uint12; + SIGNAL i_vdivi : unsigned(12 DOWNTO 0); + SIGNAL i_vdivr : unsigned(24 DOWNTO 0); + SIGNAL i_div : unsigned(16 DOWNTO 0); + SIGNAL i_dir : unsigned(11 DOWNTO 0); + SIGNAL i_h_frac,i_v_frac : unsigned(11 DOWNTO 0); + SIGNAL i_hacc,i_vacc : uint13; + SIGNAL i_hdown,i_vdown : std_logic; + SIGNAL i_divcpt : natural RANGE 0 TO 36; + SIGNAL i_lwad,i_lrad : natural RANGE 0 TO OHRES-1; + SIGNAL i_lwr,i_bil : std_logic; + SIGNAL i_ldw,i_ldrm : type_pix; + SIGNAL i_hpixp,i_hpix0,i_hpix1,i_hpix2,i_hpix3,i_hpix4 : type_pix; + SIGNAL i_hpix,i_pix : type_pix; + SIGNAL i_hnp1,i_hnp2,i_hnp3,i_hnp4 : std_logic; + SIGNAL i_ven1,i_ven2,i_ven3,i_ven4,i_ven5,i_ven6 : std_logic; + + ---------------------------------------------------------- + -- Avalon + TYPE type_avl_state IS (sIDLE,sWRITE,sREAD); + SIGNAL avl_state : type_avl_state; + SIGNAL avl_write_i,avl_write_sync,avl_write_sync2 : std_logic; + SIGNAL avl_read_i,avl_read_sync,avl_read_sync2 : std_logic; + SIGNAL avl_read_pulse,avl_write_pulse : std_logic; + SIGNAL avl_read_sr,avl_write_sr,avl_read_clr,avl_write_clr : std_logic; + SIGNAL avl_rad,avl_rad_c,avl_wad : natural RANGE 0 TO 2*BLEN-1; + SIGNAL avl_walt,avl_wline,avl_rline : std_logic; + SIGNAL avl_dw,avl_dr : unsigned(N_DW-1 DOWNTO 0); + SIGNAL avl_wr : std_logic; + SIGNAL avl_readdataack,avl_readack : std_logic; + SIGNAL avl_radrs,avl_wadrs : unsigned(31 DOWNTO 0); + SIGNAL avl_i_offset0,avl_o_offset0 : unsigned(31 DOWNTO 0); + SIGNAL avl_i_offset1,avl_o_offset1 : unsigned(31 DOWNTO 0); + SIGNAL avl_reset_na : std_logic; + SIGNAL avl_o_vs_sync,avl_o_vs : std_logic; + SIGNAL avl_fb_ena : std_logic; + + FUNCTION buf_next(a,b : natural RANGE 0 TO 2) RETURN natural IS + BEGIN + IF (a=0 AND b=1) OR (a=1 AND b=0) THEN RETURN 2; END IF; + IF (a=1 AND b=2) OR (a=2 AND b=1) THEN RETURN 0; END IF; + RETURN 1; + END FUNCTION; + FUNCTION buf_offset(b : natural RANGE 0 TO 2; + base : unsigned(31 DOWNTO 0); + size : unsigned(31 DOWNTO 0)) RETURN unsigned IS + BEGIN + IF b=1 THEN RETURN base+size; END IF; + IF b=2 THEN RETURN base+(size(30 DOWNTO 0) & '0'); END IF; + RETURN base; + END FUNCTION; + + ---------------------------------------------------------- + -- Output + SIGNAL o_run : std_logic; + SIGNAL o_mode,o_hmode,o_vmode : unsigned(4 DOWNTO 0); + SIGNAL o_format : unsigned(5 DOWNTO 0); + SIGNAL o_fb_pal_dr : unsigned(23 DOWNTO 0); + SIGNAL o_fb_pal_dr2 : unsigned(23 DOWNTO 0); + SIGNAL o_fb_pal_dr_x2 : unsigned(47 DOWNTO 0); + SIGNAL pal_idx: unsigned(7 DOWNTO 0); + SIGNAL pal_idx_lsb: std_logic; + SIGNAL pal1_mem : arr_uv48(0 TO 127); + SIGNAL pal2_mem : arr_uv24(0 TO 255); + ATTRIBUTE ramstyle of pal1_mem : signal is "no_rw_check"; + ATTRIBUTE ramstyle of pal2_mem : signal is "no_rw_check"; + SIGNAL o_htotal,o_hsstart,o_hsend : uint12; + SIGNAL o_hmin,o_hmax,o_hdisp : uint12; + SIGNAL o_hsize,o_vsize : uint12; + SIGNAL o_vtotal,o_vsstart,o_vsend : uint12; + SIGNAL o_vmin,o_vmax,o_vdisp : uint12; + SIGNAL o_divcpt : natural RANGE 0 TO 36; + SIGNAL o_iendframe0,o_iendframe02,o_iendframe1,o_iendframe12 : std_logic; + SIGNAL o_bufup0,o_bufup1,o_inter : std_logic; + SIGNAL o_ibuf0,o_ibuf1,o_obuf0,o_obuf1 : natural RANGE 0 TO 2; + TYPE enum_o_state IS (sDISP,sHSYNC,sREAD,sWAITREAD); + SIGNAL o_state : enum_o_state; + TYPE enum_o_copy IS (sWAIT,sSHIFT,sCOPY); + SIGNAL o_copy : enum_o_copy; + SIGNAL o_pshift : natural RANGE 0 TO 15; + SIGNAL o_readack,o_readack_sync,o_readack_sync2 : std_logic; + SIGNAL o_readdataack,o_readdataack_sync,o_readdataack_sync2 : std_logic; + SIGNAL o_copyv : unsigned(0 TO 8); + SIGNAL o_adrs : unsigned(31 DOWNTO 0); -- Avalon address + SIGNAL o_adrs_pre : natural RANGE 0 TO 2**23-1; + SIGNAL o_stride : unsigned(13 DOWNTO 0); + SIGNAL o_adrsa,o_adrsb,o_rline : std_logic; + SIGNAL o_ad,o_ad1,o_ad2,o_ad3 : natural RANGE 0 TO 2*BLEN-1; + SIGNAL o_adturn : std_logic; + SIGNAL o_dr : unsigned(N_DW-1 DOWNTO 0); + SIGNAL o_shift : unsigned(0 TO N_DW+15); + SIGNAL o_sh,o_sh1,o_sh2,o_sh3,o_sh4 : std_logic; + SIGNAL o_reset_na : std_logic; + SIGNAL o_dpram : arr_dw(0 TO BLEN*2-1); + ATTRIBUTE ramstyle OF o_dpram : SIGNAL IS "no_rw_check"; + SIGNAL o_line0,o_line1,o_line2,o_line3 : arr_pix(0 TO OHRES-1); + ATTRIBUTE ramstyle OF o_line0 : SIGNAL IS "no_rw_check"; + ATTRIBUTE ramstyle OF o_line1 : SIGNAL IS "no_rw_check"; + ATTRIBUTE ramstyle OF o_line2 : SIGNAL IS "no_rw_check"; + ATTRIBUTE ramstyle OF o_line3 : SIGNAL IS "no_rw_check"; + SIGNAL o_wadl,o_radl : natural RANGE 0 TO OHRES-1; + SIGNAL o_ldw,o_ldr0,o_ldr1,o_ldr2,o_ldr3 : type_pix; + SIGNAL o_wr : unsigned(3 DOWNTO 0); + SIGNAL o_hcpt,o_vcpt,o_vcpt_pre,o_vcpt_pre2,o_vcpt_pre3 : uint12; + SIGNAL o_ihsize,o_ihsizem,o_ivsize : uint12; + SIGNAL o_ihsize_temp, o_ihsize_temp2 : natural RANGE 0 TO 32767; + + SIGNAL o_vfrac,o_hfrac,o_hfrac1,o_hfrac2,o_hfrac3,o_hfrac4 : unsigned(11 DOWNTO 0); + SIGNAL o_hacc,o_hacc_ini,o_hacc_next,o_vacc,o_vacc_next,o_vacc_ini : natural RANGE 0 TO 4*OHRES-1; + SIGNAL o_hsv,o_vsv,o_dev,o_pev,o_end : unsigned(0 TO 5); + SIGNAL o_hsp,o_vss : std_logic; + SIGNAL o_read,o_read_pre : std_logic; + SIGNAL o_readlev,o_copylev : natural RANGE 0 TO 2; + SIGNAL o_hburst,o_hbcpt : natural RANGE 0 TO 31; + SIGNAL o_fload : natural RANGE 0 TO 3; + SIGNAL o_acpt,o_acpt1,o_acpt2,o_acpt3,o_acpt4 : natural RANGE 0 TO 15; -- Alternance pixels FIFO + SIGNAL o_dshi : natural RANGE 0 TO 3; + SIGNAL o_first,o_last,o_last1,o_last2,o_last3 : std_logic; + SIGNAL o_lastt1,o_lastt2,o_lastt3 : std_logic; + SIGNAL o_alt,o_altx : unsigned(3 DOWNTO 0); + SIGNAL o_hdown,o_vdown : std_logic; + SIGNAL o_primv,o_lastv,o_bibv : unsigned(0 TO 2); + TYPE arr_uint4 IS ARRAY (natural RANGE <>) OF natural RANGE 0 TO 15; + SIGNAL o_off : arr_uint4(0 TO 2); + SIGNAL o_bibu : std_logic :='0'; + SIGNAL o_dcptv : arr_uint12(1 TO 8); + SIGNAL o_dcpt : uint12; + SIGNAL o_hpixs,o_hpix0,o_hpix1,o_hpix2,o_hpix3 : type_pix; + SIGNAL o_hpixq,o_vpixq,o_vpixq1 : arr_pix(0 TO 3); + + SIGNAL o_vpe : std_logic; + SIGNAL o_div,o_div2 : unsigned(18 DOWNTO 0); --uint12; + SIGNAL o_dir,o_dir2 : unsigned(11 DOWNTO 0); + SIGNAL o_vdivi : unsigned(12 DOWNTO 0); + SIGNAL o_vdivr : unsigned(24 DOWNTO 0); + SIGNAL o_divstart : std_logic; + SIGNAL o_divrun : std_logic; + SIGNAL o_hacpt,o_vacpt : unsigned(11 DOWNTO 0); + + ----------------------------------------------------------------------------- + FUNCTION shift_ishift(shift : unsigned(0 TO 119); + pix : type_pix; + format : unsigned(1 DOWNTO 0)) RETURN unsigned IS + BEGIN + CASE format IS + WHEN "01" => -- 24bpp + RETURN shift(24 TO 119) & pix.r & pix.g & pix.b; + WHEN "10" => -- 32bpp + RETURN shift(32 TO 119) & pix.r & pix.g & pix.b & x"00"; + WHEN OTHERS => -- 16bpp 565 + RETURN shift(16 TO 119) & + pix.g(4 DOWNTO 2) & pix.r(7 DOWNTO 3) & + pix.b(7 DOWNTO 3) & pix.g(7 DOWNTO 5); + END CASE; + END FUNCTION; + + FUNCTION shift_ipack(i_dw : unsigned(N_DW-1 DOWNTO 0); + acpt : natural RANGE 0 TO 15; + shift : unsigned(0 TO 119); + pix : type_pix; + format : unsigned(1 DOWNTO 0)) RETURN unsigned IS + VARIABLE dw : unsigned(N_DW-1 DOWNTO 0); + BEGIN + dw:=i_dw; + CASE format IS + WHEN "01" => -- 24bpp + IF N_DW=128 THEN + IF acpt=5 THEN dw:=shift(0 TO 119) & pix.r; + ELSIF acpt=10 THEN dw:=shift(8 TO 119) & pix.r & pix.g; + ELSIF acpt=15 THEN dw:=shift(16 TO 119) & pix.r & pix.g & pix.b; + END IF; + ELSE -- N_DW=64 + IF (acpt MOD 8)=2 THEN dw:=shift(72 TO 119) & pix.r & pix.g; + ELSIF (acpt MOD 8)=5 THEN dw:=shift(64 TO 119) & pix.r; + ELSIF (acpt MOD 8)=7 THEN dw:=shift(80 TO 119) & pix.r & pix.g & pix.b; + END IF; + END IF; + WHEN "10" => -- 32bpp + IF (N_DW=128 AND (acpt MOD 4)=3) OR (N_DW=64 AND (acpt MOD 8)=7) THEN + dw:=shift(128-N_DW+24 TO 119) & pix.r & pix.g & pix.b & x"00"; + END IF; + WHEN OTHERS => -- 16bpp 565 + IF (N_DW=128 AND (acpt MOD 8)=7) OR (N_DW=64 AND (acpt MOD 4)=3) THEN + dw:=shift(128-N_DW+8 TO 119) & pix.g(4 DOWNTO 2) & pix.r(7 DOWNTO 3) & + pix.b(7 DOWNTO 3) & pix.g(7 DOWNTO 5); + END IF; + END CASE; + RETURN dw; + END FUNCTION; + + FUNCTION shift_inext (acpt : natural RANGE 0 TO 15; + format : unsigned(1 DOWNTO 0)) RETURN boolean IS + BEGIN + CASE format IS + WHEN "01" => -- 24bpp + RETURN (N_DW=128 AND (acpt=5 OR acpt=10 OR acpt=15)) OR + (N_DW=64 AND ((acpt MOD 8)=2 OR (acpt MOD 8)=5 OR (acpt MOD 8)=7)); + WHEN "10" => -- 32bpp + RETURN (N_DW=128 AND ((acpt MOD 4)=3)) OR + (N_DW=64 AND ((acpt MOD 2)=1)); + WHEN OTHERS => -- 16bpp + RETURN (N_DW=128 AND ((acpt MOD 8)=7)) OR + (N_DW=64 AND ((acpt MOD 4)=3)); + END CASE; + END FUNCTION; + + FUNCTION shift_opack(acpt : natural RANGE 0 TO 15; + shift : unsigned(0 TO N_DW+15); + dr : unsigned(N_DW-1 DOWNTO 0); + format : unsigned(5 DOWNTO 0)) RETURN unsigned IS + VARIABLE shift_v : unsigned(0 TO N_DW+15); + BEGIN + CASE format(2 DOWNTO 0) IS + WHEN "011" => -- 8bpp + IF (N_DW=128 AND acpt=0) OR (N_DW=64 AND (acpt MOD 8)=0) THEN + shift_v:=dr & dr(15 DOWNTO 0); + ELSE + shift_v:=shift(8 TO N_DW+15) & dr(7 DOWNTO 0); + END IF; + + WHEN "100" => -- 16bpp + IF (N_DW=128 AND (acpt MOD 8)=0) OR (N_DW=64 AND (acpt MOD 4)=0) THEN + shift_v:=dr & dr(15 DOWNTO 0); + ELSE + shift_v:=shift(16 TO N_DW+15) & dr(15 DOWNTO 0); + END IF; + + WHEN "101" => -- 24bpp + IF N_DW=128 THEN + IF acpt=0 THEN + shift_v:=dr & dr(15 DOWNTO 0); + ELSIF acpt=5 THEN + shift_v:=shift(24 TO 31) & dr & dr(7 DOWNTO 0); + ELSIF acpt=10 THEN + shift_v:=shift(24 TO 39) & dr; + ELSE + shift_v:=shift(24 TO N_DW+15) & dr(23 DOWNTO 0); + END IF; + ELSE -- N_DW=64 + IF (acpt MOD 8)=0 THEN + shift_v:=dr & dr(15 DOWNTO 0); + ELSIF (acpt MOD 8)=2 THEN + shift_v:=shift(24 TO 39) & dr; + ELSIF (acpt MOD 8)=5 THEN + shift_v:=shift(24 TO 31) & dr & dr(7 DOWNTO 0); + ELSE + shift_v:=shift(24 TO N_DW+15) & dr(23 DOWNTO 0); + END IF; + END IF; + WHEN OTHERS => -- 32bpp + IF (N_DW=128 AND (acpt MOD 4)=0) OR (N_DW=64 AND (acpt MOD 2)=0) THEN + shift_v:=dr & dr(15 DOWNTO 0); + ELSE + shift_v:=shift(32 TO N_DW+15) & dr(31 DOWNTO 0); + END IF; + END CASE; + RETURN shift_v; + END FUNCTION; + + FUNCTION shift_onext (acpt : natural RANGE 0 TO 15; + format : unsigned(5 DOWNTO 0)) RETURN boolean IS + BEGIN + CASE format(2 DOWNTO 0) IS + WHEN "011" => -- 8bpp + RETURN (N_DW=128 AND acpt=0) OR + (N_DW=64 AND ((acpt MOD 8)=0)); + WHEN "100" => -- 16bpp + RETURN (N_DW=128 AND ((acpt MOD 8)=0)) OR + (N_DW=64 AND ((acpt MOD 4)=0)); + WHEN "101" => -- 24bpp + RETURN (N_DW=128 AND (acpt=0 OR acpt=5 OR acpt=10)) OR + (N_DW=64 AND ((acpt MOD 8)=0 OR (acpt MOD 8)=2 OR (acpt MOD 8)=5)); + WHEN OTHERS => -- 32bpp + RETURN (N_DW=128 AND ((acpt MOD 4)=0)) OR + (N_DW=64 AND ((acpt MOD 2)=0)); + END CASE; + END FUNCTION; + + FUNCTION shift_opix (shift : unsigned(0 TO N_DW+15); + format : unsigned(5 DOWNTO 0)) RETURN type_pix IS + BEGIN + CASE format(3 DOWNTO 0) IS + WHEN "0100" => -- 16bpp 565 + RETURN (b=>shift(8 TO 12) & shift(8 TO 10), + g=>shift(13 TO 15) & shift(0 TO 2) & shift(13 TO 14), + r=>shift(3 TO 7) & shift(3 TO 5)); + WHEN "1100" => -- 16bpp 1555 + RETURN (b=>shift(9 TO 13) & shift(9 TO 11), + g=>shift(14 TO 15) & shift(0 TO 2) & shift(14 TO 15) & shift(0), + r=>shift(3 TO 7) & shift(3 TO 5)); + WHEN "0101" | "0110" => -- 24bpp / 32bpp + RETURN (r=>shift(0 TO 7),g=>shift(8 TO 15),b=>shift(16 TO 23)); + + WHEN OTHERS => + RETURN (r=>shift(0 TO 7),g=>shift(8 TO 15),b=>shift(16 TO 23)); + + END CASE; + END FUNCTION; + + FUNCTION pixoffset(adrs : unsigned(31 DOWNTO 0); + format : unsigned (5 DOWNTO 0)) RETURN natural IS + BEGIN + CASE format(2 DOWNTO 0) IS + WHEN "011" => -- 8bbp + RETURN to_integer(adrs(NB_LA-1 DOWNTO 0)); + WHEN "100" => -- 16bpp 565 + RETURN to_integer(adrs(NB_LA-1 DOWNTO 1)); + WHEN OTHERS => -- 32bpp + RETURN to_integer(adrs(NB_LA-1 DOWNTO 2)); + END CASE; + END FUNCTION; + + FUNCTION swap(d : unsigned(N_DW-1 DOWNTO 0)) RETURN unsigned IS + VARIABLE e : unsigned(N_DW-1 DOWNTO 0); + BEGIN + IF BYTESWAP THEN + FOR i IN 0 TO N_DW/8-1 LOOP + e(i*8+7 DOWNTO i*8):=d(N_DW-i*8-1 DOWNTO N_DW-i*8-8); + END LOOP; + RETURN e; + ELSE + RETURN d; + END IF; + END FUNCTION swap; + + ----------------------------------------------------------------------------- + FUNCTION altx (a : unsigned(1 DOWNTO 0)) RETURN unsigned IS + BEGIN + CASE a IS + WHEN "00" => RETURN "0001"; + WHEN "01" => RETURN "0010"; + WHEN "10" => RETURN "0100"; + WHEN OTHERS => RETURN "1000"; + END CASE; + END FUNCTION; + + ----------------------------------------------------------------------------- + FUNCTION bound(a : unsigned; + s : natural) RETURN unsigned IS + BEGIN + IF a(a'left)='1' THEN + RETURN x"00"; + ELSIF a(a'left DOWNTO s)/=0 THEN + RETURN x"FF"; + ELSE + RETURN a(s-1 DOWNTO s-8); + END IF; + END FUNCTION bound; + + ----------------------------------------------------------------------------- + -- Nearest + FUNCTION near_frac(f : unsigned) RETURN unsigned IS + VARIABLE x : unsigned(FRAC-1 DOWNTO 0); + BEGIN + x:=(OTHERS =>f(f'left)); + RETURN x; + END FUNCTION; + + SIGNAL o_h_frac2,o_v_frac : unsigned(FRAC-1 DOWNTO 0); + SIGNAL o_h_bil_pix,o_v_bil_pix : type_pix; + + ----------------------------------------------------------------------------- + -- Nearest + Bilinear + Sharp Bilinear + FUNCTION bil_frac(f : unsigned) RETURN unsigned IS + BEGIN + RETURN f(f'left DOWNTO f'left+1-FRAC); + END FUNCTION; + + TYPE type_bil_t IS RECORD + r,g,b : unsigned(8+FRAC DOWNTO 0); + END RECORD; + FUNCTION bil_calc(f : unsigned(FRAC-1 DOWNTO 0); + p : arr_pix(0 TO 3)) RETURN type_bil_t IS + VARIABLE fp,fn : unsigned(FRAC DOWNTO 0); + VARIABLE u : unsigned(8+FRAC DOWNTO 0); + VARIABLE x : type_bil_t; + CONSTANT Z : unsigned(FRAC-1 DOWNTO 0):=(OTHERS =>'0'); + BEGIN + fp:='0' & f; + fn:=('1' & Z) - fp; + u:=p(2).r * fp + p(1).r * fn; + x.r:=u; + u:=p(2).g * fp + p(1).g * fn; + x.g:=u; + u:=p(2).b * fp + p(1).b * fn; + x.b:=u; + RETURN x; + END FUNCTION; + SIGNAL o_h_bil_t,o_v_bil_t : type_bil_t; + SIGNAL i_h_bil_t : type_bil_t; + + ----------------------------------------------------------------------------- + -- Sharp Bilinear + -- <0.5 : x*x*x*4 + -- >0.5 : 1 - (1-x)*(1-x)*(1-x)*4 + + TYPE type_sbil_tt IS RECORD + f : unsigned(FRAC-1 DOWNTO 0); + s : unsigned(FRAC-1 DOWNTO 0); + END RECORD; + + SIGNAL o_h_sbil_t,o_v_sbil_t : type_sbil_tt; + + FUNCTION sbil_frac1(f : unsigned(11 DOWNTO 0)) RETURN type_sbil_tt IS + VARIABLE u : unsigned(FRAC-1 DOWNTO 0); + VARIABLE v : unsigned(2*FRAC-1 DOWNTO 0); + VARIABLE x : type_sbil_tt; + BEGIN + IF f(11)='0' THEN + u:=f(11 DOWNTO 12-FRAC); + ELSE + u:=NOT f(11 DOWNTO 12-FRAC); + END IF; + v:=u*u; + x.f:=u; + x.s:=v(2*FRAC-2 DOWNTO FRAC-1); + RETURN x; + END FUNCTION; + + FUNCTION sbil_frac2(f : unsigned(11 DOWNTO 0); + t : type_sbil_tt) RETURN unsigned IS + VARIABLE v : unsigned(2*FRAC-1 DOWNTO 0); + BEGIN + v:=t.f*t.s; + IF f(11)='0' THEN + RETURN v(2*FRAC-2 DOWNTO FRAC-1); + ELSE + RETURN NOT v(2*FRAC-2 DOWNTO FRAC-1); + END IF; + END FUNCTION; + + ----------------------------------------------------------------------------- + -- Bicubic + TYPE type_bic_abcd IS RECORD + a : unsigned(7 DOWNTO 0); -- 0.8 + b : signed(8 DOWNTO 0); -- 0.9 + c : signed(11 DOWNTO 0); -- 3.9 + d : signed(10 DOWNTO 0); -- 2.9 + xx : signed(8 DOWNTO 0); -- X.X 1.8 + END RECORD; + TYPE type_bic_pix_abcd IS RECORD + r,g,b : type_bic_abcd; + END RECORD; + TYPE type_bic_tt1 IS RECORD -- Intermediate result + r_bx,g_bx,b_bx : signed(8 DOWNTO 0); -- B.X 1.8 + r_cxx,g_cxx,b_cxx : signed(11 DOWNTO 0); -- C.XX 3.9 + r_dxx,g_dxx,b_dxx : signed(10 DOWNTO 0); -- D.XX 2.9 + END RECORD; + TYPE type_bic_tt2 IS RECORD -- Intermediate result + r_abxcxx,g_abxcxx,b_abxcxx : signed(9 DOWNTO 0); -- A + B.X + C.XX 2.8 + r_dxxx,g_dxxx,b_dxxx : signed(9 DOWNTO 0); -- D.X.X.X 2.8 + END RECORD; + + ---------------------------------------------------------- + -- Y = A + B.X + C.X.X + D.X.X.X = A + X.(B + X.(C + X.D)) + -- A = Y(0) 0 .. 1 unsigned + -- B = Y(1)/2 - Y(-1)/2 -1/2 .. +1/2 signed + -- C = Y(-1) - 5*Y(0)/2 + 2*Y(1) - Y(2)/2 -3 .. +3 signed + -- D = -Y(-1)/2 + 3*Y(0)/2 - 3*Y(1)/2 + Y(2)/2 -2 .. +2 signed + + FUNCTION bic_calc0(f : unsigned(11 DOWNTO 0); + pm,p0,p1,p2 : unsigned(7 DOWNTO 0)) RETURN type_bic_abcd IS + VARIABLE xx : signed(2*FRAC+1 DOWNTO 0); -- 2.(2*FRAC) + BEGIN + xx := signed('0' & f(11 DOWNTO 12-FRAC)) * + signed('0' & f(11 DOWNTO 12-FRAC)); -- 2.(2*FRAC) + RETURN type_bic_abcd'( + a=>p0,-- 0.8 + b=>signed(('0' & p1) - ('0' & pm)), -- 0.9 + c=>signed(("000" & pm & '0') - ("00" & p0 & "00") - ("0000" & p0) + + ("00" & p1 & "00") - ("0000" & p2)), -- 3.9 + d=>signed(("00" & p0 & '0') - ("00" & p1 & '0') - ("000" & p1) + + ("000" & p0) + ("000" & p2) - ("000" & pm)), -- 2.9 + xx=>xx(2*FRAC DOWNTO 2*FRAC-8)); -- 1.8 + END FUNCTION; + FUNCTION bic_calc0(f : unsigned(11 DOWNTO 0); + p : arr_pix(0 TO 3)) RETURN type_bic_pix_abcd IS + BEGIN + RETURN type_bic_pix_abcd'(r=>bic_calc0(f,p(0).r,p(1).r,p(2).r,p(3).r), + g=>bic_calc0(f,p(0).g,p(1).g,p(2).g,p(3).g), + b=>bic_calc0(f,p(0).b,p(1).b,p(2).b,p(3).b)); + END FUNCTION; + + ---------------------------------------------------------- + -- Calc : B.X, C.XX, D.XX + FUNCTION bic_calc1(f : unsigned(11 DOWNTO 0); + abcd : type_bic_pix_abcd) RETURN type_bic_tt1 IS + VARIABLE t : type_bic_tt1; + VARIABLE bx : signed(9+FRAC DOWNTO 0); -- 1.(FRAC+9) + VARIABLE cxx : signed(20 DOWNTO 0); -- 4.17 + VARIABLE dxx : signed(19 DOWNTO 0); -- 3.17 + BEGIN + bx := abcd.r.b * signed('0' & f(11 DOWNTO 12-FRAC)); -- 1.(FRAC+9) + t.r_bx:=bx(9+FRAC DOWNTO 9+FRAC-8); -- 1.8 + cxx:= abcd.r.c * abcd.r.xx; -- 3.9 * 1.8 = 4.17 + t.r_cxx:=cxx(19 DOWNTO 8); -- 3.9 + dxx:= abcd.r.d * abcd.r.xx; -- 2.9 * 1.8 = 3.17 + t.r_dxx:=dxx(18 DOWNTO 8); -- 2.9 + bx := abcd.g.b * signed('0' & f(11 DOWNTO 12-FRAC)); -- 1.(FRAC+9) + t.g_bx:=bx(9+FRAC DOWNTO 9+FRAC-8); -- 1.8 + cxx:= abcd.g.c * abcd.g.xx; -- 3.9 * 1.8 = 4.17 + t.g_cxx:=cxx(19 DOWNTO 8); -- 3.9 + dxx:= abcd.g.d * abcd.g.xx; -- 2.9 * 1.8 = 3.17 + t.g_dxx:=dxx(18 DOWNTO 8); -- 2.9 + bx := abcd.b.b * signed('0' & f(11 DOWNTO 12-FRAC)); -- 1.(FRAC+9) + t.b_bx:=bx(9+FRAC DOWNTO 9+FRAC-8); -- 1.8 + cxx:= abcd.b.c * abcd.b.xx; -- 3.9 * 1.8 = 4.17 + t.b_cxx:=cxx(19 DOWNTO 8); -- 3.9 + dxx:= abcd.b.d * abcd.b.xx; -- 2.9 * 1.8 = 3.17 + t.b_dxx:=dxx(18 DOWNTO 8); -- 2.9 + RETURN t; + END FUNCTION; + + ---------------------------------------------------------- + -- Calc A + BX + CXX , X.DXX + FUNCTION bic_calc2(f : unsigned(11 DOWNTO 0); + t : type_bic_tt1; + abcd : type_bic_pix_abcd) RETURN type_bic_tt2 IS + VARIABLE u : type_bic_tt2; + VARIABLE x : signed(11+FRAC DOWNTO 0); -- 3.(9+FRAC) + BEGIN + u.r_abxcxx:=(t.r_bx(8) & t.r_bx) + ("00" & signed(abcd.r.a)) + t.r_cxx(10 DOWNTO 1); -- 2.8 + u.g_abxcxx:=(t.g_bx(8) & t.g_bx) + ("00" & signed(abcd.g.a)) + t.g_cxx(10 DOWNTO 1); -- 2.8 + u.b_abxcxx:=(t.b_bx(8) & t.b_bx) + ("00" & signed(abcd.b.a)) + t.b_cxx(10 DOWNTO 1); -- 2.8 + + x:=t.r_dxx * signed('0' & f(11 DOWNTO 12-FRAC)); --2.9 * 1.FRAC =3.(9+FRAC) + u.r_dxxx:=x(10+FRAC DOWNTO 9+FRAC-8); -- 2.8 + x:=t.g_dxx * signed('0' & f(11 DOWNTO 12-FRAC)); --2.9 * 1.FRAC =3.(9+FRAC) + u.g_dxxx:=x(10+FRAC DOWNTO 9+FRAC-8); -- 2.8 + x:=t.b_dxx * signed('0' & f(11 DOWNTO 12-FRAC)); --2.9 * 1.FRAC =3.(9+FRAC) + u.b_dxxx:=x(10+FRAC DOWNTO 9+FRAC-8); -- 2.8 + RETURN u; + END FUNCTION; + + ---------------------------------------------------------- + -- Calc (A + BX + CXX) + (DXXX) + FUNCTION bic_calc3(f : unsigned(11 DOWNTO 0); + t : type_bic_tt2; + abcd : type_bic_pix_abcd) RETURN type_pix IS + VARIABLE x : type_pix; + VARIABLE v : signed(9 DOWNTO 0); -- 2.8 + BEGIN + v:=t.r_abxcxx + t.r_dxxx; + x.r:=bound(unsigned(v),8); + v:=t.g_abxcxx + t.g_dxxx; + x.g:=bound(unsigned(v),8); + v:=t.b_abxcxx + t.b_dxxx; + x.b:=bound(unsigned(v),8); + RETURN x; + END FUNCTION; + + ----------------------------------------------------------------------------- + SIGNAL o_h_bic_pix,o_v_bic_pix : type_pix; + SIGNAL o_h_bic_abcd1,o_h_bic_abcd2 : type_bic_pix_abcd; + SIGNAL o_v_bic_abcd1,o_v_bic_abcd2 : type_bic_pix_abcd; + SIGNAL o_h_bic_tt1,o_v_bic_tt1 : type_bic_tt1; + SIGNAL o_h_bic_tt2,o_v_bic_tt2 : type_bic_tt2; + + ----------------------------------------------------------------------------- + -- Polyphase + + CONSTANT POLY16 : arr_int9 := ( + -24,-21,-15,-9,-5,-1,4,8,6,8,5,4,3,1,0,0, + 176,174,169,160,150,131,115,85,58,27,4,-6,-20,-24,-26,-25, + -24,-25,-26,-24,-20,-6,4,27,58,85,115,131,150,160,169,174, + 0,0,0,1,3,4,5,8,6,8,4,-1,-5,-9,-15,-21); + + CONSTANT POLY32 : arr_int9 := ( + -24,-22,-20,-18,-16,-13,-11,-8,-6,-3,-1,0,2,3,5,5,6,6,6,5,5,4,4,3,2,1,1,0,0,0,0,0, + 176,175,174,172,169,164,160,153,147,138,129,119,109,96,84,71,58,40,22,12,3,-4,-12,-16,-20,-22,-25,-25,-26,-25,-25,-25, + -24,-25,-26,-26,-26,-24,-23,-19,-16,-10,-4,4,11,22,32,45,58,77,96,108,119,129,140,147,154,159,165,168,172,173,175,175, + 0,0,0,0,1,1,2,2,3,3,4,5,6,7,7,7,6,5,4,3,1,-1,-4,-6,-8,-10,-13,-15,-18,-20,-22,-22); + + FUNCTION init_poly RETURN arr_uv36 IS + VARIABLE m : arr_uv36(0 TO 2**FRAC-1) :=(OTHERS =>x"000000000"); + BEGIN + IF FRAC=4 THEN + FOR i IN 0 TO 15 LOOP + m(i):=unsigned(to_signed(POLY16(i),9) & to_signed(POLY16(i+16),9) & + to_signed(POLY16(i+32),9) & to_signed(POLY16(i+48),9)); + END LOOP; + ELSIF FRAC=5 THEN + FOR i IN 0 TO 31 LOOP + m(i):=unsigned(to_signed(POLY32(i),9) & to_signed(POLY32(i+32),9) & + to_signed(POLY32(i+64),9) & to_signed(POLY32(i+96),9)); + END LOOP; + END IF; + RETURN m; + END FUNCTION; + + SIGNAL o_h_poly : arr_uv36(0 TO 2**FRAC-1):=init_poly; + SIGNAL o_v_poly : arr_uv36(0 TO 2**FRAC-1):=init_poly; + ATTRIBUTE ramstyle OF o_h_poly : SIGNAL IS "no_rw_check"; + ATTRIBUTE ramstyle OF o_v_poly : SIGNAL IS "no_rw_check"; + SIGNAL o_h_poly_a,o_v_poly_a : integer RANGE 0 TO 2**FRAC-1; + SIGNAL o_h_poly_dr,o_h_poly_dr2,o_v_poly_dr,o_v_poly_dr2 : unsigned(35 DOWNTO 0); + SIGNAL o_h_poly_pix,o_v_poly_pix : type_pix; + SIGNAL poly_h_wr,poly_v_wr : std_logic; + SIGNAL poly_tdw : unsigned(35 DOWNTO 0); + SIGNAL poly_a2 : unsigned(FRAC-1 DOWNTO 0); + + TYPE type_poly_t IS RECORD + r0,r1,b0,b1,g0,g1 : signed(17 DOWNTO 0); + END RECORD; + + SIGNAL o_h_poly_t,o_v_poly_t : type_poly_t; + + FUNCTION poly_calc1(fi : unsigned(35 DOWNTO 0); + p : arr_pix(0 TO 3)) RETURN type_poly_t IS + VARIABLE t : type_poly_t; + BEGIN + -- 2.7 * 1.8 = 3.15 + t.r0:=(signed(fi(35 DOWNTO 27)) * signed('0' & p(0).r) + + signed(fi(26 DOWNTO 18)) * signed('0' & p(1).r)); + t.r1:=(signed(fi(17 DOWNTO 9)) * signed('0' & p(2).r) + + signed(fi( 8 DOWNTO 0)) * signed('0' & p(3).r)); + t.g0:=(signed(fi(35 DOWNTO 27)) * signed('0' & p(0).g) + + signed(fi(26 DOWNTO 18)) * signed('0' & p(1).g)); + t.g1:=(signed(fi(17 DOWNTO 9)) * signed('0' & p(2).g) + + signed(fi( 8 DOWNTO 0)) * signed('0' & p(3).g)); + t.b0:=(signed(fi(35 DOWNTO 27)) * signed('0' & p(0).b) + + signed(fi(26 DOWNTO 18)) * signed('0' & p(1).b)); + t.b1:=(signed(fi(17 DOWNTO 9)) * signed('0' & p(2).b) + + signed(fi( 8 DOWNTO 0)) * signed('0' & p(3).b)); + RETURN t; + END FUNCTION; + + FUNCTION poly_calc2(t : type_poly_t) RETURN type_pix IS + VARIABLE p : type_pix; + BEGIN + p.r:=bound(unsigned(t.r0+t.r1),15); + p.g:=bound(unsigned(t.g0+t.g1),15); + p.b:=bound(unsigned(t.b0+t.b1),15); + RETURN p; + END FUNCTION; + +BEGIN + + ----------------------------------------------------------------------------- + i_reset_na<='0' WHEN reset_na='0' ELSE '1' WHEN rising_edge(i_clk); + o_reset_na<='0' WHEN reset_na='0' ELSE '1' WHEN rising_edge(o_clk); + avl_reset_na<='0' WHEN reset_na='0' ELSE '1' WHEN rising_edge(avl_clk); + + ----------------------------------------------------------------------------- + -- Input pixels FIFO and shreg + InAT:PROCESS(i_clk,i_reset_na) IS + CONSTANT Z : unsigned(FRAC-1 DOWNTO 0):=(OTHERS =>'0'); + VARIABLE frac_v : unsigned(FRAC-1 DOWNTO 0); + VARIABLE div_v : unsigned(16 DOWNTO 0); + VARIABLE dir_v : unsigned(11 DOWNTO 0); + VARIABLE bil_t_v : type_bil_t; + BEGIN + IF i_reset_na='0' THEN + i_write<='0'; + + ELSIF rising_edge(i_clk) THEN + i_push<='0'; + i_pushhead<='0'; + i_eol<='0'; -- End Of Line + i_freeze <=freeze; -- + i_iauto<=iauto; -- + i_wreq<='0'; + i_wr<='0'; + + ------------------------------------------------------ + i_head(127 DOWNTO 120)<=x"01"; -- Header type + i_head(119 DOWNTO 112)<="000000" & i_format; -- Header format + i_head(111 DOWNTO 96)<="0000" & to_unsigned(N_BURST,12); -- Header size + i_head(95 DOWNTO 80)<=x"0000"; -- Attributes. TBD + i_head(80)<=i_inter; + i_head(81)<=i_flm; + i_head(82)<=i_hdown; + i_head(83)<=i_vdown; + i_head(84)<=i_mode(3); + i_head(87 DOWNTO 85)<=i_count; + i_head(79 DOWNTO 64)<="0000" & to_unsigned(i_hrsize,12); -- Image width + i_head(63 DOWNTO 48)<="0000" & to_unsigned(i_vrsize,12); -- Image height + i_head(47 DOWNTO 32)<= + to_unsigned(N_BURST * i_hburst,16); -- Line Length. Bytes + i_head(31 DOWNTO 16)<="0000" & to_unsigned(i_ohsize,12); + i_head(15 DOWNTO 0) <="0000" & to_unsigned(i_ovsize,12); + + ------------------------------------------------------ + i_ppix<=(i_r,i_g,i_b); + i_pvs<=i_vs; + i_pfl<=i_fl; + i_pde<=i_de; + i_pce<=i_ce; + + ------------------------------------------------------ + IF i_pce='1' THEN + ---------------------------------------------------- + i_vs_pre<=i_pvs; + i_de_pre<=i_pde; + i_fl_pre<=i_pfl; + + ---------------------------------------------------- + -- Detect interlaced video + IF NOT INTER THEN + i_intercnt<=0; + ELSIF i_pfl/=i_fl_pre THEN + i_intercnt<=3; + ELSIF i_pvs='1' AND i_vs_pre='0' AND i_intercnt>0 THEN + i_intercnt<=i_intercnt-1; + END IF; + i_inter<=to_std_logic(i_intercnt>0); + + ---------------------------------------------------- + IF i_pvs='1' AND i_vs_pre='0' THEN + i_sof<='1'; + END IF; + + IF i_pde='1' AND i_de_pre='0' THEN + i_flm<=i_pfl; + END IF; + + IF i_pde='1' AND i_sof='1' THEN + i_sof<='0'; + i_vcpt<=0; + IF i_inter='1' AND i_flm='0' AND i_half='0' AND INTER THEN + i_line<='1'; + i_adrsi<=to_unsigned(N_BURST * i_hburst,32) + + to_unsigned(N_BURST * to_integer( + unsigned'("00") & to_std_logic(HEADER)),32); + ELSE + i_line<='0'; + i_adrsi<=to_unsigned(N_BURST * to_integer( + unsigned'("00") & to_std_logic(HEADER)),32); + END IF; + END IF; + + i_ven<=to_std_logic(i_hcpt>=i_hmin AND i_hcpt<=i_hmax AND + i_vcpt>=i_vmin AND i_vcpt<=i_vmax); + + -- Detects end of frame for triple buffering. + i_endframe0<=i_vs AND (NOT i_inter OR i_flm); + i_endframe1<=i_vs AND (NOT i_inter OR NOT i_flm); + + i_vss<=to_std_logic(i_vcpt>=i_vmin AND i_vcpt<=i_vmax); + + ---------------------------------------------------- + IF i_pde='1' AND i_de_pre='0' THEN + i_vimax<=i_vcpt; + i_hcpt<=0; + ELSE + i_hcpt<=(i_hcpt+1) MOD 4096; + END IF; + + IF i_pde='0' AND i_de_pre='1' THEN + i_himax<=i_hcpt; + END IF; + + IF i_iauto='1' THEN + -- Auto-size + i_hmin<=0; + i_hmax<=i_himax; + i_vmin<=0; + IF i_pvs='1' AND i_vs_pre='0' AND (i_inter='0' OR i_pfl='0') THEN + i_vmax<=i_vimax; + END IF; + ELSE + -- Forced image + i_hmin<=himin; -- + i_hmax<=himax; -- + i_vmin<=vimin; -- + IF i_pvs='1' AND i_vs_pre='0' AND (i_inter='0' OR i_pfl='0') THEN + i_vmax<=vimax; -- + END IF; + END IF; + + IF i_pvs='1' AND i_vs_pre='0' AND (i_inter='0' OR i_pfl='0') THEN + i_vdmax<=i_vimax; + END IF; + i_hdmax<=i_himax; + + IF i_format="00" OR i_format="11" THEN -- 16bpp + i_hburst<=(i_hrsize*2 + N_BURST - 1) / N_BURST; + ELSIF i_format="01" THEN -- 24bpp + i_hburst<=(i_hrsize*3 + N_BURST - 1) / N_BURST; + ELSE -- 32bpp + i_hburst<=(i_hrsize*4 + N_BURST - 1) / N_BURST; + END IF; + ---------------------------------------------------- + i_mode<=mode; -- + i_format<=format; -- + + -- Downscaling : Nearest or bilinear + i_bil<=to_std_logic(i_mode(2 DOWNTO 0)/="000" AND DOWNSCALE); + + i_hdown<=to_std_logic(i_hsize>i_ohsize AND DOWNSCALE); --H downscale + i_vdown<=to_std_logic(i_vsize>i_ovsize AND DOWNSCALE); --V downscale + + ---------------------------------------------------- + i_hsize <=(4096+i_hmax-i_hmin+1) MOD 4096; + i_vmaxmin<=(4096+i_vmax-i_vmin+1) MOD 4096; + + IF i_inter='0' THEN + -- Non interlaced + i_vsize<=i_vmaxmin; + i_half <='0'; + ELSIF i_ovsize<2*i_vmaxmin THEN + -- Interlaced, but downscaling, use only half frames + i_vsize<=i_vmaxmin; + i_half <='1'; + ELSE + -- Interlaced : Double image height + i_vsize<=2*i_vmaxmin; + i_half <='0'; + END IF; + + i_ohsize<=o_hsize; -- + i_ovsize<=o_vsize; -- + + ---------------------------------------------------- + -- Downscaling vertical + i_divstart<='0'; + IF i_de_delay=16 THEN + IF (i_vacc + 2*i_ovsize) < 2*i_vsize THEN + i_vacc<=(i_vacc + 2*i_ovsize) MOD 8192; + i_vnp<='0'; + ELSE + i_vacc<=(i_vacc + 2*i_ovsize - 2*i_vsize + 8192) MOD 8192; + i_vnp<='1'; + END IF; + i_divstart<='1'; + + IF i_vcpt=i_vmin THEN + i_vacc<=(i_vsize - i_ovsize + 8192) MOD 8192; + i_vnp<='1'; -- + END IF; + END IF; + + IF i_vdown='0' THEN + i_vnp<='1'; + END IF; + + -- Downscaling horizontal + IF i_ven='1' THEN + IF i_hacc + 2*i_ohsize < 2*i_hsize THEN + i_hacc<=(i_hacc + 2*i_ohsize) MOD 8192; + i_hnp<='0'; -- Skip. pix. + ELSE + i_hacc<=(i_hacc + 2*i_ohsize - 2*i_hsize + 8192) MOD 8192; + i_hnp<='1'; + END IF; + END IF; + IF i_hdown='0' THEN + i_hnp<='1'; + END IF; + + ---------------------------------------------------- + -- Downscaling interpolation + i_hpixp<=i_ppix; + i_hpix0<=i_hpixp; + i_hpix1<=i_hpix0; + i_hpix2<=i_hpix1; + i_hpix3<=i_hpix2; + i_hpix4<=i_hpix3; + + i_hnp1<=i_hnp; i_hnp2<=i_hnp1; i_hnp3<=i_hnp2; i_hnp4<=i_hnp3; + i_ven1<=i_ven; i_ven2<=i_ven1; i_ven3<=i_ven2; i_ven4<=i_ven3; + i_ven5<=i_ven4; i_ven6<=i_ven5; + + -- C1 : DIV 1. Pipelined 4 bits non-restoring divider + dir_v:=x"000"; + div_v:=to_unsigned(i_hacc * 16,17); + + div_v:=div_v-to_unsigned(i_hsize*16,17); + dir_v(11):=NOT div_v(16); + IF div_v(16)='0' THEN + div_v:=div_v-to_unsigned(i_hsize*8,17); + ELSE + div_v:=div_v+to_unsigned(i_hsize*8,17); + END IF; + dir_v(10):=NOT div_v(16); + i_div<=div_v; + i_dir<=dir_v; + + -- C2 : DIV 2. + div_v:=i_div; + dir_v:=i_dir; + IF div_v(16)='0' THEN + div_v:=div_v-to_unsigned(i_hsize*4,17); + ELSE + div_v:=div_v+to_unsigned(i_hsize*4,17); + END IF; + dir_v(9):=NOT div_v(16); + + IF div_v(16)='0' THEN + div_v:=div_v-to_unsigned(i_hsize*2,17); + ELSE + div_v:=div_v+to_unsigned(i_hsize*2,17); + END IF; + dir_v(8):=NOT div_v(16); + i_h_frac<=dir_v; + + -- C4 : Horizontal Bilinear + IF i_bil='0' THEN + frac_v:=near_frac(i_h_frac); + ELSE + frac_v:=bil_frac(i_h_frac); + END IF; + + i_h_bil_t<=bil_calc(frac_v,(i_hpix2,i_hpix2,i_hpix3,i_hpix3)); + i_hpix.r<=bound(i_h_bil_t.r,8+FRAC); + i_hpix.g<=bound(i_h_bil_t.g,8+FRAC); + i_hpix.b<=bound(i_h_bil_t.b,8+FRAC); + + IF i_hdown='0' THEN + i_hpix<=i_hpix4; + END IF; + + -- C5 : Vertical Bilinear + IF i_bil='0' THEN + frac_v:=near_frac(i_v_frac(11 DOWNTO 0)); + ELSE + frac_v:=bil_frac(i_v_frac(11 DOWNTO 0)); + END IF; + + bil_t_v:=bil_calc(frac_v,(i_hpix,i_hpix,i_ldrm,i_ldrm)); + i_pix.r<=bound(bil_t_v.r,8+FRAC); + i_pix.g<=bound(bil_t_v.g,8+FRAC); + i_pix.b<=bound(bil_t_v.b,8+FRAC); + + IF i_vdown='0' THEN + i_pix<=i_hpix; + END IF; + + ---------------------------------------------------- + -- VNP : Vert. downscaling line enable + -- HNP : Horiz. downscaling pix. enable + -- VEN : Enable pixel within displayed window + + IF (i_hnp4='1' AND i_ven6='1') OR i_pushend='1' THEN + i_shift<=shift_ishift(i_shift,i_pix,i_format); + i_dw<=shift_ipack(i_dw,i_acpt,i_shift,i_pix,i_format); + + IF shift_inext(i_acpt,i_format) AND i_vnp='1' THEN + i_push<='1'; + i_pushend<='0'; + END IF; + i_acpt<=(i_acpt+1) MOD 16; + END IF; + + IF i_ven6='1' AND i_ven5='0' AND i_vnp='1' THEN + i_pushend<='1'; + END IF; + i_pushend2<=i_pushend; + + IF i_pushend2='1' AND i_pushend='0' THEN + i_eol<='1'; + END IF; + + IF i_pde='0' AND i_de_pre='1' THEN + i_de_delay<=0; + ELSIF i_de_delay<18 THEN + i_de_delay<=i_de_delay+1; + END IF; + + IF i_de_delay=16 THEN + i_lwad<=0; + i_lrad<=0; + i_vcpt<=i_vcpt+1; + i_hacc<=(i_hsize - i_ohsize + 8192) MOD 8192; + i_hbcpt<=0; + END IF; + IF i_de_delay=17 THEN + i_acpt<=0; + i_wad<=2*BLEN-1; + END IF; + + IF i_pvs='0' AND i_vs_pre='1' THEN + -- Push header + i_pushhead<=to_std_logic(HEADER); + END IF; + + END IF; -- IF i_pce='1' + + ------------------------------------------------------ + -- Push pixels to downscaling line buffer + i_lwr<=i_hnp4 AND i_ven5 AND i_pce; + IF i_lwr='1' THEN + i_lwad<=(i_lwad+1) MOD OHRES; + END IF; + i_ldw<=i_hpix; + + IF i_hnp3='1' AND i_ven4='1' AND i_pce='1' THEN + i_lrad<=(i_lrad+1) MOD OHRES; + END IF; + + ------------------------------------------------------ + -- Write image properties header + i_pushhead2<=i_pushhead; i_pushhead3<=i_pushhead2; + + IF i_pushhead='1' AND i_freeze='0' THEN + i_dw<=i_head(127 DOWNTO 128-N_DW); + i_count<=i_count+1; + i_wr<='1'; + i_wad<=0; + IF N_DW=128 THEN + i_alt<='0'; + i_wreq<=NOT i_freeze; + i_adrs<=(OTHERS =>'0'); + END IF; + END IF; + + IF i_pushhead2='1' AND i_freeze='0' AND N_DW=64 THEN + i_dw<=i_head(N_DW-1 DOWNTO 0); + i_wr<='1'; + i_wad<=1; + i_wreq<=NOT i_freeze; + i_alt<='0'; + i_adrs<=(OTHERS =>'0'); + END IF; + IF i_pushhead3='1' THEN + i_wad<=BLEN-1; + END IF; + + ------------------------------------------------------ + -- Push pixels to DPRAM + IF i_push='1' AND i_freeze='0' THEN + i_wr<='1'; + i_wad<=(i_wad+1) MOD (BLEN*2); + IF (i_wad+1) MOD BLEN=BLEN-1 AND i_hbcpt 12 + IDividers:PROCESS (i_clk,i_reset_na) IS + BEGIN + IF i_reset_na='0' THEN +--pragma synthesis_off + i_v_frac<=x"000"; +--pragma synthesis_on + NULL; + ELSIF rising_edge(i_clk) THEN + i_vdivi<=to_unsigned(2*i_vsize,13); + i_vdivr<=to_unsigned(i_vacc*4096,25); + + ------------------------------------------------------ + IF i_divstart='1' THEN + i_divcpt<=0; + i_divrun<='1'; + + ELSIF i_divrun='1' THEN + ---------------------------------------------------- + IF i_divcpt=6 THEN + i_divrun<='0'; + i_v_frac<=i_vdivr(4 DOWNTO 0) & NOT i_vdivr(24) & "000000"; + ELSE + i_divcpt<=i_divcpt+1; + END IF; + + IF i_vdivr(24)='0' THEN + i_vdivr(24 DOWNTO 12)<=i_vdivr(23 DOWNTO 11) - i_vdivi; + ELSE + i_vdivr(24 DOWNTO 12)<=i_vdivr(23 DOWNTO 11) + i_vdivi; + END IF; + i_vdivr(11 DOWNTO 0)<=i_vdivr(10 DOWNTO 0) & NOT i_vdivr(24); + + ---------------------------------------------------- + END IF; + END IF; + END PROCESS IDividers; + + ----------------------------------------------------------------------------- + -- DPRAM Input. Double buffer for RAM bursts. + PROCESS (i_clk) IS + BEGIN + IF rising_edge(i_clk) THEN + IF i_wr='1' THEN + i_dpram(i_wad)<=i_dw; + END IF; + END IF; + END PROCESS; + + avl_dr<=i_dpram(avl_rad_c) WHEN rising_edge(avl_clk); + + -- Line buffer for downscaling with interpolation + DownLine:IF DOWNSCALE GENERATE + ILBUF:PROCESS(i_clk) IS + BEGIN + IF rising_edge(i_clk) THEN + IF i_lwr='1' THEN + i_mem(i_lwad MOD IHRES)<=i_ldw; + END IF; + IF i_pce='1' THEN + i_ldrm<=i_mem(i_lrad MOD IHRES); + END IF; + END IF; + END PROCESS ILBUF; + END GENERATE DownLine; + + ----------------------------------------------------------------------------- + -- AVALON interface + Avaloir:PROCESS(avl_clk,avl_reset_na) IS + VARIABLE adr_v : unsigned(31 DOWNTO 0); + BEGIN + IF avl_reset_na='0' THEN + avl_state<=sIDLE; + avl_write_sr<='0'; + avl_read_sr<='0'; + avl_readdataack<='0'; + avl_readack<='0'; + + ELSIF rising_edge(avl_clk) THEN + ---------------------------------- + avl_write_sync<=i_write; -- + avl_write_sync2<=avl_write_sync; + avl_write_pulse<=avl_write_sync XOR avl_write_sync2; + IF avl_write_pulse='1' THEN + avl_wadrs <=i_wadrs AND (RAMSIZE - 1); -- + avl_wline <=i_wline; -- + avl_walt <=i_walt; -- + END IF; + + ---------------------------------- + avl_read_sync<=o_read; -- + avl_read_sync2<=avl_read_sync; + avl_read_pulse<=avl_read_sync XOR avl_read_sync2; + avl_radrs <=o_adrs AND (RAMSIZE - 1); -- + avl_rline <=o_rline; -- + + -------------------------------------------- + avl_o_vs_sync<=o_vsv(0); -- + avl_o_vs<=avl_o_vs_sync; + + avl_fb_ena<=o_fb_ena; -- + IF avl_fb_ena='0' THEN + IF HEADER THEN + avl_o_offset0<=buf_offset(o_obuf0,RAMBASE,RAMSIZE) + N_BURST; -- + avl_o_offset1<=buf_offset(o_obuf1,RAMBASE,RAMSIZE) + N_BURST; -- + ELSE + avl_o_offset0<=buf_offset(o_obuf0,RAMBASE,RAMSIZE); -- + avl_o_offset1<=buf_offset(o_obuf1,RAMBASE,RAMSIZE); -- + END IF; + ELSIF avl_o_vs_sync='0' AND avl_o_vs='1' THEN + -- Copy framebuffer base address at VS falling edge + avl_o_offset0<=o_fb_base; -- + avl_o_offset1<=o_fb_base; -- + END IF; + + avl_i_offset0<=buf_offset(o_ibuf0,RAMBASE,RAMSIZE); -- + avl_i_offset1<=buf_offset(o_ibuf1,RAMBASE,RAMSIZE); -- + + -------------------------------------------- + avl_dw<=swap(unsigned(avl_readdata)); + avl_read_i<='0'; + avl_write_i<='0'; + + avl_write_sr<=(avl_write_sr OR avl_write_pulse) AND NOT avl_write_clr; + avl_read_sr <=(avl_read_sr OR avl_read_pulse) AND NOT avl_read_clr; + avl_write_clr<='0'; + avl_read_clr <='0'; + + avl_rad<=avl_rad_c; + + -------------------------------------------- + CASE avl_state IS + WHEN sIDLE => + IF avl_write_sr='1' THEN + avl_state<=sWRITE; + avl_write_clr<='1'; + IF avl_walt='0' THEN + avl_rad<=0; + ELSE + avl_rad<=BLEN; + END IF; + IF avl_wline='0' THEN + avl_address<=std_logic_vector( + avl_wadrs(N_AW+NB_LA-1 DOWNTO NB_LA) + + avl_i_offset0(N_AW+NB_LA-1 DOWNTO NB_LA)); + ELSE + avl_address<=std_logic_vector( + avl_wadrs(N_AW+NB_LA-1 DOWNTO NB_LA) + + avl_i_offset1(N_AW+NB_LA-1 DOWNTO NB_LA)); + END IF; + ELSIF avl_read_sr='1' THEN + avl_state<=sREAD; + avl_read_clr<='1'; + END IF; + + WHEN sWRITE => + avl_write_i<='1'; + IF avl_write_i='1' AND avl_waitrequest='0' THEN + IF (avl_rad MOD BLEN)=BLEN-1 THEN + avl_write_i<='0'; + avl_state<=sIDLE; + END IF; + END IF; + + WHEN sREAD => + IF avl_rline='0' THEN + adr_v:=avl_radrs + avl_o_offset0; + ELSE + adr_v:=avl_radrs + avl_o_offset1; + END IF; + avl_address<=std_logic_vector(adr_v(N_AW+NB_LA-1 DOWNTO NB_LA)); + + avl_read_i<='1'; + IF avl_read_i='1' AND avl_waitrequest='0' THEN + avl_state<=sIDLE; + avl_read_i<='0'; + avl_readack<=NOT avl_readack; + END IF; + END CASE; + + -------------------------------------------- + -- Pipelined data read + avl_wr<='0'; + IF avl_readdatavalid='1' THEN + avl_wr<='1'; + avl_wad<=(avl_wad+1) MOD (2*BLEN); + IF (avl_wad MOD BLEN)=BLEN-2 THEN + avl_readdataack<=NOT avl_readdataack; + END IF; + END IF; + + IF avl_o_vs_sync='0' AND avl_o_vs='1' THEN + avl_wad<=2*BLEN-1; + END IF; + + -------------------------------------------- + END IF; + END PROCESS Avaloir; + + avl_read<=avl_read_i; + avl_write<=avl_write_i; + avl_writedata<=std_logic_vector(swap(avl_dr)); + avl_burstcount<=std_logic_vector(to_unsigned(BLEN,8)); + avl_byteenable<=(OTHERS =>'1'); + + avl_rad_c<=(avl_rad+1) MOD (2*BLEN) + WHEN avl_write_i='1' AND avl_waitrequest='0' ELSE avl_rad; + + ----------------------------------------------------------------------------- + -- DPRAM Output. Double buffer for RAM bursts. + PROCESS (avl_clk) IS + BEGIN + IF rising_edge(avl_clk) THEN + IF avl_wr='1' THEN + o_dpram(avl_wad)<=avl_dw; + END IF; + END IF; + END PROCESS; + + o_dr<=o_dpram(o_ad3) WHEN rising_edge(o_clk); + + ----------------------------------------------------------------------------- + -- Output Vertical Divider + -- Vfrac = Vacc / Vsize + ODivider:PROCESS (o_clk,o_reset_na) IS + BEGIN + IF o_reset_na='0' THEN +--pragma synthesis_off + o_vfrac<=x"000"; +--pragma synthesis_on + ELSIF rising_edge(o_clk) THEN + o_vdivi<=to_unsigned(2*o_vsize,13); + o_vdivr<=to_unsigned(o_vacc*4096,25); + ------------------------------------------------------ + IF o_divstart='1' THEN + o_divcpt<=0; + o_divrun<='1'; + + ELSIF o_divrun='1' THEN + ---------------------------------------------------- + IF o_divcpt=12 THEN + o_divrun<='0'; + o_vfrac<=o_vdivr(10 DOWNTO 0) & NOT o_vdivr(24); + ELSE + o_divcpt<=o_divcpt+1; + END IF; + + IF o_vdivr(24)='0' THEN + o_vdivr(24 DOWNTO 12)<=o_vdivr(23 DOWNTO 11) - o_vdivi; + ELSE + o_vdivr(24 DOWNTO 12)<=o_vdivr(23 DOWNTO 11) + o_vdivi; + END IF; + o_vdivr(11 DOWNTO 0)<=o_vdivr(10 DOWNTO 0) & NOT o_vdivr(24); + ---------------------------------------------------- + END IF; + END IF; + END PROCESS ODivider; + + ----------------------------------------------------------------------------- + Scalaire:PROCESS (o_clk,o_reset_na) IS + VARIABLE lev_inc_v,lev_dec_v : std_logic; + VARIABLE prim_v,last_v,bib_v : std_logic; + VARIABLE shift_v : unsigned(0 TO N_DW+15); + VARIABLE hpix_v : type_pix; + VARIABLE hcarry_v,vcarry_v : boolean; + VARIABLE dif_v : natural RANGE 0 TO 8*OHRES-1; + VARIABLE off_v : natural RANGE 0 TO 15; + BEGIN + IF o_reset_na='0' THEN + o_copy<=sWAIT; + o_state<=sDISP; + o_read_pre<='0'; + o_readlev<=0; + o_copylev<=0; + o_hsp<='0'; + + ELSIF rising_edge(o_clk) THEN + ------------------------------------------------------ + o_mode <=mode; -- ? + o_format <="0001" & format; -- ? + + o_run <=run; -- ? + + o_htotal <=htotal; -- ? + o_hsstart<=hsstart; -- ? + o_hsend <=hsend; -- ? + o_hdisp <=hdisp; -- ? + o_hmin <=hmin; -- ? + o_hmax <=hmax; -- ? + + o_vtotal <=vtotal; -- ? + o_vsstart<=vsstart; -- ? + o_vsend <=vsend; -- ? + o_vdisp <=vdisp; -- ? + o_vmin <=vmin; -- ? + o_vmax <=vmax; -- ? + + o_hsize <=o_hmax - o_hmin + 1; + o_vsize <=o_vmax - o_vmin + 1; + + -------------------------------------------- + -- Triple buffering. + -- For intelaced video, half frames are updated independently + -- Input : Toggle buffer at end of input frame + o_inter <=i_inter; -- + o_iendframe0<=i_endframe0; -- + o_iendframe02<=o_iendframe0; + IF o_iendframe0='1' AND o_iendframe02='0' THEN + o_ibuf0<=buf_next(o_ibuf0,o_obuf0); + o_bufup0<='1'; + END IF; + o_iendframe1<=i_endframe1; -- + o_iendframe12<=o_iendframe1; + IF o_iendframe1='1' AND o_iendframe12='0' THEN + o_ibuf1<=buf_next(o_ibuf1,o_obuf1); + o_bufup1<='1'; + END IF; + -- Output : Change framebuffer, and image properties, at VS falling edge + IF o_vsv(1)='1' AND o_vsv(0)='0' AND o_bufup1='1' THEN + o_obuf1<=buf_next(o_obuf1,o_ibuf1); + o_bufup1<='0'; + o_ihsize<=i_hrsize; -- + o_ivsize<=i_vrsize; -- + o_hdown<=i_hdown; -- + o_vdown<=i_vdown; -- + END IF; + -- Framebuffer mode. + IF o_fb_ena='1' THEN + o_ihsize<=o_fb_hsize; + o_ivsize<=o_fb_vsize; + o_format<=o_fb_format; + o_hdown<='0'; + o_vdown<='0'; + END IF; + + o_ihsize_temp <= o_ihsize * to_integer(o_format(2 DOWNTO 0) - 2); + o_ihsize_temp2 <= (o_ihsize_temp + N_BURST - 1); + o_hburst <= o_ihsize_temp2 / N_BURST; + + IF o_fb_ena='1' AND o_fb_stride /= 0 THEN + o_stride<=o_fb_stride; + ELSE + o_stride<=to_unsigned(o_ihsize_temp2,14); + o_stride(NB_BURST-1 DOWNTO 0)<=(OTHERS =>'0'); + END IF; + + IF o_vsv(1)='1' AND o_vsv(0)='0' AND o_bufup0='1' THEN + o_obuf0<=buf_next(o_obuf0,o_ibuf0); + o_bufup0<='0'; + END IF; + + IF o_inter='0' THEN + o_ibuf1<=o_ibuf0; + o_obuf1<=o_obuf0; + END IF; + + -- Triple buffer disabled + IF o_mode(3)='0' THEN + o_obuf0<=0; + o_obuf1<=0; + o_ibuf0<=0; + o_ibuf1<=0; + END IF; + + ------------------------------------------------------ + o_hmode<=o_mode; + IF o_hdown='1' AND DOWNSCALE THEN + -- Force nearest if downscaling : Downscaled framebuffer + o_hmode(2 DOWNTO 0)<="000"; + END IF; + + o_vmode<=o_mode; + IF o_vdown='1' AND DOWNSCALE THEN + -- Force nearest if downscaling : Downscaled framebuffer + o_vmode(2 DOWNTO 0)<="000"; + END IF; + + ------------------------------------------------------ + -- End DRAM READ + o_readack_sync<=avl_readack; -- + o_readack_sync2<=o_readack_sync; + o_readack<=o_readack_sync XOR o_readack_sync2; + + o_readdataack_sync<=avl_readdataack; -- + o_readdataack_sync2<=o_readdataack_sync; + o_readdataack<=o_readdataack_sync XOR o_readdataack_sync2; + + ------------------------------------------------------ + lev_inc_v:='0'; + lev_dec_v:='0'; + + -- acpt : Pixel position within current data word + -- dcpt : Destination image position + + -- Force preload 2 lines at top of screen + IF o_hsv(0)='1' AND o_hsv(1)='0' THEN + IF o_vcpt_pre3=o_vmin THEN + o_fload<=2; + o_bibu<='0'; + END IF; + o_hsp<='1'; + END IF; + + o_vpe<=to_std_logic(o_vcpt_pre=o_vmin); + o_divstart<='0'; + o_adrsa<='0'; + o_adrsb<=o_adrsa; + + o_vacc_ini<=(o_vsize - o_ivsize + 8192) MOD 8192; + o_hacc_ini<=(o_hsize + o_ihsize + 8192) MOD 8192; + + --Alternate phase + --o_vacc_ini<=o_ivsize; + --o_hacc_ini<=(2*o_hsize - o_ihsize + 8192) MOD 8192; + + CASE o_state IS + -------------------------------------------------- + WHEN sDISP => + IF o_hsp='1' THEN + o_state<=sHSYNC; + o_hsp<='0'; + END IF; + + -------------------------------------------------- + WHEN sHSYNC => + dif_v:=(o_vacc_next - 2*o_vsize + 16384) MOD 16384; + IF dif_v>=8192 THEN + o_vacc <=o_vacc_next; + o_vacc_next<=(o_vacc_next + 2*o_ivsize) MOD 8192; + vcarry_v:=false; + ELSE + o_vacc <=dif_v; + o_vacc_next<=(dif_v + 2*o_ivsize + 8192) MOD 8192; + vcarry_v:=true; + END IF; + o_divstart<='1'; + IF o_vcpt_pre2=o_vmin THEN + o_vacc <=o_vacc_ini; + o_vacc_next<=o_vacc_ini + 2*o_ivsize; + o_vacpt<=x"001"; + vcarry_v:=false; + END IF; + + IF vcarry_v THEN + o_vacpt<=o_vacpt+1; + END IF; + o_hbcpt<=0; -- Clear burst counter on line + IF (o_vpe='1' AND vcarry_v) OR o_fload>0 THEN + o_state<=sREAD; + ELSE + o_state<=sDISP; + END IF; + + WHEN sREAD => + -- Read a block + IF o_readlev<2 AND o_adrsb='1' THEN + lev_inc_v:='1'; + o_read_pre<=NOT o_read_pre; + o_state <=sWAITREAD; + o_bibu<=NOT o_bibu; + END IF; + prim_v:=to_std_logic(o_hbcpt=0); + last_v:=to_std_logic(o_hbcpt=o_hburst-1); + bib_v :=o_bibu; + off_v :=pixoffset(o_adrs + o_fb_base(NB_LA-1 DOWNTO 0),o_fb_format); + IF o_fb_ena='0' THEN + off_v:=0; + END IF; + o_adrsa<='1'; + + WHEN sWAITREAD => + IF o_readack='1' THEN + o_hbcpt<=o_hbcpt+1; + IF o_hbcpt=1 THEN + o_fload<=o_fload-1; + END IF; + END IF; + END IF; + + -------------------------------------------------- + END CASE; + + o_read<=o_read_pre AND o_run; + o_rline<=o_vacpt(0); -- Even/Odd line for interlaced video + + o_adrs_pre<=to_integer(o_vacpt) * to_integer(o_stride); + IF o_adrsa='1' THEN + IF o_fload=2 THEN + o_adrs<=to_unsigned(o_hbcpt * N_BURST,32); + o_alt<="1111"; + ELSIF o_fload=1 THEN + o_adrs<=to_unsigned(o_hbcpt * N_BURST,32) + o_stride; + o_alt<="0100"; + ELSE + o_adrs<=to_unsigned(o_adrs_pre + (o_hbcpt * N_BURST),32); + o_alt<=altx(o_vacpt(1 DOWNTO 0) + 1); + END IF; + END IF; + + ------------------------------------------------------ + -- Copy from buffered memory to pixel lines + o_sh<='0'; + CASE o_copy IS + WHEN sWAIT => + o_copyv(0)<='0'; + IF o_copylev>0 AND o_copyv(0)='0' THEN + o_copy<=sCOPY; + IF o_off(0)>0 AND o_primv(0)='1' THEN + o_copy<=sSHIFT; + END IF; + o_altx<=o_alt; + END IF; + o_adturn<='0'; + o_pshift<=o_off(0) -1; + IF o_primv(0)='1' THEN + -- First memcopy of a horizontal line, carriage return ! + o_ihsizem<=o_ihsize + o_off(0) - 2; + o_hacc <=o_hacc_ini; + o_hacc_next<=o_hacc_ini + 2*o_ihsize; + o_hacpt <=x"000"; + o_dcpt<=0; + o_dshi<=2; + o_acpt<=0; + o_first<='1'; + o_last<='0'; + END IF; + + IF o_bibv(0)='0' THEN + o_ad<=0; + ELSE + o_ad<=BLEN; + END IF; + + WHEN sSHIFT => + o_hacpt<=o_hacpt+1; + o_sh<='1'; + o_acpt<=(o_acpt+1) MOD 16; + IF shift_onext(o_acpt,o_format) THEN + o_ad<=(o_ad+1) MOD (2*BLEN); + END IF; + o_pshift<=o_pshift-1; + IF o_pshift=0 THEN + o_copy<=sCOPY; + END IF; + + WHEN sCOPY => + -- dshi : Force shift first two or three pixels of each line + IF o_dshi=0 THEN + dif_v:=(o_hacc_next - 2*o_hsize + (8*OHRES)) MOD (8*OHRES); + IF dif_v>=4*OHRES THEN + o_hacc<=o_hacc_next; + o_hacc_next<=o_hacc_next + 2*o_ihsize; + hcarry_v:=false; + ELSE + o_hacc<=dif_v; + o_hacc_next<=(dif_v + 2*o_ihsize + (4*OHRES)) MOD (4*OHRES); + hcarry_v:=true; + END IF; + o_dcpt<=(o_dcpt+1) MOD 4096; + ELSE + o_dshi<=o_dshi-1; + hcarry_v:=false; + END IF; + IF o_dshi<=1 THEN + o_copyv(0)<='1'; + END IF; + IF hcarry_v THEN + o_hacpt<=o_hacpt+1; + o_last <=to_std_logic(o_hacpt>=o_ihsizem); + END IF; + + IF hcarry_v OR o_dshi>0 THEN + o_sh<='1'; + o_acpt<=(o_acpt+1) MOD 16; + + -- Shift two more pixels to the right before ending line. + o_last1<=o_last; + o_last2<=o_last1; + + IF shift_onext(o_acpt,o_format) THEN + o_ad<=(o_ad+1) MOD (2*BLEN); + END IF; + + IF o_adturn='1' AND (shift_onext((o_acpt+1) MOD 16,o_format)) AND + (((o_ad MOD BLEN=0) AND o_lastv(0)='0') OR o_last2='1') THEN + o_copy<=sWAIT; + lev_dec_v:='1'; + END IF; + + IF o_ad MOD BLEN=4 THEN + o_adturn<='1'; + END IF; + END IF; + END CASE; + + o_acpt1<=o_acpt; o_acpt2<=o_acpt1; o_acpt3<=o_acpt2; o_acpt4<=o_acpt3; + o_ad1<=o_ad; o_ad2<=o_ad1; o_ad3<=o_ad2; + o_sh1<=o_sh; o_sh2<=o_sh1; o_sh3<=o_sh2; o_sh4<=o_sh3; + o_lastt1<=o_last; o_lastt2<=o_lastt1; o_lastt3<=o_lastt2; + + ------------------------------------------------------ + IF o_sh3='1' THEN + shift_v:=shift_opack(o_acpt4,o_shift,o_dr,o_format); + o_shift<=shift_v; + o_hpixs<=shift_opix(shift_v,o_format); + END IF; + + IF o_sh4='1' THEN + hpix_v:=o_hpixs; + IF o_format(4)='1' THEN -- Swap B <-> R + hpix_v:=(r=>o_hpixs.b,g=>o_hpixs.g,b=>o_hpixs.r); + END IF; + IF o_format(2 DOWNTO 0)="011" THEN + -- 8bpp indexed colour mode + hpix_v:=(r=>o_fb_pal_dr(23 DOWNTO 16),g=>o_fb_pal_dr(15 DOWNTO 8), + b=>o_fb_pal_dr(7 DOWNTO 0)); + END IF; + o_hpix0<=hpix_v; + o_hpix1<=o_hpix0; + o_hpix2<=o_hpix1; + o_hpix3<=o_hpix2; + + IF o_first='1' THEN + -- Left edge. Duplicate first pixel + o_hpix1<=hpix_v; + o_hpix2<=hpix_v; + o_first<='0'; + END IF; + IF o_lastt3='1' THEN + -- Right edge. Keep last pixel. + o_hpix0<=o_hpix0; + END IF; + END IF; + + ------------------------------------------------------ + -- lev_inc : read start + -- lev_dec : end of copy + -- READLEV : Number of ongoing Avalon Reads + IF lev_dec_v='0' AND lev_inc_v='1' THEN + o_readlev<=o_readlev+1; + ELSIF lev_dec_v='1' AND lev_inc_v='0' THEN + o_readlev<=o_readlev-1; + END IF; + + -- COPYLEV : Number of ongoing copies to line buffers + IF lev_dec_v='1' AND o_readdataack='0' THEN + o_copylev<=o_copylev-1; + ELSIF lev_dec_v='0' AND o_readdataack='1' THEN + o_copylev<=o_copylev+1; + END IF; + + -- FIFOs + IF lev_dec_v='1' THEN + o_primv(0 TO 1)<=o_primv(1 TO 2); -- First buffer of line + o_lastv(0 TO 1)<=o_lastv(1 TO 2); -- Last buffer of line + o_bibv (0 TO 1)<=o_bibv (1 TO 2); -- Double buffer select + o_off (0 TO 1)<=o_off (1 TO 2); -- Start offset + END IF; + + IF lev_inc_v='1' THEN + IF o_readlev=0 OR (o_readlev=1 AND lev_dec_v='1') THEN + o_primv(0)<=prim_v; + o_lastv(0)<=last_v; + o_bibv (0)<=bib_v; + o_off (0)<=off_v; + ELSIF (o_readlev=1 AND lev_dec_v='0') OR + (o_readlev=2 AND lev_dec_v='1') THEN + o_primv(1)<=prim_v; + o_lastv(1)<=last_v; + o_bibv (1)<=bib_v; + o_off (1)<=off_v; + END IF; + o_primv(2)<=prim_v; + o_lastv(2)<=last_v; + o_bibv (2)<=bib_v; + o_off (2)<=off_v; + END IF; + + ------------------------------------------------------ + END IF; + END PROCESS Scalaire; + + o_h_poly_a<=to_integer(o_hfrac1(11 DOWNTO 12-FRAC)); + o_v_poly_a<=to_integer(o_vfrac(11 DOWNTO 12-FRAC)); + + o_h_poly_dr<=o_h_poly(o_h_poly_a) WHEN rising_edge(o_clk); + o_v_poly_dr<=o_v_poly(o_v_poly_a) WHEN rising_edge(o_clk); + + -- Framebuffer palette + GenPal1:IF PALETTE GENERATE + Tempera1:PROCESS(pal1_clk) IS + BEGIN + IF rising_edge(pal1_clk) THEN + IF pal1_wr='1' THEN + pal1_mem(to_integer(pal1_a))<=pal1_dw; + END IF; + pal1_dr<=pal1_mem(to_integer(pal1_a)); + END IF; + END PROCESS; + + pal_idx <= shift_opack(o_acpt4,o_shift,o_dr,o_format)(0 TO 7); + pal_idx_lsb <= pal_idx(0) WHEN rising_edge(o_clk); + o_fb_pal_dr_x2 <= pal1_mem(to_integer(pal_idx(7 DOWNTO 1))) WHEN rising_edge(o_clk); + END GENERATE GenPal1; + + GenPal2:IF PALETTE and PALETTE2 GENERATE + Tempera2:PROCESS(pal2_clk) IS + BEGIN + IF rising_edge(pal2_clk) THEN + IF pal2_wr='1' THEN + pal2_mem(to_integer(pal2_a))<=pal2_dw; + END IF; + pal2_dr<=pal2_mem(to_integer(pal2_a)); + END IF; + END PROCESS; + + o_fb_pal_dr2 <= pal2_mem(to_integer(pal_idx(7 DOWNTO 0))) WHEN rising_edge(o_clk); + o_fb_pal_dr <= o_fb_pal_dr2 when pal_n = '1' else o_fb_pal_dr_x2(47 DOWNTO 24) WHEN pal_idx_lsb = '1' ELSE o_fb_pal_dr_x2(23 DOWNTO 0); + END GENERATE GenPal2; + + GenPal1not2:IF PALETTE and not PALETTE2 GENERATE + o_fb_pal_dr <= o_fb_pal_dr_x2(47 DOWNTO 24) WHEN pal_idx_lsb = '1' ELSE o_fb_pal_dr_x2(23 DOWNTO 0); + END GENERATE GenPal1not2; + + GenNoPal:IF NOT PALETTE GENERATE + o_fb_pal_dr<=x"000000"; + END GENERATE GenNoPal; + + ----------------------------------------------------------------------------- + -- Polyphase ROMs + Polikarpov:PROCESS(poly_clk) IS + BEGIN + IF rising_edge(poly_clk) THEN + IF poly_wr='1' THEN + poly_tdw(8+9*(3-to_integer(poly_a(1 DOWNTO 0))) DOWNTO + 9*(3-to_integer(poly_a(1 DOWNTO 0))))<=poly_dw; + END IF; + + poly_h_wr<=poly_wr AND NOT poly_a(FRAC+2); + poly_v_wr<=poly_wr AND poly_a(FRAC+2); + poly_a2<=poly_a(FRAC+1 DOWNTO 2); + + IF poly_h_wr='1' THEN + o_h_poly(to_integer(poly_a2))<=poly_tdw; + END IF; + IF poly_v_wr='1' THEN + o_v_poly(to_integer(poly_a2))<=poly_tdw; + END IF; + END IF; + END PROCESS Polikarpov; + + ----------------------------------------------------------------------------- + -- Horizontal Scaler + HSCAL:PROCESS(o_clk) IS + VARIABLE div_v : unsigned(18 DOWNTO 0); + VARIABLE dir_v : unsigned(11 DOWNTO 0); + BEGIN + IF rising_edge(o_clk) THEN + -- Pipeline signals + ----------------------------------- + -- Pipelined 6 bits non-restoring divider. Cycle 1 + dir_v:=x"000"; + div_v:=to_unsigned(o_hacc * 64,19); + + div_v:=div_v-to_unsigned(o_hsize*64,19); + dir_v(11):=NOT div_v(18); + IF div_v(18)='0' THEN + div_v:=div_v-to_unsigned(o_hsize*32,19); + ELSE + div_v:=div_v+to_unsigned(o_hsize*32,19); + END IF; + dir_v(10):=NOT div_v(18); + o_div<=div_v; + o_dir<=dir_v; + + -- Cycle 2 + div_v:=o_div; + dir_v:=o_dir; + IF div_v(18)='0' THEN + div_v:=div_v-to_unsigned(o_hsize*16,19); + ELSE + div_v:=div_v+to_unsigned(o_hsize*16,19); + END IF; + dir_v( 9):=NOT div_v(18); + + IF div_v(18)='0' THEN + div_v:=div_v-to_unsigned(o_hsize*8,19); + ELSE + div_v:=div_v+to_unsigned(o_hsize*8,19); + END IF; + dir_v(8):=NOT div_v(18); + o_div2<=div_v; + o_dir2<=dir_v; + + -- Cycle 3 + div_v:=o_div2; + dir_v:=o_dir2; + IF FRAC>4 THEN + IF div_v(18)='0' THEN + div_v:=div_v-to_unsigned(o_hsize*4,19); + ELSE + div_v:=div_v+to_unsigned(o_hsize*4,19); + END IF; + dir_v(7):=NOT div_v(18); + IF div_v(18)='0' THEN + div_v:=div_v-to_unsigned(o_hsize*2,19); + ELSE + div_v:=div_v+to_unsigned(o_hsize*2,19); + END IF; + dir_v(6):=NOT div_v(18); + END IF; + + ----------------------------------- + o_hfrac<=dir_v; + o_hfrac1<=o_hfrac; o_hfrac2<=o_hfrac1; + o_hfrac3<=o_hfrac2; o_hfrac4<=o_hfrac3; + + o_copyv(1 TO 8)<=o_copyv(0 TO 7); + + o_dcptv(1)<=o_dcpt; + IF o_dcptv(1)>=o_hsize THEN + o_copyv(2)<='0'; + END IF; + o_dcptv(2)<=o_dcptv(1) MOD OHRES; + o_dcptv(3 TO 8)<=o_dcptv(2 TO 7); + + o_hpixq<=(o_hpix3,o_hpix2,o_hpix1,o_hpix0); + + -- NEAREST / BILINEAR / SHARP BILINEAR --------------- + -- C1 : Pre-calc Sharp Bilinear + o_h_sbil_t<=sbil_frac1(o_hfrac1); + + -- C2 : Select + o_h_frac2<=(OTHERS =>'0'); + CASE o_hmode(1 DOWNTO 0) IS + WHEN "00" => -- Nearest + IF MASK(MASK_NEAREST)='1' THEN + o_h_frac2<=near_frac(o_hfrac2); + END IF; + WHEN "01" => -- Bilinear + IF MASK(MASK_BILINEAR)='1' THEN + o_h_frac2<=bil_frac(o_hfrac2); + END IF; + WHEN "10" => -- Sharp Bilinear + IF MASK(MASK_SHARP_BILINEAR)='1' THEN + o_h_frac2<=sbil_frac2(o_hfrac2,o_h_sbil_t); + END IF; + WHEN OTHERS => + NULL; + END CASE; + + -- C3 : Opposite frac + o_h_bil_t<=bil_calc(o_h_frac2,o_hpixq); + + -- C4 : Nearest / Bilinear / Sharp Bilinear + o_h_bil_pix.r<=bound(o_h_bil_t.r,8+FRAC); + o_h_bil_pix.g<=bound(o_h_bil_t.g,8+FRAC); + o_h_bil_pix.b<=bound(o_h_bil_t.b,8+FRAC); + + -- BICUBIC ------------------------------------------- + -- C1 : Bicubic coefficients A,B,C,D + + -- C2 : Bicubic calc T1 = X.D + C + o_h_bic_abcd1<=bic_calc0(o_hfrac2,(o_hpix3,o_hpix2,o_hpix1,o_hpix0)); + o_h_bic_tt1<=bic_calc1(o_hfrac2, + bic_calc0(o_hfrac2,(o_hpix3,o_hpix2,o_hpix1,o_hpix0))); + + -- C3 : Bicubic calc T2 = X.T1 + B + o_h_bic_abcd2<=o_h_bic_abcd1; + o_h_bic_tt2<=bic_calc2(o_hfrac3,o_h_bic_tt1,o_h_bic_abcd1); + + -- C4 : Bicubic final Y = X.T2 + A + o_h_bic_pix<=bic_calc3(o_hfrac4,o_h_bic_tt2,o_h_bic_abcd2); + + -- POLYPHASE ----------------------------------------- + -- C1 : Read memory + + -- C2 : Filter calc + o_h_poly_dr2<=o_h_poly_dr; + + -- C3 : Add + o_h_poly_t<=poly_calc1(o_h_poly_dr2,o_hpixq); + + -- C4 : Bounding + o_h_poly_pix<=poly_calc2(o_h_poly_t); + + -- C5 : Select interpoler ---------------------------- + o_wadl<=o_dcptv(8); + o_wr<=o_altx AND (o_copyv(8) & o_copyv(8) & o_copyv(8) & o_copyv(8)); + o_ldw<=(x"00",x"00",x"00"); + + CASE o_hmode(2 DOWNTO 0) IS + WHEN "000" | "001" | "010" => -- Nearest | Bilinear | Sharp Bilinear + IF MASK(MASK_NEAREST)='1' OR + MASK(MASK_BILINEAR)='1' OR + MASK(MASK_SHARP_BILINEAR)='1' THEN + o_ldw<=o_h_bil_pix; + END IF; + WHEN "011" => -- BiCubic + IF MASK(MASK_BICUBIC)='1' THEN + o_ldw<=o_h_bic_pix; + END IF; + WHEN OTHERS => -- PolyPhase + IF MASK(MASK_POLY)='1' THEN + o_ldw<=o_h_poly_pix; + END IF; + END CASE; + ------------------------------------------------------ + END IF; + END PROCESS HSCAL; + + ----------------------------------------------------------------------------- + -- Line buffers 4 x OHRES x (R+G+B) + OLBUF:PROCESS(o_clk) IS + BEGIN + IF rising_edge(o_clk) THEN + -- WRITES + IF o_wr(0)='1' THEN o_line0(o_wadl)<=o_ldw; END IF; + IF o_wr(1)='1' THEN o_line1(o_wadl)<=o_ldw; END IF; + IF o_wr(2)='1' THEN o_line2(o_wadl)<=o_ldw; END IF; + IF o_wr(3)='1' THEN o_line3(o_wadl)<=o_ldw; END IF; + + -- READS + o_ldr0<=o_line0(o_radl); + o_ldr1<=o_line1(o_radl); + o_ldr2<=o_line2(o_radl); + o_ldr3<=o_line3(o_radl); + END IF; + END PROCESS OLBUF; + + ----------------------------------------------------------------------------- + -- Output video sweep + OSWEEP:PROCESS(o_clk) IS + BEGIN + IF rising_edge(o_clk) THEN + IF o_ce='1' THEN + -- Output pixels count + IF o_hcpt+1=o_vtotal THEN + o_vcpt_pre3<=0; + ELSE + o_vcpt_pre3<=(o_vcpt_pre3+1) MOD 4096; + END IF; + o_vcpt_pre2<=o_vcpt_pre3; + o_vcpt_pre<=o_vcpt_pre2; + o_vcpt<=o_vcpt_pre; + END IF; + + o_end(0)<=to_std_logic(o_vcpt>=o_vdisp); + o_dev(0)<=to_std_logic(o_hcpt=o_hmin AND o_hcpt<=o_hmax AND + o_vcpt>=o_vmin AND o_vcpt<=o_vmax); + o_hsv(0)<=to_std_logic(o_hcpt>=o_hsstart AND o_hcpt=o_hsstart) OR + (o_vcpt>o_vsstart AND o_vcpt=o_vmin AND o_vcpt_pre2<=o_vmax); + o_hsv(1 TO 5)<=o_hsv(0 TO 4); + o_vsv(1 TO 5)<=o_vsv(0 TO 4); + o_dev(1 TO 5)<=o_dev(0 TO 4); + o_pev(1 TO 5)<=o_pev(0 TO 4); + o_end(1 TO 5)<=o_end(0 TO 4); + + IF o_run='0' THEN + o_hsv(2)<='0'; + o_vsv(2)<='0'; + o_dev(2)<='0'; + o_pev(2)<='0'; + o_end(2)<='0'; + END IF; + + END IF; + END IF; + + END PROCESS OSWEEP; + + ----------------------------------------------------------------------------- + -- Vertical Scaler + VSCAL:PROCESS(o_clk) IS + VARIABLE pixq_v : arr_pix(0 TO 3); + BEGIN + IF rising_edge(o_clk) THEN + IF o_ce='1' THEN + -- CYCLE 1 ----------------------------------------- + -- Read mem + o_radl<=(o_hcpt - o_hmin + OHRES) MOD OHRES; + + -- CYCLE 2 ----------------------------------------- + -- Lines reordering + CASE o_vacpt(1 DOWNTO 0) IS + WHEN "10" => pixq_v:=(o_ldr0,o_ldr1,o_ldr2,o_ldr3); + WHEN "11" => pixq_v:=(o_ldr1,o_ldr2,o_ldr3,o_ldr0); + WHEN "00" => pixq_v:=(o_ldr2,o_ldr3,o_ldr0,o_ldr1); + WHEN OTHERS => pixq_v:=(o_ldr3,o_ldr0,o_ldr1,o_ldr2); + END CASE; + + o_vpixq<=pixq_v; + + -- Bottom edge : replicate last line + IF to_integer(o_vacpt)=o_ivsize THEN + o_vpixq(2)<=pixq_v(2); + END IF; + IF to_integer(o_vacpt)>=o_ivsize+1 THEN + o_vpixq(2)<=pixq_v(1); + o_vpixq(1)<=pixq_v(1); + END IF; + + o_vpixq1<=o_vpixq; + + -- NEAREST / BILINEAR / SHARP BILINEAR ------------- + -- C3 : Pre-calc Sharp Bilinear + o_v_sbil_t<=sbil_frac1(o_vfrac); + + -- C4 : Select + o_v_frac<=(OTHERS =>'0'); + CASE o_vmode(1 DOWNTO 0) IS + WHEN "00" => -- Nearest + IF MASK(MASK_NEAREST)='1' THEN + o_v_frac<=near_frac(o_vfrac); + END IF; + WHEN "01" => -- Bilinear + IF MASK(MASK_BILINEAR)='1' THEN + o_v_frac<=bil_frac(o_vfrac); + END IF; + WHEN "10" => -- Sharp Bilinear + IF MASK(MASK_SHARP_BILINEAR)='1' THEN + o_v_frac<=sbil_frac2(o_vfrac,o_v_sbil_t); + END IF; + WHEN OTHERS => NULL; + END CASE; + + o_v_bil_t<=bil_calc(o_v_frac,o_vpixq1); + + -- C6 : Nearest / Bilinear / Sharp Bilinear + o_v_bil_pix.r<=bound(o_v_bil_t.r,8+FRAC); + o_v_bil_pix.g<=bound(o_v_bil_t.g,8+FRAC); + o_v_bil_pix.b<=bound(o_v_bil_t.b,8+FRAC); + + -- BICUBIC ----------------------------------------- + -- C3 : Bicubic coefficients A,B,C,D + + -- C4 : Bicubic calc T1 = X.D + C + o_v_bic_abcd1<=bic_calc0(o_vfrac,o_vpixq); + o_v_bic_tt1<=bic_calc1(o_vfrac,bic_calc0(o_vfrac,o_vpixq)); + + -- C5 : Bicubic calc T2 = X.T1 + B + o_v_bic_abcd2<=o_v_bic_abcd1; + o_v_bic_tt2<=bic_calc2(o_vfrac,o_v_bic_tt1,o_v_bic_abcd1); + + -- C6 : Bicubic final Y = X.T2 + A + o_v_bic_pix<=bic_calc3(o_vfrac,o_v_bic_tt2,o_v_bic_abcd2); + + -- POLYPHASE --------------------------------------- + -- C3 : Read memory + + -- C4 : Filter calc + o_v_poly_dr2<=o_v_poly_dr; + + -- C5 : Add + o_v_poly_t<=poly_calc1(o_v_poly_dr2,o_vpixq1); + + -- C6 : Bounding + o_v_poly_pix<=poly_calc2(o_v_poly_t); + + -- CYCLE 6 ----------------------------------------- + o_hs<=o_hsv(5); + o_vs<=o_vsv(5); + o_de<=o_dev(5); + o_vbl<=o_end(5); + o_r<=x"00"; + o_g<=x"00"; + o_b<=x"00"; + + CASE o_vmode(2 DOWNTO 0) IS + WHEN "000" | "001" | "010" => -- Nearest | Bilinear | Sharp Bilinear + IF MASK(MASK_NEAREST)='1' OR + MASK(MASK_BILINEAR)='1' OR + MASK(MASK_SHARP_BILINEAR)='1' THEN + o_r<=o_v_bil_pix.r; + o_g<=o_v_bil_pix.g; + o_b<=o_v_bil_pix.b; + END IF; + WHEN "011" => -- BiCubic + IF MASK(MASK_BICUBIC)='1' THEN + o_r<=o_v_bic_pix.r; + o_g<=o_v_bic_pix.g; + o_b<=o_v_bic_pix.b; + END IF; + + WHEN OTHERS => -- Polyphase + IF MASK(MASK_POLY)='1' THEN + o_r<=o_v_poly_pix.r; + o_g<=o_v_poly_pix.g; + o_b<=o_v_poly_pix.b; + END IF; + END CASE; + + IF o_pev(5)='0' THEN + o_r<=o_border(23 DOWNTO 16); -- Copy border colour + o_g<=o_border(15 DOWNTO 8); + o_b<=o_border(7 DOWNTO 0); + END IF; + + ---------------------------------------------------- + END IF; + END IF; + + END PROCESS VSCAL; + + ----------------------------------------------------------------------------- + -- Low Lag syntoniser interface + o_lltune<=(0 => i_vss, + 1 => i_pde, + 2 => i_inter, + 3 => i_flm, + 4 => o_vss, + 5 => i_pce, + 6 => i_clk, + 7 => o_clk, + OTHERS =>'0'); + + ---------------------------------------------------------------------------- +END ARCHITECTURE rtl; diff --git a/sys/audio_out.v b/sys/audio_out.v new file mode 100644 index 0000000..0f748e0 --- /dev/null +++ b/sys/audio_out.v @@ -0,0 +1,296 @@ + +module audio_out +#( + parameter CLK_RATE = 24576000 +) +( + input reset, + input clk, + + //0 - 48KHz, 1 - 96KHz + input sample_rate, + + input [31:0] flt_rate, + input [39:0] cx, + input [7:0] cx0, + input [7:0] cx1, + input [7:0] cx2, + input [23:0] cy0, + input [23:0] cy1, + input [23:0] cy2, + + input [4:0] att, + input [1:0] mix, + + input is_signed, + input [15:0] core_l, + input [15:0] core_r, + + input [15:0] alsa_l, + input [15:0] alsa_r, + + // I2S + output i2s_bclk, + output i2s_lrclk, + output i2s_data, + + // SPDIF + output spdif, + + // Sigma-Delta DAC + output dac_l, + output dac_r +); + +localparam AUDIO_RATE = 48000; +localparam AUDIO_DW = 16; + +localparam CE_RATE = AUDIO_RATE*AUDIO_DW*8; +localparam FILTER_DIV = (CE_RATE/(AUDIO_RATE*32))-1; + +wire [31:0] real_ce = sample_rate ? {CE_RATE[30:0],1'b0} : CE_RATE[31:0]; + +reg mclk_ce; +always @(posedge clk) begin + reg [31:0] cnt; + + mclk_ce = 0; + cnt = cnt + real_ce; + if(cnt >= CLK_RATE) begin + cnt = cnt - CLK_RATE; + mclk_ce = 1; + end +end + +reg i2s_ce; +always @(posedge clk) begin + reg div; + i2s_ce <= 0; + if(mclk_ce) begin + div <= ~div; + i2s_ce <= div; + end +end + +i2s i2s +( + .reset(reset), + + .clk(clk), + .ce(i2s_ce), + + .sclk(i2s_bclk), + .lrclk(i2s_lrclk), + .sdata(i2s_data), + + .left_chan(al), + .right_chan(ar) +); + +spdif toslink +( + .rst_i(reset), + + .clk_i(clk), + .bit_out_en_i(mclk_ce), + + .sample_i({ar,al}), + .spdif_o(spdif) +); + +sigma_delta_dac #(15) sd_l +( + .CLK(clk), + .RESET(reset), + .DACin({~al[15], al[14:0]}), + .DACout(dac_l) +); + +sigma_delta_dac #(15) sd_r +( + .CLK(clk), + .RESET(reset), + .DACin({~ar[15], ar[14:0]}), + .DACout(dac_r) +); + +reg sample_ce; +always @(posedge clk) begin + reg [8:0] div = 0; + reg [1:0] add = 0; + + div <= div + add; + if(!div) begin + div <= 2'd1 << sample_rate; + add <= 2'd1 << sample_rate; + end + + sample_ce <= !div; +end + +reg flt_ce; +always @(posedge clk) begin + reg [31:0] cnt = 0; + + flt_ce = 0; + cnt = cnt + {flt_rate[30:0],1'b0}; + if(cnt >= CLK_RATE) begin + cnt = cnt - CLK_RATE; + flt_ce = 1; + end +end + +reg [15:0] cl,cr; +always @(posedge clk) begin + reg [15:0] cl1,cl2; + reg [15:0] cr1,cr2; + + cl1 <= core_l; cl2 <= cl1; + if(cl2 == cl1) cl <= cl2; + + cr1 <= core_r; cr2 <= cr1; + if(cr2 == cr1) cr <= cr2; +end + +reg a_en1 = 0, a_en2 = 0; +always @(posedge clk, posedge reset) begin + reg [1:0] dly1 = 0; + reg [14:0] dly2 = 0; + + if(reset) begin + dly1 <= 0; + dly2 <= 0; + a_en1 <= 0; + a_en2 <= 0; + end + else begin + if(flt_ce) begin + if(~&dly1) dly1 <= dly1 + 1'd1; + else a_en1 <= 1; + end + + if(sample_ce) begin + if(!dly2[13+sample_rate]) dly2 <= dly2 + 1'd1; + else a_en2 <= 1; + end + end +end + +wire [15:0] acl, acr; +IIR_filter #(.use_params(0)) IIR_filter +( + .clk(clk), + .reset(reset), + + .ce(flt_ce & a_en1), + .sample_ce(sample_ce), + + .cx(cx), + .cx0(cx0), + .cx1(cx1), + .cx2(cx2), + .cy0(cy0), + .cy1(cy1), + .cy2(cy2), + + .input_l({~is_signed ^ cl[15], cl[14:0]}), + .input_r({~is_signed ^ cr[15], cr[14:0]}), + .output_l(acl), + .output_r(acr) +); + +wire [15:0] adl; +DC_blocker dcb_l +( + .clk(clk), + .ce(sample_ce), + .sample_rate(sample_rate), + .mute(~a_en2), + .din(acl), + .dout(adl) +); + +wire [15:0] adr; +DC_blocker dcb_r +( + .clk(clk), + .ce(sample_ce), + .sample_rate(sample_rate), + .mute(~a_en2), + .din(acr), + .dout(adr) +); + +wire [15:0] al, audio_l_pre; +aud_mix_top audmix_l +( + .clk(clk), + .ce(sample_ce), + .att(att), + .mix(mix), + + .core_audio(adl), + .pre_in(audio_r_pre), + .linux_audio(alsa_l), + + .pre_out(audio_l_pre), + .out(al) +); + +wire [15:0] ar, audio_r_pre; +aud_mix_top audmix_r +( + .clk(clk), + .ce(sample_ce), + .att(att), + .mix(mix), + + .core_audio(adr), + .pre_in(audio_l_pre), + .linux_audio(alsa_r), + + .pre_out(audio_r_pre), + .out(ar) +); + +endmodule + +module aud_mix_top +( + input clk, + input ce, + + input [4:0] att, + input [1:0] mix, + + input [15:0] core_audio, + input [15:0] linux_audio, + input [15:0] pre_in, + + output reg [15:0] pre_out = 0, + output reg [15:0] out = 0 +); + +reg signed [16:0] a1, a2, a3, a4; +always @(posedge clk) if (ce) begin + + a1 <= {core_audio[15],core_audio}; + a2 <= a1 + {linux_audio[15],linux_audio}; + + pre_out <= a2[16:1]; + + case(mix) + 0: a3 <= a2; + 1: a3 <= $signed(a2) - $signed(a2[16:3]) + $signed(pre_in[15:2]); + 2: a3 <= $signed(a2) - $signed(a2[16:2]) + $signed(pre_in[15:1]); + 3: a3 <= {a2[16],a2[16:1]} + {pre_in[15],pre_in}; + endcase + + if(att[4]) a4 <= 0; + else a4 <= a3 >>> att[3:0]; + + //clamping + out <= ^a4[16:15] ? {a4[16],{15{a4[15]}}} : a4[15:0]; +end + +endmodule diff --git a/sys/build_id.tcl b/sys/build_id.tcl index 8777a14..bb2dc67 100644 --- a/sys/build_id.tcl +++ b/sys/build_id.tcl @@ -1,25 +1,29 @@ # Build TimeStamp Verilog Module # Jeff Wiencrot - 8/1/2011 +# Sorgelig - 02/11/2019 proc generateBuildID_Verilog {} { # Get the timestamp (see: http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html) - set buildDate [ clock format [ clock seconds ] -format %y%m%d ] - set buildTime [ clock format [ clock seconds ] -format %H%M%S ] + set buildDate "`define BUILD_DATE \"[clock format [ clock seconds ] -format %y%m%d]\"" # Create a Verilog file for output set outputFileName "build_id.v" - set outputFile [open $outputFileName "w"] + + set fileData "" + if { [file exists $outputFileName]} { + set outputFile [open $outputFileName "r"] + set fileData [read $outputFile] + close $outputFile + } - # Output the Verilog source - puts $outputFile "`define BUILD_DATE \"$buildDate\"" - puts $outputFile "`define BUILD_TIME \"$buildTime\"" - close $outputFile - - # Send confirmation message to the Messages window - post_message "Generated build identification Verilog module: [pwd]/$outputFileName" - post_message "Date: $buildDate" - post_message "Time: $buildTime" + if {$buildDate ne $fileData} { + set outputFile [open $outputFileName "w"] + puts -nonewline $outputFile $buildDate + close $outputFile + # Send confirmation message to the Messages window + post_message "Generated: [pwd]/$outputFileName: $buildDate" + } } # Build CDF file diff --git a/sys/ddr_svc.sv b/sys/ddr_svc.sv new file mode 100644 index 0000000..abcd4fa --- /dev/null +++ b/sys/ddr_svc.sv @@ -0,0 +1,108 @@ +// +// Copyright (c) 2020 Alexey Melnikov +// +// +// This source file is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published +// by the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This source file is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// ------------------------------------------ +// + +// 16-bit version + +module ddr_svc +( + input clk, + + input ram_waitrequest, + output [7:0] ram_burstcnt, + output [28:0] ram_addr, + input [63:0] ram_readdata, + input ram_read_ready, + output reg ram_read, + output [63:0] ram_writedata, + output [7:0] ram_byteenable, + output reg ram_write, + + output [7:0] ram_bcnt, + + input [31:3] ch0_addr, + input [7:0] ch0_burst, + output [63:0] ch0_data, + input ch0_req, + output ch0_ready, + + input [31:3] ch1_addr, + input [7:0] ch1_burst, + output [63:0] ch1_data, + input ch1_req, + output ch1_ready +); + +assign ram_burstcnt = ram_burst; +assign ram_byteenable = 8'hFF; +assign ram_addr = ram_address; +assign ram_writedata = 0; + +assign ch0_data = ram_q[0]; +assign ch1_data = ram_q[1]; +assign ch0_ready = ready[0]; +assign ch1_ready = ready[1]; + +reg [7:0] ram_burst; +reg [63:0] ram_q[2]; +reg [31:3] ram_address; +reg [1:0] ack = 0; +reg [1:0] ready; +reg state = 0; +reg ch = 0; + +always @(posedge clk) begin + ready <= 0; + + if(!ram_waitrequest) begin + ram_read <= 0; + ram_write <= 0; + + case(state) + 0: if(ch0_req != ack[0]) begin + ack[0] <= ch0_req; + ram_address <= ch0_addr; + ram_burst <= ch0_burst; + ram_read <= 1; + ch <= 0; + ram_bcnt <= 8'hFF; + state <= 1; + end + else if(ch1_req != ack[1]) begin + ack[1] <= ch1_req; + ram_address <= ch1_addr; + ram_burst <= ch1_burst; + ram_read <= 1; + ch <= 1; + ram_bcnt <= 8'hFF; + state <= 1; + end + 1: begin + if(ram_read_ready) begin + ram_bcnt <= ram_bcnt + 1'd1; + ram_q[ch] <= ram_readdata; + ready[ch] <= 1; + if ((ram_bcnt+2'd2) == ram_burst) state <= 0; + end + end + endcase + end +end + +endmodule diff --git a/sys/gamma_corr.sv b/sys/gamma_corr.sv new file mode 100644 index 0000000..7fd9368 --- /dev/null +++ b/sys/gamma_corr.sv @@ -0,0 +1,122 @@ +module gamma_corr +( + input clk_sys, + input clk_vid, + input ce_pix, + input gamma_en, + input gamma_wr, + input [9:0] gamma_wr_addr, + input [7:0] gamma_value, + input HSync, + input VSync, + input HBlank, + input VBlank, + input [23:0] RGB_in, + output reg HSync_out, + output reg VSync_out, + output reg HBlank_out, + output reg VBlank_out, + output reg [23:0] RGB_out +); + +(* ramstyle="no_rw_check" *) reg [7:0] gamma_curve[768]; + +always @(posedge clk_sys) if (gamma_wr) gamma_curve[gamma_wr_addr] <= gamma_value; +always @(posedge clk_vid) gamma <= gamma_curve[gamma_index]; + +reg [9:0] gamma_index; +reg [7:0] gamma; + +always @(posedge clk_vid) begin + reg [7:0] R_in, G_in, B_in; + reg [7:0] R_gamma, G_gamma; + reg hs,vs,hb,vb; + reg [1:0] ctr = 0; + + if(ce_pix) begin + {R_in,G_in,B_in} <= RGB_in; + hs <= HSync; vs <= VSync; + hb <= HBlank; vb <= VBlank; + + RGB_out <= gamma_en ? {R_gamma,G_gamma,gamma} : {R_in,G_in,B_in}; + HSync_out <= hs; VSync_out <= vs; + HBlank_out <= hb; VBlank_out <= vb; + + ctr <= 1; + gamma_index <= {2'b00,RGB_in[23:16]}; + end + + if (|ctr) ctr <= ctr + 1'd1; + + case(ctr) + 1: begin gamma_index <= {2'b01,G_in}; end + 2: begin R_gamma <= gamma; gamma_index <= {2'b10,B_in}; end + 3: begin G_gamma <= gamma; end + endcase +end + +endmodule + +module gamma_fast +( + input clk_vid, + input ce_pix, + + inout [21:0] gamma_bus, + + input HSync, + input VSync, + input HBlank, + input VBlank, + input DE, + input [23:0] RGB_in, + + output reg HSync_out, + output reg VSync_out, + output reg HBlank_out, + output reg VBlank_out, + output reg DE_out, + output reg [23:0] RGB_out +); + +(* ramstyle="no_rw_check" *) reg [7:0] gamma_curve_r[256]; +(* ramstyle="no_rw_check" *) reg [7:0] gamma_curve_g[256]; +(* ramstyle="no_rw_check" *) reg [7:0] gamma_curve_b[256]; + +assign gamma_bus[21] = 1; +wire clk_sys = gamma_bus[20]; +wire gamma_en = gamma_bus[19]; +wire gamma_wr = gamma_bus[18]; +wire [9:0] gamma_wr_addr = gamma_bus[17:8]; +wire [7:0] gamma_value = gamma_bus[7:0]; + +always @(posedge clk_sys) if (gamma_wr) begin + case(gamma_wr_addr[9:8]) + 0: gamma_curve_r[gamma_wr_addr[7:0]] <= gamma_value; + 1: gamma_curve_g[gamma_wr_addr[7:0]] <= gamma_value; + 2: gamma_curve_b[gamma_wr_addr[7:0]] <= gamma_value; + endcase +end + +reg [7:0] gamma_index_r,gamma_index_g,gamma_index_b; + +always @(posedge clk_vid) begin + reg [7:0] R_in, G_in, B_in; + reg [7:0] R_gamma, G_gamma; + reg hs,vs,hb,vb,de; + + if(ce_pix) begin + {gamma_index_r,gamma_index_g,gamma_index_b} <= RGB_in; + hs <= HSync; vs <= VSync; + hb <= HBlank; vb <= VBlank; + de <= DE; + + RGB_out <= gamma_en ? {gamma_curve_r[gamma_index_r],gamma_curve_g[gamma_index_g],gamma_curve_b[gamma_index_b]} + : {gamma_index_r,gamma_index_g,gamma_index_b}; + HSync_out <= hs; VSync_out <= vs; + HBlank_out <= hb; VBlank_out <= vb; + DE_out <= de; + end +end + +endmodule diff --git a/sys/hdmi_config.sv b/sys/hdmi_config.sv index 0265c5c..775a560 100644 --- a/sys/hdmi_config.sv +++ b/sys/hdmi_config.sv @@ -2,11 +2,15 @@ module hdmi_config ( // Host Side - input iCLK, - input iRST_N, + input iCLK, + input iRST_N, input dvi_mode, input audio_96k, + input [1:0] limited, + input ypbpr, + + output reg done, // I2C Side output I2C_SCL, @@ -24,13 +28,17 @@ i2c #(50_000_000, 20_000) i2c_av ( .CLK(iCLK), - .I2C_SCL(I2C_SCL), // I2C CLOCK - .I2C_SDA(I2C_SDA), // I2C DATA + .I2C_SCL(I2C_SCL), // I2C CLOCK + .I2C_SDA(I2C_SDA), // I2C DATA - .I2C_DATA({8'h72,init_data[LUT_INDEX]}), // DATA:[SLAVE_ADDR,SUB_ADDR,DATA]. 0x72 is the Slave Address of the ADV7513 chip! - .START(mI2C_GO), // START transfer - .END(mI2C_END), // END transfer - .ACK(mI2C_ACK) // ACK + .I2C_ADDR('h39), // 0x39 is the Slave Address of the ADV7513 chip! + .I2C_WLEN(1), + .I2C_WDATA1(init_data[LUT_INDEX][15:8]), // SUB_ADDR + .I2C_WDATA2(init_data[LUT_INDEX][7:0]), // DATA + .START(mI2C_GO), // START transfer + .READ(0), + .END(mI2C_END), // END transfer + .ACK(mI2C_ACK) // ACK ); ////////////////////// Config Control //////////////////////////// @@ -41,6 +49,7 @@ always@(posedge iCLK or negedge iRST_N) begin LUT_INDEX <= 0; mSetup_ST <= 0; mI2C_GO <= 0; + done <= 0; end else begin if(init_data[LUT_INDEX] != 16'hFFFF) begin case(mSetup_ST) @@ -58,13 +67,14 @@ always@(posedge iCLK or negedge iRST_N) begin end endcase end + else done <= 1; end end //////////////////////////////////////////////////////////////////// ///////////////////// Config Data LUT ////////////////////////// -wire [15:0] init_data[58] = +wire [15:0] init_data[82] = '{ 16'h9803, // ADI required Write. @@ -101,10 +111,32 @@ wire [15:0] init_data[58] = {8'h17, 8'b01100010}, // Aspect ratio 16:9 [1]=1, 4:3 [1]=0 - {8'h18, 8'b0100_0110}, // CSC disabled [7]=0. - // CSC Scaling Factor [6:5] b10 = +/- 4.0, -16384 - 16380. - // CSC Equation 3 [4:0] b00110. + {8'h18, ypbpr ? 8'h88 : limited[0] ? 8'h8D : limited[1] ? 8'h8E : 8'h00}, // CSC Scaling Factors and Coefficients for RGB Full->Limited. + {8'h19, ypbpr ? 8'h2E : limited[0] ? 8'hBC : 8'hFE}, // Taken from table in ADV7513 Programming Guide. + {8'h1A, ypbpr ? 8'h18 : 8'h00}, // CSC Channel A. + {8'h1B, ypbpr ? 8'h93 : 8'h00}, + {8'h1C, ypbpr ? 8'h1F : 8'h00}, + {8'h1D, ypbpr ? 8'h3F : 8'h00}, + {8'h1E, ypbpr ? 8'h08 : 8'h01}, + {8'h1F, 8'h00}, + {8'h20, ypbpr ? 8'h03 : 8'h00}, // CSC Channel B. + {8'h21, ypbpr ? 8'h67 : 8'h00}, + {8'h22, ypbpr ? 8'h0B : limited[0] ? 8'h0D : 8'h0E}, + {8'h23, ypbpr ? 8'h71 : limited[0] ? 8'hBC : 8'hFE}, + {8'h24, ypbpr ? 8'h01 : 8'h00}, + {8'h25, ypbpr ? 8'h28 : 8'h00}, + {8'h26, ypbpr ? 8'h00 : 8'h01}, + {8'h27, 8'h00}, + + {8'h28, ypbpr ? 8'h1E : 8'h00}, // CSC Channel C. + {8'h29, ypbpr ? 8'h21 : 8'h00}, + {8'h2A, ypbpr ? 8'h19 : 8'h00}, + {8'h2B, ypbpr ? 8'hB2 : 8'h00}, + {8'h2C, ypbpr ? 8'h08 : limited[0] ? 8'h0D : 8'h0E}, + {8'h2D, ypbpr ? 8'h2D : limited[0] ? 8'hBC : 8'hFE}, + {8'h2E, ypbpr ? 8'h08 : 8'h01}, + {8'h2F, 8'h00}, {8'h3B, 8'b0000_0000}, // Pixel repetition [6:5] b00 AUTO. [4:3] b00 x1 mult of input clock. [2:1] b00 x1 pixel rep to send to HDMI Rx. @@ -122,6 +154,11 @@ wire [15:0] init_data[58] = // Bar Info [3:2] b00 Bars invalid. b01 Bars vertical. b10 Bars horizontal. b11 Bars both. // Scan Info [1:0] b00 (No data). b01 TV. b10 PC. b11 None. + {8'h57, 1'b0, // [7] IT Content. 0 - No. 1 - Yes (type set in register h59). + 3'b000, // [6:4] Color space (ignored for RGB) + (ypbpr | limited) ? 2'b01 : 2'b10, // [3:2] RGB Quantization range + 2'b00}, // [1:0] Non-Uniform Scaled: 00 - None. 01 - Horiz. 10 - Vert. 11 - Both. + 16'h7301, {8'h94, 8'b1000_0000}, // [7]=1 HPD Interrupt ENabled. @@ -142,9 +179,9 @@ wire [15:0] init_data[58] = 16'hAA00, // ADI required Write. 16'hAB40, // ADI required Write. - {8'hAF, 6'b0001_01,~dvi_mode,1'b0}, // [7]=0 HDCP Disabled. + {8'hAF, 6'b0000_01,~dvi_mode,1'b0}, // [7]=0 HDCP Disabled. // [6:5] must be b00! - // [4]=1 Current frame IS HDCP encrypted!??? (HDCP disabled anyway?) + // [4]=0 Current frame is unencrypted // [3:2] must be b01! // [1]=1 HDMI Mode. // [0] must be b0! diff --git a/sys/hdmi_lite.sv b/sys/hdmi_lite.sv deleted file mode 100644 index ef80764..0000000 --- a/sys/hdmi_lite.sv +++ /dev/null @@ -1,395 +0,0 @@ -//============================================================================ -// -// HDMI Lite output module -// Copyright (C) 2017 Sorgelig -// -// 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. -// -//============================================================================ - - -module hdmi_lite -( - input reset, - - input clk_video, - input ce_pixel, - input video_vs, - input video_de, - input [23:0] video_d, - - input clk_hdmi, - input hdmi_hde, - input hdmi_vde, - output reg hdmi_de, - output [23:0] hdmi_d, - - input [11:0] screen_w, - input [11:0] screen_h, - input quadbuf, - - // 0-3 => scale 1-4 - input [1:0] scale_x, - input [1:0] scale_y, - input scale_auto, - - input clk_vbuf, - output [27:0] vbuf_address, - input [127:0] vbuf_readdata, - output [127:0] vbuf_writedata, - output [7:0] vbuf_burstcount, - output [15:0] vbuf_byteenable, - input vbuf_waitrequest, - input vbuf_readdatavalid, - output reg vbuf_read, - output reg vbuf_write -); - -localparam [7:0] burstsz = 64; - -reg [1:0] nbuf = 0; -wire [27:0] read_buf = {4'd2, 3'b000, (quadbuf ? nbuf-2'd1 : 2'b00), 19'd0}; -wire [27:0] write_buf = {4'd2, 3'b000, (quadbuf ? nbuf+2'd1 : 2'b00), 19'd0}; - -assign vbuf_address = vbuf_write ? vbuf_waddress : vbuf_raddress; -assign vbuf_burstcount = vbuf_write ? vbuf_wburstcount : vbuf_rburstcount; - -wire [95:0] hf_out; -wire [7:0] hf_usedw; -reg hf_reset = 0; - -vbuf_fifo out_fifo -( - .aclr(hf_reset), - - .wrclk(clk_vbuf), - .wrreq(vbuf_readdatavalid), - .data({vbuf_readdata[96+:24],vbuf_readdata[64+:24],vbuf_readdata[32+:24],vbuf_readdata[0+:24]}), - .wrusedw(hf_usedw), - - .rdclk(~clk_hdmi), - .rdreq(hf_rdreq), - .q(hf_out) -); - -reg [11:0] rd_stride; -wire [7:0] rd_burst = (burstsz < rd_stride) ? burstsz : rd_stride[7:0]; - -reg [27:0] vbuf_raddress; -reg [7:0] vbuf_rburstcount; -always @(posedge clk_vbuf) begin - reg [18:0] rdcnt; - reg [7:0] bcnt; - reg vde1, vde2; - reg [1:0] mcnt; - reg [1:0] my; - reg [18:0] fsz; - reg [11:0] strd; - - vde1 <= hdmi_vde; - vde2 <= vde1; - - if(vbuf_readdatavalid) begin - rdcnt <= rdcnt + 1'd1; - if(bcnt) bcnt <= bcnt - 1'd1; - vbuf_raddress <= vbuf_raddress + 1'd1; - end - - if(!bcnt && reading) reading <= 0; - - vbuf_read <= 0; - if(~vbuf_waitrequest) begin - if(!hf_reset && rdcnt=off_x) && (x<(vh_width+off_x)) && (y>=off_y) && (y<(vh_height+off_y)) && !hload && !pcnt; -wire de_in = hdmi_hde & hdmi_vde; - -always @(posedge clk_hdmi) begin - reg [71:0] px_out; - reg [1:0] mx; - reg vde; - - vde <= hdmi_vde; - - if(vde & ~hdmi_vde) begin - off_x <= (screen_w>v_width) ? (screen_w - v_width)>>1 : 12'd0; - off_y <= (screen_h>v_height) ? (screen_h - v_height)>>1 : 12'd0; - vh_height <= v_height; - vh_width <= v_width; - mx <= mult_x; - end - - pcnt <= pcnt + 1'd1; - if(pcnt == mx) begin - pcnt <= 0; - hload <= hload + 1'd1; - end - - if(~de_in || x (screen_h/2)) ? 2'b00 : (video_y > (screen_h/3)) ? 2'b01 : (video_y > (screen_h/4)) ? 2'b10 : 2'b11; -wire [1:0] tm_x = (l1_width > (screen_w/2)) ? 2'b00 : (l1_width > (screen_w/3)) ? 2'b01 : (l1_width > (screen_w/4)) ? 2'b10 : 2'b11; -wire [1:0] tm_xy = (tm_x < tm_y) ? tm_x : tm_y; -wire [1:0] tmf_y = scale_auto ? tm_xy : scale_y; -wire [1:0] tmf_x = scale_auto ? tm_xy : scale_x; -wire [11:0] t_height = video_y + (tmf_y[0] ? video_y : 12'd0) + (tmf_y[1] ? video_y<<1 : 12'd0); -wire [11:0] t_width = l1_width + (tmf_x[0] ? l1_width : 12'd0) + (tmf_x[1] ? l1_width<<1 : 12'd0); -wire [23:0] t_fsz = l1_stride * t_height; - -reg [11:0] l1_width; -reg [11:0] l1_stride; -always @(posedge clk_video) begin - reg [7:0] loaded = 0; - reg [11:0] strd = 0; - reg old_de = 0; - reg old_vs = 0; - - old_vs <= video_vs; - if(~old_vs & video_vs) begin - cur_addr<= write_buf; - video_x <= 0; - video_y <= 0; - loaded <= 0; - strd <= 0; - nbuf <= nbuf + 1'd1; - - stride <= l1_stride; - framesz <= t_fsz[18:0]; - v_height<= t_height; - v_width <= t_width; - mult_x <= tmf_x; - mult_y <= tmf_y; - end - - if(pix_wr) begin - case(video_x[1:0]) - 0: pix_acc <= video_d; // zeroes upper bits too - 1: pix_acc[47:24] <= video_d; - 2: pix_acc[71:48] <= video_d; - 3: loaded <= loaded + 1'd1; - endcase - if(video_x= burstsz) || (old_de & ~video_de)) begin - if(loaded + infifo_tail) begin - flush_size <= loaded + infifo_tail; - flush_addr <= cur_addr; - flush_req <= ~flush_req; - loaded <= 0; - strd <= strd + loaded; - end - - cur_addr <= cur_addr + loaded + infifo_tail; - if(~video_de) begin - if(video_y -// Copyright (c) 2017,2018 Sorgelig +// Copyright (c) 2017-2020 Alexey Melnikov // // This source file is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published @@ -20,34 +18,65 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////// +// altera message_off 10665 // // Use buffer to access SD card. It's time-critical part. // -// for synchronous projects default value for PS2DIV is fine for any frequency of system clock. -// clk_ps2 = CLK_SYS/(PS2DIV*2) -// - // WIDE=1 for 16 bit file I/O // VDNUM 1-4 -module hps_io #(parameter STRLEN=0, PS2DIV=2000, WIDE=0, VDNUM=1, PS2WE=0) +module hps_io #(parameter STRLEN=0, PS2DIV=0, WIDE=0, VDNUM=1, PS2WE=0) ( input clk_sys, - inout [44:0] HPS_BUS, + inout [45:0] HPS_BUS, // parameter STRLEN and the actual length of conf_str have to match input [(8*STRLEN)-1:0] conf_str, - output reg [15:0] joystick_0, - output reg [15:0] joystick_1, + // buttons up to 32 + output reg [31:0] joystick_0, + output reg [31:0] joystick_1, + output reg [31:0] joystick_2, + output reg [31:0] joystick_3, + output reg [31:0] joystick_4, + output reg [31:0] joystick_5, + + // analog -127..+127, Y: [15:8], X: [7:0] output reg [15:0] joystick_analog_0, output reg [15:0] joystick_analog_1, + output reg [15:0] joystick_analog_2, + output reg [15:0] joystick_analog_3, + output reg [15:0] joystick_analog_4, + output reg [15:0] joystick_analog_5, + + // paddle 0..255 + output reg [7:0] paddle_0, + output reg [7:0] paddle_1, + output reg [7:0] paddle_2, + output reg [7:0] paddle_3, + output reg [7:0] paddle_4, + output reg [7:0] paddle_5, + + // spinner [7:0] -128..+127, [8] - toggle with every update + output reg [8:0] spinner_0, + output reg [8:0] spinner_1, + output reg [8:0] spinner_2, + output reg [8:0] spinner_3, + output reg [8:0] spinner_4, + output reg [8:0] spinner_5, output [1:0] buttons, output forced_scandoubler, + output direct_video, + + output reg [63:0] status, + input [63:0] status_in, + input status_set, + input [15:0] status_menumask, + + input info_req, + input [7:0] info, - output reg [31:0] status, - //toggle to force notify of video mode change input new_vmode, @@ -61,7 +90,7 @@ module hps_io #(parameter STRLEN=0, PS2DIV=2000, WIDE=0, VDNUM=1, PS2WE=0) input [VD:0] sd_rd, // only single sd_rd can be active at any given time input [VD:0] sd_wr, // only single sd_wr can be active at any given time output reg sd_ack, - + // do not use in new projects. // CID and CSD are fake except CSD image size field. input sd_conf, @@ -72,21 +101,33 @@ module hps_io #(parameter STRLEN=0, PS2DIV=2000, WIDE=0, VDNUM=1, PS2WE=0) output reg [DW:0] sd_buff_dout, input [DW:0] sd_buff_din, output reg sd_buff_wr, + input [15:0] sd_req_type, // ARM -> FPGA download output reg ioctl_download = 0, // signal indicating an active download - output reg [7:0] ioctl_index, // menu index used to upload the file + output reg [15:0] ioctl_index, // menu index used to upload the file output reg ioctl_wr, - output reg [24:0] ioctl_addr, // in WIDE mode address will be incremented by 2 + output reg [26:0] ioctl_addr, // in WIDE mode address will be incremented by 2 output reg [DW:0] ioctl_dout, + output reg ioctl_upload = 0, // signal indicating an active upload + input [DW:0] ioctl_din, + output reg ioctl_rd, + output reg [31:0] ioctl_file_ext, input ioctl_wait, + // [15]: 0 - unset, 1 - set. [1:0]: 0 - none, 1 - 32MB, 2 - 64MB, 3 - 128MB + // [14]: debug mode: [8]: 1 - phase up, 0 - phase down. [7:0]: amount of shift. + output reg [15:0] sdram_sz, + // RTC MSM6242B layout output reg [64:0] RTC, // Seconds since 1970-01-01 00:00:00 output reg [32:0] TIMESTAMP, + // UART flags + input [15:0] uart_mode, + // ps2 keyboard emulation output ps2_kbd_clk_out, output ps2_kbd_data_out, @@ -105,36 +146,48 @@ module hps_io #(parameter STRLEN=0, PS2DIV=2000, WIDE=0, VDNUM=1, PS2WE=0) // [8] - extended, [9] - pressed, [10] - toggles with every press/release output reg [10:0] ps2_key = 0, - + // [24] - toggles with every event - output reg [24:0] ps2_mouse = 0 + output reg [24:0] ps2_mouse = 0, + output reg [15:0] ps2_mouse_ext = 0, // 15:8 - reserved(additional buttons), 7:0 - wheel movements + + inout [21:0] gamma_bus, + + // for core-specific extensions + inout [35:0] EXT_BUS ); +assign EXT_BUS[31:16] = HPS_BUS[31:16]; +assign EXT_BUS[35:33] = HPS_BUS[35:33]; + +localparam MAX_W = $clog2((512 > (STRLEN+1)) ? 512 : (STRLEN+1))-1; + localparam DW = (WIDE) ? 15 : 7; localparam AW = (WIDE) ? 7 : 8; localparam VD = VDNUM-1; -wire io_wait = ioctl_wait; -wire io_enable= |HPS_BUS[35:34]; wire io_strobe= HPS_BUS[33]; +wire io_enable= HPS_BUS[34]; +wire fp_enable= HPS_BUS[35]; wire io_wide = (WIDE) ? 1'b1 : 1'b0; wire [15:0] io_din = HPS_BUS[31:16]; reg [15:0] io_dout; -assign HPS_BUS[37] = io_wait; +assign HPS_BUS[37] = ioctl_wait; assign HPS_BUS[36] = clk_sys; assign HPS_BUS[32] = io_wide; -assign HPS_BUS[15:0] = io_dout; +assign HPS_BUS[15:0] = EXT_BUS[32] ? EXT_BUS[15:0] : fp_enable ? fp_dout : io_dout; -reg [7:0] cfg; +reg [15:0] cfg; assign buttons = cfg[1:0]; //cfg[2] - vga_scaler handled in sys_top //cfg[3] - csync handled in sys_top assign forced_scandoubler = cfg[4]; //cfg[5] - ypbpr handled in sys_top +assign direct_video = cfg[10]; // command byte read by the io controller -wire [15:0] sd_cmd = +wire [15:0] sd_cmd = { 2'b00, (VDNUM>=4) ? sd_wr[3] : 1'b0, @@ -144,30 +197,649 @@ wire [15:0] sd_cmd = (VDNUM>=4) ? sd_rd[3] : 1'b0, (VDNUM>=3) ? sd_rd[2] : 1'b0, (VDNUM>=2) ? sd_rd[1] : 1'b0, - + 4'h5, sd_conf, 1'b1, sd_wr[0], sd_rd[0] }; -///////////////// calc video parameters ////////////////// +///////////////////////////////////////////////////////// -wire clk_100 = HPS_BUS[43]; -wire clk_vid = HPS_BUS[42]; -wire ce_pix = HPS_BUS[41]; -wire de = HPS_BUS[40]; -wire hs = HPS_BUS[39]; -wire vs = HPS_BUS[38]; -wire vs_hdmi = HPS_BUS[44]; +wire [15:0] vc_dout; +video_calc video_calc +( + .clk_100(HPS_BUS[43]), + .clk_vid(HPS_BUS[42]), + .clk_sys(clk_sys), + .ce_pix(HPS_BUS[41]), + .de(HPS_BUS[40]), + .hs(HPS_BUS[39]), + .vs(HPS_BUS[38]), + .vs_hdmi(HPS_BUS[44]), + .f1(HPS_BUS[45]), + .new_vmode(new_vmode), + + .par_num(byte_cnt[3:0]), + .dout(vc_dout) +); + +///////////////////////////////////////////////////////// + +assign gamma_bus[20:0] = {clk_sys, gamma_en, gamma_wr, gamma_wr_addr, gamma_value}; +reg gamma_en; +reg gamma_wr; +reg [9:0] gamma_wr_addr; +reg [7:0] gamma_value; + +reg [31:0] ps2_key_raw = 0; +wire pressed = (ps2_key_raw[15:8] != 8'hf0); +wire extended = (~pressed ? (ps2_key_raw[23:16] == 8'he0) : (ps2_key_raw[15:8] == 8'he0)); + +reg [MAX_W:0] byte_cnt; + +always@(posedge clk_sys) begin : uio_block + reg [15:0] cmd; + reg [2:0] b_wr; + reg [3:0] stick_idx; + reg [3:0] pdsp_idx; + reg ps2skip = 0; + reg [3:0] stflg = 0; + reg [63:0] status_req; + reg old_status_set = 0; + reg old_info = 0; + reg [7:0] info_n = 0; + + old_status_set <= status_set; + if(~old_status_set & status_set) begin + stflg <= stflg + 1'd1; + status_req <= status_in; + end + + old_info <= info_req; + if(~old_info & info_req) info_n <= info; + + sd_buff_wr <= b_wr[0]; + if(b_wr[2] && (~&sd_buff_addr)) sd_buff_addr <= sd_buff_addr + 1'b1; + b_wr <= (b_wr<<1); + + if(PS2DIV) {kbd_rd,kbd_we,mouse_rd,mouse_we} <= 0; + + gamma_wr <= 0; + + if(~io_enable) begin + if(cmd == 4 && !ps2skip) ps2_mouse[24] <= ~ps2_mouse[24]; + if(cmd == 5 && !ps2skip) begin + ps2_key <= {~ps2_key[10], pressed, extended, ps2_key_raw[7:0]}; + if(ps2_key_raw == 'hE012E07C) ps2_key[9:0] <= 'h37C; // prnscr pressed + if(ps2_key_raw == 'h7CE0F012) ps2_key[9:0] <= 'h17C; // prnscr released + if(ps2_key_raw == 'hF014F077) ps2_key[9:0] <= 'h377; // pause pressed + end + if(cmd == 'h22) RTC[64] <= ~RTC[64]; + if(cmd == 'h24) TIMESTAMP[32] <= ~TIMESTAMP[32]; + cmd <= 0; + byte_cnt <= 0; + sd_ack <= 0; + sd_ack_conf <= 0; + io_dout <= 0; + ps2skip <= 0; + img_mounted <= 0; + end + else if(io_strobe) begin + + io_dout <= 0; + if(~&byte_cnt) byte_cnt <= byte_cnt + 1'd1; + + if(byte_cnt == 0) begin + cmd <= io_din; + + case(io_din) + 'h19: sd_ack_conf <= 1; + 'h17, + 'h18: sd_ack <= 1; + 'h29: io_dout <= {4'hA, stflg}; + 'h2B: io_dout <= 1; + 'h2F: io_dout <= 1; + 'h32: io_dout <= gamma_bus[21]; + 'h36: begin io_dout <= info_n; info_n <= 0; end + 'h39: io_dout <= 1; + endcase + + sd_buff_addr <= 0; + if(io_din == 5) ps2_key_raw <= 0; + end else begin + + case(cmd) + // buttons and switches + 'h01: cfg <= io_din; + 'h02: if(byte_cnt==1) joystick_0[15:0] <= io_din; else joystick_0[31:16] <= io_din; + 'h03: if(byte_cnt==1) joystick_1[15:0] <= io_din; else joystick_1[31:16] <= io_din; + 'h10: if(byte_cnt==1) joystick_2[15:0] <= io_din; else joystick_2[31:16] <= io_din; + 'h11: if(byte_cnt==1) joystick_3[15:0] <= io_din; else joystick_3[31:16] <= io_din; + 'h12: if(byte_cnt==1) joystick_4[15:0] <= io_din; else joystick_4[31:16] <= io_din; + 'h13: if(byte_cnt==1) joystick_5[15:0] <= io_din; else joystick_5[31:16] <= io_din; + + // store incoming ps2 mouse bytes + 'h04: begin + if(PS2DIV) begin + mouse_data <= io_din[7:0]; + mouse_we <= 1; + end + if(&io_din[15:8]) ps2skip <= 1; + if(~&io_din[15:8] && ~ps2skip && !byte_cnt[MAX_W:2]) begin + case(byte_cnt[1:0]) + 1: ps2_mouse[7:0] <= io_din[7:0]; + 2: ps2_mouse[15:8] <= io_din[7:0]; + 3: ps2_mouse[23:16] <= io_din[7:0]; + endcase + case(byte_cnt[1:0]) + 1: ps2_mouse_ext[7:0] <= {io_din[14], io_din[14:8]}; + 2: ps2_mouse_ext[11:8] <= io_din[11:8]; + 3: ps2_mouse_ext[15:12]<= io_din[11:8]; + endcase + end + end + + // store incoming ps2 keyboard bytes + 'h05: begin + if(&io_din[15:8]) ps2skip <= 1; + if(~&io_din[15:8] & ~ps2skip) ps2_key_raw[31:0] <= {ps2_key_raw[23:0], io_din[7:0]}; + if(PS2DIV) begin + kbd_data <= io_din[7:0]; + kbd_we <= 1; + end + end + + // reading config string, returning a byte from string + 'h14: if(byte_cnt < STRLEN + 1) io_dout[7:0] <= conf_str[(STRLEN - byte_cnt)<<3 +:8]; + + // reading sd card status + 'h16: if(!byte_cnt[MAX_W:3]) begin + case(byte_cnt[2:0]) + 1: io_dout <= sd_cmd; + 2: io_dout <= sd_lba[15:0]; + 3: io_dout <= sd_lba[31:16]; + 4: io_dout <= sd_req_type; + endcase + end + + // send SD config IO -> FPGA + // flag that download begins + // sd card knows data is config if sd_dout_strobe is asserted + // with sd_ack still being inactive (low) + 'h19, + // send sector IO -> FPGA + // flag that download begins + 'h17: begin + sd_buff_dout <= io_din[DW:0]; + b_wr <= 1; + end + + // reading sd card write data + 'h18: begin + if(~&sd_buff_addr) sd_buff_addr <= sd_buff_addr + 1'b1; + io_dout <= sd_buff_din; + end + + // joystick analog + 'h1a: if(!byte_cnt[MAX_W:2]) begin + case(byte_cnt[1:0]) + 1: {pdsp_idx,stick_idx} <= io_din[7:0]; // first byte is joystick index + 2: case(stick_idx) + 0: joystick_analog_0 <= io_din; + 1: joystick_analog_1 <= io_din; + 2: joystick_analog_2 <= io_din; + 3: joystick_analog_3 <= io_din; + 4: joystick_analog_4 <= io_din; + 5: joystick_analog_5 <= io_din; + 15: case(pdsp_idx) + 0: paddle_0 <= io_din[7:0]; + 1: paddle_1 <= io_din[7:0]; + 2: paddle_2 <= io_din[7:0]; + 3: paddle_3 <= io_din[7:0]; + 4: paddle_4 <= io_din[7:0]; + 5: paddle_5 <= io_din[7:0]; + 8: spinner_0 <= {~spinner_0[8],io_din[7:0]}; + 9: spinner_1 <= {~spinner_1[8],io_din[7:0]}; + 10: spinner_2 <= {~spinner_2[8],io_din[7:0]}; + 11: spinner_3 <= {~spinner_3[8],io_din[7:0]}; + 12: spinner_4 <= {~spinner_4[8],io_din[7:0]}; + 13: spinner_5 <= {~spinner_5[8],io_din[7:0]}; + endcase + endcase + endcase + end + + // notify image selection + 'h1c: begin + img_mounted <= io_din[VD:0] ? io_din[VD:0] : 1'b1; + img_readonly <= io_din[7]; + end + + // send image info + 'h1d: if(byte_cnt<5) img_size[{byte_cnt-1'b1, 4'b0000} +:16] <= io_din; + + // status, 64bit version + 'h1e: if(!byte_cnt[MAX_W:3]) begin + case(byte_cnt[2:0]) + 1: status[15:00] <= io_din; + 2: status[31:16] <= io_din; + 3: status[47:32] <= io_din; + 4: status[63:48] <= io_din; + endcase + end + + // reading keyboard LED status + 'h1f: io_dout <= {|PS2WE, 2'b01, ps2_kbd_led_status[2], ps2_kbd_led_use[2], ps2_kbd_led_status[1], ps2_kbd_led_use[1], ps2_kbd_led_status[0], ps2_kbd_led_use[0]}; + + // reading ps2 keyboard/mouse control + 'h21: if(PS2DIV) begin + if(byte_cnt == 1) begin + io_dout <= kbd_data_host; + kbd_rd <= 1; + end + else + if(byte_cnt == 2) begin + io_dout <= mouse_data_host; + mouse_rd <= 1; + end + end + + //RTC + 'h22: RTC[(byte_cnt-6'd1)<<4 +:16] <= io_din; + + //Video res. + 'h23: if(!byte_cnt[MAX_W:4]) io_dout <= vc_dout; + + //RTC + 'h24: TIMESTAMP[(byte_cnt-6'd1)<<4 +:16] <= io_din; + + //UART flags + 'h28: io_dout <= uart_mode; + + //status set + 'h29: if(!byte_cnt[MAX_W:3]) begin + case(byte_cnt[2:0]) + 1: io_dout <= status_req[15:00]; + 2: io_dout <= status_req[31:16]; + 3: io_dout <= status_req[47:32]; + 4: io_dout <= status_req[63:48]; + endcase + end + + //menu mask + 'h2E: if(byte_cnt == 1) io_dout <= status_menumask; + + //sdram size set + 'h31: if(byte_cnt == 1) sdram_sz <= io_din; + + // Gamma + 'h32: gamma_en <= io_din[0]; + 'h33: begin + gamma_wr_addr <= {(byte_cnt[1:0]-1'b1),io_din[15:8]}; + {gamma_wr, gamma_value} <= {1'b1,io_din[7:0]}; + if (byte_cnt[1:0] == 3) byte_cnt <= 1; + end + endcase + end + end +end + + +/////////////////////////////// PS2 /////////////////////////////// +generate + if(PS2DIV) begin + reg clk_ps2; + always @(posedge clk_sys) begin + integer cnt; + cnt <= cnt + 1'd1; + if(cnt == PS2DIV) begin + clk_ps2 <= ~clk_ps2; + cnt <= 0; + end + end + + reg [7:0] kbd_data; + reg kbd_we; + wire [8:0] kbd_data_host; + reg kbd_rd; + + ps2_device keyboard + ( + .clk_sys(clk_sys), + + .wdata(kbd_data), + .we(kbd_we), + + .ps2_clk(clk_ps2), + .ps2_clk_out(ps2_kbd_clk_out), + .ps2_dat_out(ps2_kbd_data_out), + + .ps2_clk_in(ps2_kbd_clk_in || !PS2WE), + .ps2_dat_in(ps2_kbd_data_in || !PS2WE), + + .rdata(kbd_data_host), + .rd(kbd_rd) + ); + + reg [7:0] mouse_data; + reg mouse_we; + wire [8:0] mouse_data_host; + reg mouse_rd; + + ps2_device mouse + ( + .clk_sys(clk_sys), + + .wdata(mouse_data), + .we(mouse_we), + + .ps2_clk(clk_ps2), + .ps2_clk_out(ps2_mouse_clk_out), + .ps2_dat_out(ps2_mouse_data_out), + + .ps2_clk_in(ps2_mouse_clk_in || !PS2WE), + .ps2_dat_in(ps2_mouse_data_in || !PS2WE), + + .rdata(mouse_data_host), + .rd(mouse_rd) + ); + end + else begin + assign ps2_kbd_clk_out = 0; + assign ps2_kbd_data_out = 0; + assign ps2_mouse_clk_out = 0; + assign ps2_mouse_data_out = 0; + end +endgenerate + +/////////////////////////////// DOWNLOADING /////////////////////////////// + +localparam FIO_FILE_TX = 8'h53; +localparam FIO_FILE_TX_DAT = 8'h54; +localparam FIO_FILE_INDEX = 8'h55; +localparam FIO_FILE_INFO = 8'h56; + +reg [15:0] fp_dout; +always@(posedge clk_sys) begin : fio_block + reg [15:0] cmd; + reg [2:0] cnt; + reg has_cmd; + reg [26:0] addr; + reg wr; + + ioctl_rd <= 0; + ioctl_wr <= wr; + wr <= 0; + + if(~fp_enable) has_cmd <= 0; + else begin + if(io_strobe) begin + + if(!has_cmd) begin + cmd <= io_din; + has_cmd <= 1; + cnt <= 0; + end else begin + + case(cmd) + FIO_FILE_INFO: + if(~cnt[1]) begin + case(cnt) + 0: ioctl_file_ext[31:16] <= io_din; + 1: ioctl_file_ext[15:00] <= io_din; + endcase + cnt <= cnt + 1'd1; + end + + FIO_FILE_INDEX: + begin + ioctl_index <= io_din[15:0]; + end + + FIO_FILE_TX: + begin + cnt <= cnt + 1'd1; + case(cnt) + 0: if(io_din[7:0] == 8'hAA) begin + ioctl_addr <= 0; + ioctl_upload <= 1; + ioctl_rd <= 1; + end + else if(io_din[7:0]) begin + addr <= 0; + ioctl_download <= 1; + end + else begin + if(ioctl_download) ioctl_addr <= addr; + ioctl_download <= 0; + ioctl_upload <= 0; + end + + 1: begin + ioctl_addr[15:0] <= io_din; + addr[15:0] <= io_din; + end + + 2: begin + ioctl_addr[26:16] <= io_din[10:0]; + addr[26:16] <= io_din[10:0]; + end + endcase + end + + FIO_FILE_TX_DAT: + if(ioctl_download) begin + ioctl_addr <= addr; + ioctl_dout <= io_din[DW:0]; + wr <= 1; + addr <= addr + (WIDE ? 2'd2 : 2'd1); + end + else begin + ioctl_addr <= ioctl_addr + (WIDE ? 2'd2 : 2'd1); + fp_dout <= ioctl_din; + ioctl_rd <= 1; + end + endcase + end + end + end +end + +endmodule + +////////////////////////////////////////////////////////////////////////////////// + + +module ps2_device #(parameter PS2_FIFO_BITS=5) +( + input clk_sys, + + input [7:0] wdata, + input we, + + input ps2_clk, + output reg ps2_clk_out, + output reg ps2_dat_out, + output reg tx_empty, + + input ps2_clk_in, + input ps2_dat_in, + + output [8:0] rdata, + input rd +); + + +(* ramstyle = "logic" *) reg [7:0] fifo[1<= 1)&&(tx_state < 9)) begin + ps2_dat_out <= tx_byte[0]; // data bits + tx_byte[6:0] <= tx_byte[7:1]; // shift down + if(tx_byte[0]) + parity <= !parity; + end + + // transmission of parity + if(tx_state == 9) ps2_dat_out <= parity; + + // transmission of stop bit + if(tx_state == 10) ps2_dat_out <= 1; // stop bit is 1 + + // advance state machine + if(tx_state < 11) tx_state <= tx_state + 1'd1; + else tx_state <= 0; + end + end + end + + if(~old_clk & ps2_clk) ps2_clk_out <= 1; + if(old_clk & ~ps2_clk) ps2_clk_out <= ((tx_state == 0) && (rx_state<2)); + +end + +endmodule + + +///////////////// calc video parameters ////////////////// +module video_calc +( + input clk_100, + input clk_vid, + input clk_sys, + + input ce_pix, + input de, + input hs, + input vs, + input vs_hdmi, + input f1, + input new_vmode, + + input [3:0] par_num, + output reg [15:0] dout +); + +always @(posedge clk_sys) begin + case(par_num) + 1: dout <= {|vid_int, vid_nres}; + 2: dout <= vid_hcnt[15:0]; + 3: dout <= vid_hcnt[31:16]; + 4: dout <= vid_vcnt[15:0]; + 5: dout <= vid_vcnt[31:16]; + 6: dout <= vid_htime[15:0]; + 7: dout <= vid_htime[31:16]; + 8: dout <= vid_vtime[15:0]; + 9: dout <= vid_vtime[31:16]; + 10: dout <= vid_pix[15:0]; + 11: dout <= vid_pix[31:16]; + 12: dout <= vid_vtime_hdmi[15:0]; + 13: dout <= vid_vtime_hdmi[31:16]; + default dout <= 0; + endcase +end reg [31:0] vid_hcnt = 0; reg [31:0] vid_vcnt = 0; reg [7:0] vid_nres = 0; -integer hcnt; +reg [1:0] vid_int = 0; always @(posedge clk_vid) begin + integer hcnt; integer vcnt; reg old_vs= 0, old_de = 0, old_vmode = 0; + reg [3:0] resto = 0; reg calch = 0; if(ce_pix) begin @@ -179,15 +851,22 @@ always @(posedge clk_vid) begin if(old_de & ~de) calch <= 0; if(old_vs & ~vs) begin - if(hcnt && vcnt) begin - old_vmode <= new_vmode; - if(vid_hcnt != hcnt || vid_vcnt != vcnt || old_vmode != new_vmode) vid_nres <= vid_nres + 1'd1; - vid_hcnt <= hcnt; - vid_vcnt <= vcnt; + vid_int <= {vid_int[0],f1}; + if(~f1) begin + if(hcnt && vcnt) begin + old_vmode <= new_vmode; + + //report new resolution after timeout + if(resto) resto <= resto + 1'd1; + if(vid_hcnt != hcnt || vid_vcnt != vcnt || old_vmode != new_vmode) resto <= 1; + if(&resto) vid_nres <= vid_nres + 1'd1; + vid_hcnt <= hcnt; + vid_vcnt <= vcnt; + end + vcnt <= 0; + hcnt <= 0; + calch <= 1; end - vcnt <= 0; - hcnt <= 0; - calch <= 1; end end end @@ -247,444 +926,4 @@ always @(posedge clk_100) begin end end - -///////////////////////////////////////////////////////// - -reg [31:0] ps2_key_raw = 0; -wire pressed = (ps2_key_raw[15:8] != 8'hf0); -wire extended = (~pressed ? (ps2_key_raw[23:16] == 8'he0) : (ps2_key_raw[15:8] == 8'he0)); - -always@(posedge clk_sys) begin - reg [15:0] cmd; - reg [9:0] byte_cnt; // counts bytes - reg [2:0] b_wr; - reg [2:0] stick_idx; - reg ps2skip = 0; - - sd_buff_wr <= b_wr[0]; - if(b_wr[2] && (~&sd_buff_addr)) sd_buff_addr <= sd_buff_addr + 1'b1; - b_wr <= (b_wr<<1); - - {kbd_rd,kbd_we,mouse_rd,mouse_we} <= 0; - - if(~io_enable) begin - if(cmd == 4 && !ps2skip) ps2_mouse[24] <= ~ps2_mouse[24]; - if(cmd == 5 && !ps2skip) begin - ps2_key <= {~ps2_key[10], pressed, extended, ps2_key_raw[7:0]}; - if(ps2_key_raw == 'hE012E07C) ps2_key[9:0] <= 'h37C; // prnscr pressed - if(ps2_key_raw == 'h7CE0F012) ps2_key[9:0] <= 'h17C; // prnscr released - if(ps2_key_raw == 'hF014F077) ps2_key[9:0] <= 'h377; // pause pressed - end - if(cmd == 'h22) RTC[64] <= ~RTC[64]; - if(cmd == 'h24) TIMESTAMP[32] <= ~TIMESTAMP[32]; - cmd <= 0; - byte_cnt <= 0; - sd_ack <= 0; - sd_ack_conf <= 0; - io_dout <= 0; - ps2skip <= 0; - end else begin - if(io_strobe) begin - - io_dout <= 0; - if(~&byte_cnt) byte_cnt <= byte_cnt + 1'd1; - - if(byte_cnt == 0) begin - cmd <= io_din; - - case(io_din) - 'h19: sd_ack_conf <= 1; - 'h17, - 'h18: sd_ack <= 1; - endcase - - sd_buff_addr <= 0; - img_mounted <= 0; - if(io_din == 5) ps2_key_raw <= 0; - end else begin - - case(cmd) - // buttons and switches - 'h01: cfg <= io_din[7:0]; - 'h02: joystick_0 <= io_din; - 'h03: joystick_1 <= io_din; - - // store incoming ps2 mouse bytes - 'h04: begin - mouse_data <= io_din[7:0]; - mouse_we <= 1; - if(&io_din[15:8]) ps2skip <= 1; - if(~&io_din[15:8] & ~ps2skip) begin - case(byte_cnt) - 1: ps2_mouse[7:0] <= io_din[7:0]; - 2: ps2_mouse[15:8] <= io_din[7:0]; - 3: ps2_mouse[23:16] <= io_din[7:0]; - endcase - end - end - - // store incoming ps2 keyboard bytes - 'h05: begin - if(&io_din[15:8]) ps2skip <= 1; - if(~&io_din[15:8] & ~ps2skip) ps2_key_raw[31:0] <= {ps2_key_raw[23:0], io_din[7:0]}; - kbd_data <= io_din[7:0]; - kbd_we <= 1; - end - - // reading config string - 'h14: begin - // returning a byte from string - if(byte_cnt < STRLEN + 1) io_dout[7:0] <= conf_str[(STRLEN - byte_cnt)<<3 +:8]; - end - - // reading sd card status - 'h16: begin - case(byte_cnt) - 1: io_dout <= sd_cmd; - 2: io_dout <= sd_lba[15:0]; - 3: io_dout <= sd_lba[31:16]; - endcase - end - - // send SD config IO -> FPGA - // flag that download begins - // sd card knows data is config if sd_dout_strobe is asserted - // with sd_ack still being inactive (low) - 'h19, - // send sector IO -> FPGA - // flag that download begins - 'h17: begin - sd_buff_dout <= io_din[DW:0]; - b_wr <= 1; - end - - // reading sd card write data - 'h18: begin - if(~&sd_buff_addr) sd_buff_addr <= sd_buff_addr + 1'b1; - io_dout <= sd_buff_din; - end - - // joystick analog - 'h1a: begin - // first byte is joystick index - if(byte_cnt == 1) stick_idx <= io_din[2:0]; - if(byte_cnt == 2) begin - if(stick_idx == 0) joystick_analog_0 <= io_din; - if(stick_idx == 1) joystick_analog_1 <= io_din; - end - end - - // notify image selection - 'h1c: begin - img_mounted <= io_din[VD:0] ? io_din[VD:0] : 1'b1; - img_readonly <= io_din[7]; - end - - // send image info - 'h1d: if(byte_cnt<5) img_size[{byte_cnt-1'b1, 4'b0000} +:16] <= io_din; - - // status, 32bit version - 'h1e: if(byte_cnt==1) status[15:0] <= io_din; - else if(byte_cnt==2) status[31:16] <= io_din; - - // reading keyboard LED status - 'h1f: io_dout <= {|PS2WE, 2'b01, ps2_kbd_led_status[2], ps2_kbd_led_use[2], ps2_kbd_led_status[1], ps2_kbd_led_use[1], ps2_kbd_led_status[0], ps2_kbd_led_use[0]}; - - // reading ps2 keyboard/mouse control - 'h21: begin - if(byte_cnt == 1) begin - io_dout <= kbd_data_host; - kbd_rd <= 1; - end - - if(byte_cnt == 2) begin - io_dout <= mouse_data_host; - mouse_rd <= 1; - end - end - //RTC - 'h22: RTC[(byte_cnt-6'd1)<<4 +:16] <= io_din; - - //Video res. - 'h23: begin - case(byte_cnt) - 1: io_dout <= vid_nres; - 2: io_dout <= vid_hcnt[15:0]; - 3: io_dout <= vid_hcnt[31:16]; - 4: io_dout <= vid_vcnt[15:0]; - 5: io_dout <= vid_vcnt[31:16]; - 6: io_dout <= vid_htime[15:0]; - 7: io_dout <= vid_htime[31:16]; - 8: io_dout <= vid_vtime[15:0]; - 9: io_dout <= vid_vtime[31:16]; - 10: io_dout <= vid_pix[15:0]; - 11: io_dout <= vid_pix[31:16]; - 12: io_dout <= vid_vtime_hdmi[15:0]; - 13: io_dout <= vid_vtime_hdmi[31:16]; - endcase - end - - //RTC - 'h24: TIMESTAMP[(byte_cnt-6'd1)<<4 +:16] <= io_din; - endcase - end - end - end -end - - -/////////////////////////////// PS2 /////////////////////////////// -reg clk_ps2; -always @(negedge clk_sys) begin - integer cnt; - cnt <= cnt + 1'd1; - if(cnt == PS2DIV) begin - clk_ps2 <= ~clk_ps2; - cnt <= 0; - end -end - -reg [7:0] kbd_data; -reg kbd_we; -wire [8:0] kbd_data_host; -reg kbd_rd; - -ps2_device keyboard -( - .clk_sys(clk_sys), - - .wdata(kbd_data), - .we(kbd_we), - - .ps2_clk(clk_ps2), - .ps2_clk_out(ps2_kbd_clk_out), - .ps2_dat_out(ps2_kbd_data_out), - - .ps2_clk_in(ps2_kbd_clk_in || !PS2WE), - .ps2_dat_in(ps2_kbd_data_in || !PS2WE), - - .rdata(kbd_data_host), - .rd(kbd_rd) -); - -reg [7:0] mouse_data; -reg mouse_we; -wire [8:0] mouse_data_host; -reg mouse_rd; - -ps2_device mouse -( - .clk_sys(clk_sys), - - .wdata(mouse_data), - .we(mouse_we), - - .ps2_clk(clk_ps2), - .ps2_clk_out(ps2_mouse_clk_out), - .ps2_dat_out(ps2_mouse_data_out), - - .ps2_clk_in(ps2_mouse_clk_in || !PS2WE), - .ps2_dat_in(ps2_mouse_data_in || !PS2WE), - - .rdata(mouse_data_host), - .rd(mouse_rd) -); - - -/////////////////////////////// DOWNLOADING /////////////////////////////// - -localparam UIO_FILE_TX = 8'h53; -localparam UIO_FILE_TX_DAT = 8'h54; -localparam UIO_FILE_INDEX = 8'h55; - -always@(posedge clk_sys) begin - reg [15:0] cmd; - reg has_cmd; - reg [24:0] addr; - reg wr; - - ioctl_wr <= wr; - wr <= 0; - - if(~io_enable) has_cmd <= 0; - else begin - if(io_strobe) begin - - if(!has_cmd) begin - cmd <= io_din; - has_cmd <= 1; - end else begin - - case(cmd) - UIO_FILE_INDEX: - begin - ioctl_index <= io_din[7:0]; - end - - UIO_FILE_TX: - begin - if(io_din[7:0]) begin - addr <= 0; - ioctl_download <= 1; - end else begin - ioctl_addr <= addr; - ioctl_download <= 0; - end - end - - UIO_FILE_TX_DAT: - begin - ioctl_addr <= addr; - ioctl_dout <= io_din[DW:0]; - wr <= 1; - addr <= addr + (WIDE ? 2'd2 : 2'd1); - end - endcase - end - end - end -end - -endmodule - -////////////////////////////////////////////////////////////////////////////////// - - -module ps2_device #(parameter PS2_FIFO_BITS=5) -( - input clk_sys, - - input [7:0] wdata, - input we, - - input ps2_clk, - output reg ps2_clk_out, - output reg ps2_dat_out, - output reg tx_empty, - - input ps2_clk_in, - input ps2_dat_in, - - output [8:0] rdata, - input rd -); - - -(* ramstyle = "logic" *) reg [7:0] fifo[1<= 1)&&(tx_state < 9)) begin - ps2_dat_out <= tx_byte[0]; // data bits - tx_byte[6:0] <= tx_byte[7:1]; // shift down - if(tx_byte[0]) - parity <= !parity; - end - - // transmission of parity - if(tx_state == 9) ps2_dat_out <= parity; - - // transmission of stop bit - if(tx_state == 10) ps2_dat_out <= 1; // stop bit is 1 - - // advance state machine - if(tx_state < 11) tx_state <= tx_state + 1'd1; - else tx_state <= 0; - end - end - end - - if(~old_clk & ps2_clk) ps2_clk_out <= 1; - if(old_clk & ~ps2_clk) ps2_clk_out <= ((tx_state == 0) && (rx_state<2)); - -end - endmodule diff --git a/sys/hq2x.sv b/sys/hq2x.sv index 02b8543..f5fcc71 100644 --- a/sys/hq2x.sv +++ b/sys/hq2x.sv @@ -1,91 +1,84 @@ // // // Copyright (c) 2012-2013 Ludvig Strigeus -// Copyright (c) 2017 Sorgelig +// Copyright (c) 2017,2018 Sorgelig // // This program is GPL Licensed. See COPYING for the full license. // // //////////////////////////////////////////////////////////////////////////////////////////////////////// -// synopsys translate_off -`timescale 1 ps / 1 ps -// synopsys translate_on - -`define BITS_TO_FIT(N) ( \ - N <= 2 ? 0 : \ - N <= 4 ? 1 : \ - N <= 8 ? 2 : \ - N <= 16 ? 3 : \ - N <= 32 ? 4 : \ - N <= 64 ? 5 : \ - N <= 128 ? 6 : \ - N <= 256 ? 7 : \ - N <= 512 ? 8 : \ - N <= 1024 ? 9 : \ - N <= 2048 ?10 : 11 ) +// altera message_off 10030 module Hq2x #(parameter LENGTH, parameter HALF_DEPTH) ( - input clk, - input ce_x4, - input [DWIDTH:0] inputpixel, - input mono, - input disable_hq2x, - input reset_frame, - input reset_line, - input [1:0] read_y, - input [AWIDTH+1:0] read_x, - output [DWIDTH:0] outpixel + input clk, + + input ce_in, + input [DWIDTH:0] inputpixel, + input mono, + input disable_hq2x, + input reset_frame, + input reset_line, + + input ce_out, + input [1:0] read_y, + input hblank, + output [DWIDTH:0] outpixel ); -localparam AWIDTH = `BITS_TO_FIT(LENGTH); +localparam AWIDTH = $clog2(LENGTH)-1; localparam DWIDTH = HALF_DEPTH ? 11 : 23; +localparam DWIDTH1 = DWIDTH+1; -wire [5:0] hqTable[256] = '{ - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, - 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 35, 35, 23, 15, 7, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, - 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 51, 35, 23, 15, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 35, 35, 23, 61, 51, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 7, 35, 23, 61, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 58, 23, 15, 51, 35, 23, 61, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 39, 23, 15, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 39, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 7, 35, 23, 15, 7, 43 -}; +(* romstyle = "MLAB" *) reg [5:0] hqTable[256]; +initial begin + hqTable = '{ + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, + 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 35, 35, 23, 15, 7, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, + 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 51, 35, 23, 15, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 35, 35, 23, 61, 51, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 7, 35, 23, 61, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 58, 23, 15, 51, 35, 23, 61, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 39, 23, 15, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 39, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 7, 35, 23, 15, 7, 43 + }; +end -reg [23:0] Prev0, Prev1, Prev2, Curr0, Curr1, Next0, Next1, Next2; +wire [5:0] hqrule = hqTable[nextpatt]; + +reg [23:0] Prev0, Prev1, Prev2, Curr0, Curr1, Curr2, Next0, Next1, Next2; reg [23:0] A, B, D, F, G, H; reg [7:0] pattern, nextpatt; -reg [1:0] i; -reg [7:0] y; +reg [1:0] cyc; -wire curbuf = y[0]; +reg curbuf; reg prevbuf = 0; wire iobuf = !curbuf; wire diff0, diff1; -DiffCheck diffcheck0(Curr1, (i == 0) ? Prev0 : (i == 1) ? Curr0 : (i == 2) ? Prev2 : Next1, diff0); -DiffCheck diffcheck1(Curr1, (i == 0) ? Prev1 : (i == 1) ? Next0 : (i == 2) ? Curr2 : Next2, diff1); +DiffCheck diffcheck0(Curr1, (cyc == 0) ? Prev0 : (cyc == 1) ? Curr0 : (cyc == 2) ? Prev2 : Next1, diff0); +DiffCheck diffcheck1(Curr1, (cyc == 0) ? Prev1 : (cyc == 1) ? Next0 : (cyc == 2) ? Curr2 : Next2, diff1); wire [7:0] new_pattern = {diff1, diff0, pattern[7:2]}; -wire [23:0] X = (i == 0) ? A : (i == 1) ? Prev1 : (i == 2) ? Next1 : G; -wire [23:0] blend_result; -Blend blender(hqTable[nextpatt], disable_hq2x, Curr0, X, B, D, F, H, blend_result); +wire [23:0] X = (cyc == 0) ? A : (cyc == 1) ? Prev1 : (cyc == 2) ? Next1 : G; +wire [23:0] blend_result_pre; +Blend blender(clk, ce_in, disable_hq2x ? 6'd0 : hqrule, Curr0, X, B, D, F, H, blend_result_pre); -reg Curr2_addr1; -reg [AWIDTH:0] Curr2_addr2; -wire [23:0] Curr2 = HALF_DEPTH ? h2rgb(Curr2tmp) : Curr2tmp; -wire [DWIDTH:0] Curr2tmp; +wire [DWIDTH:0] Curr20tmp; +wire [23:0] Curr20 = HALF_DEPTH ? h2rgb(Curr20tmp) : Curr20tmp; +wire [DWIDTH:0] Curr21tmp; +wire [23:0] Curr21 = HALF_DEPTH ? h2rgb(Curr21tmp) : Curr21tmp; reg [AWIDTH:0] wrin_addr2; reg [DWIDTH:0] wrpix; @@ -109,9 +102,11 @@ hq2x_in #(.LENGTH(LENGTH), .DWIDTH(DWIDTH)) hq2x_in ( .clk(clk), - .rdaddr(Curr2_addr2), - .rdbuf(Curr2_addr1), - .q(Curr2tmp), + .rdaddr(offs), + .rdbuf0(prevbuf), + .rdbuf1(curbuf), + .q0(Curr20tmp), + .q1(Curr21tmp), .wraddr(wrin_addr2), .wrbuf(iobuf), @@ -119,66 +114,82 @@ hq2x_in #(.LENGTH(LENGTH), .DWIDTH(DWIDTH)) hq2x_in .wren(wrin_en) ); -reg [1:0] wrout_addr1; -reg [AWIDTH+1:0] wrout_addr2; -reg wrout_en; -reg [DWIDTH:0] wrdata; +reg [AWIDTH+1:0] read_x; +reg [AWIDTH+1:0] wrout_addr; +reg wrout_en; +reg [DWIDTH1*4-1:0] wrdata, wrdata_pre; +wire [DWIDTH1*4-1:0] outpixel_x4; +reg [DWIDTH1*2-1:0] outpixel_x2; -hq2x_out #(.LENGTH(LENGTH), .DWIDTH(DWIDTH)) hq2x_out +assign outpixel = read_x[0] ? outpixel_x2[DWIDTH1*2-1:DWIDTH1] : outpixel_x2[DWIDTH:0]; + +hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH+1), .DWIDTH(DWIDTH1*4-1)) hq2x_out ( - .clk(clk), + .clock(clk), - .rdaddr(read_x), - .rdbuf(read_y), - .q(outpixel), + .rdaddress({read_x[AWIDTH+1:1],read_y[1]}), + .q(outpixel_x4), - .wraddr(wrout_addr2), - .wrbuf(wrout_addr1), .data(wrdata), + .wraddress(wrout_addr), .wren(wrout_en) ); always @(posedge clk) begin - reg [AWIDTH:0] offs; + if(ce_out) begin + if(read_x[0]) outpixel_x2 <= read_y[0] ? outpixel_x4[DWIDTH1*4-1:DWIDTH1*2] : outpixel_x4[DWIDTH1*2-1:0]; + if(~hblank & ~&read_x) read_x <= read_x + 1'd1; + if(hblank) read_x <= 0; + end +end + +wire [DWIDTH:0] blend_result = HALF_DEPTH ? rgb2h(blend_result_pre) : blend_result_pre[DWIDTH:0]; + +reg [AWIDTH:0] offs; +always @(posedge clk) begin reg old_reset_line; reg old_reset_frame; + reg [3:0] wrdata_finished; + reg [AWIDTH+1:0] waddr; wrout_en <= 0; wrin_en <= 0; - if(ce_x4) begin + if(ce_in) begin - pattern <= new_pattern; + // blend_result has been delayed by 4 cycles + case(cyc) + 0: wrdata[DWIDTH:0] <= blend_result; + 1: wrdata[DWIDTH1+DWIDTH:DWIDTH1] <= blend_result; + 2: wrdata[DWIDTH1*3+DWIDTH:DWIDTH1*3] <= blend_result; + 3: wrdata[DWIDTH1*2+DWIDTH:DWIDTH1*2] <= blend_result; + endcase + + wrdata_finished <= wrdata_finished << 1; + if(wrdata_finished[3]) begin + wrout_en <= 1; + wrout_addr <= waddr; + end if(~&offs) begin - if (i == 0) begin - Curr2_addr1 <= prevbuf; - Curr2_addr2 <= offs; - end - if (i == 1) begin - Prev2 <= Curr2; - Curr2_addr1 <= curbuf; - Curr2_addr2 <= offs; - end - if (i == 2) begin + if (cyc == 1) begin + Prev2 <= Curr20; + Curr2 <= Curr21; Next2 <= HALF_DEPTH ? h2rgb(inputpixel) : inputpixel; wrpix <= inputpixel; wrin_addr2 <= offs; wrin_en <= 1; end - if (i == 3) begin + + if(cyc==3) begin offs <= offs + 1'd1; + waddr <= {offs, curbuf}; + wrdata_finished[0] <= 1; end - - if(HALF_DEPTH) wrdata <= rgb2h(blend_result); - else wrdata <= blend_result; - - wrout_addr1 <= {curbuf, i[1]}; - wrout_addr2 <= {offs, i[1]^i[0]}; - wrout_en <= 1; end - if(i==3) begin + pattern <= new_pattern; + if(cyc==3) begin nextpatt <= {new_pattern[7:6], new_pattern[3], new_pattern[5], new_pattern[2], new_pattern[4], new_pattern[1:0]}; {A, G} <= {Prev0, Next0}; {B, F, H, D} <= {Prev1, Curr2, Next1, Curr0}; @@ -190,19 +201,20 @@ always @(posedge clk) begin {B, F, H, D} <= {F, H, D, B}; end - i <= i + 1'b1; + cyc <= cyc + 1'b1; if(old_reset_line && ~reset_line) begin old_reset_frame <= reset_frame; offs <= 0; - i <= 0; - y <= y + 1'd1; + cyc <= 0; + curbuf <= ~curbuf; prevbuf <= curbuf; + {Prev0, Prev1, Prev2, Curr0, Curr1, Curr2, Next0, Next1, Next2} <= '0; if(old_reset_frame & ~reset_frame) begin - y <= 0; + curbuf <= 0; prevbuf <= 0; end end - + old_reset_line <= reset_line; end end @@ -216,8 +228,8 @@ module hq2x_in #(parameter LENGTH, parameter DWIDTH) input clk, input [AWIDTH:0] rdaddr, - input rdbuf, - output[DWIDTH:0] q, + input rdbuf0, rdbuf1, + output[DWIDTH:0] q0,q1, input [AWIDTH:0] wraddr, input wrbuf, @@ -225,51 +237,27 @@ module hq2x_in #(parameter LENGTH, parameter DWIDTH) input wren ); - localparam AWIDTH = `BITS_TO_FIT(LENGTH); - wire [DWIDTH:0] out[2]; - assign q = out[rdbuf]; +localparam AWIDTH = $clog2(LENGTH)-1; +wire [DWIDTH:0] out[2]; +assign q0 = out[rdbuf0]; +assign q1 = out[rdbuf1]; + +hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf0(clk,data,rdaddr,wraddr,wren && (wrbuf == 0),out[0]); +hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf1(clk,data,rdaddr,wraddr,wren && (wrbuf == 1),out[1]); - hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf0(clk,data,rdaddr,wraddr,wren && (wrbuf == 0),out[0]); - hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf1(clk,data,rdaddr,wraddr,wren && (wrbuf == 1),out[1]); endmodule - -module hq2x_out #(parameter LENGTH, parameter DWIDTH) -( - input clk, - - input [AWIDTH:0] rdaddr, - input [1:0] rdbuf, - output[DWIDTH:0] q, - - input [AWIDTH:0] wraddr, - input [1:0] wrbuf, - input [DWIDTH:0] data, - input wren -); - - localparam AWIDTH = `BITS_TO_FIT(LENGTH*2); - wire [DWIDTH:0] out[4]; - assign q = out[rdbuf]; - - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf0(clk,data,rdaddr,wraddr,wren && (wrbuf == 0),out[0]); - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf1(clk,data,rdaddr,wraddr,wren && (wrbuf == 1),out[1]); - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf2(clk,data,rdaddr,wraddr,wren && (wrbuf == 2),out[2]); - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf3(clk,data,rdaddr,wraddr,wren && (wrbuf == 3),out[3]); -endmodule - - module hq2x_buf #(parameter NUMWORDS, parameter AWIDTH, parameter DWIDTH) ( - input clock, - input [DWIDTH:0] data, - input [AWIDTH:0] rdaddress, - input [AWIDTH:0] wraddress, - input wren, - output logic [DWIDTH:0] q + input clock, + input [DWIDTH:0] data, + input [AWIDTH:0] rdaddress, + input [AWIDTH:0] wraddress, + input wren, + output reg [DWIDTH:0] q ); -logic [DWIDTH:0] ram[0:NUMWORDS-1]; +reg [DWIDTH:0] ram[0:NUMWORDS-1]; always_ff@(posedge clock) begin if(wren) ram[wraddress] <= data; @@ -284,15 +272,14 @@ module DiffCheck ( input [23:0] rgb1, input [23:0] rgb2, - output result + output result ); wire [7:0] r = rgb1[7:1] - rgb2[7:1]; wire [7:0] g = rgb1[15:9] - rgb2[15:9]; wire [7:0] b = rgb1[23:17] - rgb2[23:17]; wire [8:0] t = $signed(r) + $signed(b); - wire [8:0] gx = {g[7], g}; - wire [9:0] y = $signed(t) + $signed(gx); + wire [9:0] y = $signed(t) + $signed({g[7], g}); wire [8:0] u = $signed(r) - $signed(b); wire [9:0] v = $signed({g, 1'b0}) - $signed(t); @@ -300,48 +287,19 @@ module DiffCheck wire y_inside = (y < 10'h60 || y >= 10'h3a0); // if u is inside (-16, 16) - wire u_inside = (u < 9'h10 || u >= 9'h1f0); + wire u_inside = (!u[8:4] || &u[8:4]); //(u < 9'h10 || u >= 9'h1f0); // if v is inside (-24, 24) wire v_inside = (v < 10'h18 || v >= 10'h3e8); assign result = !(y_inside && u_inside && v_inside); -endmodule -module InnerBlend -( - input [8:0] Op, - input [7:0] A, - input [7:0] B, - input [7:0] C, - output [7:0] O -); - - function [10:0] mul8x3; - input [7:0] op1; - input [2:0] op2; - begin - mul8x3 = 11'd0; - if(op2[0]) mul8x3 = mul8x3 + op1; - if(op2[1]) mul8x3 = mul8x3 + {op1, 1'b0}; - if(op2[2]) mul8x3 = mul8x3 + {op1, 2'b00}; - end - endfunction - - wire OpOnes = Op[4]; - wire [10:0] Amul = mul8x3(A, Op[7:5]); - wire [10:0] Bmul = mul8x3(B, {Op[3:2], 1'b0}); - wire [10:0] Cmul = mul8x3(C, {Op[1:0], 1'b0}); - wire [10:0] At = Amul; - wire [10:0] Bt = (OpOnes == 0) ? Bmul : {3'b0, B}; - wire [10:0] Ct = (OpOnes == 0) ? Cmul : {3'b0, C}; - wire [11:0] Res = {At, 1'b0} + Bt + Ct; - assign O = Op[8] ? A : Res[11:4]; endmodule module Blend ( + input clk, + input clk_en, input [5:0] rule, - input disable_hq2x, input [23:0] E, input [23:0] A, input [23:0] B, @@ -351,66 +309,63 @@ module Blend output [23:0] Result ); - reg [1:0] input_ctrl; - reg [8:0] op; - localparam BLEND0 = 9'b1_xxx_x_xx_xx; // 0: A - localparam BLEND1 = 9'b0_110_0_10_00; // 1: (A * 12 + B * 4) >> 4 - localparam BLEND2 = 9'b0_100_0_10_10; // 2: (A * 8 + B * 4 + C * 4) >> 4 - localparam BLEND3 = 9'b0_101_0_10_01; // 3: (A * 10 + B * 4 + C * 2) >> 4 - localparam BLEND4 = 9'b0_110_0_01_01; // 4: (A * 12 + B * 2 + C * 2) >> 4 - localparam BLEND5 = 9'b0_010_0_11_11; // 5: (A * 4 + (B + C) * 6) >> 4 - localparam BLEND6 = 9'b0_111_1_xx_xx; // 6: (A * 14 + B + C) >> 4 - localparam AB = 2'b00; - localparam AD = 2'b01; - localparam DB = 2'b10; - localparam BD = 2'b11; - wire is_diff; - DiffCheck diff_checker(rule[1] ? B : H, rule[0] ? D : F, is_diff); + localparam BLEND1 = 7'b110_10_00; // (A * 12 + B * 4 ) >> 4 + localparam BLEND2 = 7'b100_10_10; // (A * 8 + B * 4 + C * 4) >> 4 + localparam BLEND3 = 7'b101_10_01; // (A * 10 + B * 4 + C * 2) >> 4 + localparam BLEND4 = 7'b110_01_01; // (A * 12 + B * 2 + C * 2) >> 4 + localparam BLEND5 = 7'b010_11_11; // (A * 4 + B * 6 + C * 6) >> 4 + localparam BLEND6 = 7'b111_00_00; // (A * 14 + B * 1 + C * 1) >> 4 - always @* begin - case({!is_diff, rule[5:2]}) - 1,17: {op, input_ctrl} = {BLEND1, AB}; - 2,18: {op, input_ctrl} = {BLEND1, DB}; - 3,19: {op, input_ctrl} = {BLEND1, BD}; - 4,20: {op, input_ctrl} = {BLEND2, DB}; - 5,21: {op, input_ctrl} = {BLEND2, AB}; - 6,22: {op, input_ctrl} = {BLEND2, AD}; - - 8: {op, input_ctrl} = {BLEND0, 2'bxx}; - 9: {op, input_ctrl} = {BLEND0, 2'bxx}; - 10: {op, input_ctrl} = {BLEND0, 2'bxx}; - 11: {op, input_ctrl} = {BLEND1, AB}; - 12: {op, input_ctrl} = {BLEND1, AB}; - 13: {op, input_ctrl} = {BLEND1, AB}; - 14: {op, input_ctrl} = {BLEND1, DB}; - 15: {op, input_ctrl} = {BLEND1, BD}; - - 24: {op, input_ctrl} = {BLEND2, DB}; - 25: {op, input_ctrl} = {BLEND5, DB}; - 26: {op, input_ctrl} = {BLEND6, DB}; - 27: {op, input_ctrl} = {BLEND2, DB}; - 28: {op, input_ctrl} = {BLEND4, DB}; - 29: {op, input_ctrl} = {BLEND5, DB}; - 30: {op, input_ctrl} = {BLEND3, BD}; - 31: {op, input_ctrl} = {BLEND3, DB}; - default: {op, input_ctrl} = {11{1'bx}}; - endcase - - // Setting op[8] effectively disables HQ2X because blend will always return E. - if (disable_hq2x) op[8] = 1; + reg [23:0] a,b,d,e,h,f; + reg [3:0] bl_rule; + reg [1:0] df_rule; + always @(posedge clk) if (clk_en) begin + {bl_rule,df_rule} <= rule; + a <= A; b <= B; d <= D; e <= E; f <= F; h <= H; end - // Generate inputs to the inner blender. Valid combinations. - // 00: E A B - // 01: E A D - // 10: E D B - // 11: E B D - wire [23:0] Input1 = E; - wire [23:0] Input2 = !input_ctrl[1] ? A : - !input_ctrl[0] ? D : B; + wire is_diff; + DiffCheck diff_checker(df_rule[1] ? b : h, df_rule[0] ? d : f, is_diff); + + reg [23:0] i10,i20,i30; + reg [6:0] op0; + always @(posedge clk) if (clk_en) begin + i10 <= e; + case({!is_diff, bl_rule}) + 1,11,12,13,17: {op0, i20, i30} <= {BLEND1, a, 24'd0}; + 2,14,18: {op0, i20, i30} <= {BLEND1, d, 24'd0}; + 3,15,19: {op0, i20, i30} <= {BLEND1, b, 24'd0}; + 4,20,24,27: {op0, i20, i30} <= {BLEND2, d, b}; + 5,21: {op0, i20, i30} <= {BLEND2, a, b}; + 6,22: {op0, i20, i30} <= {BLEND2, a, d}; + 25,29: {op0, i20, i30} <= {BLEND5, d, b}; + 26: {op0, i20, i30} <= {BLEND6, d, b}; + 28: {op0, i20, i30} <= {BLEND4, d, b}; + 30: {op0, i20, i30} <= {BLEND3, b, d}; + 31: {op0, i20, i30} <= {BLEND3, d, b}; + default: {op0, i20, i30} <= {BLEND1, e, 24'd0}; + endcase + end + + reg [23:0] i1,i2,i3; + reg [6:0] op; + always @(posedge clk) if (clk_en) begin + op <= op0; i1 <= i10; i2 <= i20; i3 <= i30; + end + + function [34:0] mul24x3; + input [23:0] op1; + input [2:0] op2; + begin + mul24x3 = 0; + if(op2[0]) mul24x3 = mul24x3 + {op1[23:16], 4'b0000, op1[15:8], 4'b0000, op1[7:0]}; + if(op2[1]) mul24x3 = mul24x3 + {op1[23:16], 4'b0000, op1[15:8], 4'b0000, op1[7:0], 1'b0}; + if(op2[2]) mul24x3 = mul24x3 + {op1[23:16], 4'b0000, op1[15:8], 4'b0000, op1[7:0], 2'b00}; + end + endfunction + + wire [35:0] res = {mul24x3(i1, op[6:4]), 1'b0} + mul24x3(i2, {op[3:2], !op[3:2]}) + mul24x3(i3, {op[1:0], !op[3:2]}); + + always @(posedge clk) if (clk_en) Result <= {res[35:28],res[23:16],res[11:4]}; - wire [23:0] Input3 = !input_ctrl[0] ? B : D; - InnerBlend inner_blend1(op, Input1[7:0], Input2[7:0], Input3[7:0], Result[7:0]); - InnerBlend inner_blend2(op, Input1[15:8], Input2[15:8], Input3[15:8], Result[15:8]); - InnerBlend inner_blend3(op, Input1[23:16], Input2[23:16], Input3[23:16], Result[23:16]); endmodule diff --git a/sys/i2c.v b/sys/i2c.v index 1b89b4f..01076c6 100644 --- a/sys/i2c.v +++ b/sys/i2c.v @@ -4,7 +4,12 @@ module i2c input CLK, input START, - input [23:0] I2C_DATA, + input READ, + input [6:0] I2C_ADDR, + input I2C_WLEN, // 0 - one byte, 1 - two bytes + input [7:0] I2C_WDATA1, + input [7:0] I2C_WDATA2, + output [7:0] I2C_RDATA, output reg END = 1, output reg ACK = 0, @@ -18,51 +23,73 @@ module i2c parameter CLK_Freq = 50_000_000; // 50 MHz parameter I2C_Freq = 400_000; // 400 KHz -reg I2C_CLOCK; -always@(negedge CLK) begin - integer mI2C_CLK_DIV = 0; - if(mI2C_CLK_DIV < (CLK_Freq/I2C_Freq)) begin - mI2C_CLK_DIV <= mI2C_CLK_DIV + 1; - end else begin - mI2C_CLK_DIV <= 0; - I2C_CLOCK <= ~I2C_CLOCK; +localparam I2C_FreqX2 = I2C_Freq*2; + +reg I2C_CLOCK; +reg [31:0] cnt; +wire [31:0] cnt_next = cnt + I2C_FreqX2; + +always @(posedge CLK) begin + cnt <= cnt_next; + if(cnt_next >= CLK_Freq) begin + cnt <= cnt_next - CLK_Freq; + I2C_CLOCK <= ~I2C_CLOCK; end end assign I2C_SCL = SCLK | I2C_CLOCK; -assign I2C_SDA = SDO ? 1'bz : 1'b0; +assign I2C_SDA = SDO[3] ? 1'bz : 1'b0; -reg SCLK = 1, SDO = 1; +reg SCLK = 1; +reg [3:0] SDO = 4'b1111; +reg [0:7] rdata; + +assign I2C_RDATA = rdata; always @(posedge CLK) begin reg old_clk; reg old_st; + reg rd,len; reg [5:0] SD_COUNTER = 'b111111; reg [0:31] SD; old_clk <= I2C_CLOCK; old_st <= START; + + // delay to make sure SDA changed while SCL is stabilized at low + if(old_clk && ~I2C_CLOCK && ~SD_COUNTER[5]) SDO[0] <= SD[SD_COUNTER[4:0]]; + SDO[3:1] <= SDO[2:0]; if(~old_st && START) begin SCLK <= 1; - SDO <= 1; + SDO <= 4'b1111; ACK <= 0; END <= 0; - SD <= {2'b10, I2C_DATA[23:16], 1'b1, I2C_DATA[15:8], 1'b1, I2C_DATA[7:0], 4'b1011}; + rd <= READ; + len <= I2C_WLEN; + if(READ) SD <= {2'b10, I2C_ADDR, 1'b1, 1'b1, 8'b11111111, 1'b0, 3'b011, 9'b111111111}; + else SD <= {2'b10, I2C_ADDR, 1'b0, 1'b1, I2C_WDATA1, 1'b1, I2C_WDATA2, 4'b1011}; SD_COUNTER <= 0; end else begin if(~old_clk && I2C_CLOCK && ~&SD_COUNTER) begin SD_COUNTER <= SD_COUNTER + 6'd1; case(SD_COUNTER) - 01: SCLK <= 0; - 10,19,28: ACK <= ACK | I2C_SDA; - 29: SCLK <= 1; - 32: END <= 1; + 01: SCLK <= 0; + 10: ACK <= ACK | I2C_SDA; + 19: if(~rd) begin + ACK <= ACK | I2C_SDA; + if(~len) SD_COUNTER <= 29; + end + 20: if(rd) SCLK <= 1; + 23: if(rd) END <= 1; + 28: if(~rd) ACK <= ACK | I2C_SDA; + 29: if(~rd) SCLK <= 1; + 32: if(~rd) END <= 1; endcase - end - if(old_clk && ~I2C_CLOCK && ~SD_COUNTER[5]) SDO <= SD[SD_COUNTER[4:0]]; + if(SD_COUNTER >= 11 && SD_COUNTER <= 18) rdata[SD_COUNTER[4:0]-11] <= I2C_SDA; + end end end diff --git a/sys/i2s.v b/sys/i2s.v index d0480ce..7d4517b 100644 --- a/sys/i2s.v +++ b/sys/i2s.v @@ -1,14 +1,12 @@ module i2s #( - parameter CLK_RATE = 50000000, - parameter AUDIO_DW = 16, - parameter AUDIO_RATE = 96000 + parameter AUDIO_DW = 16 ) ( input reset, - input clk_sys, - input half_rate, + input clk, + input ce, output reg sclk, output reg lrclk, @@ -18,119 +16,39 @@ module i2s input [AUDIO_DW-1:0] right_chan ); -localparam WHOLE_CYCLES = (CLK_RATE) / (AUDIO_RATE*AUDIO_DW*4); -localparam ERROR_BASE = 10000; -localparam [63:0] ERRORS_PER_BIT = ((CLK_RATE * ERROR_BASE) / (AUDIO_RATE*AUDIO_DW*4)) - (WHOLE_CYCLES * ERROR_BASE); - -reg lpf_ce; -wire [AUDIO_DW-1:0] al, ar; - -lpf_i2s lpf_l -( - .CLK(clk_sys), - .CE(lpf_ce), - .IDATA(left_chan), - .ODATA(al) -); - -lpf_i2s lpf_r -( - .CLK(clk_sys), - .CE(lpf_ce), - - .IDATA(right_chan), - .ODATA(ar) -); - -always @(posedge clk_sys) begin - reg [31:0] count_q; - reg [31:0] error_q; +always @(posedge clk) begin reg [7:0] bit_cnt; - reg skip = 0; + reg msclk; reg [AUDIO_DW-1:0] left; reg [AUDIO_DW-1:0] right; - reg msclk; - reg ce; - - lpf_ce <= 0; - if (reset) begin - count_q <= 0; - error_q <= 0; - ce <= 0; - bit_cnt <= 1; - lrclk <= 1; - sclk <= 1; - msclk <= 1; + bit_cnt <= 1; + lrclk <= 1; + sclk <= 1; + msclk <= 1; end - else - begin - if(count_q == WHOLE_CYCLES-1) begin - if (error_q < (ERROR_BASE - ERRORS_PER_BIT)) begin - error_q <= error_q + ERRORS_PER_BIT[31:0]; - count_q <= 0; - end else begin - error_q <= error_q + ERRORS_PER_BIT[31:0] - ERROR_BASE; - count_q <= count_q + 1; - end - end else if(count_q == WHOLE_CYCLES) begin - count_q <= 0; - end else begin - count_q <= count_q + 1; - end - + else begin sclk <= msclk; - if(!count_q) begin - ce <= ~ce; - if(~half_rate || ce) begin - msclk <= ~msclk; - if(msclk) begin - skip <= ~skip; - if(skip) lpf_ce <= 1; - if(bit_cnt >= AUDIO_DW) begin - bit_cnt <= 1; - lrclk <= ~lrclk; - if(lrclk) begin - left <= al; - right <= ar; - end + if(ce) begin + msclk <= ~msclk; + if(msclk) begin + if(bit_cnt >= AUDIO_DW) begin + bit_cnt <= 1; + lrclk <= ~lrclk; + if(lrclk) begin + left <= left_chan; + right <= right_chan; end - else begin - bit_cnt <= bit_cnt + 1'd1; - end - sdata <= lrclk ? right[AUDIO_DW - bit_cnt] : left[AUDIO_DW - bit_cnt]; end + else begin + bit_cnt <= bit_cnt + 1'd1; + end + sdata <= lrclk ? right[AUDIO_DW - bit_cnt] : left[AUDIO_DW - bit_cnt]; end end end end endmodule - -module lpf_i2s -( - input CLK, - input CE, - input [15:0] IDATA, - output reg [15:0] ODATA -); - -reg [511:0] acc; -reg [20:0] sum; - -always @(*) begin - integer i; - sum = 0; - for (i = 0; i < 32; i = i+1) sum = sum + {{5{acc[(i*16)+15]}}, acc[i*16 +:16]}; -end - -always @(posedge CLK) begin - if(CE) begin - acc <= {acc[495:0], IDATA}; - ODATA <= sum[20:5]; - end -end - -endmodule diff --git a/sys/iir_filter.v b/sys/iir_filter.v new file mode 100644 index 0000000..a5336e9 --- /dev/null +++ b/sys/iir_filter.v @@ -0,0 +1,213 @@ + +// 3-tap IIR filter for 2 channels. +// Copyright (C) 2020 Sorgelig +// +// 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., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +// +// Can be converted to 2-tap (coeff_x2 = 0, coeff_y2 = 0) or 1-tap (coeff_x1,2 = 0, coeff_y1,2 = 0) +// +module IIR_filter +#( + parameter use_params = 1, // set to 1 to use following parameters, 0 for input port variables. + parameter stereo = 1, // 0 for mono (input_l) + + parameter coeff_x = 0.00000774701983513660, // Base gain value for X. Float. Range: 0.0 ... 0.999(9) + parameter coeff_x0 = 3, // Gain scale factor for X0. Integer. Range -7 ... +7 + parameter coeff_x1 = 3, // Gain scale factor for X1. Integer. Range -7 ... +7 + parameter coeff_x2 = 1, // Gain scale factor for X2. Integer. Range -7 ... +7 + parameter coeff_y0 = -2.96438150626551080000, // Coefficient for Y0. Float. Range -3.999(9) ... 3.999(9) + parameter coeff_y1 = 2.92939452735121100000, // Coefficient for Y1. Float. Range -3.999(9) ... 3.999(9) + parameter coeff_y2 = -0.96500747158831091000 // Coefficient for Y2. Float. Range -3.999(9) ... 3.999(9) +) +( + input clk, + input reset, + + input ce, // must be double of calculated rate for stereo! + input sample_ce, // desired output sample rate + + input [39:0] cx, + input [7:0] cx0, + input [7:0] cx1, + input [7:0] cx2, + input [23:0] cy0, + input [23:0] cy1, + input [23:0] cy2, + + input [15:0] input_l, input_r, // signed samples + output [15:0] output_l, output_r // signed samples +); + +localparam [39:0] pcoeff_x = coeff_x * 40'h8000000000; +localparam [31:0] pcoeff_y0 = coeff_y0 * 24'h200000; +localparam [31:0] pcoeff_y1 = coeff_y1 * 24'h200000; +localparam [31:0] pcoeff_y2 = coeff_y2 * 24'h200000; + +wire [39:0] vcoeff = use_params ? pcoeff_x : cx; +wire [23:0] vcoeff_y0 = use_params ? pcoeff_y0[23:0] : cy0; +wire [23:0] vcoeff_y1 = use_params ? pcoeff_y1[23:0] : cy1; +wire [23:0] vcoeff_y2 = use_params ? pcoeff_y2[23:0] : cy2; + +wire [59:0] inp_mul = $signed(inp) * $signed(vcoeff); + +wire [39:0] x = inp_mul[59:20]; +wire [39:0] y = x + tap0; + +wire [39:0] tap0; +iir_filter_tap iir_tap_0 +( + .clk(clk), + .reset(reset), + .ce(ce), + .ch(ch), + .cx(use_params ? coeff_x0[7:0] : cx0), + .cy(vcoeff_y0), + .x(x), + .y(y), + .z(tap1), + .tap(tap0) +); + +wire [39:0] tap1; +iir_filter_tap iir_tap_1 +( + .clk(clk), + .reset(reset), + .ce(ce), + .ch(ch), + .cx(use_params ? coeff_x1[7:0] : cx1), + .cy(vcoeff_y1), + .x(x), + .y(y), + .z(tap2), + .tap(tap1) +); + +wire [39:0] tap2; +iir_filter_tap iir_tap_2 +( + .clk(clk), + .reset(reset), + .ce(ce), + .ch(ch), + .cx(use_params ? coeff_x2[7:0] : cx2), + .cy(vcoeff_y2), + .x(x), + .y(y), + .z(0), + .tap(tap2) +); + +wire [15:0] y_clamp = (~y[39] & |y[38:35]) ? 16'h7FFF : (y[39] & ~&y[38:35]) ? 16'h8000 : y[35:20]; + +reg ch = 0; +reg [15:0] out_l, out_r, out_m; +reg [15:0] inp, inp_m; +always @(posedge clk) if (ce) begin + if(!stereo) begin + ch <= 0; + inp <= input_l; + out_l <= y_clamp; + out_r <= y_clamp; + end + else begin + ch <= ~ch; + if(ch) begin + out_m <= y_clamp; + inp <= inp_m; + end + else begin + out_l <= out_m; + out_r <= y_clamp; + inp <= input_l; + inp_m <= input_r; + end + end +end + +reg [31:0] out; +always @(posedge clk) if (sample_ce) out <= {out_l, out_r}; + +assign {output_l, output_r} = out; + +endmodule + +module iir_filter_tap +( + input clk, + input reset, + + input ce, + input ch, + + input [7:0] cx, + input [23:0] cy, + + input [39:0] x, + input [39:0] y, + input [39:0] z, + output [39:0] tap +); + +wire signed [60:0] y_mul = $signed(y[36:0]) * $signed(cy); + +function [39:0] x_mul; + input [39:0] x; +begin + x_mul = 0; + if(cx[0]) x_mul = x_mul + {{4{x[39]}}, x[39:4]}; + if(cx[1]) x_mul = x_mul + {{3{x[39]}}, x[39:3]}; + if(cx[2]) x_mul = x_mul + {{2{x[39]}}, x[39:2]}; + if(cx[7]) x_mul = ~x_mul; //cheap NEG +end +endfunction + +(* ramstyle = "logic" *) reg [39:0] intreg[2]; +always @(posedge clk, posedge reset) begin + if(reset) {intreg[0],intreg[1]} <= 80'd0; + else if(ce) intreg[ch] <= x_mul(x) - y_mul[60:21] + z; +end + +assign tap = intreg[ch]; + +endmodule + +// simplified IIR 1-tap. +module DC_blocker +( + input clk, + input ce, // 48/96 KHz + input mute, + + input sample_rate, + input [15:0] din, + output [15:0] dout +); + +wire [39:0] x = {din[15], din, 23'd0}; +wire [39:0] x0 = x - (sample_rate ? {{11{x[39]}}, x[39:11]} : {{10{x[39]}}, x[39:10]}); +wire [39:0] y1 = y - (sample_rate ? {{10{y[39]}}, y[39:10]} : {{09{y[39]}}, y[39:09]}); +wire [39:0] y0 = x0 - x1 + y1; + +reg [39:0] x1, y; +always @(posedge clk) if(ce) begin + x1 <= x0; + y <= ^y0[39:38] ? {{2{y0[39]}},{38{y0[38]}}} : y0; +end + +assign dout = mute ? 16'd0 : y[38:23]; + +endmodule diff --git a/sys/ip/avalon_combiner.v b/sys/ip/avalon_combiner.v deleted file mode 100644 index 3a26c6a..0000000 --- a/sys/ip/avalon_combiner.v +++ /dev/null @@ -1,60 +0,0 @@ -// avalon_combiner.v - -`timescale 1 ps / 1 ps -module avalon_combiner -( - input wire clk, // clock.clk - input wire rst, // reset.reset - - output wire [6:0] mixer_address, // ctl_mixer.address - output wire [3:0] mixer_byteenable, // .byteenable - output wire mixer_write, // .write - output wire [31:0] mixer_writedata, // .writedata - input wire mixer_waitrequest, // .waitrequest - - output wire [6:0] scaler_address, // ctl_scaler.address - output wire [3:0] scaler_byteenable, // .byteenable - input wire scaler_waitrequest, // .waitrequest - output wire scaler_write, // .write - output wire [31:0] scaler_writedata, // .writedata - - output wire [7:0] video_address, // ctl_video.address - output wire [3:0] video_byteenable, // .byteenable - input wire video_waitrequest, // .waitrequest - output wire video_write, // .write - output wire [31:0] video_writedata, // .writedata - - output wire clock, // control.clock - output wire reset, // .reset - input wire [8:0] address, // .address - input wire write, // .write - input wire [31:0] writedata, // .writedata - output wire waitrequest // .waitrequest -); - -assign clock = clk; -assign reset = rst; - -assign mixer_address = address[6:0]; -assign scaler_address = address[6:0]; -assign video_address = address[7:0]; - -assign mixer_byteenable = 4'b1111; -assign scaler_byteenable = 4'b1111; -assign video_byteenable = 4'b1111; - -wire en_scaler = (address[8:7] == 0); -wire en_mixer = (address[8:7] == 1); -wire en_video = address[8]; - -assign mixer_write = en_mixer & write; -assign scaler_write = en_scaler & write; -assign video_write = en_video & write; - -assign mixer_writedata = writedata; -assign scaler_writedata = writedata; -assign video_writedata = writedata; - -assign waitrequest = (en_mixer & mixer_waitrequest) | (en_scaler & scaler_waitrequest) | (en_video & video_waitrequest); - -endmodule diff --git a/sys/ip/avalon_combiner_hw.tcl b/sys/ip/avalon_combiner_hw.tcl deleted file mode 100644 index 5eede9c..0000000 --- a/sys/ip/avalon_combiner_hw.tcl +++ /dev/null @@ -1,204 +0,0 @@ -# TCL File Generated by Component Editor 17.0 -# Wed Dec 13 01:40:49 CST 2017 -# DO NOT MODIFY - - -# -# avalon_combiner "avalon_combiner" v17.0 -# sorgelig 2017.12.13.01:40:49 -# -# - -# -# request TCL package from ACDS 16.1 -# -package require -exact qsys 16.1 - - -# -# module avalon_combiner -# -set_module_property DESCRIPTION "" -set_module_property NAME avalon_combiner -set_module_property VERSION 17.0 -set_module_property INTERNAL false -set_module_property OPAQUE_ADDRESS_MAP true -set_module_property AUTHOR sorgelig -set_module_property DISPLAY_NAME avalon_combiner -set_module_property INSTANTIATE_IN_SYSTEM_MODULE true -set_module_property EDITABLE true -set_module_property REPORT_TO_TALKBACK false -set_module_property ALLOW_GREYBOX_GENERATION false -set_module_property REPORT_HIERARCHY false - - -# -# file sets -# -add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" -set_fileset_property QUARTUS_SYNTH TOP_LEVEL avalon_combiner -set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false -set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE true -add_fileset_file avalon_combiner.v VERILOG PATH avalon_combiner.v TOP_LEVEL_FILE - - -# -# parameters -# - - -# -# display items -# - - -# -# connection point clock -# -add_interface clock clock end -set_interface_property clock clockRate 0 -set_interface_property clock ENABLED true -set_interface_property clock EXPORT_OF "" -set_interface_property clock PORT_NAME_MAP "" -set_interface_property clock CMSIS_SVD_VARIABLES "" -set_interface_property clock SVD_ADDRESS_GROUP "" - -add_interface_port clock clk clk Input 1 - - -# -# connection point reset -# -add_interface reset reset end -set_interface_property reset associatedClock clock -set_interface_property reset synchronousEdges DEASSERT -set_interface_property reset ENABLED true -set_interface_property reset EXPORT_OF "" -set_interface_property reset PORT_NAME_MAP "" -set_interface_property reset CMSIS_SVD_VARIABLES "" -set_interface_property reset SVD_ADDRESS_GROUP "" - -add_interface_port reset rst reset Input 1 - - -# -# connection point ctl_mixer -# -add_interface ctl_mixer avalon start -set_interface_property ctl_mixer addressUnits WORDS -set_interface_property ctl_mixer associatedClock clock -set_interface_property ctl_mixer associatedReset reset -set_interface_property ctl_mixer bitsPerSymbol 8 -set_interface_property ctl_mixer burstOnBurstBoundariesOnly false -set_interface_property ctl_mixer burstcountUnits WORDS -set_interface_property ctl_mixer doStreamReads false -set_interface_property ctl_mixer doStreamWrites false -set_interface_property ctl_mixer holdTime 0 -set_interface_property ctl_mixer linewrapBursts false -set_interface_property ctl_mixer maximumPendingReadTransactions 0 -set_interface_property ctl_mixer maximumPendingWriteTransactions 0 -set_interface_property ctl_mixer readLatency 0 -set_interface_property ctl_mixer readWaitTime 1 -set_interface_property ctl_mixer setupTime 0 -set_interface_property ctl_mixer timingUnits Cycles -set_interface_property ctl_mixer writeWaitTime 0 -set_interface_property ctl_mixer ENABLED true -set_interface_property ctl_mixer EXPORT_OF "" -set_interface_property ctl_mixer PORT_NAME_MAP "" -set_interface_property ctl_mixer CMSIS_SVD_VARIABLES "" -set_interface_property ctl_mixer SVD_ADDRESS_GROUP "" - -add_interface_port ctl_mixer mixer_address address Output 7 -add_interface_port ctl_mixer mixer_byteenable byteenable Output 4 -add_interface_port ctl_mixer mixer_write write Output 1 -add_interface_port ctl_mixer mixer_writedata writedata Output 32 -add_interface_port ctl_mixer mixer_waitrequest waitrequest Input 1 - - -# -# connection point ctl_scaler -# -add_interface ctl_scaler avalon start -set_interface_property ctl_scaler addressUnits WORDS -set_interface_property ctl_scaler associatedClock clock -set_interface_property ctl_scaler associatedReset reset -set_interface_property ctl_scaler bitsPerSymbol 8 -set_interface_property ctl_scaler burstOnBurstBoundariesOnly false -set_interface_property ctl_scaler burstcountUnits WORDS -set_interface_property ctl_scaler doStreamReads false -set_interface_property ctl_scaler doStreamWrites false -set_interface_property ctl_scaler holdTime 0 -set_interface_property ctl_scaler linewrapBursts false -set_interface_property ctl_scaler maximumPendingReadTransactions 0 -set_interface_property ctl_scaler maximumPendingWriteTransactions 0 -set_interface_property ctl_scaler readLatency 0 -set_interface_property ctl_scaler readWaitTime 1 -set_interface_property ctl_scaler setupTime 0 -set_interface_property ctl_scaler timingUnits Cycles -set_interface_property ctl_scaler writeWaitTime 0 -set_interface_property ctl_scaler ENABLED true -set_interface_property ctl_scaler EXPORT_OF "" -set_interface_property ctl_scaler PORT_NAME_MAP "" -set_interface_property ctl_scaler CMSIS_SVD_VARIABLES "" -set_interface_property ctl_scaler SVD_ADDRESS_GROUP "" - -add_interface_port ctl_scaler scaler_address address Output 7 -add_interface_port ctl_scaler scaler_byteenable byteenable Output 4 -add_interface_port ctl_scaler scaler_waitrequest waitrequest Input 1 -add_interface_port ctl_scaler scaler_write write Output 1 -add_interface_port ctl_scaler scaler_writedata writedata Output 32 - - -# -# connection point ctl_video -# -add_interface ctl_video avalon start -set_interface_property ctl_video addressUnits WORDS -set_interface_property ctl_video associatedClock clock -set_interface_property ctl_video associatedReset reset -set_interface_property ctl_video bitsPerSymbol 8 -set_interface_property ctl_video burstOnBurstBoundariesOnly false -set_interface_property ctl_video burstcountUnits WORDS -set_interface_property ctl_video doStreamReads false -set_interface_property ctl_video doStreamWrites false -set_interface_property ctl_video holdTime 0 -set_interface_property ctl_video linewrapBursts false -set_interface_property ctl_video maximumPendingReadTransactions 0 -set_interface_property ctl_video maximumPendingWriteTransactions 0 -set_interface_property ctl_video readLatency 0 -set_interface_property ctl_video readWaitTime 1 -set_interface_property ctl_video setupTime 0 -set_interface_property ctl_video timingUnits Cycles -set_interface_property ctl_video writeWaitTime 0 -set_interface_property ctl_video ENABLED true -set_interface_property ctl_video EXPORT_OF "" -set_interface_property ctl_video PORT_NAME_MAP "" -set_interface_property ctl_video CMSIS_SVD_VARIABLES "" -set_interface_property ctl_video SVD_ADDRESS_GROUP "" - -add_interface_port ctl_video video_address address Output 8 -add_interface_port ctl_video video_byteenable byteenable Output 4 -add_interface_port ctl_video video_waitrequest waitrequest Input 1 -add_interface_port ctl_video video_write write Output 1 -add_interface_port ctl_video video_writedata writedata Output 32 - - -# -# connection point control -# -add_interface control conduit end -set_interface_property control associatedClock clock -set_interface_property control associatedReset reset -set_interface_property control ENABLED true -set_interface_property control EXPORT_OF "" -set_interface_property control PORT_NAME_MAP "" -set_interface_property control CMSIS_SVD_VARIABLES "" -set_interface_property control SVD_ADDRESS_GROUP "" - -add_interface_port control address address Input 9 -add_interface_port control write write Input 1 -add_interface_port control writedata writedata Input 32 -add_interface_port control waitrequest waitrequest Output 1 -add_interface_port control clock clock Output 1 -add_interface_port control reset reset Output 1 - diff --git a/sys/ip/de10_hps_hw.tcl b/sys/ip/de10_hps_hw.tcl deleted file mode 100644 index a166ca0..0000000 --- a/sys/ip/de10_hps_hw.tcl +++ /dev/null @@ -1,3706 +0,0 @@ -# (C) 2001-2017 Intel Corporation. All rights reserved. -# Your use of Intel Corporation's design tools, logic functions and other -# software and tools, and its AMPP partner logic functions, and any output -# files any of the foregoing (including device programming or simulation -# files), and any associated documentation or information are expressly subject -# to the terms and conditions of the Intel Program License Subscription -# Agreement, Intel MegaCore Function License Agreement, or other applicable -# license agreement, including, without limitation, that your use is for the -# sole purpose of programming logic devices manufactured by Intel and sold by -# Intel or its authorized distributors. Please refer to the applicable -# agreement for further details. - - -# This IP is modified standard Altera HPS IP. -# Direct DDR3 SDRAM access has been removed since it won't work together with HPS DDR3 SDRAM access. -# FPGA access the memory through MPFE (FPGA2SDRAM bridge). -# By removing direct DDR3 SDRAM access synthesis time has been reduced by 3 times! - - -package require -exact qsys 12.0 -package require -exact altera_terp 1.0 -package require quartus::advanced_wysiwyg - -set_module_property NAME altera_hps_lite -set_module_property VERSION 17.0 -set_module_property AUTHOR "Altera Corporation/Sorgelig" -set_module_property SUPPORTED_DEVICE_FAMILIES {CYCLONEV ARRIAV} - -set_module_property DISPLAY_NAME "DE10-nano Hard Processor System" -set_module_property INSTANTIATE_IN_SYSTEM_MODULE true -set_module_property EDITABLE false -set_module_property HIDE_FROM_SOPC true -set_module_property HIDE_FROM_QUARTUS true - -add_documentation_link "HPS User Guide for Cyclone V" "http://www.altera.com/literature/hb/cyclone-v/cv_5v4.pdf" -add_documentation_link "HPS User Guide for Arria V" "http://www.altera.com/literature/hb/arria-v/av_5v4.pdf" - -set alt_mem_if_tcl_libs_dir "$env(QUARTUS_ROOTDIR)/../ip/altera/alt_mem_if/alt_mem_if_tcl_packages" -if {[lsearch -exact $auto_path $alt_mem_if_tcl_libs_dir] == -1} { - lappend auto_path $alt_mem_if_tcl_libs_dir -} - -package require alt_mem_if::gui::system_info - -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/constants.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/procedures.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/pin_mux.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/pin_mux_db.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/locations.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/ui.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/clocks.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/clock_manager.tcl - -proc add_storage_parameter {name { default_value {} } } { - add_parameter $name string $default_value "" - set_parameter_property $name derived true - set_parameter_property $name visible false -} - -proc add_reset_parameters {} { - set group_name "Resets" - add_display_item "FPGA Interfaces" $group_name "group" "" - - add_parameter S2FCLK_COLDRST_Enable boolean false "" - set_parameter_property S2FCLK_COLDRST_Enable display_name "Enable HPS-to-FPGA cold reset output" - set_parameter_property S2FCLK_COLDRST_Enable group $group_name - - add_parameter S2FCLK_PENDINGRST_Enable boolean false "" - set_parameter_property S2FCLK_PENDINGRST_Enable display_name "Enable HPS warm reset handshake signals" - set_parameter_property S2FCLK_PENDINGRST_Enable group $group_name - - add_parameter F2SCLK_DBGRST_Enable boolean false "" - set_parameter_property F2SCLK_DBGRST_Enable display_name "Enable FPGA-to-HPS debug reset request" - set_parameter_property F2SCLK_DBGRST_Enable group $group_name - - add_parameter F2SCLK_WARMRST_Enable boolean false "" - set_parameter_property F2SCLK_WARMRST_Enable display_name "Enable FPGA-to-HPS warm reset request" - set_parameter_property F2SCLK_WARMRST_Enable group $group_name - - add_parameter F2SCLK_COLDRST_Enable boolean false "" - set_parameter_property F2SCLK_COLDRST_Enable display_name "Enable FPGA-to-HPS cold reset request" - set_parameter_property F2SCLK_COLDRST_Enable group $group_name - -} - -proc list_h2f_interrupt_groups {} { - return { - "CAN" "CLOCKPERIPHERAL" "CTI" - "DMA" "EMAC" "FPGAMANAGER" - "GPIO" "I2CEMAC" "I2CPERIPHERAL" - "L4TIMER" "NAND" "OSCTIMER" - "QSPI" "SDMMC" "SPIMASTER" - "SPISLAVE" "UART" "USB" - "WATCHDOG" - } -} - -proc get_h2f_interrupt_descriptions {data_ref} { - upvar 1 $data_ref data - array set data { - "DMA" "Enable DMA interrupts" - "EMAC" "Enable EMAC interrupts (for EMAC0 and EMAC1)" - "USB" "Enable USB interrupts" - "CAN" "Enable CAN interrupts" - "SDMMC" "Enable SD/MMC interrupt" - "NAND" "Enable NAND interrupt" - "QSPI" "Enable Quad SPI interrupt" - "SPIMASTER" "Enable SPI master interrupts" - "SPISLAVE" "Enable SPI slave interrupts" - "I2CPERIPHERAL" "Enable I2C peripheral interrupts (for I2C0 and I2C1)" - "I2CEMAC" "Enable I2C-EMAC interrupts (for I2C2 and I2C3)" - "UART" "Enable UART interrupts" - "GPIO" "Enable GPIO interrupts" - "L4TIMER" "Enable L4 timer interrupts" - "OSCTIMER" "Enable OSC timer interrupts" - "WATCHDOG" "Enable watchdog interrupts" - "CLOCKPERIPHERAL" "Enable clock peripheral interrupts" - "FPGAMANAGER" "Enable FPGA manager interrupt" - "CTI" "Enable CTI interrupts" - } -} - -proc load_h2f_interrupt_table {functions_by_group_ref - width_by_function_ref - inverted_by_function_ref} { - upvar 1 $functions_by_group_ref functions_by_group - upvar 1 $width_by_function_ref width_by_function - upvar 1 $inverted_by_function_ref inverted_by_function - array set functions_by_group { - "DMA" {"dma" "dma_abort" } - "EMAC" {"emac0" "emac1" } - "USB" {"usb0" "usb1" } - "CAN" {"can0" "can1" } - "SDMMC" {"sdmmc" } - "NAND" {"nand" } - "QSPI" {"qspi" } - "SPIMASTER" {"spi0" "spi1" } - "SPISLAVE" {"spi2" "spi3" } - "I2CPERIPHERAL" {"i2c0" "i2c1" } - "I2CEMAC" {"i2c_emac0" "i2c_emac1" } - "UART" {"uart0" "uart1" } - "GPIO" {"gpio0" "gpio1" "gpio2"} - "L4TIMER" {"l4sp0" "l4sp1" } - "OSCTIMER" {"osc0" "osc1" } - "WATCHDOG" {"wdog0" "wdog1" } - "CLOCKPERIPHERAL" {"clkmgr" "mpuwakeup" } - "FPGAMANAGER" {"fpga_man" } - "CTI" {"cti" } - } - array set width_by_function { - "dma" 8 - "cti" 2 - } - array set inverted_by_function { - "cti" 1 - } -} - -proc add_interrupt_parameters {} { - set top_group_name "Interrupts" - add_display_item "FPGA Interfaces" $top_group_name "group" "" - - # add_display_item $group_name "f2h_interrupts_label" "text" "FPGA-to-HPS" - add_parameter F2SINTERRUPT_Enable boolean false - set_parameter_property F2SINTERRUPT_Enable enabled true - set_parameter_property F2SINTERRUPT_Enable display_name "Enable FPGA-to-HPS Interrupts" - set_parameter_property F2SINTERRUPT_Enable group $top_group_name - - set inner_group_name "HPS-to-FPGA" - add_display_item $top_group_name $inner_group_name "group" "" - get_h2f_interrupt_descriptions descriptions_by_group - set interrupt_groups [list_h2f_interrupt_groups] - foreach interrupt_group $interrupt_groups { - set parameter "S2FINTERRUPT_${interrupt_group}_Enable" - add_parameter $parameter boolean false - set_parameter_property $parameter enabled true - set_parameter_property $parameter display_name $descriptions_by_group($interrupt_group) - set_parameter_property $parameter group $inner_group_name - } -} - -proc add_dma_parameters {} { - set group_name "DMA Peripheral Request" - add_display_item "FPGA Interfaces" $group_name "group" "" - add_display_item $group_name "DMA Table" "group" "table" - - add_parameter DMA_PeriphId_DERIVED string_list {0 1 2 3 4 5 6 7} - set_parameter_property DMA_PeriphId_DERIVED display_name "Peripheral Request ID" - set_parameter_property DMA_PeriphId_DERIVED derived true - set_parameter_property DMA_PeriphId_DERIVED display_hint "FIXED_SIZE" - set_parameter_property DMA_PeriphId_DERIVED group "DMA Table" - - add_parameter DMA_Enable string_list {"No" "No" "No" "No" "No" "No" "No" "No"} - set_parameter_property DMA_Enable allowed_ranges {"Yes" "No"} - set_parameter_property DMA_Enable display_name "Enabled" - set_parameter_property DMA_Enable display_hint "FIXED_SIZE" - set_parameter_property DMA_Enable group "DMA Table" -} - -proc range_from_zero {end} { - set result [list] - for {set i 0} {$i <= $end} {incr i} { - lappend result $i - } - return $result -} - -proc create_generic_parameters {} { - - ::alt_mem_if::util::hwtcl_utils::_add_parameter SYS_INFO_DEVICE_FAMILY STRING "" - set_parameter_property SYS_INFO_DEVICE_FAMILY SYSTEM_INFO DEVICE_FAMILY - set_parameter_property SYS_INFO_DEVICE_FAMILY VISIBLE FALSE - - ::alt_mem_if::util::hwtcl_utils::_add_parameter DEVICE_FAMILY STRING "" - set_parameter_property DEVICE_FAMILY DERIVED true - set_parameter_property DEVICE_FAMILY VISIBLE FALSE - - return 1 -} - -create_generic_parameters - -add_display_item "" "FPGA Interfaces" "group" "tab" -add_display_item "" "Peripheral Pins" "group" "tab" -add_display_item "" "HPS Clocks" "group" "tab" -add_clock_tab "HPS Clocks" - -add_display_item "FPGA Interfaces" "General" "group" "" - -add_parameter MPU_EVENTS_Enable boolean true -set_parameter_property MPU_EVENTS_Enable display_name "Enable MPU standby and event signals" -set_parameter_property MPU_EVENTS_Enable description "Enables elaboration of the mpu_events interface." -set_parameter_property MPU_EVENTS_Enable group "General" - -add_parameter GP_Enable boolean false -set_parameter_property GP_Enable display_name "Enable general purpose signals" -set_parameter_property GP_Enable description "Enables elaboration of interface h2f_gp." -set_parameter_property GP_Enable group "General" - -add_parameter DEBUGAPB_Enable boolean false -set_parameter_property DEBUGAPB_Enable display_name "Enable Debug APB interface" -set_parameter_property DEBUGAPB_Enable description "Enables elaboration of Debug APB interfaces." -set_parameter_property DEBUGAPB_Enable group "General" - -add_parameter STM_Enable boolean false -set_parameter_property STM_Enable display_name "Enable System Trace Macrocell hardware events" -set_parameter_property STM_Enable description "Enables elaboration of interface stm_hwevents." -set_parameter_property STM_Enable group "General" - -add_parameter CTI_Enable boolean false -set_parameter_property CTI_Enable display_name "Enable FPGA Cross Trigger Interface" -set_parameter_property CTI_Enable description "Enables elaboration of interface cti_trigger, cti_clk_in." -set_parameter_property CTI_Enable group "General" - -add_parameter TPIUFPGA_Enable boolean false -set_parameter_property TPIUFPGA_Enable display_name "Enable FPGA Trace Port Interface Unit" -set_parameter_property TPIUFPGA_Enable description "Enables elaboration of TPIU FPGA interfaces." -set_parameter_property TPIUFPGA_Enable group "General" - -add_parameter TPIUFPGA_alt boolean false -set_parameter_property TPIUFPGA_alt display_name "Enable FPGA Trace Port Alternate FPGA Interface" -set_parameter_property TPIUFPGA_alt description "When the trace port is enabled, it creates an interface compatible with the Arria 10 Trace Interface. (This just moves the clock_in port into the same conduit)" -set_parameter_property TPIUFPGA_alt group "General" -set_parameter_property TPIUFPGA_alt enabled false - - -add_parameter BOOTFROMFPGA_Enable boolean false -set_parameter_property BOOTFROMFPGA_Enable enabled true -set_parameter_property BOOTFROMFPGA_Enable display_name "Enable boot from fpga signals" -set_parameter_property BOOTFROMFPGA_Enable description "Enables elaboration of interface boot_from_fpga." -set_parameter_property BOOTFROMFPGA_Enable group "General" - -add_parameter TEST_Enable boolean false -set_parameter_property TEST_Enable enabled true -set_parameter_property TEST_Enable display_name "Enable Test Interface" -set_parameter_property TEST_Enable group "General" - -add_parameter HLGPI_Enable boolean false -set_parameter_property HLGPI_Enable enabled true -set_parameter_property HLGPI_Enable display_name "Enable HLGPI Interface" -set_parameter_property HLGPI_Enable group "General" - -add_display_item "FPGA Interfaces" "Boot and Clock Selection" "group" "" -add_parameter BSEL_EN boolean false -set_parameter_property BSEL_EN enabled true -set_parameter_property BSEL_EN display_name "Enable boot selection from FPGA" -set_parameter_property BSEL_EN group "Boot and Clock Selection" -set_parameter_property BSEL_EN visible false -set_parameter_property BSEL_EN enabled false - -add_parameter BSEL integer 1 -set_parameter_property BSEL allowed_ranges {"1:FPGA" "2:NAND Flash (1.8v)" "3:NAND Flash (3.0v)" "4:SD/MMC External Transceiver (1.8v)" "5:SD/MMC Internal Transceiver (3.0v)" "6:Quad SPI Flash (1.8v)" "7:Quad SPI Flash (3.0v)"} -set_parameter_property BSEL display_name "Boot selection from FPGA" -set_parameter_property BSEL group "Boot and Clock Selection" -set_parameter_property BSEL visible false -set_parameter_property BSEL enabled false - -add_parameter CSEL_EN boolean false -set_parameter_property CSEL_EN enabled true -set_parameter_property CSEL_EN display_name "Enable clock selection from FPGA" -set_parameter_property CSEL_EN group "Boot and Clock Selection" -set_parameter_property CSEL_EN visible false -set_parameter_property CSEL_EN enabled false - -add_parameter CSEL integer 0 -set_parameter_property CSEL allowed_ranges {"0:CSEL_0" "1:CSEL_1" "2:CSEL_2" "3:CSEL_3"} -set_parameter_property CSEL display_name "Clock selection from FPGA" -set_parameter_property CSEL group "Boot and Clock Selection" -set_parameter_property CSEL visible false -set_parameter_property CSEL enabled false - -add_display_item "FPGA Interfaces" "AXI Bridges" "group" "" -add_parameter F2S_Width integer 2 -set_parameter_property F2S_Width allowed_ranges {"0:Unused" "1:32-bit" "2:64-bit" "3:128-bit"} -set_parameter_property F2S_Width display_name "FPGA-to-HPS interface width" -set_parameter_property F2S_Width hdl_parameter true -set_parameter_property F2S_Width group "AXI Bridges" - -add_parameter S2F_Width integer 2 -set_parameter_property S2F_Width allowed_ranges {"0:Unused" "1:32-bit" "2:64-bit" "3:128-bit"} -set_parameter_property S2F_Width display_name "HPS-to-FPGA interface width" -set_parameter_property S2F_Width hdl_parameter true -set_parameter_property S2F_Width group "AXI Bridges" - -add_parameter LWH2F_Enable string true -set_parameter_property LWH2F_Enable display_name "Lightweight HPS-to-FPGA interface width" -set_parameter_property LWH2F_Enable description "The lightweight HPS-to-FPGA bridge provides a secondary, fixed-width, smaller address space, lower-performance master interface to the FPGA fabric. Use the lightweight HPS-to-FPGA bridge for high-latency, low-bandwidth traffic, such as memory-mapped register accesses of FPGA peripherals. This approach diverts traffic from the high-performance HPS-to-FPGA bridge, which can improve overall performance." -set_parameter_property LWH2F_Enable allowed_ranges {"true:32-bit" "false:Unused"} -set_parameter_property LWH2F_Enable group "AXI Bridges" - - -set group_name "FPGA-to-HPS SDRAM Interface" -add_display_item "FPGA Interfaces" $group_name "group" "" -add_display_item $group_name "f2sdram_label" "text" "Click the '+' and '-' buttons to add and remove FPGA-to-HPS SDRAM ports." -set table_name "F2SDRAM Settings" -add_display_item $group_name $table_name "group" "table" - -add_parameter F2SDRAM_Name_DERIVED string_list {"f2h_sdram0"} -set_parameter_property F2SDRAM_Name_DERIVED derived true -set_parameter_property F2SDRAM_Name_DERIVED display_name "Name" -set_parameter_property F2SDRAM_Name_DERIVED group $table_name - -add_parameter F2SDRAM_Type string_list [list [F2HSDRAM_AXI3]] -set_parameter_property F2SDRAM_Type allowed_ranges [list [F2HSDRAM_AXI3] [F2HSDRAM_AVM] [F2HSDRAM_AVM_WRITEONLY] [F2HSDRAM_AVM_READONLY]] -set_parameter_property F2SDRAM_Type display_name "Type" -set_parameter_property F2SDRAM_Type group $table_name - -add_parameter F2SDRAM_Width integer_list {"64"} -set_parameter_property F2SDRAM_Width allowed_ranges "32,64,128,256" -set_parameter_property F2SDRAM_Width display_name "Width" -set_parameter_property F2SDRAM_Width group $table_name -set_parameter_update_callback F2SDRAM_Width on_altered_f2sdram_width -# TODO: f2sdram derived parameters for resource counts in the table -# TODO: f2sdram derived parameters for remaining resources, not a part of the table - -add_storage_parameter F2SDRAM_Width_Last_Size 1 -add_storage_parameter F2SDRAM_CMD_PORT_USED 0 -add_storage_parameter F2SDRAM_WR_PORT_USED 0 -add_storage_parameter F2SDRAM_RD_PORT_USED 0 -add_storage_parameter F2SDRAM_RST_PORT_USED 0 -set_parameter_property F2SDRAM_Width_Last_Size group $group_name -set_parameter_property F2SDRAM_CMD_PORT_USED group $group_name -set_parameter_property F2SDRAM_WR_PORT_USED group $group_name -set_parameter_property F2SDRAM_RD_PORT_USED group $group_name -set_parameter_property F2SDRAM_RST_PORT_USED group $group_name - -#Parameter to export Bonding_out signal from fpga2sdram Atom -add_parameter BONDING_OUT_ENABLED boolean false -set_parameter_property BONDING_OUT_ENABLED display_name "Enable BONDING-OUT signals" -set_parameter_property BONDING_OUT_ENABLED group $group_name -set_parameter_property BONDING_OUT_ENABLED enabled false -set_parameter_property BONDING_OUT_ENABLED visible false - - -proc on_altered_f2sdram_width { param } { - set old_size [get_parameter_value F2SDRAM_Width_Last_Size] - set current_value [get_parameter_value F2SDRAM_Width] - set current_size [llength $current_value] - - if {$current_size == $old_size + 1} { ;# look for case of newly added row - set last_element_index [expr {$current_size - 1}] - set new_value [lreplace $current_value $last_element_index $last_element_index "64"] - set_parameter_value F2SDRAM_Width $new_value - } -} - -add_reset_parameters - -add_dma_parameters - -add_interrupt_parameters - - set group_name "EMAC ptp interface" - add_display_item "FPGA Interfaces" $group_name "group" "" - - add_parameter EMAC0_PTP boolean false - set_parameter_property EMAC0_PTP display_name "Enable EMAC0 Precision Time Protocol (PTP) FPGA Interface" - set_parameter_property EMAC0_PTP hdl_parameter false - set_parameter_property EMAC0_PTP enabled false - set_parameter_property EMAC0_PTP group $group_name - set_parameter_property EMAC0_PTP description "When the EMAC is connected to the HPS IO via the Pinmux, the IEEE 1588 Precision Time Protocol (PTP) interface can be accessed through the FPGA. When the EMAC connects to the FPGA, the PTP signals are always available." - - add_parameter EMAC1_PTP boolean false - set_parameter_property EMAC1_PTP display_name "Enable EMAC1 Precision Time Protocol (PTP) FPGA Interface" - set_parameter_property EMAC1_PTP hdl_parameter false - set_parameter_property EMAC1_PTP enabled false - set_parameter_property EMAC1_PTP group $group_name - set_parameter_property EMAC1_PTP description "When the EMAC is connected to the HPS IO via the Pinmux, the IEEE 1588 Precision Time Protocol (PTP) interface can be accessed through the FPGA. When the EMAC connects to the FPGA, the PTP signals are always available." - - -proc make_mode_display_name {peripheral} { - set default_suffix "mode" - array set custom_suffix_by_peripheral { - USB0 "PHY interface mode" - USB1 "PHY interface mode" - } - if {[info exists custom_suffix_by_peripheral($peripheral)]} { - set suffix $custom_suffix_by_peripheral($peripheral) - } else { - set suffix $default_suffix - } - - set display_name "${peripheral} ${suffix}" - return $display_name -} - -proc add_peripheral_pin_muxing_parameters {} { - set TOP_LEVEL_GROUP_NAME "Peripheral Pins" - - - foreach group_name [list_group_names] { - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - - foreach peripheral_name [peripherals_in_group $group_name] { - set pin_muxing_param_name "${peripheral_name}_PinMuxing" - set mode_param_name "${peripheral_name}_Mode" - add_parameter $pin_muxing_param_name string [UNUSED_MUX_VALUE] - set_parameter_property $pin_muxing_param_name enabled false - set_parameter_property $pin_muxing_param_name display_name "${peripheral_name} pin" - set_parameter_property $pin_muxing_param_name allowed_ranges [UNUSED_MUX_VALUE] - set_parameter_property $pin_muxing_param_name group $group_name - set_parameter_update_callback $pin_muxing_param_name on_altered_peripheral_pin_muxing $peripheral_name - - set mode_display_name [make_mode_display_name $peripheral_name] - add_parameter $mode_param_name string [NA_MODE_VALUE] - set_parameter_property $mode_param_name enabled false - set_parameter_property $mode_param_name display_name $mode_display_name - set_parameter_property $mode_param_name allowed_ranges [NA_MODE_VALUE] - set_parameter_property $mode_param_name group $group_name - - if {[string match "*EMAC*" $peripheral_name]} { - set_parameter_update_callback $mode_param_name on_emac_mode_switch_internal $peripheral_name - } - } - } -} -add_peripheral_pin_muxing_parameters - -proc add_gpio_parameters {} { - set TOP_LEVEL_GROUP_NAME "Peripheral Pins" - set group_name "Peripherals Mux Table" - set table_name "Conflict Table" - - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - #add_display_item $group_name $table_name "group" "table" - - add_parameter Customer_Pin_Name_DERIVED string_list {} - set_parameter_property Customer_Pin_Name_DERIVED display_name "Pin Name" - set_parameter_property Customer_Pin_Name_DERIVED derived true - set_parameter_property Customer_Pin_Name_DERIVED display_hint "FIXED_SIZE" - set_parameter_property Customer_Pin_Name_DERIVED visible false - # set_parameter_property Customer_Pin_Name_DERIVED group $table_name - - add_parameter GPIO_Conflict_DERIVED string_list {} - set_parameter_property GPIO_Conflict_DERIVED display_name "Used by" - set_parameter_property GPIO_Conflict_DERIVED derived true - set_parameter_property GPIO_Conflict_DERIVED display_hint "FIXED_SIZE" - set_parameter_property GPIO_Conflict_DERIVED visible false - #set_parameter_property GPIO_Conflict_DERIVED group $table_name - - add_parameter GPIO_Name_DERIVED string_list {} - set_parameter_property GPIO_Name_DERIVED display_name "GPIO" - set_parameter_property GPIO_Name_DERIVED derived true - set_parameter_property GPIO_Name_DERIVED display_hint "FIXED_SIZE" - set_parameter_property GPIO_Name_DERIVED visible false - #set_parameter_property GPIO_Name_DERIVED group $table_name - - # TODO: change? - set max_possible_gpio_options 100 - set enable_list [list] - for {set i 0} {$i < $max_possible_gpio_options} {incr i} { - lappend enable_list "No" - } - - add_parameter GPIO_Enable string_list $enable_list - set_parameter_property GPIO_Enable allowed_ranges {"Yes" "No"} - set_parameter_property GPIO_Enable display_name "GPIO Enabled" - set_parameter_property GPIO_Enable visible false - # set_parameter_property GPIO_Enable group $table_name - - add_parameter LOANIO_Name_DERIVED string_list {} - set_parameter_property LOANIO_Name_DERIVED display_name "Loan I/O" - set_parameter_property LOANIO_Name_DERIVED derived true - set_parameter_property LOANIO_Name_DERIVED display_hint "FIXED_SIZE" - set_parameter_property LOANIO_Name_DERIVED visible false - - add_parameter GPIO_Pin_Used_DERIVED boolean false - set_parameter_property GPIO_Pin_Used_DERIVED display_name "GPIO Pin Used" - set_parameter_property GPIO_Pin_Used_DERIVED derived true - set_parameter_property GPIO_Pin_Used_DERIVED display_hint "GPIO Pin Used" - set_parameter_property GPIO_Pin_Used_DERIVED visible false - - add_parameter LOANIO_Enable string_list $enable_list - set_parameter_property LOANIO_Enable allowed_ranges {"Yes" "No"} - set_parameter_property LOANIO_Enable display_name "Loan I/O Enabled" - set_parameter_property LOANIO_Enable visible false - #set_parameter_property LOANIO_Enable group $table_name - - - -} -add_gpio_parameters - -proc add_reset_parameters {} { - set group_name "Resets" - add_display_item "FPGA Interfaces" $group_name "group" "" - - add_parameter S2FCLK_COLDRST_Enable boolean false "" - set_parameter_property S2FCLK_COLDRST_Enable display_name "Enable HPS-to-FPGA cold reset output" - set_parameter_property S2FCLK_COLDRST_Enable group $group_name - - add_parameter S2FCLK_PENDINGRST_Enable boolean false "" - set_parameter_property S2FCLK_PENDINGRST_Enable display_name "Enable HPS warm reset handshake signals" - set_parameter_property S2FCLK_PENDINGRST_Enable group $group_name - - add_parameter F2SCLK_DBGRST_Enable boolean false "" - set_parameter_property F2SCLK_DBGRST_Enable display_name "Enable FPGA-to-HPS debug reset request" - set_parameter_property F2SCLK_DBGRST_Enable group $group_name - - add_parameter F2SCLK_WARMRST_Enable boolean false "" - set_parameter_property F2SCLK_WARMRST_Enable display_name "Enable FPGA-to-HPS warm reset request" - set_parameter_property F2SCLK_WARMRST_Enable group $group_name - - add_parameter F2SCLK_COLDRST_Enable boolean false "" - set_parameter_property F2SCLK_COLDRST_Enable display_name "Enable FPGA-to-HPS cold reset request" - set_parameter_property F2SCLK_COLDRST_Enable group $group_name - -} - -proc add_java_gui_parameters {} { - set TOP_LEVEL_GROUP_NAME "Peripheral Pins" - set group_name "Peripherals Mux Table" - - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - # add_display_item $group_name the_widget "group" "" - - add_parameter JAVA_CONFLICT_PIN string_list {} - set_parameter_property JAVA_CONFLICT_PIN derived true - set_parameter_property JAVA_CONFLICT_PIN visible false - - - add_parameter JAVA_GUI_PIN_LIST string_list {} - set_parameter_property JAVA_GUI_PIN_LIST derived true - set_parameter_property JAVA_GUI_PIN_LIST visible false - - set peripherals [list_peripheral_names] - set widget_parameter [list \ - Customer_Pin_Name_DERIVED Customer_Pin_Name_DERIVED \ - GPIO_Name_DERIVED GPIO_Name_DERIVED \ - LOANIO_Name_DERIVED LOANIO_Name_DERIVED \ - LOANIO_Enable LOANIO_Enable \ - GPIO_Enable GPIO_Enable \ - JAVA_CONFLICT_PIN GUI_Conflict_Pins_List \ - JAVA_GUI_PIN_LIST GUI_GPIO_Pins_List] - - foreach peripheral_name $peripherals { - add_parameter "JAVA_${peripheral_name}_DATA" string "" - set_parameter_property "JAVA_${peripheral_name}_DATA" derived true - set_parameter_property "JAVA_${peripheral_name}_DATA" visible false - - lappend widget_parameter "JAVA_${peripheral_name}_DATA" - lappend widget_parameter "${peripheral_name}_pin_muxing" - lappend widget_parameter "${peripheral_name}_PinMuxing" - lappend widget_parameter "${peripheral_name}_PinMuxing" - lappend widget_parameter "${peripheral_name}_Mode" - lappend widget_parameter "${peripheral_name}_Mode" - } - - add_display_item $group_name the_widget "group" - set_display_item_property the_widget widget [list ../widget/pin_mux_widget.jar Altera_hps_widget] - set_display_item_property the_widget widget_parameter_map $widget_parameter -} - -add_java_gui_parameters - -############################################## -# Clocks! -# -# All clock enable parameters go here. -# Clock frequency parameters also go here. All -# the parameters need to be declared regardless -# of whether the clock will be exercised. -# -# Validation logic will enable/show frequency -# parameters based on whether the actual clock -# is being elaborated. -# -# There are four categories of clocks in this -# component: inputs on SoC I/O -# outputs on SoC I/O -# inputs on FPGA pins -# outputs on FPGA pins -# -# Inputs on SoC I/O have user-input parameters -# so the data can be consumed by downstream -# embedded software tools. -# Outputs on SoC I/O need not have frequency -# information recorded. -# Inputs on FPGA pins have system info parameters -# so the data can be consumed by downstream -# embedded software tools. -# Outputs on FPGA pins have user input parameters -# to be consumed by Quartus via SDC. -# -############################################## -proc add_clock_parameters {} { - set TOP_LEVEL_GROUP_NAME "Input Clocks" - - set group_name "User Clocks" - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - - # fake group - set group_name "FPGA Interface Clocks" - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - - foreach interface { - f2h_axi_clock h2f_axi_clock h2f_lw_axi_clock - f2h_sdram0_clock f2h_sdram1_clock f2h_sdram2_clock - f2h_sdram3_clock f2h_sdram4_clock f2h_sdram5_clock - h2f_cti_clock h2f_tpiu_clock_in h2f_debug_apb_clock - } { - set parameter "[string toupper ${interface}]_FREQ" - add_parameter $parameter integer 100 "" - set_parameter_property $parameter display_name "${interface} clock frequency" - set_parameter_property $parameter system_info_type "CLOCK_RATE" - set_parameter_property $parameter system_info_arg $interface - set_parameter_property $parameter visible false - set_parameter_property $parameter group $group_name - } - - set peripherals [list_peripheral_names] - - # TODO: Remove the following for 12.0 - set group_name "Peripheral FPGA Clocks" - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - - # Add parameter explicitly for cross-emac ptp since it doesn't belong to a single peripheral - set parameter [form_peripheral_fpga_input_clock_frequency_parameter emac_ptp_ref_clock] - add_parameter $parameter integer 100 "" - set_parameter_property $parameter display_name "EMAC emac_ptp_ref_clock clock frequency" - set_parameter_property $parameter group $group_name - set_parameter_property $parameter system_info_type "CLOCK_RATE" - set_parameter_property $parameter system_info_arg emac_ptp_ref_clock - set_parameter_property $parameter visible false - - foreach peripheral $peripherals { - set clocks [get_peripheral_fpga_input_clocks $peripheral] - foreach clock $clocks { - set parameter [form_peripheral_fpga_input_clock_frequency_parameter $clock] - add_parameter $parameter integer 100 "" - set_parameter_property $parameter display_name "${peripheral} ${clock} clock frequency" - set_parameter_property $parameter group $group_name - set_parameter_property $parameter system_info_type "CLOCK_RATE" - set_parameter_property $parameter system_info_arg $clock - set_parameter_property $parameter visible false - } - - set clocks [get_peripheral_fpga_output_clocks $peripheral] - foreach clock $clocks { - set parameter [form_peripheral_fpga_output_clock_frequency_parameter $clock] - if { [string match "*emac?_md*" $clock]} { - add_parameter $parameter float 2.5 "" - } elseif { [string match "*emac?_gtx_clk*" $clock] } { - add_parameter $parameter integer 125 "" - } else { - add_parameter $parameter integer 100 "" - if { [string compare $peripheral "SDIO" ] == 0 } { - set_parameter_property $parameter visible false - } - } - set_parameter_property $parameter display_name "${peripheral} ${clock} clock frequency" - set_parameter_property $parameter group $group_name - set_parameter_property $parameter units Megahertz - set_parameter_property $parameter allowedRanges {1:1000} - } - - } -} -add_clock_parameters - -add_parameter hps_device_family string "" "" -set_parameter_property hps_device_family derived true -set_parameter_property hps_device_family visible false - -add_parameter device_name string "" "" -set_parameter_property device_name system_info {DEVICE} -set_parameter_property device_name visible false - -add_parameter quartus_ini_hps_ip_enable_all_peripheral_fpga_interfaces boolean "" "" -set_parameter_property quartus_ini_hps_ip_enable_all_peripheral_fpga_interfaces system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_enable_all_peripheral_fpga_interfaces system_info_arg hps_ip_enable_all_peripheral_fpga_interfaces -set_parameter_property quartus_ini_hps_ip_enable_all_peripheral_fpga_interfaces visible false - -add_parameter quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface boolean "" "" -set_parameter_property quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface system_info_arg hps_ip_enable_emac0_peripheral_fpga_interface -set_parameter_property quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface visible false - -add_parameter quartus_ini_hps_ip_enable_test_interface boolean "" "" -set_parameter_property quartus_ini_hps_ip_enable_test_interface system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_enable_test_interface system_info_arg hps_ip_enable_test_interface -set_parameter_property quartus_ini_hps_ip_enable_test_interface visible false - -add_parameter quartus_ini_hps_ip_fast_f2sdram_sim_model boolean "" "" -set_parameter_property quartus_ini_hps_ip_fast_f2sdram_sim_model system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_fast_f2sdram_sim_model system_info_arg hps_ip_fast_f2sdram_sim_model -set_parameter_property quartus_ini_hps_ip_fast_f2sdram_sim_model visible false - -add_parameter quartus_ini_hps_ip_suppress_sdram_synth boolean "" "" -set_parameter_property quartus_ini_hps_ip_suppress_sdram_synth system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_suppress_sdram_synth system_info_arg hps_ip_suppress_sdram_synth -set_parameter_property quartus_ini_hps_ip_suppress_sdram_synth visible false - -add_parameter quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces boolean "" "" -set_parameter_property quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces system_info_arg hps_ip_enable_low_speed_serial_fpga_interfaces -set_parameter_property quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces visible false - -add_parameter quartus_ini_hps_ip_enable_bsel_csel boolean "" "" -set_parameter_property quartus_ini_hps_ip_enable_bsel_csel system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_enable_bsel_csel system_info_arg hps_ip_enable_bsel_csel -set_parameter_property quartus_ini_hps_ip_enable_bsel_csel visible false - -add_parameter quartus_ini_hps_ip_f2sdram_bonding_out boolean "" "" -set_parameter_property quartus_ini_hps_ip_f2sdram_bonding_out system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_f2sdram_bonding_out system_info_arg hps_ip_enable_f2sdram_bonding_out -set_parameter_property quartus_ini_hps_ip_f2sdram_bonding_out visible false - - -add_parameter quartus_ini_hps_emif_pll boolean "" "" -set_parameter_property quartus_ini_hps_emif_pll system_info_type quartus_ini -set_parameter_property quartus_ini_hps_emif_pll system_info_arg hps_emif_pll -set_parameter_property quartus_ini_hps_emif_pll visible false - - -proc load_test_iface_definition {} { - set csv_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/test_iface.csv - - set data [list] - set count 0 - csv_foreach_row $csv_file cols { - incr count - if {$count == 1} { - continue - } - - lassign_trimmed $cols port width dir - lappend data $port $width $dir - } - return $data -} -add_storage_parameter test_iface_definition [load_test_iface_definition] - -# order of interfaces per peripheral should be kept -# order of ports per interface should be kept -proc load_periph_ifaces_db {} { - set interfaces_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/fpga_peripheral_interfaces.csv - set peripherals_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/fpga_peripheral_atoms.csv - set ports_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/fpga_interface_ports.csv - set pins_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/fpga_port_pins.csv - set bfm_types_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/fpga_bfm_types.csv - - # peripherals and interfaces - set peripherals([ORDERED_NAMES]) [list] - funset interface_ports - set count 0 - set PERIPHERAL_INTERFACES_PROPERTIES_COLUMNS_START 4 - csv_foreach_row $interfaces_file cols { - incr count - # skip header - if {$count == 1} { - set ordered_names [list] - set length [llength $cols] - for {set col $PERIPHERAL_INTERFACES_PROPERTIES_COLUMNS_START} {$col < $length} {incr col} { - set col_value [lindex $cols $col] - if {$col_value != ""} { - set property_to_col($col_value) $col - lappend ordered_names $col_value - } - } - set property_to_col([ORDERED_NAMES]) $ordered_names - continue - } - - set peripheral_name [string trim [lindex $cols 0]] - set interface_name [string trim [lindex $cols 1]] - set type [string trim [lindex $cols 2]] - set dir [string trim [lindex $cols 3]] - - funset peripheral - if {[info exists peripherals($peripheral_name)]} { - array set peripheral $peripherals($peripheral_name) - } else { - funset interfaces - set interfaces([ORDERED_NAMES]) [list] - set peripheral(interfaces) [array get interfaces] - set ordered_names $peripherals([ORDERED_NAMES]) - lappend ordered_names $peripheral_name - set peripherals([ORDERED_NAMES]) $ordered_names - } - funset interfaces - array set interfaces $peripheral(interfaces) - set ordered_names $interfaces([ORDERED_NAMES]) - lappend ordered_names $interface_name - set interfaces([ORDERED_NAMES]) $ordered_names - funset interface - set interface(type) $type - set interface(direction) $dir - funset properties - foreach property $property_to_col([ORDERED_NAMES]) { - set col $property_to_col($property) - set property_value [lindex $cols $col] - - if {$property_value != ""} { - # Add Meta Property - if { [string compare [string index ${property} 0] "@" ] == 0 } { - set interface(${property}) ${property_value} - } else { - set properties($property) $property_value - } - } - } - - set interface(properties) [array get properties] - - set interfaces($interface_name) [array get interface] - set peripheral(interfaces) [array get interfaces] - set peripherals($peripheral_name) [array get peripheral] - - funset ports - set ports([ORDERED_NAMES]) [list] - set interface_ports($interface_name) [array get ports] - } - set count 0 - csv_foreach_row $peripherals_file cols { ;# peripheral atom and location table - incr count - - # skip header - if {$count == 1} { - continue - } - - set peripheral_name [string trim [lindex $cols 0]] - set atom_name [string trim [lindex $cols 1]] - - funset peripheral - if {[info exists peripherals($peripheral_name)]} { - array set peripheral $peripherals($peripheral_name) - } else { - # Assume that if a peripheral hasn't be recognized until now, we won't be using it - continue - } - set peripheral(atom_name) $atom_name - set peripherals($peripheral_name) [array get peripheral] - } - add_parameter DB_periph_ifaces string [array get peripherals] "" - set_parameter_property DB_periph_ifaces derived true - set_parameter_property DB_periph_ifaces visible false - - set p [array get peripherals] - send_message debug "DB_periph_ifaces: ${p}" - - # ports - array set ports_to_pins {} - # # prepopulate interface_ports with names of interfaces that are known - # foreach {peripheral_name peripheral_string} [array get peripherals] { - # array set peripheral_array $peripheral_string - # foreach interface_name [array names peripheral_array] { - # set interface_ports($interface_name) {} - # } - # } - set count 0 - csv_foreach_row $ports_file cols { - incr count - - # skip header - if {$count == 1} continue - - set interface_name [string trim [lindex $cols 0]] - set port_name [string trim [lindex $cols 1]] - set role [string trim [lindex $cols 2]] - set dir [string trim [lindex $cols 3]] - set atom_signal_name [string trim [lindex $cols 4]] - - funset interface - array set interface $interface_ports($interface_name) - set ordered_names $interface([ORDERED_NAMES]) - lappend ordered_names $port_name - set interface([ORDERED_NAMES]) $ordered_names - - funset port - set port(role) $role - set port(direction) $dir - set port(atom_signal_name) $atom_signal_name - set interface($port_name) [array get port] - set interface_ports($interface_name) [array get interface] - - set ports_to_pins($port_name) {} - } - add_parameter DB_iface_ports string [array get interface_ports] "" - set_parameter_property DB_iface_ports derived true - set_parameter_property DB_iface_ports visible false - - set p [array get interface_ports] - send_message debug "DB_iface_ports: ${p}" - - # peripheral signals to ports - set count 0 - csv_foreach_row $pins_file cols { - incr count - - # skip header - if {$count == 1} continue - - set peripheral_name [string trim [lindex $cols 0]] - set pin_name [string trim [lindex $cols 1]] - set port_name [string trim [lindex $cols 2]] - - set is_multibit_signal [regexp {^([a-zA-Z0-9_]+)\[([0-9]+)\]} $port_name match real_name bit] - if {$is_multibit_signal == 0} { - set bit 0 - } else { - set port_name $real_name - } - - if {[info exists ports_to_pins($port_name)] == 0} { - send_message error "Peripheral ${peripheral_name} signal ${pin_name} is defined but corresponding FPGA signal ${port_name}\[${bit}\] is not" - } else { - funset port - array set port $ports_to_pins($port_name) - - if {[info exists port($bit)]} { - # collision! - send_message error "Signal ${port_name}\[${bit}\] is having original assignment ${peripheral_name}.${port($bit)} replaced with ${peripheral_name}.${pin_name}" - } - set port($bit) $pin_name - set ports_to_pins($port_name) [array get port] - } - } - add_parameter DB_port_pins string [array get ports_to_pins] "" - set_parameter_property DB_port_pins derived true - set_parameter_property DB_port_pins visible false - - set p [array get ports_to_pins] - send_message debug "DB_port_pins: ${p}" - - # bfm types - set count 0 - funset bfm_types - csv_foreach_row $bfm_types_file cols { - incr count - - # skip header - if {$count == 1} continue - - set bfm_type_name [string trim [lindex $cols 0]] - set property_name [string trim [lindex $cols 1]] - set value [string trim [lindex $cols 2]] - - if {[info exists bfm_types($bfm_type_name)] == 0} { - set bfm_types($bfm_type_name) {} - } - funset bfm_type - array set bfm_type $bfm_types($bfm_type_name) - set bfm_type($property_name) $value - set bfm_types($bfm_type_name) [array get bfm_type] - } - add_parameter DB_bfm_types string [array get bfm_types] "" - set_parameter_property DB_bfm_types derived true - set_parameter_property DB_bfm_types visible false - # TODO: what to do so that mode information on a peripheral.pin basis can be used for elaboration??? -} - -# only run during class creation -load_periph_ifaces_db - -####################### -##### Composition ##### -####################### - -namespace eval ::fpga_interfaces { - source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_interface_generator/api.tcl -} - -namespace eval ::hps_io { - namespace eval internal { - source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_interface_generator/api.tcl - } - variable pins - - proc add_peripheral {peripheral_name atom_name location} { - internal::add_module_instance $peripheral_name $atom_name $location - } - - # oe used in tristate output and inout - # out used in output and inout - # in used in input and inout - proc add_pin {peripheral_name pin_name dir location in_port out_port oe_port} { - variable pins - lappend pins [list $peripheral_name $pin_name $dir $location $in_port $out_port $oe_port] - } - - proc process_pins {} { - variable pins - - set interface_name "hps_io" - set hps_io_interface_created 0 - funset ports_used ;# set of inst/ports used - funset port_wire ;# map of ports to aliased wires - foreach pin $pins { ;# Check for multiple uses of the same port and create wires for those cases - lassign $pin peripheral_name pin_name dir location in_port out_port oe_port - - # check to see if port is used multiple times - foreach port_part [list $in_port $out_port $oe_port] { - if {$port_part != "" && [info exists ports_used($port_part)]} { - # Assume only outputs will be used multiple times. Inputs would be an error - if {[info exists port_wire($port_part)] == 0} { - set port_wire($port_part) [internal::allocate_wire] - # Drive new wire with port - internal::set_wire_port_fragments $port_wire($port_part) driven_by $port_part - } - } - set ports_used($port_part) 1 - } - } - - set qip [list] - foreach pin $pins { - lassign $pin peripheral_name pin_name dir location in_port out_port oe_port - foreach port_part_ref {in_port out_port oe_port} { ;# Replace ports with wires if needed - set port_part [set $port_part_ref] - if {[info exists port_wire($port_part)]} { - set $port_part_ref [internal::wire_tofragment $port_wire($port_part)] - } - } - - # Hook things up - set instance_name [string tolower $peripheral_name] ;# is this necessary??? - if {$hps_io_interface_created == 0} { - set hps_io_interface_created 1 - internal::add_interface $interface_name conduit input - } - set export_signal_name "hps_io_${instance_name}_${pin_name}" - internal::add_interface_port $interface_name $export_signal_name $export_signal_name $dir 1 - if {[string compare $dir "input"] == 0} { - internal::set_port_fragments $interface_name $export_signal_name $in_port - internal::add_raw_sdc_constraint "set_false_path -from \[get_ports ${interface_name}_${export_signal_name}\] -to *" - } elseif {[string compare $dir "output"] == 0} { - if {[string compare $oe_port "" ] == 0} { - internal::set_port_fragments $interface_name $export_signal_name $out_port - internal::add_raw_sdc_constraint "set_false_path -from * -to \[get_ports ${interface_name}_${export_signal_name}\]" - } else { - internal::set_port_tristate_output $interface_name $export_signal_name $out_port $oe_port - internal::add_raw_sdc_constraint "set_false_path -from * -to \[get_ports ${interface_name}_${export_signal_name}\]" - } - } else { - internal::set_port_fragments $interface_name $export_signal_name $in_port - internal::set_port_tristate_output $interface_name $export_signal_name $out_port $oe_port - internal::add_raw_sdc_constraint "set_false_path -from \[get_ports ${interface_name}_${export_signal_name}\] -to *" - internal::add_raw_sdc_constraint "set_false_path -from * -to \[get_ports ${interface_name}_${export_signal_name}\]" - } - set path_to_pin "hps_io|border|${export_signal_name}\[0\]" - set location_assignment "set_instance_assignment -name HPS_LOCATION ${location} -entity %entityName% -to ${path_to_pin}" - lappend qip $location_assignment - } - set_qip_strings $qip - } - - proc init {} { - internal::init - variable pins [list] - } - - proc serialize {var_name} { - upvar 1 $var_name data - process_pins - internal::serialize data - } -} - -set_module_property composition_callback compose - -proc compose {} { - # synchronize device families between the EMIF and HPS parameter sets - set_parameter_value hps_device_family [get_parameter_value SYS_INFO_DEVICE_FAMILY] - fpga_interfaces::init - fpga_interfaces::set_bfm_types [array get DB_bfm_types] - - hps_io::init - validate - elab 0 - - update_hps_to_fpga_clock_frequency_parameters - - - fpga_interfaces::serialize fpga_interfaces_data - - add_instance fpga_interfaces altera_interface_generator - set_instance_parameter_value fpga_interfaces interfaceDefinition [array get fpga_interfaces_data] - - expose_border fpga_interfaces $fpga_interfaces_data(interfaces) - - declare_cmsis_svd $fpga_interfaces_data(interfaces) - - clear_array temp_array -} - -proc logicalview_dtg {} { - - set hard_peripheral_logical_view_dir $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/hard_peripheral_logical_view - - source "$hard_peripheral_logical_view_dir/common/hps_utils.tcl" - - source "$hard_peripheral_logical_view_dir/hps_periphs/hps_periphs.tcl" - - set f2h_present [ expr [ get_parameter_value F2S_Width ] != 0] - set h2f_present [ expr [ get_parameter_value S2F_Width ] != 0] - set F2S_Width [ get_parameter_value F2S_Width ] - set S2F_Width [ get_parameter_value S2F_Width ] - set h2f_lw_present [ expr [ string compare [ get_parameter_value LWH2F_Enable ] "true" ] == 0 ] - set LWH2F_Enable [ get_parameter_value LWH2F_Enable ] - set device_family [get_parameter_value SYS_INFO_DEVICE_FAMILY] - - # Need to add whole bunch of device tree generation parameters here (dtg) - # Getting whether is it single or dual core by checking the device family. List of single core: - # Cyclone V SE - regsub "^.* V" $device_family "" se_family - regsub " " $se_family "" se_family - - set number_of_a9 0 - if { [string toupper $se_family] == "SE"} { - set number_of_a9 1 - } else { - set number_of_a9 2 - } - - set F2SDRAM_Width [get_parameter_value F2SDRAM_Width] - set F2SDRAM_Type [get_parameter_value F2SDRAM_Type] - set quartus_ini_hps_ip_f2sdram_bonding_out [get_parameter_value quartus_ini_hps_ip_f2sdram_bonding_out] - set BONDING_OUT_ENABLED [get_parameter_value BONDING_OUT_ENABLED] - add_instance clk_0 hps_clk_src - hps_utils_add_instance_clk_reset clk_0 bridges hps_bridge_avalon - set_instance_parameter_value bridges F2S_Width $F2S_Width - set_instance_parameter_value bridges S2F_Width $S2F_Width - set_instance_parameter_value bridges BONDING_OUT_ENABLED $BONDING_OUT_ENABLED - set_instance_parameter_value bridges LWH2F_Enable $LWH2F_Enable - set_instance_parameter_value bridges quartus_ini_hps_ip_f2sdram_bonding_out $quartus_ini_hps_ip_f2sdram_bonding_out - add_interface h2f_reset reset output - set_interface_property h2f_reset EXPORT_OF bridges.h2f_reset - set_interface_property h2f_reset PORT_NAME_MAP "h2f_rst_n h2f_rst_n" - - set rows [llength $F2SDRAM_Width] - set type_list $F2SDRAM_Type - set append_type_list "" - set append_type_width "" - set total_command_port 0 - set total_write_port 0 - set total_read_port 0 - if {$rows > 0} { - for {set i 0} {${i} < $rows} {incr i} { - set type_choice [lindex $type_list $i] - set type_width [lindex $F2SDRAM_Width $i] - if { [string compare $type_choice [F2HSDRAM_AVM]] == 0 } { - set type_id 1 - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - set total_read_port [expr $total_read_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - set total_read_port [expr $total_read_port + 1] - } - } elseif { [string compare $type_choice [F2HSDRAM_AVM_WRITEONLY]] == 0 } { - set type_id 2 - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - } - } elseif { [string compare $type_choice [F2HSDRAM_AVM_READONLY]] == 0 } { - set type_id 3 - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_read_port [expr $total_read_port + 4] - } else { - set total_read_port [expr $total_read_port + 1] - } - } else { - set type_id 0 - if { [ expr $total_command_port % 2 ] } { - incr total_command_port 1 - } - set total_command_port [expr $total_command_port + 2] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - set total_read_port [expr $total_read_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - set total_read_port [expr $total_read_port + 1] - } - } - - if {$total_command_port > 6} { - if {$type_id == 0} { - send_message error "No command ports available to allocate AXI Interface f2h_sdram${i}" - } else { - send_message error "No command ports available to allocate Avalon-MM Interface f2h_sdram${i}" - } - } - if {$total_read_port > 4} { - if {$type_id == 0} { - send_message error "No read ports available to allocate AXI Interface f2h_sdram${i}" - } else { - send_message error "No read ports available to allocate Avalon-MM Interface f2h_sdram${i}" - } - } - if {$total_write_port > 4} { - if {$type_id == 0} { - send_message error "No write ports available to allocate AXI Interface f2h_sdram${i}" - } else { - send_message error "No write ports available to allocate Avalon-MM Interface f2h_sdram${i}" - } - } - if {$total_command_port < 7 && $total_write_port < 5 && $total_read_port < 5} { - lappend append_type_list $type_id - lappend append_type_width $type_width - } - } - } - set_instance_parameter_value bridges F2SDRAM_Type $append_type_list - set_instance_parameter_value bridges F2SDRAM_Width $append_type_width - set total_command_port 0 - set total_write_port 0 - set total_read_port 0 - set bonding_out_signal [expr { [string compare [get_parameter_value BONDING_OUT_ENABLED] "true"] == 0} && {[string compare [get_parameter_value quartus_ini_hps_ip_f2sdram_bonding_out] "true"] == 0}] - - if {$rows > 0} { - for {set i 0} {${i} < $rows} {incr i} { - - set type_choice [lindex $type_list $i] - set type_width [lindex $F2SDRAM_Width $i] - - if { [string compare $type_choice [F2HSDRAM_AVM]] == 0 } { - set type "avalon" - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - set total_read_port [expr $total_read_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - set total_read_port [expr $total_read_port + 1] - } - set sdram_data "f2h_sdram${i}_ADDRESS f2h_sdram${i}_ADDRESS f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_READDATA f2h_sdram${i}_READDATA f2h_sdram${i}_READDATAVALID f2h_sdram${i}_READDATAVALID f2h_sdram${i}_READ f2h_sdram${i}_READ f2h_sdram${i}_WRITEDATA f2h_sdram${i}_WRITEDATA f2h_sdram${i}_BYTEENABLE f2h_sdram${i}_BYTEENABLE f2h_sdram${i}_WRITE f2h_sdram${i}_WRITE" - } elseif { [string compare $type_choice [F2HSDRAM_AVM_WRITEONLY]] == 0 } { - set type "avalon" - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - } - set sdram_data "f2h_sdram${i}_ADDRESS f2h_sdram${i}_ADDRESS f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_WRITEDATA f2h_sdram${i}_WRITEDATA f2h_sdram${i}_BYTEENABLE f2h_sdram${i}_BYTEENABLE f2h_sdram${i}_WRITE f2h_sdram${i}_WRITE" - } elseif { [string compare $type_choice [F2HSDRAM_AVM_READONLY]] == 0 } { - set type "avalon" - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_read_port [expr $total_read_port + 4] - } else { - set total_read_port [expr $total_read_port + 1] - } - set sdram_data "f2h_sdram${i}_ADDRESS f2h_sdram${i}_ADDRESS f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_READDATA f2h_sdram${i}_READDATA f2h_sdram${i}_READDATAVALID f2h_sdram${i}_READDATAVALID f2h_sdram${i}_READ f2h_sdram${i}_READ" - } else { - set type "axi" - if { [ expr $total_command_port % 2 ] } { - incr total_command_port 1 - } - set total_command_port [expr $total_command_port + 2] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - set total_read_port [expr $total_read_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - set total_read_port [expr $total_read_port + 1] - } - set sdram_data "f2h_sdram${i}_ARADDR f2h_sdram${i}_ARADDR f2h_sdram${i}_ARLEN f2h_sdram${i}_ARLEN f2h_sdram${i}_ARID f2h_sdram${i}_ARID f2h_sdram${i}_ARSIZE f2h_sdram${i}_ARSIZE f2h_sdram${i}_ARBURST f2h_sdram${i}_ARBURST f2h_sdram${i}_ARLOCK f2h_sdram${i}_ARLOCK f2h_sdram${i}_ARPROT f2h_sdram${i}_ARPROT f2h_sdram${i}_ARVALID f2h_sdram${i}_ARVALID f2h_sdram${i}_ARCACHE f2h_sdram${i}_ARCACHE f2h_sdram${i}_AWADDR f2h_sdram${i}_AWADDR f2h_sdram${i}_AWLEN f2h_sdram${i}_AWLEN f2h_sdram${i}_AWID f2h_sdram${i}_AWID f2h_sdram${i}_AWSIZE f2h_sdram${i}_AWSIZE f2h_sdram${i}_AWBURST f2h_sdram${i}_AWBURST f2h_sdram${i}_AWLOCK f2h_sdram${i}_AWLOCK f2h_sdram${i}_AWPROT f2h_sdram${i}_AWPROT f2h_sdram${i}_AWVALID f2h_sdram${i}_AWVALID f2h_sdram${i}_AWCACHE f2h_sdram${i}_AWCACHE f2h_sdram${i}_BRESP f2h_sdram${i}_BRESP f2h_sdram${i}_BID f2h_sdram${i}_BID f2h_sdram${i}_BVALID f2h_sdram${i}_BVALID f2h_sdram${i}_BREADY f2h_sdram${i}_BREADY f2h_sdram${i}_ARREADY f2h_sdram${i}_ARREADY f2h_sdram${i}_AWREADY f2h_sdram${i}_AWREADY f2h_sdram${i}_RREADY f2h_sdram${i}_RREADY f2h_sdram${i}_RDATA f2h_sdram${i}_RDATA f2h_sdram${i}_RRESP f2h_sdram${i}_RRESP f2h_sdram${i}_RLAST f2h_sdram${i}_RLAST f2h_sdram${i}_RID f2h_sdram${i}_RID f2h_sdram${i}_RVALID f2h_sdram${i}_RVALID f2h_sdram${i}_WLAST f2h_sdram${i}_WLAST f2h_sdram${i}_WVALID f2h_sdram${i}_WVALID f2h_sdram${i}_WDATA f2h_sdram${i}_WDATA f2h_sdram${i}_WSTRB f2h_sdram${i}_WSTRB f2h_sdram${i}_WREADY f2h_sdram${i}_WREADY f2h_sdram${i}_WID f2h_sdram${i}_WID" - } - - if {$total_command_port > 6 || $total_write_port > 4 || $total_read_port > 4} { - break - } - add_interface f2h_sdram${i}_clock clock Input - set_interface_property f2h_sdram${i}_clock EXPORT_OF bridges.f2h_sdram${i}_clock - set_interface_property f2h_sdram${i}_clock PORT_NAME_MAP "f2h_sdram${i}_clk f2h_sdram${i}_clk" - add_interface f2h_sdram${i}_data $type slave - set_interface_property f2h_sdram${i}_data EXPORT_OF bridges.f2h_sdram${i}_data - set_interface_property f2h_sdram${i}_data PORT_NAME_MAP "$sdram_data" - } - - if $bonding_out_signal { - set bon_out_signal "f2h_sdram_BONOUT_1 f2h_sdram_BONOUT_1 f2h_sdram_BONOUT_2 f2h_sdram_BONOUT_2" - add_interface f2h_sdram_bon_out conduit Output - set_interface_property f2h_sdram_bon_out EXPORT_OF bridges.f2h_sdram_bon_out - set_interface_property f2h_sdram_bon_out PORT_NAME_MAP "$bon_out_signal" - } - - } - - set declared_svd_file 0 - set svd_path [file join $::env(QUARTUS_ROOTDIR) .. ip altera hps altera_hps altera_hps.svd] - if { $h2f_present } { - hps_utils_add_slave_interface arm_a9_0.altera_axi_master bridges.axi_h2f {0xc0000000} - if { $number_of_a9 > 1 } { - hps_utils_add_slave_interface arm_a9_1.altera_axi_master bridges.axi_h2f {0xc0000000} - } - - add_interface h2f_axi_clock clock Input - set_interface_property h2f_axi_clock EXPORT_OF bridges.h2f_axi_clock - set_interface_property h2f_axi_clock PORT_NAME_MAP "h2f_axi_clk h2f_axi_clk" - - add_interface h2f_axi_master axi master - set_interface_property h2f_axi_master EXPORT_OF bridges.h2f - set_interface_property h2f_axi_master PORT_NAME_MAP "h2f_AWID h2f_AWID h2f_AWADDR h2f_AWADDR h2f_AWLEN h2f_AWLEN h2f_AWSIZE h2f_AWSIZE h2f_AWBURST h2f_AWBURST h2f_AWLOCK h2f_AWLOCK h2f_AWCACHE h2f_AWCACHE h2f_AWPROT h2f_AWPROT h2f_AWVALID h2f_AWVALID h2f_AWREADY h2f_AWREADY h2f_WID h2f_WID h2f_WDATA h2f_WDATA h2f_WSTRB h2f_WSTRB h2f_WLAST h2f_WLAST h2f_WVALID h2f_WVALID h2f_WREADY h2f_WREADY h2f_BID h2f_BID h2f_BRESP h2f_BRESP h2f_BVALID h2f_BVALID h2f_BREADY h2f_BREADY h2f_ARID h2f_ARID h2f_ARADDR h2f_ARADDR h2f_ARLEN h2f_ARLEN h2f_ARSIZE h2f_ARSIZE h2f_ARBURST h2f_ARBURST h2f_ARLOCK h2f_ARLOCK h2f_ARCACHE h2f_ARCACHE h2f_ARPROT h2f_ARPROT h2f_ARVALID h2f_ARVALID h2f_ARREADY h2f_ARREADY h2f_RID h2f_RID h2f_RDATA h2f_RDATA h2f_RRESP h2f_RRESP h2f_RLAST h2f_RLAST h2f_RVALID h2f_RVALID h2f_RREADY h2f_RREADY" - set_interface_property h2f_axi_master SVD_ADDRESS_GROUP "hps" - set_interface_property h2f_axi_master SVD_ADDRESS_OFFSET 0xC0000000 - if {!$declared_svd_file} { - set_interface_property h2f_axi_master CMSIS_SVD_FILE $svd_path - set declared_svd_file 1 - } - } - - if { $f2h_present } { - add_interface f2h_axi_clock clock Input - set_interface_property f2h_axi_clock EXPORT_OF bridges.f2h_axi_clock - set_interface_property f2h_axi_clock PORT_NAME_MAP "f2h_axi_clk f2h_axi_clk" - - add_interface f2h_axi_slave axi slave - set_interface_property f2h_axi_slave EXPORT_OF bridges.f2h - set_interface_property f2h_axi_slave PORT_NAME_MAP "f2h_AWID f2h_AWID f2h_AWADDR f2h_AWADDR f2h_AWLEN f2h_AWLEN f2h_AWSIZE f2h_AWSIZE f2h_AWBURST f2h_AWBURST f2h_AWLOCK f2h_AWLOCK f2h_AWCACHE f2h_AWCACHE f2h_AWPROT f2h_AWPROT f2h_AWVALID f2h_AWVALID f2h_AWREADY f2h_AWREADY f2h_AWUSER f2h_AWUSER f2h_WID f2h_WID f2h_WDATA f2h_WDATA f2h_WSTRB f2h_WSTRB f2h_WLAST f2h_WLAST f2h_WVALID f2h_WVALID f2h_WREADY f2h_WREADY f2h_BID f2h_BID f2h_BRESP f2h_BRESP f2h_BVALID f2h_BVALID f2h_BREADY f2h_BREADY f2h_ARID f2h_ARID f2h_ARADDR f2h_ARADDR f2h_ARLEN f2h_ARLEN f2h_ARSIZE f2h_ARSIZE f2h_ARBURST f2h_ARBURST f2h_ARLOCK f2h_ARLOCK f2h_ARCACHE f2h_ARCACHE f2h_ARPROT f2h_ARPROT f2h_ARVALID f2h_ARVALID f2h_ARREADY f2h_ARREADY f2h_ARUSER f2h_ARUSER f2h_RID f2h_RID f2h_RDATA f2h_RDATA f2h_RRESP f2h_RRESP f2h_RLAST f2h_RLAST f2h_RVALID f2h_RVALID f2h_RREADY f2h_RREADY" - } - - if { $h2f_lw_present } { - hps_utils_add_slave_interface arm_a9_0.altera_axi_master bridges.axi_h2f_lw {0xff200000} - if { $number_of_a9 > 1 } { - hps_utils_add_slave_interface arm_a9_1.altera_axi_master bridges.axi_h2f_lw {0xff200000} - } - - add_interface h2f_lw_axi_clock clock Input - set_interface_property h2f_lw_axi_clock EXPORT_OF bridges.h2f_lw_axi_clock - set_interface_property h2f_lw_axi_clock PORT_NAME_MAP "h2f_lw_axi_clk h2f_lw_axi_clk" - - add_interface h2f_lw_axi_master axi start - set_interface_property h2f_lw_axi_master EXPORT_OF bridges.h2f_lw - set_interface_property h2f_lw_axi_master PORT_NAME_MAP "h2f_lw_AWID h2f_lw_AWID h2f_lw_AWADDR h2f_lw_AWADDR h2f_lw_AWLEN h2f_lw_AWLEN h2f_lw_AWSIZE h2f_lw_AWSIZE h2f_lw_AWBURST h2f_lw_AWBURST h2f_lw_AWLOCK h2f_lw_AWLOCK h2f_lw_AWCACHE h2f_lw_AWCACHE h2f_lw_AWPROT h2f_lw_AWPROT h2f_lw_AWVALID h2f_lw_AWVALID h2f_lw_AWREADY h2f_lw_AWREADY h2f_lw_WID h2f_lw_WID h2f_lw_WDATA h2f_lw_WDATA h2f_lw_WSTRB h2f_lw_WSTRB h2f_lw_WLAST h2f_lw_WLAST h2f_lw_WVALID h2f_lw_WVALID h2f_lw_WREADY h2f_lw_WREADY h2f_lw_BID h2f_lw_BID h2f_lw_BRESP h2f_lw_BRESP h2f_lw_BVALID h2f_lw_BVALID h2f_lw_BREADY h2f_lw_BREADY h2f_lw_ARID h2f_lw_ARID h2f_lw_ARADDR h2f_lw_ARADDR h2f_lw_ARLEN h2f_lw_ARLEN h2f_lw_ARSIZE h2f_lw_ARSIZE h2f_lw_ARBURST h2f_lw_ARBURST h2f_lw_ARLOCK h2f_lw_ARLOCK h2f_lw_ARCACHE h2f_lw_ARCACHE h2f_lw_ARPROT h2f_lw_ARPROT h2f_lw_ARVALID h2f_lw_ARVALID h2f_lw_ARREADY h2f_lw_ARREADY h2f_lw_RID h2f_lw_RID h2f_lw_RDATA h2f_lw_RDATA h2f_lw_RRESP h2f_lw_RRESP h2f_lw_RLAST h2f_lw_RLAST h2f_lw_RVALID h2f_lw_RVALID h2f_lw_RREADY h2f_lw_RREADY" - set_interface_property h2f_lw_axi_master SVD_ADDRESS_GROUP "hps" - set_interface_property h2f_lw_axi_master SVD_ADDRESS_OFFSET 0xFF200000 - if {!$declared_svd_file} { - set_interface_property h2f_lw_axi_master CMSIS_SVD_FILE $svd_path - set declared_svd_file 1 - } - } - - if {!$declared_svd_file} { - set_module_assignment "cmsis.svd.file" $svd_path - set_module_assignment "cmsis.svd.suffix" "hps" - } - - clocks_logicalview_dtg - - if { $number_of_a9 > 0 } { - hps_utils_add_instance_clk_reset clk_0 arm_a9_0 arm_a9 - } - - if { $number_of_a9 > 1 } { - hps_utils_add_instance_clk_reset clk_0 arm_a9_1 arm_a9 - } - - - hps_instantiate_arm_gic_0 $number_of_a9 - - hps_instantiate_L2 $number_of_a9 - - hps_instantiate_dma $number_of_a9 - - hps_instantiate_sysmgr $number_of_a9 - - hps_instantiate_clkmgr $number_of_a9 - - hps_instantiate_rstmgr $number_of_a9 - - hps_instantiate_fpgamgr $number_of_a9 - - hps_instantiate_uart0 $number_of_a9 "UART0_PinMuxing" [get_parameter_value l4_sp_clk_mhz] - - hps_instantiate_uart1 $number_of_a9 "UART1_PinMuxing" [get_parameter_value l4_sp_clk_mhz] - - hps_instantiate_timer0 $number_of_a9 - - hps_instantiate_timer1 $number_of_a9 - - hps_instantiate_timer2 $number_of_a9 - - hps_instantiate_timer3 $number_of_a9 - - hps_instantiate_wd_timer0 $number_of_a9 - - hps_instantiate_wd_timer1 $number_of_a9 - - hps_instantiate_gpio0 $number_of_a9 - - hps_instantiate_gpio1 $number_of_a9 - - hps_instantiate_gpio2 $number_of_a9 - - hps_instantiate_i2c0 $number_of_a9 "I2C0_PinMuxing" - - hps_instantiate_i2c1 $number_of_a9 "I2C1_PinMuxing" - - hps_instantiate_i2c2 $number_of_a9 "I2C2_PinMuxing" - - hps_instantiate_i2c3 $number_of_a9 "I2C3_PinMuxing" - - hps_instantiate_nand0 $number_of_a9 "NAND_PinMuxing" - - hps_instantiate_spim0 $number_of_a9 "SPIM0_PinMuxing" - - hps_instantiate_spim1 $number_of_a9 "SPIM1_PinMuxing" - - hps_instantiate_qspi $number_of_a9 "QSPI_PinMuxing" - - hps_instantiate_sdmmc $number_of_a9 "SDIO_PinMuxing" - - hps_instantiate_usb0 $number_of_a9 "USB0_PinMuxing" - - hps_instantiate_usb1 $number_of_a9 "USB1_PinMuxing" - - hps_instantiate_gmac0 $number_of_a9 "EMAC0_PinMuxing" - - hps_instantiate_gmac1 $number_of_a9 "EMAC1_PinMuxing" - - hps_instantiate_dcan0 $number_of_a9 "CAN0_PinMuxing" - - hps_instantiate_dcan1 $number_of_a9 "CAN1_PinMuxing" - - hps_instantiate_l3regs $number_of_a9 - - hps_instantiate_sdrctl $number_of_a9 - - hps_instantiate_axi_ocram $number_of_a9 - - hps_instantiate_axi_sdram $number_of_a9 - - hps_instantiate_timer $number_of_a9 - - hps_instantiate_scu $number_of_a9 - - add_connection arm_gic_0.arm_gic_ppi timer.interrupt_sender - set_connection_parameter_value arm_gic_0.arm_gic_ppi/timer.interrupt_sender irqNumber 13 - - if { $f2h_present } { - hps_utils_add_slave_interface bridges.axi_f2h arm_gic_0.axi_slave0 {0xfffed000} - hps_utils_add_slave_interface bridges.axi_f2h arm_gic_0.axi_slave1 {0xfffec100} - hps_utils_add_slave_interface bridges.axi_f2h L2.axi_slave0 {0xfffef000} - hps_utils_add_slave_interface bridges.axi_f2h dma.axi_slave0 {0xffe01000} - hps_utils_add_slave_interface bridges.axi_f2h sysmgr.axi_slave0 {0xffd08000} - hps_utils_add_slave_interface bridges.axi_f2h clkmgr.axi_slave0 {0xffd04000} - hps_utils_add_slave_interface bridges.axi_f2h rstmgr.axi_slave0 {0xffd05000} - hps_utils_add_slave_interface bridges.axi_f2h fpgamgr.axi_slave0 {0xff706000} - hps_utils_add_slave_interface bridges.axi_f2h fpgamgr.axi_slave1 {0xffb90000} - hps_utils_add_slave_interface bridges.axi_f2h uart0.axi_slave0 {0xffc02000} - hps_utils_add_slave_interface bridges.axi_f2h uart1.axi_slave0 {0xffc03000} - hps_utils_add_slave_interface bridges.axi_f2h timer0.axi_slave0 {0xffc08000} - hps_utils_add_slave_interface bridges.axi_f2h timer1.axi_slave0 {0xffc09000} - hps_utils_add_slave_interface bridges.axi_f2h timer2.axi_slave0 [hps_timer2_base] - hps_utils_add_slave_interface bridges.axi_f2h timer3.axi_slave0 [hps_timer3_base] - hps_utils_add_slave_interface bridges.axi_f2h gpio0.axi_slave0 {0xff708000} - hps_utils_add_slave_interface bridges.axi_f2h gpio1.axi_slave0 {0xff709000} - hps_utils_add_slave_interface bridges.axi_f2h gpio2.axi_slave0 {0xff70a000} - hps_utils_add_slave_interface bridges.axi_f2h i2c0.axi_slave0 {0xffc04000} - hps_utils_add_slave_interface bridges.axi_f2h i2c1.axi_slave0 {0xffc05000} - hps_utils_add_slave_interface bridges.axi_f2h i2c2.axi_slave0 {0xffc06000} - hps_utils_add_slave_interface bridges.axi_f2h i2c3.axi_slave0 {0xffc07000} - hps_utils_add_slave_interface bridges.axi_f2h nand0.axi_slave0 {0xff900000} - hps_utils_add_slave_interface bridges.axi_f2h nand0.axi_slave1 {0xffb80000} - hps_utils_add_slave_interface bridges.axi_f2h spim0.axi_slave0 [hps_spim0_base] - hps_utils_add_slave_interface bridges.axi_f2h spim1.axi_slave0 [hps_spim1_base] - hps_utils_add_slave_interface bridges.axi_f2h qspi.axi_slave0 {0xff705000} - hps_utils_add_slave_interface bridges.axi_f2h qspi.axi_slave1 {0xffa00000} - hps_utils_add_slave_interface bridges.axi_f2h sdmmc.axi_slave0 {0xff704000} - hps_utils_add_slave_interface bridges.axi_f2h usb0.axi_slave0 {0xffb00000} - hps_utils_add_slave_interface bridges.axi_f2h usb1.axi_slave0 {0xffb40000} - hps_utils_add_slave_interface bridges.axi_f2h gmac0.axi_slave0 {0xff700000} - hps_utils_add_slave_interface bridges.axi_f2h gmac1.axi_slave0 {0xff702000} - hps_utils_add_slave_interface bridges.axi_f2h axi_ocram.axi_slave0 {0xffff0000} - hps_utils_add_slave_interface bridges.axi_f2h axi_sdram.axi_slave0 [hps_sdram_base] - hps_utils_add_slave_interface bridges.axi_f2h timer.axi_slave0 {0xfffec600} - hps_utils_add_slave_interface bridges.axi_f2h dcan0.axi_slave0 [hps_dcan0_base] - hps_utils_add_slave_interface bridges.axi_f2h dcan1.axi_slave0 [hps_dcan1_base] - hps_utils_add_slave_interface bridges.axi_f2h l3regs.axi_slave0 [hps_l3regs_base] - hps_utils_add_slave_interface bridges.axi_f2h sdrctl.axi_slave0 [hps_sdrctl_base] - } - - ##### F2H ##### - if [is_enabled F2SINTERRUPT_Enable] { - set any_interrupt_enabled 1 - set iname "f2h_irq" - set pname "f2h_irq" - add_interface "${iname}0" interrupt receiver - set_interface_property f2h_irq0 EXPORT_OF arm_gic_0.f2h_irq_0_irq_rx_offset_40 - set_interface_property f2h_irq0 PORT_NAME_MAP "f2h_irq_p0 irq_siq_40" - - add_interface "${iname}1" interrupt receiver - set_interface_property f2h_irq1 EXPORT_OF arm_gic_0.f2h_irq_32_irq_rx_offset_72 - set_interface_property f2h_irq1 PORT_NAME_MAP "f2h_irq_p1 irq_siq_72" - } -} - -set_module_property OPAQUE_ADDRESS_MAP false -set_module_property STRUCTURAL_COMPOSITION_CALLBACK compose_logicalview -proc compose_logicalview {} { - # synchronize device families between the EMIF and HPS parameter sets - set_parameter_value hps_device_family [get_parameter_value SYS_INFO_DEVICE_FAMILY] - fpga_interfaces::init - fpga_interfaces::set_bfm_types [array get DB_bfm_types] - - hps_io::init - validate - elab 1 - - update_hps_to_fpga_clock_frequency_parameters - - - fpga_interfaces::serialize fpga_interfaces_data - - add_instance fpga_interfaces altera_interface_generator - set_instance_parameter_value fpga_interfaces interfaceDefinition [array get fpga_interfaces_data] - - expose_border fpga_interfaces $fpga_interfaces_data(interfaces) - - #declare_cmsis_svd $fpga_interfaces_data(interfaces) - - logicalview_dtg -} - -proc declare_cmsis_svd {interfaces_str} { - array set interfaces $interfaces_str - set interface_names $interfaces([ORDERED_NAMES]) - - set h2f_exists 0 - set lwh2f_exists 0 - foreach interface_name $interface_names { - if {[string compare $interface_name "h2f_axi_master"] == 0} { - set h2f_exists 1 - } elseif {[string compare $interface_name "h2f_lw_axi_master"] == 0} { - set lwh2f_exists 1 - } - } - - set svd_path [file join $::env(QUARTUS_ROOTDIR) .. ip altera hps altera_hps altera_hps.svd] - set address_group hps - set declared_svd_file 0 - - if {$h2f_exists} { - if {!$declared_svd_file} { - set_interface_property h2f_axi_master CMSIS_SVD_FILE $svd_path - set declared_svd_file 1 - } - set_interface_property h2f_axi_master SVD_ADDRESS_GROUP $address_group - set_interface_property h2f_axi_master SVD_ADDRESS_OFFSET 0xC0000000 - } - if {$lwh2f_exists} { - if {!$declared_svd_file} { - set_interface_property h2f_lw_axi_master CMSIS_SVD_FILE $svd_path - set declared_svd_file 1 - } - set_interface_property h2f_lw_axi_master SVD_ADDRESS_GROUP $address_group - set_interface_property h2f_lw_axi_master SVD_ADDRESS_OFFSET 0xFF200000 - } - if {!$declared_svd_file} { - set_module_assignment "cmsis.svd.file" $svd_path - set_module_assignment "cmsis.svd.suffix" $address_group - } -} - - -###################### -##### Validation ##### -###################### - -proc validate {} { - set device_family [get_parameter_value hps_device_family] - set device [get_device] - ensure_pin_muxing_data $device_family - update_table_derived_parameters - - validate_F2SDRAM - update_S2F_CLK_mux_options - update_pin_muxing_ui $device_family - - # funset placement_by_pin - validate_pin_muxing $device_family placement_by_pin - update_gpio_ui placement_by_pin - - validate_TEST - - validate_interrupt $device_family - - validate_clocks - -} - -proc validate_TEST {} { - set ini [get_parameter_value quartus_ini_hps_ip_enable_test_interface] - set_parameter_property TEST_Enable visible $ini -} - -proc hide_param { paramName hide} { - -} -proc update_hps_to_fpga_clock_frequency_parameters {} { - set u0 [get_parameter_value S2FCLK_USER0CLK_Enable] - set u1 [get_parameter_value S2FCLK_USER1CLK_Enable] - #set u2 [get_parameter_value S2FCLK_USER2CLK_Enable] - - for { set i 0 } { $i < 2 } { incr i } { - set_parameter_property "S2FCLK_USER${i}CLK_FREQ" enabled [expr "\$u${i}"] - - if { [string compare true [expr "\$u${i}"] ] == 0 } { - fpga_interfaces::set_interface_property "h2f_user${i}_clock" clockRateKnown true - fpga_interfaces::set_interface_property "h2f_user${i}_clock" clockRate [expr [get_parameter_value "S2FCLK_USER${i}CLK_FREQ"] * 1000000 ] - } - } -} - -proc update_table_derived_parameters {} { - update_f2sdram_names - update_dma_peripheral_ids -} - -proc update_f2sdram_names {} { - set num_rows [llength [get_parameter_value F2SDRAM_Width]] - set names [list] - - for {set index 0} {$index < $num_rows} {incr index} { - set name "f2h_sdram${index}" - lappend names $name - } - set_parameter_value F2SDRAM_Name_DERIVED ${names} -} - -proc update_dma_peripheral_ids {} { - set periph_id_list {0 1 2 3 4 5 6 7} - set_parameter_value DMA_PeriphId_DERIVED $periph_id_list -} - -proc is_enabled {parameter} { - if { [string compare [get_parameter_value $parameter] "true" ] == 0 } { - return 1 - } else { - return 0 - } -} - -proc validate_F2SDRAM {} { - set type_list [get_parameter_value F2SDRAM_Type] - set width_list [get_parameter_value F2SDRAM_Width] - set rows [llength $width_list] - - set command_ports_bit 0 - set read_ports_bit 0 - set write_ports_bit 0 - - set command_ports_mask 0 - set read_ports_mask 0 - set write_ports_mask 0 - set reset_ports_mask 0 - - for {set index 0} {${index} < ${rows}} {incr index} { - # check for invalid combinations of type/width - set mytype [lindex $type_list $index] - set mywidth [lindex $width_list $index] - - if {$mywidth < 64} { - send_message warning "Setting the slave port width of interface f2h_sdram${index} to ${mywidth} results in bandwidth under-utilization. Altera recommends you set the interface data width to 64-bit or greater." - } - - # count used ports - # command - if { [string compare $mytype [F2HSDRAM_AXI3]] == 0 } { - if { [ expr $command_ports_bit % 2 ] } { - incr command_ports_bit 1 - } - set command_ports_mask [ expr $command_ports_mask | ( 3 << $command_ports_bit) ] - incr command_ports_bit 2 - } else { - set command_ports_mask [ expr $command_ports_mask | ( 1 << $command_ports_bit) ] - incr command_ports_bit 1 - } - - # read - if {$mytype != [F2HSDRAM_AVM_WRITEONLY]} { - if {$mywidth <= 64} { - set read_ports_mask [ expr $read_ports_mask | ( 1 << $read_ports_bit) ] - incr read_ports_bit 1 - } elseif {$mywidth == 128} { - set read_ports_mask [ expr $read_ports_mask | ( 3 << $read_ports_bit) ] - incr read_ports_bit 2 - } else { - set read_ports_mask [ expr $read_ports_mask | ( 15 << $read_ports_bit) ] - incr read_ports_bit 4 - } - } - - # write - if {$mytype != [F2HSDRAM_AVM_READONLY]} { - if {$mywidth <= 64} { - set write_ports_mask [ expr $write_ports_mask | ( 1 << $write_ports_bit) ] - incr write_ports_bit 1 - } elseif {$mywidth == 128} { - set write_ports_mask [ expr $write_ports_mask | ( 3 << $write_ports_bit) ] - incr write_ports_bit 2 - } else { - set write_ports_mask [ expr $write_ports_mask | ( 15 << $write_ports_bit) ] - incr write_ports_bit 4 - } - } - - # reset - set reset_ports_mask [ expr ($command_ports_mask << 8) | ($write_ports_mask << 4) | ($read_ports_mask) ] - - } - # check for port over-use - if {$command_ports_bit > 6} { - send_message error "The current FPGA to SDRAM configuration is using more command ports than are available." - } - if {$read_ports_bit > 4} { - send_message error "The current FPGA to SDRAM configuration is using more read ports than are available." - } - if {$write_ports_bit > 4} { - send_message error "The current FPGA to SDRAM configuration is using more write ports than are available." - } - - # Store ports used & number of elements to determine when new rows are added - set_parameter_value F2SDRAM_Width_Last_Size $rows - set_parameter_value F2SDRAM_CMD_PORT_USED [ format "0x%X" $command_ports_mask ] - set_parameter_value F2SDRAM_RD_PORT_USED [ format "0x%X" $read_ports_mask ] - set_parameter_value F2SDRAM_WR_PORT_USED [ format "0x%X" $write_ports_mask ] - set_parameter_value F2SDRAM_RST_PORT_USED [ format "0x%X" $reset_ports_mask ] - - # Bonding_out signals will be exported if f2sdram selected - if { ${rows} > 0 } { - set param [get_parameter_value quartus_ini_hps_ip_f2sdram_bonding_out] - set_parameter_property BONDING_OUT_ENABLED visible $param - set_parameter_property BONDING_OUT_ENABLED enabled $param - } else { - set_parameter_property BONDING_OUT_ENABLED enabled false - } - -} - -proc update_S2F_CLK_mux_options {} { - # TODO: retrieve mux options - # TODO: set allowed_ranges on muxes -} - -proc dec2bin {i} { - set res {} - while {$i>0} { - set res [ expr {$i%2} ]$res - set i [expr {$i/2}] - } - if {$res == {}} { - set res 0 - } - return $res -} - -##################################################################### -# -# Gets valid modes for a peripheral with a given pin muxing option. -# Parameters: * peripheral_ref: name of an array pointing to the -# Peripheral HPS I/O Data -# -# Update parameter value with label -proc get_valid_modes {peripheral_name pin_muxing_option peripheral_ref fpga_available} { -##################################################################### - upvar 1 $peripheral_ref peripheral - - if {[info exists peripheral(pin_sets)]} { - array set pin_sets $peripheral(pin_sets) - } - - if {[info exists pin_sets($pin_muxing_option)]} { - array set pin_set $pin_sets($pin_muxing_option) - set pin_set_modes $pin_set(valid_modes) - if {[string match -nocase "trace" $peripheral_name]} { - set valid_modes [list "HPS:8-bit Data" "HPSx4:4-bit Data"] - } elseif {[string match -nocase "usb*" $peripheral_name]} { - set valid_modes [list "SDR:SDR with PHY clock output mode" "SDR without external clock:SDR with PHY clock input mode"] - } else { - set valid_modes [lsort -ascii -increasing $pin_set_modes] - } - } elseif {$fpga_available && [string compare $pin_muxing_option [FPGA_MUX_VALUE]] == 0} { - set valid_modes [list "Full"] - } else { - set valid_modes [list [NA_MODE_VALUE]] - } - return $valid_modes -} - -proc is_peripheral_low_speed_serial_interface {peripheral_name} { - if {[string match -nocase "i2c*" $peripheral_name] || - [string match -nocase "can*" $peripheral_name] || - [string match -nocase "spi*" $peripheral_name] || - [string match -nocase "uart*" $peripheral_name] - } { - return 1 - } - return 0 -} - -# updates the _PinMuxing and _Mode parameter allowed ranges -# -uses a data structure to keep track of choices -# -allowed ranges can come from FPGA Peripheral Interfaces or IOs -# -when a pin muxing option is selected, the mode allowed ranges are -# set according to what's specified from the source (FPGA or pin i/o) -proc update_pin_muxing_ui {device_family} { - - set peripheral_names [list_peripheral_names] - foreach peripheral $peripheral_names { - - get_peripheral_parameter_valid_ranges hps_ip_pin_muxing_model $peripheral\ - selected_pin_muxing_option pin_muxing_options mode_options - - set pin_muxing_param_name [format [PIN_MUX_PARAM_FORMAT] $peripheral] - set mode_param_name [format [MODE_PARAM_FORMAT] $peripheral] - - set pin_muxing_options [lsort -ascii $pin_muxing_options] - set pin_muxing_options [linsert $pin_muxing_options 0 [UNUSED_MUX_VALUE]] - set_parameter_property $pin_muxing_param_name enabled true - set_parameter_property $pin_muxing_param_name visible true - set_parameter_property $pin_muxing_param_name allowed_ranges $pin_muxing_options - set_parameter_property $mode_param_name visible true - - - set selected_mode_option [get_parameter_value $mode_param_name] - - # Disable I2C parameters so they can only be changed by altering EMAC parameters - # in the HPS IP GUI - if {([string compare $peripheral "I2C2" ] == 0 || [string compare $peripheral "I2C3" ] == 0) - && [string match "*EMAC*" $selected_mode_option]} { - set_parameter_property $pin_muxing_param_name enabled false - set_parameter_property $mode_param_name enabled false - } else { - set_parameter_property $mode_param_name enabled true - } - set_parameter_property $mode_param_name allowed_ranges $mode_options - - # Disabled peripherals that not supported by certain device family - if {[check_device_family_equivalence $device_family ARRIAV]} { - foreach excluded_peripheral [ARRIAV_EXCLUDED_PERIPHRERALS] { - if {[string compare $excluded_peripheral $peripheral] == 0} { - set_parameter_property $pin_muxing_param_name enabled false - set_parameter_property $pin_muxing_param_name visible false - set_parameter_property $mode_param_name enabled false - set_parameter_property $mode_param_name visible false - } - } - } - } - - # Only show I2C's "Used by EMACx" modes when EMAC is using I2C - if {[is_pin_mux_data_available hps_ip_pin_muxing_model]} { - foreach emac {EMAC0 EMAC1} { - set emac_pin_set [get_parameter_value [format [PIN_MUX_PARAM_FORMAT] $emac]] - set emac_mode [get_parameter_value [format [MODE_PARAM_FORMAT] $emac]] - - funset i2c_name - get_linked_peripheral hps_ip_pin_muxing_model $emac $emac_pin_set\ - i2c_name i2c_pin_set i2c_mode - - if {[info exists i2c_name] && ![string match "*${i2c_name}*" $emac_mode]} { - # remove EMAC mode - set i2c_mode_param [format [MODE_PARAM_FORMAT] $i2c_name] - set i2c_valid_modes [get_parameter_property $i2c_mode_param ALLOWED_RANGES] - - set new_i2c_valid_modes [list] - foreach mode $i2c_valid_modes { - if {![string match "*${emac}*" $mode]} { - lappend new_i2c_valid_modes $mode - } - } - set_parameter_property $i2c_mode_param ALLOWED_RANGES $new_i2c_valid_modes - } - } - } -} - -proc validate_interrupt {device_family} { - set interrupt_groups [list_h2f_interrupt_groups] - set excluded "CAN" - foreach interrupt_group $interrupt_groups { - set parameter "S2FINTERRUPT_${interrupt_group}_Enable" - set_parameter_property $parameter enabled true - set_parameter_property $parameter visible true - if {[check_device_family_equivalence $device_family ARRIAV] && [string compare $excluded $interrupt_group] == 0} { - set_parameter_property $parameter enabled false - set_parameter_property $parameter visible false - } - } -} - -proc update_gpio_ui {placement_by_pin_ref} { - upvar 1 $placement_by_pin_ref placement_by_pin - # TODO: caching of what needs to be updated? - set customer_pin_names [list] - set gpio_names [list] - set loanio_names [list] - set conflicts [list] - - set customer_pin_names [hps_ip_pin_muxing_model::get_customer_pin_names] - - foreach_gpio_entry hps_ip_pin_muxing_model\ - entry gpio_index gpio_name pin gplin_used gplin_select\ - { - lappend gpio_names $gpio_name - - set conflict "" - if {[info exists placement_by_pin($pin)]} { - set conflict [join $placement_by_pin($pin) ", "] - } - lappend conflicts $conflict - } - foreach_loan_io_entry hps_ip_pin_muxing_model\ - entry loanio_index loanio_name pin gplin_used gplin_select\ - { - lappend loanio_names $loanio_name - } - set_parameter_value Customer_Pin_Name_DERIVED $customer_pin_names - set_parameter_value GPIO_Name_DERIVED $gpio_names - set_parameter_value LOANIO_Name_DERIVED $loanio_names - set_parameter_value GPIO_Conflict_DERIVED $conflicts -} - -proc peripheral_to_wys_atom_name {device_family peripheral} { - set generic_atom_name [hps_io_peripheral_to_generic_atom_name $peripheral] - set wys_atom_name [generic_atom_to_wys_atom $device_family $generic_atom_name] - return $wys_atom_name -} - -# TODO: deal with going out of bounds (gpio_index > 70) -proc gpio_index_to_gpio_port_index {gpio_index} { - set group [expr {$gpio_index / 29}] - set port_index [expr {$gpio_index % 29}] - - set result [list $group $port_index] - return $result -} - - - -proc validate_pin_muxing {device_family placement_by_pin_ref} { - upvar 1 $placement_by_pin_ref placement_by_pin - - # see which pins are being used more than once - # peripherals - funset pin_to_peripheral ;# pin names to peripheral that is occupying - funset conflict_pin_list ; - - foreach peripheral_name [list_peripheral_names] { - set pins_used 0 - set mapping_msg "Peripheral $peripheral_name pin mapping:" - set comma " " - set periph_inst [string tolower "${peripheral_name}_inst"] - foreach_used_peripheral_pin hps_ip_pin_muxing_model $peripheral_name\ - signal_name\ - map\ - pin\ - location\ - mux_select\ - { - # Validate - set entry_exists [info exists pin_to_peripheral($pin)] - if {$entry_exists == 1} { - set conflicting_peripheral $pin_to_peripheral($pin) - # only emit an error once per unique pair of conflicting peripherals - if {[info exists known_conflicts($conflicting_peripheral)] == 0} { - set known_conflicts($conflicting_peripheral) 1 - # TODO: more detailed error message e.g. which pins? explicitly say the bank and modes? - send_message error "Refer to the Peripherals Mux Table for more details. The selected peripherals '$conflicting_peripheral' and '$peripheral_name' are conflicting. " - } - set conflict_pin_list($pin) 1 - } else { - set pin_to_peripheral($pin) $peripheral_name - } - - # Render pins - lassign $map in_port out_port oe_port - set goes_out 0 - set goes_in 0 - - # by default, all signals are assumed to be from the same instance - if {$in_port != ""} { - set in_port "${periph_inst}:${in_port}" - set goes_in 1 - } - if {$out_port != ""} { - set out_port "${periph_inst}:${out_port}" - set goes_out 1 - } - if {$oe_port != ""} { - set oe_port "${periph_inst}:${oe_port}" - set goes_out 1 - } - - if {$goes_in && $goes_out} { - set dir bidir - } elseif {$goes_out} { - set dir output - } else { - set dir input - } - - hps_io::add_pin $periph_inst $signal_name $dir $location $in_port $out_port $oe_port - - if {[info exists placement_by_pin($pin)] == 0} { - set placement_by_pin($pin) [list] - } - lappend placement_by_pin($pin) "${peripheral_name}.${signal_name}" - - set mapping_msg "${mapping_msg}${comma}${signal_name}:${pin}" - set comma ", " - set pins_used 1 - } - if {$pins_used} { - # send_message info $mapping_msg - set wys_atom_name [peripheral_to_wys_atom_name $device_family $peripheral_name] - set location [locations::get_hps_io_peripheral_location $peripheral_name] - hps_io::add_peripheral ${periph_inst} $wys_atom_name $location - } - } - - # HLGPI input only pins - set hlgpi_pins [hps_ip_pin_muxing_model::get_hlgpi_pins] - set hlgpi_count [llength $hlgpi_pins] - set wys_atom_name [peripheral_to_wys_atom_name $device_family "GPIO"] - set periph_inst "gpio_inst" - set gpio_unused 1 - set device [get_device] - - if { [ string range $device 0 3 ] == "5CSE" && [ string range $device 8 9 ] == "19" } { - send_message info "HLGPI is not available for Device $device (484 pins)" - set_parameter_property HLGPI_Enable enabled false - } else { - set_parameter_property HLGPI_Enable enabled true - } - - if { [is_enabled HLGPI_Enable] && [get_parameter_property HLGPI_Enable enabled] } { - for {set hlgpi_pin_index 0} {$hlgpi_pin_index < $hlgpi_count} {incr hlgpi_pin_index} { - # HLGPI connected to gpio[26:13] - set gpio_port_index [ expr {$hlgpi_pin_index + 13} ] - set hlgpi_pin [ lindex $hlgpi_pins $hlgpi_pin_index] - - if {$gpio_unused} { - set atom_location [locations::get_hps_io_peripheral_location "GPIO"] - hps_io::add_peripheral ${periph_inst} $wys_atom_name $atom_location - set gpio_unused 0 - } - - set signal_name "HLGPI${hlgpi_pin_index}" - set pin_location [::pin_mux_db::get_location_of_pin $hlgpi_pin] - set in_port "${periph_inst}:GPIO2_PORTA_I($gpio_port_index:$gpio_port_index)" - set out_port "" - set oe_port "" - - hps_io::add_pin ${periph_inst} $signal_name input $pin_location $in_port $out_port $oe_port - } - } - - # gpio - funset gpio_port_placement_set ;# set of gpio ports that are being used - set enable_list [get_parameter_value GPIO_Enable] - set wys_atom_name [peripheral_to_wys_atom_name $device_family "GPIO"] - set periph_inst "gpio_inst" - - # check and set GPIO_Pin_Used_DERIVED parameter - set_parameter_value GPIO_Pin_Used_DERIVED false - - foreach_gpio_entry hps_ip_pin_muxing_model\ - entry gpio_index gpio_name pin gplin_used gplin_select\ - { - set enabled 0 - set enable_value [lindex $enable_list $entry] - if { [string compare $enable_value "Yes" ] == 0 } { - set enabled 1 - } - if {$enabled} { - set entry_exists [info exists pin_to_peripheral($pin)] - if {$entry_exists} { - set conflicting_peripheral $pin_to_peripheral($pin) - send_message error "Refer to the Peripherals Mux Table for more details. The selected peripheral '$conflicting_peripheral' and '${gpio_name}' are conflicting." - set conflict_pin_list($pin) 1 - } else { - set pin_to_peripheral($pin) $gpio_name - } - - if {[info exists gpio_port_placement_set($gpio_index)]} { - send_message error "Refer to the Peripherals Mux Table for more details. GPIO${gpio_index} cannot be used twice." - set conflict_pin_list($pin) 1 - } else { - set gpio_port_placement_set($gpio_index) 1 - } - - if {$gpio_unused} { - set atom_location [locations::get_hps_io_peripheral_location "GPIO"] - hps_io::add_peripheral ${periph_inst} $wys_atom_name $atom_location - set gpio_unused 0 - } - - lassign [gpio_index_to_gpio_port_index $gpio_index] gpio_group gpio_port_index - set in_port "${periph_inst}:GPIO${gpio_group}_PORTA_I($gpio_port_index:$gpio_port_index)" - set out_port "${periph_inst}:GPIO${gpio_group}_PORTA_O($gpio_port_index:$gpio_port_index)" - set oe_port "${periph_inst}:GPIO${gpio_group}_PORTA_OE($gpio_port_index:$gpio_port_index)" - - set pin_location [::pin_mux_db::get_location_of_pin $pin] - hps_io::add_pin $periph_inst $gpio_name bidir $pin_location $in_port $out_port $oe_port - - # set GPIO_Pin_Used_DERIVED to true if GPIO pins used - set_parameter_value GPIO_Pin_Used_DERIVED true - } - } - - # loan i/o - set enable_list [get_parameter_value LOANIO_Enable] - set loanio_used 0 - set loanio_count 0 - foreach_loan_io_entry hps_ip_pin_muxing_model\ - entry loanio_index loanio_name pin gplin_used gplin_select\ - { - if {$loanio_count < $loanio_index} { - set loanio_count $loanio_index - } - set enabled 0 - set enable_value [lindex $enable_list $entry] - if { [string compare $enable_value "Yes" ] == 0 } { - set enabled 1 - } - - if {$enabled} { - set entry_exists [info exists pin_to_peripheral($pin)] - if {$entry_exists} { - set conflicting_peripheral $pin_to_peripheral($pin) - send_message error "Refer to the Peripherals Mux Table for more details. The selected peripheral for '$conflicting_peripheral' and '${loanio_name}' are conflicting." - set conflict_pin_list($pin) 1 - } else { - set pin_to_peripheral($pin) $loanio_name - } - - if {[info exists gpio_port_placement_set($loanio_index)]} { - send_message error "Refer to the Peripherals Mux Table for more details. GPIO${loanio_index} cannot be used twice." - set conflict_pin_list($pin) 1 - } else { - set gpio_port_placement_set($loanio_index) 1 - } - - set loanio_used 1 - if {$gpio_unused} { - set atom_location [locations::get_hps_io_peripheral_location "GPIO"] - hps_io::add_peripheral ${periph_inst} $wys_atom_name $atom_location - set gpio_unused 0 - } - - lassign [gpio_index_to_gpio_port_index $loanio_index] gpio_group gpio_port_index - set in_port "${periph_inst}:GPIO${gpio_group}_PORTA_I($gpio_port_index:$gpio_port_index)" - set out_port "${periph_inst}:GPIO${gpio_group}_PORTA_O($gpio_port_index:$gpio_port_index)" - set oe_port "${periph_inst}:GPIO${gpio_group}_PORTA_OE($gpio_port_index:$gpio_port_index)" - - set pin_location [::pin_mux_db::get_location_of_pin $pin] - hps_io::add_pin $periph_inst $loanio_name bidir $pin_location $in_port $out_port $oe_port - - } - } - incr loanio_count ;# count is one greater than the highest index - if $loanio_used { - set wys_atom_name [peripheral_to_wys_atom_name $device_family "LOANIO"] - set location {} - set periph_inst "loan_io_inst" - set iface_name "h2f_loan_io" - set z "h2f_loan_" - fpga_interfaces::add_module_instance ${periph_inst} $wys_atom_name $location - fpga_interfaces::add_interface $iface_name conduit Input - set pin_muxing [get_parameter_value pin_muxing] - fpga_interfaces::add_interface_port $iface_name "${z}in" in Output ${loanio_count} $periph_inst loanio_in - fpga_interfaces::add_interface_port $iface_name "${z}out" out Input ${loanio_count} $periph_inst loanio_out - fpga_interfaces::add_interface_port $iface_name "${z}oe" oe Input ${loanio_count} $periph_inst loanio_oe - - # add loanIO to GPIO atom connection - set loanio_periph_inst "loan_io_inst" - set loanio_iface_name "loanio_gpio" - set loanio_z "loanio_gpio_" - set gpio_periph_inst "gpio_inst" - set gpio_iface_name "gpio_loanio" - set gpio_z "gpio_loanio_" - set gpio_port_size 29 - set start_index 0 - - if {$gpio_unused} { - set gpio_wys_atom_name [peripheral_to_wys_atom_name $device_family "GPIO"] - set gpio_atom_location [locations::get_hps_io_peripheral_location "GPIO"] - hps_io::add_peripheral ${gpio_periph_inst} ${gpio_wys_atom_name} ${gpio_atom_location} - set gpio_unused 0 - } - - fpga_interfaces::add_interface $loanio_iface_name conduit Input "NO_EXPORT" - ::hps_io::internal::add_interface $gpio_iface_name conduit Output "NO_EXPORT" - - for {set i 0} {$i <= 2} {incr i} { - if {[expr ($loanio_count - $start_index)] < $gpio_port_size} { - set gpio_port_size [expr ($loanio_count - $start_index)] - } - set end_index [expr ($start_index + $gpio_port_size - 1)] - - fpga_interfaces::add_interface_port $loanio_iface_name "${loanio_z}loanio${i}_i" "loanio${i}_i" Input ${gpio_port_size} - fpga_interfaces::add_interface_port $loanio_iface_name "${loanio_z}loanio${i}_oe" "loanio${i}_oe" Output ${gpio_port_size} - fpga_interfaces::add_interface_port $loanio_iface_name "${loanio_z}loanio${i}_o" "loanio${i}_o" Output ${gpio_port_size} - - fpga_interfaces::set_port_fragments $loanio_iface_name "${loanio_z}loanio${i}_i" "${loanio_periph_inst}:GPIO_IN($end_index:$start_index)" - fpga_interfaces::set_port_fragments $loanio_iface_name "${loanio_z}loanio${i}_oe" "${loanio_periph_inst}:GPIO_OE($end_index:$start_index)" - fpga_interfaces::set_port_fragments $loanio_iface_name "${loanio_z}loanio${i}_o" "${loanio_periph_inst}:GPIO_OUT($end_index:$start_index)" - - ::hps_io::internal::add_interface_port $gpio_iface_name "${gpio_z}loanio${i}_i" "loanio${i}_i" Output ${gpio_port_size} $gpio_periph_inst "LOANIO${i}_I" - ::hps_io::internal::add_interface_port $gpio_iface_name "${gpio_z}loanio${i}_oe" "loanio${i}_oe" Input ${gpio_port_size} $gpio_periph_inst "LOANIO${i}_OE" - ::hps_io::internal::add_interface_port $gpio_iface_name "${gpio_z}loanio${i}_o" "loanio${i}_o" Input ${gpio_port_size} $gpio_periph_inst "LOANIO${i}_O" - - set start_index [expr ($end_index + 1)] - } - } - set conflicts [list] - set pins [list] - foreach_gpio_entry hps_ip_pin_muxing_model\ - entry gpio_index gpio_name pin gplin_used gplin_select\ - { - set entry_exists [info exists conflict_pin_list($pin)] - if {$entry_exists} { - set conflict "Yes" - } else { - set conflict "No" - } - lappend conflicts $conflict - lappend pins $pin - } - set_parameter_value JAVA_CONFLICT_PIN $conflicts - set_parameter_value JAVA_GUI_PIN_LIST $pins -} - -##################################################### -# -# Sets a valid mode for the peripheral when its pin -# muxing option changes. Will try to retain the -# original mode if available. -# -proc on_altered_peripheral_pin_muxing {peripheral_name} { -##################################################### - set mode_param_name "${peripheral_name}_Mode" - set mode_option [get_parameter_value $mode_param_name] - - get_peripheral_parameter_valid_ranges hps_ip_pin_muxing_model $peripheral_name\ - selected_pin_muxing_option pin_muxing_options new_valid_modes - - # filter the label name of the parameter value if exist - if {[lsearch $new_valid_modes $mode_option] == -1} { - regsub ":.*" [lindex $new_valid_modes 0] "" new_mode_option - } else { - set new_mode_option $mode_option - } - set_parameter_value $mode_param_name $new_mode_option - - if {[string match "*EMAC*" $peripheral_name]} { - on_emac_mode_switch_internal $peripheral_name - } -} - -# Adds the pin muxing model argument -proc on_emac_mode_switch_internal {peripheral_name} { - on_emac_mode_switch hps_ip_pin_muxing_model $peripheral_name -} - -proc validate_and_update_ddr {} { - set desired_operational_freq [get_parameter_value DDR_DesiredFreq] - if {$desired_operational_freq < 0.0} { - send_message error "The operational frequency of the DDR Controller cannot be negative." - } else { - send_message warning "The recommended DDR Controller clock frequency and phase shift information is not correct." - - set_parameter_value DDR_PLLC0RecommendedFreq_DERIVED $desired_operational_freq - set_parameter_value DDR_PLLC1RecommendedFreq_DERIVED [expr $desired_operational_freq * 2.0] - set_parameter_value DDR_PLLC2RecommendedFreq_DERIVED $desired_operational_freq - set_parameter_value DDR_PLLC3RecommendedFreq_DERIVED $desired_operational_freq - - set_parameter_value DDR_PLLC0RecommendedPhase_DERIVED 0.0 - set_parameter_value DDR_PLLC1RecommendedPhase_DERIVED 1.0 - set_parameter_value DDR_PLLC2RecommendedPhase_DERIVED 2.0 - set_parameter_value DDR_PLLC3RecommendedPhase_DERIVED 3.0 - } - - for {set index 0} {${index} < 4} {incr index} { - set p_name "DDR_PLLC${index}ActualFreq" - set value [get_parameter_value $p_name] - if {$value < 0.0} { - send_message error "DDR PLL Output C${index} cannot have a negative clock frequency." - } - - set p_name "DDR_PLLC${index}ActualPhase" - set value [get_parameter_value $p_name] - if {$value < 0.0} { - send_message error "DDR PLL Output C${index} cannot have a negative clock phase shift." - } - } -} - - -###################### -##### Elaboration ##### -###################### - -proc elab {logical_view} { - # TODO: add RTL information for each - set device_family [get_parameter_value hps_device_family] - - elab_clocks_resets $device_family - - elab_MPU_EVENTS $device_family - elab_DEBUGAPB $device_family - elab_STM $device_family - elab_CTI $device_family - elab_TPIUFPGA $device_family - elab_GP $device_family - elab_BOOTFROMFPGA $device_family - - if {$logical_view == 0} { - elab_F2S $device_family - elab_LWH2F $device_family - elab_S2F $device_family - elab_F2SDRAM $device_family - - } - - elab_DMA $device_family - elab_INTERRUPTS $device_family $logical_view - - elab_emac_ptp $device_family - - elab_TEST $device_family - - # Handle Special Case EMAC signal... ptp_ref_clk - set emac0_pin_mux_param_name [format [PIN_MUX_PARAM_FORMAT] EMAC0] - set emac1_pin_mux_param_name [format [PIN_MUX_PARAM_FORMAT] EMAC1] - set emac0_pin_mux_value [get_parameter_value $emac0_pin_mux_param_name] - set emac1_pin_mux_value [get_parameter_value $emac1_pin_mux_param_name] - set emac0_pin_mux_allowed_ranges [get_parameter_property $emac0_pin_mux_param_name allowed_ranges] - set emac1_pin_mux_allowed_ranges [get_parameter_property $emac1_pin_mux_param_name allowed_ranges] - - set emac0_ptp_enabled [expr {[string compare $emac0_pin_mux_value [FPGA_MUX_VALUE]] == 0 && [lsearch $emac0_pin_mux_allowed_ranges [FPGA_MUX_VALUE]] != -1}] - set emac1_ptp_enabled [expr {[string compare $emac1_pin_mux_value [FPGA_MUX_VALUE]] == 0 && [lsearch $emac1_pin_mux_allowed_ranges [FPGA_MUX_VALUE]] != -1}] - - set emac0_io_enabled [expr {[string compare $emac0_pin_mux_value "HPS I/O Set 0"] == 0 && [lsearch $emac0_pin_mux_allowed_ranges "HPS I/O Set 0"] != -1}] - set emac1_io_enabled [expr {[string compare $emac1_pin_mux_value "HPS I/O Set 0"] == 0 && [lsearch $emac1_pin_mux_allowed_ranges "HPS I/O Set 0"] != -1}] - - set emac0_ptp [get_parameter_value EMAC0_PTP] - set emac1_ptp [get_parameter_value EMAC1_PTP] - - if {$emac0_ptp && $emac0_io_enabled} { - set emac0_ptp_enabled 1 - } - if {$emac1_ptp && $emac1_io_enabled} { - set emac1_ptp_enabled 1 - } - - if {$emac0_ptp_enabled || $emac1_ptp_enabled } { - set instance_name clocks_resets - fpga_interfaces::add_interface emac_ptp_ref_clock clock Input - fpga_interfaces::add_interface_port emac_ptp_ref_clock emac_ptp_ref_clk clk Input 1 $instance_name ptp_ref_clk - } - - # TODO: elab peripherals that mux signals to the fpga - elab_FPGA_Peripheral_Signals $device_family - - set_parameter_value DEVICE_FAMILY [get_parameter_value SYS_INFO_DEVICE_FAMILY] -} - -proc elab_MPU_EVENTS {device_family} { - if [is_enabled MPU_EVENTS_Enable] { - set instance_name mpu_events - set atom_name hps_interface_mpu_event_standby - set location [locations::get_fpga_location $instance_name $atom_name] - - set iface_name "h2f_mpu_events" - set z "h2f_mpu_" - fpga_interfaces::add_interface $iface_name conduit Input - fpga_interfaces::add_interface_port $iface_name ${z}eventi eventi Input 1 $instance_name eventi - fpga_interfaces::add_interface_port $iface_name ${z}evento evento Output 1 $instance_name evento - fpga_interfaces::add_interface_port $iface_name ${z}standbywfe standbywfe Output 2 $instance_name standbywfe - fpga_interfaces::add_interface_port $iface_name ${z}standbywfi standbywfi Output 2 $instance_name standbywfi - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_DEBUGAPB {device_family} { - set instance_name debug_apb - set atom_name hps_interface_dbg_apb - set location [locations::get_fpga_location $instance_name $atom_name] - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - if [is_enabled DEBUGAPB_Enable] { - set clock_name "h2f_debug_apb_clock" - fpga_interfaces::add_interface $clock_name clock Input - fpga_interfaces::add_interface_port $clock_name "h2f_dbg_apb_clk" clk Input 1 $instance_name P_CLK - - set reset_name "h2f_debug_apb_reset" - fpga_interfaces::add_interface $reset_name reset Output - fpga_interfaces::add_interface_port $reset_name "h2f_dbg_apb_rst_n" reset_n Output 1 $instance_name P_RESET_N - fpga_interfaces::set_interface_property $reset_name associatedClock $clock_name - - set iface_name "h2f_debug_apb" - set z "h2f_dbg_apb_" - fpga_interfaces::add_interface $iface_name apb master - fpga_interfaces::add_interface_port $iface_name "${z}PADDR" paddr Output 18 $instance_name P_ADDR - fpga_interfaces::add_interface_port $iface_name "${z}PADDR31" paddr31 Output 1 $instance_name P_ADDR_31 - fpga_interfaces::add_interface_port $iface_name "${z}PENABLE" penable Output 1 $instance_name P_ENABLE - fpga_interfaces::add_interface_port $iface_name "${z}PRDATA" prdata Input 32 $instance_name P_RDATA - fpga_interfaces::add_interface_port $iface_name "${z}PREADY" pready Input 1 $instance_name P_READY - fpga_interfaces::add_interface_port $iface_name "${z}PSEL" psel Output 1 $instance_name P_SEL - fpga_interfaces::add_interface_port $iface_name "${z}PSLVERR" pslverr Input 1 $instance_name P_SLV_ERR - fpga_interfaces::add_interface_port $iface_name "${z}PWDATA" pwdata Output 32 $instance_name P_WDATA - fpga_interfaces::add_interface_port $iface_name "${z}PWRITE" pwrite Output 1 $instance_name P_WRITE - fpga_interfaces::set_interface_property $iface_name associatedClock $clock_name - fpga_interfaces::set_interface_property $iface_name associatedReset $reset_name - - set iface_name "h2f_debug_apb_sideband" - set z "h2f_dbg_apb_" - fpga_interfaces::add_interface $iface_name conduit Input - fpga_interfaces::add_interface_port $iface_name "${z}PCLKEN" pclken Input 1 $instance_name P_CLK_EN - fpga_interfaces::add_interface_port $iface_name "${z}DBG_APB_DISABLE" dbg_apb_disable Input 1 $instance_name DBG_APB_DISABLE - fpga_interfaces::set_interface_property $iface_name associatedClock $clock_name - fpga_interfaces::set_interface_property $iface_name associatedReset $reset_name - - } else { - # Tie low when FPGA debug apb not being used - fpga_interfaces::set_instance_port_termination ${instance_name} "P_CLK_EN" 1 0 0:0 0 - fpga_interfaces::set_instance_port_termination ${instance_name} "DBG_APB_DISABLE" 1 0 0:0 0 - } -} - -proc elab_STM {device_family} { - if [is_enabled STM_Enable] { - set instance_name stm_event - set atom_name hps_interface_stm_event - set location [locations::get_fpga_location $instance_name $atom_name] - - fpga_interfaces::add_interface f2h_stm_hw_events conduit Input - fpga_interfaces::add_interface_port f2h_stm_hw_events f2h_stm_hwevents stm_hwevents Input 28 $instance_name stm_event - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_CTI {device_family} { - set instance_name cross_trigger_interface - set atom_name hps_interface_cross_trigger - set location [locations::get_fpga_location $instance_name $atom_name] - - if [is_enabled CTI_Enable] { - set iface_name "h2f_cti" - set z "h2f_cti_" - fpga_interfaces::add_interface $iface_name conduit Input - fpga_interfaces::add_interface_port $iface_name ${z}trig_in trig_in Input 8 $instance_name trig_in - fpga_interfaces::add_interface_port $iface_name ${z}trig_in_ack trig_in_ack Output 8 $instance_name trig_inack - fpga_interfaces::add_interface_port $iface_name ${z}trig_out trig_out Output 8 $instance_name trig_out - fpga_interfaces::add_interface_port $iface_name ${z}trig_out_ack trig_out_ack Input 8 $instance_name trig_outack - # case:105603 hide asicctl output signal - # fpga_interfaces::add_interface_port $iface_name ${z}asicctl asicctl Output 8 $instance_name asicctl - fpga_interfaces::add_interface_port $iface_name ${z}fpga_clk_en fpga_clk_en Input 1 $instance_name clk_en - fpga_interfaces::set_interface_property $iface_name associatedClock h2f_cti_clock - fpga_interfaces::set_interface_property $iface_name associatedReset h2f_reset - - fpga_interfaces::add_interface h2f_cti_clock clock Input - fpga_interfaces::add_interface_port h2f_cti_clock h2f_cti_clk clk Input 1 $instance_name clk - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_TPIUFPGA {device_family} { - set instance_name tpiu - set atom_name hps_interface_tpiu_trace - set location [locations::get_fpga_location $instance_name $atom_name] - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - if { [string compare [get_parameter_value TPIUFPGA_Enable] "true" ] == 0 } { - set_parameter_property TPIUFPGA_alt enabled true - set iface_name "h2f_tpiu" - set z "h2f_tpiu_" - fpga_interfaces::add_interface $iface_name conduit input - fpga_interfaces::add_interface_port $iface_name ${z}clk_ctl clk_ctl Input 1 $instance_name traceclk_ctl - fpga_interfaces::add_interface_port $iface_name ${z}data data Output 32 $instance_name trace_data - - # case 245159 - if {[string compare [get_parameter_value TPIUFPGA_alt] "true" ] == 0} { - fpga_interfaces::add_interface_port $iface_name ${z}clkin clkin Input 1 $instance_name traceclkin - } else { - set iface_name "h2f_tpiu_clock_in" - fpga_interfaces::add_interface $iface_name clock input - fpga_interfaces::add_interface_port $iface_name ${z}clk_in clk Input 1 $instance_name traceclkin - } - - set clock_in_rate [get_parameter_value H2F_TPIU_CLOCK_IN_FREQ] - set clock_rate [expr {$clock_in_rate / 2}] - set iface_name "h2f_tpiu_clock" - fpga_interfaces::add_interface $iface_name clock output - fpga_interfaces::add_interface_port $iface_name ${z}clk clk Output 1 $instance_name traceclk - fpga_interfaces::set_interface_property $iface_name clockRateKnown true - fpga_interfaces::set_interface_property $iface_name clockRate $clock_rate - - add_clock_constraint_if_valid $clock_rate "*|fpga_interfaces|${instance_name}|traceclk" - - } else { - set_parameter_property TPIUFPGA_alt enabled false - fpga_interfaces::set_instance_port_termination ${instance_name} "traceclk_ctl" 1 1 0:0 1 - } -} - -proc elab_GP {device_family} { - if [is_enabled GP_Enable] { - set instance_name h2f_gp - set atom_name hps_interface_mpu_general_purpose - set location [locations::get_fpga_location $instance_name $atom_name] - - set iface_name "h2f_gp" - set z "h2f_gp_" - fpga_interfaces::add_interface $iface_name conduit Input - fpga_interfaces::add_interface_port $iface_name ${z}in gp_in Input 32 $instance_name gp_in - fpga_interfaces::add_interface_port $iface_name ${z}out gp_out Output 32 $instance_name gp_out - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_BOOTFROMFPGA {device_family} { - set instance_name boot_from_fpga - set atom_name hps_interface_boot_from_fpga - set location [locations::get_fpga_location $instance_name $atom_name] - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - set bsel_en [expr { [string compare [get_parameter_value BSEL_EN] "true" ] == 0 } ] - set bsel [get_parameter_value BSEL] - set csel_en [expr { [string compare [get_parameter_value CSEL_EN] "true" ] == 0 } ] - set csel [get_parameter_value CSEL] - set boot_from_fpga_enable [expr { [string compare [get_parameter_value BOOTFROMFPGA_Enable] "true" ] == 0 } ] - set ini_string [get_parameter_value quartus_ini_hps_ip_enable_bsel_csel] - set ini_enabled [expr { [string compare $ini_string "true" ] == 0 } ] - - # force disable bsel/csel by default - if {!$ini_enabled} { - set bsel_en 0 - set bsel 1 - set csel_en 0 - set csel 1 - } - - # when INI enabled, the controls should appear in the GUI - foreach parameter {BSEL BSEL_EN CSEL CSEL_EN} { - set_parameter_property $parameter visible $ini_string - set_parameter_property $parameter enabled $ini_string - } - - fpga_interfaces::set_instance_port_termination ${instance_name} "bsel" 3 0 2:0 $bsel - fpga_interfaces::set_instance_port_termination ${instance_name} "csel" 2 0 1:0 $csel - - if {$bsel_en} { - fpga_interfaces::set_instance_port_termination ${instance_name} "bsel_en" 1 0 0:0 1 - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "bsel_en" 1 0 0:0 0 - } - - if {$csel_en} { - fpga_interfaces::set_instance_port_termination ${instance_name} "csel_en" 1 0 0:0 1 - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "csel_en" 1 0 0:0 0 - } - - if {$boot_from_fpga_enable} { - set iface_name "f2h_boot_from_fpga" - set z "f2h_boot_from_fpga_" - fpga_interfaces::add_interface $iface_name conduit Input - fpga_interfaces::add_interface_port $iface_name "${z}ready" boot_from_fpga_ready Input 1 $instance_name boot_from_fpga_ready - fpga_interfaces::add_interface_port $iface_name "${z}on_failure" boot_from_fpga_on_failure Input 1 $instance_name boot_from_fpga_on_failure - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "boot_from_fpga_ready" 1 0 0:0 0 - fpga_interfaces::set_instance_port_termination ${instance_name} "boot_from_fpga_on_failure" 1 0 0:0 0 - } - - if {$boot_from_fpga_enable} { - send_message info "Ensure that valid Cortex A9 boot code is available to the HPS system when enabling boot from FPGA and h2f_axi_master interface is connecting to slave component start at address 0x0." - } - - if {$bsel_en && $bsel == 1 && !$boot_from_fpga_enable} { - send_message warning "Boot from FPGA ready must be enabled to correctly boot from the FPGA." - } -} - - -proc elab_F2S {device_family} { - set instance_name fpga2hps - set atom_name hps_interface_fpga2hps - set location [locations::get_fpga_location $instance_name $atom_name] - set termination_value 3 - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - set addr_width 32 - set width [get_parameter_value F2S_Width] - if {$width > 0} { - set data_width 32 - set strb_width 4 - set termination_value 0 - if {$width == 2} { - set data_width 64 - set strb_width 8 - set termination_value 1 - } elseif {$width == 3} { - set data_width 128 - set strb_width 16 - set termination_value 2 - } - - set clock_name "f2h_axi_clock" - fpga_interfaces::add_interface $clock_name clock Input - fpga_interfaces::add_interface_port $clock_name f2h_axi_clk clk Input 1 $instance_name clk - - set iface_name "f2h_axi_slave" - set z "f2h_" - - fpga_interfaces::add_interface $iface_name axi slave - fpga_interfaces::set_interface_property $iface_name associatedClock $clock_name - fpga_interfaces::set_interface_property $iface_name associatedReset h2f_reset - fpga_interfaces::set_interface_property $iface_name readAcceptanceCapability 8 - fpga_interfaces::set_interface_property $iface_name writeAcceptanceCapability 8 - fpga_interfaces::set_interface_property $iface_name combinedAcceptanceCapability 16 - fpga_interfaces::set_interface_property $iface_name readDataReorderingDepth 16 - fpga_interfaces::set_interface_meta_property $iface_name data_width $data_width - fpga_interfaces::set_interface_meta_property $iface_name address_width $addr_width - - fpga_interfaces::add_interface_port $iface_name ${z}AWID awid Input 8 $instance_name awid - fpga_interfaces::add_interface_port $iface_name ${z}AWADDR awaddr Input $addr_width $instance_name awaddr - fpga_interfaces::add_interface_port $iface_name ${z}AWLEN awlen Input 4 $instance_name awlen - fpga_interfaces::add_interface_port $iface_name ${z}AWSIZE awsize Input 3 $instance_name awsize - fpga_interfaces::add_interface_port $iface_name ${z}AWBURST awburst Input 2 $instance_name awburst - fpga_interfaces::add_interface_port $iface_name ${z}AWLOCK awlock Input 2 $instance_name awlock - fpga_interfaces::add_interface_port $iface_name ${z}AWCACHE awcache Input 4 $instance_name awcache - fpga_interfaces::add_interface_port $iface_name ${z}AWPROT awprot Input 3 $instance_name awprot - fpga_interfaces::add_interface_port $iface_name ${z}AWVALID awvalid Input 1 $instance_name awvalid - fpga_interfaces::add_interface_port $iface_name ${z}AWREADY awready Output 1 $instance_name awready - fpga_interfaces::add_interface_port $iface_name ${z}AWUSER awuser Input 5 $instance_name awuser - - fpga_interfaces::add_interface_port $iface_name ${z}WID wid Input 8 $instance_name wid - fpga_interfaces::add_interface_port $iface_name ${z}WDATA wdata Input $data_width $instance_name wdata - fpga_interfaces::add_interface_port $iface_name ${z}WSTRB wstrb Input $strb_width $instance_name wstrb - fpga_interfaces::add_interface_port $iface_name ${z}WLAST wlast Input 1 $instance_name wlast - fpga_interfaces::add_interface_port $iface_name ${z}WVALID wvalid Input 1 $instance_name wvalid - fpga_interfaces::add_interface_port $iface_name ${z}WREADY wready Output 1 $instance_name wready - - fpga_interfaces::add_interface_port $iface_name ${z}BID bid Output 8 $instance_name bid - fpga_interfaces::add_interface_port $iface_name ${z}BRESP bresp Output 2 $instance_name bresp - fpga_interfaces::add_interface_port $iface_name ${z}BVALID bvalid Output 1 $instance_name bvalid - fpga_interfaces::add_interface_port $iface_name ${z}BREADY bready Input 1 $instance_name bready - - - fpga_interfaces::add_interface_port $iface_name ${z}ARID arid Input 8 $instance_name arid - fpga_interfaces::add_interface_port $iface_name ${z}ARADDR araddr Input $addr_width $instance_name araddr - fpga_interfaces::add_interface_port $iface_name ${z}ARLEN arlen Input 4 $instance_name arlen - fpga_interfaces::add_interface_port $iface_name ${z}ARSIZE arsize Input 3 $instance_name arsize - fpga_interfaces::add_interface_port $iface_name ${z}ARBURST arburst Input 2 $instance_name arburst - fpga_interfaces::add_interface_port $iface_name ${z}ARLOCK arlock Input 2 $instance_name arlock - fpga_interfaces::add_interface_port $iface_name ${z}ARCACHE arcache Input 4 $instance_name arcache - fpga_interfaces::add_interface_port $iface_name ${z}ARPROT arprot Input 3 $instance_name arprot - fpga_interfaces::add_interface_port $iface_name ${z}ARVALID arvalid Input 1 $instance_name arvalid - fpga_interfaces::add_interface_port $iface_name ${z}ARREADY arready Output 1 $instance_name arready - fpga_interfaces::add_interface_port $iface_name ${z}ARUSER aruser Input 5 $instance_name aruser - - fpga_interfaces::add_interface_port $iface_name ${z}RID rid Output 8 $instance_name rid - fpga_interfaces::add_interface_port $iface_name ${z}RDATA rdata Output $data_width $instance_name rdata - fpga_interfaces::add_interface_port $iface_name ${z}RRESP rresp Output 2 $instance_name rresp - fpga_interfaces::add_interface_port $iface_name ${z}RLAST rlast Output 1 $instance_name rlast - fpga_interfaces::add_interface_port $iface_name ${z}RVALID rvalid Output 1 $instance_name rvalid - fpga_interfaces::add_interface_port $iface_name ${z}RREADY rready Input 1 $instance_name rready - } - fpga_interfaces::set_instance_port_termination ${instance_name} "port_size_config" 2 0 1:0 $termination_value -} - -proc elab_S2F {device_family} { - set instance_name hps2fpga - set atom_name hps_interface_hps2fpga - set location [locations::get_fpga_location $instance_name $atom_name] - set termination_value 3 - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - set addr_width 30 - set id_width 12 - set width [get_parameter_value S2F_Width] - if {$width > 0} { - set data_width 32 - set strb_width 4 - set termination_value 0 - - if {$width == 2} { - set data_width 64 - set strb_width 8 - set termination_value 1 - - } elseif {$width == 3} { - set data_width 128 - set strb_width 16 - set termination_value 2 - } - - set clock_name "h2f_axi_clock" - fpga_interfaces::add_interface $clock_name clock Input - fpga_interfaces::add_interface_port $clock_name h2f_axi_clk clk Input 1 $instance_name clk - - set iface_name "h2f_axi_master" - set z "h2f_" - - fpga_interfaces::add_interface $iface_name axi master - fpga_interfaces::set_interface_property $iface_name associatedClock $clock_name - fpga_interfaces::set_interface_property $iface_name associatedReset h2f_reset - fpga_interfaces::set_interface_property $iface_name readIssuingCapability 8 - fpga_interfaces::set_interface_property $iface_name writeIssuingCapability 8 - fpga_interfaces::set_interface_property $iface_name combinedIssuingCapability 16 - -# set svd_path [file join $::env(QUARTUS_ROOTDIR) .. ip altera hps altera_hps golden_ref_design_CMSIS_1_1_to_arm_v2.svd] -# send_message info "REMOVE! SVD_PATH = $svd_path" -# fpga_interfaces::set_interface_property $iface_name CMSIS_SVD_FILE $svd_path -# fpga_interfaces::set_interface_property $iface_name SVD_ADDRESS_GROUP hps -# fpga_interfaces::set_interface_property $iface_name SVD_ADDRESS_OFFSET [expr {0xC0000000}] - fpga_interfaces::set_interface_meta_property $iface_name data_width $data_width - fpga_interfaces::set_interface_meta_property $iface_name address_width $addr_width - fpga_interfaces::set_interface_meta_property $iface_name id_width $id_width - - fpga_interfaces::add_interface_port $iface_name ${z}AWID awid Output $id_width $instance_name awid - fpga_interfaces::add_interface_port $iface_name ${z}AWADDR awaddr Output $addr_width $instance_name awaddr - fpga_interfaces::add_interface_port $iface_name ${z}AWLEN awlen Output 4 $instance_name awlen - fpga_interfaces::add_interface_port $iface_name ${z}AWSIZE awsize Output 3 $instance_name awsize - fpga_interfaces::add_interface_port $iface_name ${z}AWBURST awburst Output 2 $instance_name awburst - fpga_interfaces::add_interface_port $iface_name ${z}AWLOCK awlock Output 2 $instance_name awlock - fpga_interfaces::add_interface_port $iface_name ${z}AWCACHE awcache Output 4 $instance_name awcache - fpga_interfaces::add_interface_port $iface_name ${z}AWPROT awprot Output 3 $instance_name awprot - fpga_interfaces::add_interface_port $iface_name ${z}AWVALID awvalid Output 1 $instance_name awvalid - fpga_interfaces::add_interface_port $iface_name ${z}AWREADY awready Input 1 $instance_name awready - - fpga_interfaces::add_interface_port $iface_name ${z}WID wid Output $id_width $instance_name wid - fpga_interfaces::add_interface_port $iface_name ${z}WDATA wdata Output $data_width $instance_name wdata - fpga_interfaces::add_interface_port $iface_name ${z}WSTRB wstrb Output $strb_width $instance_name wstrb - fpga_interfaces::add_interface_port $iface_name ${z}WLAST wlast Output 1 $instance_name wlast - fpga_interfaces::add_interface_port $iface_name ${z}WVALID wvalid Output 1 $instance_name wvalid - fpga_interfaces::add_interface_port $iface_name ${z}WREADY wready Input 1 $instance_name wready - - fpga_interfaces::add_interface_port $iface_name ${z}BID bid Input $id_width $instance_name bid - fpga_interfaces::add_interface_port $iface_name ${z}BRESP bresp Input 2 $instance_name bresp - fpga_interfaces::add_interface_port $iface_name ${z}BVALID bvalid Input 1 $instance_name bvalid - fpga_interfaces::add_interface_port $iface_name ${z}BREADY bready Output 1 $instance_name bready - - fpga_interfaces::add_interface_port $iface_name ${z}ARID arid Output $id_width $instance_name arid - fpga_interfaces::add_interface_port $iface_name ${z}ARADDR araddr Output $addr_width $instance_name araddr - fpga_interfaces::add_interface_port $iface_name ${z}ARLEN arlen Output 4 $instance_name arlen - fpga_interfaces::add_interface_port $iface_name ${z}ARSIZE arsize Output 3 $instance_name arsize - fpga_interfaces::add_interface_port $iface_name ${z}ARBURST arburst Output 2 $instance_name arburst - fpga_interfaces::add_interface_port $iface_name ${z}ARLOCK arlock Output 2 $instance_name arlock - fpga_interfaces::add_interface_port $iface_name ${z}ARCACHE arcache Output 4 $instance_name arcache - fpga_interfaces::add_interface_port $iface_name ${z}ARPROT arprot Output 3 $instance_name arprot - fpga_interfaces::add_interface_port $iface_name ${z}ARVALID arvalid Output 1 $instance_name arvalid - fpga_interfaces::add_interface_port $iface_name ${z}ARREADY arready Input 1 $instance_name arready - - fpga_interfaces::add_interface_port $iface_name ${z}RID rid Input $id_width $instance_name rid - fpga_interfaces::add_interface_port $iface_name ${z}RDATA rdata Input $data_width $instance_name rdata - fpga_interfaces::add_interface_port $iface_name ${z}RRESP rresp Input 2 $instance_name rresp - fpga_interfaces::add_interface_port $iface_name ${z}RLAST rlast Input 1 $instance_name rlast - fpga_interfaces::add_interface_port $iface_name ${z}RVALID rvalid Input 1 $instance_name rvalid - fpga_interfaces::add_interface_port $iface_name ${z}RREADY rready Output 1 $instance_name rready - - } - fpga_interfaces::set_instance_port_termination ${instance_name} "port_size_config" 2 0 1:0 $termination_value -} - -proc elab_LWH2F {device_family} { - set instance_name hps2fpga_light_weight - set atom_name hps_interface_hps2fpga_light_weight - set location [locations::get_fpga_location $instance_name $atom_name] - - if [is_enabled LWH2F_Enable] { - set addr_width 21 - set data_width 32 - set strb_width 4 - set id_width 12 - set clock_name "h2f_lw_axi_clock" - fpga_interfaces::add_interface $clock_name clock Input - fpga_interfaces::add_interface_port $clock_name h2f_lw_axi_clk clk Input 1 $instance_name clk - - set iface_name "h2f_lw_axi_master" - set z "h2f_lw_" - fpga_interfaces::add_interface $iface_name axi master -# fpga_interfaces::set_interface_property $iface_name SVD_ADDRESS_GROUP hps -# fpga_interfaces::set_interface_property $iface_name SVD_ADDRESS_OFFSET [expr {0xFC000000}] - fpga_interfaces::set_interface_property $iface_name associatedClock $clock_name - fpga_interfaces::set_interface_property $iface_name associatedReset h2f_reset - fpga_interfaces::set_interface_property $iface_name readIssuingCapability 8 - fpga_interfaces::set_interface_property $iface_name writeIssuingCapability 8 - fpga_interfaces::set_interface_property $iface_name combinedIssuingCapability 16 - fpga_interfaces::set_interface_meta_property $iface_name data_width $data_width - fpga_interfaces::set_interface_meta_property $iface_name address_width $addr_width - fpga_interfaces::set_interface_meta_property $iface_name id_width $id_width - - fpga_interfaces::add_interface_port $iface_name ${z}AWID awid Output $id_width $instance_name awid - fpga_interfaces::add_interface_port $iface_name ${z}AWADDR awaddr Output $addr_width $instance_name awaddr - fpga_interfaces::add_interface_port $iface_name ${z}AWLEN awlen Output 4 $instance_name awlen - fpga_interfaces::add_interface_port $iface_name ${z}AWSIZE awsize Output 3 $instance_name awsize - fpga_interfaces::add_interface_port $iface_name ${z}AWBURST awburst Output 2 $instance_name awburst - fpga_interfaces::add_interface_port $iface_name ${z}AWLOCK awlock Output 2 $instance_name awlock - fpga_interfaces::add_interface_port $iface_name ${z}AWCACHE awcache Output 4 $instance_name awcache - fpga_interfaces::add_interface_port $iface_name ${z}AWPROT awprot Output 3 $instance_name awprot - fpga_interfaces::add_interface_port $iface_name ${z}AWVALID awvalid Output 1 $instance_name awvalid - fpga_interfaces::add_interface_port $iface_name ${z}AWREADY awready Input 1 $instance_name awready - - fpga_interfaces::add_interface_port $iface_name ${z}WID wid Output $id_width $instance_name wid - fpga_interfaces::add_interface_port $iface_name ${z}WDATA wdata Output $data_width $instance_name wdata - fpga_interfaces::add_interface_port $iface_name ${z}WSTRB wstrb Output $strb_width $instance_name wstrb - fpga_interfaces::add_interface_port $iface_name ${z}WLAST wlast Output 1 $instance_name wlast - fpga_interfaces::add_interface_port $iface_name ${z}WVALID wvalid Output 1 $instance_name wvalid - fpga_interfaces::add_interface_port $iface_name ${z}WREADY wready Input 1 $instance_name wready - - fpga_interfaces::add_interface_port $iface_name ${z}BID bid Input $id_width $instance_name bid - fpga_interfaces::add_interface_port $iface_name ${z}BRESP bresp Input 2 $instance_name bresp - fpga_interfaces::add_interface_port $iface_name ${z}BVALID bvalid Input 1 $instance_name bvalid - fpga_interfaces::add_interface_port $iface_name ${z}BREADY bready Output 1 $instance_name bready - - fpga_interfaces::add_interface_port $iface_name ${z}ARID arid Output $id_width $instance_name arid - fpga_interfaces::add_interface_port $iface_name ${z}ARADDR araddr Output $addr_width $instance_name araddr - fpga_interfaces::add_interface_port $iface_name ${z}ARLEN arlen Output 4 $instance_name arlen - fpga_interfaces::add_interface_port $iface_name ${z}ARSIZE arsize Output 3 $instance_name arsize - fpga_interfaces::add_interface_port $iface_name ${z}ARBURST arburst Output 2 $instance_name arburst - fpga_interfaces::add_interface_port $iface_name ${z}ARLOCK arlock Output 2 $instance_name arlock - fpga_interfaces::add_interface_port $iface_name ${z}ARCACHE arcache Output 4 $instance_name arcache - fpga_interfaces::add_interface_port $iface_name ${z}ARPROT arprot Output 3 $instance_name arprot - fpga_interfaces::add_interface_port $iface_name ${z}ARVALID arvalid Output 1 $instance_name arvalid - fpga_interfaces::add_interface_port $iface_name ${z}ARREADY arready Input 1 $instance_name arready - - fpga_interfaces::add_interface_port $iface_name ${z}RID rid Input $id_width $instance_name rid - fpga_interfaces::add_interface_port $iface_name ${z}RDATA rdata Input $data_width $instance_name rdata - fpga_interfaces::add_interface_port $iface_name ${z}RRESP rresp Input 2 $instance_name rresp - fpga_interfaces::add_interface_port $iface_name ${z}RLAST rlast Input 1 $instance_name rlast - fpga_interfaces::add_interface_port $iface_name ${z}RVALID rvalid Input 1 $instance_name rvalid - fpga_interfaces::add_interface_port $iface_name ${z}RREADY rready Output 1 $instance_name rready - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_F2SDRAM {device_family} { - f2sdram::init_registers - - set instance_name f2sdram - set atom_name hps_interface_fpga2sdram - set location [locations::get_fpga_location $instance_name $atom_name] - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - set use_fast_sim_model [expr { [string compare [get_parameter_value quartus_ini_hps_ip_fast_f2sdram_sim_model] "true" ] == 0 }] - set bonding_out_signal [expr { [string compare [get_parameter_value BONDING_OUT_ENABLED] "true"] == 0} && {[string compare [get_parameter_value quartus_ini_hps_ip_f2sdram_bonding_out] "true"] == 0}] - #newly added - set width_list [get_parameter_value F2SDRAM_Width] - set rows [llength $width_list] - if {$rows > 0} { - # TODO: move outside of 'if' once registers are rendered - - - set type_list [get_parameter_value F2SDRAM_Type] - for {set i 0} {${i} < $rows} {incr i} { - set width [lindex $width_list $i] - set type_choice [lindex $type_list $i] - - set type "axi" - set type_id 0 - if { [string compare $type_choice [F2HSDRAM_AVM]] == 0 } { - set type "avalon" - set type_id 1 - } elseif { [string compare $type_choice [F2HSDRAM_AVM_WRITEONLY]] == 0 } { - set type "avalon" - set type_id 2 - } elseif { [string compare $type_choice [F2HSDRAM_AVM_READONLY]] == 0 } { - set type "avalon" - set type_id 3 - } - - set sim_is_synth [expr !$use_fast_sim_model] - - # To make sure bonding_out_signal only being added once even thought there are more than one f2sdram - if {$i == 0 } { - set bonding_out_signal [expr { [string compare [get_parameter_value BONDING_OUT_ENABLED] "true"] == 0} && {[string compare [get_parameter_value quartus_ini_hps_ip_f2sdram_bonding_out] "true"] == 0}] - } else { - set bonding_out_signal 0 - } - - f2sdram::add_port registers $i $type_id $width $instance_name $sim_is_synth $bonding_out_signal - } - f2sdram::add_sdc $use_fast_sim_model - fpga_interfaces::set_property IMPLEMENT_F2SDRAM_MEMORY_BACKED_SIM $use_fast_sim_model - - } - # write the registers out - f2sdram::render_registers registers $instance_name -} - -proc elab_clocks_resets {device_family} { - set instance_name clocks_resets - set atom_name hps_interface_clocks_resets - set location [locations::get_fpga_location $instance_name $atom_name] - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - fpga_interfaces::add_interface h2f_reset reset Output - fpga_interfaces::add_interface_port h2f_reset h2f_rst_n reset_n Output 1 $instance_name - fpga_interfaces::set_interface_property h2f_reset synchronousEdges none - fpga_interfaces::set_interface_property h2f_reset associatedResetSinks none - - if [is_enabled S2FCLK_COLDRST_Enable] { - fpga_interfaces::add_interface h2f_cold_reset reset Output - fpga_interfaces::add_interface_port h2f_cold_reset h2f_cold_rst_n reset_n Output 1 $instance_name - fpga_interfaces::set_interface_property h2f_cold_reset synchronousEdges none - fpga_interfaces::set_interface_property h2f_cold_reset associatedResetSinks none - } - - if [is_enabled F2SCLK_COLDRST_Enable] { - fpga_interfaces::add_interface f2h_cold_reset_req reset Input - fpga_interfaces::add_interface_port f2h_cold_reset_req f2h_cold_rst_req_n reset_n Input 1 $instance_name - fpga_interfaces::set_interface_property f2h_cold_reset_req synchronousEdges none - fpga_interfaces::set_interface_property h2f_reset associatedResetSinks f2h_cold_reset_req - if [is_enabled S2FCLK_COLDRST_Enable] { - fpga_interfaces::set_interface_property h2f_cold_reset associatedResetSinks f2h_cold_reset_req - } - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_cold_rst_req_n" 1 1 0:0 1 - } - - if [is_enabled S2FCLK_PENDINGRST_Enable] { - fpga_interfaces::add_interface h2f_warm_reset_handshake conduit Output - fpga_interfaces::add_interface_port h2f_warm_reset_handshake h2f_pending_rst_req_n h2f_pending_rst_req_n Output 1 $instance_name - fpga_interfaces::add_interface_port h2f_warm_reset_handshake f2h_pending_rst_ack_n f2h_pending_rst_ack_n Input 1 $instance_name f2h_pending_rst_ack - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_pending_rst_ack" 1 1 0:0 1 - } - - if [is_enabled F2SCLK_DBGRST_Enable] { - fpga_interfaces::add_interface f2h_debug_reset_req reset Input - fpga_interfaces::add_interface_port f2h_debug_reset_req f2h_dbg_rst_req_n reset_n Input 1 $instance_name - fpga_interfaces::set_interface_property f2h_debug_reset_req synchronousEdges none - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_dbg_rst_req_n" 1 1 0:0 1 - } - - if [is_enabled F2SCLK_WARMRST_Enable] { - fpga_interfaces::add_interface f2h_warm_reset_req reset Input - fpga_interfaces::add_interface_port f2h_warm_reset_req f2h_warm_rst_req_n reset_n Input 1 $instance_name - fpga_interfaces::set_interface_property f2h_warm_reset_req synchronousEdges none - - if [is_enabled F2SCLK_COLDRST_Enable] { - fpga_interfaces::set_interface_property h2f_reset associatedResetSinks {f2h_warm_reset_req f2h_cold_reset_req} - } else { - fpga_interfaces::set_interface_property h2f_reset associatedResetSinks {f2h_warm_reset_req} - } - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_warm_rst_req_n" 1 1 0:0 1 - } - - if [is_enabled S2FCLK_USER0CLK_Enable] { - fpga_interfaces::add_interface h2f_user0_clock clock Output - fpga_interfaces::add_interface_port h2f_user0_clock h2f_user0_clk clk Output 1 $instance_name - set frequency [get_parameter_value S2FCLK_USER0CLK_FREQ] - set frequency [expr {$frequency * [MHZ_TO_HZ]}] - fpga_interfaces::set_interface_property h2f_user0_clock clockRateKnown true - fpga_interfaces::set_interface_property h2f_user0_clock clockRate $frequency - add_clock_constraint_if_valid $frequency "*|fpga_interfaces|${instance_name}|h2f_user0_clk" - } - - if [is_enabled S2FCLK_USER1CLK_Enable] { - fpga_interfaces::add_interface h2f_user1_clock clock Output - fpga_interfaces::add_interface_port h2f_user1_clock h2f_user1_clk clk Output 1 $instance_name - set frequency [get_parameter_value S2FCLK_USER1CLK_FREQ] - set frequency [expr {$frequency * [MHZ_TO_HZ]}] - fpga_interfaces::set_interface_property h2f_user1_clock clockRateKnown true - fpga_interfaces::set_interface_property h2f_user1_clock clockRate $frequency - add_clock_constraint_if_valid $frequency "*|fpga_interfaces|${instance_name}|h2f_user1_clk" - } - - set_parameter_property S2FCLK_USER2CLK enabled false - - if [is_enabled F2SCLK_PERIPHCLK_Enable] { - fpga_interfaces::add_interface f2h_periph_ref_clock clock Input - fpga_interfaces::add_interface_port f2h_periph_ref_clock f2h_periph_ref_clk clk Input 1 $instance_name - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_periph_ref_clk" 1 0 - } - - - if [is_enabled F2SCLK_SDRAMCLK_Enable] { - fpga_interfaces::add_interface f2h_sdram_ref_clock clock Input - fpga_interfaces::add_interface_port f2h_sdram_ref_clock f2h_sdram_ref_clk clk Input 1 $instance_name - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_sdram_ref_clk" 1 0 - } -} - -# Elaborate peripheral request interfaces for the fpga and -# the clk/reset per pair -# TODO: Make sure the DMA RTL contains the wrapper -proc elab_DMA {device_family} { - set instance_name dma - set atom_name hps_interface_dma - set location [locations::get_fpga_location $instance_name $atom_name] - - set can_message 0 - set available_list [get_parameter_value DMA_Enable] - if {[llength $available_list] > 0} { - set dma_used 0 - set periph_id 0 - foreach entry $available_list { - if {[string compare $entry "Yes" ] == 0} { - elab_DMA_entry $periph_id $instance_name - set dma_used 1 - if {$periph_id >= 4} { - set can_message 1 - } - } - incr periph_id - } - if $dma_used { - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } - if $can_message { - send_message info "DMA Peripheral Request Interfaces 4-7 may be consumed by an HPS CAN Controller" - } - } -} - -proc elab_DMA_make_conduit_name {periph_id} { - return "f2h_dma_req${periph_id}" -} - -proc elab_DMA_entry {periph_id instance_name} { - set iname [elab_DMA_make_conduit_name $periph_id] - set atom_signal_prefix "channel${periph_id}" - fpga_interfaces::add_interface $iname conduit Output - fpga_interfaces::add_interface_port $iname "${iname}_req" "dma_req" Input 1 $instance_name ${atom_signal_prefix}_req - fpga_interfaces::add_interface_port $iname "${iname}_single" "dma_single" Input 1 $instance_name ${atom_signal_prefix}_single - fpga_interfaces::add_interface_port $iname "${iname}_ack" "dma_ack" Output 1 $instance_name ${atom_signal_prefix}_xx_ack -} - - -proc elab_emac_ptp {device_family} { - # added for case http://fogbugz.altera.com/default.asp?307450 - for {set i 0} {$i < 2} {incr i} { - set emac_fpga_enabled false - set emac_io_enabled false - - set emac_pin_mux_value [get_parameter_value EMAC${i}_PinMuxing] - set emac_ptp [get_parameter_value EMAC${i}_PTP] - - if {[string compare $emac_pin_mux_value [FPGA_MUX_VALUE]] == 0} { - set emac_fpga_enabled true - } - if {[string compare $emac_pin_mux_value "HPS I/O Set 0"] == 0} { - set emac_io_enabled true - } - - set_parameter_property EMAC${i}_PTP enabled $emac_io_enabled - - if {$emac_io_enabled && $emac_ptp } { - set instance_name peripheral_emac${i} - set atom_name hps_interface_peripheral_emac - set wys_atom_name arriav_hps_interface_peripheral_emac - set location [locations::get_fpga_location $instance_name $atom_name] - - set iface_name "emac${i}" - - fpga_interfaces::add_interface $iface_name conduit input - fpga_interfaces::add_interface_port $iface_name emac${i}_ptp_aux_ts_trig_i ptp_aux_ts_trig_i Input 1 $instance_name ptp_aux_ts_trig_i - fpga_interfaces::add_interface_port $iface_name emac${i}_ptp_pps_o ptp_pps_o Output 1 $instance_name ptp_pps_o - - - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } - - } -} - -proc elab_INTERRUPTS {device_family logical_view} { - set instance_name interrupts - set atom_name hps_interface_interrupts - set location [locations::get_fpga_location $instance_name $atom_name] - set any_interrupt_enabled 0 - - ##### F2H ##### - if [is_enabled F2SINTERRUPT_Enable] { - set any_interrupt_enabled 1 - set iname "f2h_irq" - set pname "f2h_irq" - if { $logical_view == 0 } { - fpga_interfaces::add_interface "${iname}0" interrupt receiver - fpga_interfaces::add_interface_port "${iname}0" "${pname}_p0" irq Input 32 - fpga_interfaces::set_port_fragments "${iname}0" "${pname}_p0" "${instance_name}:irq(31:0)" - - fpga_interfaces::add_interface "${iname}1" interrupt receiver - fpga_interfaces::add_interface_port "${iname}1" "${pname}_p1" irq Input 32 - fpga_interfaces::set_port_fragments "${iname}1" "${pname}_p1" "${instance_name}:irq(63:32)" - } - } - - ##### H2F ##### - load_h2f_interrupt_table\ - functions_by_group width_by_function inverted_by_function - - set interrupt_groups [list_h2f_interrupt_groups] - foreach group $interrupt_groups { - set parameter "S2FINTERRUPT_${group}_Enable" - set enabled [is_enabled $parameter] - - if {!$enabled} { - continue - } - set any_interrupt_enabled 1 - - foreach function $functions_by_group($group) { - set width 1 - if {[info exists width_by_function($function)]} { - set width $width_by_function($function) - } - - set suffix "" - set inverted [info exists inverted_by_function($function)] - if {$inverted} { - set suffix "_n" - } - - #skip fpga_interfaces interrupt declaration for uart - if { ($logical_view == 1) && ( - $function == "uart0" || - $function == "uart1" )} { - continue - } - - set prefix "h2f_${function}_" - set interface "${prefix}interrupt" - set port "${prefix}irq" - - if {$width > 1} { ;# for buses, use index in interface/port names - for {set i 0} {$i < $width} {incr i} { - set indexed_interface "${interface}${i}" - set indexed_port "${port}${i}${suffix}" - fpga_interfaces::add_interface\ - $indexed_interface interrupt sender - fpga_interfaces::add_interface_port\ - $indexed_interface $indexed_port irq Output 1\ - $instance_name $indexed_port - } - } else { - set port "$port${suffix}" - fpga_interfaces::add_interface\ - $interface interrupt sender - fpga_interfaces::add_interface_port\ - $interface $port irq Output 1 $instance_name $port - } - } - } - - if {$any_interrupt_enabled} { - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_TEST {device_family} { - set parameter_enabled [expr {[string compare [get_parameter_value TEST_Enable] "true" ] == 0}] - set ini_enabled [expr {[string compare [get_parameter_value quartus_ini_hps_ip_enable_test_interface] "true" ] == 0}] - - if {$parameter_enabled && $ini_enabled} { - set instance_name test_interface - set atom_name hps_interface_test - set location [locations::get_fpga_location $instance_name $atom_name] - - set iname "test" - set z "test_" - - set data [get_parameter_value test_iface_definition] - - fpga_interfaces::add_interface $iname conduit input - foreach {port width dir} $data { - fpga_interfaces::add_interface_port $iname "${z}${port}" $port $dir $width $instance_name $port - } - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -# TODO: Mode usage data -proc elab_FPGA_Peripheral_Signals {device_family} { - # disable and hide all parameters related to fpga outputs - set emac0_fpga [get_parameter_value quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface] - set lssis_fpga [get_parameter_value quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces] - set all_fpga "true" - - set peripherals [list_peripheral_names] - foreach peripheral $peripherals { - if { [string compare $peripheral "SDIO" ] == 0 } { - continue - } - set visible false - if {[string compare $all_fpga "true" ] == 0} { - set visible true - } elseif {[string compare $emac0_fpga "true" ] == 0 && [string compare -nocase $peripheral "emac0"] == 0} { - set visible true - } elseif {[string compare $lssis_fpga "true" ] == 0 && [is_peripheral_low_speed_serial_interface $peripheral_name]} { - set visible true - } - if {[string compare -nocase $peripheral "emac0" ] == 0 || [string compare -nocase $peripheral "emac1" ] == 0} { - set visible true - } - set clocks [get_peripheral_fpga_output_clocks $peripheral] - foreach clock $clocks { - set parameter [form_peripheral_fpga_output_clock_frequency_parameter $clock] - set_parameter_property $parameter enabled false - set_parameter_property $parameter visible $visible - set clock_output_set($clock) 1 - } - - set clocks [get_peripheral_fpga_input_clocks $peripheral] - foreach clock $clocks { - set clock_input_set($clock) 1 - } - } - - array set fpga_ifaces [get_parameter_value DB_periph_ifaces] - array set iface_ports [get_parameter_value DB_iface_ports] - array set port_pins [get_parameter_value DB_port_pins] - foreach peripheral_name $fpga_ifaces([ORDERED_NAMES]) { ;# Peripherals - set pin_mux_param_name [format [PIN_MUX_PARAM_FORMAT] $peripheral_name] - set pin_mux_value [get_parameter_value $pin_mux_param_name] - set allowed_ranges [get_parameter_property $pin_mux_param_name allowed_ranges] - - if {[string compare $pin_mux_value [FPGA_MUX_VALUE]] == 0 && [lsearch $allowed_ranges [FPGA_MUX_VALUE]] != -1} { - funset peripheral - array set peripheral $fpga_ifaces($peripheral_name) - funset interfaces - array set interfaces $peripheral(interfaces) - - set instance_name [invent_peripheral_instance_name $peripheral_name] - - foreach interface_name $interfaces([ORDERED_NAMES]) { ;# Interfaces - funset interface - array set interface $interfaces($interface_name) - fpga_interfaces::add_interface $interface_name $interface(type) $interface(direction) - foreach {property_key property_value} $interface(properties) { - fpga_interfaces::set_interface_property $interface_name $property_key $property_value - } - #send_message info "NEA: peripheral_name $peripheral_name interface_name $interface_name " - - if { [string match "EMAC?" $peripheral_name] && [string match "*x_reset" $interface_name ] } { - fpga_interfaces::set_interface_property $interface_name associatedResetSinks none - } - - foreach {meta_property} [array names interface] { - # Meta Property if leading with an @ - if {[string compare [string index ${meta_property} 0] "@"] == 0} { - fpga_interfaces::set_interface_meta_property $interface_name [string replace ${meta_property} 0 0] $interface($meta_property) - } - } - - set once_per_clock 1 - funset ports - array set ports $iface_ports($interface_name) - foreach port_name $ports([ORDERED_NAMES]) { ;# Ports - funset port - array set port $ports($port_name) - - # TODO: determine width based on pins available via mode - set width [calculate_port_width $port_pins($port_name)] - - fpga_interfaces::add_interface_port $interface_name $port_name $port(role) $port(direction) $width $instance_name $port(atom_signal_name) - - set frequency 0 - # enable and show clock frequency parameters for outputs - if {[info exists clock_output_set($interface_name)]} { - set parameter [form_peripheral_fpga_output_clock_frequency_parameter $interface_name] - set_parameter_property $parameter enabled true - set frequency [get_parameter_value $parameter] - set frequency [expr {$frequency * [MHZ_TO_HZ]}] - fpga_interfaces::set_interface_property $interface_name clockRateKnown true - fpga_interfaces::set_interface_property $interface_name clockRate $frequency - } - - if {[string compare -nocase $interface(type) "clock"] == 0 && $once_per_clock} { - set once_per_clock 0 - add_clock_constraint_if_valid $frequency "*|fpga_interfaces|${instance_name}|[string tolower $port(atom_signal_name)]" - } - } - } - - # device-specific atom - set atom_name $peripheral(atom_name) - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - set location [locations::get_fpga_location $peripheral_name $atom_name] - - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } - } -} - -# derives the WYS (device family-specific) atom name from the generic one -proc generic_atom_to_wys_atom {device_family atom_name} { - # TODO: base this on a table of data instead of on code - set result "" - if {[check_device_family_equivalence $device_family CYCLONEV]} { - set result "cyclonev_${atom_name}" - } elseif {[check_device_family_equivalence $device_family ARRIAV]} { - set result "arriav_${atom_name}" - } - return $result -} - -# invents an instance name from the peripheral's name -# assumes that the instance name is the same across a peripheral -proc invent_peripheral_instance_name {peripheral_name} { - return "peripheral_[string tolower $peripheral_name]" -} - -# TODO: do width calculation at db load time so we don't do it every elaboration! -# then make it accessible by a mode to width array for every peripheral with fpga periph interface -# TODO: also validate the static data, checking if the mode signals make sense aka only contiguous, 0-indexed mappings -proc calculate_port_width {pin_array_string} { - array set pins $pin_array_string - # TODO: -do we need to be able to support ports that don't start with pins at 0? - # -e.g. pins D0-D7 are indexed 0-7. if want D4-D7, can we do indexes 4-7? - # -for now, no! - set bit_index 0 - while {[info exists pins($bit_index)]} { - incr bit_index - } - return $bit_index -} - -proc pin_to_bank {pin} { - set io_index [string first "IO" $pin] - return [string range $pin 0 [expr {$io_index - 1}]] -} - -proc sort_pins {pins} { - set pin_suffixes [list] - foreach pin $pins { - set io_index [string first "IO" $pin] - set suffix_start [expr {$io_index + 2}] - set length [string length $pin] - set suffix [string range $pin $suffix_start [expr {$length - 1}]] - lappend pin_suffixes $suffix - } - set result [list] - set indices [lsort-indices -increasing -integer $pin_suffixes] - foreach index $indices { - lappend result [lindex $pins $index] - } - return $result -} - -proc set_peripheral_pin_muxing_description {peripheral_name pin_muxing_description mode_description} { - set parameter "[string toupper $peripheral_name]_PinMuxing" - set_display_item_property $parameter DESCRIPTION $pin_muxing_description - - set parameter "[string toupper $peripheral_name]_Mode" - set_display_item_property $parameter DESCRIPTION $mode_description -} - -# Expects same set of keys between both parameters -proc create_pin_muxing_description_table_html {signals_by_option_str pins_by_option_str} { - array set pins_by_option $pins_by_option_str - - set options [list] - foreach {option signals} $signals_by_option_str { - lappend options $option - - set pins $pins_by_option($option) - - foreach signal $signals pin $pins { - set key "${option}.${signal}" - set pins_by_option_and_signal($key) $pin - set signal_set($signal) 1 - } - } - - set sorted_signals [lsort -increasing -ascii [array names signal_set]] - set sorted_options [lsort -increasing -ascii $options] - - set ALIGN_CENTER {align="center"} - - set html "" ;# start of table, first row cell empty for signal column - foreach option $sorted_options { - set html "${html}" - } - set html "${html}" - foreach signal $sorted_signals { - set html "${html}" ;# new row w/ first cell (header) being the signal name - foreach option $sorted_options { - set key "${option}.${signal}" - if {[info exists pins_by_option_and_signal($key)]} { - set pin $pins_by_option_and_signal($key) - } else { - set pin "" - } - set html "${html}" - } - set html "${html}" - } - set html "${html}
    ${option}
    ${signal}${pin}
    " - return $html -} - -proc create_mode_description_table_html {signals_by_mode_str} { - set modes [list] - - foreach {mode signals} $signals_by_mode_str { - lappend modes $mode - foreach signal $signals { - set key "${mode}.${signal}" - set membership_by_mode_and_signal($key) 1 - set signal_set($signal) 1 - } - } - - set sorted_signals [lsort -increasing -ascii [array names signal_set]] - set sorted_modes [lsort -increasing -ascii $modes] - - set ALIGN_CENTER {align="center"} - - set html "" ;# start of table, first row cell empty for signal column - foreach mode $sorted_modes { - set html "${html}" - } - set html "${html}" - foreach signal $sorted_signals { - set html "${html}" ;# new row w/ first cell (header) being the signal name - - foreach mode $sorted_modes { - set key "${mode}.${signal}" - if {[info exists membership_by_mode_and_signal($key)]} { - set member_marker "X" - } else { - set member_marker "" - } - set html "${html}" - } - set html "${html}" - } - set html "${html}
    ${mode}
    ${signal}${member_marker}
    " - return $html -} - -proc get_quartus_edition {} { - set code { - set version "" - regexp {([a-zA-Z]+) (Edition|Version)$} $quartus(version) total version - return $version - } - set safe_code [string map {\n ; \t ""} $code] - set package_name "advanced_device" - set result [lindex [run_quartus_tcl_command "${package_name}:${safe_code}"] 0] - return $result -} - -proc is_soc_device {device} { - return [::pin_mux_db::verify_soc_device $device] -} - -proc set_peripheral_pin_muxing_descriptions {peripherals_ref} { - upvar 1 $peripherals_ref peripherals - - foreach peripheral_name [array names peripherals] { - set signals_by_option [list] - set pins_by_option [list] - - funset peripheral - array set peripheral $peripherals($peripheral_name) - funset pin_sets - array set pin_sets $peripheral(pin_sets) - - foreach pin_set_name [array names pin_sets] { - funset pin_set - array set pin_set $pin_sets($pin_set_name) - set signals $pin_set(signals) - lappend signals_by_option $pin_set_name $signals - set pins $pin_set(pins) - lappend pins_by_option $pin_set_name $pins - } - set signals_by_mode $peripheral(signals_by_mode) - - set table_html [create_pin_muxing_description_table_html $signals_by_option $pins_by_option] - set pin_muxing_description "" - - set table_html [create_mode_description_table_html $signals_by_mode] - set mode_description "Signal Membership Per Mode Usage Option:
    ${table_html}" - set_peripheral_pin_muxing_description $peripheral_name $pin_muxing_description $mode_description - } -} - -# Add pin muxing details to soc_io peripheral/signal data -add_storage_parameter pin_muxing {} -add_storage_parameter pin_muxing_check "" -proc ensure_pin_muxing_data {device_family} { - if {[check_device_family_equivalence $device_family [get_module_property SUPPORTED_DEVICE_FAMILIES]] == 0} { - return - } - - set device [get_device] - - if {![is_soc_device $device]} { - send_message error "Selected device '${device}' is not an SoC device. Please choose a valid SoC device to use the Hard Processor System." - return - } - - set device_configuration "${device_family}+${device}" - - set old_device_configuration [get_parameter_value pin_muxing_check] - if {$old_device_configuration == $device_configuration} { - return - } - - set load_rc [::pin_mux_db::load $device] - if {!$load_rc} { - send_message error "The pin information for the Hard Processor System could not be determined. Please check whether your edition of Quartus Prime supports the selected device." - return - } - locations::load $device - - load_peripherals_pin_muxing_model pin_muxing_peripherals - set_peripheral_pin_muxing_descriptions pin_muxing_peripherals - - set gpio_pins [::pin_mux_db::get_gpio_pins] - set loanio_pins [::pin_mux_db::get_loan_io_pins] - set customer_pin_names [::pin_mux_db::get_customer_pin_names] - set hlgpi_pins [::pin_mux_db::get_hlgpi_pins] - - set pin_muxing [list [array get pin_muxing_peripherals] $gpio_pins $loanio_pins $customer_pin_names $hlgpi_pins] - set_parameter_value pin_muxing $pin_muxing - set_parameter_value pin_muxing_check $device_configuration - - #### update pin_muxing data to use in java GUI #### - set pinmux_peripherals [array get pin_muxing_peripherals] - array set periph_key_value $pinmux_peripherals - - foreach {key value} [array get periph_key_value] { - set_parameter_value JAVA_${key}_DATA "$key \{$value\}" - } -} - -proc get_device {} { - - set device_name [get_parameter_value device_name] - return $device_name -} - -proc construct_hps_parameter_map {} { - set parameters [get_parameters] - foreach parameter $parameters { - set value [get_parameter_value $parameter] - set result($parameter) $value - } - return [array get result] -} - -################################################################################ -# Implements interface of util/pin_mux.tcl -# -namespace eval hps_ip_pin_muxing_model { -################################################################################ - proc get_peripherals_model {} { - set pin_muxing [get_parameter_value pin_muxing] - set peripherals [lindex $pin_muxing 0] - return $peripherals - } - proc get_emac0_fpga_ini {} { - return [is_enabled quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface] - } - proc get_lssis_fpga_ini {} { - return [is_enabled quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces] - } - proc get_all_fpga_ini {} { - return [is_enabled quartus_ini_hps_ip_enable_all_peripheral_fpga_interfaces] - } - proc get_peripheral_pin_muxing_selection {peripheral_name} { - set pin_muxing_param_name [format [PIN_MUX_PARAM_FORMAT] $peripheral_name] - set selection [get_parameter_value $pin_muxing_param_name] - return $selection - } - proc get_peripheral_mode_selection {peripheral_name} { - set mode_param_name [format [MODE_PARAM_FORMAT] $peripheral_name] - set selection [get_parameter_value $mode_param_name] - return $selection - } - proc get_gpio_pins {} { - set pin_muxing [get_parameter_value pin_muxing] - set pins [lindex $pin_muxing 1] - return $pins - } - proc get_loanio_pins {} { - set pin_muxing [get_parameter_value pin_muxing] - set pins [lindex $pin_muxing 2] - return $pins - } - proc get_customer_pin_names {} { - set pin_muxing [get_parameter_value pin_muxing] - set pins [lindex $pin_muxing 3] - return $pins - } - proc get_hlgpi_pins {} { - set pin_muxing [get_parameter_value pin_muxing] - set pins [lindex $pin_muxing 4] - return $pins - } - proc get_unsupported_peripheral {peripheral_name} { - set device_family [get_parameter_value hps_device_family] - set skip 0 - if {[check_device_family_equivalence $device_family ARRIAV]} { - foreach excluded_peripheral [ARRIAV_EXCLUDED_PERIPHRERALS] { - if {[string compare $excluded_peripheral $peripheral_name] == 0} { - set skip 1 - } - } - } - return $skip - } -} - - -## Add documentation links for user guide and/or release notes -add_documentation_link "User Guide" https://www.altera.com/products/soc/overview.html diff --git a/sys/ip/in_split.v b/sys/ip/in_split.v deleted file mode 100644 index e750ff9..0000000 --- a/sys/ip/in_split.v +++ /dev/null @@ -1,52 +0,0 @@ -// in_split.v - - -`timescale 1 ps / 1 ps -module in_split ( - input wire clk, // input.clk - input wire ce, // .ce - input wire de, // .de - input wire h_sync, // .h_sync - input wire v_sync, // .v_sync - input wire f, // .f - input wire [23:0] data, // .data - output wire vid_clk, // Output.vid_clk - output reg vid_datavalid, // .vid_datavalid - output reg [1:0] vid_de, // .vid_de - output reg [1:0] vid_f, // .vid_f - output reg [1:0] vid_h_sync, // .vid_h_sync - output reg [1:0] vid_v_sync, // .vid_v_sync - output reg [47:0] vid_data, // .vid_data - output wire vid_locked, // .vid_locked - output wire [7:0] vid_color_encoding, // .vid_color_encoding - output wire [7:0] vid_bit_width, // .vid_bit_width - input wire clipping, // .clipping - input wire overflow, // .overflow - input wire sof, // .sof - input wire sof_locked, // .sof_locked - input wire refclk_div, // .refclk_div - input wire padding // .padding - ); - - assign vid_bit_width = 0; - assign vid_color_encoding = 0; - assign vid_locked = 1; - assign vid_clk = clk; - - always @(posedge clk) begin - reg odd = 0; - - vid_datavalid <= 0; - if(ce) begin - vid_de[odd] <= de; - vid_f[odd] <= f; - vid_h_sync[odd] <= h_sync; - vid_v_sync[odd] <= v_sync; - if(odd) vid_data[47:24] <= data; - else vid_data[23:0] <= data; - - odd <= ~odd; - vid_datavalid <= odd; - end - end -endmodule diff --git a/sys/ip/in_split_hw.tcl b/sys/ip/in_split_hw.tcl deleted file mode 100644 index 403555a..0000000 --- a/sys/ip/in_split_hw.tcl +++ /dev/null @@ -1,104 +0,0 @@ -# TCL File Generated by Component Editor 17.0 -# Thu Jan 25 18:50:29 CST 2018 -# DO NOT MODIFY - - -# -# in_split "Input Splitter" v17.0 -# Sorgelig 2018.01.25.18:50:29 -# -# - -# -# request TCL package from ACDS 16.1 -# -package require -exact qsys 16.1 - - -# -# module in_split -# -set_module_property DESCRIPTION "" -set_module_property NAME in_split -set_module_property VERSION 17.0 -set_module_property INTERNAL false -set_module_property OPAQUE_ADDRESS_MAP true -set_module_property AUTHOR Sorgelig -set_module_property DISPLAY_NAME "Input Splitter" -set_module_property INSTANTIATE_IN_SYSTEM_MODULE true -set_module_property EDITABLE true -set_module_property REPORT_TO_TALKBACK false -set_module_property ALLOW_GREYBOX_GENERATION false -set_module_property REPORT_HIERARCHY false - - -# -# file sets -# -add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" -set_fileset_property QUARTUS_SYNTH TOP_LEVEL in_split -set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false -set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE true -add_fileset_file in_split.v VERILOG PATH in_split.v TOP_LEVEL_FILE - - -# -# parameters -# - - -# -# display items -# - - -# -# connection point input -# -add_interface input conduit end -set_interface_property input associatedClock "" -set_interface_property input associatedReset "" -set_interface_property input ENABLED true -set_interface_property input EXPORT_OF "" -set_interface_property input PORT_NAME_MAP "" -set_interface_property input CMSIS_SVD_VARIABLES "" -set_interface_property input SVD_ADDRESS_GROUP "" - -add_interface_port input clk clk Input 1 -add_interface_port input ce ce Input 1 -add_interface_port input de de Input 1 -add_interface_port input h_sync h_sync Input 1 -add_interface_port input v_sync v_sync Input 1 -add_interface_port input f f Input 1 -add_interface_port input data data Input 24 - - -# -# connection point Output -# -add_interface Output conduit end -set_interface_property Output associatedClock "" -set_interface_property Output associatedReset "" -set_interface_property Output ENABLED true -set_interface_property Output EXPORT_OF "" -set_interface_property Output PORT_NAME_MAP "" -set_interface_property Output CMSIS_SVD_VARIABLES "" -set_interface_property Output SVD_ADDRESS_GROUP "" - -add_interface_port Output vid_clk vid_clk Output 1 -add_interface_port Output vid_datavalid vid_datavalid Output 1 -add_interface_port Output vid_de vid_de Output 2 -add_interface_port Output vid_f vid_f Output 2 -add_interface_port Output vid_h_sync vid_h_sync Output 2 -add_interface_port Output vid_v_sync vid_v_sync Output 2 -add_interface_port Output vid_data vid_data Output 48 -add_interface_port Output vid_locked vid_locked Output 1 -add_interface_port Output vid_color_encoding vid_color_encoding Output 8 -add_interface_port Output vid_bit_width vid_bit_width Output 8 -add_interface_port Output clipping clipping Input 1 -add_interface_port Output overflow overflow Input 1 -add_interface_port Output sof sof Input 1 -add_interface_port Output sof_locked sof_locked Input 1 -add_interface_port Output refclk_div refclk_div Input 1 -add_interface_port Output padding padding Input 1 - diff --git a/sys/ip/out_mix.v b/sys/ip/out_mix.v deleted file mode 100644 index e135b1c..0000000 --- a/sys/ip/out_mix.v +++ /dev/null @@ -1,44 +0,0 @@ -// out_mix.v - -`timescale 1 ps / 1 ps -module out_mix ( - input wire clk, // Output.clk - output reg de, // .de - output reg h_sync, // .h_sync - output reg v_sync, // .v_sync - output reg [23:0] data, // .data - output reg vid_clk, // input.vid_clk - input wire [1:0] vid_datavalid, // .vid_datavalid - input wire [1:0] vid_h_sync, // .vid_h_sync - input wire [1:0] vid_v_sync, // .vid_v_sync - input wire [47:0] vid_data, // .vid_data - input wire underflow, // .underflow - input wire vid_mode_change, // .vid_mode_change - input wire [1:0] vid_std, // .vid_std - input wire [1:0] vid_f, // .vid_f - input wire [1:0] vid_h, // .vid_h - input wire [1:0] vid_v // .vid_v - ); - - reg r_de; - reg r_h_sync; - reg r_v_sync; - reg [23:0] r_data; - - always @(posedge clk) begin - vid_clk <= ~vid_clk; - - if(~vid_clk) begin - {r_de,de} <= vid_datavalid; - {r_h_sync, h_sync} <= vid_h_sync; - {r_v_sync, v_sync} <= vid_v_sync; - {r_data, data} <= vid_data; - end else begin - de <= r_de; - h_sync <= r_h_sync; - v_sync <= r_v_sync; - data <= r_data; - end - end - -endmodule diff --git a/sys/ip/out_mix_hw.tcl b/sys/ip/out_mix_hw.tcl deleted file mode 100644 index b388891..0000000 --- a/sys/ip/out_mix_hw.tcl +++ /dev/null @@ -1,97 +0,0 @@ -# TCL File Generated by Component Editor 17.0 -# Thu Jan 25 06:51:26 CST 2018 -# DO NOT MODIFY - - -# -# out_mix "Output Mixer" v1.0 -# Sorgelig 2018.01.25.06:51:26 -# -# - -# -# request TCL package from ACDS 16.1 -# -package require -exact qsys 16.1 - - -# -# module out_mix -# -set_module_property DESCRIPTION "" -set_module_property NAME out_mix -set_module_property VERSION 17.0 -set_module_property INTERNAL false -set_module_property OPAQUE_ADDRESS_MAP true -set_module_property AUTHOR Sorgelig -set_module_property DISPLAY_NAME "Output Mixer" -set_module_property INSTANTIATE_IN_SYSTEM_MODULE true -set_module_property EDITABLE true -set_module_property REPORT_TO_TALKBACK false -set_module_property ALLOW_GREYBOX_GENERATION false -set_module_property REPORT_HIERARCHY false - - -# -# file sets -# -add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" -set_fileset_property QUARTUS_SYNTH TOP_LEVEL out_mix -set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false -set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE true -add_fileset_file out_mix.v VERILOG PATH out_mix.v TOP_LEVEL_FILE - - -# -# parameters -# - - -# -# display items -# - - -# -# connection point Output -# -add_interface Output conduit end -set_interface_property Output associatedClock "" -set_interface_property Output associatedReset "" -set_interface_property Output ENABLED true -set_interface_property Output EXPORT_OF "" -set_interface_property Output PORT_NAME_MAP "" -set_interface_property Output CMSIS_SVD_VARIABLES "" -set_interface_property Output SVD_ADDRESS_GROUP "" - -add_interface_port Output clk clk Input 1 -add_interface_port Output de de Output 1 -add_interface_port Output h_sync h_sync Output 1 -add_interface_port Output v_sync v_sync Output 1 -add_interface_port Output data data Output 24 - - -# -# connection point input -# -add_interface input conduit end -set_interface_property input associatedClock "" -set_interface_property input associatedReset "" -set_interface_property input ENABLED true -set_interface_property input EXPORT_OF "" -set_interface_property input PORT_NAME_MAP "" -set_interface_property input CMSIS_SVD_VARIABLES "" -set_interface_property input SVD_ADDRESS_GROUP "" - -add_interface_port input vid_clk vid_clk Output 1 -add_interface_port input vid_datavalid vid_datavalid Input 2 -add_interface_port input vid_h_sync vid_h_sync Input 2 -add_interface_port input vid_v_sync vid_v_sync Input 2 -add_interface_port input vid_data vid_data Input 48 -add_interface_port input underflow underflow Input 1 -add_interface_port input vid_mode_change vid_mode_change Input 1 -add_interface_port input vid_std vid_std Input 2 -add_interface_port input vid_f vid_f Input 2 -add_interface_port input vid_h vid_h Input 2 -add_interface_port input vid_v vid_v Input 2 - diff --git a/sys/ip/reset_source.v b/sys/ip/reset_source.v deleted file mode 100644 index 1b81394..0000000 --- a/sys/ip/reset_source.v +++ /dev/null @@ -1,50 +0,0 @@ -// reset_source.v - -// This file was auto-generated as a prototype implementation of a module -// created in component editor. It ties off all outputs to ground and -// ignores all inputs. It needs to be edited to make it do something -// useful. -// -// This file will not be automatically regenerated. You should check it in -// to your version control system if you want to keep it. - -`timescale 1 ps / 1 ps -module reset_source -( - input wire clk, // clock.clk - input wire reset_hps, // reset_hps.reset - output wire reset_sys, // reset_sys.reset - output wire reset_cold, // reset_cold.reset - input wire cold_req, // reset_ctl.cold_req - output wire reset, // .reset - input wire reset_req, // .reset_req - input wire reset_vip, // .reset_vip - input wire warm_req, // .warm_req - output wire reset_warm // reset_warm.reset -); - -assign reset_cold = cold_req; -assign reset_warm = warm_req; - -wire reset_m = sys_reset | reset_hps | reset_req; -assign reset = reset_m; -assign reset_sys = reset_m | reset_vip; - -reg sys_reset = 1; -always @(posedge clk) begin - integer timeout = 0; - reg reset_lock = 0; - - reset_lock <= reset_lock | cold_req; - - if(timeout < 2000000) begin - sys_reset <= 1; - timeout <= timeout + 1; - reset_lock <= 0; - end - else begin - sys_reset <= reset_lock; - end -end - -endmodule diff --git a/sys/ip/reset_source_hw.tcl b/sys/ip/reset_source_hw.tcl deleted file mode 100644 index cba39f7..0000000 --- a/sys/ip/reset_source_hw.tcl +++ /dev/null @@ -1,152 +0,0 @@ -# TCL File Generated by Component Editor 17.0 -# Tue Feb 20 07:55:55 CST 2018 -# DO NOT MODIFY - - -# -# reset_source "reset_source" v17.0 -# Sorgelig 2018.02.20.07:55:55 -# -# - -# -# request TCL package from ACDS 16.1 -# -package require -exact qsys 16.1 - - -# -# module reset_source -# -set_module_property DESCRIPTION "" -set_module_property NAME reset_source -set_module_property VERSION 17.0 -set_module_property INTERNAL false -set_module_property OPAQUE_ADDRESS_MAP true -set_module_property AUTHOR Sorgelig -set_module_property DISPLAY_NAME reset_source -set_module_property INSTANTIATE_IN_SYSTEM_MODULE true -set_module_property EDITABLE true -set_module_property REPORT_TO_TALKBACK false -set_module_property ALLOW_GREYBOX_GENERATION false -set_module_property REPORT_HIERARCHY false - - -# -# file sets -# -add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" -set_fileset_property QUARTUS_SYNTH TOP_LEVEL reset_source -set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false -set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE true -add_fileset_file reset_source.v VERILOG PATH reset_source.v TOP_LEVEL_FILE - - -# -# parameters -# - - -# -# display items -# - - -# -# connection point clock -# -add_interface clock clock end -set_interface_property clock clockRate 0 -set_interface_property clock ENABLED true -set_interface_property clock EXPORT_OF "" -set_interface_property clock PORT_NAME_MAP "" -set_interface_property clock CMSIS_SVD_VARIABLES "" -set_interface_property clock SVD_ADDRESS_GROUP "" - -add_interface_port clock clk clk Input 1 - - -# -# connection point reset_hps -# -add_interface reset_hps reset end -set_interface_property reset_hps associatedClock "" -set_interface_property reset_hps synchronousEdges NONE -set_interface_property reset_hps ENABLED true -set_interface_property reset_hps EXPORT_OF "" -set_interface_property reset_hps PORT_NAME_MAP "" -set_interface_property reset_hps CMSIS_SVD_VARIABLES "" -set_interface_property reset_hps SVD_ADDRESS_GROUP "" - -add_interface_port reset_hps reset_hps reset Input 1 - - -# -# connection point reset_sys -# -add_interface reset_sys reset start -set_interface_property reset_sys associatedClock "" -set_interface_property reset_sys associatedDirectReset "" -set_interface_property reset_sys associatedResetSinks "" -set_interface_property reset_sys synchronousEdges NONE -set_interface_property reset_sys ENABLED true -set_interface_property reset_sys EXPORT_OF "" -set_interface_property reset_sys PORT_NAME_MAP "" -set_interface_property reset_sys CMSIS_SVD_VARIABLES "" -set_interface_property reset_sys SVD_ADDRESS_GROUP "" - -add_interface_port reset_sys reset_sys reset Output 1 - - -# -# connection point reset_ctl -# -add_interface reset_ctl conduit end -set_interface_property reset_ctl associatedClock "" -set_interface_property reset_ctl associatedReset "" -set_interface_property reset_ctl ENABLED true -set_interface_property reset_ctl EXPORT_OF "" -set_interface_property reset_ctl PORT_NAME_MAP "" -set_interface_property reset_ctl CMSIS_SVD_VARIABLES "" -set_interface_property reset_ctl SVD_ADDRESS_GROUP "" - -add_interface_port reset_ctl cold_req cold_req Input 1 -add_interface_port reset_ctl reset reset Output 1 -add_interface_port reset_ctl reset_req reset_req Input 1 -add_interface_port reset_ctl warm_req warm_req Input 1 -add_interface_port reset_ctl reset_vip reset_vip Input 1 - - -# -# connection point reset_warm -# -add_interface reset_warm reset start -set_interface_property reset_warm associatedClock "" -set_interface_property reset_warm associatedDirectReset "" -set_interface_property reset_warm associatedResetSinks "" -set_interface_property reset_warm synchronousEdges NONE -set_interface_property reset_warm ENABLED true -set_interface_property reset_warm EXPORT_OF "" -set_interface_property reset_warm PORT_NAME_MAP "" -set_interface_property reset_warm CMSIS_SVD_VARIABLES "" -set_interface_property reset_warm SVD_ADDRESS_GROUP "" - -add_interface_port reset_warm reset_warm reset Output 1 - - -# -# connection point reset_cold -# -add_interface reset_cold reset start -set_interface_property reset_cold associatedClock "" -set_interface_property reset_cold associatedDirectReset "" -set_interface_property reset_cold associatedResetSinks "" -set_interface_property reset_cold synchronousEdges NONE -set_interface_property reset_cold ENABLED true -set_interface_property reset_cold EXPORT_OF "" -set_interface_property reset_cold PORT_NAME_MAP "" -set_interface_property reset_cold CMSIS_SVD_VARIABLES "" -set_interface_property reset_cold SVD_ADDRESS_GROUP "" - -add_interface_port reset_cold reset_cold reset Output 1 - diff --git a/sys/lpf48k.sv b/sys/lpf48k.sv deleted file mode 100644 index 2a32981..0000000 --- a/sys/lpf48k.sv +++ /dev/null @@ -1,100 +0,0 @@ -// low pass filter -// Revision 1.00 -// -// Copyright (c) 2008 Takayuki Hara. -// All rights reserved. -// -// Redistribution and use of this source code or any derivative works, are -// permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// 2. 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. -// 3. Redistributions may not be sold, nor may they be used in a commercial -// product or activity 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. -// -// -// LPF (cut off 48kHz at 3.58MHz) - -module lpf48k #(parameter MSB = 15) -( - input RESET, - input CLK, - input CE, - input ENABLE, - - input [MSB:0] IDATA, - output [MSB:0] ODATA -); - -wire [7:0] LPF_TAP_DATA[0:71] = -'{ - 8'h51, 8'h07, 8'h07, 8'h08, 8'h08, 8'h08, 8'h09, 8'h09, - 8'h09, 8'h0A, 8'h0A, 8'h0A, 8'h0A, 8'h0B, 8'h0B, 8'h0B, - 8'h0B, 8'h0C, 8'h0C, 8'h0C, 8'h0C, 8'h0D, 8'h0D, 8'h0D, - 8'h0D, 8'h0D, 8'h0D, 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, - 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, - 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0D, 8'h0D, 8'h0D, - 8'h0D, 8'h0D, 8'h0D, 8'h0C, 8'h0C, 8'h0C, 8'h0C, 8'h0B, - 8'h0B, 8'h0B, 8'h0B, 8'h0A, 8'h0A, 8'h0A, 8'h0A, 8'h09, - 8'h09, 8'h09, 8'h08, 8'h08, 8'h08, 8'h07, 8'h07, 8'h51 -}; - -reg [7:0] FF_ADDR = 0; -reg [MSB+10:0] FF_INTEG = 0; -wire [MSB+8:0] W_DATA; -wire W_ADDR_END; - -assign W_ADDR_END = ((FF_ADDR == 71)); - -reg [MSB:0] OUT; - -assign ODATA = ENABLE ? OUT : IDATA; - -always @(posedge RESET or posedge CLK) begin - if (RESET) FF_ADDR <= 0; - else - begin - if (CE) begin - if (W_ADDR_END) FF_ADDR <= 0; - else FF_ADDR <= FF_ADDR + 1'd1; - end - end -end - -assign W_DATA = LPF_TAP_DATA[FF_ADDR] * IDATA; - -always @(posedge RESET or posedge CLK) begin - if (RESET) FF_INTEG <= 0; - else - begin - if (CE) begin - if (W_ADDR_END) FF_INTEG <= 0; - else FF_INTEG <= FF_INTEG + W_DATA; - end - end -end - -always @(posedge RESET or posedge CLK) begin - if (RESET) OUT <= 0; - else - begin - if (CE && W_ADDR_END) OUT <= FF_INTEG[MSB + 10:10]; - end -end - -endmodule diff --git a/sys/ltc2308.sv b/sys/ltc2308.sv new file mode 100644 index 0000000..33134fd --- /dev/null +++ b/sys/ltc2308.sv @@ -0,0 +1,162 @@ +//============================================================================ +// +// LTC2308 controller +// Copyright (C) 2019 Sorgelig +// +// +// 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., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +//============================================================================ + + +// NUM_CH 1..8 +// Sampling rate = ADC_RATE/NUM_CH +// ADC_RATE max is ~500KHz +// CLK_RATE max is ~80MHz +module ltc2308 #(parameter NUM_CH = 2, ADC_RATE = 96000, CLK_RATE = 50000000) +( + input reset, + input clk, + + inout [3:0] ADC_BUS, + + output reg dout_sync, // toggle with every ADC round + output reg [(NUM_CH*12)-1:0] dout // 12 bits per channel (unsigned) +); + +localparam TCONV = CLK_RATE/625000; + +reg sck; +wire sdo = cfg[5]; + +assign ADC_BUS[3] = sck; +wire sdi = ADC_BUS[2]; +assign ADC_BUS[1] = sdo; +assign ADC_BUS[0] = convst; + +reg convst; +reg [5:0] cfg; + +reg [31:0] sum; +wire [31:0] next_sum = sum + ADC_RATE; + +reg [2:0] pin; +wire [2:0] next_pin = (pin == (NUM_CH-1)) ? 3'd0 : (pin + 1'd1); + +always @(posedge clk) begin + reg [7:0] tconv; + reg [3:0] bitcnt; + reg [10:0] adcin; + + convst <= 0; + + if(reset) begin + sum <= 0; + tconv <= 0; + bitcnt <= 0; + sck <= 0; + cfg <= 0; + dout <= 0; + pin <= NUM_CH[2:0]-1'd1; + end + else begin + sum <= next_sum; + if(next_sum >= CLK_RATE) begin + sum <= next_sum - CLK_RATE; + tconv <= TCONV[7:0]; + convst <= 1; + bitcnt <= 12; + cfg <= {1'b1, next_pin[0], next_pin[2:1], 1'b1, 1'b0}; + if(!next_pin) dout_sync <= ~dout_sync; + end + + if(tconv) tconv <= tconv - 1'd1; + else if(bitcnt) begin + sck <= ~sck; + + if(sck) cfg <= cfg<<1; + else begin + adcin <= {adcin[9:0],sdi}; + bitcnt <= bitcnt - 1'd1; + if(bitcnt == 1) begin + dout[pin*12 +:12] <= {adcin,sdi}; + pin <= next_pin; + end + end + end + else sck <= 0; + end +end + +endmodule + +module ltc2308_tape #(parameter HIST_LOW = 16, HIST_HIGH = 64, ADC_RATE = 48000, CLK_RATE = 50000000) +( + input reset, + input clk, + + inout [3:0] ADC_BUS, + output reg dout, + output active +); + +wire [11:0] adc_data; +wire adc_sync; +ltc2308 #(1, ADC_RATE, CLK_RATE) adc +( + .reset(reset), + .clk(clk), + + .ADC_BUS(ADC_BUS), + .dout(adc_data), + .dout_sync(adc_sync) +); + +always @(posedge clk) begin + reg [13:0] data1,data2,data3,data4, sum; + reg adc_sync_d; + + adc_sync_d<=adc_sync; + if(adc_sync_d ^ adc_sync) begin + data1 <= data2; + data2 <= data3; + data3 <= data4; + data4 <= adc_data; + + sum <= data1+data2+data3+data4; + + if(sum[13:2]HIST_HIGH) dout <= 1; + end +end + +assign active = |act; + +reg [1:0] act; +always @(posedge clk) begin + reg [31:0] onesec; + reg old_dout; + + onesec <= onesec + 1; + if(onesec>CLK_RATE) begin + onesec <= 0; + if(act) act <= act - 1'd1; + end + + old_dout <= dout; + if(old_dout ^ dout) act <= 2; +end + +endmodule diff --git a/sys/mcp23009.sv b/sys/mcp23009.sv new file mode 100644 index 0000000..40cbf5e --- /dev/null +++ b/sys/mcp23009.sv @@ -0,0 +1,113 @@ +// +// MCP23009 +// (C) 2019 Alexey Melnikov +// +module mcp23009 +( + input clk, + + output reg [2:0] btn, + input [2:0] led, + output reg sd_cd, + + output scl, + inout sda +); + + +reg start = 0; +wire ready; +wire error; +reg rw; +wire [7:0] dout; +reg [15:0] din; + +i2c #(50_000_000, 500_000) i2c +( + .CLK(clk), + .START(start), + .READ(rw), + .I2C_ADDR('h20), + .I2C_WLEN(1), + .I2C_WDATA1(din[15:8]), + .I2C_WDATA2(din[7:0]), + .I2C_RDATA(dout), + .END(ready), + .ACK(error), + .I2C_SCL(scl), + .I2C_SDA(sda) +); + +always@(posedge clk) begin + reg [3:0] idx = 0; + reg [1:0] state = 0; + reg [15:0] timeout = 0; + + if(~&timeout) begin + timeout <= timeout + 1'd1; + start <= 0; + state <= 0; + idx <= 0; + btn <= 0; + rw <= 0; + sd_cd <= 1; + end + else begin + if(~&init_data[idx]) begin + case(state) + 0: begin + start <= 1; + state <= 1; + din <= init_data[idx]; + end + 1: if(~ready) state <= 2; + 2: begin + start <= 0; + if(ready) begin + state <= 0; + if(!error) idx <= idx + 1'd1; + end + end + endcase + end + else begin + case(state) + 0: begin + start <= 1; + state <= 1; + din <= {8'h09,5'b00000,led}; + end + 1: if(~ready) state <= 2; + 2: begin + start <= 0; + if(ready) begin + state <= 0; + rw <= 0; + if(!error) begin + if(rw) {sd_cd, btn} <= {dout[7], dout[5:3]}; + rw <= ~rw; + end + end + end + endcase + end + end +end + +wire [15:0] init_data[12] = +'{ + 16'h00F8, + 16'h0138, + 16'h0200, + 16'h0300, + 16'h0400, + 16'h0524, + 16'h06FF, + 16'h0700, + 16'h0800, + 16'h0900, + 16'h0A00, + 16'hFFFF +}; + +endmodule diff --git a/sys/osd.v b/sys/osd.v index f6e8915..a4fbdde 100644 --- a/sys/osd.v +++ b/sys/osd.v @@ -4,40 +4,58 @@ module osd ( input clk_sys, - input io_osd, input io_strobe, input [15:0] io_din, input clk_video, input [23:0] din, - output [23:0] dout, input de_in, - output reg de_out + input vs_in, + input hs_in, + output [23:0] dout, + output reg de_out, + output reg vs_out, + output reg hs_out, + + output reg osd_status ); parameter OSD_COLOR = 3'd4; -parameter OSD_X_OFFSET = 12'd0; -parameter OSD_Y_OFFSET = 12'd0; localparam OSD_WIDTH = 12'd256; localparam OSD_HEIGHT = 12'd64; -reg osd_enable; -(* ramstyle = "no_rw_check" *) reg [7:0] osd_buffer[4096]; +`ifdef OSD_HEADER +localparam OSD_HDR = 12'd24; +`else +localparam OSD_HDR = 12'd0; +`endif + +reg osd_enable; +(* ramstyle="no_rw_check" *) reg [7:0] osd_buffer[OSD_HDR ? (4096+1024) : 4096]; -reg highres = 0; reg info = 0; reg [8:0] infoh; reg [8:0] infow; -reg [11:0] infox; +reg [21:0] infox; reg [21:0] infoy; +reg [21:0] osd_h; +reg [21:0] osd_t; +reg [21:0] osd_w; + +reg [1:0] rot = 0; always@(posedge clk_sys) begin - reg [11:0] bcnt; + reg [12:0] bcnt; reg [7:0] cmd; reg has_cmd; reg old_strobe; + reg highres = 0; + + osd_t <= rot[0] ? OSD_WIDTH : (OSD_HEIGHT<<1); + osd_h <= rot[0] ? (info ? infow : OSD_WIDTH) : info ? infoh : (OSD_HEIGHT<> 9) > 1) ? (((cnt+1'b1) >> 9) - 1) : 0; + pixsz <= (((cnt+1'b1) >> (9-rot[0])) > 1) ? (((cnt+1'b1) >> (9-rot[0])) - 1'd1) : 22'd0; pixcnt <= 0; end end -reg [23:0] h_cnt; -reg [21:0] v_cnt; -reg [21:0] dsp_width; -reg [21:0] dsp_height; -reg [7:0] osd_byte; -reg [21:0] osd_vcnt; -reg [21:0] fheight; +reg [2:0] osd_de; +reg osd_pixel; +reg [21:0] v_cnt; +reg v_cnt_h, v_cnt_1, v_cnt_2, v_cnt_3, v_cnt_4; +reg [21:0] v_osd_start_h, v_osd_start_1, v_osd_start_2, v_osd_start_3, v_osd_start_4, v_osd_start_5; +reg [21:0] v_info_start_h, v_info_start_1, v_info_start_2, v_info_start_3, v_info_start_4, v_info_start_5; -reg [21:0] finfoy; -wire [21:0] hrheight = info ? infoh : (OSD_HEIGHT<>1))>>1; + v_osd_start_1 <= (v_cnt-osd_h_hdr)>>1; + v_osd_start_2 <= (v_cnt-(osd_h_hdr<<1))>>1; + v_osd_start_3 <= (v_cnt-(osd_h_hdr + (osd_h_hdr<<1)))>>1; + v_osd_start_4 <= (v_cnt-(osd_h_hdr<<2))>>1; + v_osd_start_5 <= (v_cnt-(osd_h_hdr + (osd_h_hdr<<2)))>>1; + + v_info_start_h <= rot[0] ? infox : infoy; + v_info_start_1 <= rot[0] ? infox : infoy; + v_info_start_2 <= rot[0] ? (infox<<1) : (infoy<<1); + v_info_start_3 <= rot[0] ? (infox + (infox << 1)) : (infoy + (infoy << 1)); + v_info_start_4 <= rot[0] ? (infox << 2) : (infoy << 2); + v_info_start_5 <= rot[0] ? (infox + (infox << 2)) : (infoy + (infoy << 2)); +end always @(posedge clk_video) begin - reg deD; - reg [1:0] osd_div; - reg [1:0] multiscan; - + reg deD; + reg [2:0] osd_div; + reg [2:0] multiscan; + reg [7:0] osd_byte; + reg [23:0] h_cnt; + reg [21:0] dsp_width; + reg [21:0] osd_vcnt; + reg [21:0] h_osd_start; + reg [21:0] v_osd_start; + reg [21:0] osd_hcnt; + reg [21:0] osd_hcnt2; + reg osd_de1,osd_de2; + reg [1:0] osd_en; + reg f1; + reg half; + if(ce_pix) begin deD <= de_in; if(~&h_cnt) h_cnt <= h_cnt + 1'd1; + if(~&osd_hcnt) osd_hcnt <= osd_hcnt + 1'd1; + if(~&osd_hcnt2) osd_hcnt2 <= osd_hcnt2 + 1'd1; + + if (h_cnt == h_osd_start) begin + osd_de[0] <= osd_en[1] && osd_h && ( + osd_vcnt[11] ? (osd_vcnt[7] && (osd_vcnt[6:0] >= 4) && (osd_vcnt[6:0] < 19)) : + (info && (rot == 3)) ? !osd_vcnt[21:8] : + (osd_vcnt < osd_h) + ); + osd_hcnt <= 0; + osd_hcnt2 <= 0; + if(info && rot == 1) osd_hcnt2 <= 22'd128-infoh; + end + if (osd_hcnt+1 == osd_w) osd_de[0] <= 0; + // falling edge of de if(!de_in && deD) dsp_width <= h_cnt[21:0]; // rising edge of de if(de_in && !deD) begin + h_cnt <= 0; v_cnt <= v_cnt + 1'd1; - if(h_cnt > {dsp_width, 2'b00}) begin - v_cnt <= 0; - dsp_height <= v_cnt; + h_osd_start <= info ? (rot[0] ? infoy : infox) : (((dsp_width - osd_w)>>1) - 2'd2); - if(osd_enable) begin - if(v_cnt<320) begin + if(h_cnt > {dsp_width, 2'b00}) begin + v_cnt <= 1; + f1 <= ~f1; // skip every other frame for interlace compatibility. + if(~f1) begin + + osd_en <= (osd_en << 1) | osd_enable; + if(~osd_enable) osd_en <= 0; + + half <= 0; + if(v_cnt_h) begin multiscan <= 0; - fheight <= hrheight; - finfoy <= infoy; + v_osd_start <= info ? v_info_start_h : v_osd_start_h; + half <= 1; end - else if(v_cnt<640) begin + else if(v_cnt_1 | (rot[0] & v_cnt_2)) begin + multiscan <= 0; + v_osd_start <= info ? v_info_start_1 : v_osd_start_1; + end + else if(rot[0] ? v_cnt_3 : v_cnt_2) begin multiscan <= 1; - fheight <= hrheight << 1; - finfoy <= infoy << 1; + v_osd_start <= info ? v_info_start_2 : v_osd_start_2; end - else if(v_cnt<960) begin + else if(rot[0] ? v_cnt_4 : v_cnt_3) begin multiscan <= 2; - fheight <= hrheight + (hrheight<<1); - finfoy <= infoy + (infoy << 1); + v_osd_start <= info ? v_info_start_3 : v_osd_start_3; + end + else if(rot[0] | v_cnt_4) begin + multiscan <= 3; + v_osd_start <= info ? v_info_start_4 : v_osd_start_4; end else begin - multiscan <= 3; - fheight <= hrheight << 2; - finfoy <= infoy << 2; + multiscan <= 4; + v_osd_start <= info ? v_info_start_5 : v_osd_start_5; end end - else begin - fheight <= 0; - end end - h_cnt <= 0; - + osd_div <= osd_div + 1'd1; if(osd_div == multiscan) begin osd_div <= 0; - osd_vcnt <= osd_vcnt + 1'd1; + if(~osd_vcnt[10]) osd_vcnt <= osd_vcnt + 1'd1 + half; + if(osd_vcnt == 'b100010011111 && ~info) osd_vcnt <= 0; + end + if(v_osd_start == v_cnt) begin + {osd_div,osd_vcnt} <= 0; + if(info && rot == 3) osd_vcnt <= 22'd256-infow; + else if(OSD_HDR && !rot) osd_vcnt <= {~info, 3'b000, ~info, 7'b0000000}; end - if(v_osd_start == (v_cnt+1'b1)) {osd_div, osd_vcnt} <= 0; end - - osd_byte <= osd_buffer[{osd_vcnt[6:3], osd_hcnt[7:0]}]; + + osd_byte <= osd_buffer[rot[0] ? ({osd_hcnt2[6:3], osd_vcnt[7:0]} ^ { {4{~rot[1]}}, {8{rot[1]}} }) : {osd_vcnt[7:3], osd_hcnt[7:0]}]; + osd_pixel <= osd_byte[rot[0] ? ((osd_hcnt2[2:0]-1'd1) ^ {3{~rot[1]}}) : osd_vcnt[2:0]]; + osd_de[2:1] <= osd_de[1:0]; end end -// area in which OSD is being displayed -wire [21:0] h_osd_start = info ? infox : ((dsp_width - OSD_WIDTH)>>1) + OSD_X_OFFSET; -wire [21:0] h_osd_end = info ? (h_osd_start + infow) : (h_osd_start + OSD_WIDTH); -wire [21:0] v_osd_start = info ? finfoy : ((dsp_height- fheight)>>1) + OSD_Y_OFFSET; -wire [21:0] v_osd_end = v_osd_start + fheight; - -wire [21:0] osd_hcnt = h_cnt[21:0] - h_osd_start + 1'd1; - -wire osd_de = osd_enable && fheight && - (h_cnt >= h_osd_start) && (h_cnt < h_osd_end) && - (v_cnt >= v_osd_start) && (v_cnt < v_osd_end); - -wire osd_pixel = osd_byte[osd_vcnt[2:0]]; - reg [23:0] rdout; assign dout = rdout; - + always @(posedge clk_video) begin - rdout <= !osd_de ? din : {{osd_pixel, osd_pixel, OSD_COLOR[2], din[23:19]}, - {osd_pixel, osd_pixel, OSD_COLOR[1], din[15:11]}, - {osd_pixel, osd_pixel, OSD_COLOR[0], din[7:3]}}; - de_out <= de_in; + reg [23:0] ordout1, nrdout1, rdout2, rdout3; + reg de1,de2,de3; + reg osd_mux; + reg vs1,vs2,vs3; + reg hs1,hs2,hs3; + + nrdout1 <= din; + ordout1 <= {{osd_pixel, osd_pixel, OSD_COLOR[2], din[23:19]},// 23:16 + {osd_pixel, osd_pixel, OSD_COLOR[1], din[15:11]},// 15:8 + {osd_pixel, osd_pixel, OSD_COLOR[0], din[7:3]}}; // 7:0 + + osd_mux <= ~osd_de[2]; + rdout2 <= osd_mux ? nrdout1 : ordout1; + rdout3 <= rdout2; + + de1 <= de_in; de2 <= de1; de3 <= de2; + hs1 <= hs_in; hs2 <= hs1; hs3 <= hs2; + vs1 <= vs_in; vs2 <= vs1; vs3 <= vs2; + + rdout <= rdout3; + de_out <= de3; + hs_out <= hs3; + vs_out <= vs3; end endmodule diff --git a/sys/pattern_vg.v b/sys/pattern_vg.v deleted file mode 100644 index 1392e1b..0000000 --- a/sys/pattern_vg.v +++ /dev/null @@ -1,120 +0,0 @@ -module pattern_vg -#( - parameter B=8, // number of bits per channel - X_BITS=13, - Y_BITS=13, - FRACTIONAL_BITS = 12 -) - -( - input reset, clk_in, - input wire [X_BITS-1:0] x, - input wire [Y_BITS-1:0] y, - input wire vn_in, hn_in, dn_in, - input wire [B-1:0] r_in, g_in, b_in, - output reg vn_out, hn_out, den_out, - output reg [B-1:0] r_out, g_out, b_out, - input wire [X_BITS-1:0] total_active_pix, - input wire [Y_BITS-1:0] total_active_lines, - input wire [7:0] pattern, - input wire [B+FRACTIONAL_BITS-1:0] ramp_step -); - -reg [B+FRACTIONAL_BITS-1:0] ramp_values; // 12-bit fractional end for ramp values - - -//wire bar_0 = y<90; -wire bar_1 = y>=90 & y<180; -wire bar_2 = y>=180 & y<270; -wire bar_3 = y>=270 & y<360; -wire bar_4 = y>=360 & y<450; -wire bar_5 = y>=450 & y<540; -wire bar_6 = y>=540 & y<630; -wire bar_7 = y>=630 & y<720; - - -wire red_enable = bar_1 | bar_3 | bar_5 | bar_7; -wire green_enable = bar_2 | bar_3 | bar_6 | bar_7; -wire blue_enable = bar_4 | bar_5 | bar_6 | bar_7; - -always @(posedge clk_in) - begin - vn_out <= vn_in; - hn_out <= hn_in; - den_out <= dn_in; - if (reset) - ramp_values <= 0; - else if (pattern == 8'b0) // no pattern - begin - r_out <= r_in; - g_out <= g_in; - b_out <= b_in; - end - else if (pattern == 8'b1) // border - begin - if (dn_in && ((y == 12'b0) || (x == 12'b0) || (x == total_active_pix - 1) || (y == total_active_lines - 1))) - begin - r_out <= 8'hFF; - g_out <= 8'hFF; - b_out <= 8'hFF; - end - else // Double-border (OzOnE)... - if (dn_in && ((y == 12'b0+20) || (x == 12'b0+20) || (x == total_active_pix - 1 - 20) || (y == total_active_lines - 1 - 20))) - begin - r_out <= 8'hD0; - g_out <= 8'hB0; - b_out <= 8'hB0; - end - else - begin - r_out <= r_in; - g_out <= g_in; - b_out <= b_in; - end - end - else if (pattern == 8'd2) // moireX - begin - if ((dn_in) && x[0] == 1'b1) - begin - r_out <= 8'hFF; - g_out <= 8'hFF; - b_out <= 8'hFF; - end - else - begin - r_out <= 8'b0; - g_out <= 8'b0; - b_out <= 8'b0; - end - end - else if (pattern == 8'd3) // moireY - begin - if ((dn_in) && y[0] == 1'b1) - begin - r_out <= 8'hFF; - g_out <= 8'hFF; - b_out <= 8'hFF; - end - else - begin - r_out <= 8'b0; - g_out <= 8'b0; - b_out <= 8'b0; - end - end - else if (pattern == 8'd4) // Simple RAMP - begin - r_out <= (red_enable) ? ramp_values[B+FRACTIONAL_BITS-1:FRACTIONAL_BITS] : 8'h00; - g_out <= (green_enable) ? ramp_values[B+FRACTIONAL_BITS-1:FRACTIONAL_BITS] : 8'h00; - b_out <= (blue_enable) ? ramp_values[B+FRACTIONAL_BITS-1:FRACTIONAL_BITS] : 8'h00; - - if ((x == total_active_pix - 1) && (dn_in)) - ramp_values <= 0; - else if ((x == 0) && (dn_in)) - ramp_values <= ramp_step; - else if (dn_in) - ramp_values <= ramp_values + ramp_step; - end -end - -endmodule diff --git a/sys/pll.13.qip b/sys/pll.13.qip new file mode 100644 index 0000000..a6a1dca --- /dev/null +++ b/sys/pll.13.qip @@ -0,0 +1,17 @@ +set_global_assignment -entity "pll" -library "pll" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll" -library "pll" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll" -library "pll" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "pll" -name MISC_FILE [file join $::quartus(qip_path) "pll.cmp"] +set_global_assignment -name SYNTHESIS_ONLY_QIP ON + +set_global_assignment -library "pll" -name VERILOG_FILE rtl/pll.v +set_global_assignment -library "pll" -name VERILOG_FILE rtl/pll/pll_0002.v + +set_instance_assignment -name PLL_COMPENSATION_MODE DIRECT -to "*pll_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_CHANNEL_SPACING "0.0 KHz" -to "*pll_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_AUTO_RESET ON -to "*pll_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*pll_0002*|altera_pll:altera_pll_i*|*" + +set_global_assignment -entity "pll_0002" -library "pll" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_audio.13.qip b/sys/pll_audio.13.qip new file mode 100644 index 0000000..e987931 --- /dev/null +++ b/sys/pll_audio.13.qip @@ -0,0 +1,17 @@ +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "pll_audio" -name MISC_FILE [file join $::quartus(qip_path) "pll_audio.cmp"] +set_global_assignment -name SYNTHESIS_ONLY_QIP ON + +set_global_assignment -library "pll_audio" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_audio.v"] +set_global_assignment -library "pll_audio" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_audio/pll_audio_0002.v"] + +set_instance_assignment -name PLL_COMPENSATION_MODE DIRECT -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_CHANNEL_SPACING "0.0 KHz" -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_AUTO_RESET ON -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" + +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_audio.qip b/sys/pll_audio.qip new file mode 100644 index 0000000..abb013b --- /dev/null +++ b/sys/pll_audio.qip @@ -0,0 +1,337 @@ +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_VERSION "17.0" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "pll_audio" -name MISC_FILE [file join $::quartus(qip_path) "pll_audio.cmp"] +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TARGETED_DEVICE_FAMILY "Cyclone V" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_QSYS_MODE "UNKNOWN" +set_global_assignment -name SYNTHESIS_ONLY_QIP ON +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_NAME "cGxsX2F1ZGlv" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTA==" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_VERSION "MTcuMA==" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIChBTFRFUkFfUExMKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_NAME "cGxsX2F1ZGlvXzAwMDI=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_VERSION "MTcuMA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIChBTFRFUkFfUExMKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZGVidWdfcHJpbnRfb3V0cHV0::ZmFsc2U=::ZGVidWdfcHJpbnRfb3V0cHV0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZGVidWdfdXNlX3JiY190YWZfbWV0aG9k::ZmFsc2U=::ZGVidWdfdXNlX3JiY190YWZfbWV0aG9k" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZGV2aWNl::NUNFQkEyRjE3QTc=::ZGV2aWNl" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9tb2Rl::RnJhY3Rpb25hbC1OIFBMTA==::UExMIE1vZGU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZnJhY3Rpb25hbF92Y29fbXVsdGlwbGllcg==::dHJ1ZQ==::ZnJhY3Rpb25hbF92Y29fbXVsdGlwbGllcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3JlZmVyZW5jZV9jbG9ja19mcmVxdWVuY3k=::NTAuMA==::UmVmZXJlbmNlIENsb2NrIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cmVmZXJlbmNlX2Nsb2NrX2ZyZXF1ZW5jeQ==::NTAuMCBNSHo=::cmVmZXJlbmNlX2Nsb2NrX2ZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2NoYW5uZWxfc3BhY2luZw==::MC4w::Q2hhbm5lbCBTcGFjaW5n" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX29wZXJhdGlvbl9tb2Rl::ZGlyZWN0::T3BlcmF0aW9uIE1vZGU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2ZlZWRiYWNrX2Nsb2Nr::R2xvYmFsIENsb2Nr::RmVlZGJhY2sgQ2xvY2s=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWN0aW9uYWxfY291dA==::MzI=::RnJhY3Rpb25hbCBjYXJyeSBvdXQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RzbV9vdXRfc2Vs::MXN0X29yZGVy::RFNNIE9yZGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3BlcmF0aW9uX21vZGU=::ZGlyZWN0::b3BlcmF0aW9uX21vZGU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3VzZV9sb2NrZWQ=::ZmFsc2U=::RW5hYmxlIGxvY2tlZCBvdXRwdXQgcG9ydA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX2Fkdl9wYXJhbXM=::ZmFsc2U=::RW5hYmxlIHBoeXNpY2FsIG91dHB1dCBjbG9jayBwYXJhbWV0ZXJz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX251bWJlcl9vZl9jbG9ja3M=::MQ==::TnVtYmVyIE9mIENsb2Nrcw==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "bnVtYmVyX29mX2Nsb2Nrcw==::MQ==::bnVtYmVyX29mX2Nsb2Nrcw==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX211bHRpcGx5X2ZhY3Rvcg==::MQ==::TXVsdGlwbHkgRmFjdG9yIChNLUNvdW50ZXIp" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWNfbXVsdGlwbHlfZmFjdG9y::MQ==::RnJhY3Rpb25hbCBNdWx0aXBseSBGYWN0b3IgKEsp" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3Jfbg==::MQ==::RGl2aWRlIEZhY3RvciAoTi1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjA=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kw::MjQuNTc2::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzA=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iw::OA==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjA=::MTUyODMyMTE2Mw==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMA==::MTc=::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzA=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDA=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUw::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kx::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Ix::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUx::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjI=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3ky::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzI=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iy::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjI=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMg==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Mg==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMg==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Mg==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzI=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDI=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUy::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjM=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kz::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzM=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iz::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjM=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMw==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Mw==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMw==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Mw==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzM=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDM=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUz::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjQ=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k0::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzQ=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I0::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjQ=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNA==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5NA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0NA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzQ=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDQ=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU0::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjU=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k1::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzU=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I1::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjU=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5NQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0NQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzU=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDU=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU1::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjY=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k2::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzY=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I2::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjY=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNg==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Ng==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNg==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Ng==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzY=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDY=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU2::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjc=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k3::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzc=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I3::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjc=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNw==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Nw==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNw==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Nw==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzc=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDc=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU3::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjg=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k4::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzg=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I4::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjg=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yOA==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5OA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzOA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0OA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzg=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDg=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU4::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjk=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k5::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzk=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I5::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjk=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yOQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5OQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzOQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0OQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzk=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDk=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU5::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEw::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMA==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEw::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMA==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEw::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTA=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTA=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTA=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTA=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEw::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEw::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMA==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEx::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMQ==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEx::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMQ==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEx::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTE=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTE=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTE=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTE=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEx::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEx::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMQ==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEy::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMg==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEy::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMg==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEy::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTI=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTI=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTI=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTI=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEy::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEy::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMg==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEz::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMw==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEz::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMw==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEz::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTM=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTM=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTM=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTM=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEz::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEz::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMw==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE0::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNA==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE0::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNA==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE0::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTQ=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTQ=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTQ=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTQ=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE0::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE0::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNA==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE1::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNQ==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE1::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNQ==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE1::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTU=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTU=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTU=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTU=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE1::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE1::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNQ==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE2::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNg==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE2::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNg==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE2::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTY=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTY=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTY=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTY=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE2::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE2::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNg==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE3::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNw==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE3::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNw==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE3::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTc=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTc=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTc=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTc=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE3::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE3::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNw==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=::MjQuNTc2MDAwIE1Ieg==::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQw::MCBwcw==::cGhhc2Vfc2hpZnQw" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTA=::NTA=::ZHV0eV9jeWNsZTA=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQx::MCBwcw==::cGhhc2Vfc2hpZnQx" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE=::NTA=::ZHV0eV9jeWNsZTE=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQy::MCBwcw==::cGhhc2Vfc2hpZnQy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTI=::NTA=::ZHV0eV9jeWNsZTI=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTM=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQz::MCBwcw==::cGhhc2Vfc2hpZnQz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTM=::NTA=::ZHV0eV9jeWNsZTM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTQ=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ0::MCBwcw==::cGhhc2Vfc2hpZnQ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTQ=::NTA=::ZHV0eV9jeWNsZTQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTU=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ1::MCBwcw==::cGhhc2Vfc2hpZnQ1" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTU=::NTA=::ZHV0eV9jeWNsZTU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTY=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTY=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ2::MCBwcw==::cGhhc2Vfc2hpZnQ2" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTY=::NTA=::ZHV0eV9jeWNsZTY=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTc=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTc=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ3::MCBwcw==::cGhhc2Vfc2hpZnQ3" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTc=::NTA=::ZHV0eV9jeWNsZTc=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTg=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTg=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ4::MCBwcw==::cGhhc2Vfc2hpZnQ4" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTg=::NTA=::ZHV0eV9jeWNsZTg=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTk=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTk=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ5::MCBwcw==::cGhhc2Vfc2hpZnQ5" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTk=::NTA=::ZHV0eV9jeWNsZTk=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEw::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEw" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMA==::MCBwcw==::cGhhc2Vfc2hpZnQxMA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEw::NTA=::ZHV0eV9jeWNsZTEw" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEx::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEx" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMQ==::MCBwcw==::cGhhc2Vfc2hpZnQxMQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEx::NTA=::ZHV0eV9jeWNsZTEx" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEy::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMg==::MCBwcw==::cGhhc2Vfc2hpZnQxMg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEy::NTA=::ZHV0eV9jeWNsZTEy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEz::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMw==::MCBwcw==::cGhhc2Vfc2hpZnQxMw==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEz::NTA=::ZHV0eV9jeWNsZTEz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE0::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNA==::MCBwcw==::cGhhc2Vfc2hpZnQxNA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE0::NTA=::ZHV0eV9jeWNsZTE0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE1::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE1" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNQ==::MCBwcw==::cGhhc2Vfc2hpZnQxNQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE1::NTA=::ZHV0eV9jeWNsZTE1" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE2::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE2" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNg==::MCBwcw==::cGhhc2Vfc2hpZnQxNg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE2::NTA=::ZHV0eV9jeWNsZTE2" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE3::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE3" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNw==::MCBwcw==::cGhhc2Vfc2hpZnQxNw==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE3::NTA=::ZHV0eV9jeWNsZTE3" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9hdXRvX3Jlc2V0::T24=::UExMIEF1dG8gUmVzZXQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9iYW5kd2lkdGhfcHJlc2V0::QXV0bw==::UExMIEJhbmR3aWR0aCBQcmVzZXQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX3JlY29uZg==::ZmFsc2U=::RW5hYmxlIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIFBMTA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX2Rwc19wb3J0cw==::ZmFsc2U=::RW5hYmxlIGFjY2VzcyB0byBkeW5hbWljIHBoYXNlIHNoaWZ0IHBvcnRz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX3Bob3V0X3BvcnRz::ZmFsc2U=::RW5hYmxlIGFjY2VzcyB0byBQTEwgRFBBIG91dHB1dCBwb3J0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGxsX3R5cGU=::R2VuZXJhbA==::UExMIFRZUEU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGxsX3N1YnR5cGU=::R2VuZXJhbA==::UExMIFNVQlRZUEU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl9saXN0::TS1Db3VudGVyIEhpIERpdmlkZSxNLUNvdW50ZXIgTG93IERpdmlkZSxOLUNvdW50ZXIgSGkgRGl2aWRlLE4tQ291bnRlciBMb3cgRGl2aWRlLE0tQ291bnRlciBCeXBhc3MgRW5hYmxlLE4tQ291bnRlciBCeXBhc3MgRW5hYmxlLE0tQ291bnRlciBPZGQgRGl2aWRlIEVuYWJsZSxOLUNvdW50ZXIgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTAgSGkgRGl2aWRlLEMtQ291bnRlci0wIExvdyBEaXZpZGUsQy1Db3VudGVyLTAgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0wIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTAgSW5wdXQgU291cmNlLEMtQ291bnRlci0wIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTAgT2RkIERpdmlkZSBFbmFibGUsVkNPIFBvc3QgRGl2aWRlIENvdW50ZXIgRW5hYmxlLENoYXJnZSBQdW1wIGN1cnJlbnQgKHVBKSxMb29wIEZpbHRlciBCYW5kd2lkdGggUmVzaXN0b3IgKE9obXMpICxQTEwgT3V0cHV0IFZDTyBGcmVxdWVuY3ksSy1GcmFjdGlvbmFsIERpdmlzaW9uIFZhbHVlIChEU00pLEZlZWRiYWNrIENsb2NrIFR5cGUsRmVlZGJhY2sgQ2xvY2sgTVVYIDEsRmVlZGJhY2sgQ2xvY2sgTVVYIDIsTSBDb3VudGVyIFNvdXJjZSBNVVgsUExMIEF1dG8gUmVzZXQ=::UGFyYW1ldGVyIE5hbWVz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl92YWx1ZXM=::NCw0LDI1NiwyNTYsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSw5LDgsMSwwLHBoX211eF9jbGssZmFsc2UsdHJ1ZSwyLDIwLDQwMDAsNDE3Ljc5MiBNSHosMTUyODMyMTE2Myxub25lLGdsYixtX2NudCxwaF9tdXhfY2xrLHRydWU=::UGFyYW1ldGVyIFZhbHVlcw==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX21pZl9nZW5lcmF0ZQ==::ZmFsc2U=::R2VuZXJhdGUgTUlGIGZpbGU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9taWZfZHBz::ZmFsc2U=::RW5hYmxlIER5bmFtaWMgUGhhc2UgU2hpZnQgZm9yIE1JRiBzdHJlYW1pbmc=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19jbnRy::QzA=::RFBTIENvdW50ZXIgU2VsZWN0aW9u" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19udW0=::MQ==::TnVtYmVyIG9mIER5bmFtaWMgUGhhc2UgU2hpZnRz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19kaXI=::UG9zaXRpdmU=::RHluYW1pYyBQaGFzZSBTaGlmdCBEaXJlY3Rpb24=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3JlZmNsa19zd2l0Y2g=::ZmFsc2U=::Q3JlYXRlIGEgc2Vjb25kIGlucHV0IGNsayAncmVmY2xrMSc=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9jYXNjYWRlX291dA==::ZmFsc2U=::Q3JlYXRlIGEgJ2Nhc2NhZGVfb3V0JyBzaWduYWwgdG8gY29ubmVjdCB3aXRoIGEgZG93bnN0cmVhbSBQTEw=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9jYXNjYWRlX2lu::ZmFsc2U=::Q3JlYXRlIGFuIGFkanBsbGluIG9yIGNjbGsgc2lnbmFsIHRvIGNvbm5lY3Qgd2l0aCBhbiB1cHN0cmVhbSBQTEw=" + +set_global_assignment -library "pll_audio" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_audio.v"] +set_global_assignment -library "pll_audio" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_audio/pll_audio_0002.v"] +set_global_assignment -library "pll_audio" -name QIP_FILE [file join $::quartus(qip_path) "pll_audio/pll_audio_0002.qip"] + +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_VERSION "17.0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_audio.v b/sys/pll_audio.v new file mode 100644 index 0000000..e96b248 --- /dev/null +++ b/sys/pll_audio.v @@ -0,0 +1,252 @@ +// megafunction wizard: %Altera PLL v17.0% +// GENERATION: XML +// pll_audio.v + +// Generated using ACDS version 17.0 602 + +`timescale 1 ps / 1 ps +module pll_audio ( + input wire refclk, // refclk.clk + input wire rst, // reset.reset + output wire outclk_0 // outclk0.clk + ); + + pll_audio_0002 pll_audio_inst ( + .refclk (refclk), // refclk.clk + .rst (rst), // reset.reset + .outclk_0 (outclk_0), // outclk0.clk + .locked () // (terminated) + ); + +endmodule +// Retrieval info: +// +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// IPFS_FILES : pll_audio.vo +// RELATED_FILES: pll_audio.v, pll_audio_0002.v diff --git a/sys/pll_audio/pll_audio_0002.qip b/sys/pll_audio/pll_audio_0002.qip new file mode 100644 index 0000000..dadd4b8 --- /dev/null +++ b/sys/pll_audio/pll_audio_0002.qip @@ -0,0 +1,4 @@ +set_instance_assignment -name PLL_COMPENSATION_MODE DIRECT -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_CHANNEL_SPACING "0.0 KHz" -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_AUTO_RESET ON -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" diff --git a/sys/pll_audio/pll_audio_0002.v b/sys/pll_audio/pll_audio_0002.v new file mode 100644 index 0000000..37eea13 --- /dev/null +++ b/sys/pll_audio/pll_audio_0002.v @@ -0,0 +1,87 @@ +`timescale 1ns/10ps +module pll_audio_0002( + + // interface 'refclk' + input wire refclk, + + // interface 'reset' + input wire rst, + + // interface 'outclk0' + output wire outclk_0, + + // interface 'locked' + output wire locked +); + + altera_pll #( + .fractional_vco_multiplier("true"), + .reference_clock_frequency("50.0 MHz"), + .operation_mode("direct"), + .number_of_clocks(1), + .output_clock_frequency0("24.576000 MHz"), + .phase_shift0("0 ps"), + .duty_cycle0(50), + .output_clock_frequency1("0 MHz"), + .phase_shift1("0 ps"), + .duty_cycle1(50), + .output_clock_frequency2("0 MHz"), + .phase_shift2("0 ps"), + .duty_cycle2(50), + .output_clock_frequency3("0 MHz"), + .phase_shift3("0 ps"), + .duty_cycle3(50), + .output_clock_frequency4("0 MHz"), + .phase_shift4("0 ps"), + .duty_cycle4(50), + .output_clock_frequency5("0 MHz"), + .phase_shift5("0 ps"), + .duty_cycle5(50), + .output_clock_frequency6("0 MHz"), + .phase_shift6("0 ps"), + .duty_cycle6(50), + .output_clock_frequency7("0 MHz"), + .phase_shift7("0 ps"), + .duty_cycle7(50), + .output_clock_frequency8("0 MHz"), + .phase_shift8("0 ps"), + .duty_cycle8(50), + .output_clock_frequency9("0 MHz"), + .phase_shift9("0 ps"), + .duty_cycle9(50), + .output_clock_frequency10("0 MHz"), + .phase_shift10("0 ps"), + .duty_cycle10(50), + .output_clock_frequency11("0 MHz"), + .phase_shift11("0 ps"), + .duty_cycle11(50), + .output_clock_frequency12("0 MHz"), + .phase_shift12("0 ps"), + .duty_cycle12(50), + .output_clock_frequency13("0 MHz"), + .phase_shift13("0 ps"), + .duty_cycle13(50), + .output_clock_frequency14("0 MHz"), + .phase_shift14("0 ps"), + .duty_cycle14(50), + .output_clock_frequency15("0 MHz"), + .phase_shift15("0 ps"), + .duty_cycle15(50), + .output_clock_frequency16("0 MHz"), + .phase_shift16("0 ps"), + .duty_cycle16(50), + .output_clock_frequency17("0 MHz"), + .phase_shift17("0 ps"), + .duty_cycle17(50), + .pll_type("General"), + .pll_subtype("General") + ) altera_pll_i ( + .rst (rst), + .outclk ({outclk_0}), + .locked (locked), + .fboutclk ( ), + .fbclk (1'b0), + .refclk (refclk) + ); +endmodule + diff --git a/sys/pll_cfg.qip b/sys/pll_cfg.qip new file mode 100644 index 0000000..c3394be --- /dev/null +++ b/sys/pll_cfg.qip @@ -0,0 +1,44 @@ +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_TOOL_NAME "altera_pll_reconfig" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_TOOL_VERSION "17.0" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "pll_cfg" -name MISC_FILE [file join $::quartus(qip_path) "pll_cfg.cmp"] +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_TARGETED_DEVICE_FAMILY "Cyclone V" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_QSYS_MODE "UNKNOWN" +set_global_assignment -name SYNTHESIS_ONLY_QIP ON +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_NAME "cGxsX2hkbWlfY2Zn" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTCBSZWNvbmZpZw==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_VERSION "MTcuMA==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIFJlY29uZmlndXJhdGlvbiBCbG9jayhBTFRFUkFfUExMX1JFQ09ORklHKQ==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "RU5BQkxFX0JZVEVFTkFCTEU=::ZmFsc2U=::QWRkIGJ5dGVlbmFibGUgcG9ydA==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "QllURUVOQUJMRV9XSURUSA==::NA==::QllURUVOQUJMRV9XSURUSA==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfQUREUl9XSURUSA==::Ng==::UkVDT05GSUdfQUREUl9XSURUSA==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfREFUQV9XSURUSA==::MzI=::UkVDT05GSUdfREFUQV9XSURUSA==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "cmVjb25mX3dpZHRo::NjQ=::cmVjb25mX3dpZHRo" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "V0FJVF9GT1JfTE9DSw==::dHJ1ZQ==::V0FJVF9GT1JfTE9DSw==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_NAME "YWx0ZXJhX3BsbF9yZWNvbmZpZ190b3A=" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTCBSZWNvbmZpZw==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_VERSION "MTcuMA==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIFJlY29uZmlndXJhdGlvbiBCbG9jayhBTFRFUkFfUExMX1JFQ09ORklHKQ==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "ZGV2aWNlX2ZhbWlseQ==::Q3ljbG9uZSBW::ZGV2aWNlX2ZhbWlseQ==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "RU5BQkxFX01JRg==::ZmFsc2U=::RW5hYmxlIE1JRiBTdHJlYW1pbmc=" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "RU5BQkxFX0JZVEVFTkFCTEU=::ZmFsc2U=::QWRkIGJ5dGVlbmFibGUgcG9ydA==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "QllURUVOQUJMRV9XSURUSA==::NA==::QllURUVOQUJMRV9XSURUSA==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfQUREUl9XSURUSA==::Ng==::UkVDT05GSUdfQUREUl9XSURUSA==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfREFUQV9XSURUSA==::MzI=::UkVDT05GSUdfREFUQV9XSURUSA==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "cmVjb25mX3dpZHRo::NjQ=::cmVjb25mX3dpZHRo" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "V0FJVF9GT1JfTE9DSw==::dHJ1ZQ==::V0FJVF9GT1JfTE9DSw==" + +set_global_assignment -library "pll_cfg" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_cfg.v"] +set_global_assignment -library "pll_cfg" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_cfg/altera_pll_reconfig_top.v"] +set_global_assignment -library "pll_cfg" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_cfg/altera_pll_reconfig_core.v"] + +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_TOOL_NAME "altera_pll_reconfig" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_TOOL_VERSION "17.0" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_hdmi_cfg.v b/sys/pll_cfg.v similarity index 93% rename from sys/pll_hdmi_cfg.v rename to sys/pll_cfg.v index 55bbbe1..2a2f078 100644 --- a/sys/pll_hdmi_cfg.v +++ b/sys/pll_cfg.v @@ -1,11 +1,11 @@ // megafunction wizard: %Altera PLL Reconfig v17.0% // GENERATION: XML -// pll_hdmi_cfg.v +// pll_cfg.v // Generated using ACDS version 17.0 598 `timescale 1 ps / 1 ps -module pll_hdmi_cfg #( +module pll_cfg #( parameter ENABLE_BYTEENABLE = 0, parameter BYTEENABLE_WIDTH = 4, parameter RECONFIG_ADDR_WIDTH = 6, @@ -28,14 +28,14 @@ module pll_hdmi_cfg #( altera_pll_reconfig_top #( .device_family ("Cyclone V"), .ENABLE_MIF (0), - .MIF_FILE_NAME ("sys/pll_hdmi_cfg.mif"), + .MIF_FILE_NAME ("sys/pll_cfg.mif"), .ENABLE_BYTEENABLE (ENABLE_BYTEENABLE), .BYTEENABLE_WIDTH (BYTEENABLE_WIDTH), .RECONFIG_ADDR_WIDTH (RECONFIG_ADDR_WIDTH), .RECONFIG_DATA_WIDTH (RECONFIG_DATA_WIDTH), .reconf_width (reconf_width), .WAIT_FOR_LOCK (WAIT_FOR_LOCK) - ) pll_hdmi_cfg_inst ( + ) pll_cfg_inst ( .mgmt_clk (mgmt_clk), // mgmt_clk.clk .mgmt_reset (mgmt_reset), // mgmt_reset.reset .mgmt_waitrequest (mgmt_waitrequest), // mgmt_avalon_slave.waitrequest @@ -79,8 +79,8 @@ endmodule // Retrieval info: // Retrieval info: // Retrieval info: -// Retrieval info: +// Retrieval info: // Retrieval info: // Retrieval info: -// IPFS_FILES : pll_hdmi_cfg.vo -// RELATED_FILES: pll_hdmi_cfg.v, altera_pll_reconfig_top.v, altera_pll_reconfig_core.v, altera_std_synchronizer.v +// IPFS_FILES : pll_cfg.vo +// RELATED_FILES: pll_cfg.v, altera_pll_reconfig_top.v, altera_pll_reconfig_core.v, altera_std_synchronizer.v diff --git a/sys/pll_hdmi_cfg/altera_pll_reconfig_core.v b/sys/pll_cfg/altera_pll_reconfig_core.v similarity index 100% rename from sys/pll_hdmi_cfg/altera_pll_reconfig_core.v rename to sys/pll_cfg/altera_pll_reconfig_core.v diff --git a/sys/pll_hdmi_cfg/altera_pll_reconfig_top.v b/sys/pll_cfg/altera_pll_reconfig_top.v similarity index 100% rename from sys/pll_hdmi_cfg/altera_pll_reconfig_top.v rename to sys/pll_cfg/altera_pll_reconfig_top.v diff --git a/sys/pll_hdmi.13.qip b/sys/pll_hdmi.13.qip new file mode 100644 index 0000000..76def89 --- /dev/null +++ b/sys/pll_hdmi.13.qip @@ -0,0 +1,17 @@ +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "pll_hdmi" -name MISC_FILE [file join $::quartus(qip_path) "pll_hdmi.cmp"] +set_global_assignment -name SYNTHESIS_ONLY_QIP ON + +set_global_assignment -library "pll_hdmi" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_hdmi.v"] +set_global_assignment -library "pll_hdmi" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_hdmi/pll_hdmi_0002.v"] + +set_instance_assignment -name PLL_COMPENSATION_MODE DIRECT -to "*pll_hdmi_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_CHANNEL_SPACING "0.0 KHz" -to "*pll_hdmi_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_AUTO_RESET ON -to "*pll_hdmi_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*pll_hdmi_0002*|altera_pll:altera_pll_i*|*" + +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_hdmi_adj.vhd b/sys/pll_hdmi_adj.vhd new file mode 100644 index 0000000..67287cb --- /dev/null +++ b/sys/pll_hdmi_adj.vhd @@ -0,0 +1,433 @@ +-------------------------------------------------------------------------------- +-- HDMI PLL Adjust +-------------------------------------------------------------------------------- + +-- Changes the HDMI PLL frequency according to the scaler suggestions. +-------------------------------------------- +-- LLTUNE : +-- 0 : Input Display Enable +-- 1 : Input Vsync +-- 2 : Input Interlaced mode +-- 3 : Input Interlaced field +-- 4 : Output Image frame +-- 5 : +-- 6 : Input clock +-- 7 : Output clock + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; + +ENTITY pll_hdmi_adj IS + PORT ( + -- Scaler + llena : IN std_logic; -- 0=Disabled 1=Enabled + lltune : IN unsigned(15 DOWNTO 0); -- Outputs from scaler + + locked : OUT std_logic; + + -- Signals from reconfig commands + i_waitrequest : OUT std_logic; + i_write : IN std_logic; + i_address : IN unsigned(5 DOWNTO 0); + i_writedata : IN unsigned(31 DOWNTO 0); + + -- Outputs to PLL_HDMI_CFG + o_waitrequest : IN std_logic; + o_write : OUT std_logic; + o_address : OUT unsigned(5 DOWNTO 0); + o_writedata : OUT unsigned(31 DOWNTO 0); + + ------------------------------------ + clk : IN std_logic; + reset_na : IN std_logic + ); + +BEGIN + + +END ENTITY pll_hdmi_adj; + +--############################################################################## + +ARCHITECTURE rtl OF pll_hdmi_adj IS + + SIGNAL i_clk,i_de,i_de2,i_vss,i_vss2,i_vss_delay,i_ce : std_logic; + SIGNAL i_linecpt,i_line : natural RANGE 0 TO 2**12-1; + SIGNAL i_delay : natural RANGE 0 TO 2**14-1; + + SIGNAL pwrite : std_logic; + SIGNAL paddress : unsigned(5 DOWNTO 0); + SIGNAL pdata : unsigned(31 DOWNTO 0); + TYPE enum_state IS (sIDLE,sW1,sW2,sW3,sW4,sW5,sW6); + SIGNAL state : enum_state; + SIGNAL tune_freq,tune_phase : unsigned(5 DOWNTO 0); + SIGNAL lltune_sync,lltune_sync2,lltune_sync3 : unsigned(15 DOWNTO 0); + SIGNAL mfrac,mfrac_mem,mfrac_ref,diff : unsigned(40 DOWNTO 0); + SIGNAL mul : unsigned(15 DOWNTO 0); + SIGNAL sign,sign_pre : std_logic; + SIGNAL expand : boolean; + SIGNAL up,modo,phm,dir : std_logic; + SIGNAL cpt : natural RANGE 0 TO 3; + SIGNAL col : natural RANGE 0 TO 15; + + SIGNAL icpt,ocpt,o2cpt,ssh,ofsize,ifsize : natural RANGE 0 TO 2**24-1; + SIGNAL ivss,ivss2,itog : std_logic; + SIGNAL ovss,ovss2,otog : std_logic; + SIGNAL sync,pulse,los,lop : std_logic; + SIGNAL osize,offset,osizep,offsetp : signed(23 DOWNTO 0); + SIGNAL logcpt : natural RANGE 0 TO 31; + SIGNAL udiff : integer RANGE -2**23 TO 2**23-1 :=0; + +BEGIN + + ---------------------------------------------------------------------------- + -- 4 lines delay to input + i_vss<=lltune(0); + i_de <=lltune(1); + i_ce <=lltune(5); + i_clk<=lltune(6); + + Delay:PROCESS(i_clk) IS + BEGIN + IF rising_edge(i_clk) THEN + IF i_ce='1' THEN + -- Measure input line time. + i_de2<=i_de; + + IF i_de='1' AND i_de2='0' THEN + i_linecpt<=0; + IF i_vss='1' THEN + i_line<=i_linecpt; + END IF; + ELSE + i_linecpt<=i_linecpt+1; + END IF; + + -- Delay 4 lines + i_vss2<=i_vss; + IF i_vss/=i_vss2 THEN + i_delay<=0; + ELSIF i_delay=i_line * 4 THEN + i_vss_delay<=i_vss; + ELSE + i_delay<=i_delay+1; + END IF; + END IF; + END IF; + END PROCESS Delay; + + ---------------------------------------------------------------------------- + -- Sample image sizes + Sampler:PROCESS(clk,reset_na) IS + BEGIN + IF reset_na='0' THEN +--pragma synthesis_off + otog<='0'; + itog<='0'; + ivss<='0'; + ivss2<='0'; + ovss<='0'; + ovss2<='0'; +--pragma synthesis_on + + ELSIF rising_edge(clk) THEN + -- Clock domain crossing + + ivss<=i_vss_delay; -- + ivss2<=ivss; + + ovss<=lltune(4); -- + ovss2<=ovss; + + otog<=otog XOR (ovss AND NOT ovss2); + + -- Measure output frame time + IF ovss='1' AND ovss2='0' AND otog='1' THEN + ocpt<=0; + osizep<=to_signed(ocpt,24); + ELSE + ocpt<=ocpt+1; + END IF; + IF ovss='0' AND ovss2='1' AND otog='0' THEN + o2cpt<=0; + ELSE + o2cpt<=o2cpt+1; + END IF; + + -- Measure output image time + IF ovss='0' AND ovss2='1' AND otog='0' THEN + ofsize<=ocpt; + END IF; + + itog<=itog XOR (ivss AND NOT ivss2); + + -- Measure input frame time + IF ivss='1' AND ivss2='0' AND itog='1' THEN + icpt<=0; + osize<=osizep; + udiff<=integer(to_integer(osizep)) - integer(icpt); + sync<='1'; + ELSE + icpt<=icpt+1; + sync<='0'; + END IF; + + -- Measure input image time + IF ivss='0' AND ivss2='1' AND itog='0' THEN + ifsize<=icpt; + END IF; + + expand<=(ofsize>=ifsize); + -- IN | ######### | EXPAND = 1 + -- OUT | ############# | + + -- IN | ######### | EXPAND = 0 + -- OUT | ###### | + + IF expand THEN + IF ivss='1' AND ivss2='0' AND itog='1' THEN + offset<=to_signed(ocpt,24); + END IF; + ELSE + IF ivss='0' AND ivss2='1' AND itog='0' THEN + offset<=to_signed(o2cpt,24); + END IF; + END IF; + + -------------------------------------------- + pulse<='0'; + IF sync='1' THEN + logcpt<=0; + ssh<=to_integer(osize); + los<='0'; + lop<='0'; + + ELSIF logcpt<24 THEN + -- Frequency difference + IF udiff>0 AND ssh=osize/2 AND ssh<(osize-offset) AND lop='0' THEN + tune_phase<='1' & to_unsigned(logcpt,5); + lop<='1'; + END IF; + ssh<=ssh/2; + logcpt<=logcpt+1; + + ELSIF logcpt=24 THEN + pulse<='1'; + ssh<=ssh/2; + logcpt<=logcpt+1; + END IF; + + END IF; + END PROCESS Sampler; + + ---------------------------------------------------------------------------- + -- 000010 : Start reg "Write either 0 or 1 to start fractional PLL reconf. + -- 000100 : M counter + -- 000111 : M counter Fractional Value K + + Comb:PROCESS(i_write,i_address, + i_writedata,pwrite,paddress,pdata) IS + BEGIN + IF i_write='1' THEN + o_write <=i_write; + o_address <=i_address; + o_writedata <=i_writedata; + ELSE + o_write <=pwrite; + o_address <=paddress; + o_writedata<=pdata; + END IF; + END PROCESS Comb; + + i_waitrequest<=o_waitrequest WHEN state=sIDLE ELSE '0'; + + ---------------------------------------------------------------------------- + Schmurtz:PROCESS(clk,reset_na) IS + VARIABLE off_v,ofp_v : natural RANGE 0 TO 63; + VARIABLE diff_v : unsigned(40 DOWNTO 0); + VARIABLE mulco : unsigned(15 DOWNTO 0); + VARIABLE up_v,sign_v : std_logic; + BEGIN + IF reset_na='0' THEN + modo<='0'; + state<=sIDLE; + ELSIF rising_edge(clk) THEN + ------------------------------------------------------ + -- Snoop accesses to PLL reconfiguration + IF i_address="000100" AND i_write='1' THEN + mfrac (40 DOWNTO 32)<=('0' & i_writedata(15 DOWNTO 8)) + + ('0' & i_writedata(7 DOWNTO 0)); + mfrac_ref(40 DOWNTO 32)<=('0' & i_writedata(15 DOWNTO 8)) + + ('0' & i_writedata(7 DOWNTO 0)); + mfrac_mem(40 DOWNTO 32)<=('0' & i_writedata(15 DOWNTO 8)) + + ('0' & i_writedata(7 DOWNTO 0)); + mul<=i_writedata(15 DOWNTO 0); + modo<='1'; + END IF; + + IF i_address="000111" AND i_write='1' THEN + mfrac (31 DOWNTO 0)<=i_writedata; + mfrac_ref(31 DOWNTO 0)<=i_writedata; + mfrac_mem(31 DOWNTO 0)<=i_writedata; + modo<='1'; + END IF; + + ------------------------------------------------------ + -- Tuning + off_v:=to_integer('0' & tune_freq(4 DOWNTO 0)); + ofp_v:=to_integer('0' & tune_phase(4 DOWNTO 0)); + --IF off_v<8 THEN off_v:=8; END IF; + --IF ofp_v<7 THEN ofp_v:=7; END IF; + IF off_v<4 THEN off_v:=4; END IF; + IF ofp_v<4 THEN ofp_v:=4; END IF; + + IF off_v>=18 AND ofp_v>=18 THEN + locked<=llena; + ELSE + locked<='0'; + END IF; + + up_v:='0'; + IF pulse='1' THEN + cpt<=(cpt+1) MOD 4; + IF llena='0' THEN + -- Recover original freq when disabling low lag mode + cpt<=0; + col<=0; + IF modo='1' THEN + mfrac<=mfrac_mem; + mfrac_ref<=mfrac_mem; + up<='1'; + modo<='0'; + END IF; + + ELSIF phm='0' AND cpt=0 THEN + -- Frequency adjust + sign_v:=tune_freq(5); + IF col<10 THEN col<=col+1; END IF; + IF off_v>=16 AND col>=10 THEN + phm<='1'; + col<=0; + ELSE + off_v:=off_v+1; + IF off_v>17 THEN + off_v:=off_v + 3; + END IF; + up_v:='1'; + up<='1'; + END IF; + + ELSIF cpt=0 THEN + -- Phase adjust + sign_v:=NOT tune_phase(5); + col<=col+1; + IF col>=10 THEN + phm<='0'; + up_v:='1'; + off_v:=31; + col<=0; + ELSE + off_v:=ofp_v + 1; + IF ofp_v>7 THEN + off_v:=off_v + 1; + END IF; + IF ofp_v>14 THEN + off_v:=off_v + 2; + END IF; + IF ofp_v>17 THEN + off_v:=off_v + 3; + END IF; + up_v:='1'; + END IF; + up<='1'; + END IF; + END IF; + + diff_v:=shift_right(mfrac_ref,off_v); + IF sign_v='0' THEN + diff_v:=mfrac_ref + diff_v; + ELSE + diff_v:=mfrac_ref - diff_v; + END IF; + + IF up_v='1' THEN + mfrac<=diff_v; + END IF; + + IF up_v='1' AND phm='0' THEN + mfrac_ref<=diff_v; + END IF; + + ------------------------------------------------------ + -- Update PLL registers + mulco:=mfrac(40 DOWNTO 33) & (mfrac(40 DOWNTO 33) + ('0' & mfrac(32))); + + CASE state IS + WHEN sIDLE => + pwrite<='0'; + IF up='1' THEN + up<='0'; + IF mulco/=mul THEN + state<=sW1; + ELSE + state<=sW3; + END IF; + END IF; + + WHEN sW1 => -- Change M multiplier + mul<=mulco; + pdata<=x"0000" & mulco; + paddress<="000100"; + pwrite<='1'; + state<=sW2; + + WHEN sW2 => + IF pwrite='1' AND o_waitrequest='0' THEN + state<=sW3; + pwrite<='0'; + END IF; + + WHEN sW3 => -- Change M fractional value + pdata<=mfrac(31 DOWNTO 0); + paddress<="000111"; + pwrite<='1'; + state<=sW4; + + WHEN sW4 => + IF pwrite='1' AND o_waitrequest='0' THEN + state<=sW5; + pwrite<='0'; + END IF; + + WHEN sW5 => + pdata<=x"0000_0001"; + paddress<="000010"; + pwrite<='1'; + state<=sW6; + + WHEN sW6 => + IF pwrite='1' AND o_waitrequest='0' THEN + pwrite<='0'; + state<=sIDLE; + END IF; + END CASE; + + END IF; + END PROCESS Schmurtz; + + ---------------------------------------------------------------------------- + +END ARCHITECTURE rtl; + diff --git a/sys/pll_hdmi_cfg.qip b/sys/pll_hdmi_cfg.qip deleted file mode 100644 index f6447f5..0000000 --- a/sys/pll_hdmi_cfg.qip +++ /dev/null @@ -1,44 +0,0 @@ -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_TOOL_NAME "altera_pll_reconfig" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_TOOL_VERSION "17.0" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_TOOL_ENV "mwpim" -set_global_assignment -library "pll_hdmi_cfg" -name MISC_FILE [file join $::quartus(qip_path) "pll_hdmi_cfg.cmp"] -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_TARGETED_DEVICE_FAMILY "Cyclone V" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_QSYS_MODE "UNKNOWN" -set_global_assignment -name SYNTHESIS_ONLY_QIP ON -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_NAME "cGxsX2hkbWlfY2Zn" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTCBSZWNvbmZpZw==" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_REPORT_HIERARCHY "Off" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_INTERNAL "Off" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_VERSION "MTcuMA==" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIFJlY29uZmlndXJhdGlvbiBCbG9jayhBTFRFUkFfUExMX1JFQ09ORklHKQ==" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "RU5BQkxFX0JZVEVFTkFCTEU=::ZmFsc2U=::QWRkIGJ5dGVlbmFibGUgcG9ydA==" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "QllURUVOQUJMRV9XSURUSA==::NA==::QllURUVOQUJMRV9XSURUSA==" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfQUREUl9XSURUSA==::Ng==::UkVDT05GSUdfQUREUl9XSURUSA==" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfREFUQV9XSURUSA==::MzI=::UkVDT05GSUdfREFUQV9XSURUSA==" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "cmVjb25mX3dpZHRo::NjQ=::cmVjb25mX3dpZHRo" -set_global_assignment -entity "pll_hdmi_cfg" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "V0FJVF9GT1JfTE9DSw==::dHJ1ZQ==::V0FJVF9GT1JfTE9DSw==" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_NAME "YWx0ZXJhX3BsbF9yZWNvbmZpZ190b3A=" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTCBSZWNvbmZpZw==" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_REPORT_HIERARCHY "Off" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_INTERNAL "Off" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_VERSION "MTcuMA==" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIFJlY29uZmlndXJhdGlvbiBCbG9jayhBTFRFUkFfUExMX1JFQ09ORklHKQ==" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "ZGV2aWNlX2ZhbWlseQ==::Q3ljbG9uZSBW::ZGV2aWNlX2ZhbWlseQ==" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "RU5BQkxFX01JRg==::ZmFsc2U=::RW5hYmxlIE1JRiBTdHJlYW1pbmc=" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "RU5BQkxFX0JZVEVFTkFCTEU=::ZmFsc2U=::QWRkIGJ5dGVlbmFibGUgcG9ydA==" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "QllURUVOQUJMRV9XSURUSA==::NA==::QllURUVOQUJMRV9XSURUSA==" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfQUREUl9XSURUSA==::Ng==::UkVDT05GSUdfQUREUl9XSURUSA==" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfREFUQV9XSURUSA==::MzI=::UkVDT05GSUdfREFUQV9XSURUSA==" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "cmVjb25mX3dpZHRo::NjQ=::cmVjb25mX3dpZHRo" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_COMPONENT_PARAMETER "V0FJVF9GT1JfTE9DSw==::dHJ1ZQ==::V0FJVF9GT1JfTE9DSw==" - -set_global_assignment -library "pll_hdmi_cfg" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_hdmi_cfg.v"] -set_global_assignment -library "pll_hdmi_cfg" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_hdmi_cfg/altera_pll_reconfig_top.v"] -set_global_assignment -library "pll_hdmi_cfg" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_hdmi_cfg/altera_pll_reconfig_core.v"] - -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_TOOL_NAME "altera_pll_reconfig" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_TOOL_VERSION "17.0" -set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_hdmi_cfg" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_q13.qip b/sys/pll_q13.qip new file mode 100644 index 0000000..13a7ed4 --- /dev/null +++ b/sys/pll_q13.qip @@ -0,0 +1,6 @@ +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll.13.qip ] +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll_hdmi.13.qip ] +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll_audio.13.qip ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) pll_cfg.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) pll_cfg/altera_pll_reconfig_core.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) pll_cfg/altera_pll_reconfig_top.v ] diff --git a/sys/pll_q17.qip b/sys/pll_q17.qip new file mode 100644 index 0000000..85cc84b --- /dev/null +++ b/sys/pll_q17.qip @@ -0,0 +1,4 @@ +set_global_assignment -name QIP_FILE rtl/pll.qip +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll_hdmi.qip ] +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll_audio.qip ] +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll_cfg.qip ] diff --git a/sys/scandoubler.v b/sys/scandoubler.v index 2276c35..a1d5a44 100644 --- a/sys/scandoubler.v +++ b/sys/scandoubler.v @@ -2,7 +2,7 @@ // scandoubler.v // // Copyright (c) 2015 Till Harbaum -// Copyright (c) 2017 Sorgelig +// Copyright (c) 2017-2019 Sorgelig // // This source file is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published @@ -22,7 +22,7 @@ module scandoubler #(parameter LENGTH, parameter HALF_DEPTH) ( // system interface - input clk_sys, + input clk_vid, input ce_pix, output ce_pix_out, @@ -49,140 +49,167 @@ module scandoubler #(parameter LENGTH, parameter HALF_DEPTH) output [DWIDTH:0] b_out ); - localparam DWIDTH = HALF_DEPTH ? 3 : 7; -assign vs_out = vso[3]; -assign ce_pix_out = ce_x4; - -//Compensate picture shift after HQ2x -assign vb_out = vbo[2]; -assign hb_out = &hbo[5:4]; - reg [7:0] pix_len = 0; wire [7:0] pl = pix_len + 1'b1; -reg ce_x1, ce_x4; -reg req_line_reset; -always @(negedge clk_sys) begin - reg old_ce; - reg [2:0] ce_cnt; +reg [7:0] pix_in_cnt = 0; +wire [7:0] pc_in = pix_in_cnt + 1'b1; +reg [7:0] pixsz, pixsz2, pixsz4 = 0; - reg [7:0] pixsz2, pixsz4 = 0; +reg ce_x4i, ce_x1i; +always @(posedge clk_vid) begin + reg old_ce, valid, hs; + + if(~&pix_len) pix_len <= pl; + if(~&pix_in_cnt) pix_in_cnt <= pc_in; + + ce_x4i <= 0; + ce_x1i <= 0; + + // use such odd comparison to place ce_x4 evenly if master clock isn't multiple of 4. + if((pc_in == pixsz4) || (pc_in == pixsz2) || (pc_in == (pixsz2+pixsz4))) ce_x4i <= 1; old_ce <= ce_pix; - if(~&pix_len) pix_len <= pix_len + 1'd1; - - ce_x4 <= 0; - ce_x1 <= 0; - - // use such odd comparison to place ce_x4 evenly if master clock isn't multiple 4. - if((pl == pixsz4) || (pl == pixsz2) || (pl == (pixsz2+pixsz4))) begin - ce_x4 <= 1; - end - if(~old_ce & ce_pix) begin - pixsz2 <= {1'b0, pl[7:1]}; - pixsz4 <= {2'b00, pl[7:2]}; - ce_x1 <= 1; - ce_x4 <= 1; + if(valid & ~hb_in & ~vb_in) begin + pixsz <= pl; + pixsz2 <= {1'b0, pl[7:1]}; + pixsz4 <= {2'b00, pl[7:2]}; + end pix_len <= 0; - req_line_reset <= 0; - - if(hb_in) req_line_reset <= 1; + valid <= 1; end + + hs <= hs_in; + if((~hs & hs_in) || (pc_in >= pixsz)) begin + ce_x4i <= 1; + ce_x1i <= 1; + pix_in_cnt <= 0; + end + + if(hb_in | vb_in) valid <= 0; end -localparam AWIDTH = `BITS_TO_FIT(LENGTH); -Hq2x #(.LENGTH(LENGTH), .HALF_DEPTH(HALF_DEPTH)) Hq2x -( - .clk(clk_sys), - .ce_x4(ce_x4), - .inputpixel({b_d,g_d,r_d}), - .mono(mono), - .disable_hq2x(~hq2x), - .reset_frame(vs_in), - .reset_line(req_line_reset), - .read_y(sd_line), - .read_x(sd_h), - .outpixel({b_out,g_out,r_out}) -); - -reg [10:0] sd_h; -reg [1:0] sd_line; -reg [2:0] vbo; -reg [5:0] hbo; - -reg [DWIDTH:0] r_d; -reg [DWIDTH:0] g_d; -reg [DWIDTH:0] b_d; - -reg [3:0] vso; - -always @(posedge clk_sys) begin - - reg [11:0] hs_max,hs_rise; - reg [10:0] hcnt; - reg [11:0] sd_hcnt; - reg [11:0] hde_start, hde_end; - - reg hs, hs2, vs, hb; - - if(ce_x1) begin - hs <= hs_in; - hb <= hb_in; - +reg req_line_reset; +reg [DWIDTH:0] r_d, g_d, b_d; +always @(posedge clk_vid) begin + if(ce_x1i) begin + req_line_reset <= hb_in; r_d <= r_in; g_d <= g_in; b_d <= b_in; - - if(hb && !hb_in) begin - hde_start <= {hcnt,1'b0}; - vbo <= {vbo[1:0], vb_in}; - end - if(!hb && hb_in) hde_end <= {hcnt,1'b0}; - - // falling edge of hsync indicates start of line - if(hs && !hs_in) begin - vso <= (vso<<1) | vs_in; - hs_max <= {hcnt,1'b1}; - hcnt <= 0; - end else begin - hcnt <= hcnt + 1'd1; - end - - // save position of rising edge - if(!hs && hs_in) hs_rise <= {hcnt,1'b1}; - - vs <= vs_in; - if(vs && ~vs_in) sd_line <= 0; - end - - if(ce_x4) begin - hs2 <= hs_in; - hbo[5:1] <= hbo[4:0]; - - // output counter synchronous to input and at twice the rate - sd_hcnt <= sd_hcnt + 1'd1; - if(~&hbo) sd_h <= sd_h + 1'd1; - - if(hs2 && !hs_in) sd_hcnt <= hs_max; - if(sd_hcnt == hs_max) sd_hcnt <= 0; - - - //prepare to read in advance - if(sd_hcnt == (hde_start-2)) begin - sd_h <= 0; - sd_line <= sd_line + 1'd1; - end - - if(sd_hcnt == hde_start) hbo[0] <= 0; - if(sd_hcnt == hde_end) hbo[0] <= 1; - - // replicate horizontal sync at twice the speed - if(sd_hcnt == hs_max) hs_out <= 0; - if(sd_hcnt == hs_rise) hs_out <= 1; end end +Hq2x #(.LENGTH(LENGTH), .HALF_DEPTH(HALF_DEPTH)) Hq2x +( + .clk(clk_vid), + + .ce_in(ce_x4i), + .inputpixel({b_d,g_d,r_d}), + .mono(mono), + .disable_hq2x(~hq2x), + .reset_frame(vb_in), + .reset_line(req_line_reset), + + .ce_out(ce_x4o), + .read_y(sd_line), + .hblank(hbo[0]&hbo[8]), + .outpixel({b_out,g_out,r_out}) +); + +reg [7:0] pix_out_cnt = 0; +wire [7:0] pc_out = pix_out_cnt + 1'b1; + +reg ce_x4o, ce_x2o; +always @(posedge clk_vid) begin + reg hs; + + if(~&pix_out_cnt) pix_out_cnt <= pc_out; + + ce_x4o <= 0; + ce_x2o <= 0; + + // use such odd comparison to place ce_x4 evenly if master clock isn't multiple of 4. + if((pc_out == pixsz4) || (pc_out == pixsz2) || (pc_out == (pixsz2+pixsz4))) ce_x4o <= 1; + if( pc_out == pixsz2) ce_x2o <= 1; + + hs <= hs_out; + if((~hs & hs_out) || (pc_out >= pixsz)) begin + ce_x2o <= 1; + ce_x4o <= 1; + pix_out_cnt <= 0; + end +end + +reg [1:0] sd_line; +reg [3:0] vbo; +reg [3:0] vso; +reg [8:0] hbo; +always @(posedge clk_vid) begin + + reg [31:0] hcnt; + reg [30:0] sd_hcnt; + reg [30:0] hs_start, hs_end; + reg [30:0] hde_start, hde_end; + + reg hs, hb; + + if(ce_x4o) begin + hbo[8:1] <= hbo[7:0]; + end + + // output counter synchronous to input and at twice the rate + sd_hcnt <= sd_hcnt + 1'd1; + if(sd_hcnt == hde_start) begin + sd_hcnt <= 0; + vbo[3:1] <= vbo[2:0]; + end + + if(sd_hcnt == hs_end) begin + sd_line <= sd_line + 1'd1; + if(&vbo[3:2]) sd_line <= 1; + vso[3:1] <= vso[2:0]; + end + + if(sd_hcnt == hde_start)hbo[0] <= 0; + if(sd_hcnt == hde_end) hbo[0] <= 1; + + // replicate horizontal sync at twice the speed + if(sd_hcnt == hs_end) hs_out <= 0; + if(sd_hcnt == hs_start) hs_out <= 1; + + hs <= hs_in; + hb <= hb_in; + + hcnt <= hcnt + 1'd1; + if(hb && !hb_in) begin + hde_start <= hcnt[31:1]; + hbo[0] <= 0; + hcnt <= 0; + sd_hcnt <= 0; + vbo <= {vbo[2:0],vb_in}; + end + + if(!hb && hb_in) hde_end <= hcnt[31:1]; + + // falling edge of hsync indicates start of line + if(hs && !hs_in) begin + hs_end <= hcnt[31:1]; + vso[0] <= vs_in; + end + + // save position of rising edge + if(!hs && hs_in) hs_start <= hcnt[31:1]; +end + +assign vs_out = vso[3]; +assign ce_pix_out = hq2x ? ce_x4o : ce_x2o; + +//Compensate picture shift after HQ2x +assign vb_out = vbo[3]; +assign hb_out = hbo[6]; + endmodule diff --git a/sys/scanlines.v b/sys/scanlines.v new file mode 100644 index 0000000..59d29bd --- /dev/null +++ b/sys/scanlines.v @@ -0,0 +1,67 @@ +module scanlines #(parameter v2=0) +( + input clk, + + input [1:0] scanlines, + input [23:0] din, + input hs_in,vs_in, + input de_in, + + output reg [23:0] dout, + output reg hs_out,vs_out, + output reg de_out +); + +reg [1:0] scanline; +always @(posedge clk) begin + reg old_hs, old_vs; + + old_hs <= hs_in; + old_vs <= vs_in; + + if(old_hs && ~hs_in) begin + if(v2) begin + scanline <= scanline + 1'd1; + if (scanline == scanlines) scanline <= 0; + end + else scanline <= scanline ^ scanlines; + end + if(old_vs && ~vs_in) scanline <= 0; +end + +wire [7:0] r,g,b; +assign {r,g,b} = din; + +reg [23:0] d; +always @(*) begin + case(scanline) + 1: // reduce 25% = 1/2 + 1/4 + d = {{1'b0, r[7:1]} + {2'b00, r[7:2]}, + {1'b0, g[7:1]} + {2'b00, g[7:2]}, + {1'b0, b[7:1]} + {2'b00, b[7:2]}}; + + 2: // reduce 50% = 1/2 + d = {{1'b0, r[7:1]}, + {1'b0, g[7:1]}, + {1'b0, b[7:1]}}; + + 3: // reduce 75% = 1/4 + d = {{2'b00, r[7:2]}, + {2'b00, g[7:2]}, + {2'b00, b[7:2]}}; + + default: d = {r,g,b}; + endcase +end + +always @(posedge clk) begin + reg [23:0] dout1, dout2; + reg de1,de2,vs1,vs2,hs1,hs2; + + dout <= dout2; dout2 <= dout1; dout1 <= d; + vs_out <= vs2; vs2 <= vs1; vs1 <= vs_in; + hs_out <= hs2; hs2 <= hs1; hs1 <= hs_in; + de_out <= de2; de2 <= de1; de1 <= de_in; +end + +endmodule diff --git a/sys/sd_card.sv b/sys/sd_card.sv new file mode 100644 index 0000000..30a91e7 --- /dev/null +++ b/sys/sd_card.sv @@ -0,0 +1,537 @@ +// +// sd_card.v +// +// Copyright (c) 2014 Till Harbaum +// Copyright (c) 2015-2018 Sorgelig +// +// This source file is free software: you can redistribute it and/or modify +// it under the terms of the Lesser GNU General Public License as published +// by the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This source file is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// http://elm-chan.org/docs/mmc/mmc_e.html +// +///////////////////////////////////////////////////////////////////////// + +// +// Made module syncrhronous. Total code refactoring. (Sorgelig) +// clk_spi must be at least 4 x sck for proper work. + +module sd_card #(parameter WIDE = 0) +( + input clk_sys, + input reset, + + input sdhc, + + output [31:0] sd_lba, + output reg sd_rd, + output reg sd_wr, + input sd_ack, + input sd_ack_conf, + + input [AW:0] sd_buff_addr, + input [DW:0] sd_buff_dout, + output [DW:0] sd_buff_din, + input sd_buff_wr, + + // SPI interface + input clk_spi, + + input ss, + input sck, + input mosi, + output reg miso +); + +localparam AW = WIDE ? 7 : 8; +localparam DW = WIDE ? 15 : 7; + +assign sd_lba = sdhc ? lba : {9'd0, lba[31:9]}; + +wire[31:0] OCR = { 1'b1, sdhc, 30'd0 }; // bit30 = 1 -> high capaciry card (sdhc) // bit31 = 0 -> card power up finished +wire [7:0] READ_DATA_TOKEN = 8'hfe; +wire [7:0] WRITE_DATA_RESPONSE = 8'h05; + +// number of bytes to wait after a command before sending the reply +localparam NCR=3; + +localparam RD_STATE_IDLE = 0; +localparam RD_STATE_WAIT_IO = 1; +localparam RD_STATE_SEND_TOKEN = 2; +localparam RD_STATE_SEND_DATA = 3; +localparam RD_STATE_WAIT_M = 4; + +localparam WR_STATE_IDLE = 0; +localparam WR_STATE_EXP_DTOKEN = 1; +localparam WR_STATE_RECV_DATA = 2; +localparam WR_STATE_RECV_CRC0 = 3; +localparam WR_STATE_RECV_CRC1 = 4; +localparam WR_STATE_SEND_DRESP = 5; +localparam WR_STATE_BUSY = 6; + +sdbuf #(WIDE) buffer +( + .clock_a(clk_sys), + .address_a(sd_buff_addr), + .data_a(sd_buff_dout), + .wren_a(sd_ack & sd_buff_wr), + .q_a(sd_buff_din), + + .clock_b(clk_spi), + .address_b(buffer_ptr), + .data_b(buffer_din), + .wren_b(buffer_wr), + .q_b(buffer_dout) +); + +sdbuf #(WIDE) conf +( + .clock_a(clk_sys), + .address_a(sd_buff_addr), + .data_a(sd_buff_dout), + .wren_a(sd_ack_conf & sd_buff_wr), + + .clock_b(clk_spi), + .address_b(buffer_ptr), + .q_b(config_dout) +); + +reg [31:0] lba, new_lba; +reg [8:0] buffer_ptr; +reg [7:0] buffer_din; +wire [7:0] buffer_dout; +wire [7:0] config_dout; +reg buffer_wr; + +always @(posedge clk_spi) begin + reg [2:0] read_state; + reg [2:0] write_state; + reg [6:0] sbuf; + reg cmd55; + reg [7:0] cmd; + reg [2:0] bit_cnt; + reg [3:0] byte_cnt; + reg [7:0] reply; + reg [7:0] reply0, reply1, reply2, reply3; + reg [3:0] reply_len; + reg tx_finish; + reg rx_finish; + reg old_sck; + reg synced; + reg [5:0] ack; + reg io_ack; + reg [4:0] idle_cnt = 0; + reg [2:0] wait_m_cnt; + + if(buffer_wr & ~&buffer_ptr) buffer_ptr <= buffer_ptr + 1'd1; + buffer_wr <= 0; + + ack <= {ack[4:0], sd_ack}; + if(ack[5:4] == 2'b10) io_ack <= 1; + if(ack[5:4] == 2'b01) {sd_rd,sd_wr} <= 0; + + old_sck <= sck; + + if(~ss) idle_cnt <= 31; + else if(~old_sck && sck && idle_cnt) idle_cnt <= idle_cnt - 1'd1; + + if(reset || !idle_cnt) begin + bit_cnt <= 0; + byte_cnt <= 15; + synced <= 0; + miso <= 1; + sbuf <= 7'b1111111; + tx_finish <= 0; + rx_finish <= 0; + read_state <= RD_STATE_IDLE; + write_state <= WR_STATE_IDLE; + end + + if(old_sck & ~sck & ~ss) begin + tx_finish <= 0; + miso <= 1; // default: send 1's (busy/wait) + + if(byte_cnt == 5+NCR) begin + miso <= reply[~bit_cnt]; + + if(bit_cnt == 7) begin + // these three commands all have a reply_len of 0 and will thus + // not send more than a single reply byte + + // CMD9: SEND_CSD + // CMD10: SEND_CID + if((cmd == 'h49) | (cmd == 'h4a)) + read_state <= RD_STATE_SEND_TOKEN; // jump directly to data transmission + + // CMD17/CMD18 + if((cmd == 'h51) | (cmd == 'h52)) begin + io_ack <= 0; + read_state <= RD_STATE_WAIT_IO; // start waiting for data from io controller + lba <= new_lba; + sd_rd <= 1; // trigger request to io controller + end + end + end + else if((reply_len > 0) && (byte_cnt == 5+NCR+1)) miso <= reply0[~bit_cnt]; + else if((reply_len > 1) && (byte_cnt == 5+NCR+2)) miso <= reply1[~bit_cnt]; + else if((reply_len > 2) && (byte_cnt == 5+NCR+3)) miso <= reply2[~bit_cnt]; + else if((reply_len > 3) && (byte_cnt == 5+NCR+4)) miso <= reply3[~bit_cnt]; + else begin + if(byte_cnt > 5+NCR && read_state==RD_STATE_IDLE && write_state==WR_STATE_IDLE) tx_finish <= 1; + end + + // ---------- read state machine processing ------------- + + case(read_state) + RD_STATE_IDLE: ; // do nothing + + + // waiting for io controller to return data + RD_STATE_WAIT_IO: begin + if(io_ack & (bit_cnt == 7)) read_state <= RD_STATE_SEND_TOKEN; + end + + // send data token + RD_STATE_SEND_TOKEN: begin + miso <= READ_DATA_TOKEN[~bit_cnt]; + + if(bit_cnt == 7) begin + read_state <= RD_STATE_SEND_DATA; // next: send data + buffer_ptr <= 0; + if(cmd == 'h49) buffer_ptr <= 16; + end + end + + // send data + RD_STATE_SEND_DATA: begin + + miso <= ((cmd == 'h49) | (cmd == 'h4A)) ? config_dout[~bit_cnt] : buffer_dout[~bit_cnt]; + + if(bit_cnt == 7) begin + + // sent 512 sector data bytes? + if((cmd == 'h51) & &buffer_ptr) read_state <= RD_STATE_IDLE; + else if((cmd == 'h52) & &buffer_ptr) begin + read_state <= RD_STATE_WAIT_M; + wait_m_cnt <= 0; + end + + // sent 16 cid/csd data bytes? + else if(((cmd == 'h49) | (cmd == 'h4a)) & (&buffer_ptr[3:0])) read_state <= RD_STATE_IDLE; + + // not done yet -> trigger read of next data byte + else buffer_ptr <= buffer_ptr + 1'd1; + end + end + + RD_STATE_WAIT_M: begin + if(bit_cnt == 7) begin + wait_m_cnt <= wait_m_cnt + 1'd1; + if(&wait_m_cnt) begin + lba <= lba + 1; + io_ack <= 0; + sd_rd <= 1; + read_state <= RD_STATE_WAIT_IO; + end + end + end + endcase + + // ------------------ write support ---------------------- + // send write data response + if(write_state == WR_STATE_SEND_DRESP) miso <= WRITE_DATA_RESPONSE[~bit_cnt]; + + // busy after write until the io controller sends ack + if(write_state == WR_STATE_BUSY) miso <= 0; + end + + if(~old_sck & sck & ~ss) begin + + if(synced) bit_cnt <= bit_cnt + 1'd1; + + // assemble byte + if(bit_cnt != 7) begin + sbuf[6:0] <= { sbuf[5:0], mosi }; + + // resync while waiting for token + if(write_state==WR_STATE_EXP_DTOKEN) begin + if(cmd == 'h58) begin + if({sbuf,mosi} == 8'hfe) begin + write_state <= WR_STATE_RECV_DATA; + buffer_ptr <= 0; + bit_cnt <= 0; + end + end + else begin + if({sbuf,mosi} == 8'hfc) begin + write_state <= WR_STATE_RECV_DATA; + buffer_ptr <= 0; + bit_cnt <= 0; + end + if({sbuf,mosi} == 8'hfd) begin + write_state <= WR_STATE_IDLE; + rx_finish <= 1; + bit_cnt <= 0; + end + end + end + end + else begin + // finished reading one byte + // byte counter runs against 15 byte boundary + if(byte_cnt != 15) byte_cnt <= byte_cnt + 1'd1; + + // byte_cnt > 6 -> complete command received + // first byte of valid command is 01xxxxxx + // don't accept new commands once a write or read command has been accepted + if((byte_cnt > 5) & (write_state == WR_STATE_IDLE) & (read_state == RD_STATE_IDLE) && !rx_finish) begin + byte_cnt <= 0; + cmd <= { sbuf, mosi}; + + // set cmd55 flag if previous command was 55 + cmd55 <= (cmd == 'h77); + end + + if((byte_cnt > 5) & (read_state == RD_STATE_WAIT_M) && ({sbuf, mosi} == 8'h4c)) begin + byte_cnt <= 0; + rx_finish <= 0; + cmd <= {sbuf, mosi}; + read_state <= RD_STATE_IDLE; + end + + // parse additional command bytes + if(byte_cnt == 0) new_lba[31:24] <= { sbuf, mosi}; + if(byte_cnt == 1) new_lba[23:16] <= { sbuf, mosi}; + if(byte_cnt == 2) new_lba[15:8] <= { sbuf, mosi}; + if(byte_cnt == 3) new_lba[7:0] <= { sbuf, mosi}; + + // last byte (crc) received, evaluate + if(byte_cnt == 4) begin + + // default: + reply <= 4; // illegal command + reply_len <= 0; // no extra reply bytes + rx_finish <= 1; + + case(cmd) + // CMD0: GO_IDLE_STATE + 'h40: reply <= 1; // ok, busy + + // CMD1: SEND_OP_COND + 'h41: reply <= 0; // ok, not busy + + // CMD8: SEND_IF_COND (V2 only) + 'h48: begin + reply <= 1; // ok, busy + + reply0 <= 'h00; + reply1 <= 'h00; + reply2 <= 'h01; + reply3 <= 'hAA; + reply_len <= 4; + end + + // CMD9: SEND_CSD + 'h49: reply <= 0; // ok + + // CMD10: SEND_CID + 'h4a: reply <= 0; // ok + + // CMD12: STOP_TRANSMISSION + 'h4c: reply <= 0; // ok + + // CMD13: SEND_STATUS + 'h4d: begin + reply <= 'h00; // ok + reply0 <='h00; + reply_len <= 1; + end + + // CMD16: SET_BLOCKLEN + 'h50: begin + // we only support a block size of 512 + if(new_lba == 512) reply <= 0; // ok + else reply <= 'h40; // parmeter error + end + + // CMD17: READ_SINGLE_BLOCK + 'h51: reply <= 0; // ok + + // CMD18: READ_MULTIPLE + 'h52: reply <= 0; // ok + // ACMD23: SET_WR_BLK_ERASE_COUNT + 'h57: reply <= 0; //ok + + // CMD24: WRITE_BLOCK + 'h58, + // CMD25: WRITE_MULTIPLE + 'h59: begin + reply <= 0; // ok + write_state <= WR_STATE_EXP_DTOKEN; // expect data token + rx_finish <=0; + lba <= new_lba; + end + + // ACMD41: APP_SEND_OP_COND + 'h69: if(cmd55) reply <= 0; // ok, not busy + + // CMD55: APP_COND + 'h77: reply <= 1; // ok, busy + + // CMD58: READ_OCR + 'h7a: begin + reply <= 0; // ok + + reply0 <= OCR[31:24]; // bit 30 = 1 -> high capacity card + reply1 <= OCR[23:16]; + reply2 <= OCR[15:8]; + reply3 <= OCR[7:0]; + reply_len <= 4; + end + + // CMD59: CRC_ON_OFF + 'h7b: reply <= 0; // ok + endcase + end + + // ---------- handle write ----------- + case(write_state) + // do nothing in idle state + WR_STATE_IDLE: ; + + // waiting for data token + WR_STATE_EXP_DTOKEN: begin + buffer_ptr <= 0; + if(cmd == 'h58) begin + if({sbuf,mosi} == 8'hfe) write_state <= WR_STATE_RECV_DATA; + end + else begin + if({sbuf,mosi} == 8'hfc) write_state <= WR_STATE_RECV_DATA; + if({sbuf,mosi} == 8'hfd) begin + write_state <= WR_STATE_IDLE; + rx_finish <= 1; + end + end + end + + // transfer 512 bytes + WR_STATE_RECV_DATA: begin + // push one byte into local buffer + buffer_wr <= 1; + buffer_din <= {sbuf, mosi}; + + // all bytes written? + if(&buffer_ptr) write_state <= WR_STATE_RECV_CRC0; + end + + // transfer 1st crc byte + WR_STATE_RECV_CRC0: + write_state <= WR_STATE_RECV_CRC1; + + // transfer 2nd crc byte + WR_STATE_RECV_CRC1: + write_state <= WR_STATE_SEND_DRESP; + + // send data response + WR_STATE_SEND_DRESP: begin + write_state <= WR_STATE_BUSY; + io_ack <= 0; + sd_wr <= 1; + end + + // wait for io controller to accept data + WR_STATE_BUSY: + if(io_ack) begin + if(cmd == 'h59) begin + write_state <= WR_STATE_EXP_DTOKEN; + lba <= lba + 1; + end + else begin + write_state <= WR_STATE_IDLE; + rx_finish <= 1; + end + end + endcase + end + + // wait for first 0 bit until start counting bits + if(!synced && !mosi) begin + synced <= 1; + bit_cnt <= 1; // byte assembly prepare for next time loop + sbuf <= 7'b1111110; // byte assembly prepare for next time loop + rx_finish<= 0; + end else if (synced && tx_finish && rx_finish ) begin + synced <= 0; + bit_cnt <= 0; + rx_finish<= 0; + end + end +end + +endmodule + +module sdbuf #(parameter WIDE) +( + input clock_a, + input [AW:0] address_a, + input [DW:0] data_a, + input wren_a, + output reg [DW:0] q_a, + + input clock_b, + input [8:0] address_b, + input [7:0] data_b, + input wren_b, + output reg [7:0] q_b +); + +localparam AW = WIDE ? 7 : 8; +localparam DW = WIDE ? 15 : 7; + +always@(posedge clock_a) begin + if(wren_a) begin + ram[address_a] <= data_a; + q_a <= data_a; + end + else begin + q_a <= ram[address_a]; + end +end + +generate + if(WIDE) begin + reg [1:0][7:0] ram[1<<8]; + always@(posedge clock_b) begin + if(wren_b) begin + ram[address_b[8:1]][address_b[0]] <= data_b; + q_b <= data_b; + end + else begin + q_b <= ram[address_b[8:1]][address_b[0]]; + end + end + end + else begin + reg [7:0] ram[1<<9]; + always@(posedge clock_b) begin + if(wren_b) begin + ram[address_b] <= data_b; + q_b <= data_b; + end + else begin + q_b <= ram[address_b]; + end + end + end +endgenerate + +endmodule diff --git a/sys/spdif.v b/sys/spdif.v index 671dcb2..d50c2da 100644 --- a/sys/spdif.v +++ b/sys/spdif.v @@ -31,132 +31,6 @@ // altera message_off 10240 module spdif - -//----------------------------------------------------------------- -// Params -//----------------------------------------------------------------- -#( - parameter CLK_RATE = 50000000, - parameter AUDIO_RATE = 48000, - - // Generated params - parameter WHOLE_CYCLES = (CLK_RATE) / (AUDIO_RATE*128), - parameter ERROR_BASE = 10000, - parameter [63:0] ERRORS_PER_BIT = ((CLK_RATE * ERROR_BASE) / (AUDIO_RATE*128)) - (WHOLE_CYCLES * ERROR_BASE) -) - -//----------------------------------------------------------------- -// Ports -//----------------------------------------------------------------- -( - input clk_i, - input rst_i, - input half_rate, - - // Output - output spdif_o, - - // Audio interface (16-bit x 2 = RL) - input [15:0] audio_r, - input [15:0] audio_l, - output sample_req_o -); - -reg lpf_ce; -always @(negedge clk_i) begin - reg [3:0] div; - - div <= div + 1'd1; - if(div == 13) div <= 0; - - lpf_ce <= !div; -end - -wire [15:0] al, ar; - -lpf48k #(15) lpf_l -( - .RESET(rst_i), - .CLK(clk_i), - .CE(lpf_ce), - .ENABLE(1), - - .IDATA(audio_l), - .ODATA(al) -); - -lpf48k #(15) lpf_r -( - .RESET(rst_i), - .CLK(clk_i), - .CE(lpf_ce), - .ENABLE(1), - - .IDATA(audio_r), - .ODATA(ar) -); - -reg bit_clk_q; - -// Clock pulse generator -always @ (posedge rst_i or posedge clk_i) begin - reg [31:0] count_q; - reg [31:0] error_q; - reg ce; - - if (rst_i) begin - count_q <= 0; - error_q <= 0; - bit_clk_q <= 1; - ce <= 0; - end - else - begin - if(count_q == WHOLE_CYCLES-1) begin - if (error_q < (ERROR_BASE - ERRORS_PER_BIT)) begin - error_q <= error_q + ERRORS_PER_BIT[31:0]; - count_q <= 0; - end else begin - error_q <= error_q + ERRORS_PER_BIT[31:0] - ERROR_BASE; - count_q <= count_q + 1; - end - end else if(count_q == WHOLE_CYCLES) begin - count_q <= 0; - end else begin - count_q <= count_q + 1; - end - - bit_clk_q <= 0; - if(!count_q) begin - ce <= ~ce; - if(~half_rate || ce) bit_clk_q <= 1; - end - end -end - -//----------------------------------------------------------------- -// Core SPDIF -//----------------------------------------------------------------- - -wire [31:0] sample_i = {ar, al}; - -spdif_core -u_core -( - .clk_i(clk_i), - .rst_i(rst_i), - - .bit_out_en_i(bit_clk_q), - - .spdif_o(spdif_o), - - .sample_i(sample_i), - .sample_req_o(sample_req_o) -); - -endmodule - -module spdif_core ( input clk_i, input rst_i, diff --git a/sys/sync_vg.v b/sys/sync_vg.v deleted file mode 100644 index caaf681..0000000 --- a/sys/sync_vg.v +++ /dev/null @@ -1,78 +0,0 @@ -module sync_vg -#( - parameter X_BITS=12, Y_BITS=12 -) -( - input wire clk, - input wire reset, - - input wire [Y_BITS-1:0] v_total, - input wire [Y_BITS-1:0] v_fp, - input wire [Y_BITS-1:0] v_bp, - input wire [Y_BITS-1:0] v_sync, - input wire [X_BITS-1:0] h_total, - input wire [X_BITS-1:0] h_fp, - input wire [X_BITS-1:0] h_bp, - input wire [X_BITS-1:0] h_sync, - input wire [X_BITS-1:0] hv_offset, - - output reg vs_out, - output reg hs_out, - output reg hde_out, - output reg vde_out, - output reg [Y_BITS-1:0] v_count_out, - output reg [X_BITS-1:0] h_count_out, - output reg [X_BITS-1:0] x_out, - output reg [Y_BITS-1:0] y_out -); - -reg [X_BITS-1:0] h_count; -reg [Y_BITS-1:0] v_count; - -/* horizontal counter */ -always @(posedge clk) - if (reset) - h_count <= 0; - else - if (h_count < h_total - 1) - h_count <= h_count + 1'd1; - else - h_count <= 0; - -/* vertical counter */ -always @(posedge clk) - if (reset) - v_count <= 0; - else - if (h_count == h_total - 1) - begin - if (v_count == v_total - 1) - v_count <= 0; - else - v_count <= v_count + 1'd1; - end - -always @(posedge clk) - if (reset) - { vs_out, hs_out, hde_out, vde_out } <= 0; - else begin - hs_out <= ((h_count < h_sync)); - - hde_out <= (h_count >= h_sync + h_bp) && (h_count <= h_total - h_fp - 1); - vde_out <= (v_count >= v_sync + v_bp) && (v_count <= v_total - v_fp - 1); - - if ((v_count == 0) && (h_count == hv_offset)) - vs_out <= 1'b1; - else if ((v_count == v_sync) && (h_count == hv_offset)) - vs_out <= 1'b0; - - /* H_COUNT_OUT and V_COUNT_OUT */ - h_count_out <= h_count; - v_count_out <= v_count; - - /* X and Y coords for a backend pattern generator */ - x_out <= h_count - (h_sync + h_bp); - y_out <= v_count - (v_sync + v_bp); - end - -endmodule diff --git a/sys/sys.qip b/sys/sys.qip index d092e36..9a28ae0 100644 --- a/sys/sys.qip +++ b/sys/sys.qip @@ -1,24 +1,28 @@ -set_global_assignment -name VERILOG_FILE sys/sys_top.v -set_global_assignment -name SDC_FILE sys/sys_top.sdc -set_global_assignment -name QIP_FILE sys/pll.qip -set_global_assignment -name QIP_FILE sys/pll_hdmi.qip -set_global_assignment -name QIP_FILE sys/pll_hdmi_cfg.qip -set_global_assignment -name SYSTEMVERILOG_FILE sys/hdmi_lite.sv -set_global_assignment -name SYSTEMVERILOG_FILE sys/hq2x.sv -set_global_assignment -name VERILOG_FILE sys/scandoubler.v -set_global_assignment -name SYSTEMVERILOG_FILE sys/video_cleaner.sv -set_global_assignment -name SYSTEMVERILOG_FILE sys/video_mixer.sv -set_global_assignment -name VERILOG_FILE sys/osd.v -set_global_assignment -name SYSTEMVERILOG_FILE sys/vga_out.sv -set_global_assignment -name VERILOG_FILE sys/sync_vg.v -set_global_assignment -name VERILOG_FILE sys/pattern_vg.v -set_global_assignment -name VERILOG_FILE sys/i2c.v -set_global_assignment -name VERILOG_FILE sys/i2s.v -set_global_assignment -name VERILOG_FILE sys/spdif.v -set_global_assignment -name VERILOG_FILE sys/sigma_delta_dac.v -set_global_assignment -name SYSTEMVERILOG_FILE sys/lpf48k.sv -set_global_assignment -name SYSTEMVERILOG_FILE sys/hdmi_config.sv -set_global_assignment -name SYSTEMVERILOG_FILE sys/sysmem.sv -set_global_assignment -name VERILOG_FILE sys/ip/reset_source.v -set_global_assignment -name SYSTEMVERILOG_FILE sys/vip_config.sv -set_global_assignment -name VERILOG_FILE sys/hps_io.v +set_global_assignment -name QIP_FILE [join [list $::quartus(qip_path) pll_q [regexp -inline {[0-9]+} $quartus(version)] .qip] {}] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) sys_top.v ] +set_global_assignment -name SDC_FILE [file join $::quartus(qip_path) sys_top.sdc ] +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) ascal.vhd ] +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) pll_hdmi_adj.vhd ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) hq2x.sv ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) scandoubler.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) scanlines.v ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) video_cleaner.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) gamma_corr.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) video_mixer.sv ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) arcade_video.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) osd.v ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) vga_out.sv ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) i2c.v ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) alsa.sv ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) i2s.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) spdif.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) audio_out.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) iir_filter.v ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) ltc2308.sv ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) sigma_delta_dac.v ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) hdmi_config.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) mcp23009.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) ddr_svc.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) sysmem.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) sd_card.sv ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) hps_io.v ] diff --git a/sys/sys.tcl b/sys/sys.tcl new file mode 100644 index 0000000..6e2b24b --- /dev/null +++ b/sys/sys.tcl @@ -0,0 +1,226 @@ +set_global_assignment -name FAMILY "Cyclone V" +set_global_assignment -name DEVICE 5CSEBA6U23I7 +set_global_assignment -name DEVICE_FILTER_PACKAGE UFBGA +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 672 +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 7 + +#============================================================ +# ADC +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_CONVST +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SCK +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SDI +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SDO +set_location_assignment PIN_U9 -to ADC_CONVST +set_location_assignment PIN_V10 -to ADC_SCK +set_location_assignment PIN_AC4 -to ADC_SDI +set_location_assignment PIN_AD4 -to ADC_SDO + +#============================================================ +# ARDUINO +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[*] +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to ARDUINO_IO[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to ARDUINO_IO[*] + +#============================================================ +# I2C LEDS/BUTTONS +#============================================================ +set_location_assignment PIN_U14 -to IO_SCL +set_location_assignment PIN_AG9 -to IO_SDA +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to IO_S* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_S* +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to IO_S* + +#============================================================ +# USER PORT +#============================================================ +set_location_assignment PIN_AF17 -to USER_IO[6] +set_location_assignment PIN_AF15 -to USER_IO[5] +set_location_assignment PIN_AG16 -to USER_IO[4] +set_location_assignment PIN_AH11 -to USER_IO[3] +set_location_assignment PIN_AH12 -to USER_IO[2] +set_location_assignment PIN_AH9 -to USER_IO[1] +set_location_assignment PIN_AG11 -to USER_IO[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USER_IO[*] +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to USER_IO[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to USER_IO[*] + +#============================================================ +# SDIO_CD or SPDIF_OUT +#============================================================ +set_location_assignment PIN_AH7 -to SDCD_SPDIF +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDCD_SPDIF +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDCD_SPDIF +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDCD_SPDIF + +#============================================================ +# SDRAM +#============================================================ +set_location_assignment PIN_Y11 -to SDRAM_A[0] +set_location_assignment PIN_AA26 -to SDRAM_A[1] +set_location_assignment PIN_AA13 -to SDRAM_A[2] +set_location_assignment PIN_AA11 -to SDRAM_A[3] +set_location_assignment PIN_W11 -to SDRAM_A[4] +set_location_assignment PIN_Y19 -to SDRAM_A[5] +set_location_assignment PIN_AB23 -to SDRAM_A[6] +set_location_assignment PIN_AC23 -to SDRAM_A[7] +set_location_assignment PIN_AC22 -to SDRAM_A[8] +set_location_assignment PIN_C12 -to SDRAM_A[9] +set_location_assignment PIN_AB26 -to SDRAM_A[10] +set_location_assignment PIN_AD17 -to SDRAM_A[11] +set_location_assignment PIN_D12 -to SDRAM_A[12] +set_location_assignment PIN_Y17 -to SDRAM_BA[0] +set_location_assignment PIN_AB25 -to SDRAM_BA[1] +set_location_assignment PIN_E8 -to SDRAM_DQ[0] +set_location_assignment PIN_V12 -to SDRAM_DQ[1] +set_location_assignment PIN_D11 -to SDRAM_DQ[2] +set_location_assignment PIN_W12 -to SDRAM_DQ[3] +set_location_assignment PIN_AH13 -to SDRAM_DQ[4] +set_location_assignment PIN_D8 -to SDRAM_DQ[5] +set_location_assignment PIN_AH14 -to SDRAM_DQ[6] +set_location_assignment PIN_AF7 -to SDRAM_DQ[7] +set_location_assignment PIN_AE24 -to SDRAM_DQ[8] +set_location_assignment PIN_AD23 -to SDRAM_DQ[9] +set_location_assignment PIN_AE6 -to SDRAM_DQ[10] +set_location_assignment PIN_AE23 -to SDRAM_DQ[11] +set_location_assignment PIN_AG14 -to SDRAM_DQ[12] +set_location_assignment PIN_AD5 -to SDRAM_DQ[13] +set_location_assignment PIN_AF4 -to SDRAM_DQ[14] +set_location_assignment PIN_AH3 -to SDRAM_DQ[15] +set_location_assignment PIN_AG13 -to SDRAM_DQML +set_location_assignment PIN_AF13 -to SDRAM_DQMH +set_location_assignment PIN_AD20 -to SDRAM_CLK +set_location_assignment PIN_AG10 -to SDRAM_CKE +set_location_assignment PIN_AA19 -to SDRAM_nWE +set_location_assignment PIN_AA18 -to SDRAM_nCAS +set_location_assignment PIN_Y18 -to SDRAM_nCS +set_location_assignment PIN_W14 -to SDRAM_nRAS + +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_* +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_* +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_* +set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[*] +set_instance_assignment -name FAST_INPUT_REGISTER ON -to SDRAM_DQ[*] +set_instance_assignment -name ALLOW_SYNCH_CTRL_USAGE OFF -to *|SDRAM_* + +#============================================================ +# SPI SD +#============================================================ +set_location_assignment PIN_AE15 -to SD_SPI_CS +set_location_assignment PIN_AH8 -to SD_SPI_MISO +set_location_assignment PIN_AG8 -to SD_SPI_CLK +set_location_assignment PIN_U13 -to SD_SPI_MOSI +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SD_SPI* +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_SPI* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SD_SPI* + + +#============================================================ +# CLOCK +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK1_50 +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK2_50 +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK3_50 +set_location_assignment PIN_V11 -to FPGA_CLK1_50 +set_location_assignment PIN_Y13 -to FPGA_CLK2_50 +set_location_assignment PIN_E11 -to FPGA_CLK3_50 + +#============================================================ +# HDMI +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2C_* +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2S +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_LRCLK +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_MCLK +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_SCLK +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_* +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_D[*] +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_DE +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_HS +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_VS +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_CLK +set_location_assignment PIN_U10 -to HDMI_I2C_SCL +set_location_assignment PIN_AA4 -to HDMI_I2C_SDA +set_location_assignment PIN_T13 -to HDMI_I2S +set_location_assignment PIN_T11 -to HDMI_LRCLK +set_location_assignment PIN_U11 -to HDMI_MCLK +set_location_assignment PIN_T12 -to HDMI_SCLK +set_location_assignment PIN_AG5 -to HDMI_TX_CLK +set_location_assignment PIN_AD19 -to HDMI_TX_DE +set_location_assignment PIN_AD12 -to HDMI_TX_D[0] +set_location_assignment PIN_AE12 -to HDMI_TX_D[1] +set_location_assignment PIN_W8 -to HDMI_TX_D[2] +set_location_assignment PIN_Y8 -to HDMI_TX_D[3] +set_location_assignment PIN_AD11 -to HDMI_TX_D[4] +set_location_assignment PIN_AD10 -to HDMI_TX_D[5] +set_location_assignment PIN_AE11 -to HDMI_TX_D[6] +set_location_assignment PIN_Y5 -to HDMI_TX_D[7] +set_location_assignment PIN_AF10 -to HDMI_TX_D[8] +set_location_assignment PIN_Y4 -to HDMI_TX_D[9] +set_location_assignment PIN_AE9 -to HDMI_TX_D[10] +set_location_assignment PIN_AB4 -to HDMI_TX_D[11] +set_location_assignment PIN_AE7 -to HDMI_TX_D[12] +set_location_assignment PIN_AF6 -to HDMI_TX_D[13] +set_location_assignment PIN_AF8 -to HDMI_TX_D[14] +set_location_assignment PIN_AF5 -to HDMI_TX_D[15] +set_location_assignment PIN_AE4 -to HDMI_TX_D[16] +set_location_assignment PIN_AH2 -to HDMI_TX_D[17] +set_location_assignment PIN_AH4 -to HDMI_TX_D[18] +set_location_assignment PIN_AH5 -to HDMI_TX_D[19] +set_location_assignment PIN_AH6 -to HDMI_TX_D[20] +set_location_assignment PIN_AG6 -to HDMI_TX_D[21] +set_location_assignment PIN_AF9 -to HDMI_TX_D[22] +set_location_assignment PIN_AE8 -to HDMI_TX_D[23] +set_location_assignment PIN_T8 -to HDMI_TX_HS +set_location_assignment PIN_AF11 -to HDMI_TX_INT +set_location_assignment PIN_V13 -to HDMI_TX_VS + +#============================================================ +# KEY +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[1] +set_location_assignment PIN_AH17 -to KEY[0] +set_location_assignment PIN_AH16 -to KEY[1] + +#============================================================ +# LED +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[1] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[2] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[3] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[4] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[5] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[6] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[7] +set_location_assignment PIN_W15 -to LED[0] +set_location_assignment PIN_AA24 -to LED[1] +set_location_assignment PIN_V16 -to LED[2] +set_location_assignment PIN_V15 -to LED[3] +set_location_assignment PIN_AF26 -to LED[4] +set_location_assignment PIN_AE26 -to LED[5] +set_location_assignment PIN_Y16 -to LED[6] +set_location_assignment PIN_AA23 -to LED[7] + +#============================================================ +# SW +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[1] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[2] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[3] +set_location_assignment PIN_Y24 -to SW[0] +set_location_assignment PIN_W24 -to SW[1] +set_location_assignment PIN_W21 -to SW[2] +set_location_assignment PIN_W20 -to SW[3] + +set_instance_assignment -name HPS_LOCATION HPSINTERFACEPERIPHERALSPIMASTER_X52_Y72_N111 -entity sys_top -to spi +set_instance_assignment -name HPS_LOCATION HPSINTERFACEPERIPHERALUART_X52_Y67_N111 -entity sys_top -to uart + +set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:sys/build_id.tcl" + +set_global_assignment -name CDF_FILE jtag.cdf +set_global_assignment -name QIP_FILE sys/sys.qip + diff --git a/sys/sys_analog.tcl b/sys/sys_analog.tcl new file mode 100644 index 0000000..7ffb3ec --- /dev/null +++ b/sys/sys_analog.tcl @@ -0,0 +1,71 @@ +#============================================================ +# SDIO +#============================================================ +set_location_assignment PIN_AF25 -to SDIO_DAT[0] +set_location_assignment PIN_AF23 -to SDIO_DAT[1] +set_location_assignment PIN_AD26 -to SDIO_DAT[2] +set_location_assignment PIN_AF28 -to SDIO_DAT[3] +set_location_assignment PIN_AF27 -to SDIO_CMD +set_location_assignment PIN_AH26 -to SDIO_CLK +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDIO_* + +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDIO_* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_DAT[*] +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_CMD + +#============================================================ +# VGA +#============================================================ +set_location_assignment PIN_AE17 -to VGA_R[0] +set_location_assignment PIN_AE20 -to VGA_R[1] +set_location_assignment PIN_AF20 -to VGA_R[2] +set_location_assignment PIN_AH18 -to VGA_R[3] +set_location_assignment PIN_AH19 -to VGA_R[4] +set_location_assignment PIN_AF21 -to VGA_R[5] + +set_location_assignment PIN_AE19 -to VGA_G[0] +set_location_assignment PIN_AG15 -to VGA_G[1] +set_location_assignment PIN_AF18 -to VGA_G[2] +set_location_assignment PIN_AG18 -to VGA_G[3] +set_location_assignment PIN_AG19 -to VGA_G[4] +set_location_assignment PIN_AG20 -to VGA_G[5] + +set_location_assignment PIN_AG21 -to VGA_B[0] +set_location_assignment PIN_AA20 -to VGA_B[1] +set_location_assignment PIN_AE22 -to VGA_B[2] +set_location_assignment PIN_AF22 -to VGA_B[3] +set_location_assignment PIN_AH23 -to VGA_B[4] +set_location_assignment PIN_AH21 -to VGA_B[5] + +set_location_assignment PIN_AH22 -to VGA_HS +set_location_assignment PIN_AG24 -to VGA_VS + +set_location_assignment PIN_AH27 -to VGA_EN +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to VGA_EN + +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_* +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_* + +#============================================================ +# AUDIO +#============================================================ +set_location_assignment PIN_AC24 -to AUDIO_L +set_location_assignment PIN_AE25 -to AUDIO_R +set_location_assignment PIN_AG26 -to AUDIO_SPDIF +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUDIO_* +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to AUDIO_* + +#============================================================ +# I/O #1 +#============================================================ +set_location_assignment PIN_Y15 -to LED_USER +set_location_assignment PIN_AA15 -to LED_HDD +set_location_assignment PIN_AG28 -to LED_POWER + +set_location_assignment PIN_AH24 -to BTN_USER +set_location_assignment PIN_AG25 -to BTN_OSD +set_location_assignment PIN_AG23 -to BTN_RESET + +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED_* +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to BTN_* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to BTN_* diff --git a/sys/sys_dual_sdram.tcl b/sys/sys_dual_sdram.tcl new file mode 100644 index 0000000..06124e7 --- /dev/null +++ b/sys/sys_dual_sdram.tcl @@ -0,0 +1,50 @@ +#============================================================ +# Secondary SDRAM +#============================================================ +set_location_assignment PIN_Y15 -to SDRAM2_DQ[0] +set_location_assignment PIN_AC24 -to SDRAM2_DQ[1] +set_location_assignment PIN_AA15 -to SDRAM2_DQ[2] +set_location_assignment PIN_AD26 -to SDRAM2_DQ[3] +set_location_assignment PIN_AG28 -to SDRAM2_DQ[4] +set_location_assignment PIN_AF28 -to SDRAM2_DQ[5] +set_location_assignment PIN_AE25 -to SDRAM2_DQ[6] +set_location_assignment PIN_AF27 -to SDRAM2_DQ[7] +set_location_assignment PIN_AG26 -to SDRAM2_DQ[14] +set_location_assignment PIN_AH27 -to SDRAM2_DQ[15] + +set_location_assignment PIN_AG25 -to SDRAM2_DQ[13] +set_location_assignment PIN_AH26 -to SDRAM2_DQ[12] +set_location_assignment PIN_AH24 -to SDRAM2_DQ[11] +set_location_assignment PIN_AF25 -to SDRAM2_DQ[10] +set_location_assignment PIN_AG23 -to SDRAM2_DQ[9] +set_location_assignment PIN_AF23 -to SDRAM2_DQ[8] +set_location_assignment PIN_AG24 -to SDRAM2_A[12] +set_location_assignment PIN_AH22 -to SDRAM2_CLK +set_location_assignment PIN_AH21 -to SDRAM2_A[9] +set_location_assignment PIN_AG21 -to SDRAM2_A[11] +set_location_assignment PIN_AH23 -to SDRAM2_A[7] +set_location_assignment PIN_AA20 -to SDRAM2_A[8] +set_location_assignment PIN_AF22 -to SDRAM2_A[5] +set_location_assignment PIN_AE22 -to SDRAM2_A[6] +set_location_assignment PIN_AG20 -to SDRAM2_nWE +set_location_assignment PIN_AF21 -to SDRAM2_A[4] + +set_location_assignment PIN_AG19 -to SDRAM2_nCAS +set_location_assignment PIN_AH19 -to SDRAM2_nRAS +set_location_assignment PIN_AG18 -to SDRAM2_nCS +set_location_assignment PIN_AH18 -to SDRAM2_BA[0] +set_location_assignment PIN_AF18 -to SDRAM2_BA[1] +set_location_assignment PIN_AF20 -to SDRAM2_A[10] +set_location_assignment PIN_AG15 -to SDRAM2_A[0] +set_location_assignment PIN_AE20 -to SDRAM2_A[1] +set_location_assignment PIN_AE19 -to SDRAM2_A[2] +set_location_assignment PIN_AE17 -to SDRAM2_A[3] + +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM2_* +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM2_* +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM2_* +set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM2_DQ[*] +set_instance_assignment -name FAST_INPUT_REGISTER ON -to SDRAM2_DQ[*] +set_instance_assignment -name ALLOW_SYNCH_CTRL_USAGE OFF -to *|SDRAM2_* + +set_global_assignment -name VERILOG_MACRO "DUAL_SDRAM=1" diff --git a/sys/sys_top.sdc b/sys/sys_top.sdc index 222c1c2..0954613 100644 --- a/sys/sys_top.sdc +++ b/sys/sys_top.sdc @@ -3,51 +3,52 @@ create_clock -period "50.0 MHz" [get_ports FPGA_CLK1_50] create_clock -period "50.0 MHz" [get_ports FPGA_CLK2_50] create_clock -period "50.0 MHz" [get_ports FPGA_CLK3_50] create_clock -period "100.0 MHz" [get_pins -compatibility_mode *|h2f_user0_clk] +create_clock -period "100.0 MHz" [get_pins -compatibility_mode spi|sclk_out] -name spi_sck derive_pll_clocks - -# Specify PLL-generated clock(s) -create_generated_clock -source [get_pins -compatibility_mode {*|pll|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] \ - -name SDRAM_CLK [get_ports {SDRAM_CLK}] - -create_generated_clock -source [get_pins -compatibility_mode {pll_hdmi|pll_hdmi_inst|altera_pll_i|cyclonev_pll|counter[0].output_counter|divclk}] \ - -name HDMI_CLK [get_ports HDMI_TX_CLK] - -create_generated_clock -source [get_pins { pll_hdmi|pll_hdmi_inst|altera_pll_i|cyclonev_pll|counter[0].output_counter|divclk}] \ - -name VID_CLK -divide_by 2 -duty_cycle 50 [get_nets {vip|output_inst|vid_clk}] - - derive_clock_uncertainty - -# Set acceptable delays for SDRAM chip (See correspondent chip datasheet) -set_input_delay -max -clock SDRAM_CLK 6.4ns [get_ports SDRAM_DQ[*]] -set_input_delay -min -clock SDRAM_CLK 3.7ns [get_ports SDRAM_DQ[*]] - -set_multicycle_path -from [get_clocks {SDRAM_CLK}] \ - -to [get_clocks {*|pll|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] \ - -setup 2 - -set_output_delay -max -clock SDRAM_CLK 1.6ns [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}] -set_output_delay -min -clock SDRAM_CLK -0.9ns [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}] - # Decouple different clock groups (to simplify routing) -set_clock_groups -asynchronous \ - -group [get_clocks { *|pll|pll_inst|altera_pll_i|general[*].gpll~PLL_OUTPUT_COUNTER|divclk}] \ - -group [get_clocks { pll_hdmi|pll_hdmi_inst|altera_pll_i|cyclonev_pll|counter[0].output_counter|divclk VID_CLK}] \ +set_clock_groups -exclusive \ + -group [get_clocks { *|pll|pll_inst|altera_pll_i|*[*].*|divclk}] \ + -group [get_clocks { pll_hdmi|pll_hdmi_inst|altera_pll_i|*[0].*|divclk}] \ + -group [get_clocks { pll_audio|pll_audio_inst|altera_pll_i|*[0].*|divclk}] \ + -group [get_clocks { spi_sck}] \ -group [get_clocks { *|h2f_user0_clk}] \ - -group [get_clocks { FPGA_CLK1_50 FPGA_CLK2_50 FPGA_CLK3_50}] + -group [get_clocks { FPGA_CLK1_50 }] \ + -group [get_clocks { FPGA_CLK2_50 }] \ + -group [get_clocks { FPGA_CLK3_50 }] -set_output_delay -max -clock HDMI_CLK 2.0ns [get_ports {HDMI_TX_D[*] HDMI_TX_DE HDMI_TX_HS HDMI_TX_VS}] -set_output_delay -min -clock HDMI_CLK -1.5ns [get_ports {HDMI_TX_D[*] HDMI_TX_DE HDMI_TX_HS HDMI_TX_VS}] +set_false_path -from [get_ports {KEY*}] +set_false_path -from [get_ports {BTN_*}] +set_false_path -to [get_ports {LED_*}] +set_false_path -to [get_ports {VGA_*}] +set_false_path -to [get_ports {AUDIO_SPDIF}] +set_false_path -to [get_ports {AUDIO_L}] +set_false_path -to [get_ports {AUDIO_R}] +set_false_path -to {cfg[*]} +set_false_path -from {cfg[*]} +set_false_path -from {VSET[*]} +set_false_path -to {wcalc[*] hcalc[*]} +set_false_path -to {width[*] height[*]} -# Put constraints on input ports -set_false_path -from [get_ports {KEY*}] -to * -set_false_path -from [get_ports {BTN_*}] -to * +set_multicycle_path -to {*_osd|osd_vcnt*} -setup 2 +set_multicycle_path -to {*_osd|osd_vcnt*} -hold 1 +set_false_path -to {*_osd|v_cnt*} +set_false_path -to {*_osd|v_osd_start*} +set_false_path -to {*_osd|v_info_start*} +set_false_path -to {*_osd|h_osd_start*} +set_false_path -from {*_osd|v_osd_start*} +set_false_path -from {*_osd|v_info_start*} +set_false_path -from {*_osd|h_osd_start*} +set_false_path -from {*_osd|rot*} +set_false_path -from {*_osd|dsp_width*} +set_false_path -to {*_osd|half} -# Put constraints on output ports -set_false_path -from * -to [get_ports {LED_*}] -set_false_path -from * -to [get_ports {VGA_*}] -set_false_path -from * -to [get_ports {AUDIO_SPDIF}] -set_false_path -from * -to [get_ports {AUDIO_L}] -set_false_path -from * -to [get_ports {AUDIO_R}] +set_false_path -to {WIDTH[*] HFP[*] HS[*] HBP[*] HEIGHT[*] VFP[*] VS[*] VBP[*]} +set_false_path -from {WIDTH[*] HFP[*] HS[*] HBP[*] HEIGHT[*] VFP[*] VS[*] VBP[*]} +set_false_path -to {FB_BASE[*] FB_BASE[*] FB_WIDTH[*] FB_HEIGHT[*] LFB_HMIN[*] LFB_HMAX[*] LFB_VMIN[*] LFB_VMAX[*]} +set_false_path -from {FB_BASE[*] FB_BASE[*] FB_WIDTH[*] FB_HEIGHT[*] LFB_HMIN[*] LFB_HMAX[*] LFB_VMIN[*] LFB_VMAX[*]} +set_false_path -to {vol_att[*] scaler_flt[*] led_overtake[*] led_state[*]} +set_false_path -from {vol_att[*] scaler_flt[*] led_overtake[*] led_state[*]} +set_false_path -from {aflt_* acx* acy* areset*} diff --git a/sys/sys_top.v b/sys/sys_top.v index 252bfa8..c795a6b 100644 --- a/sys/sys_top.v +++ b/sys/sys_top.v @@ -1,7 +1,7 @@ //============================================================================ // // MiSTer hardware abstraction module -// (c)2017,2018 Sorgelig +// (c)2017-2020 Alexey Melnikov // // 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 @@ -19,6 +19,18 @@ // //============================================================================ +`ifndef ARCADE_SYS + `define USE_DDRAM + `define USE_SDRAM +`endif + +`ifndef USE_DDRAM + `ifdef USE_FB + `define USE_DDRAM + `endif +`endif + + module sys_top ( /////////// CLOCK ////////// @@ -26,19 +38,6 @@ module sys_top input FPGA_CLK2_50, input FPGA_CLK3_50, - //////////// VGA /////////// - output [5:0] VGA_R, - output [5:0] VGA_G, - output [5:0] VGA_B, - inout VGA_HS, // VGA_HS is secondary SD card detect when VGA_EN = 1 (inactive) - output VGA_VS, - input VGA_EN, // active low - - /////////// AUDIO ////////// - output AUDIO_L, - output AUDIO_R, - output AUDIO_SPDIF, - //////////// HDMI ////////// output HDMI_I2C_SCL, inout HDMI_I2C_SDA, @@ -69,6 +68,36 @@ module sys_top output SDRAM_CLK, output SDRAM_CKE, +`ifdef DUAL_SDRAM + ////////// SDR #2 ////////// + output [12:0] SDRAM2_A, + inout [15:0] SDRAM2_DQ, + output SDRAM2_nWE, + output SDRAM2_nCAS, + output SDRAM2_nRAS, + output SDRAM2_nCS, + output [1:0] SDRAM2_BA, + output SDRAM2_CLK, + +`else + //////////// VGA /////////// + output [5:0] VGA_R, + output [5:0] VGA_G, + output [5:0] VGA_B, + inout VGA_HS, // VGA_HS is secondary SD card detect when VGA_EN = 1 (inactive) + output VGA_VS, + input VGA_EN, // active low + + /////////// AUDIO ////////// + output AUDIO_L, + output AUDIO_R, + output AUDIO_SPDIF, + + //////////// SDIO /////////// + inout [3:0] SDIO_DAT, + inout SDIO_CMD, + output SDIO_CLK, + //////////// I/O /////////// output LED_USER, output LED_HDD, @@ -76,12 +105,23 @@ module sys_top input BTN_USER, input BTN_OSD, input BTN_RESET, +`endif - //////////// SDIO /////////// - inout [3:0] SDIO_DAT, - inout SDIO_CMD, - output SDIO_CLK, - input SDIO_CD, + ////////// I/O ALT ///////// + output SD_SPI_CS, + input SD_SPI_MISO, + output SD_SPI_CLK, + output SD_SPI_MOSI, + + inout SDCD_SPDIF, + output IO_SCL, + inout IO_SDA, + + ////////// ADC ////////////// + output ADC_SCK, + input ADC_SDO, + output ADC_SDI, + output ADC_CONVST, ////////// MB KEY /////////// input [1:0] KEY, @@ -90,14 +130,42 @@ module sys_top input [3:0] SW, ////////// MB LED /////////// - output [7:0] LED + output [7:0] LED, + + ///////// USER IO /////////// + inout [6:0] USER_IO ); +////////////////////// Secondary SD /////////////////////////////////// +wire SD_CS, SD_CLK, SD_MOSI; -assign SDIO_DAT[2:1] = 2'bZZ; +`ifdef ARCADE_SYS + assign SD_CS = 1'bZ; + assign SD_CLK = 1'bZ; + assign SD_MOSI = 1'bZ; +`else + `ifndef DUAL_SDRAM + wire sd_miso = SW[3] | SDIO_DAT[0]; + `else + wire sd_miso = 1; + `endif + wire SD_MISO = mcp_sdcd ? sd_miso : SD_SPI_MISO; +`endif +`ifndef DUAL_SDRAM + assign SDIO_DAT[2:1]= 2'bZZ; + assign SDIO_DAT[3] = SW[3] ? 1'bZ : SD_CS; + assign SDIO_CLK = SW[3] ? 1'bZ : SD_CLK; + assign SDIO_CMD = SW[3] ? 1'bZ : SD_MOSI; + assign SD_SPI_CS = mcp_sdcd ? ((~VGA_EN & sog & ~cs1) ? 1'b1 : 1'bZ) : SD_CS; +`else + assign SD_SPI_CS = mcp_sdcd ? 1'bZ : SD_CS; +`endif -////////////////////////// LEDs /////////////////////////////////////// +assign SD_SPI_CLK = mcp_sdcd ? 1'bZ : SD_CLK; +assign SD_SPI_MOSI = mcp_sdcd ? 1'bZ : SD_MOSI; + +////////////////////// LEDs/Buttons /////////////////////////////////// reg [7:0] led_overtake = 0; reg [7:0] led_state = 0; @@ -105,16 +173,39 @@ reg [7:0] led_state = 0; wire led_p = led_power[1] ? ~led_power[0] : 1'b0; wire led_d = led_disk[1] ? ~led_disk[0] : ~(led_disk[0] | gp_out[29]); wire led_u = ~led_user; +wire led_locked; -assign LED_POWER = led_p ? 1'bZ : 1'b0; -assign LED_HDD = led_d ? 1'bZ : 1'b0; -assign LED_USER = led_u ? 1'bZ : 1'b0; +`ifndef DUAL_SDRAM + assign LED_POWER = (SW[3] | led_p) ? 1'bZ : 1'b0; + assign LED_HDD = (SW[3] | led_d) ? 1'bZ : 1'b0; + assign LED_USER = (SW[3] | led_u) ? 1'bZ : 1'b0; +`endif //LEDs on main board -assign LED = (led_overtake & led_state) | (~led_overtake & {3'b000, ~led_p, 1'b0, ~led_d, 1'b0, ~led_u}); +assign LED = (led_overtake & led_state) | (~led_overtake & {1'b0,led_locked,1'b0, ~led_p, 1'b0, ~led_d, 1'b0, ~led_u}); + +wire btn_r, btn_o, btn_u; +`ifdef DUAL_SDRAM + assign {btn_r,btn_o,btn_u} = {mcp_btn[1],mcp_btn[2],mcp_btn[0]}; +`else + assign {btn_r,btn_o,btn_u} = ~{BTN_RESET,BTN_OSD,BTN_USER} | {mcp_btn[1],mcp_btn[2],mcp_btn[0]}; +`endif + +wire [2:0] mcp_btn; +wire mcp_sdcd; +mcp23009 mcp23009 +( + .clk(FPGA_CLK2_50), + + .btn(mcp_btn), + .led({led_p, led_d, led_u}), + .sd_cd(mcp_sdcd), + + .scl(IO_SCL), + .sda(IO_SDA) +); -////////////////////////// Buttons /////////////////////////////////// reg btn_user, btn_osd; always @(posedge FPGA_CLK2_50) begin integer div; @@ -123,46 +214,48 @@ always @(posedge FPGA_CLK2_50) begin div <= div + 1'b1; if(div > 100000) div <= 0; - + if(!div) begin - deb_user <= {deb_user[6:0], ~(BTN_USER & KEY[1])}; + deb_user <= {deb_user[6:0], btn_u | ~KEY[1]}; if(&deb_user) btn_user <= 1; if(!deb_user) btn_user <= 0; - deb_osd <= {deb_osd[6:0], ~(BTN_OSD & KEY[0])}; + deb_osd <= {deb_osd[6:0], btn_o | ~KEY[0]}; if(&deb_osd) btn_osd <= 1; if(!deb_osd) btn_osd <= 0; end end -reg btn_reset = 1; -always @(posedge FPGA_CLK2_50) btn_reset <= BTN_RESET; - - ///////////////////////// HPS I/O ///////////////////////////////////// // gp_in[31] = 0 - quick flag that FPGA is initialized (HPS reads 1 when FPGA is not in user mode) // used to avoid lockups while JTAG loading -wire [31:0] gp_in = {1'b0, btn_user, btn_osd, 9'd0, io_ver, io_ack, io_wide, io_dout}; +wire [31:0] gp_in = {1'b0, btn_user | btn[1], btn_osd | btn[0], SW[3], 8'd0, io_ver, io_ack, io_wide, io_dout}; wire [31:0] gp_out; -wire [1:0] io_ver = 1; // 0 - standard MiST I/O (for quick porting of complex MiST cores). 1 - optimized HPS I/O. 2,3 - reserved for future. +wire [1:0] io_ver = 1; // 0 - standard MiST I/O (for quick porting of complex MiST cores). 1 - optimized HPS I/O. 2,3 - reserved for future. wire io_wait; wire io_wide; wire [15:0] io_dout; -wire [15:0] io_din = gp_outr[15:0]; -wire io_clk = gp_outr[17]; -wire io_fpga = gp_outr[18]; -wire io_osd = gp_outr[19]; -wire io_uio = gp_outr[20]; -//wire io_sdd = gp_outr[21]; // used only in ST core +wire [15:0] io_din = gp_outr[15:0]; +wire io_clk = gp_outr[17]; +wire io_ss0 = gp_outr[18]; +wire io_ss1 = gp_outr[19]; +wire io_ss2 = gp_outr[20]; + +`ifndef DEBUG_NOHDMI +wire io_osd_hdmi = io_ss1 & ~io_ss0; +`endif + +wire io_fpga = ~io_ss1 & io_ss0; +wire io_uio = ~io_ss1 & io_ss2; reg io_ack; reg rack; wire io_strobe = ~rack & io_clk; always @(posedge clk_sys) begin - if(~io_wait | io_strobe) begin + if(~(io_wait | vs_wait) | io_strobe) begin rack <= io_clk; io_ack <= rack; end @@ -175,7 +268,11 @@ always @(posedge clk_sys) begin gp_outd <= gp_out; end -wire [7:0] core_type = 'hA4; // A4 - generic core. +`ifdef DUAL_SDRAM + wire [7:0] core_type = 'hA8; // generic core, dual SDRAM. +`else + wire [7:0] core_type = 'hA4; // generic core. +`endif // HPS will not communicate to core if magic is different wire [31:0] core_magic = {24'h5CA623, core_type}; @@ -189,15 +286,24 @@ cyclonev_hps_interface_mpu_general_purpose h2f_gp reg [15:0] cfg; -reg cfg_got = 0; -reg cfg_set = 0; -//wire [2:0] hdmi_res = cfg[10:8]; -wire dvi_mode = cfg[7]; -wire audio_96k = cfg[6]; -wire ypbpr_en = cfg[5]; -wire csync = cfg[3]; -`ifndef LITE -wire vga_scaler= cfg[2]; +reg cfg_set = 0; +wire vga_fb = cfg[12]; +wire [1:0] hdmi_limited = {cfg[11],cfg[8]}; + +`ifdef DEBUG_NOHDMI +wire direct_video = 1; +`else +wire direct_video = cfg[10]; +`endif + +wire dvi_mode = cfg[7]; +wire audio_96k = cfg[6]; +wire csync_en = cfg[3]; +wire ypbpr_en = cfg[5]; +wire io_osd_vga = io_ss1 & ~io_ss2; +`ifndef DUAL_SDRAM + wire sog = cfg[9]; + wire vga_scaler = cfg[2]; `endif reg cfg_custom_t = 0; @@ -206,43 +312,90 @@ reg [31:0] cfg_custom_p2; reg [4:0] vol_att = 0; -reg vip_newcfg = 0; +reg [6:0] coef_addr; +reg [8:0] coef_data; +reg coef_wr = 0; + +wire [7:0] ARX, ARY; +reg [11:0] VSET = 0, HSET = 0; +reg FREESCALE = 0; +reg [2:0] scaler_flt; +reg lowlat = 0; +reg cfg_dis = 0; + +reg vs_wait = 0; +reg [11:0] vs_line = 0; + +reg scaler_out = 0; + +reg [31:0] aflt_rate = 7056000; +reg [39:0] acx = 4258969; +reg [7:0] acx0 = 3; +reg [7:0] acx1 = 3; +reg [7:0] acx2 = 1; +reg [23:0] acy0 = -24'd6216759; +reg [23:0] acy1 = 24'd6143386; +reg [23:0] acy2 = -24'd2023767; +reg areset = 0; + always@(posedge clk_sys) begin reg [7:0] cmd; reg has_cmd; reg old_strobe; reg [7:0] cnt = 0; + reg vs_d0,vs_d1,vs_d2; + reg [4:0] acx_att; old_strobe <= io_strobe; + coef_wr <= 0; - if(~io_uio) has_cmd <= 0; + if(~io_uio) begin + has_cmd <= 0; + cmd <= 0; + areset <= 0; + acx_att <= 0; + acx <= acx >> acx_att; + end else if(~old_strobe & io_strobe) begin if(!has_cmd) begin has_cmd <= 1; cmd <= io_din[7:0]; cnt <= 0; + if(io_din[7:0] == 'h30) vs_wait <= 1; + if(io_din[7:0] == 'h39) begin + aflt_rate <= 7056000; + acx <= 4258969; + acx0 <= 3; + acx1 <= 3; + acx2 <= 1; + acy0 <= -24'd6216759; + acy1 <= 24'd6143386; + acy2 <= -24'd2023767; + areset <= 1; + end end else begin if(cmd == 1) begin cfg <= io_din; cfg_set <= 1; + scaler_out <= 1; end if(cmd == 'h20) begin cfg_set <= 0; cnt <= cnt + 1'd1; if(cnt<8) begin - if(!cnt) vip_newcfg <= ~cfg_ready; - case(cnt) - 0: if(WIDTH != io_din[11:0]) begin WIDTH <= io_din[11:0]; vip_newcfg <= 1; end - 1: if(HFP != io_din[11:0]) begin HFP <= io_din[11:0]; vip_newcfg <= 1; end - 2: if(HS != io_din[11:0]) begin HS <= io_din[11:0]; vip_newcfg <= 1; end - 3: if(HBP != io_din[11:0]) begin HBP <= io_din[11:0]; vip_newcfg <= 1; end - 4: if(HEIGHT != io_din[11:0]) begin HEIGHT <= io_din[11:0]; vip_newcfg <= 1; end - 5: if(VFP != io_din[11:0]) begin VFP <= io_din[11:0]; vip_newcfg <= 1; end - 6: if(VS != io_din[11:0]) begin VS <= io_din[11:0]; vip_newcfg <= 1; end - 7: if(VBP != io_din[11:0]) begin VBP <= io_din[11:0]; vip_newcfg <= 1; end + case(cnt[2:0]) + 0: if(WIDTH != io_din[11:0]) WIDTH <= io_din[11:0]; + 1: if(HFP != io_din[11:0]) HFP <= io_din[11:0]; + 2: if(HS != io_din[11:0]) HS <= io_din[11:0]; + 3: if(HBP != io_din[11:0]) HBP <= io_din[11:0]; + 4: if(HEIGHT != io_din[11:0]) HEIGHT <= io_din[11:0]; + 5: if(VFP != io_din[11:0]) VFP <= io_din[11:0]; + 6: if(VS != io_din[11:0]) VS <= io_din[11:0]; + 7: if(VBP != io_din[11:0]) VBP <= io_din[11:0]; endcase +`ifndef DEBUG_NOHDMI if(cnt == 1) begin cfg_custom_p1 <= 0; cfg_custom_p2 <= 0; @@ -255,26 +408,95 @@ always@(posedge clk_sys) begin if(cnt[1:0]==2) begin cfg_custom_p2[31:16] <= io_din; cfg_custom_t <= ~cfg_custom_t; - cnt[1:0] <= 0; + cnt[2:0] <= 3'b100; end + if(cnt == 8) {lowlat,cfg_dis} <= io_din[15:14]; +`endif end end + if(cmd == 'h2F) begin + cnt <= cnt + 1'd1; + case(cnt[3:0]) + 0: {LFB_EN,LFB_FLT,LFB_FMT} <= {io_din[15], io_din[14], io_din[5:0]}; + 1: LFB_BASE[15:0] <= io_din[15:0]; + 2: LFB_BASE[31:16] <= io_din[15:0]; + 3: LFB_WIDTH <= io_din[11:0]; + 4: LFB_HEIGHT <= io_din[11:0]; + 5: LFB_HMIN <= io_din[11:0]; + 6: LFB_HMAX <= io_din[11:0]; + 7: LFB_VMIN <= io_din[11:0]; + 8: LFB_VMAX <= io_din[11:0]; + endcase + end if(cmd == 'h25) {led_overtake, led_state} <= io_din; if(cmd == 'h26) vol_att <= io_din[4:0]; - if(cmd == 'h27) VSET <= io_din[11:0]; + if(cmd == 'h27) VSET <= io_din[11:0]; + if(cmd == 'h2A) {coef_wr,coef_addr,coef_data} <= {1'b1,io_din}; + if(cmd == 'h2B) scaler_flt <= io_din[2:0]; + if(cmd == 'h37) {FREESCALE,HSET} <= {io_din[15],io_din[11:0]}; + if(cmd == 'h38) vs_line <= io_din[11:0]; + if(cmd == 'h39) begin + cnt <= cnt + 1'd1; + case(cnt[3:0]) + 0: acx_att <= io_din[4:0]; + 1: aflt_rate[15:0] <= io_din; + 2: aflt_rate[31:16] <= io_din; + 3: acx[15:0] <= io_din; + 4: acx[31:16] <= io_din; + 5: acx[39:32] <= io_din[7:0]; + 6: acx0 <= io_din[7:0]; + 7: acx1 <= io_din[7:0]; + 8: acx2 <= io_din[7:0]; + 9: acy0[15:0] <= io_din; + 10: acy0[23:16] <= io_din[7:0]; + 11: acy1[15:0] <= io_din; + 12: acy1[23:16] <= io_din[7:0]; + 13: acy2[15:0] <= io_din; + 14: acy2[23:16] <= io_din[7:0]; + endcase + end end end + + vs_d0 <= HDMI_TX_VS; + if(vs_d0 == HDMI_TX_VS) vs_d1 <= vs_d0; + + vs_d2 <= vs_d1; + if(~vs_d2 & vs_d1) vs_wait <= 0; end -always @(posedge clk_sys) begin - reg vsd, vsd2; - if(~cfg_ready || ~cfg_set) cfg_got <= cfg_set; - else begin - vsd <= HDMI_TX_VS; - vsd2 <= vsd; - if(~vsd2 & vsd) cfg_got <= cfg_set; - end -end +cyclonev_hps_interface_peripheral_uart uart +( + .ri(0) +`ifndef ARCADE_SYS + , + .dsr(uart_dsr), + .dcd(uart_dsr), + .dtr(uart_dtr), + + .cts(uart_cts), + .rts(uart_rts), + .rxd(uart_rxd), + .txd(uart_txd) +`endif +); + +wire aspi_sck,aspi_mosi,aspi_ss,aspi_miso; +cyclonev_hps_interface_peripheral_spi_master spi +( + .sclk_out(aspi_sck), + .txd(aspi_mosi), // mosi + .rxd(aspi_miso), // miso + + .ss_0_n(aspi_ss), + .ss_in_n(1) +); + +wire [63:0] f2h_irq = {video_sync,HDMI_TX_VS}; +cyclonev_hps_interface_interrupts interrupts +( + .irq(f2h_irq) +); /////////////////////////// RESET /////////////////////////////////// @@ -296,193 +518,24 @@ always @(posedge FPGA_CLK2_50) begin resetd2 <= resetd; end -wire clk_ctl; - -///////////////////////// VIP version /////////////////////////////// - -wire iHdmiClk = ~HDMI_TX_CLK; // Internal HDMI clock, inverted in relation to external clock - -`ifndef LITE +//////////////////// SYSTEM MEMORY & SCALER ///////////////////////// wire reset; -vip vip -( - //Reset/Clock - .reset_reset_req(reset_req | ~cfg_ready), - .reset_reset(reset), - .reset_reset_vip(0), +wire clk_100m; - //DE10-nano has no reset signal on GPIO, so core has to emulate cold reset button. - .reset_cold_req(~btn_reset), - .reset_warm_req(0), - - //control - .ctl_address(ctl_address), - .ctl_write(ctl_write), - .ctl_writedata(ctl_writedata), - .ctl_waitrequest(ctl_waitrequest), - .ctl_clock(clk_ctl), - .ctl_reset(ctl_reset), - - //64-bit DDR3 RAM access - .ramclk1_clk(ram_clk), - .ram1_address(ram_address), - .ram1_burstcount(ram_burstcount), - .ram1_waitrequest(ram_waitrequest), - .ram1_readdata(ram_readdata), - .ram1_readdatavalid(ram_readdatavalid), - .ram1_read(ram_read), - .ram1_writedata(ram_writedata), - .ram1_byteenable(ram_byteenable), - .ram1_write(ram_write), - - //Spare 64-bit DDR3 RAM access - //currently unused - //can combine with ram1 to make a wider RAM bus (although will increase the latency) - .ramclk2_clk(0), - .ram2_address(0), - .ram2_burstcount(0), - .ram2_waitrequest(), - .ram2_readdata(), - .ram2_readdatavalid(), - .ram2_read(0), - .ram2_writedata(0), - .ram2_byteenable(0), - .ram2_write(0), - - //Video input - .in_clk(clk_vid), - .in_data({r_out, g_out, b_out}), - .in_de(de), - .in_v_sync(vs), - .in_h_sync(hs), - .in_ce(ce_pix), - .in_f(0), - - //HDMI output - .hdmi_clk(iHdmiClk), - .hdmi_data(hdmi_data), - .hdmi_de(hdmi_de), - .hdmi_v_sync(HDMI_TX_VS), - .hdmi_h_sync(HDMI_TX_HS) -); - -wire [8:0] ctl_address; -wire ctl_write; -wire [31:0] ctl_writedata; -wire ctl_waitrequest; -wire ctl_reset; -wire [7:0] ARX, ARY; - -vip_config vip_config -( - .clk(clk_ctl), - .reset(ctl_reset), - - .ARX(ARX), - .ARY(ARY), - .CFG_SET(vip_newcfg & cfg_got), - - .WIDTH(WIDTH), - .HFP(HFP), - .HBP(HBP), - .HS(HS), - .HEIGHT(HEIGHT), - .VFP(VFP), - .VBP(VBP), - .VS(VS), - .VSET(VSET), - - .address(ctl_address), - .write(ctl_write), - .writedata(ctl_writedata), - .waitrequest(ctl_waitrequest) -); -`endif - - -///////////////////////// Lite version //////////////////////////////// - -`ifdef LITE - -wire [11:0] x; -wire [11:0] y; - -sync_vg #(.X_BITS(12), .Y_BITS(12)) sync_vg -( - .clk(iHdmiClk), - .reset(reset), - .v_total(HEIGHT+VFP+VBP+VS), - .v_fp(VFP), - .v_bp(VBP), - .v_sync(VS), - .h_total(WIDTH+HFP+HBP+HS), - .h_fp(HFP), - .h_bp(HBP), - .h_sync(HS), - .hv_offset(0), - .vde_out(vde), - .hde_out(hde), - .vs_out(vs_hdmi), - .v_count_out(), - .h_count_out(), - .x_out(x), - .y_out(y), - .hs_out(hs_hdmi) -); - -wire vde, hde; -wire vs_hdmi; -wire hs_hdmi; - -/* - -pattern_vg -#( - .B(8), // Bits per channel - .X_BITS(12), - .Y_BITS(12), - .FRACTIONAL_BITS(12) // Number of fractional bits for ramp pattern -) -pattern_vg -( - .reset(reset), - .clk_in(iHdmiClk), - .x(x), - .y(y), - .vn_in(vs_hdmi), - .hn_in(hs_hdmi), - .dn_in(vde & hde), - .r_in(0), - .g_in(0), - .b_in(0), - .vn_out(HDMI_TX_VS), - .hn_out(HDMI_TX_HS), - .den_out(HDMI_TX_DE), - .r_out(hdmi_data[23:16]), - .g_out(hdmi_data[15:8]), - .b_out(hdmi_data[7:0]), - .total_active_pix(WIDTH), - .total_active_lines(HEIGHT), - .pattern(4), - .ramp_step(20'h0333) -); -*/ - -wire reset; sysmem_lite sysmem ( //Reset/Clock - .reset_reset_req(reset_req), - .reset_reset(reset), - .ctl_clock(clk_ctl), + .reset_core_req(reset_req), + .reset_out(reset), + .clock(clk_100m), //DE10-nano has no reset signal on GPIO, so core has to emulate cold reset button. - .reset_cold_req(~btn_reset), - .reset_warm_req(0), + .reset_hps_cold_req(btn_r), +`ifdef USE_DDRAM //64-bit DDR3 RAM access - .ramclk1_clk(ram_clk), + .ram1_clk(ram_clk), .ram1_address(ram_address), .ram1_burstcount(ram_burstcount), .ram1_waitrequest(ram_waitrequest), @@ -492,23 +545,23 @@ sysmem_lite sysmem .ram1_writedata(ram_writedata), .ram1_byteenable(ram_byteenable), .ram1_write(ram_write), +`endif - //Spare 64-bit DDR3 RAM access - //currently unused - //can combine with ram1 to make a wider RAM bus (although will increase the latency) - .ramclk2_clk(0), - .ram2_address(0), - .ram2_burstcount(0), - .ram2_waitrequest(), - .ram2_readdata(), - .ram2_readdatavalid(), - .ram2_read(0), - .ram2_writedata(0), - .ram2_byteenable(0), - .ram2_write(0), + //64-bit DDR3 RAM access + .ram2_clk(clk_audio), + .ram2_address(ram2_address), + .ram2_burstcount(ram2_burstcount), + .ram2_waitrequest(ram2_waitrequest), + .ram2_readdata(ram2_readdata), + .ram2_readdatavalid(ram2_readdatavalid), + .ram2_read(ram2_read), + .ram2_writedata(ram2_writedata), + .ram2_byteenable(ram2_byteenable), + .ram2_write(ram2_write), + //128-bit DDR3 RAM access // HDMI frame buffer - .vbuf_clk(clk_ctl), + .vbuf_clk(clk_100m), .vbuf_address(vbuf_address), .vbuf_burstcount(vbuf_burstcount), .vbuf_waitrequest(vbuf_waitrequest), @@ -520,6 +573,48 @@ sysmem_lite sysmem .vbuf_read(vbuf_read) ); +wire [28:0] ram2_address; +wire [7:0] ram2_burstcount; +wire [7:0] ram2_byteenable; +wire ram2_waitrequest; +wire [63:0] ram2_readdata; +wire [63:0] ram2_writedata; +wire ram2_readdatavalid; +wire ram2_read; +wire ram2_write; +wire [7:0] ram2_bcnt; + +ddr_svc ddr_svc +( + .clk(clk_audio), + + .ram_waitrequest(ram2_waitrequest), + .ram_burstcnt(ram2_burstcount), + .ram_addr(ram2_address), + .ram_readdata(ram2_readdata), + .ram_read_ready(ram2_readdatavalid), + .ram_read(ram2_read), + .ram_writedata(ram2_writedata), + .ram_byteenable(ram2_byteenable), + .ram_write(ram2_write), + .ram_bcnt(ram2_bcnt), + + .ch0_addr(alsa_address), + .ch0_burst(1), + .ch0_data(alsa_readdata), + .ch0_req(alsa_req), + .ch0_ready(alsa_ready), + + .ch1_addr(pal_addr), + .ch1_burst(128), + .ch1_data(pal_data), + .ch1_req(pal_req), + .ch1_ready(pal_wr) +); + +wire clk_pal = clk_audio; + + wire [27:0] vbuf_address; wire [7:0] vbuf_burstcount; wire vbuf_waitrequest; @@ -530,57 +625,247 @@ wire [127:0] vbuf_writedata; wire [15:0] vbuf_byteenable; wire vbuf_write; -assign HDMI_TX_VS = vs_hdmi; -assign HDMI_TX_HS = hs_hdmi; +wire [23:0] hdmi_data; +wire hdmi_vs, hdmi_hs, hdmi_de, hdmi_vbl; -hdmi_lite hdmi_lite -( - .reset(reset), - - .clk_video(clk_vid), - .ce_pixel(ce_pix), - .video_vs(vs), - .video_de(de), - .video_d({r_out,g_out,b_out}), - - .clk_hdmi(HDMI_TX_CLK), - .hdmi_hde(hde), - .hdmi_vde(vde), - .hdmi_d(hdmi_data), - .hdmi_de(hdmi_de), - - .screen_w(WIDTH), - .screen_h(HEIGHT), - .quadbuf(1), - .scale_x(0), - .scale_y(0), - .scale_auto(1), - - .clk_vbuf(clk_ctl), - .vbuf_address(vbuf_address), - .vbuf_burstcount(vbuf_burstcount), - .vbuf_waitrequest(vbuf_waitrequest), - .vbuf_writedata(vbuf_writedata), - .vbuf_byteenable(vbuf_byteenable), - .vbuf_write(vbuf_write), - .vbuf_readdata(vbuf_readdata), - .vbuf_readdatavalid(vbuf_readdatavalid), - .vbuf_read(vbuf_read) -); +`ifndef DEBUG_NOHDMI +wire clk_hdmi = hdmi_clk_out; +ascal +#( + .RAMBASE(32'h20000000), +`ifndef USE_FB + .PALETTE2("false"), `endif + .N_DW(128), + .N_AW(28) +) +ascal +( + .reset_na (~reset_req), + .run (1), + .freeze (0), + + .i_clk (clk_ihdmi), + .i_ce (ce_hpix), + .i_r (hr_out), + .i_g (hg_out), + .i_b (hb_out), + .i_hs (hhs_fix), + .i_vs (hvs_fix), + .i_fl (f1), + .i_de (hde_emu), + .iauto (1), + .himin (0), + .himax (0), + .vimin (0), + .vimax (0), + + .o_clk (clk_hdmi), + .o_ce (scaler_out), + .o_r (hdmi_data[23:16]), + .o_g (hdmi_data[15:8]), + .o_b (hdmi_data[7:0]), + .o_hs (hdmi_hs), + .o_vs (hdmi_vs), + .o_de (hdmi_de), + .o_vbl (hdmi_vbl), + .o_lltune (lltune), + .htotal (WIDTH + HFP + HBP + HS), + .hsstart (WIDTH + HFP), + .hsend (WIDTH + HFP + HS), + .hdisp (WIDTH), + .hmin (hmin), + .hmax (hmax), + .vtotal (HEIGHT + VFP + VBP + VS), + .vsstart (HEIGHT + VFP), + .vsend (HEIGHT + VFP + VS), + .vdisp (HEIGHT), + .vmin (vmin), + .vmax (vmax), + + .mode ({~lowlat,LFB_EN ? LFB_FLT : |scaler_flt,2'b00}), + .poly_clk (clk_sys), + .poly_a (coef_addr), + .poly_dw (coef_data), + .poly_wr (coef_wr), + + .pal1_clk (clk_pal), + .pal1_dw (pal_d), + .pal1_a (pal_a), + .pal1_wr (pal_wr), + +`ifdef USE_FB + .pal2_clk (fb_pal_clk), + .pal2_dw (fb_pal_d), + .pal2_dr (fb_pal_q), + .pal2_a (fb_pal_a), + .pal2_wr (fb_pal_wr), + .pal_n (fb_en), +`endif + + .o_fb_ena (FB_EN), + .o_fb_hsize (FB_WIDTH), + .o_fb_vsize (FB_HEIGHT), + .o_fb_format (FB_FMT), + .o_fb_base (FB_BASE), + .o_fb_stride (FB_STRIDE), + + .avl_clk (clk_100m), + .avl_waitrequest (vbuf_waitrequest), + .avl_readdata (vbuf_readdata), + .avl_readdatavalid(vbuf_readdatavalid), + .avl_burstcount (vbuf_burstcount), + .avl_writedata (vbuf_writedata), + .avl_address (vbuf_address), + .avl_write (vbuf_write), + .avl_read (vbuf_read), + .avl_byteenable (vbuf_byteenable) +); +`endif + +reg LFB_EN = 0; +reg LFB_FLT = 0; +reg [5:0] LFB_FMT = 0; +reg [11:0] LFB_WIDTH = 0; +reg [11:0] LFB_HEIGHT = 0; +reg [11:0] LFB_HMIN = 0; +reg [11:0] LFB_HMAX = 0; +reg [11:0] LFB_VMIN = 0; +reg [11:0] LFB_VMAX = 0; +reg [31:0] LFB_BASE = 0; + +reg FB_EN = 0; +reg [5:0] FB_FMT = 0; +reg [11:0] FB_WIDTH = 0; +reg [11:0] FB_HEIGHT = 0; +reg [31:0] FB_BASE = 0; +reg [13:0] FB_STRIDE = 0; + +always @(posedge clk_sys) begin + FB_EN <= LFB_EN | fb_en; + if(LFB_EN) begin + FB_FMT <= LFB_FMT; + FB_WIDTH <= LFB_WIDTH; + FB_HEIGHT <= LFB_HEIGHT; + FB_BASE <= LFB_BASE; + FB_STRIDE <= 0; + end + else begin + FB_FMT <= fb_fmt; + FB_WIDTH <= fb_width; + FB_HEIGHT <= fb_height; + FB_BASE <= fb_base; + FB_STRIDE <= fb_stride; + end +end + +`ifdef USE_FB +reg fb_vbl; +always @(posedge clk_vid) fb_vbl <= hdmi_vbl; +`endif + +reg [11:0] hmin; +reg [11:0] hmax; +reg [11:0] vmin; +reg [11:0] vmax; + +always @(posedge clk_vid) begin + reg [31:0] wcalc; + reg [31:0] hcalc; + reg [2:0] state; + reg [11:0] videow; + reg [11:0] videoh; + reg [11:0] height; + reg [11:0] width; + + height <= (VSET && (VSET < HEIGHT)) ? VSET : HEIGHT; + width <= (HSET && (HSET < WIDTH)) ? HSET : WIDTH; + + state <= state + 1'd1; + case(state) + 0: if(LFB_EN) begin + hmin <= LFB_HMIN; + vmin <= LFB_VMIN; + hmax <= LFB_HMAX; + vmax <= LFB_VMAX; + state<= 0; + end + else if(ARX && ARY && !FREESCALE) begin + wcalc <= (height*ARX)/ARY; + hcalc <= (width*ARY)/ARX; + end + else begin + wcalc <= width; + hcalc <= height; + end + 6: begin + videow <= (wcalc > width) ? width : wcalc[11:0]; + videoh <= (hcalc > height) ? height : hcalc[11:0]; + end + 7: begin + hmin <= ((WIDTH - videow)>>1); + hmax <= ((WIDTH - videow)>>1) + videow - 1'd1; + vmin <= ((HEIGHT - videoh)>>1); + vmax <= ((HEIGHT - videoh)>>1) + videoh - 1'd1; + end + endcase +end + +`ifndef DEBUG_NOHDMI +wire [15:0] lltune; +pll_hdmi_adj pll_hdmi_adj +( + .clk(FPGA_CLK1_50), + .reset_na(~reset_req), + + .llena(lowlat), + .lltune({16{hdmi_config_done | cfg_dis}} & lltune), + .locked(led_locked), + .i_waitrequest(adj_waitrequest), + .i_write(adj_write), + .i_address(adj_address), + .i_writedata(adj_data), + .o_waitrequest(cfg_waitrequest), + .o_write(cfg_write), + .o_address(cfg_address), + .o_writedata(cfg_data) +); +`else + assign led_locked = 0; +`endif + +wire [63:0] pal_data; +wire [47:0] pal_d = {pal_data[55:32], pal_data[23:0]}; +wire [6:0] pal_a = ram2_bcnt[6:0]; +wire pal_wr; + +reg [28:0] pal_addr; +reg pal_req = 0; +always @(posedge clk_pal) begin + reg old_vs1, old_vs2; + + pal_addr <= LFB_BASE[31:3] - 29'd512; + + old_vs1 <= hdmi_vs; + old_vs2 <= old_vs1; + + if(~old_vs2 & old_vs1 & ~FB_FMT[2] & FB_FMT[1] & FB_FMT[0] & FB_EN) pal_req <= ~pal_req; +end ///////////////////////// HDMI output ///////////////////////////////// - +`ifndef DEBUG_NOHDMI +wire hdmi_clk_out; pll_hdmi pll_hdmi ( .refclk(FPGA_CLK1_50), .rst(reset_req), .reconfig_to_pll(reconfig_to_pll), .reconfig_from_pll(reconfig_from_pll), - .outclk_0(HDMI_TX_CLK) + .outclk_0(hdmi_clk_out) ); +`endif //1920x1080@60 PCLK=148.5MHz CEA reg [11:0] WIDTH = 1920; @@ -591,16 +876,19 @@ reg [11:0] HEIGHT = 1080; reg [11:0] VFP = 4; reg [11:0] VS = 5; reg [11:0] VBP = 36; -reg [11:0] VSET = 0; wire [63:0] reconfig_to_pll; wire [63:0] reconfig_from_pll; -wire cfg_waitrequest; -reg cfg_write; -reg [5:0] cfg_address; -reg [31:0] cfg_data; +wire cfg_waitrequest,adj_waitrequest; +wire cfg_write; +wire [5:0] cfg_address; +wire [31:0] cfg_data; +reg adj_write; +reg [5:0] adj_address; +reg [31:0] adj_data; -pll_hdmi_cfg pll_hdmi_cfg +`ifndef DEBUG_NOHDMI +pll_cfg pll_cfg ( .mgmt_clk(FPGA_CLK1_50), .mgmt_reset(reset_req), @@ -614,8 +902,18 @@ pll_hdmi_cfg pll_hdmi_cfg .reconfig_from_pll(reconfig_from_pll) ); -reg cfg_ready = 0; +reg cfg_got = 0; +always @(posedge clk_sys) begin + reg vsd, vsd2; + if(~cfg_ready || ~cfg_set) cfg_got <= cfg_set; + else begin + vsd <= HDMI_TX_VS; + vsd2 <= vsd; + if(~vsd2 & vsd) cfg_got <= cfg_set; + end +end +reg cfg_ready = 0; always @(posedge FPGA_CLK1_50) begin reg gotd = 0, gotd2 = 0; reg custd = 0, custd2 = 0; @@ -624,272 +922,546 @@ always @(posedge FPGA_CLK1_50) begin gotd <= cfg_got; gotd2 <= gotd; - cfg_write <= 0; + adj_write <= 0; custd <= cfg_custom_t; custd2 <= custd; if(custd2 != custd & ~gotd) begin - cfg_address <= cfg_custom_p1; - cfg_data <= cfg_custom_p2; - cfg_write <= 1; + adj_address <= cfg_custom_p1; + adj_data <= cfg_custom_p2; + adj_write <= 1; end if(~gotd2 & gotd) begin - cfg_address <= 2; - cfg_data <= 0; - cfg_write <= 1; + adj_address <= 2; + adj_data <= 0; + adj_write <= 1; end - old_wait <= cfg_waitrequest; - if(old_wait & ~cfg_waitrequest & gotd) cfg_ready <= 1; + old_wait <= adj_waitrequest; + if(old_wait & ~adj_waitrequest & gotd) cfg_ready <= 1; end +`else + +wire cfg_ready = 1; + +`endif + +wire hdmi_config_done; hdmi_config hdmi_config ( .iCLK(FPGA_CLK1_50), - .iRST_N(cfg_ready & ~HDMI_TX_INT), + .iRST_N(cfg_ready & ~HDMI_TX_INT & ~cfg_dis), + .done(hdmi_config_done), .I2C_SCL(HDMI_I2C_SCL), .I2C_SDA(HDMI_I2C_SDA), .dvi_mode(dvi_mode), - .audio_96k(audio_96k) + .audio_96k(audio_96k), + .limited(hdmi_limited), + .ypbpr(ypbpr_en & direct_video) ); -wire [23:0] hdmi_data; -wire hdmi_de; +`ifndef DEBUG_NOHDMI +wire [23:0] hdmi_data_sl; +wire hdmi_de_sl, hdmi_vs_sl, hdmi_hs_sl; + +`ifdef USE_FB +reg dis_output; +always @(posedge clk_hdmi) begin + reg dis; + dis <= fb_force_blank; + dis_output <= dis; +end +`else +wire dis_output = 0; +`endif + +scanlines #(1) HDMI_scanlines +( + .clk(clk_hdmi), + + .scanlines(scanlines), + .din(dis_output ? 24'd0 : hdmi_data), + .hs_in(hdmi_hs), + .vs_in(hdmi_vs), + .de_in(hdmi_de), + + .dout(hdmi_data_sl), + .hs_out(hdmi_hs_sl), + .vs_out(hdmi_vs_sl), + .de_out(hdmi_de_sl) +); + +wire [23:0] hdmi_data_osd; +wire hdmi_de_osd, hdmi_vs_osd, hdmi_hs_osd; osd hdmi_osd ( .clk_sys(clk_sys), - .io_osd(io_osd), + .io_osd(io_osd_hdmi), .io_strobe(io_strobe), .io_din(io_din), - .clk_video(iHdmiClk), - .din(hdmi_data), - .dout(HDMI_TX_D), - .de_in(hdmi_de), - .de_out(HDMI_TX_DE) -); + .clk_video(clk_hdmi), + .din(hdmi_data_sl), + .hs_in(hdmi_hs_sl), + .vs_in(hdmi_vs_sl), + .de_in(hdmi_de_sl), -assign HDMI_MCLK = 0; -i2s i2s + .dout(hdmi_data_osd), + .hs_out(hdmi_hs_osd), + .vs_out(hdmi_vs_osd), + .de_out(hdmi_de_osd) +`ifndef ARCADE_SYS + , + .osd_status(osd_status) +`endif +); +`endif + +wire hdmi_cs_osd; +csync csync_hdmi(clk_hdmi, hdmi_hs_osd, hdmi_vs_osd, hdmi_cs_osd); + +reg [23:0] dv_data; +reg dv_hs, dv_vs, dv_de; +always @(posedge clk_vid) begin + reg [23:0] dv_d1, dv_d2; + reg dv_de1, dv_de2, dv_hs1, dv_hs2, dv_vs1, dv_vs2; + reg [12:0] vsz, vcnt; + reg old_hs, old_vs; + reg vde; + reg [3:0] hss; + + if(ce_pix) begin + hss <= (hss << 1) | vga_hs_osd; + + old_hs <= vga_hs_osd; + if(~old_hs && vga_hs_osd) begin + old_vs <= vga_vs_osd; + if(~&vcnt) vcnt <= vcnt + 1'd1; + if(~old_vs & vga_vs_osd & ~f1) vsz <= vcnt; + if(old_vs & ~vga_vs_osd) vcnt <= 0; + + if(vcnt == 1) vde <= 1; + if(vcnt == vsz - 3) vde <= 0; + end + + dv_de1 <= !{hss,vga_hs_osd} && vde; + dv_hs1 <= csync_en ? vga_cs_osd : vga_hs_osd; + dv_vs1 <= vga_vs_osd; + end + + dv_d1 <= vga_data_osd; + dv_d2 <= dv_d1; + dv_de2 <= dv_de1; + dv_hs2 <= dv_hs1; + dv_vs2 <= dv_vs1; + + dv_data<= dv_d2; + dv_de <= dv_de2; + dv_hs <= dv_hs2; + dv_vs <= dv_vs2; +end + +wire hdmi_tx_clk; +`ifndef DEBUG_NOHDMI +cyclonev_clkselect hdmi_clk_sw +( + .clkselect({1'b1, ~vga_fb & direct_video}), + .inclk({clk_vid, hdmi_clk_out, 2'b00}), + .outclk(hdmi_tx_clk) +); +`else +assign hdmi_tx_clk = clk_vid; +`endif + +altddio_out +#( + .extend_oe_disable("OFF"), + .intended_device_family("Cyclone V"), + .invert_output("OFF"), + .lpm_hint("UNUSED"), + .lpm_type("altddio_out"), + .oe_reg("UNREGISTERED"), + .power_up_high("OFF"), + .width(1) +) +hdmiclk_ddr ( - .reset(~cfg_ready), - .clk_sys(FPGA_CLK3_50), - .half_rate(~audio_96k), - - .sclk(HDMI_SCLK), - .lrclk(HDMI_LRCLK), - .sdata(HDMI_I2S), - - //Could inverse the MSB but it will shift 0 level to -MAX level - .left_chan (audio_l >> !audio_s), - .right_chan(audio_r >> !audio_s) + .datain_h(1'b0), + .datain_l(1'b1), + .outclock(hdmi_tx_clk), + .dataout(HDMI_TX_CLK), + .aclr(1'b0), + .aset(1'b0), + .oe(1'b1), + .outclocken(1'b1), + .sclr(1'b0), + .sset(1'b0) ); +reg hdmi_out_hs; +reg hdmi_out_vs; +reg hdmi_out_de; +reg [23:0] hdmi_out_d; + +always @(posedge hdmi_tx_clk) begin + reg hs,vs,de; + reg [23:0] d; + + hs <= (~vga_fb & direct_video) ? dv_hs : (direct_video & csync_en) ? hdmi_cs_osd : hdmi_hs_osd; + vs <= (~vga_fb & direct_video) ? dv_vs : hdmi_vs_osd; + de <= (~vga_fb & direct_video) ? dv_de : hdmi_de_osd; + d <= (~vga_fb & direct_video) ? dv_data : hdmi_data_osd; + + hdmi_out_hs <= hs; + hdmi_out_vs <= vs; + hdmi_out_de <= de; + hdmi_out_d <= d; +end + +assign HDMI_TX_HS = hdmi_out_hs; +assign HDMI_TX_VS = hdmi_out_vs; +assign HDMI_TX_DE = hdmi_out_de; +assign HDMI_TX_D = hdmi_out_d; ///////////////////////// VGA output ////////////////////////////////// -wire [23:0] vga_q; +wire [23:0] vga_data_sl; +wire vga_de_sl, vga_vs_sl, vga_hs_sl; +scanlines #(0) VGA_scanlines +( + .clk(clk_vid), + + .scanlines(scanlines), + .din(de_emu ? {r_out, g_out, b_out} : 24'd0), + .hs_in(hs_fix), + .vs_in(vs_fix), + .de_in(de_emu), + + .dout(vga_data_sl), + .hs_out(vga_hs_sl), + .vs_out(vga_vs_sl), + .de_out(vga_de_sl) +); + +wire [23:0] vga_data_osd; +wire vga_vs_osd, vga_hs_osd; osd vga_osd ( .clk_sys(clk_sys), - .io_osd(io_osd), + .io_osd(io_osd_vga), .io_strobe(io_strobe), .io_din(io_din), .clk_video(clk_vid), - .din(de ? {r_out, g_out, b_out} : 24'd0), - .dout(vga_q), - .de_in(de) + .din(vga_data_sl), + .hs_in(vga_hs_sl), + .vs_in(vga_vs_sl), + .de_in(vga_de_sl), + + .dout(vga_data_osd), + .hs_out(vga_hs_osd), + .vs_out(vga_vs_osd) ); -wire [23:0] vga_o; +wire vga_cs_osd; +csync csync_vga(clk_vid, vga_hs_osd, vga_vs_osd, vga_cs_osd); -vga_out vga_out -( - .ypbpr_full(1), - .ypbpr_en(ypbpr_en), - .dout(vga_o), -`ifdef LITE - .din(vga_q) -`else - .din(vga_scaler ? {24{HDMI_TX_DE}} & HDMI_TX_D : vga_q) -`endif -); +`ifndef DUAL_SDRAM + wire [23:0] vga_o; + vga_out vga_out + ( + .ypbpr_full(0), + .ypbpr_en(ypbpr_en), + .dout(vga_o), + .din((vga_fb | vga_scaler) ? {24{hdmi_de_osd}} & hdmi_data_osd : vga_data_osd) + ); -`ifdef LITE - wire vs1 = vs; - wire hs1 = hs; -`else - wire vs1 = vga_scaler ? HDMI_TX_VS : vs; - wire hs1 = vga_scaler ? HDMI_TX_HS : hs; + wire vs1 = (vga_fb | vga_scaler) ? hdmi_vs_osd : vga_vs_osd; + wire hs1 = (vga_fb | vga_scaler) ? hdmi_hs_osd : vga_hs_osd; + wire cs1 = (vga_fb | vga_scaler) ? hdmi_cs_osd : vga_cs_osd; + + assign VGA_VS = (VGA_EN | SW[3]) ? 1'bZ : csync_en ? 1'b1 : ~vs1; + assign VGA_HS = (VGA_EN | SW[3]) ? 1'bZ : csync_en ? ~cs1 : ~hs1; + assign VGA_R = (VGA_EN | SW[3]) ? 6'bZZZZZZ : vga_o[23:18]; + assign VGA_G = (VGA_EN | SW[3]) ? 6'bZZZZZZ : vga_o[15:10]; + assign VGA_B = (VGA_EN | SW[3]) ? 6'bZZZZZZ : vga_o[7:2]; `endif -assign VGA_VS = VGA_EN ? 1'bZ : csync ? 1'b1 : ~vs1; -assign VGA_HS = VGA_EN ? 1'bZ : csync ? ~(vs1 ^ hs1) : ~hs1; -assign VGA_R = VGA_EN ? 6'bZZZZZZ : vga_o[23:18]; -assign VGA_G = VGA_EN ? 6'bZZZZZZ : vga_o[15:10]; -assign VGA_B = VGA_EN ? 6'bZZZZZZ : vga_o[7:2]; +reg video_sync = 0; +always @(posedge clk_vid) begin + reg [11:0] line_cnt = 0; + reg [11:0] sync_line = 0; + reg [1:0] hs_cnt = 0; + reg old_hs; + old_hs <= hs_fix; + if(~old_hs & hs_fix) begin + + video_sync <= (sync_line == line_cnt); + + line_cnt <= line_cnt + 1'd1; + if(~hs_cnt[1]) begin + hs_cnt <= hs_cnt + 1'd1; + if(hs_cnt[0]) begin + sync_line <= (line_cnt - vs_line); + line_cnt <= 0; + end + end + end + + if(de_emu) hs_cnt <= 0; +end ///////////////////////// Audio output //////////////////////////////// -wire al, ar, aspdif; +assign SDCD_SPDIF =(SW[3] & ~spdif) ? 1'b0 : 1'bZ; -sigma_delta_dac #(15) dac_l +`ifndef DUAL_SDRAM + wire analog_l, analog_r; + + assign AUDIO_SPDIF = SW[3] ? 1'bZ : SW[0] ? HDMI_LRCLK : spdif; + assign AUDIO_R = SW[3] ? 1'bZ : SW[0] ? HDMI_I2S : analog_r; + assign AUDIO_L = SW[3] ? 1'bZ : SW[0] ? HDMI_SCLK : analog_l; +`endif + +assign HDMI_MCLK = clk_audio; +wire clk_audio; + +pll_audio pll_audio ( - .CLK(FPGA_CLK3_50), - .RESET(reset), - .DACin({audio_l[15] ^ audio_s, audio_l[14:0]}), - .DACout(al) + .refclk(FPGA_CLK3_50), + .rst(0), + .outclk_0(clk_audio) ); -sigma_delta_dac #(15) dac_r +wire spdif; +audio_out audio_out ( - .CLK(FPGA_CLK3_50), - .RESET(reset), - .DACin({audio_r[15] ^ audio_s, audio_r[14:0]}), - .DACout(ar) + .reset(reset | areset), + .clk(clk_audio), + + .att(vol_att), + .mix(audio_mix), + .sample_rate(audio_96k), + + .flt_rate(aflt_rate), + .cx(acx), + .cx0(acx0), + .cx1(acx1), + .cx2(acx2), + .cy0(acy0), + .cy1(acy1), + .cy2(acy2), + + .is_signed(audio_s), + .core_l(audio_l), + .core_r(audio_r), + + .alsa_l(alsa_l), + .alsa_r(alsa_r), + + .i2s_bclk(HDMI_SCLK), + .i2s_lrclk(HDMI_LRCLK), + .i2s_data(HDMI_I2S), +`ifndef DUAL_SDRAM + .dac_l(analog_l), + .dac_r(analog_r), +`endif + .spdif(spdif) ); -spdif toslink + +wire [28:0] alsa_address; +wire [63:0] alsa_readdata; +wire alsa_ready; +wire alsa_req; +wire alsa_late; + +wire [15:0] alsa_l, alsa_r; + +alsa alsa ( - .clk_i(FPGA_CLK3_50), + .reset(reset), + .clk(clk_audio), - .rst_i(reset), - .half_rate(0), + .ram_address(alsa_address), + .ram_data(alsa_readdata), + .ram_req(alsa_req), + .ram_ready(alsa_ready), - .audio_l(audio_l >> !audio_s), - .audio_r(audio_r >> !audio_s), + .spi_ss(aspi_ss), + .spi_sck(aspi_sck), + .spi_mosi(aspi_mosi), + .spi_miso(aspi_miso), - .spdif_o(aspdif) + .pcm_l(alsa_l), + .pcm_r(alsa_r) ); -assign AUDIO_SPDIF = SW[0] ? HDMI_LRCLK : aspdif; -assign AUDIO_R = SW[0] ? HDMI_I2S : ar; -assign AUDIO_L = SW[0] ? HDMI_SCLK : al; +//////////////// User I/O (USB 3.0 connector) ///////////////////////// -reg [15:0] audio_l; -reg [15:0] audio_r; +assign USER_IO[0] = !user_out[0] ? 1'b0 : 1'bZ; +assign USER_IO[1] = !user_out[1] ? 1'b0 : 1'bZ; +assign USER_IO[2] = !(SW[1] ? HDMI_I2S : user_out[2]) ? 1'b0 : 1'bZ; +assign USER_IO[3] = !user_out[3] ? 1'b0 : 1'bZ; +assign USER_IO[4] = !(SW[1] ? HDMI_SCLK : user_out[4]) ? 1'b0 : 1'bZ; +assign USER_IO[5] = !(SW[1] ? HDMI_LRCLK : user_out[5]) ? 1'b0 : 1'bZ; +assign USER_IO[6] = !user_out[6] ? 1'b0 : 1'bZ; -always @(posedge FPGA_CLK3_50) begin - reg signed [15:0] al; - reg signed [15:0] ar; +assign user_in[0] = USER_IO[0]; +assign user_in[1] = USER_IO[1]; +assign user_in[2] = SW[1] | USER_IO[2]; +assign user_in[3] = USER_IO[3]; +assign user_in[4] = SW[1] | USER_IO[4]; +assign user_in[5] = SW[1] | USER_IO[5]; +assign user_in[6] = USER_IO[6]; - case({audio_s,audio_mix}) - 'b000: al <= audio_ls; - 'b001: al <= audio_ls - (audio_ls >> 3) + (audio_rs >> 3); - 'b010: al <= audio_ls - (audio_ls >> 2) + (audio_rs >> 2); - 'b011: al <= (audio_ls >> 1) + (audio_rs >> 1); - 'b100: al <= audio_ls; - 'b101: al <= audio_ls - (audio_ls >>> 3) + (audio_rs >>> 3); - 'b110: al <= audio_ls - (audio_ls >>> 2) + (audio_rs >>> 2); - 'b111: al <= (audio_ls >>> 1) + (audio_rs >>> 1); - endcase - - case({audio_s,audio_mix}) - 'b000: ar <= audio_rs; - 'b001: ar <= audio_rs - (audio_rs >> 3) + (audio_ls >> 3); - 'b010: ar <= audio_rs - (audio_rs >> 2) + (audio_ls >> 2); - 'b011: ar <= (audio_rs >> 1) + (audio_ls >> 1); - 'b100: ar <= audio_rs; - 'b101: ar <= audio_rs - (audio_rs >>> 3) + (audio_ls >>> 3); - 'b110: ar <= audio_rs - (audio_rs >>> 2) + (audio_ls >>> 2); - 'b111: ar <= (audio_rs >>> 1) + (audio_ls >>> 1); - endcase - - if(vol_att[4]) begin - audio_l <= 0; - audio_r <= 0; - end - else - if(audio_s) begin - audio_l <= al >>> vol_att[3:0]; - audio_r <= ar >>> vol_att[3:0]; - end - else - begin - audio_l <= al >> vol_att[3:0]; - audio_r <= ar >> vol_att[3:0]; - end -end /////////////////// User module connection //////////////////////////// -wire signed [15:0] audio_ls, audio_rs; +wire clk_sys; +wire [15:0] audio_l, audio_r; wire audio_s; wire [1:0] audio_mix; -wire [7:0] r_out, g_out, b_out; -wire vs, hs, de; -wire clk_sys, clk_vid, ce_pix; +wire [1:0] scanlines; +wire [7:0] r_out, g_out, b_out, hr_out, hg_out, hb_out; +wire vs_fix, hs_fix, de_emu, vs_emu, hs_emu, f1; +wire hvs_fix, hhs_fix, hde_emu; +wire clk_vid, ce_pix, clk_ihdmi, ce_hpix; -wire ram_clk; -wire [28:0] ram_address; -wire [7:0] ram_burstcount; -wire ram_waitrequest; -wire [63:0] ram_readdata; -wire ram_readdatavalid; -wire ram_read; -wire [63:0] ram_writedata; -wire [7:0] ram_byteenable; -wire ram_write; +`ifdef USE_DDRAM + wire ram_clk; + wire [28:0] ram_address; + wire [7:0] ram_burstcount; + wire ram_waitrequest; + wire [63:0] ram_readdata; + wire ram_readdatavalid; + wire ram_read; + wire [63:0] ram_writedata; + wire [7:0] ram_byteenable; + wire ram_write; +`endif wire led_user; wire [1:0] led_power; wire [1:0] led_disk; +wire [1:0] btn; -wire vs_emu, hs_emu; -sync_fix sync_v(FPGA_CLK3_50, vs_emu, vs); -sync_fix sync_h(FPGA_CLK3_50, hs_emu, hs); +sync_fix sync_v(clk_vid, vs_emu, vs_fix); +sync_fix sync_h(clk_vid, hs_emu, hs_fix); + +wire [6:0] user_out, user_in; + +`ifndef USE_SDRAM +assign {SDRAM_DQ, SDRAM_A, SDRAM_BA, SDRAM_CLK, SDRAM_CKE, SDRAM_DQML, SDRAM_DQMH, SDRAM_nWE, SDRAM_nCAS, SDRAM_nRAS, SDRAM_nCS} = {39'bZ}; +`endif + +assign clk_ihdmi= clk_vid; +assign ce_hpix = ce_pix; +assign hr_out = r_out; +assign hg_out = g_out; +assign hb_out = b_out; +assign hhs_fix = hs_fix; +assign hvs_fix = vs_fix; +assign hde_emu = de_emu; + +`ifdef ARCADE_SYS + assign audio_mix = 0; + assign {ADC_SCK, ADC_SDI, ADC_CONVST} = 0; + assign btn = 0; +`else + wire uart_dtr; + wire uart_dsr; + wire uart_cts; + wire uart_rts; + wire uart_rxd; + wire uart_txd; + wire osd_status; +`endif + +wire fb_en; +wire [4:0] fb_fmt; +wire [11:0] fb_width; +wire [11:0] fb_height; +wire [31:0] fb_base; +wire [13:0] fb_stride; + +`ifdef USE_FB + wire fb_pal_clk; + wire [7:0] fb_pal_a; + wire [23:0] fb_pal_d; + wire [23:0] fb_pal_q; + wire fb_pal_wr; + wire fb_force_blank; +`else + assign fb_en = 0; + assign fb_fmt = 0; + assign fb_width = 0; + assign fb_height = 0; + assign fb_base = 0; + assign fb_stride = 0; +`endif emu emu ( - .CLK_50M(FPGA_CLK3_50), + .CLK_50M(FPGA_CLK2_50), .RESET(reset), - .HPS_BUS({HDMI_TX_VS, clk_ctl, clk_vid, ce_pix, de, hs, vs, io_wait, clk_sys, io_fpga, io_uio, io_strobe, io_wide, io_din, io_dout}), - - .CLK_VIDEO(clk_vid), - .CE_PIXEL(ce_pix), + .HPS_BUS({f1, HDMI_TX_VS, clk_100m, clk_ihdmi, ce_hpix, hde_emu, hhs_fix, hvs_fix, io_wait, clk_sys, io_fpga, io_uio, io_strobe, io_wide, io_din, io_dout}), .VGA_R(r_out), .VGA_G(g_out), .VGA_B(b_out), .VGA_HS(hs_emu), .VGA_VS(vs_emu), - .VGA_DE(de), + .VGA_DE(de_emu), + .VGA_F1(f1), + + .CLK_VIDEO(clk_vid), + .CE_PIXEL(ce_pix), + .VGA_SL(scanlines), + .VIDEO_ARX(ARX), + .VIDEO_ARY(ARY), + +`ifdef USE_FB + .FB_EN(fb_en), + .FB_FORMAT(fb_fmt), + .FB_WIDTH(fb_width), + .FB_HEIGHT(fb_height), + .FB_BASE(fb_base), + .FB_STRIDE(fb_stride), + .FB_VBL(fb_vbl), + .FB_LL(lowlat), + .FB_FORCE_BLANK(fb_force_blank), + + .FB_PAL_CLK (fb_pal_clk), + .FB_PAL_ADDR(fb_pal_a), + .FB_PAL_DOUT(fb_pal_d), + .FB_PAL_DIN (fb_pal_q), + .FB_PAL_WR (fb_pal_wr), +`endif .LED_USER(led_user), .LED_POWER(led_power), .LED_DISK(led_disk), -`ifndef LITE - .VIDEO_ARX(ARX), - .VIDEO_ARY(ARY), + .CLK_AUDIO(clk_audio), + .AUDIO_L(audio_l), + .AUDIO_R(audio_r), + .AUDIO_S(audio_s), + +`ifndef ARCADE_SYS + .AUDIO_MIX(audio_mix), + .ADC_BUS({ADC_SCK,ADC_SDO,ADC_SDI,ADC_CONVST}), `endif - .AUDIO_L(audio_ls), - .AUDIO_R(audio_rs), - .AUDIO_S(audio_s), - .AUDIO_MIX(audio_mix), - .TAPE_IN(0), - - // SCK -> CLK - // MOSI -> CMD - // MISO <- DAT0 - // Z -> DAT1 - // Z -> DAT2 - // CS -> DAT3 - .SD_SCK(SDIO_CLK), - .SD_MOSI(SDIO_CMD), - .SD_MISO(SDIO_DAT[0]), - .SD_CS(SDIO_DAT[3]), - .SD_CD(VGA_EN ? VGA_HS : SDIO_CD), - +`ifdef USE_DDRAM .DDRAM_CLK(ram_clk), .DDRAM_ADDR(ram_address), .DDRAM_BURSTCNT(ram_burstcount), @@ -900,7 +1472,9 @@ emu emu .DDRAM_DIN(ram_writedata), .DDRAM_BE(ram_byteenable), .DDRAM_WE(ram_write), +`endif +`ifdef USE_SDRAM .SDRAM_DQ(SDRAM_DQ), .SDRAM_A(SDRAM_A), .SDRAM_DQML(SDRAM_DQML), @@ -911,11 +1485,50 @@ emu emu .SDRAM_nRAS(SDRAM_nRAS), .SDRAM_nCAS(SDRAM_nCAS), .SDRAM_CLK(SDRAM_CLK), - .SDRAM_CKE(SDRAM_CKE) + .SDRAM_CKE(SDRAM_CKE), +`endif + +`ifdef DUAL_SDRAM + .SDRAM2_DQ(SDRAM2_DQ), + .SDRAM2_A(SDRAM2_A), + .SDRAM2_BA(SDRAM2_BA), + .SDRAM2_nCS(SDRAM2_nCS), + .SDRAM2_nWE(SDRAM2_nWE), + .SDRAM2_nRAS(SDRAM2_nRAS), + .SDRAM2_nCAS(SDRAM2_nCAS), + .SDRAM2_CLK(SDRAM2_CLK), + .SDRAM2_EN(SW[3]), +`endif + +`ifndef ARCADE_SYS + .BUTTONS(btn), + .OSD_STATUS(osd_status), + .SD_SCK(SD_CLK), + .SD_MOSI(SD_MOSI), + .SD_MISO(SD_MISO), + .SD_CS(SD_CS), +`ifdef DUAL_SDRAM + .SD_CD(mcp_sdcd), +`else + .SD_CD(mcp_sdcd & (SW[0] ? VGA_HS : (SW[3] | SDCD_SPDIF))), +`endif + + .UART_CTS(uart_rts), + .UART_RTS(uart_cts), + .UART_RXD(uart_txd), + .UART_TXD(uart_rxd), + .UART_DTR(uart_dsr), + .UART_DSR(uart_dtr), +`endif + + .USER_OUT(user_out), + .USER_IN(user_in) ); endmodule +///////////////////////////////////////////////////////////////////// + module sync_fix ( input clk, @@ -944,3 +1557,45 @@ always @(posedge clk) begin end endmodule + +///////////////////////////////////////////////////////////////////// + +// CSync generation +// Shifts HSync left by 1 HSync period during VSync + +module csync +( + input clk, + input hsync, + input vsync, + + output csync +); + +assign csync = (csync_vs ^ csync_hs); + +reg csync_hs, csync_vs; +always @(posedge clk) begin + reg prev_hs; + reg [15:0] h_cnt, line_len, hs_len; + + // Count line/Hsync length + h_cnt <= h_cnt + 1'd1; + + prev_hs <= hsync; + if (prev_hs ^ hsync) begin + h_cnt <= 0; + if (hsync) begin + line_len <= h_cnt - hs_len; + csync_hs <= 0; + end + else hs_len <= h_cnt; + end + + if (~vsync) csync_hs <= hsync; + else if(h_cnt == line_len) csync_hs <= 1; + + csync_vs <= vsync; +end + +endmodule diff --git a/sys/sysmem.sv b/sys/sysmem.sv index 886b9b3..c90395e 100644 --- a/sys/sysmem.sv +++ b/sys/sysmem.sv @@ -1,203 +1,101 @@ `timescale 1 ps / 1 ps module sysmem_lite ( - input ramclk1_clk, // ramclk1.clk - input [28:0] ram1_address, // ram1.address - input [7:0] ram1_burstcount, // .burstcount - output ram1_waitrequest, // .waitrequest - output [63:0] ram1_readdata, // .readdata - output ram1_readdatavalid, // .readdatavalid - input ram1_read, // .read - input [63:0] ram1_writedata, // .writedata - input [7:0] ram1_byteenable, // .byteenable - input ram1_write, // .write + output clock, + output reset_out, - input ramclk2_clk, // ramclk2.clk - input [28:0] ram2_address, // ram2.address - input [7:0] ram2_burstcount, // .burstcount - output ram2_waitrequest, // .waitrequest - output [63:0] ram2_readdata, // .readdata - output ram2_readdatavalid, // .readdatavalid - input ram2_read, // .read - input [63:0] ram2_writedata, // .writedata - input [7:0] ram2_byteenable, // .byteenable - input ram2_write, // .write + input reset_hps_cold_req, + input reset_hps_warm_req, + input reset_core_req, - output ctl_clock, - input reset_cold_req, // reset.cold_req - output reset_reset, // .reset - input reset_reset_req, // .reset_req - input reset_warm_req, // .warm_req + input ram1_clk, + input [28:0] ram1_address, + input [7:0] ram1_burstcount, + output ram1_waitrequest, + output [63:0] ram1_readdata, + output ram1_readdatavalid, + input ram1_read, + input [63:0] ram1_writedata, + input [7:0] ram1_byteenable, + input ram1_write, - input vbuf_clk, // vbuf.clk - input [27:0] vbuf_address, // vbuf.address - input [7:0] vbuf_burstcount, // .burstcount - output vbuf_waitrequest, // .waitrequest - output [127:0] vbuf_readdata, // .readdata - output vbuf_readdatavalid, // .readdatavalid - input vbuf_read, // .read - input [127:0] vbuf_writedata, // .writedata - input [15:0] vbuf_byteenable, // .byteenable - input vbuf_write // .write + input ram2_clk, + input [28:0] ram2_address, + input [7:0] ram2_burstcount, + output ram2_waitrequest, + output [63:0] ram2_readdata, + output ram2_readdatavalid, + input ram2_read, + input [63:0] ram2_writedata, + input [7:0] ram2_byteenable, + input ram2_write, + + input vbuf_clk, + input [27:0] vbuf_address, + input [7:0] vbuf_burstcount, + output vbuf_waitrequest, + output [127:0] vbuf_readdata, + output vbuf_readdatavalid, + input vbuf_read, + input [127:0] vbuf_writedata, + input [15:0] vbuf_byteenable, + input vbuf_write ); -assign ctl_clock = clk_vip_clk; - -wire hps_h2f_reset_reset; // HPS:h2f_rst_n -> Reset_Source:reset_hps -wire reset_source_reset_cold_reset; // Reset_Source:reset_cold -> HPS:f2h_cold_rst_req_n -wire reset_source_reset_warm_reset; // Reset_Source:reset_warm -> HPS:f2h_warm_rst_req_n -wire clk_vip_clk; +assign reset_out = ~init_reset_n | ~hps_h2f_reset_n | reset_core_req; sysmem_HPS_fpga_interfaces fpga_interfaces ( - .f2h_cold_rst_req_n (~reset_source_reset_cold_reset), // f2h_cold_reset_req.reset_n - .f2h_warm_rst_req_n (~reset_source_reset_warm_reset), // f2h_warm_reset_req.reset_n - .h2f_user0_clk (clk_vip_clk), // h2f_user0_clock.clk - .h2f_rst_n (hps_h2f_reset_reset), // h2f_reset.reset_n - .f2h_sdram0_clk (vbuf_clk), // f2h_sdram0_clock.clk - .f2h_sdram0_ADDRESS (vbuf_address), // f2h_sdram0_data.address - .f2h_sdram0_BURSTCOUNT (vbuf_burstcount), // .burstcount - .f2h_sdram0_WAITREQUEST (vbuf_waitrequest), // .waitrequest - .f2h_sdram0_READDATA (vbuf_readdata), // .readdata - .f2h_sdram0_READDATAVALID (vbuf_readdatavalid), // .readdatavalid - .f2h_sdram0_READ (vbuf_read), // .read - .f2h_sdram0_WRITEDATA (vbuf_writedata), // .writedata - .f2h_sdram0_BYTEENABLE (vbuf_byteenable), // .byteenable - .f2h_sdram0_WRITE (vbuf_write), // .write - .f2h_sdram1_clk (ramclk1_clk), // f2h_sdram1_clock.clk - .f2h_sdram1_ADDRESS (ram1_address), // f2h_sdram1_data.address - .f2h_sdram1_BURSTCOUNT (ram1_burstcount), // .burstcount - .f2h_sdram1_WAITREQUEST (ram1_waitrequest), // .waitrequest - .f2h_sdram1_READDATA (ram1_readdata), // .readdata - .f2h_sdram1_READDATAVALID (ram1_readdatavalid), // .readdatavalid - .f2h_sdram1_READ (ram1_read), // .read - .f2h_sdram1_WRITEDATA (ram1_writedata), // .writedata - .f2h_sdram1_BYTEENABLE (ram1_byteenable), // .byteenable - .f2h_sdram1_WRITE (ram1_write), // .write - .f2h_sdram2_clk (ramclk2_clk), // f2h_sdram2_clock.clk - .f2h_sdram2_ADDRESS (ram2_address), // f2h_sdram2_data.address - .f2h_sdram2_BURSTCOUNT (ram2_burstcount), // .burstcount - .f2h_sdram2_WAITREQUEST (ram2_waitrequest), // .waitrequest - .f2h_sdram2_READDATA (ram2_readdata), // .readdata - .f2h_sdram2_READDATAVALID (ram2_readdatavalid), // .readdatavalid - .f2h_sdram2_READ (ram2_read), // .read - .f2h_sdram2_WRITEDATA (ram2_writedata), // .writedata - .f2h_sdram2_BYTEENABLE (ram2_byteenable), // .byteenable - .f2h_sdram2_WRITE (ram2_write) // .write + .f2h_cold_rst_req_n (~reset_hps_cold_req), + .f2h_warm_rst_req_n (~reset_hps_warm_req), + .h2f_user0_clk (clock), + .h2f_rst_n (hps_h2f_reset_n), + .f2h_sdram0_clk (vbuf_clk), + .f2h_sdram0_ADDRESS (vbuf_address), + .f2h_sdram0_BURSTCOUNT (vbuf_burstcount), + .f2h_sdram0_WAITREQUEST (vbuf_waitrequest), + .f2h_sdram0_READDATA (vbuf_readdata), + .f2h_sdram0_READDATAVALID (vbuf_readdatavalid), + .f2h_sdram0_READ (vbuf_read), + .f2h_sdram0_WRITEDATA (vbuf_writedata), + .f2h_sdram0_BYTEENABLE (vbuf_byteenable), + .f2h_sdram0_WRITE (vbuf_write), + .f2h_sdram1_clk (ram1_clk), + .f2h_sdram1_ADDRESS (ram1_address), + .f2h_sdram1_BURSTCOUNT (ram1_burstcount), + .f2h_sdram1_WAITREQUEST (ram1_waitrequest), + .f2h_sdram1_READDATA (ram1_readdata), + .f2h_sdram1_READDATAVALID (ram1_readdatavalid), + .f2h_sdram1_READ (ram1_read), + .f2h_sdram1_WRITEDATA (ram1_writedata), + .f2h_sdram1_BYTEENABLE (ram1_byteenable), + .f2h_sdram1_WRITE (ram1_write), + .f2h_sdram2_clk (ram2_clk), + .f2h_sdram2_ADDRESS (ram2_address), + .f2h_sdram2_BURSTCOUNT (ram2_burstcount), + .f2h_sdram2_WAITREQUEST (ram2_waitrequest), + .f2h_sdram2_READDATA (ram2_readdata), + .f2h_sdram2_READDATAVALID (ram2_readdatavalid), + .f2h_sdram2_READ (ram2_read), + .f2h_sdram2_WRITEDATA (ram2_writedata), + .f2h_sdram2_BYTEENABLE (ram2_byteenable), + .f2h_sdram2_WRITE (ram2_write) ); -reset_source reset_source ( - .clk (clk_vip_clk), // clock.clk - .reset_hps (~hps_h2f_reset_reset), // reset_hps.reset - .reset_sys (), // reset_sys.reset - .cold_req (reset_cold_req), // reset_ctl.cold_req - .reset (reset_reset), // .reset - .reset_req (reset_reset_req), // .reset_req - .reset_vip (0), // .reset_vip - .warm_req (reset_warm_req), // .warm_req - .reset_warm (reset_source_reset_warm_reset), // reset_warm.reset - .reset_cold (reset_source_reset_cold_reset) // reset_cold.reset -); +wire hps_h2f_reset_n; + +reg init_reset_n = 0; +always @(posedge clock) begin + integer timeout = 0; + + if(timeout < 2000000) begin + init_reset_n <= 0; + timeout <= timeout + 1; + end + else init_reset_n <= 1; +end endmodule -`timescale 1 ps / 1 ps -module sysmem -( - input ramclk1_clk, // ramclk1.clk - input [28:0] ram1_address, // ram1.address - input [7:0] ram1_burstcount, // .burstcount - output ram1_waitrequest, // .waitrequest - output [63:0] ram1_readdata, // .readdata - output ram1_readdatavalid, // .readdatavalid - input ram1_read, // .read - input [63:0] ram1_writedata, // .writedata - input [7:0] ram1_byteenable, // .byteenable - input ram1_write, // .write - - input ramclk2_clk, // ramclk2.clk - input [28:0] ram2_address, // ram2.address - input [7:0] ram2_burstcount, // .burstcount - output ram2_waitrequest, // .waitrequest - output [63:0] ram2_readdata, // .readdata - output ram2_readdatavalid, // .readdatavalid - input ram2_read, // .read - input [63:0] ram2_writedata, // .writedata - input [7:0] ram2_byteenable, // .byteenable - input ram2_write, // .write - - input reset_cold_req, // reset.cold_req - output reset_reset, // .reset - input reset_reset_req, // .reset_req - input reset_warm_req, // .warm_req - - input [27:0] ram_vip_address, // ram_vip.address - input [7:0] ram_vip_burstcount, // .burstcount - output ram_vip_waitrequest, // .waitrequest - output [127:0] ram_vip_readdata, // .readdata - output ram_vip_readdatavalid, // .readdatavalid - input ram_vip_read, // .read - input [127:0] ram_vip_writedata, // .writedata - input [15:0] ram_vip_byteenable, // .byteenable - input ram_vip_write, // .write - - output clk_vip_clk, // clk_vip.clk - output reset_vip_reset // reset_vip.reset -); - -wire hps_h2f_reset_reset; // HPS:h2f_rst_n -> Reset_Source:reset_hps -wire reset_source_reset_cold_reset; // Reset_Source:reset_cold -> HPS:f2h_cold_rst_req_n -wire reset_source_reset_warm_reset; // Reset_Source:reset_warm -> HPS:f2h_warm_rst_req_n - -sysmem_HPS_fpga_interfaces fpga_interfaces ( - .f2h_cold_rst_req_n (~reset_source_reset_cold_reset), // f2h_cold_reset_req.reset_n - .f2h_warm_rst_req_n (~reset_source_reset_warm_reset), // f2h_warm_reset_req.reset_n - .h2f_user0_clk (clk_vip_clk), // h2f_user0_clock.clk - .h2f_rst_n (hps_h2f_reset_reset), // h2f_reset.reset_n - .f2h_sdram0_clk (clk_vip_clk), // f2h_sdram0_clock.clk - .f2h_sdram0_ADDRESS (ram_vip_address), // f2h_sdram0_data.address - .f2h_sdram0_BURSTCOUNT (ram_vip_burstcount), // .burstcount - .f2h_sdram0_WAITREQUEST (ram_vip_waitrequest), // .waitrequest - .f2h_sdram0_READDATA (ram_vip_readdata), // .readdata - .f2h_sdram0_READDATAVALID (ram_vip_readdatavalid), // .readdatavalid - .f2h_sdram0_READ (ram_vip_read), // .read - .f2h_sdram0_WRITEDATA (ram_vip_writedata), // .writedata - .f2h_sdram0_BYTEENABLE (ram_vip_byteenable), // .byteenable - .f2h_sdram0_WRITE (ram_vip_write), // .write - .f2h_sdram1_clk (ramclk1_clk), // f2h_sdram1_clock.clk - .f2h_sdram1_ADDRESS (ram1_address), // f2h_sdram1_data.address - .f2h_sdram1_BURSTCOUNT (ram1_burstcount), // .burstcount - .f2h_sdram1_WAITREQUEST (ram1_waitrequest), // .waitrequest - .f2h_sdram1_READDATA (ram1_readdata), // .readdata - .f2h_sdram1_READDATAVALID (ram1_readdatavalid), // .readdatavalid - .f2h_sdram1_READ (ram1_read), // .read - .f2h_sdram1_WRITEDATA (ram1_writedata), // .writedata - .f2h_sdram1_BYTEENABLE (ram1_byteenable), // .byteenable - .f2h_sdram1_WRITE (ram1_write), // .write - .f2h_sdram2_clk (ramclk2_clk), // f2h_sdram2_clock.clk - .f2h_sdram2_ADDRESS (ram2_address), // f2h_sdram2_data.address - .f2h_sdram2_BURSTCOUNT (ram2_burstcount), // .burstcount - .f2h_sdram2_WAITREQUEST (ram2_waitrequest), // .waitrequest - .f2h_sdram2_READDATA (ram2_readdata), // .readdata - .f2h_sdram2_READDATAVALID (ram2_readdatavalid), // .readdatavalid - .f2h_sdram2_READ (ram2_read), // .read - .f2h_sdram2_WRITEDATA (ram2_writedata), // .writedata - .f2h_sdram2_BYTEENABLE (ram2_byteenable), // .byteenable - .f2h_sdram2_WRITE (ram2_write) // .write -); - -reset_source reset_source ( - .clk (clk_vip_clk), // clock.clk - .reset_hps (~hps_h2f_reset_reset), // reset_hps.reset - .reset_sys (reset_vip_reset), // reset_sys.reset - .cold_req (reset_cold_req), // reset_ctl.cold_req - .reset (reset_reset), // .reset - .reset_req (reset_reset_req), // .reset_req - .warm_req (reset_warm_req), // .warm_req - .reset_warm (reset_source_reset_warm_reset), // reset_warm.reset - .reset_cold (reset_source_reset_cold_reset) // reset_cold.reset -); - -endmodule module sysmem_HPS_fpga_interfaces ( diff --git a/sys/video_cleaner.sv b/sys/video_cleaner.sv index 36227ba..a99894c 100644 --- a/sys/video_cleaner.sv +++ b/sys/video_cleaner.sv @@ -23,6 +23,9 @@ module video_cleaner input HBlank, input VBlank, + //optional de + input DE_in, + // video output signals output reg [7:0] VGA_R, output reg [7:0] VGA_G, @@ -33,7 +36,10 @@ module video_cleaner // optional aligned blank output reg HBlank_out, - output reg VBlank_out + output reg VBlank_out, + + // optional aligned de + output reg DE_out ); wire hs, vs; @@ -49,11 +55,13 @@ always @(posedge clk_vid) begin if(ce_pix) begin HBlank_out <= hbl; - VGA_VS <= vs; VGA_HS <= hs; + if(~VGA_HS & hs) VGA_VS <= vs; + VGA_R <= R; VGA_G <= G; VGA_B <= B; + DE_out <= DE_in; if(HBlank_out & ~hbl) VBlank_out <= vbl; end diff --git a/sys/video_mixer.sv b/sys/video_mixer.sv index c9d358d..82c9e51 100644 --- a/sys/video_mixer.sv +++ b/sys/video_mixer.sv @@ -17,17 +17,21 @@ // HALF_DEPTH: If =1 then color dept is 4 bits per component // For half depth 8 bits monochrome is available with // mono signal enabled and color = {G, R} +// +// altera message_off 10720 +// altera message_off 12161 module video_mixer #( parameter LINE_LENGTH = 768, - parameter HALF_DEPTH = 0 + parameter HALF_DEPTH = 0, + parameter GAMMA = 0 ) ( - // master clock + // video clock // it should be multiple by (ce_pix*4). - input clk_sys, - + input clk_vid, + // Pixel clock or clock_enable (both are accepted). input ce_pix, output ce_pix_out, @@ -48,6 +52,8 @@ module video_mixer // Monochrome mode (for HALF_DEPTH only) input mono, + inout [21:0] gamma_bus, + // Positive pulses. input HSync, input VSync, @@ -64,22 +70,74 @@ module video_mixer ); localparam DWIDTH = HALF_DEPTH ? 3 : 7; +localparam DWIDTH_SD = GAMMA ? 7 : DWIDTH; +localparam HALF_DEPTH_SD = GAMMA ? 0 : HALF_DEPTH; -wire [DWIDTH:0] R_sd; -wire [DWIDTH:0] G_sd; -wire [DWIDTH:0] B_sd; +generate + if(GAMMA && HALF_DEPTH) begin + wire [7:0] R_in = mono ? {G,R} : {R,R}; + wire [7:0] G_in = mono ? {G,R} : {G,G}; + wire [7:0] B_in = mono ? {G,R} : {B,B}; + end else begin + wire [DWIDTH:0] R_in = R; + wire [DWIDTH:0] G_in = G; + wire [DWIDTH:0] B_in = B; + end +endgenerate + + +wire hs_g, vs_g; +wire hb_g, vb_g; +wire [DWIDTH_SD:0] R_gamma, G_gamma, B_gamma; + +generate + if(GAMMA) begin + assign gamma_bus[21] = 1; + gamma_corr gamma( + .clk_sys(gamma_bus[20]), + .clk_vid(clk_vid), + .ce_pix(ce_pix), + + .gamma_en(gamma_bus[19]), + .gamma_wr(gamma_bus[18]), + .gamma_wr_addr(gamma_bus[17:8]), + .gamma_value(gamma_bus[7:0]), + + .HSync(HSync), + .VSync(VSync), + .HBlank(HBlank), + .VBlank(VBlank), + .RGB_in({R_in,G_in,B_in}), + + .HSync_out(hs_g), + .VSync_out(vs_g), + .HBlank_out(hb_g), + .VBlank_out(vb_g), + .RGB_out({R_gamma,G_gamma,B_gamma}) + ); + end else begin + assign gamma_bus[21] = 0; + assign {R_gamma,G_gamma,B_gamma} = {R_in,G_in,B_in}; + assign {hs_g, vs_g, hb_g, vb_g} = {HSync, VSync, HBlank, VBlank}; + end +endgenerate + + +wire [DWIDTH_SD:0] R_sd; +wire [DWIDTH_SD:0] G_sd; +wire [DWIDTH_SD:0] B_sd; wire hs_sd, vs_sd, hb_sd, vb_sd, ce_pix_sd; -scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH)) sd +scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH_SD)) sd ( .*, - .hs_in(HSync), - .vs_in(VSync), - .hb_in(HBlank), - .vb_in(VBlank), - .r_in(R), - .g_in(G), - .b_in(B), + .hs_in(hs_g), + .vs_in(vs_g), + .hb_in(hb_g), + .vb_in(vb_g), + .r_in(R_gamma), + .g_in(G_gamma), + .b_in(B_gamma), .ce_pix_out(ce_pix_sd), .hs_out(hs_sd), @@ -91,12 +149,12 @@ scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH)) sd .b_out(B_sd) ); -wire [DWIDTH:0] rt = (scandoubler ? R_sd : R); -wire [DWIDTH:0] gt = (scandoubler ? G_sd : G); -wire [DWIDTH:0] bt = (scandoubler ? B_sd : B); +wire [DWIDTH_SD:0] rt = (scandoubler ? R_sd : R_gamma); +wire [DWIDTH_SD:0] gt = (scandoubler ? G_sd : G_gamma); +wire [DWIDTH_SD:0] bt = (scandoubler ? B_sd : B_gamma); generate - if(HALF_DEPTH) begin + if(!GAMMA && HALF_DEPTH) begin wire [7:0] r = mono ? {gt,rt} : {rt,rt}; wire [7:0] g = mono ? {gt,rt} : {gt,gt}; wire [7:0] b = mono ? {gt,rt} : {bt,bt}; @@ -107,14 +165,14 @@ generate end endgenerate -wire hs = (scandoubler ? hs_sd : HSync); -wire vs = (scandoubler ? vs_sd : VSync); +wire hs = (scandoubler ? hs_sd : hs_g); +wire vs = (scandoubler ? vs_sd : vs_g); assign ce_pix_out = scandoubler ? ce_pix_sd : ce_pix; reg scanline = 0; -always @(posedge clk_sys) begin +always @(posedge clk_vid) begin reg old_hs, old_vs; old_hs <= hs; @@ -124,44 +182,57 @@ always @(posedge clk_sys) begin if(old_vs && ~vs) scanline <= 0; end -wire hde = scandoubler ? ~hb_sd : ~HBlank; -wire vde = scandoubler ? ~vb_sd : ~VBlank; +wire hde = scandoubler ? ~hb_sd : ~hb_g; +wire vde = scandoubler ? ~vb_sd : ~vb_g; -always @(posedge clk_sys) begin +reg [7:0] v_r,v_g,v_b; +reg v_vs,v_hs,v_de; +always @(posedge clk_vid) begin reg old_hde; - case(scanlines & {scanline, scanline}) - 1: begin // reduce 25% = 1/2 + 1/4 - VGA_R <= {1'b0, r[7:1]} + {2'b00, r[7:2]}; - VGA_G <= {1'b0, g[7:1]} + {2'b00, g[7:2]}; - VGA_B <= {1'b0, b[7:1]} + {2'b00, b[7:2]}; - end + if(ce_pix_out) begin + case(scanlines & {scanline, scanline}) + 1: begin // reduce 25% = 1/2 + 1/4 + v_r <= {1'b0, r[7:1]} + {2'b00, r[7:2]}; + v_g <= {1'b0, g[7:1]} + {2'b00, g[7:2]}; + v_b <= {1'b0, b[7:1]} + {2'b00, b[7:2]}; + end - 2: begin // reduce 50% = 1/2 - VGA_R <= {1'b0, r[7:1]}; - VGA_G <= {1'b0, g[7:1]}; - VGA_B <= {1'b0, b[7:1]}; - end + 2: begin // reduce 50% = 1/2 + v_r <= {1'b0, r[7:1]}; + v_g <= {1'b0, g[7:1]}; + v_b <= {1'b0, b[7:1]}; + end - 3: begin // reduce 75% = 1/4 - VGA_R <= {2'b00, r[7:2]}; - VGA_G <= {2'b00, g[7:2]}; - VGA_B <= {2'b00, b[7:2]}; - end + 3: begin // reduce 75% = 1/4 + v_r <= {2'b00, r[7:2]}; + v_g <= {2'b00, g[7:2]}; + v_b <= {2'b00, b[7:2]}; + end - default: begin - VGA_R <= r; - VGA_G <= g; - VGA_B <= b; - end - endcase + default: begin + v_r <= r; + v_g <= g; + v_b <= b; + end + endcase - VGA_VS <= vs; - VGA_HS <= hs; + v_vs <= vs; + v_hs <= hs; - old_hde <= hde; - if(~old_hde && hde) VGA_DE <= vde; - if(old_hde && ~hde) VGA_DE <= 0; + old_hde <= hde; + if(~old_hde && hde) v_de <= vde; + if(old_hde && ~hde) v_de <= 0; + end +end + +always @(posedge clk_vid) if(ce_pix_out) begin + VGA_R <= v_r; + VGA_G <= v_g; + VGA_B <= v_b; + VGA_HS <= v_hs; + VGA_VS <= v_vs; + VGA_DE <= v_de; end endmodule diff --git a/sys/vip.qsys b/sys/vip.qsys deleted file mode 100644 index 1f8a5d7..0000000 --- a/sys/vip.qsys +++ /dev/null @@ -1,1177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No,No,No,No,No,No,No,No - - - - - - - - - - - - - - - - - - - - - Avalon-MM Bidirectional,Avalon-MM Bidirectional,Avalon-MM Bidirectional - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No - - - - - - - - - - - - - - - - No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {320000000 1600000000} {320000000 1000000000} {800000000 400000000 400000000} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sys/vip_config.sv b/sys/vip_config.sv deleted file mode 100644 index b003798..0000000 --- a/sys/vip_config.sv +++ /dev/null @@ -1,159 +0,0 @@ - -module vip_config -( - input clk, - input reset, - - input [7:0] ARX, - input [7:0] ARY, - input CFG_SET, - - input [11:0] WIDTH, - input [11:0] HFP, - input [11:0] HBP, - input [11:0] HS, - input [11:0] HEIGHT, - input [11:0] VFP, - input [11:0] VBP, - input [11:0] VS, - - input [11:0] VSET, - - output reg [8:0] address, - output reg write, - output reg [31:0] writedata, - input waitrequest -); - - -reg newres = 1; - -wire [21:0] init[23] = -'{ - //video mode - {newres, 2'd2, 7'd04, 12'd0 }, //Bank - {newres, 2'd2, 7'd30, 12'd0 }, //Valid - {newres, 2'd2, 7'd05, 12'd0 }, //Progressive/Interlaced - {newres, 2'd2, 7'd06, w }, //Active pixel count - {newres, 2'd2, 7'd07, h }, //Active line count - {newres, 2'd2, 7'd09, hfp }, //Horizontal Front Porch - {newres, 2'd2, 7'd10, hs }, //Horizontal Sync Length - {newres, 2'd2, 7'd11, hb }, //Horizontal Blanking (HFP+HBP+HSync) - {newres, 2'd2, 7'd12, vfp }, //Vertical Front Porch - {newres, 2'd2, 7'd13, vs }, //Vertical Sync Length - {newres, 2'd2, 7'd14, vb }, //Vertical blanking (VFP+VBP+VSync) - {newres, 2'd2, 7'd30, 12'd1 }, //Valid - {newres, 2'd2, 7'd00, 12'd1 }, //Go - - //mixer - { 1'd1, 2'd1, 7'd03, w }, //Bkg Width - { 1'd1, 2'd1, 7'd04, h }, //Bkg Height - { 1'd1, 2'd1, 7'd08, posx }, //Pos X - { 1'd1, 2'd1, 7'd09, posy }, //Pos Y - { 1'd1, 2'd1, 7'd10, 12'd1 }, //Enable Video 0 - { 1'd1, 2'd1, 7'd00, 12'd1 }, //Go - - //scaler - { 1'd1, 2'd0, 7'd03, videow }, //Output Width - { 1'd1, 2'd0, 7'd04, videoh }, //Output Height - { 1'd1, 2'd0, 7'd00, 12'd1 }, //Go - - 22'h3FFFFF -}; - -reg [11:0] w; -reg [11:0] hfp; -reg [11:0] hbp; -reg [11:0] hs; -reg [11:0] hb; -reg [11:0] h; -reg [11:0] vfp; -reg [11:0] vbp; -reg [11:0] vs; -reg [11:0] vb; - -reg [11:0] videow; -reg [11:0] videoh; - -reg [11:0] posx; -reg [11:0] posy; - -always @(posedge clk) begin - reg [7:0] state = 0; - reg [7:0] arx, ary; - reg [7:0] arxd, aryd; - reg [11:0] vset, vsetd; - reg cfg, cfgd; - reg [31:0] wcalc; - reg [31:0] hcalc; - reg [12:0] timeout = 0; - - arxd <= ARX; - aryd <= ARY; - vsetd <= VSET; - - cfg <= CFG_SET; - cfgd <= cfg; - - write <= 0; - if(reset || (arx != arxd) || (ary != aryd) || (vset != vsetd) || (~cfgd && cfg)) begin - arx <= arxd; - ary <= aryd; - vset <= vsetd; - timeout <= '1; - state <= 0; - if(reset || (~cfgd && cfg)) newres <= 1; - end - else - if(timeout > 0) - begin - timeout <= timeout - 1'd1; - state <= 1; - if(!(timeout & 'h1f)) case(timeout>>5) - 5: begin - w <= WIDTH; - hfp <= HFP; - hbp <= HBP; - hs <= HS; - h <= HEIGHT; - vfp <= VFP; - vbp <= VBP; - vs <= VS; - end - 4: begin - hb <= hfp+hbp+hs; - vb <= vfp+vbp+vs; - end - 3: begin - wcalc <= vset ? (vset*arx)/ary : (h*arx)/ary; - hcalc <= (w*ary)/arx; - end - 2: begin - videow <= (!vset && (wcalc > w)) ? w : wcalc[11:0]; - videoh <= vset ? vset : (hcalc > h) ? h : hcalc[11:0]; - end - 1: begin - posx <= (w - videow)>>1; - posy <= (h - videoh)>>1; - end - endcase - end - else - if(~waitrequest && state) - begin - state <= state + 1'd1; - write <= 0; - if((state&3)==3) begin - if(init[state>>2] == 22'h3FFFFF) begin - state <= 0; - newres <= 0; - end - else begin - writedata <= 0; - {write, address, writedata[11:0]} <= init[state>>2]; - end - end - end -end - -endmodule From 4da3af2febf89142adea2b82e33b59f243552585 Mon Sep 17 00:00:00 2001 From: Mario Smit Date: Sat, 21 Nov 2020 21:28:30 +0100 Subject: [PATCH 2/6] fixed serial via uart --- Microcomputer6502Basic.vhd | 6 +-- Microcomputer6809Basic.vhd | 6 +-- MicrocomputerZ80Basic.vhd | 6 +-- MicrocomputerZ80CPM.vhd | 6 +-- MultiComp.qws | Bin 0 -> 619 bytes MultiComp.sv | 104 +++++++++++++++++++++++++++++++------ build_id.v | 2 +- 7 files changed, 100 insertions(+), 30 deletions(-) create mode 100644 MultiComp.qws diff --git a/Microcomputer6502Basic.vhd b/Microcomputer6502Basic.vhd index c3164cf..47d77ee 100644 --- a/Microcomputer6502Basic.vhd +++ b/Microcomputer6502Basic.vhd @@ -187,9 +187,9 @@ port map ( io2 : entity work.bufferedUART port map( clk => clk, - n_wr => n_interface1CS or cpuClock or n_WR, - n_rd => n_interface1CS or cpuClock or (not n_WR), - n_int => n_int1, + n_wr => n_interface2CS or cpuClock or n_WR, + n_rd => n_interface2CS or cpuClock or (not n_WR), + n_int => n_int2, regSel => cpuAddress(0), dataIn => cpuDataOut, dataOut => interface2DataOut, diff --git a/Microcomputer6809Basic.vhd b/Microcomputer6809Basic.vhd index 43bf4a5..68403e2 100644 --- a/Microcomputer6809Basic.vhd +++ b/Microcomputer6809Basic.vhd @@ -185,9 +185,9 @@ port map ( io2 : entity work.bufferedUART port map( clk => clk, - n_wr => n_interface1CS or cpuClock or n_WR, - n_rd => n_interface1CS or cpuClock or (not n_WR), - n_int => n_int1, + n_wr => n_interface2CS or cpuClock or n_WR, + n_rd => n_interface2CS or cpuClock or (not n_WR), + n_int => n_int2, regSel => cpuAddress(0), dataIn => cpuDataOut, dataOut => interface2DataOut, diff --git a/MicrocomputerZ80Basic.vhd b/MicrocomputerZ80Basic.vhd index c8b165b..4fc6cfa 100644 --- a/MicrocomputerZ80Basic.vhd +++ b/MicrocomputerZ80Basic.vhd @@ -188,9 +188,9 @@ port map ( io2 : entity work.bufferedUART port map( clk => clk, - n_wr => n_interface1CS or cpuClock or n_WR, - n_rd => n_interface1CS or cpuClock or (not n_WR), - n_int => n_int1, + n_wr => n_interface2CS or n_ioWR, + n_rd => n_interface2CS or n_ioRD, + n_int => n_int2, regSel => cpuAddress(0), dataIn => cpuDataOut, dataOut => interface2DataOut, diff --git a/MicrocomputerZ80CPM.vhd b/MicrocomputerZ80CPM.vhd index a9be4a2..e694b62 100644 --- a/MicrocomputerZ80CPM.vhd +++ b/MicrocomputerZ80CPM.vhd @@ -203,9 +203,9 @@ port map ( io2 : entity work.bufferedUART port map( clk => clk, - n_wr => n_interface1CS or cpuClock or n_WR, - n_rd => n_interface1CS or cpuClock or (not n_WR), - n_int => n_int1, + n_wr => n_interface2CS or n_ioWR, + n_rd => n_interface2CS or n_ioRD, + n_int => n_int2, regSel => cpuAddress(0), dataIn => cpuDataOut, dataOut => interface2DataOut, diff --git a/MultiComp.qws b/MultiComp.qws new file mode 100644 index 0000000000000000000000000000000000000000..7c92db1b6abde3dea07d2fd4896ae54c4bd8874d GIT binary patch literal 619 zcmbV}Pc8&e5Ql%=EN1Bd78W8MNz2R_iI|O8SXqg^jP4#fjc%jGLL9&y+`%;@Hnz@U z3}00q8zP}P^{VQ<`t!Zl+lfA9QKuT|Qmqbkty&XRL=AhHijWjx_jIFN8ycWybB&d1 zow!e4svcjCrc`#d>0TGFkB-P4vkv%roZY@7);oG&aqrC{+d>|tcsPymqF0s#rUteP z2wMm?`_tim*=Oie`RwNm*|$eEIiQ6)KByQP@!oH literal 0 HcmV?d00001 diff --git a/MultiComp.sv b/MultiComp.sv index 4e14f8f..25e40cf 100644 --- a/MultiComp.sv +++ b/MultiComp.sv @@ -107,7 +107,7 @@ module emu //ADC inout [3:0] ADC_BUS, - //SD-SPI + //SD-SPI SECONDARY SDCARD output SD_SCK, output SD_MOSI, input SD_MISO, @@ -160,12 +160,14 @@ module emu assign ADC_BUS = 'Z; assign USER_OUT = '1; -assign {UART_RTS, UART_TXD, UART_DTR} = 0; assign {SD_SCK, SD_MOSI, SD_CS} = 'Z; assign {SDRAM_DQ, SDRAM_A, SDRAM_BA, SDRAM_CLK, SDRAM_CKE, SDRAM_DQML, SDRAM_DQMH, SDRAM_nWE, SDRAM_nCAS, SDRAM_nRAS, SDRAM_nCS} = 'Z; assign {DDRAM_CLK, DDRAM_BURSTCNT, DDRAM_ADDR, DDRAM_DIN, DDRAM_BE, DDRAM_RD, DDRAM_WE} = 0; -assign LED_USER = 0; +assign UART_RTS = UART_CTS; +assign UART_DTR = UART_DSR; + +assign LED_USER = vsd_sel & sd_act; assign LED_DISK = ~driveLED; assign LED_POWER = 0; assign BUTTONS = 0; @@ -232,13 +234,25 @@ hps_io #( .ps2_kbd_clk_out(PS2_CLK), .ps2_kbd_data_out(PS2_DAT), + .sd_lba(sd_lba), + .sd_rd(sd_rd), + .sd_wr(sd_wr), + .sd_ack(sd_ack), + .sd_ack_conf(sd_ack_conf), + .sd_buff_addr(sd_buff_addr), + .sd_buff_dout(sd_buff_dout), + .sd_buff_din(sd_buff_din), + .sd_buff_wr(sd_buff_wr), + .img_mounted(img_mounted), .img_readonly(img_readonly), - .img_size(img_size) + .img_size(img_size), + + .uart_mode(16'b000_11111_000_11111) ); /////////////////////// CLOCKS /////////////////////////////// -wire clk_sys, clk_ram, locked; +wire clk_sys, locked; pll pll ( @@ -252,6 +266,52 @@ pll pll wire reset = RESET | status[0] | buttons[1] | status[10] | (status[14] && img_mounted); +///////////////// SDCARD //////////////////////// + +wire sdclk; +wire sdmosi; +wire sdmiso = vsd_sel ? vsdmiso : SD_MISO; +wire sdss; + +wire vsdmiso; +reg vsd_sel = 0; + +always @(posedge clk_sys) if(img_mounted) vsd_sel <= |img_size; + +sd_card sd_card +( + .*, + + .clk_spi(clk_sys), + .sdhc(1), + .sck(sdclk), + .ss(sdss | ~vsd_sel), + .mosi(sdmosi), + .miso(vsdmiso) +); + +assign SD_CS = sdss | vsd_sel; +assign SD_SCK = sdclk & ~vsd_sel; +assign SD_MOSI = sdmosi & ~vsd_sel; + +reg sd_act; + +always @(posedge clk_sys) begin + reg old_mosi, old_miso; + integer timeout = 0; + + old_mosi <= sdmosi; + old_miso <= sdmiso; + + sd_act <= 0; + if(timeout < 1000000) begin + timeout <= timeout + 1; + sd_act <= 1; + end + + if((old_mosi ^ sdmosi) || (old_miso ^ sdmiso)) timeout <= 0; +end + /////////////////////////////////////////////////// assign CLK_VIDEO = clk_sys; @@ -267,11 +327,12 @@ wire driveLED; wire [3:0] _hblank, _vblank; wire [3:0] _hs, _vs; wire [1:0] _r[3:0], _g[3:0], _b[3:0]; +wire [3:0] _driveLED; wire [3:0] _CE_PIXEL; wire [3:0] _SD_CS; wire [3:0] _SD_MOSI; wire [3:0] _SD_SCK; -wire [3:0] _driveLED; +wire [3:0] _txd[3:0]; always_comb begin @@ -283,10 +344,11 @@ begin g <= _g[cpu_type][1:0]; b <= _b[cpu_type][1:0]; CE_PIXEL <= _CE_PIXEL[cpu_type]; - SD_CS <= _SD_CS[cpu_type]; - SD_MOSI <= _SD_MOSI[cpu_type]; - SD_SCK <= _SD_SCK[cpu_type]; + sdss <= _SD_CS[cpu_type]; + sdmosi <= _SD_MOSI[cpu_type]; + sdclk <= _SD_SCK[cpu_type]; driveLED <= _driveLED[cpu_type]; + UART_TXD <= _txd[cpu_type]; end MicrocomputerZ80CPM MicrocomputerZ80CPM @@ -305,9 +367,11 @@ MicrocomputerZ80CPM MicrocomputerZ80CPM .ps2Data(PS2_DAT), .sdCS(_SD_CS[0]), .sdMOSI(_SD_MOSI[0]), - .sdMISO(SD_MISO), + .sdMISO(sdmiso), .sdSCLK(_SD_SCK[0]), - .driveLED(_driveLED[0]) + .driveLED(_driveLED[0]), + .rxd1 (UART_RXD), + .txd1 (_txd[0]) ); MicrocomputerZ80Basic MicrocomputerZ80Basic @@ -326,9 +390,11 @@ MicrocomputerZ80Basic MicrocomputerZ80Basic .ps2Data(PS2_DAT), .sdCS(_SD_CS[1]), .sdMOSI(_SD_MOSI[1]), - .sdMISO(SD_MISO), + .sdMISO(sdmiso), .sdSCLK(_SD_SCK[1]), - .driveLED(_driveLED[1]) + .driveLED(_driveLED[1]), + .rxd1 (UART_RXD), + .txd1 (_txd[1]) ); Microcomputer6502Basic Microcomputer6502Basic @@ -347,9 +413,11 @@ Microcomputer6502Basic Microcomputer6502Basic .ps2Data(PS2_DAT), .sdCS(_SD_CS[2]), .sdMOSI(_SD_MOSI[2]), - .sdMISO(SD_MISO), + .sdMISO(sdmiso), .sdSCLK(_SD_SCK[2]), - .driveLED(_driveLED[2]) + .driveLED(_driveLED[2]), + .rxd1 (UART_RXD), + .txd1 (_txd[2]) ); //Reset is not working (even on the original Grant's 6809) @@ -369,9 +437,11 @@ Microcomputer6809Basic Microcomputer6809Basic .ps2Data(PS2_DAT), .sdCS(_SD_CS[3]), .sdMOSI(_SD_MOSI[3]), - .sdMISO(SD_MISO), + .sdMISO(sdmiso), .sdSCLK(_SD_SCK[3]), - .driveLED(_driveLED[3]) + .driveLED(_driveLED[3]), + .rxd1 (UART_RXD), + .txd1 (_txd[3]) ); video_cleaner video_cleaner diff --git a/build_id.v b/build_id.v index 45f5cd7..eb65496 100644 --- a/build_id.v +++ b/build_id.v @@ -1 +1 @@ -`define BUILD_DATE "201116" \ No newline at end of file +`define BUILD_DATE "201121" \ No newline at end of file From fc0792fba1361820e39f7a81ed1cebfd9bb0e899 Mon Sep 17 00:00:00 2001 From: Mario Smit Date: Sat, 21 Nov 2020 21:44:24 +0100 Subject: [PATCH 3/6] updated README --- README.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index aa1578f..0e07607 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,15 @@ MISTer MultiComp ================ Port of Grant Searle's MultiComp to the MiSTer. -The MiSTer OSD allows the access to three machines: -## Z80 CP/M - SD card needed in I/O Board: +Updated by S0urceror to use MiSTer image files, use all 4 machine types and have the MiSTer +UART connected to serial interface 2 of the core. The latter allows to use the core remotely. + +The MiSTer OSD allows the access to four machines: + +## Z80 CP/M: +You can now use both an external SDCard and/or select the image file within MiSTer. Whatever you like. + For convenience you can use the Multicomp FPGA - CP/M Demo Disk from Obsolescence Guaranteed: http://obsolescence.wixsite.com/obsolescence/multicomp-fpga-cpm-demo-disk @@ -14,6 +20,19 @@ https://github.com/MiSTer-devel/Main_MiSTer/wiki/IO-Board Using CP/M - from Grant Searle website: http://searle.hostei.com/grant/Multicomp/cpm/fpgaCPM.html#UsingTheMachine +## Z80 Basic: +SGN, INT, ABS ,USR, FRE, INP, POS, SQR, RND ,LOG, EXP, COS, SIN, TAN, ATN, PEEK ,DEEK ,LEN, STR$, VAL ,ASC, CHR$ ,LEFT$, +RIGHT$, MID$, END, FOR, NEXT, DATA, INPUT, DIM, READ, LET, GOTO, RUN, IF, RESTORE, GOSUB, RETURN, REM, STOP, OUT, ON, +NULL, WAIT, DEF, POKE, DOKE, LINES, CLS, WIDTH, MONITOR, PRINT, CONT, LIST, CLEAR, NEW, TAB, TO, FN, SPC, THEN, NOT, +STEP, +, -, *, /, ^, AND, OR, >, <, = + +PLUS my additional implementations here (making it version 4.7b): + +HEX$(nn) - convert a SIGNED integer (-32768 to +32767) to a string containing the hex value +BIN$(nn) - convert a SIGNED integer (-32768 to +32767) to a string containing the binary value +&Hnn - interpret the value after the &H as a HEX value (signed 16 bit) +&Bnn - interpret the value after the &B as a BINARY value (signed 16 bit) + ## 6502 Basic - No SD card support (No CSAVE/CLOAD): END, FOR, NEXT, DATA, INPUT, DIM, READ, LET, GOTO, RUN, IF, RESTORE, GOSUB, RETURN, REM, STOP, ON, NULL, WAIT, DEF, POKE, PRINT, CONT, LIST, CLEAR, NEW, TAB(, TO, FN, SPC(, THEN, NOT, STEP, SGN, INT, ABS, USR, FRE, POS, SQR, RND, LOG, EXP, COS, SIN, TAN, ATN, From 22525e6668cd9b6b7596490d495ff77d40c5ba3e Mon Sep 17 00:00:00 2001 From: S0urceror Date: Wed, 23 Dec 2020 14:26:20 +0100 Subject: [PATCH 4/6] SPI USB support + wait in SD code --- Components/SDCARD/sd_controller.vhd | 22 +- Components/USB/ch376s.v | 49 + Components/USB/spi_master_simple.v | 89 + MicrocomputerZ80CPM.vhd | 62 +- MultiComp.qsf | 9 +- MultiComp.qws | Bin 619 -> 619 bytes MultiComp.sv | 70 +- Z80 CPM and bootloader (basmon)/TASM.EXE | Bin 0 -> 76580 bytes Z80 CPM and bootloader (basmon)/TASM.TXT | 1709 ++++++ Z80 CPM and bootloader (basmon)/TASM80.TAB | 579 ++ .../TASM_RELNOTES.TXT | 199 + Z80 CPM and bootloader (basmon)/_ASSEMBLE.BAT | 8 + .../hexFiles/BASMON.HEX | 343 ++ .../hexFiles/CBIOS128.HEX | 59 + .../hexFiles/CH376S.HEX | 6 + .../hexFiles/CPM22.HEX | 238 + .../hexFiles/DOWNLOAD.HEX | 19 + .../hexFiles/DOWNLOAD2.HEX | 15 + .../hexFiles/FORM128.HEX | 16 + .../hexFiles/PUTSYS.HEX | 10 + .../source/BASMON.LST | 5015 +++++++++++++++++ .../source/BASMON.OBJ | 52 + .../source/CBIOS128.LST | 947 ++++ .../source/CH376S~1.LST | 88 + .../source/CPM22.LST | 3781 +++++++++++++ .../source/DOWNLOAD.LST | 290 + .../source/FORM128.LST | 230 + .../source/PUTSYS.LST | 166 + .../source/basMon.asm | 4992 ++++++++++++++++ .../source/cbios128.asm | 927 +++ .../source/ch376s.bin | Bin 0 -> 66 bytes .../source/ch376s_test.asm | 85 + .../source/cpm22.asm | 3750 ++++++++++++ .../source/download.asm | 287 + .../source/form128.asm | 220 + .../source/putsys.asm | 163 + .../transientAppsPackage/CPM211FilesPkg.txt | 27 + .../windowsApp/COMDLG32.OCX | Bin 0 -> 152848 bytes .../windowsApp/FilePackage.exe | Bin 0 -> 28672 bytes build_id.v | 2 +- 40 files changed, 24491 insertions(+), 33 deletions(-) create mode 100644 Components/USB/ch376s.v create mode 100644 Components/USB/spi_master_simple.v create mode 100644 Z80 CPM and bootloader (basmon)/TASM.EXE create mode 100644 Z80 CPM and bootloader (basmon)/TASM.TXT create mode 100644 Z80 CPM and bootloader (basmon)/TASM80.TAB create mode 100644 Z80 CPM and bootloader (basmon)/TASM_RELNOTES.TXT create mode 100644 Z80 CPM and bootloader (basmon)/_ASSEMBLE.BAT create mode 100644 Z80 CPM and bootloader (basmon)/hexFiles/BASMON.HEX create mode 100644 Z80 CPM and bootloader (basmon)/hexFiles/CBIOS128.HEX create mode 100644 Z80 CPM and bootloader (basmon)/hexFiles/CH376S.HEX create mode 100644 Z80 CPM and bootloader (basmon)/hexFiles/CPM22.HEX create mode 100644 Z80 CPM and bootloader (basmon)/hexFiles/DOWNLOAD.HEX create mode 100644 Z80 CPM and bootloader (basmon)/hexFiles/DOWNLOAD2.HEX create mode 100644 Z80 CPM and bootloader (basmon)/hexFiles/FORM128.HEX create mode 100644 Z80 CPM and bootloader (basmon)/hexFiles/PUTSYS.HEX create mode 100644 Z80 CPM and bootloader (basmon)/source/BASMON.LST create mode 100644 Z80 CPM and bootloader (basmon)/source/BASMON.OBJ create mode 100644 Z80 CPM and bootloader (basmon)/source/CBIOS128.LST create mode 100644 Z80 CPM and bootloader (basmon)/source/CH376S~1.LST create mode 100644 Z80 CPM and bootloader (basmon)/source/CPM22.LST create mode 100644 Z80 CPM and bootloader (basmon)/source/DOWNLOAD.LST create mode 100644 Z80 CPM and bootloader (basmon)/source/FORM128.LST create mode 100644 Z80 CPM and bootloader (basmon)/source/PUTSYS.LST create mode 100644 Z80 CPM and bootloader (basmon)/source/basMon.asm create mode 100644 Z80 CPM and bootloader (basmon)/source/cbios128.asm create mode 100644 Z80 CPM and bootloader (basmon)/source/ch376s.bin create mode 100644 Z80 CPM and bootloader (basmon)/source/ch376s_test.asm create mode 100644 Z80 CPM and bootloader (basmon)/source/cpm22.asm create mode 100644 Z80 CPM and bootloader (basmon)/source/download.asm create mode 100644 Z80 CPM and bootloader (basmon)/source/form128.asm create mode 100644 Z80 CPM and bootloader (basmon)/source/putsys.asm create mode 100644 Z80 CPM and bootloader (basmon)/transientAppsPackage/CPM211FilesPkg.txt create mode 100644 Z80 CPM and bootloader (basmon)/windowsApp/COMDLG32.OCX create mode 100644 Z80 CPM and bootloader (basmon)/windowsApp/FilePackage.exe diff --git a/Components/SDCARD/sd_controller.vhd b/Components/SDCARD/sd_controller.vhd index c6c9b8f..1aae375 100644 --- a/Components/SDCARD/sd_controller.vhd +++ b/Components/SDCARD/sd_controller.vhd @@ -114,6 +114,22 @@ signal address: std_logic_vector(31 downto 0) :=x"00000000"; signal led_on_count : integer range 0 to 200; + -- reg 000 - read/write data + + -- reg 001 - read status + -- bit 7 = block written + -- bit 6 = block read + -- bit 5 = block busy + -- bit 4 = init busy + + -- reg 001 - write control + -- 0 - block_read + -- 1 - block_write + + -- reg 002 - LBA0 + -- reg 003 - LBA1 + -- reg 004 - LBA2 + begin process(n_wr) begin @@ -142,8 +158,8 @@ begin dataOut <= dout when regAddr = "000" - else status when regAddr = "001" - else "00000000"; + else status when regAddr = "001" + else "00000000"; process(n_wr) begin @@ -444,7 +460,7 @@ begin bit_counter := 7; state <= write_block_byte; byte_counter := byte_counter - 1; - sd_write_flag <= not sd_write_flag; + sd_write_flag <= not sd_write_flag; -- now sd_write_flag = host_write_flag end if; end if; diff --git a/Components/USB/ch376s.v b/Components/USB/ch376s.v new file mode 100644 index 0000000..6ff5c55 --- /dev/null +++ b/Components/USB/ch376s.v @@ -0,0 +1,49 @@ +module ch376s +( + // interface + input clk, // system clock + input rd, + input wr, + input reset, + input a0, + + // SPI wires + output sck, // SCK + output sdcs, // SCS + output sdo, // MOSI + input sdi, // MISO + + // data + input [7:0] din, + output [7:0] dout + +); + + wire _ready; + wire [7:0] _dout; + + spi SPI_Master + ( + // Control/Data Signals, + .clk(clk), // FPGA Clock + .reset (reset), + .ready (_ready), + + // TX (MOSI) Signals + .din(din), // Byte to transmit on MOSI + .wr (wr), // Data Valid Pulse with i_TX_Byte + + // RX (MISO) Signals + .dout(_dout), // Byte received on MISO + .rd (rd), + + // SPI Interface + .sck(sck), + .sdi(sdi), + .sdo(sdo), + .sdcs (sdcs) + ); + + assign dout=rd ? (a0 ? {7'b0000000,_ready} : _dout) : 8'bXXXXXXXX; + +endmodule \ No newline at end of file diff --git a/Components/USB/spi_master_simple.v b/Components/USB/spi_master_simple.v new file mode 100644 index 0000000..3e6cd7c --- /dev/null +++ b/Components/USB/spi_master_simple.v @@ -0,0 +1,89 @@ +// part of NeoGS project (c) 2007-2008 NedoPC +// + +// SPI mode 0 8-bit master module +// +// short diagram for speed=0 (Fclk/Fspi=2, no rdy shown) +// +// clk: ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ (positive edges) +// counter: 00|00|00|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|00|00|00 // internal! +// sck: ___________/``\__/``\__/``\__/``\__/``\__/``\__/``\__/``\_______ +// sdo: --------< do7 | do6 | do5 | do4 | do3 | do2 | do1 | do0 >------- +// sdi: --------< di7 | di6 | di5 | di4 | di3 | di2 | di1 | di0 >------- +// bsync: ________/`````\_________________________________________________ +// start: _____/``\_______________________________________________________ +// din: ------------------------------------------------------------ +// dout: old old old old old old old old old old old old old | new new new +// +// data on sdo must be latched by slave on rising sck edge. data on sdo changes on falling edge of sck +// +// data from sdi is latched by master on positive edge of sck, while slave changes it on falling edge. +// WARNING: slave must emit valid di7 bit BEFORE first pulse on sck! +// +// start is synchronous pulse, which starts all transfer and also latches din data on the same clk edge +// as it is registered high. start can be given anytime (only when speed=0), +// so it is functioning then as synchronous reset. when speed!=0, there is global enable for majority of +// flipflops in the module, so start can't be accepted at any time +// +// dout updates with freshly received data at the clk edge in which sck goes high for the last time, thus +// latching last bit on sdi. +// +// sdo emits last bit shifted out after the transfer end + +module spi +( + // interface + input clk, // system clock + input rd, + input wr, + input reset, + + // SPI wires + output sck, // SCK + output sdcs, // SCS + output reg sdo, // MOSI + input sdi, // MISO + + // data + input [7:0] din, + output reg [7:0] dout, + + // output + output ready // start strobe, 1 clock length +); + +reg [4:0] counter; + +assign sck = counter[0]; +assign sdcs = 1'b0; // slave always selected +assign ready = counter[4]; // 0 - transmission in progress + +always @(posedge clk) begin + reg [7:0] shift; + + if (reset) begin + counter[4] <= 5'b0; + end + else if (wr) begin + counter <= 5'b0; + sdo <= din[7]; + shift[7:1] <= din[6:0]; + end + else if (!ready) begin + counter <= counter + 5'd1; + + // shift in (rising edge of SCK) + if (!sck) begin + shift[0] <= sdi; + if (&counter[3:1]) dout <= {shift[7:1], sdi}; + end + + // shift out (falling edge of sck) + if (sck) begin + sdo <= shift[7]; + shift[7:1] <= shift[6:0]; // last bit remains after end of exchange + end + end +end + +endmodule \ No newline at end of file diff --git a/MicrocomputerZ80CPM.vhd b/MicrocomputerZ80CPM.vhd index e694b62..d36a901 100644 --- a/MicrocomputerZ80CPM.vhd +++ b/MicrocomputerZ80CPM.vhd @@ -54,11 +54,16 @@ entity MicrocomputerZ80CPM is ps2Clk : in std_logic; ps2Data : in std_logic; - sdCS : out std_logic; + sdCS : out std_logic; sdMOSI : out std_logic; sdMISO : in std_logic; sdSCLK : out std_logic; - driveLED : out std_logic :='1' + driveLED : out std_logic :='1'; + + usbCS : out std_logic; + usbMOSI : out std_logic; + usbMISO : in std_logic; + usbSCLK : out std_logic ); end MicrocomputerZ80CPM; @@ -75,6 +80,7 @@ architecture struct of MicrocomputerZ80CPM is signal internalRam2DataOut : std_logic_vector(7 downto 0); signal interface1DataOut : std_logic_vector(7 downto 0); signal interface2DataOut : std_logic_vector(7 downto 0); + signal ch376sDataOut : std_logic_vector(7 downto 0); signal sdCardDataOut : std_logic_vector(7 downto 0); signal n_memWR : std_logic :='1'; @@ -95,6 +101,7 @@ architecture struct of MicrocomputerZ80CPM is signal n_basRomCS : std_logic :='1'; signal n_interface1CS : std_logic :='1'; signal n_interface2CS : std_logic :='1'; + signal n_ch376sCS : std_logic :='1'; signal n_sdCardCS : std_logic :='1'; signal serialClkCount : std_logic_vector(15 downto 0); @@ -107,6 +114,28 @@ architecture struct of MicrocomputerZ80CPM is --CPM signal n_RomActive : std_logic := '0'; +component ch376s is + port ( + -- interface + clk : in std_logic; + rd : in std_logic; + wr : in std_logic; + reset : in std_logic; + a0 : in std_logic; + + -- SPI wires + sck : out std_logic; + sdcs : out std_logic; + sdo : out std_logic; -- reg + sdi : in std_logic; + + -- data + din : in std_logic_vector (7 downto 0); + dout : out std_logic_vector (7 downto 0) -- reg + ); +end component; + + begin --CPM -- Disable ROM if out 38. Re-enable when (asynchronous) reset pressed @@ -234,6 +263,24 @@ port map( clk => sdClock -- twice the spi clk ); +usb : ch376s +port map ( + sdcs => usbCS, + sdo => usbMOSI, + sdi => usbMISO, + sck => usbSCLK, + + wr => not (n_ch376sCS or n_ioWR), + rd => not (n_ch376sCS or n_ioRD), + + dout => ch376sDataOut, + din => cpuDataOut, + + a0 => cpuAddress (0), + reset => not N_RESET, + clk => sdClock +); + -- ____________________________________________________________________________________ -- MEMORY READ/WRITE LOGIC GOES HERE @@ -250,6 +297,7 @@ n_memRD <= n_RD or n_MREQ; n_basRomCS <= '0' when cpuAddress(15 downto 13) = "000" and n_RomActive = '0' else '1'; --8K at bottom of memory n_interface1CS <= '0' when cpuAddress(7 downto 1) = "1000000" and (n_ioWR='0' or n_ioRD = '0') else '1'; -- 2 Bytes $80-$81 n_interface2CS <= '0' when cpuAddress(7 downto 1) = "1000001" and (n_ioWR='0' or n_ioRD = '0') else '1'; -- 2 Bytes $82-$83 +n_ch376sCS <= '0' when cpuAddress(7 downto 1) = "0010000" and (n_ioWR='0' or n_ioRD = '0') else '1'; -- 2 Bytes $20-$21 n_sdCardCS <= '0' when cpuAddress(7 downto 3) = "10001" and (n_ioWR='0' or n_ioRD = '0') else '1'; -- 8 Bytes $88-$8F n_internalRam1CS <= not n_basRomCS; -- Full Internal RAM - 64 K @@ -260,6 +308,7 @@ n_internalRam1CS <= not n_basRomCS; -- Full Internal RAM - 64 K cpuDataIn <= interface1DataOut when n_interface1CS = '0' else interface2DataOut when n_interface2CS = '0' else +ch376sDataOut when n_ch376sCS = '0' else sdCardDataOut when n_sdCardCS = '0' else basRomData when n_basRomCS = '0' else internalRam1DataOut when n_internalRam1CS= '0' else @@ -272,6 +321,8 @@ x"FF"; -- SUB-CIRCUIT CLOCK SIGNALS serialClock <= serialClkCount(15); +--sdClock <= clk; + process (clk) begin if rising_edge(clk) then @@ -281,19 +332,20 @@ begin else cpuClkCount <= (others=>'0'); end if; - if cpuClkCount < 2 then -- 2 when 10MHz, 2 when 12.5MHz, 2 when 16.6MHz, 1 when 25MHz + + if cpuClkCount < 4 then -- 2 when 10MHz, 2 when 12.5MHz, 2 when 16.6MHz, 1 when 25MHz cpuClock <= '0'; else cpuClock <= '1'; end if; - if sdClkCount < 49 then -- 1MHz + if sdClkCount < 1 then -- 25MHz sdClkCount <= sdClkCount + 1; else sdClkCount <= (others=>'0'); end if; - if sdClkCount < 25 then + if sdClkCount < 1 then -- 12,5Mhz sdClock <= '0'; else sdClock <= '1'; diff --git a/MultiComp.qsf b/MultiComp.qsf index eea8a64..cd6691f 100644 --- a/MultiComp.qsf +++ b/MultiComp.qsf @@ -70,7 +70,7 @@ set_global_assignment -name SEED 1 #set_global_assignment -name VERILOG_MACRO "USE_DDRAM=1" #do not enable DEBUG_NOHDMI in release! -#set_global_assignment -name VERILOG_MACRO "DEBUG_NOHDMI=1" +# set_global_assignment -name VERILOG_MACRO "DEBUG_NOHDMI=1" source sys/sys.tcl set_global_assignment -name FAMILY "Cyclone V" @@ -243,8 +243,6 @@ set_location_assignment PIN_W20 -to SW[3] set_hps_location_assignment HPSINTERFACEPERIPHERALSPIMASTER_X52_Y72_N111 -to spi set_hps_location_assignment HPSINTERFACEPERIPHERALUART_X52_Y67_N111 -to uart set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:sys/build_id.tcl" -set_global_assignment -name CDF_FILE jtag.cdf -set_global_assignment -name QIP_FILE sys/sys.qip source sys/sys_analog.tcl set_location_assignment PIN_AF25 -to SDIO_DAT[0] set_location_assignment PIN_AF23 -to SDIO_DAT[1] @@ -295,6 +293,10 @@ set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED_* set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to BTN_* set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to BTN_* +set_global_assignment -name VERILOG_FILE Components/USB/spi_master_simple.v +set_global_assignment -name VERILOG_FILE Components/USB/ch376s.v +set_global_assignment -name CDF_FILE jtag.cdf +set_global_assignment -name QIP_FILE sys/sys.qip set_global_assignment -name QIP_FILE rtl/pll.qip set_global_assignment -name SYSTEMVERILOG_FILE MultiComp.sv set_global_assignment -name VHDL_FILE Components/M6809/cpu09l.vhd @@ -325,4 +327,5 @@ set_global_assignment -name QIP_FILE ROMS/Z80/Z80_CPM_BASIC_ROM.qip set_global_assignment -name VHDL_FILE MicrocomputerZ80CPM.vhd set_global_assignment -name VHDL_FILE Microcomputer6502Basic.vhd set_global_assignment -name VHDL_FILE Microcomputer6809Basic.vhd +set_global_assignment -name VHDL_FILE MicrocomputerZ80Basic.vhd set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/MultiComp.qws b/MultiComp.qws index 7c92db1b6abde3dea07d2fd4896ae54c4bd8874d..1c47226591c5b967f436d8f62c97e891a49f1bf0 100644 GIT binary patch delta 67 zcmaFO@|tDBJl5|F42*XsF18Y4yu-l2kihW&|9=JsR%4Lp#`g(~GHkj)=53%97yxDe KfiQ@}!~g&k_!ij! delta 67 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 z%0A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 x-!Rj(|IOEe> logical shift right + + ~ Unary bit inversion (one's complement) + - unary negation + + = Relational equal + == equal + != not equal + < less than + > greater than + <= less than or equal + >= greater than or equal + + & Binary binary 'and' + | binary 'or' + ^ binary 'exclusive or' + +The syntax is much the same as in 'C' with the following notes: + +1. No operator precedence is in effect. Evaluation is from left to right +unless grouped by parenthesis (see example below). + +2. All evaluations are done with 32 bit signed precision. + +3. Both '=' and '==' are allowable equality checkers. This is allowed since +the syntax does not provide assignment capability (as '=' would normally +imply). + +The relational operators return a value of 1 if the relation is true and 0 if +it is false. Thirtytwo bit signed arithmetic is used. + +It is always a good idea to explicitly indicate the desired order of +evaluation with parenthesis, especially to maintain portability since +TASM does not evaluate expressions in the same manner as many other +assemblers. To understand how it does arrive at the values for +expressions, consider the following example: + TASM - Table Driven Assembler Version 2.9 Page 16 + + 1 + 2*3 + 4 + +TASM would evaluate this as: + + (((1 + 2) * 3) + 4) = 13 + +Typical rules of precedence would cause the (2*3) to be evaluated first, such +as: + + 1 + (2*3) + 4 = 11 + +To make sure you get the desired order of evaluation, use parenthesis +liberally. + +Note that TASM versions earlier than 2.7.8 employed a somewhat different +method of evaluating expressions (also without precedence) that essentially +resulted in a right to left evaluation. + +Here are some examples of valid expressions: + + (0f800H + tab) + (label_2 >> 8) + (label_3 << 8) & $f000 + $ + 4 + 010010000100100b + 'a' + (base + ((label_4 >> 5) & (mask << 2)) + TASM - Table Driven Assembler Version 2.9 Page 17 + +ASSEMBLER DIRECTIVES + +Most of the assembler directives have a format similar to the machine +instruction format. However, instead of specifying operations for the +processor to carry out, the directives cause the assembler to perform some +function related to the assembly process. TASM has two types of assembler +directives - those that mimic the 'C' preprocessor functions, and those that +resemble the more traditional assembler directive functions. Each of these +will be discussed. + +The 'C' preprocessor style directives are invoked with a '#' as the first +character of the line followed by the appropriate directive (just as in 'C'). +Thus, these directives cannot have a label preceding them (on the same line). +Note that in the examples directives are shown in upper case, however, either +upper or lower case is acceptable. + +ADDINSTR. This directive can be used to define additional instructions for +TASM to use in this assembly. The format is: + +[label] .ADDINSTR inst args opcode nbytes modop class shift binor + +The fields are separated by white space just as they would appear in an +instruction definition file. See the TASMTABS.DOC file on the TASM +distribution disk for more detail. + +AVSYM. See SYM/AVSYM. + +BLOCK. This directive causes the Instruction Pointer to advance the specified +number of bytes without assigning values to the skipped over locations. The +format is: + + [label] .BLOCK expr + +Some valid examples are: + + word1 .BLOCK 2 + byte1 .block 1 + buffer .block 80 + +BSEG/CSEG/DSEG/NSEG/XSEG. These directives can be invoked to indicate the +appropriate address space for symbols and labels defined in the subsequent +code. The invocation of these directives in no way affects the code +generated, only provides more information in the symbol table file if the +AVSYM directive is employed. Segment control directives such as these are +generally supported by assemblers that generate relocatable object code. +TASM does not generate relocatable object code and does not support a link +phase, so these directives have no direct effect on the resulting object +code. The segments are defined as follows: + + Directive Segment Description + _________________________________________________________ + BSEG Bit address + CSEG Code address + DSEG Data address (internal RAM) + NSEG Number or constant (EQU) + XSEG External data address (external RAM) + TASM - Table Driven Assembler Version 2.9 Page 18 + +BYTE. This directive allows a value assignment to the byte pointed to by the +current Instruction Pointer. The format is: + + [label] .BYTE expr [, expr ...] + +Onlythe lower eight bits of expr are used. Multiple bytes may be assigned by +separating them with commas or (for printable strings) enclosed in double +quotes. Here are some examples: + + + label1 .BYTE 10010110B + .byte 'a' + .byte 0 + .byte 100010110b,'a',0 + .byte "Hello", 10, 13, "World" + + +CHK. This directive causes a checksum to be computed and deposited at the +current location. The starting point of the checksum calculation is +indicated as an argument. Here is the format: + + .CHK starting_addr + +Here is an example: + + + start: NOP + LDA #1 + .CHK start + + +The checksum is calculated as the simple arithmetic sum of all bytes starting +at the start_add up to but not including the address of the CHK directive. +The least significant byte is all that is used. + +CODES/NOCODES. These directives can be used to alternately turn on or off the +generation of formatted listing output with line numbers, opcodes, data, etc. +With NOCODES in effect, the source lines are sent to the listing file +untouched. This is useful around blocks of comments that need a full 80 +columns of width for clarity. + +DB. This is alternate form of the BYTE directive. + +DW. This is alternate form of the WORD directive. + +DEFINE. The DEFINE directive is one of the most powerful of the directives +and allows string substitution with optional arguments (macros). The format +is as follows: + + #DEFINE macro_label[(arg_list)] [macro_definition] + + macro_label := string to be expanded when found in the source file. + + arg_list := optional argument list for variable substitution + + macro_def := string to replace the occurrences of macro_label in + TASM - Table Driven Assembler Version 2.9 Page 19 + + the source file. + +The simplest form of the DEFINE directive might look like this: + + #DEFINE MLABEL + +Notice that no substitutionary string is specified. The purpose of a +statement like this would typically be to define a label for the purpose of +controlling some subsequent conditional assembly (IFDEF or IFNDEF). + +A more complicated example, performing simple substitution, might look like +this: + + #DEFINE VAR1_LO (VAR1 & 255) + +This statement would cause all occurrences of the string 'VAR1_LO' in the +source to be substituted with '(VAR1 & 255)'. + +As a more complicated example, using the argument expansion +capability, consider this: + + #DEFINE ADD(xx,yy) clc\ lda xx\ adc yy\ sta xx + +If the source file then contained a line like this: + + ADD(VARX,VARY) + +It would be expanded to: + + clc\ lda VARX\ adc VARY\ sta VARX + +The above example shows the use of the backslash ('\') character as a +multiple instruction statement delimiter. This approach allows the +definition of fairly powerful, multiple statement macros. The example +shown generates 6502 instructions to add one memory location to another. + +Some rules associated with the argument list: + +1. Use a maximum of 10 arguments. + +2. Each argument should be a maximum of 15 characters. + +Note that macros can be defined on the TASM command line, also, with the '-d' +option flag. + +DEFCONT. This directive can be used to add to the last macro started with a +DEFINE directive. This provides a convenient way to define long macros +without running off the edge of the page. The ADD macro shown above could be +defined as follows: + + #DEFINE ADD(xx,yy) clc + #DEFCONT \ lda xx + #DEFCONT \ adc yy + #DEFCONT \ sta xx + +EJECT. This directive can be used to force a top of form and the + TASM - Table Driven Assembler Version 2.9 Page 20 + +generation of a page header on the list file. It has no effect if the +paging mode is off (see PAGE/NOPAGE). The format is: + + .EJECT + +ELSE. This directive can optionally be used with IFDEF, IFNDEF and IF to +delineate an alternate block of code to be assembled if the block immediately +following the IFDEF, IFNDEF or IF is not assembled. + +Here are some examples of the use of IFDEF, IFNDEF, IF, ELSE, and ENDIF: + + #IFDEF label1 + lda byte1 + sta byte2 + #ENDIF + + #ifdef label1 + lda byte1 + #else + lda byte2 + #endif + + #ifndef label1 + lda byte2 + #else + lda byte1 + #endif + + #if ($ >= 1000h) + ; generate an invalid statement to cause an error + ; when we go over the 4K boundary. + !!! PROM bounds exceeded. + #endif + +END. This directive should follow all code/data generating statements in +the source file. It forces the last record to be written to the object file. +The format is: + + [label] .END + +ENDIF. This directive must always follow an IFDEF, IFNDEF, or IF directive +and signifies the end of the conditional block. + +EQU. This directive can be used to assign values to labels. The labels can +then be used in expressions in place of the literal constant. The format is: + + label .EQU expr + +Here is an example: + + MASK .EQU 0F0H + ; + lda IN_BYTE + and MASK + sta OUT_BYTE + + TASM - Table Driven Assembler Version 2.9 Page 21 + +An alternate form of 'EQU' is '='. The previous example is equivalent to: + + MASK = 0F0H + +or + + MASK =0FOH + MASK =$FO + +White space must exist after the label, but none is required after the '='. + +EXPORT. This directive can be used to define labels (symbols) that are to be +written to the export symbol file. The symbols are written as equates (using +the .EQU directive) so that the resulting file can be included in a +subsequent assembly. This feature can help overcome some of the deficiencies +of TASM due to its lack of a relocating linker. The format is: + +[label] .EXPORT label + +The following example illustrates the use of the EXPORT directive and the +format of the resulting export file: + +Source file: + + .EXPORT read_byte + .EXPORT write_byte + .EXPORT open_file + +Resulting export file: + +read_byte .EQU $1243 +write_byte .EQU $12AF +open_file .EQU $1301 + + +IFDEF. This directive can be used to optionally assemble a block of code. It +has the following form: + + #IFDEF macro_label + +When invoked, the list of macro labels (established via DEFINE directives) is +searched. If the label is found, the following lines of code are assembled. +If not found, the input file is skipped until an ENDIF or ELSE directive is +found. + +Lines that are skipped over still appear in the listing file, but a '~' will +appear immediately after the current PC and no object code will be generated +(this is applicable to IFDEF, IFNDEF, and IF). + +IFNDEF. This directive is the opposite of the IFDEF directive. The block of +code following is assembled only if the specified macro_label is undefined. +It has the following form: + + #IFNDEF macro_label + +When invoked, the list of macro labels (established via DEFINE directives) is + TASM - Table Driven Assembler Version 2.9 Page 22 + +searched. If the label is not found, the following lines of code are +assembled. If it is found, the input file is skipped until an ENDIF or ELSE +directive is found. + +IF. This directive can be used to optionally assemble a block of code +dependent on the value of a given expression. The format is as follows: + + #IF expr + +If the expression expr evaluates to non-zero, the following block of code is +assembled (until an ENDIF or ELSE is encountered). + +INCLUDE. The INCLUDE directive reads in and assembles the indicated source +file. INCLUDEs can be nested up to six levels. This allows a convenient +means to keep common definitions, declarations, or subroutines in files to be +included as needed. The format is as follows: + + #INCLUDE filename + +The filename must be enclosed in double quotes. Here are some examples: + + #INCLUDE "macros.h" + #include "equates" + #include "subs.asm" + +LIST/NOLIST. These directives can be used to alternately turn the output to +the list file on (LIST) or off (NOLIST). The format is: + + .LIST + .NOLIST + +LOCALLABELCHAR. This directive can be used to override the default "_" as the +label prefix indicating a local label. For example, to change the prefix to +"?" do this: + + .LOCALLABELCHAR "?" + +Be carefull to use only characters that are not operators for expression +evaluation. To do so causes ambiguity for the expression evaluator. Some +safe characters are "?", "{", and "}". + +LSFIRST/MSFIRST. These directives determine the byte order rule to be +employed for the WORD directive. The default (whether correct or not) for +all TASM versions is the least significant byte first (LSFIRST). The +following illustrates its effect: + + 0000 34 12 .word $1234 + 0002 .msfirst + 0002 12 34 .word $1234 + 0004 .lsfirst + 0004 34 12 .word $1234 + + +ORG. This directive provides the means to set the Instruction Pointer (a.k.a. +Program Counter) to the desired value. The format is: + + TASM - Table Driven Assembler Version 2.9 Page 23 + + [label] .ORG expr + +The label is optional. The Instruction pointer is assigned the value of the +expression, expr. For example, to generate code starting at address 1000H, +the following could be done: + + start .ORG 1000H + +The expression (expr) may contain references to the current Instruction +Pointer, thus allowing various manipulations to be done. For example, to +align the Instruction Pointer on the next 256 byte boundary, the following +could be done: + + .ORG (($ + 0FFH) & 0FF00H) + +ORG can also be used to reserve space without assigning values: + + .ORG $+8 + +An alternate form of ORG is '*=' or '$='. Thus the following two examples +are exactly equivalent to the previous example: + + *=*+8 + $=$+8 + +PAGE/NOPAGE. These directives can be used to alternately turn the paging +mode on (PAGE) or off (NOPAGE). If paging is in effect, then every sixty +lines of output will be followed by a Top of Form character and a two line +header containing page number, filename, and the title. The format is: + + .PAGE + .NOPAGE + +The number of lines per page can be set with the '-p' command line option. + + +SET. This directive allows the value of an existing label to be changed. The +format is: + + label .SET expr + +The use of the SET directive should be avoided since changing the value of a +label can sometimes cause phase errors between pass 1 and pass 2 of the +assembly. + +SYM/AVSYM. These directives can be used to cause a symbol table file to be +generated. The format is: + + .SYM ["symbol_filename"] + .AVSYM ["symbol_filename"] + + TASM - Table Driven Assembler Version 2.9 Page 24 + +For example: + + .SYM "symbol.map" + .SYM + .AVSYM "prog.sym" + .AVSYM + +The two directives are similar, but result in a different format of the +symbol table file. The format of the SYM file is one line per symbol, each +symbol starts in the first column and is followed by white space and then +four hexadecimal digits representing the value of the symbol. The following +illustrates the format: + + label1 FFFE + label2 FFFF + label3 1000 + +The AVSYM is provided to generate symbol tables compatible with the Avocet +8051 simulator. The format is similar, but each line is prefixed by an 'AS' +and each symbol value is prefixed by a segment indicator: + + AS start C:1000 + AS read_byte C:1243 + AS write_byte C:1280 + AS low_nib_mask N:000F + AS buffer X:0080 + +The segment prefixes are determined by the most recent segment directive +invoked (see BSEG/CSEG/DSEG/NSEG/XSEG directives). + +TEXT. This directive allows an ASCII string to be used to assign values to a +sequence of locations starting at the current Instruction Pointer. The +format is: + + [label] .TEXT "string" + +The ASCII value of each character in string is taken and assigned to the next +sequential location. Some escape sequences are supported as follows: + + Escape + Sequence Description + ___________________________________________________ + \n Line Feed + \r Carriage return + \b Backspace + \t Tab + \f Formfeed + \\ Backslash + \" Quote + \000 Octal value of character + TASM - Table Driven Assembler Version 2.9 Page 25 + + +Here are some examples: + + message1 .TEXT "Disk I/O error" + message2 .text "Enter file name " + .text "abcdefg\n\r" + .text "I said \"NO\"" + + +TITLE. This directive allows the user to define a title string that appears +at the top of each page of the list file (assuming the PAGE mode is on). The +format is: + + .TITLE "string" + +The string should not exceed 80 characters. Here are some examples: + + .TITLE "Controller version 1.1" + .title "This is the title of the assembly" + .title "" + TASM - Table Driven Assembler Version 2.9 Page 26 + + +WORD. This directive allows a value assignment to the next two bytes pointed +to by the current Instruction Pointer. The format is: + + [label] .WORD expr + +The least significant byte of expr is put at the current Instruction Pointer +with the most significant byte at the next sequential location (unless the +MSFIRST directive has been invoked). Here are some examples: + + data_table .WORD (data_table + 1) + .word $1234 + .Word (('x' - 'a') << 2) + .Word 12, 55, 32 + + TASM - Table Driven Assembler Version 2.9 Page 27 + +OBJECT FILE FORMATS + +TASM supports four object file formats: + + 1. Intel Hex (default). + 2. MOS Technology Hex. + 3. Motorola Hex. + 4. Binary + +Each are described below: + +Intel Hex Object Format. This is the default format. This format is line +oriented and uses only printable ASCII characters except for the carriage +return/line feed at the end of each line. Each line in the file assumes the +following format: + +:NNAAAARRHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHCCTT + +Where: + +All fields marked 'hex' consist of two or four ASCII hexadecimal digits (0-9, +A-F). A maximum of 24 data bytes will be represented on each line (override +the 24 byte default with the '-o' command line option). + +: = Record Start Character +NN = Byte Count (hex) +AAAA = Address of first byte (hex) +RR = Record Type (hex, 00 except for last record which is 01) +HH = Data Bytes (hex) +CC = Check Sum (hex) +TT = Line Terminator (carriage return, line feed) + +The last line of the file will be a record conforming to the above format +with a byte count of zero: + + :00000001FF + +The checksum is defined as: + + sum = byte_count + addr_hi + addr_lo + record_type + (sum of data bytes) + checksum = ((-sum) & ffh) + TASM - Table Driven Assembler Version 2.9 Page 28 + +MOS Technology Hex Object Format. This format is line oriented and uses only +printable ASCII characters except for the carriage return/line feed at the +end of each line. Each line in the file assumes the following format: + +;NNAAAAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHCCCCTT + +All fields marked 'hex' consist of two or four ASCII hexadecimal digits (0-9, +A-F). A maximum of 24 data bytes will be represented on each line (override +the 24 byte default with the '-o' command line option). + +; = Record Start Character +NN = Byte Count (hex) +AAAA = Address of first byte (hex) +HH = Data Bytes (hex) +CCCC = Check Sum (hex) +TT = Line Terminator (carriage return, line feed) + +The last line of the file will be a record with a byte count of zero (';00'). + +The checksum is defined as: + + sum = byte_count + address_hi + address_lo + record_type + + (sum of all data bytes) + checksum = (sum & ffffh) + + +Motorola Hex Object Format. This format is line oriented and uses only +printable ASCII characters except for the carriage return/line feed at the +end of each line. Each line in the file assumes the following format: + +S1NNAAAAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHCCCCTT + +All fields marked 'hex' consist of two or four ASCII hexadecimal digits (0-9, +A-F). A maximum of 24 data bytes will be represented on each line (override +the 24 byte default with the '-o' command line option). + +S1 = Record Start Prefix +NN = Byte Count (hex) (data byte count + 3) +AAAA = Address of first byte (hex) +HH = Data Bytes (hex) +CC = Check Sum (hex) +TT = Line Terminator (carriage return, line feed) + +The last line of the file will be a record with a byte count of zero +('S903AAAACCTT'). The checksum is defined as: + + sum = byte_count + address_hi + address_lo + record_type + + (sum of all data bytes) + checksum = (~sum & ffh) + + +Binary Object Format. This file format has only a binary representation of +each data byte with no address, checksum or format description, whatsoever. +It is often a convenient format to use to pass the data to other programs on +your PC (like a PROM programmer package) but because of the non-printability +and lack of address information, it is not often used to transmit the code to + TASM - Table Driven Assembler Version 2.9 Page 29 + +other systems. + +Note that when this object format is selected (-b option), the -c option is +forced. This is done so that no ambiguity arises as a result of the lack of +address information in the file. Without the -c option, discontinuous blocks +of object code would appear contiguous. + + TASM - Table Driven Assembler Version 2.9 Page 30 + +LISTING FILE FORMAT + +Each line of source code generates one (or more) lines of output in the +listing file. The fields of the output line are as follows: + +1. Current source file line number (4 decimal digits). + +2. An optional '+' appears if this is an 'INCLUDE' file. (One '+' for +each level of INCLUDE invoked). + +3. Current Instruction Pointer (4 hex digits). An optional '~' follows the +Instruction Pointer if the line of source code is not being assembled because +of an IFDEF, IFNDEF, or IF directive. + +4. Resulting code/data generated from this source line (two hex digits per +byte, each byte separated by a space, up to six bytes per line). + +5. The source line exactly as it appears in the source file. + +If paging is enabled (by either the '-p' option flag or the .PAGE +directive) some additional fields will be inserted into the listing file +every 60 lines. These fields are: + + 1. Top of Form (form feed). + 2. Assembler identifier (e.g. "TASM 6502 Assembler"). + 3. Initial source file name. + 4. Page number. + 5. Title. + TASM - Table Driven Assembler Version 2.9 Page 31 + +PROM PROGRAMMING + +A wide variety of PROM programming equipment is available that can use object +code in one or more of the formats TASM supports. Here are some notes +concerning the generation of code to be put in PROMs: + +1. PRESET MEMORY. It is often desirable to have all bytes in the PROM +programmed even if not explicitly assigned a value in the source code (e.g. +the bytes are skipped over with a .ORG statement). This can be accomplished +by using the -c (contiguous block) and the -f (fill) command line option +flags. The -c will ensure that every byte from the lowest byte assigned a +value to the the highest byte assigned a value will be in the object file +with no gaps. The -f flag will assign the specified value to all bytes +before the assembly begins so that when the object file is written, all bytes +not assigned a value in the source code will have a known value. As an +example, the following command line will generate object code in the default +Intel Hex format with all bytes not assigned a value in the source set to EA +(hex, 6502 NOP): + + tasm -65 -c -fEA test.asm + +2. CONTIGUOUS BLOCKS. To ensure that TASM generates object code to cover +the full address range of the target PROM, put a .ORG statement at the end of +the source file set to the last address desired. For example, to generate +code to be put in a 2716 EPROM (2 Kbytes) from hex address $1000 to $17ff, do +something like this in the source file: + + ;start of the file + .ORG $1000 + ;rest of the source code follows + + + + ;end of the source code + .ORG $17ff + .BYTE 0 + .END + +Now, to invoke TASM to generate the code in the binary format with all +unassigned bytes set to 00 (6502 BRK), do the following: + + tasm -65 -b -f00 test.asm + +Note that -b forces the -c option. + + TASM - Table Driven Assembler Version 2.9 Page 32 + +ERROR MESSAGES + + +Error Message Description +______________________________________________________________________________ +Binary operator where value expected. Two binary operators in a row + indicate a missing value. + +Cannot malloc for label storage Insufficient memory to store more + labels. See LIMITATIONS. + +Duplicate label. Duplicate label checks are + optionally enabled by the '-a' + option. + +File name too short A file name on the command line is + fewer than 3 characters. This is + done to prevent a garbled option + flag from being taken as a source + file, which in turn can result in + the source file taken as an object + file (which are truncated at start- + up time). + +Heap overflow on label definition. TASM was unable to allocate memory + to store the label. + +Invalid operand. No indirection for this instruction. + The first character of an operand + was a left parenthesis for an + instruction that does not + explicitly specify that as the + format. Some micros use the + parenthesis as an indicator of + indirection, but putting a layer of + parenthesis around an expression is + always a valid thing to do (as far + as the expression evaluator is + concerned). The test for this case + is only done if the -a4 option is + selected. See section on ASSEMBLY + CONTROL. + +Invalid token where value expected. Two binary operators in a row are + not allowed. + +Label too long Labels are limited to 31 characters. + +Label value misaligned The value of a label appears to + have a different value on the + second pass then it was computed to + have on the first pass. This is + generally due to Zero Page + Addressing mode problems with the + 6502 version of TASM. Labels that + are used in operands for statements + TASM - Table Driven Assembler Version 2.9 Page 33 + + that could utilize Zero Page + addressing mode should always be + defined before used as an operand. + +Label not found A label used in an expression was + not found in the current label + table. + +Label must pre-exist for SET. The SET directive can only be + applied to an existing label. + +Label table overflow To many labels have been + encountered. + +List file open error TASM was not able to open the + specified list file. + +Macro expansion too long. The expansion of a macro resulted + in a line that exceeded the maximum + length. + +Maximum number of macros exceeded To many macros (DEFINEs) have been + encountered. + +No END directive before EOF The source file did not have an END + directive in it. This is not fatal, + but may cause the last object file + record to be lost. + +No files specified TASM was invoked with no source + file specified. + +No such label yet defined. A SET directive was encountered for + a label not yet defined. The value + of labels that are modified by the + SET directive must already exist. + +No indirection for this instruction. A parenthesis was found around the + operand expression. This may + indicate an attempt to use + indirection where it is + inappropriate. + +Non-unary operator at start of expression A binary operator (such as '*') was + found at the beginning of an + expression. Some micros use '*' as + an indirection operator. Since it + is also a legititmate operator in + an expression, some ambiguity can + arise. If a particular + instruction/addressing mode does + not allow indirection, and a '*' is + placed in front of the associated + expression, the assembler will + assume this error. See the -a8 + option of ASSEMBLY CONTROL. + TASM - Table Driven Assembler Version 2.9 Page 34 + +Object file open error TASM was not able to open the + specified object file. + +Range of argument exceeded The value of an argument exceeds + the valid range for the current + instruction and addressing mode. + +Range of relative branch exceeded A branch instruction exceeds the + maximum range. + +Source file open error TASM was not able to open the + specified source file. + +Unrecognized directive A statement starting with a '.' or + '#' has a mnemonic that is not + defined as a directive. + +Unrecognized instruction A statement has an opcode mnemonic + that is not defined. + +Unrecognized argument A statement has an operand format + that is not defined. + +Unknown token Unexpected characters were found + while parsing an expression. + +Unused data in MS byte of argument. An instruction or directive used + the least significant byte of an + argurment and left the most + significant byte unused, but it was + non-zero. + +Unkown option Flag. Invalid option flag has been + specified on the command line. + invoke TASM with nothing on the + command line to see a list of valid + options. + + TASM - Table Driven Assembler Version 2.9 Page 35 + +BUGS AND LIMITATIONS + +Limitations and Specifications + TASM TASMB +_____________________________________________________________________________ +Maximum number of labels 2000 10000 +Maximum length of labels 32 characters +Maximum address space 64 Kbytes (65536 bytes) +Maximum number of nested INCLUDES 4 +Maximum length of TITLE string 79 characters +Maximum source line length 255 characters +Maximum length after macro expansion 255 characters +Maximum length of expressions 255 characters +Maximum length of pathnames 79 characters +Maximum length of command line 127 characters + +Maximum number of instructions (per table) 600 1000 +Maximum number of macros 1000 +Maximum number of macro arguments 10 +Maximum length of macro argument 16 characters +Heap size (for labels, macros, & buffers) 20000 bytes 60000 +Memory requirements 160K 256K + +Bugs + +1. The 8048 version of TASM does not check for use of memory beyond any +reasonable bounds (e.g. an 8048 has a maximum address space of 4 Kbytes but +TASM will let you pretend that you have 64 Kbytes). + +2. Expression evaluation has no operator precedence in effect which can +make for unexpected results if not explicitly grouped with parenthesis. + +3. First page of listing file will not show a user defined title (defined +via TITLE directive). + +4. TASM sometimes does not generate error messages for improperly formed +expressions. + + TASM - Table Driven Assembler Version 2.9 Page 36 + +APPENDIX A - ORDERING INFORMATION + +TASM is distributed as shareware. The shareware portion of the product may +be freely copied and used for evaluation purposes. Use of TASM beyond an +evaluation period of 90 days requires registration. Registered users receive +the following benefits: + + 1. The recent version of TASM. + 2. TASM source code (in C). + 3. Bound TASM manual. + 4. Telephone support. + 5. Knowledge that they are supporting the development of useful + but inexpensive software. + +DESCRIPTION UNIT PRICE PRICE +___________________________________________________________________________ + +TASM Registration (TASM disk, manual, & source) $40.00 _______ + +TASM Site Registration (for sites with multiple 90.00 _______ + users. Includes same materials as above.) + +TASM User's Manual (included above) 10.00 _______ + +TASM update for registered users 10.00 _______ + (latest disk (with source), and manual) + +Subtotal _______ + +Tax (Washington state residents add 8.2%) _______ + +Billing fee (for orders not accompanied by check) 10.00 _______ + +Foreign postage (outside North America) add $10.00 _______ + (Foreign orders must be in US funds drawn on a US bank) + +TOTAL (post paid) _______ + + +Which processors are of primary interest to you? __________________ +(This is for our information only. You will receive all current TASM tables). + +Shipping Address: Send check or money order to: + Speech Technology Incorporated +______________________________________________ Software Division + 837 Front Street South +______________________________________________ Issaquah, WA 98027 USA + +______________________________________________ + + \ No newline at end of file diff --git a/Z80 CPM and bootloader (basmon)/TASM80.TAB b/Z80 CPM and bootloader (basmon)/TASM80.TAB new file mode 100644 index 0000000..3c1d554 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/TASM80.TAB @@ -0,0 +1,579 @@ +"TASM Z80 Assembler. " +/**************************************************************************** +/* $Id: tasm80.tab 1.1 1993/07/31 01:12:40 toma Exp $ +/**************************************************************************** +/* This is the instruction set definition table +/* for the Z80 version of TASM. +/* Thomas N. Anderson, Speech Technology Incorporated +/* This table authored and submitted by Carl A. Wall, VE3APY. +/* +/* Class bits assigned as follows: +/* Bit-0 = Z80 (base instruction set) +/* Bit-1 = HD64180 (extended instructions) +/* See TASM manual for info on table structure. +/* +/*INSTR ARGS OP BYTES RULE CLASS SHIFT OR */ +/*-------------------------------------------*/ + +ADC A,(HL) 8E 1 NOP 1 +ADC A,(IX*) 8EDD 3 ZIX 1 +ADC A,(IY*) 8EFD 3 ZIX 1 +ADC A,A 8F 1 NOP 1 +ADC A,B 88 1 NOP 1 +ADC A,C 89 1 NOP 1 +ADC A,D 8A 1 NOP 1 +ADC A,E 8B 1 NOP 1 +ADC A,H 8C 1 NOP 1 +ADC A,L 8D 1 NOP 1 +ADC A,* CE 2 NOP 1 +ADC HL,BC 4AED 2 NOP 1 +ADC HL,DE 5AED 2 NOP 1 +ADC HL,HL 6AED 2 NOP 1 +ADC HL,SP 7AED 2 NOP 1 + +ADD A,(HL) 86 1 NOP 1 +ADD A,(IX*) 86DD 3 ZIX 1 +ADD A,(IY*) 86FD 3 ZIX 1 +ADD A,A 87 1 NOP 1 +ADD A,B 80 1 NOP 1 +ADD A,C 81 1 NOP 1 +ADD A,D 82 1 NOP 1 +ADD A,E 83 1 NOP 1 +ADD A,H 84 1 NOP 1 +ADD A,L 85 1 NOP 1 +ADD A,* C6 2 NOP 1 +ADD HL,BC 09 1 NOP 1 +ADD HL,DE 19 1 NOP 1 +ADD HL,HL 29 1 NOP 1 +ADD HL,SP 39 1 NOP 1 +ADD IX,BC 09DD 2 NOP 1 +ADD IX,DE 19DD 2 NOP 1 +ADD IX,IX 29DD 2 NOP 1 +ADD IX,SP 39DD 2 NOP 1 +ADD IY,BC 09FD 2 NOP 1 +ADD IY,DE 19FD 2 NOP 1 +ADD IY,IY 29FD 2 NOP 1 +ADD IY,SP 39FD 2 NOP 1 + +AND (HL) A6 1 NOP 1 +AND (IX*) A6DD 3 ZIX 1 +AND (IY*) A6FD 3 ZIX 1 +AND A A7 1 NOP 1 +AND B A0 1 NOP 1 +AND C A1 1 NOP 1 +AND D A2 1 NOP 1 +AND E A3 1 NOP 1 +AND H A4 1 NOP 1 +AND L A5 1 NOP 1 +AND * E6 2 NOP 1 + +BIT *,(HL) 46CB 2 ZBIT 1 +BIT *,(IX*) CBDD 4 ZBIT 1 0 4600 +BIT *,(IY*) CBFD 4 ZBIT 1 0 4600 +BIT *,A 47CB 2 ZBIT 1 +BIT *,B 40CB 2 ZBIT 1 +BIT *,C 41CB 2 ZBIT 1 +BIT *,D 42CB 2 ZBIT 1 +BIT *,E 43CB 2 ZBIT 1 +BIT *,H 44CB 2 ZBIT 1 +BIT *,L 45CB 2 ZBIT 1 + +CALL C,* DC 3 NOP 1 +CALL M,* FC 3 NOP 1 +CALL NC,* D4 3 NOP 1 +CALL NZ,* C4 3 NOP 1 +CALL P,* F4 3 NOP 1 +CALL PE,* EC 3 NOP 1 +CALL PO,* E4 3 NOP 1 +CALL Z,* CC 3 NOP 1 +CALL * CD 3 NOP 1 + +CCF "" 3F 1 NOP 1 + +CP (HL) BE 1 NOP 1 +CP (IX*) BEDD 3 ZIX 1 +CP (IY*) BEFD 3 ZIX 1 +CP A BF 1 NOP 1 +CP B B8 1 NOP 1 +CP C B9 1 NOP 1 +CP D BA 1 NOP 1 +CP E BB 1 NOP 1 +CP H BC 1 NOP 1 +CP L BD 1 NOP 1 +CP * FE 2 NOP 1 +CPD "" A9ED 2 NOP 1 +CPDR "" B9ED 2 NOP 1 +CPIR "" B1ED 2 NOP 1 +CPI "" A1ED 2 NOP 1 +CPL "" 2F 1 NOP 1 + +DAA "" 27 1 NOP 1 + +DEC (HL) 35 1 NOP 1 +DEC (IX*) 35DD 3 ZIX 1 +DEC (IY*) 35FD 3 ZIX 1 +DEC A 3D 1 NOP 1 +DEC B 05 1 NOP 1 +DEC BC 0B 1 NOP 1 +DEC C 0D 1 NOP 1 +DEC D 15 1 NOP 1 +DEC DE 1B 1 NOP 1 +DEC E 1D 1 NOP 1 +DEC H 25 1 NOP 1 +DEC HL 2B 1 NOP 1 +DEC IX 2BDD 2 NOP 1 +DEC IY 2BFD 2 NOP 1 +DEC L 2D 1 NOP 1 +DEC SP 3B 1 NOP 1 +DI "" F3 1 NOP 1 +DJNZ * 10 2 R1 1 + +EI "" FB 1 NOP 1 +EX (SP),HL E3 1 NOP 1 +EX (SP),IX E3DD 2 NOP 1 +EX (SP),IY E3FD 2 NOP 1 +EX AF,AF' 08 1 NOP 1 +EX DE,HL EB 1 NOP 1 +EXX "" D9 1 NOP 1 +HALT "" 76 1 NOP 1 + +IM 0 46ED 2 NOP 1 +IM 1 56ED 2 NOP 1 +IM 2 5EED 2 NOP 1 + +IN A,(C) 78ED 2 NOP 1 +IN B,(C) 40ED 2 NOP 1 +IN C,(C) 48ED 2 NOP 1 +IN D,(C) 50ED 2 NOP 1 +IN E,(C) 58ED 2 NOP 1 +IN H,(C) 60ED 2 NOP 1 +IN L,(C) 68ED 2 NOP 1 + +IN A,(*) DB 2 NOP 1 + +IN0 A,(*) 38ED 3 NOP 2 +IN0 B,(*) 00ED 3 NOP 2 +IN0 C,(*) 08ED 3 NOP 2 +IN0 D,(*) 10ED 3 NOP 2 +IN0 E,(*) 18ED 3 NOP 2 +IN0 H,(*) 20ED 3 NOP 2 +IN0 L,(*) 28ED 3 NOP 2 + +INC (HL) 34 1 NOP 1 +INC (IX*) 34DD 3 ZIX 1 +INC (IY*) 34FD 3 ZIX 1 +INC A 3C 1 NOP 1 +INC B 04 1 NOP 1 +INC BC 03 1 NOP 1 +INC C 0C 1 NOP 1 +INC D 14 1 NOP 1 +INC DE 13 1 NOP 1 +INC E 1C 1 NOP 1 +INC H 24 1 NOP 1 +INC HL 23 1 NOP 1 +INC IX 23DD 2 NOP 1 +INC IY 23FD 2 NOP 1 +INC L 2C 1 NOP 1 +INC SP 33 1 NOP 1 + + +IND "" AAED 2 NOP 1 +INDR "" BAED 2 NOP 1 +INI "" A2ED 2 NOP 1 +INIR "" B2ED 2 NOP 1 + +JP (HL) E9 1 NOP 1 +JP (IX) E9DD 2 NOP 1 +JP (IY) E9FD 2 NOP 1 +JP C,* DA 3 NOP 1 +JP M,* FA 3 NOP 1 +JP NC,* D2 3 NOP 1 +JP NZ,* C2 3 NOP 1 +JP P,* F2 3 NOP 1 +JP PE,* EA 3 NOP 1 +JP PO,* E2 3 NOP 1 +JP Z,* CA 3 NOP 1 +JP * C3 3 NOP 1 + +JR C,* 38 2 R1 1 +JR NC,* 30 2 R1 1 +JR NZ,* 20 2 R1 1 +JR Z,* 28 2 R1 1 +JR * 18 2 R1 1 + +LD (BC),A 02 1 NOP 1 +LD (DE),A 12 1 NOP 1 +LD (HL),A 77 1 NOP 1 +LD (HL),B 70 1 NOP 1 +LD (HL),C 71 1 NOP 1 +LD (HL),D 72 1 NOP 1 +LD (HL),E 73 1 NOP 1 +LD (HL),H 74 1 NOP 1 +LD (HL),L 75 1 NOP 1 +LD (HL),* 36 2 NOP 1 +LD (IX*),A 77DD 3 ZIX 1 +LD (IX*),B 70DD 3 ZIX 1 +LD (IX*),C 71DD 3 ZIX 1 +LD (IX*),D 72DD 3 ZIX 1 +LD (IX*),E 73DD 3 ZIX 1 +LD (IX*),H 74DD 3 ZIX 1 +LD (IX*),L 75DD 3 ZIX 1 +LD (IX*),* 36DD 4 ZIX 1 +LD (IY*),A 77FD 3 ZIX 1 +LD (IY*),B 70FD 3 ZIX 1 +LD (IY*),C 71FD 3 ZIX 1 +LD (IY*),D 72FD 3 ZIX 1 +LD (IY*),E 73FD 3 ZIX 1 +LD (IY*),H 74FD 3 ZIX 1 +LD (IY*),L 75FD 3 ZIX 1 +LD (IY*),* 36FD 4 ZIX 1 +LD (*),A 32 3 NOP 1 +LD (*),BC 43ED 4 NOP 1 +LD (*),DE 53ED 4 NOP 1 +LD (*),HL 22 3 NOP 1 +LD (*),IX 22DD 4 NOP 1 +LD (*),IY 22FD 4 NOP 1 +LD (*),SP 73ED 4 NOP 1 +LD A,(BC) 0A 1 NOP 1 +LD A,(DE) 1A 1 NOP 1 +LD A,(HL) 7E 1 NOP 1 +LD A,(IX*) 7EDD 3 ZIX 1 +LD A,(IY*) 7EFD 3 ZIX 1 +LD A,A 7F 1 NOP 1 +LD A,B 78 1 NOP 1 +LD A,C 79 1 NOP 1 +LD A,D 7A 1 NOP 1 +LD A,E 7B 1 NOP 1 +LD A,H 7C 1 NOP 1 +LD A,I 57ED 2 NOP 1 +LD A,L 7D 1 NOP 1 +LD A,R 5FED 2 NOP 1 +LD A,(*) 3A 3 NOP 1 +LD A,* 3E 2 NOP 1 +LD B,(HL) 46 1 NOP 1 +LD B,(IX*) 46DD 3 ZIX 1 +LD B,(IY*) 46FD 3 ZIX 1 +LD B,A 47 1 NOP 1 +LD B,B 40 1 NOP 1 +LD B,C 41 1 NOP 1 +LD B,D 42 1 NOP 1 +LD B,E 43 1 NOP 1 +LD B,H 44 1 NOP 1 +LD B,L 45 1 NOP 1 +LD B,* 06 2 NOP 1 +LD BC,(*) 4BED 4 NOP 1 +LD BC,* 01 3 NOP 1 +LD C,(HL) 4E 1 NOP 1 +LD C,(IX*) 4EDD 3 ZIX 1 +LD C,(IY*) 4EFD 3 ZIX 1 +LD C,A 4F 1 NOP 1 +LD C,B 48 1 NOP 1 +LD C,C 49 1 NOP 1 +LD C,D 4A 1 NOP 1 +LD C,E 4B 1 NOP 1 +LD C,H 4C 1 NOP 1 +LD C,L 4D 1 NOP 1 +LD C,* 0E 2 NOP 1 +LD D,(HL) 56 1 NOP 1 +LD D,(IX*) 56DD 3 ZIX 1 +LD D,(IY*) 56FD 3 ZIX 1 +LD D,A 57 1 NOP 1 +LD D,B 50 1 NOP 1 +LD D,C 51 1 NOP 1 +LD D,D 52 1 NOP 1 +LD D,E 53 1 NOP 1 +LD D,H 54 1 NOP 1 +LD D,L 55 1 NOP 1 +LD D,* 16 2 NOP 1 +LD DE,(*) 5BED 4 NOP 1 +LD DE,* 11 3 NOP 1 +LD E,(HL) 5E 1 NOP 1 +LD E,(IX*) 5EDD 3 ZIX 1 +LD E,(IY*) 5EFD 3 ZIX 1 +LD E,A 5F 1 NOP 1 +LD E,B 58 1 NOP 1 +LD E,C 59 1 NOP 1 +LD E,D 5A 1 NOP 1 +LD E,E 5B 1 NOP 1 +LD E,H 5C 1 NOP 1 +LD E,L 5D 1 NOP 1 +LD E,* 1E 2 NOP 1 +LD H,(HL) 66 1 NOP 1 +LD H,(IX*) 66DD 3 ZIX 1 +LD H,(IY*) 66FD 3 ZIX 1 +LD H,A 67 1 NOP 1 +LD H,B 60 1 NOP 1 +LD H,C 61 1 NOP 1 +LD H,D 62 1 NOP 1 +LD H,E 63 1 NOP 1 +LD H,H 64 1 NOP 1 +LD H,L 65 1 NOP 1 +LD H,* 26 2 NOP 1 +LD HL,(*) 2A 3 NOP 1 +LD HL,* 21 3 NOP 1 +LD I,A 47ED 2 NOP 1 +LD IX,(*) 2ADD 4 NOP 1 +LD IX,* 21DD 4 NOP 1 +LD IY,(*) 2AFD 4 NOP 1 +LD IY,* 21FD 4 NOP 1 +LD L,(HL) 6E 1 NOP 1 +LD L,(IX*) 6EDD 3 ZIX 1 +LD L,(IY*) 6EFD 3 ZIX 1 +LD L,A 6F 1 NOP 1 +LD L,B 68 1 NOP 1 +LD L,C 69 1 NOP 1 +LD L,D 6A 1 NOP 1 +LD L,E 6B 1 NOP 1 +LD L,H 6C 1 NOP 1 +LD L,L 6D 1 NOP 1 +LD L,* 2E 2 NOP 1 +LD R,A 4FED 2 NOP 1 +LD SP,(*) 7BED 4 NOP 1 +LD SP,HL F9 1 NOP 1 +LD SP,IX F9DD 2 NOP 1 +LD SP,IY F9FD 2 NOP 1 +LD SP,* 31 3 NOP 1 +LDD "" A8ED 2 NOP 1 +LDDR "" B8ED 2 NOP 1 +LDI "" A0ED 2 NOP 1 +LDIR "" B0ED 2 NOP 1 +NEG "" 44ED 2 NOP 1 +NOP "" 00 1 NOP 1 + +MLT BC 4CED 2 NOP 2 +MLT DE 5CED 2 NOP 2 +MLT HL 6CED 2 NOP 2 +MLT SP 7CED 2 NOP 2 + +OR (HL) B6 1 NOP 1 +OR (IX*) B6DD 3 ZIX 1 +OR (IY*) B6FD 3 ZIX 1 +OR A B7 1 NOP 1 +OR B B0 1 NOP 1 +OR C B1 1 NOP 1 +OR D B2 1 NOP 1 +OR E B3 1 NOP 1 +OR H B4 1 NOP 1 +OR L B5 1 NOP 1 +OR * F6 2 NOP 1 + +OTDM "" 8BED 2 NOP 2 +OTDMR "" 9BED 2 NOP 2 +OTDR "" BBED 2 NOP 1 +OTIM "" 83ED 2 NOP 2 +OTIMR "" 93ED 2 NOP 2 +OTIR "" B3ED 2 NOP 1 + +OUT (C),A 79ED 2 NOP 1 +OUT (C),B 41ED 2 NOP 1 +OUT (C),C 49ED 2 NOP 1 +OUT (C),D 51ED 2 NOP 1 +OUT (C),E 59ED 2 NOP 1 +OUT (C),H 61ED 2 NOP 1 +OUT (C),L 69ED 2 NOP 1 +OUT (*),A D3 2 NOP 1 + +OUT0 (*),A 39ED 3 NOP 2 +OUT0 (*),B 01ED 3 NOP 2 +OUT0 (*),C 09ED 3 NOP 2 +OUT0 (*),D 11ED 3 NOP 2 +OUT0 (*),E 19ED 3 NOP 2 +OUT0 (*),H 21ED 3 NOP 2 +OUT0 (*),L 29ED 3 NOP 2 + +OUTD "" ABED 2 NOP 1 +OUTI "" A3ED 2 NOP 1 + +POP AF F1 1 NOP 1 +POP BC C1 1 NOP 1 +POP DE D1 1 NOP 1 +POP HL E1 1 NOP 1 +POP IX E1DD 2 NOP 1 +POP IY E1FD 2 NOP 1 + +PUSH AF F5 1 NOP 1 +PUSH BC C5 1 NOP 1 +PUSH DE D5 1 NOP 1 +PUSH HL E5 1 NOP 1 +PUSH IX E5DD 2 NOP 1 +PUSH IY E5FD 2 NOP 1 + +RES *,(HL) 86CB 2 ZBIT 1 +RES *,(IX*) CBDD 4 ZBIT 1 0 8600 +RES *,(IY*) CBFD 4 ZBIT 1 0 8600 +RES *,A 87CB 2 ZBIT 1 +RES *,B 80CB 2 ZBIT 1 +RES *,C 81CB 2 ZBIT 1 +RES *,D 82CB 2 ZBIT 1 +RES *,E 83CB 2 ZBIT 1 +RES *,H 84CB 2 ZBIT 1 +RES *,L 85CB 2 ZBIT 1 + +RET "" C9 1 NOP 1 +RET C D8 1 NOP 1 +RET M F8 1 NOP 1 +RET NC D0 1 NOP 1 +RET NZ C0 1 NOP 1 +RET P F0 1 NOP 1 +RET PE E8 1 NOP 1 +RET PO E0 1 NOP 1 +RET Z C8 1 NOP 1 +RETI "" 4DED 2 NOP 1 +RETN "" 45ED 2 NOP 1 + +RL (HL) 16CB 2 NOP 1 +RL (IX*) CBDD 4 ZIX 1 0 1600 +RL (IY*) CBFD 4 ZIX 1 0 1600 +RL A 17CB 2 NOP 1 +RL B 10CB 2 NOP 1 +RL C 11CB 2 NOP 1 +RL D 12CB 2 NOP 1 +RL E 13CB 2 NOP 1 +RL H 14CB 2 NOP 1 +RL L 15CB 2 NOP 1 +RLA "" 17 1 NOP 1 + +RLC (HL) 06CB 2 NOP 1 +RLC (IX*) CBDD 4 ZIX 1 0 0600 +RLC (IY*) CBFD 4 ZIX 1 0 0600 +RLC A 07CB 2 NOP 1 +RLC B 00CB 2 NOP 1 +RLC C 01CB 2 NOP 1 +RLC D 02CB 2 NOP 1 +RLC E 03CB 2 NOP 1 +RLC H 04CB 2 NOP 1 +RLC L 05CB 2 NOP 1 +RLCA "" 07 1 NOP 1 +RLD "" 6FED 2 NOP 1 + +RR (HL) 1ECB 2 NOP 1 +RR (IX*) CBDD 4 ZIX 1 0 1E00 +RR (IY*) CBFD 4 ZIX 1 0 1E00 +RR A 1FCB 2 NOP 1 +RR B 18CB 2 NOP 1 +RR C 19CB 2 NOP 1 +RR D 1ACB 2 NOP 1 +RR E 1BCB 2 NOP 1 +RR H 1CCB 2 NOP 1 +RR L 1DCB 2 NOP 1 +RRA "" 1F 1 NOP 1 +RRC (HL) 0ECB 2 NOP 1 +RRC (IX*) CBDD 4 ZIX 1 0 0E00 +RRC (IY*) CBFD 4 ZIX 1 0 0E00 +RRC A 0FCB 2 NOP 1 +RRC B 08CB 2 NOP 1 +RRC C 09CB 2 NOP 1 +RRC D 0ACB 2 NOP 1 +RRC E 0BCB 2 NOP 1 +RRC H 0CCB 2 NOP 1 +RRC L 0DCB 2 NOP 1 +RRCA "" 0F 1 NOP 1 +RRD "" 67ED 2 NOP 1 + +RST 00H C7 1 NOP 1 +RST 08H CF 1 NOP 1 +RST 10H D7 1 NOP 1 +RST 18H DF 1 NOP 1 +RST 20H E7 1 NOP 1 +RST 28H EF 1 NOP 1 +RST 30H F7 1 NOP 1 +RST 38H FF 1 NOP 1 + +SBC A,(HL) 9E 1 NOP 1 +SBC A,(IX*) 9EDD 3 ZIX 1 +SBC A,(IY*) 9EFD 3 ZIX 1 +SBC A,A 9F 1 NOP 1 +SBC A,B 98 1 NOP 1 +SBC A,C 99 1 NOP 1 +SBC A,D 9A 1 NOP 1 +SBC A,E 9B 1 NOP 1 +SBC A,H 9C 1 NOP 1 +SBC A,L 9D 1 NOP 1 +SBC HL,BC 42ED 2 NOP 1 +SBC HL,DE 52ED 2 NOP 1 +SBC HL,HL 62ED 2 NOP 1 +SBC HL,SP 72ED 2 NOP 1 +SBC A,* DE 2 NOP 1 +SCF "" 37 1 NOP 1 + +SET *,(HL) C6CB 2 ZBIT 1 +SET *,(IX*) CBDD 4 ZBIT 1 0 C600 +SET *,(IY*) CBFD 4 ZBIT 1 0 C600 +SET *,A C7CB 2 ZBIT 1 +SET *,B C0CB 2 ZBIT 1 +SET *,C C1CB 2 ZBIT 1 +SET *,D C2CB 2 ZBIT 1 +SET *,E C3CB 2 ZBIT 1 +SET *,H C4CB 2 ZBIT 1 +SET *,L C5CB 2 ZBIT 1 + +SLA (HL) 26CB 2 NOP 1 +SLA (IX*) CBDD 4 ZIX 1 0 2600 +SLA (IY*) CBFD 4 ZIX 1 0 2600 +SLA A 27CB 2 NOP 1 +SLA B 20CB 2 NOP 1 +SLA C 21CB 2 NOP 1 +SLA D 22CB 2 NOP 1 +SLA E 23CB 2 NOP 1 +SLA H 24CB 2 NOP 1 +SLA L 25CB 2 NOP 1 + +SLP "" 76ED 2 NOP 2 + +SRA (HL) 2ECB 2 NOP 1 +SRA (IX*) CBDD 4 ZIX 1 0 2E00 +SRA (IY*) CBFD 4 ZIX 1 0 2E00 +SRA A 2FCB 2 NOP 1 +SRA B 28CB 2 NOP 1 +SRA C 29CB 2 NOP 1 +SRA D 2ACB 2 NOP 1 +SRA E 2BCB 2 NOP 1 +SRA H 2CCB 2 NOP 1 +SRA L 2DCB 2 NOP 1 + +SRL (HL) 3ECB 2 NOP 1 +SRL (IX*) CBDD 4 ZIX 1 0 3E00 +SRL (IY*) CBFD 4 ZIX 1 0 3E00 +SRL A 3FCB 2 NOP 1 +SRL B 38CB 2 NOP 1 +SRL C 39CB 2 NOP 1 +SRL D 3ACB 2 NOP 1 +SRL E 3BCB 2 NOP 1 +SRL H 3CCB 2 NOP 1 +SRL L 3DCB 2 NOP 1 + +SUB (HL) 96 1 NOP 1 +SUB (IX*) 96DD 3 ZIX 1 +SUB (IY*) 96FD 3 ZIX 1 +SUB A 97 1 NOP 1 +SUB B 90 1 NOP 1 +SUB C 91 1 NOP 1 +SUB D 92 1 NOP 1 +SUB E 93 1 NOP 1 +SUB H 94 1 NOP 1 +SUB L 95 1 NOP 1 +SUB * D6 2 NOP 1 + +TST A 3CED 2 NOP 2 +TST B 04ED 2 NOP 2 +TST C 0CED 2 NOP 2 +TST D 14ED 2 NOP 2 +TST E 1CED 2 NOP 2 +TST H 24ED 2 NOP 2 +TST L 2CED 2 NOP 2 +TST (HL) 34ED 2 NOP 2 +TST * 64ED 3 NOP 2 + +TSTIO * 74ED 3 NOP 2 + +XOR (HL) AE 1 NOP 1 +XOR (IX*) AEDD 3 ZIX 1 +XOR (IY*) AEFD 3 ZIX 1 +XOR A AF 1 NOP 1 +XOR B A8 1 NOP 1 +XOR C A9 1 NOP 1 +XOR D AA 1 NOP 1 +XOR E AB 1 NOP 1 +XOR H AC 1 NOP 1 +XOR L AD 1 NOP 1 +XOR * EE 2 NOP 1 diff --git a/Z80 CPM and bootloader (basmon)/TASM_RELNOTES.TXT b/Z80 CPM and bootloader (basmon)/TASM_RELNOTES.TXT new file mode 100644 index 0000000..800f756 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/TASM_RELNOTES.TXT @@ -0,0 +1,199 @@ +TASM RELEASE NOTES + +RELEASE DATE/VERSION DESCRIPTION +----------------------------------------------------------------------- +10/01/85 Version 2.0 First version with external table def files. + +01/01/86 Version 2.1 Added '*=' and '=' directives as + alternatives to .ORG and .EQU (for + more complete MOS Technology compatibility). + Enhanced parsing algorithm so it can + deal with more than one variable expression. + Added -d option + +02/14/86 Version 2.2 Modified so instruction set definition + tables don't need to be compiled in. + Added 8051 tables. + Increased the number of labels allowed. + +03/31/87 Version 2.3 Fixed bug that prevented location 0xffff + from being used and written to object file. + Most changes in wrtobj() and pr_hextab(). + +05/01/87 Version 2.4 Added multiple byte opcode support. + Added shift/or operation capability to + args from instruction set definition table. + Converted to MS C version 3.0 + Added hashing to instruction set table + lookups to speed up. + +11/01/87 Version 2.5 Added DB and DW directives. + Added escape capability in TEXT strings. + Fixed inst_lookup function to treat the + multiple wild card case a little better + Added 8080/8085 and Z80 tables. + Added sorting on label table. + Increased size of read buffer. + Speed enhancements. + Added DEFCONT (macro continuation) directive. + Converted to Microsoft C 5.0 compiler. + Added 6805 table (and related modops). + Added Z80 bit modop. + Minor speed up. + Fixed bug that enters infinite loop + when a macro invocation has no closing paren. + Added some three arg MODOPs. + +8/15/88 Version 2.6.1 Added CODES/NOCODES directives + Fixed bug preventing directives in multiple + statement lines. + 2.6.2 Added COMB_NIBBLE and COMB_NIBBLE_SWAP MODOPS + +2/1/89 Version 2.7 Removed ad hoc heap and now use malloc() + Added MSFIRST and LSFIRST directives. + Added EXPORT directive. + Added symbol table file (-s flag). + Added NSEG/CSEG/BSEG/DSEG/XSEG directives + and the SYM/AVSYM directives to support + the Avocet avsim51 simulator. + Added support for TMS320. + Added -r flag to set read buffer size. + Converted expression evaluation from + signed 16 bit to signed 32 bit (enabling + apparent ability to use signed or unsigned + 16 bit values). + +4/20/89 Version 2.7.1 Return 0x20000 for undefined labels so that + (label+x) type stuff won't confuse zero + page addressing. + Added duplicate label error message on pass 1. + +6/20/89 Version 2.7.2 Improved macro expansion capability. + No expansion in comments. + Context sensitive identifiers. + Revised exit codes. + +6/27/89 Version 2.7.3 Added -a flag for strict error checking: + (1) No outer parens around expressions. + (2) Error message if unused argbytes remain + (3) Duplicate labels + Fixed so ']' can terminate expressions. + Removed parse() from tasm.c + +8/19/89 Version 2.7.4 Added Motorola hex object format. + Fixed bug that complained when \ immediately + followed a opcode with no args. + Slightly improved error reporting (Errorbuf). + +10/31/89 Version 2.7.5 Added TMS7000 support. + Fixed argv[] bug (only dimensioned to 10 in pass1. + +12/23/89 Version 2.7.6 Improved handling of % (modulo vs binary + prefix ambiguity). + Fixed list so lines with more than + 6 bytes go on second line. + +03/04/90 Version 2.7.7 Fixed bug that left off 2 bytes if ORG + went backwards and all 64K was used. + Added a command line option to ignore + case on labels. + Added a couple MODOP rules for TMS9900. + Allow double quoted text strings for BYTE. + +04/15/90 Version 2.7.8 Fixed expression evaluator bug (paren popping) + and changed expression evaluator to a more + conventional left to right evaluation order. + Added TURBOC ifdef's (from Lance Jump). + +08/20/90 Version 2.8 Primarily a documentation update. + Added error check for AJMP/ACALL off of + current 2K block (8051). + +10/15/90 Version 2.8.1 Minor speed up in label searching. + Fixed word addressing for TMS320 + Version 2.8.2 Local labels. + More label table format options (long form + suppress local labels). + +11/30/90 Version 2.8.3 Turbo C conversion. + DS directive added. + +12/27/90 Version 2.8.4 Added COMMENTCHAR directive to change the + comment indicator in the first column. + This was done to support the assembly + files from the small C compiler (sc11) + for the 68CH11. + +02/14/91 Version 2.8.5 Added LOCALLABELCHAR directive to + override the default "_" as the + prefix for local labels. + +03/18/91 Version 2.8.6 Added some MODOPs in support of TMS320C25 + +04/20/91 Version 2.8.7 Fixed sign extend bug in CSWAP modop. + Increased MAXLABS to 10000 for big version. + +05/05/91 Version 2.8.8 Fixed pointer bug in debug output in sort_labels(). + +05/20/91 Version 2.9 TMS320C25 table along with some MODOP enhancements + for it. + TASMTABS.DOC updated (but not TASM.DOC) + +08/09/91 Version 2.9.1 Nested conditionals. + +04/01/92 Version 2.9.2 Fixed long label clobber problem in + find_label() and save_label. Syntax + errors could result in a comment line + after an instruction being lumped together + with a label resulting in a long label. + The label functions were not testing for + labels that exceed the specified size. + Added CHK directive. + Added REL3 MODOD to support uPD75xxx. + Delinting and more ANSIfication. + Modifications due to feedback from B Provo: + Added FILL directive. + Allow multiple labels for EXPORT directive. + Allow address with END directive. + TASM.DOC update + +11/25/92 Version 2.9.3 Improved error reporting for mismatched quotes. + Disallow the single quote character constants. + Convert to BCC++ 3.1 + Provide filename,linenum on all error messages. + Modify format of error messages for compatibility + with the Brief editor. + Added ECHO directive to send output to console. + Performance improvements in macro processing. + "Type Safe" conversion (compatible with C++). + Improved error reporting for imbalanced ifdefs. + + +01/29/93 Version 2.9.4 Added rules for 8096 (I1,I2,I3,I4,I5,I6). + Generate error message on forward reference + in EQUate statements. + Eliminated -a option for enabling the detection + of branches of 2K page for 8051. This + is now built into the table. + Allow white space in double quotes for BYTE + directive. This previously worked for TEXT, + but not BYTE. + Fixed defect with Z80 4 byte indexed instructions. + Fixed macro defect. If the macro definition has + args but the invocation does not some garbage + gets expanded into the source line. + Z80 OTDR opcode was incorrect. + Z80 IN0/OUT0/INA instructions did not require + the parens around the args. + Some experimental support for windows verson of TASM. + +10/24/93 Version 3.0 Documentation update. TASM.DOC, TASMTABS.DOC + and RELNOTES.DOC updated, but the functionality + remains unchanged from version 2.9.4. + +06/16/94 Version 3.0.1 SPR 1006: Multiple macros on the same line + SPR 1007: -c with >8000h bytes used goes bonkers + SPR 1009: waddr correction for BLOCK/DS + SPR 1011: Escaped quotes in TEXT + + \ No newline at end of file diff --git a/Z80 CPM and bootloader (basmon)/_ASSEMBLE.BAT b/Z80 CPM and bootloader (basmon)/_ASSEMBLE.BAT new file mode 100644 index 0000000..c7b6ace --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/_ASSEMBLE.BAT @@ -0,0 +1,8 @@ +tasm -80 source\basMon.asm hexFiles\basMon.hex +tasm -80 source\cbios128.asm hexFiles\cbios128.hex +tasm -80 source\cpm22.asm hexFiles\cpm22.hex +tasm -80 source\form128.asm hexFiles\form128.hex +tasm -80 source\putsys.asm hexFiles\putsys.hex +tasm -80 source\download.asm hexFiles\download.hex + +pause diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/BASMON.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/BASMON.HEX new file mode 100644 index 0000000..7344ae9 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/hexFiles/BASMON.HEX @@ -0,0 +1,343 @@ +:0430040000000000C8 +:18000000F3C3940000000000C332000000000000C31B000000000000CB +:18001800C35C003A0030FE002008CD630028FBDB81C9CD6A0028FBDB74 +:1800300083C9F53A0030FE00200D1801F5CD500028FBF1D381C9F5CDC4 +:18004800560028FBF1D383C9DB800FCB47C9DB820FCB47C93A0030FE23 +:18006000002007DB80E601FE00C9DB82E601FE00C9D7FE0A28FBFE1B32 +:1800780020023E03C9FE0D280AFE0C2804FE203801CFC93E0DCF3E0A80 +:18009000CF3E0DC93128303E95D380D3823E00320030216503CD1B015F +:1800A8003E01320030216503CD1B01CD6300280F3E00320030CD1B003E +:1800C000FE20C2B3001814CD6A0028E73E01320030CD1B00FE20C2B307 +:1800D8000018003E0CCD3C00CD4600CD2201219602CD1B0121EC00E50E +:1800F000CD22013E3ECFCD7100FE2038F9FE3ACA9901CD7D00E65FFE07 +:1801080042CADA01FE47CA9301FE58CAF1013E3FCF18D57EB7C8CF231B +:1801200018F93E0DCF3E0ACFC9CD7100FE03C8FE2038F6C9CD29014762 +:18013800CD29014FCD73014F7B915F79C9210000CD8C01FE0D200E3741 +:18015000C9210000CD8C01FE0DC8FE2CC8FE0328EE29292929D630FECF +:180168000A3802D607E60F856F18E178D630FE0A3802D60707070707C3 +:180180004779D630FE0A3802D60780C9CD7100CD7D00C9CD4501D8E518 +:18019800C91E00CD340157CD340167CD34016FCD3401FE012009CD340A +:1801B000017BA7281E18157AA7280BCD340177233E2ECF1518F1CD3457 +:1801C800017BA7C8215403CD1B01C9218A03CD1B01C9214203CD1B015B +:1801E000CD2901C8E65FFE43CA9503FE57CA9803C9210302CD1B01CD01 +:1801F8002901C8E65FFE59CA2402C90D0A426F6F742043502F4D3F008F +:180210000D0A4C6F6164696E672043502F4D2E2E2E0D0A00211002CD31 +:180228001B0106183E003204303205303206303207302100D022023063 +:18024000CD6E021100022A0230192202303A04303C32043010EA3A0049 +:1802580030F52AFEFFE93A0630D38C3A0530D38B3A0430D38AC9F5C56F +:18027000E5DB89FE8020FACD5E023E00D3890E040680DB89FEE020FADA +:18028800DB8877230520F30D20EEE1C1F1C943502F4D20426F6F7420EF +:1802A000524F4D20322E3020627920472E20536561726C650D0A0D0A6E +:1802B8004243206F72204257202D20524F4D20424153494320436F6CD4 +:1802D000642F5761726D0D0A5820202020202020202D20426F6F74207C +:1802E80043502F4D20286C6F61642024443030302D2446464646290D50 +:180300000A3A6E6E6E6E2E2E2E202D204C6F616420496E74656C2D48E1 +:1803180065782066696C65207265636F72640D0A476E6E6E6E2020201B +:18033000202D2052756E206C6F63206E6E6E6E0D0A000D0A436F6C642D +:18034800206F72207761726D3F0D0A00436865636B73756D20657272D3 +:180360006F720D0A000C5072657373205B53504143455D20746F2061AC +:180378006374697661746520636F6E736F6C650D0A00436F6D706C65F3 +:1803900074650D0A00C39B03C33904DD210000C3A6034C0CC21321B09C +:1803A80030F9C3E11F117306066321B0301A77231305C2B503F9CD74DD +:1803C00008CD420E325A3132A931218804CDE014CD9108CD9A0BB7C278 +:1803D800EF03210D32237CB5CA01047E472F77BE70CADD03C30104CDC0 +:1803F000660CB7C24207EB2B3ED94677BE70C2CA032B110C32CD0A0ABF +:18040800DACA0311CEFF225F3119220A31CD4F082A0A3111EFFF19117D +:18042000A9317D936F7C9A67E5215104CDE014E1CD831B214204CDE072 +:1804380014311631CD7408C38D0720427974657320667265650D0A0080 +:18045000005A38302042415349432056657220342E37620D0A436F70AF +:18046800797269676874202843292031393738206279204D6963726F23 +:18048000736F66740D0A00004D656D6F727920746F7000F819BC1A0EB0 +:180498001AB330A0132517CE13821C611D9D18D01CD61DDC1D3D1E5229 +:1804B0001E7917BD1E013152166A14EC1661167216DF1E721F8216B2BA +:1804C80016BC16C54E44C64F52CE455854C4415441C94E505554C44900 +:1804E0004DD2454144CC4554C74F544FD2554EC946D24553544F5245D5 +:1804F800C74F535542D2455455524ED2454DD3544F50CF5554CF4ECEFF +:18051000554C4CD7414954C44546D04F4B45C44F4B45D3435245454E50 +:18052800CC494E4553C34C53D749445448CD4F4E49544F52D34554D278 +:1805400045534554D052494E54C34F4E54CC495354C34C454152C34CFF +:180558004F4144C353415645CE4557D4414228D44FC64ED3504328D443 +:1805700048454ECE4F54D3544550ABADAAAFDEC14E44CF52BEBDBCD35E +:18058800474EC94E54C14253D55352C65245C94E50D04F53D35152D20D +:1805A0004E44CC4F47C55850C34F53D3494ED4414EC1544ED045454BA8 +:1805B800C445454BD04F494E54CC454ED3545224D6414CC15343C348C7 +:1805D0005224C8455824C2494E24CC45465424D24947485424CD49444C +:1805E8002480E40BE10ABC0F310DC30EF811F20E480DEE0CD10CC00DA1 +:18060000AA0BDD0C0C0D330DE20B3117A20D230C3717D6138017C81E24 +:18061800330DAE1EA11EA61EDE1F04310731E40D100C560A8B0C330D8D +:18063000330D4E08796A1B799E177CDC187C3D197F8B1C505111465040 +:18064800114E46534E52474F4446434F564F4D554C425344442F3049F8 +:1806600044544D4F534C535354434E55464D4F4858424EC33904C36199 +:180678000CD300C9D6006F7CDE006778DE00473E00C9000000354ACACF +:1806900099391C76982295B3980ADD479853D199990A1A9F9865BCCDEF +:1806A80098D6773E9852C74F80DB00C901FF1C000014001400000000AF +:1806C00000C38709C30000C30000C300000D32FEFFAA31204572726FB7 +:1806D800720020696E20004F6B0D0A0000427265616B00210400397EEF +:1806F00023FE81C04E234623E569607AB3EBCA0507EBCD0A0A010D0040 +:18070800E1C809C3EF06CD2807C5E3C1CD0A0A7E02C80B2BC31407E5E8 +:180720002A8A31060009093EE53ED0956F3EFF9CDA37076739E1D81E27 +:180738000CC356072A7931220C311E02011E14011E00011E12011E2266 +:18075000011E0A011E18CD740832F530CD350E214906573E3FCD1B0A4B +:18076800197ECD1B0ACD9A0BCD1B0A21D306CDE0142A0C3111FEFFCD8F +:180780000A0ACAA6037CA53CC47B1B3EC1AF32F530CD350E21DF06CD3B +:18079800E01421FFFF220C31CD8709DA9A07CD9A0B3C3DCA9A07F5CDE7 +:1807B000660CD5CD9E0847D1F1D27A0BD5C5AF327C31CD9A0BB7F5CD04 +:1807C8002E08DAD307F1F5CA070DB7C5D2EA07EB2A86311A020313CD61 +:1807E0000A0AC2DB076069228631D1F1CA11082A8631E3C109E5CD0EB4 +:1807F80007E1228631EB74D12323732372231111311A772313B7C209EB +:1808100008CD5A0823EB626B7E23B6CA9A07232323AFBE23C22208EB2C +:18082800732372C316082A0E31444D7E23B62BC823237E23666FCD0AF8 +:180840000A60697E23666F3FC83FD0C33108C02A0E31AF772377232217 +:1808580086312A0E312B227E312A5F31227331AFCDAA0B2A8631228830 +:1808700031228A31C12A0A31F9216331226131AF6F67228431327B31A0 +:18088800228E31E5C52A7E31C93E3FCD1B0A3E20CD1B0AC3FE30AF329A +:1808A0005E310E051111317EFE20CA260947FE22CA4609B7CA4D093A25 +:1808B8005E31B77EC22609FE3F3E9ECA26097EFE30DAD108FE3CDA26C8 +:1808D00009D511CA04C5012209C5067F7EFE61DAEA08FE7BD2EA08E64C +:1808E8005F774EEB23B6F2EC08047EE67FC8B9C2EC08EBE5131AB7FA5E +:180900001E094F78FE88C20D09CD9A0B2B237EFE61DA1609E65FB9CA35 +:18091800FC08E1C3EA0848F1EBC9EB79C1D12312130CD63ACA3409FEE1 +:1809300049C23709325E31D654C2A708477EB7CA4D09B8CA2609231286 +:180948000C13C33D092110311213121312C93AF430B73E0032F430C27D +:180960006A0905CA8709CD1B0A3E052BCA7E097ECD1B0AC39009052B00 +:18097800CD1B0AC29009CD1B0ACD420EC387092111310601AF32F43049 +:18099000CD450A4FFE7FCA56093AF430B7CAA9093E00CD1B0AAF32F4A8 +:1809A8003079FE07CAED09FE03CC420E37C8FE0DCA3D0EFE15CA810926 +:1809C000FE40CA7E09FE5FCA7609FE08CA7609FE12C2E809C5D5E53623 +:1809D80000CDF21F211131CDE014E1D1C1C39009FE20DA900978FE49E6 +:1809F0003E07D2020A7971327C312304CD1B0AC39009CD1B0A3E08C393 +:180A0800FC097C92C07D93C97EE3BE23E3CA9A0BC34207F53AF530B77F +:180A2000C21515F1C5F5FE20DA3F0A3AF230473A5B3104CA3B0A05B8AD +:180A3800CC420E3C325B31F1C1CDDB1FC9CD9F1EE67FFE0FC03AF53033 +:180A50002F32F530AFC9CD660CC0C1CD2E08C5CDAC0AE14E2346237852 +:180A6800B1CA8D07CDB50ACDC50BC5CD420E5E235623E5EBCD831B3EE9 +:180A800020E1CD1B0A7EB723CA620AF2820AD67F4F11CB041A13B7F205 +:180A9800940A0DC2940AE67FCD1B0A1A13B7F29E0AC3850AE52AF830DD +:180AB00022F630E1C9E5D52AF63011FFFFED5A22F630D1E1F0E52AF8EB +:180AC8003022F630CD9F1EFE03CAD80AE1C3B50A2AF83022F630C33C6B +:180AE000043E64327B31CD480DC1E5CD310D22773121020039CDEF06BF +:180AF800D1C2110B09D52B562B5E2323E52A7731CD0A0AE1C2F50AD1FE +:180B1000F9EB0E08CD1F07E52A7731E3E52A0C31E3CD0A10CD100AA6A3 +:180B2800CD0710E5CD351AE1C5D5010081515A7EFEAB3E01C24D0BCDDB +:180B40009A0BCD0710E5CD351ACDE919E1C5D5F533E52A7E31E3068179 +:180B5800C533CDC50B227E317EFE3ACA7A0BB7C24207237E23B6CAEC28 +:180B70000B235E2356EB220C31EBCD9A0B115A0BD5C8D680DA480DFE2B +:180B880025D24207074F0600EB21EA05094E2346C5EB237EFE3AD0FEA7 +:180BA00020CA9A0BFE303F3C3DC9EB2A0E31CABF0BEBCD660CE5CD2E0D +:180BB800086069D1D2070D2B228C31EBC9DFC8D7FE1B2811FE03280DD9 +:180BD000FE13C0D7FE11C8FE03280718F63EFF32FD30C0F6C0227E316D +:180BE80021F6FFC12A0C31F57DA43CCAFF0B2282312A7E31228431AF5D +:180C000032F530CD350EF121E506C27607C38D072A84317CB51E20CACA +:180C18005607EB2A8231220C31EBC9CD6817C032F130C9E52AFA300625 +:180C3000004F0922FA30E1C97EFE41D8FE5B3FC9CD9A0BCD0710CDE95C +:180C480019FA610C3A9731FE90DA911A018090110000E5CD641AE1517B +:180C6000C81E08C356072B110000CD9A0BD0E5F5219819CD0A0ADA4247 +:180C780007626B19291929F1D6305F160019EBE1C36A0CCA5E08CD4342 +:180C90000C2BCD9A0BE52A5F31CAAE0CE1CD100A2CD5CD430C2BCD9A09 +:180CA8000BC24207E3EB7D935F7C9A57DA3707E52A863101280009CD97 +:180CC0000A0AD23707EB220A31E1225F31E1C35E08CA5A08CD5E0801B3 +:180CD8005A0BC3ED0C0E03CD1F07C1E5E52A0C31E33E8CF533C5CD6620 +:180CF0000CCD330DE52A0C31CD0A0AE123DC3108D42E0860692BD81E99 +:180D08000EC35607C016FFCDEB06F9FE8C1E04C25607E1220C31237C6F +:180D2000B5C22B0D3A7C31B7C28C07215A0BE33EE1013A0E00060079C9 +:180D380048477EB7C8B8C823FE22CA370DC33A0DCDFD11CD100AB4D5F1 +:180D50003A5D31F5CD1910F1E3227E311FCD0C10CA9B0DE52A9431E500 +:180D680023235E23562A0E31CD0A0AD28A0D2A0A31CD0A0AD1D2920D1B +:180D8000216F31CD0A0AD2920D3ED1CD4116EBCD7A14CD4116E1CD44B9 +:180D98001AE1C9E5CD411AD1E1C9CD68177E47FE8CCAB10DCD100A8865 +:180DB0002B4B0D78CA820BCD670CFE2CC0C3B20DCD19107EFE88CACE9B +:180DC8000DCD100AA92BCD0A10CDE919CA330DCD9A0BDAEE0CC3810BF6 +:180DE0002BCD9A0BCA420EC8FEA5CA750EFEA8CA750EE5FE2CCA5E0E54 +:180DF800FE3BCA980EC1CD1910E53A5D31B7C22E0ECD8E1BCD9E1436F6 +:180E1000202A9431342A94313AF2304704CA2A0E043A5B31863DB8D4D6 +:180E2800420ECDE314AFC4E314E1C3E00D3A5B31B7C8C3420E360021F4 +:180E400010313E0DCD1B0A3E0ACD1B0AAF325B313AF1303DC8F5AFCDA4 +:180E58001B0AF1C3530E3AF330473A5B31B8D4420ED2980ED60ED26C68 +:180E70000E2FC38D0EF5CD6517CD100A292BF1D6A8E5CA880E3A5B31DC +:180E88002F83D2980E3C473E20CD1B0A05C2910EE1CD9A0BC3E70D3FA6 +:180EA0005265646F2066726F6D2073746172740D0A003A7D31B7C23CDA +:180EB80007C1219F0ECDE014C38D08CD4B147EFE223E0032F530C2DD75 +:180ED0000ECD9F14CD100A3BE5CDE3143EE5CD9108C1DAE90B237EB741 +:180EE8002BC5CA300D362CC3F70EE52A8C31F6AF327D31E3C3030FCDFB +:180F0000100A2CCDFD11E3D57EFE2CCA2B0F3A7D31B7C2980F3E3FCD02 +:180F18001B0ACD9108D1C1DAE90B237EB72BC5CA300DD53A5D31B7CA69 +:180F3000550FCD9A0B5747FE22CA490F3A7D31B757CA460F163A062C5C +:180F48002BCDA214EB21600FE3D5C3630DCD9A0BCDF01AE3CD411AE148 +:180F60002BCD9A0BCA6C0FFE2CC2B20EE32BCD9A0BC2FF0ED13A7D31E3 +:180F7800B7EBC2C00BD5B621870FC4E014E1C93F45787472612069675B +:180F90006E6F7265640D0A00CD310DB7C2B10F237E23B61E06CA560711 +:180FA800235E2356EB227931EBCD9A0BFE83C2980FC32B0F110000C467 +:180FC000FD11227E31CDEB06C24807F9D57E23F5D5CD271AE3E5CD94FB +:180FD80017E1CD411AE1CD381AE5CD641AE1C190CD381ACAF70FEB2283 +:180FF0000C316960C3560BF92A7E317EFE2CC25A0BCD9A0BCDBF0FCD44 +:181008001910F6373A5D318FB7E8C35407CD100A282B1600D50E01CD65 +:181020001F07CD90102280312A8031C178FE78D40A107E1600D6B3DAE3 +:181038005110FE03D25110FE0117AABA57DA4207227531CD9A0BC335E5 +:18105000107AB7C278117E227531D6ACD8FE07D05F3A5D313DB37BCA2B +:18106800D61507835F213406197856BAD023CD0A10C5012810C5434A76 +:18108000CD1A1A58514E234623C52A7531C31C10AF325D31CD9A0B1E51 +:1810980024CA5607DAF01ACD380CD2F710FE262012CD9A0BFE48CA341B +:1810B0001FFE42CAA41F1E02CA5607FEACCA9010FE2ECAF01AFEADCA6C +:1810C800E610FE22CA9F14FEAACAD811FEA7CA0314D6B6D20811CD1543 +:1810E00010CD100A29C9167DCD1C102A8031E5CD121ACD0A10E1C9CD6C +:1810F800FD11E5EB2294313A5D31B7CC271AE1C90600074FC5CD9A0B52 +:1811100079FE31DA2F11CD1510CD100A2CCD0B10EB2A9431E3E5EBCDBE +:181128006817EBE3C33711CDDE10E311F210D5019304094E236669E907 +:1811400015FEADC8FE2DC814FE2BC8FEACC82BC9F6AFF5CD0A10CD4C17 +:181158000CF1EBC1E3EBCD2A1AF5CD4C0CF1C17921C113C27311A34F85 +:1811700078A2E9B34F78B2E9218A113A5D311F7A175F166478BAD0C37D +:1811880079108C1179B71FC1D1F5CD0C1021CE11E5CA641AAF325D31CE +:1811A000D5CD23167E23234E2346D1C5F5CD2716CD381AF157E17BB2D7 +:1811B800C87AD601D8AFBB3CD0151D0ABE2303CAB6113FC3F4193C8F2D +:1811D000C1A0C6FF9FC3FB19165ACD1C10CD0A10CD4C0C7B2F4F7A2F54 +:1811E800CDC113C1C328102BCD9A0BC8CD100A2C01EF11C5F6AF325C21 +:181200003146CD380CDA4207AF4F325D31CD9A0BDA1912CD380CDA26E5 +:18121800124FCD9A0BDA1A12CD380CD21A12D624C235123C325D310FC8 +:18123000814FCD9A0B3A7B313DCAE212F245127ED628CABA12AF327BCC +:1812480031E550592A8E31CD0A0A119031CA2A192A8831EB2A8631CDAA +:181260000A0ACA7812799623C26D12789623CAAC1223232323C35F1222 +:18127800E1E3D511FA10CD0A0AD1CAAF12E3E5C50106002A8A31E50906 +:18129000C1E5CD0E07E1228A3160692288312B3600CD0A0AC29E12D1D7 +:1812A80073237223EBE1C932973121DE06229431E1C9E52A5C31E35708 +:1812C000D5C5CD400CC1F1EBE3E5EB3C577EFE2CCAC012CD100A29220A +:1812D8008031E1225C311E00D511E5F52A88313E19EB2A8A31EBCD0A13 +:1812F0000ACA1A137EB923C2FC127EB8235E235623C2E8123A5C31B72E +:18130800C24B07F1444DCA2A1996CA78131E10C35607110400F1CA61C0 +:181320000C712370234FCD1F07232322753171233A5C311779010B003B +:18133800D23D13C10371237023F5E5CDD51AEBE1F13DC23513F5424B74 +:18135000EB19DA3707CD2807228A312B3600CD0A0AC25B1303572A7525 +:18136800315EEB2909EB2B2B73237223F1DA9C13474F7E2316E15E232C +:181380005623E3F5CD0A0AD21513E5CDD51AD119F13D444DC27D132964 +:1813980029C109EB2A8031C92A8A31EB210000393A5D31B7CABC13CDAC +:1813B0002316CD23152A0A31EB2A73317D934F7C9A41501E00215D31F6 +:1813C800730690C3001A3A5B3147AFC3C213CD5914CD4B1401310DC569 +:1813E000D5CD100A28CDFD11E5EB2B562B5EE1CD0A10CD100A29CD10A7 +:1813F8000AB4444DE3712370C39814CD5914D5CDDE10CD0A10E35E2323 +:1814100056237AB3CA4E077E23666FE52A8E31E3228E312A9231E52AFB +:181428009031E5219031D5CD411AE1CD07102BCD9A0BC24207E1229027 +:1814400031E1229231E1228E31E1C9E52A0C31237CB5E1C01E16C356A3 +:1814580007CD100AA73E80327B31B647CD0212C30A10CD0A10CD8E1B33 +:18147000CD9E14CD2316017E16C57E2323E5CDF914E14E2346CD9214F7 +:18148800E56FCD1616D1C9CDF914216F31E5772323732372E1C92B0645 +:1814A0002250E50EFF237E0CB7CAB414BACAB414B8C2A514FE22CC9AD5 +:1814B8000BE323EB79CD9214116F312A61312294313E01325D31CD44D0 +:1814D0001ACD0A0A226131E17EC01E1EC3560723CD9E14CD2316CD382D +:1814E8001A1C1DC80ACD1B0AFE0DCC4C0E03C3EA14B70EF1F52A0A31D0 +:18150000EB2A73312F4F06FF0923CD0A0ADA171522733123EBF1C9F105 +:181518001E1ACA5607BFF501FB14C52A5F31227331210000E52A0A31E8 +:18153000E5216331EB2A6131EBCD0A0A013415C288152A8631EB2A886F +:1815480031EBCD0A0ACA5B157E2323B7CD8B15C34515C1EB2A8A31EBD3 +:18156000CD0A0ACAB115CD381A7BE509B7F25A15227531E14E0600095C +:181578000923EB2A7531EBCD0A0ACA5B15017A15C5F6807E23235E235E +:181590005623F0B7C8444D2A7331CD0A0A6069D8E1E3CD0A0AE3E560AD +:1815A80069D0C1F1F1E5D5C5C9D1E17DB4C82B462B4EE52B2B6E2600A3 +:1815C0000950592B444D2A7331CD1107E171237069602BC32615C5E571 +:1815D8002A9431E3CD9010E3CD0B107EE52A9431E5861E1CDA5607CDF6 +:1815F0008F14D1CD2716E3CD2616E52A7131EBCD0D16CD0D16212510A7 +:18160800E3E5C3C014E1E37E23234E23466F2C2DC80A120313C317167A +:18162000CD0B102A9431EBCD4116EBC0D550591B4E2A7331CD0A0AC2C9 +:181638003F164709227331E1C92A61312B462B4E2B2BCD0A0AC0226165 +:1816500031C901D113C5CD2016AF57325D317EB7C901D113C5CD561634 +:18166800CA610C23235E23561AC93E01CD8F14CD6B172A713173C1C372 +:18168000C014CD1B17AFE34FE57EB8DA901678110E00C5CDF914C1E12B +:18169800E5232346236668060009444DCD92146FCD1616D1CD2716C3BF +:1816B000C014CD1B17D1D51A90C38616EB7ECD20170405CA610CC51E10 +:1816C800FFFE29CAD516CD100A2CCD6817CD100A29F1E3018816C53D4B +:1816E000BE0600D04F7E91BB47D843C9CD5616CA09185F23237E23664A +:1816F8006FE5194672E3C57EFE24C20A17CD341F180DFE25C21417CD68 +:18171000A41F1803CDF01AC1E170C9EBCD100A29C1D1C543C9CD6B1784 +:1817280032EF30CDEE30C3D113CD5517C3B630CD5517F51E002BCD9A06 +:181740000BCA4B17CD100A2CCD6817C1CDEE30ABA0CA4C17C9CD6817C2 +:1817580032EF3032B730CD100A2CC36817CD9A0BCD0710CD460C7AB714 +:18177000C2610C2BCD9A0B7BC9CD4C0C1AC3D113CD0710CD4C0CD5CDC0 +:18178800100A2CCD6817D112C921671CCD381AC3A317CD381A21C1D1F9 +:1817A000CD121A78B7C83A9731B7CA2A1A90D2BD172F3CEBCD1A1AEB02 +:1817B800CD2A1AC1D1FE19D0F5CD4F1A67F1CD6818B4219431F2E31739 +:1817D000CD4818D229182334CA51072E01CD7E18C32918AF90477E9B13 +:1817E8005F237E9A57237E994FDC54186863AF4779B7C216184A546543 +:181800006F78D608FEE0C2F717AF329731C905297A1757798F4FF20E7E +:1818180018785C45B7CA29182197318677D20918C878219731B7FC3BD5 +:181830001846237EE680A94FC32A1A1CC014C00CC00E8034C0C3510723 +:181848007E835F237E8A57237E894FC92198317E2F77AF6F90477D9B49 +:181860005F7D9A577D994FC90600D608DA7718435A510E00C36A18C621 +:18187800096FAF2DC8791F4F7A1F577B1F5F781F47C37A1800000081B8 +:1818900003AA561980F122768045AA3882CDE919B7EA610C2197317EAE +:1818A80001358011F30490F570D5C5CDA317C1D104CD3F19218C18CD07 +:1818C0009A17219018CD311D018080110000CDA317F1CD641B013180F3 +:1818D80011187221C1D1CDE919C82E00CDA7197932A631EB22A73101F0 +:1818F0000000505821F417E5210019E5E52194317E23B7CA2C19E52EC3 +:18190800081F6779D21A19E52AA73119EBE13AA631891F4F7A1F577B7C +:181920001F5F781F472D7CC20919E1C9435A514FC9CD1A1A012084115F +:181938000000CD2A1AC1D1CDE919CA45072EFFCDA71934342B7E32C250 +:18195000302B7E32BE302B7E32BA3041EBAF4F575F32C530E5C57DCDC6 +:18196800B930DE003FD2771932C530F1F137D2C1E1793C3D1FFA2A18FE +:18198000177B175F7A175779174F297817473AC5301732C53079B2B336 +:18199800C26419E521973135E1C26419C3510778B7CACB197D21973177 +:1819B000AE80471FA878F2CA19C68077CA2A19CD4F1A772BC9CDE9195C +:1819C8002FE1B7E1F20918C35107CD351A78B7C8C602DA510747CDA36D +:1819E0001721973134C0C351073A9731B7C83A9631FE2F179FC03CC9B6 +:1819F800CDE91906881100002197314F70060023368017C3F117CDE94A +:181A100019F02196317EEE8077C9EB2A9431E3E52A9631E3E5EBC9CDC5 +:181A2800381AEB2294316069229631EBC92194315E2356234E23462362 +:181A4000C911943106041A77132305C2461AC92196317E07371F773FB5 +:181A58001F2323777907371F4F1FAEC978B7CAE91921F219E5CDE91904 +:181A700079C8219631AE79F8CD7E1A1FA9C92378BEC02B79BEC02B7A40 +:181A8800BEC02B7B96C0E1E1C9474F575FB7C8E5CD351ACD4F1AAE672A +:181AA000FCB51A3E9890CD68187C17DC3B180600DC5418E1C91B7AA3BE +:181AB8003CC00BC92197317EFE983A9431D07ECD911A36987BF57917B6 +:181AD000CDF117F1C921000078B1C83E1029DA1513EB29EBD2EB1A0905 +:181AE800DA15133DC2DD1AC9FE2DF5CAFC1AFE2BCAFC1A2BCD091847BC +:181B0000575F2F4FCD9A0BDA4D1BFE2ECA281BFE45C22C1BCD9A0BCD21 +:181B18004011CD9A0BDA6F1B14C22C1BAF935F0C0CCA041BE57B90F4EB +:181B3000451BF23B1BF5CD3119F13CC22F1BD1F1CC121AEBC9C8F5CDB8 +:181B4800D219F13DC9D557788947C5E5D5CDD219F1D630CD641BE1C113 +:181B6000D1C3041BCD1A1ACDFB19C1D1C3A3177B0707830786D6305FCB +:181B7800C31A1BE521DA06CDE014E1EBAF0698CD001A21DF14E5219903 +:181B900031E5CDE9193620F29C1B362D233630CA521CE5FC121AAFF584 +:181BA800CD581C01439111F84FCD641AB7E2C91BF1CD461BF5C3AB1B52 +:181BC000CD3119F13CF5CD581CCD91173CCD911ACD2A1A010603F181DD +:181BD8003CFAE51BFE08D2E51B3C473E023D3DE1F5116B1C05C2F61B64 +:181BF000362E2336302305362ECC3F1AC5E5D5CD351AE1062F047B9679 +:181C08005F237A9E5723799E4F2B2BD2051CCD481823CD2A1AEBE17064 +:181C200023C10DC2F61B05CA361C2B7EFE30CA2A1CFE2EC43F1AF1CADC +:181C3800551C364523362BF2461C362D2F3C062F04D60AD2481CC63AB3 +:181C5000237023772371E1C901749411F723CD641AB7E1E2C01BE90054 +:181C6800000080A08601102700E803006400000A000001000021121ADF +:181C8000E3E9CD1A1A21671CCD271AC1D1CDE91978CAD01CF29B1CB7DE +:181C9800CA4507B7CA0A18D5C579F67FCD351AF2B81CD5C5CDBC1AC113 +:181CB000D1F5CD641AE17C1FE1229631E1229431DC7D1CCC121AD5C5F6 +:181CC800CD9D18C1D1CDDE18CD1A1A013881113BAACDDE183A9731FEB9 +:181CE00088D2C519CDBC1AC680C602DAC519F5218C18CD9417CDD5185F +:181CF800F1C1D1F5CDA017CD121A21101DCD401D110000C14AC3DE1892 +:181D100008402E9474704F2E776E02887AE6A02A7C50AAAA7EFFFF7F9C +:181D28007F0000808100000081CD1A1A11DC18D5E5CD351ACDDE18E122 +:181D4000CD1A1A7E23CD271A06F1C1D13DC8D5C5F5E5CDDE18E1CD3830 +:181D58001AE5CDA317E1C3491DCDE91921C930FAC21D21EA30CD271AD8 +:181D700021C930C886E6070600772387874F09CD381ACDDE183AC830EC +:181D88003CE6030600FE018832C83021C61D87874F09CD9417CD351A69 +:181DA0007B59EE4F4F36802B46368021C730347ED6ABC2B91D770C1573 +:181DB8001CCDF41721EA30C3411A772B772B77C39D1D68B1466899E945 +:181DD000926910D1756821201ECD9417CD1A1A01498311DB0FCD2A1A91 +:181DE800C1D1CD3F19CD1A1ACDBC1AC1D1CDA01721241ECD9A17CDE9DB +:181E00001937F20C1ECD9117CDE919B7F5F4121A21241ECD9417F1D4AE +:181E1800121A21281EC3311DDB0F49810000007F05BAD71E866426997E +:181E30008758342387E05DA586DA0F4983CD1A1ACDDC1DC1E1CD1A1A56 +:181E4800EBCD2A1ACDD61DC33D19CDE919FC7D1CFC121A3A9731FE81A0 +:181E6000DA6F1E0100815159CD3F19219A17E521791ECD311D21201EC9 +:181E7800C9094AD73B78026E847BFEC12F7C74319A7D843D5A7DC87F38 +:181E9000917EE4BB4C7E6CAAAA7F00000081C9D7C93E0CC3DB1FCD685D +:181EA800177B32F230C9CD0710CD4C0CED53F630ED53F830C9CD4C0CAE +:181EC000D5E146237EC3C213CD0710CD4C0CD5CD100A2CCD0710CD4CE7 +:181ED8000CE3732372E1C9CD0A10CD4C0CC52199317AFE00280CCD1705 +:181EF0001F78FE302802702371237BCD171F7AFE00200578FE302802D9 +:181F080070237123AF772377C1219931C3701447E60FFE0A3802C6079C +:181F2000C6304F780F0F0F0FE60FFE0A3802C607C63047C9EB2100009A +:181F3800CD4D1FDA6D1F1805CD4D1F381F29292929B56F18F3131AFE47 +:181F500020CA4D1FD630D8FE0A3805D607FE0AD8FE103FC9EB7A4BE598 +:181F6800CDC113E1C91E26C35607CD0A10CD4C0CC52199310611057862 +:181F8000FE012808CB13CB1230F41804CB13CB123E30CE007723052069 +:181F9800F3AF772377C1219931C37014EB210000CDC11FDACF1FD63004 +:181FB00029B56FCDC11F30F6EB7A4BE5CDC113E1C9131AFE20CAC11F24 +:181FC800FE30D8FE323FC91E28C35607DD21FFFFC3A603C30800C30067 +:181FE000003E0032FD30C3AD03ED45F5A0C1B83E00C9CD1B0AC3420E8D +:00000001FF diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/CBIOS128.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/CBIOS128.HEX new file mode 100644 index 0000000..9d70d90 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/hexFiles/CBIOS128.HEX @@ -0,0 +1,59 @@ +:18E60000C351E7C3B5E7C31DE8C358E8C396E8C37EE8C38AE8C34CE847 +:18E61800C3EFE8C3C7E8C3FBE8C300E9C305E9C30DE9C321E9C3C4E8E6 +:18E63000C30AE900000000000000000DEB33E700008DEB000000000092 +:18E648000000000DEB42E700008EEC00000000000000000DEB42E700FE +:18E66000008FED00000000000000000DEB42E7000090EE000000000087 +:18E678000000000DEB42E7000091EF00000000000000000DEB42E700C8 +:18E690000092F000000000000000000DEB42E7000093F100000000004B +:18E6A8000000000DEB42E7000094F200000000000000000DEB42E70092 +:18E6C0000095F300000000000000000DEB42E7000096F400000000000F +:18E6D8000000000DEB42E7000097F500000000000000000DEB42E7005C +:18E6F0000098F600000000000000000DEB42E7000099F70000000000D3 +:18E708000000000DEB42E700009AF800000000000000000DEB42E70025 +:18E72000009BF900000000000000000DEB42E700009CFA8000051F01F1 +:18E73800FB07FF01F000000001008000051F01FF07FF01F0000000003B +:18E7500000F331C1FB3E01D3383E95D380D382CDF9EA0C43502F4D2021 +:18E7680042494F5320322E3020627920472E20536561726C652032302E +:18E7800031330D0A0D0A43502F4D20322E322028632920313937392040 +:18E798006279204469676974616C2052657365617263680D0A00AF326B +:18E7B0000400C3F5E7F331C1FB060B3E0032C9FBD38CD38B2100D0DB00 +:18E7C80089FE8020FA3AC9FBD38A3E00D389C50E040680DB89FEE02064 +:18E7E000FADB8877230520F30D20EE3AC9FB3C32C9FBC110D2AF32CB78 +:18E7F800FB32CDFB21800022D6FB3EC33200002103E6220100320500E9 +:18E810002106D82206003A04004FC300D03A0300E60BFE0A280AFE0241 +:18E828002814E603FE01200EDB80E601FE0028033EFFC93E00C9DB82B1 +:18E84000E601FE0028033EFFC93E00C9F53A0300E608FE08201C180E1B +:18E85800F53A0300E603FE0228EBFE01200CF1DB80E601FE0028F8DB23 +:18E8700081C9F1DB82E601FE0028F8DB83C9F53A0300E6C0FE40202670 +:18E88800181AF53A0300E620FE20201A180EF53A0300E603FE0228DF6E +:18E8A000FE01200ACDB8E828FB79D381F1C9CDBEE828FB79D383F1C901 +:18E8B800DB800FCB47C9DB820FCB47C93EFFC921000079FE10380D3A8F +:18E8D0000400B9C0AF32040032C1FBC932C1FBCB07CB07CB07CB0721C0 +:18E8E80033E606004F09C93ACCFBB7200332CBFB010000ED43C2FBC94E +:18E90000ED43C4FBC9ED43D6FBC9C5E1C9AF32CDFB3E0132D4FB32D320 +:18E91800FB3E0232D5FBC388E9AF32D4FB7932D5FBFE0220173E203284 +:18E93000CDFB3AC1FB32CEFB2AC2FB22CFFB3AC4FB32D1FB3ACDFBB793 +:18E9480028363D32CDFB3AC1FB21CEFBBEC280E921CFFBCD1FEAC28056 +:18E96000E93AC4FB21D1FBBEC280E9347EFE80380936002ACFFB232207 +:18E97800CFFBAF32D3FB1808AF32CDFB3C32D3FBAF32D2FB3AC4FBB7AB +:18E990001FB71F32CAFB21CBFB7E3601B728213AC1FB21C6FBBE201120 +:18E9A80021C7FBCD1FEA20093ACAFB21C9FBBE28243ACCFBB7C4C4EA5D +:18E9C0003AC1FB32C6FB2AC2FB22C7FB3ACAFB32C9FB3AD3FBB7C4957E +:18E9D800EAAF32CCFB3AC4FBE6036F26002929292929292911D8FB1902 +:18E9F000EB2AD6FB0E803AD4FBB720063E0132CCFBEB1A1377230D209E +:18EA0800F93AD5FBFE013AD2FBC0B7C0AF32CCFBCDC4EA3AD2FBC9EBD8 +:18EA200021C2FB1ABEC013231ABEC92AC7FBCB05CB05CB05CB05CB0595 +:18EA38007DE6E06F3AC9FB85329DFB2AC7FBCB0DCB0DCB0D7DE61F6F62 +:18EA5000CB04CB04CB04CB04CB047CE620673AC6FBCB07CB07CB07CB7E +:18EA680007CB07CB07E6C08485329EFB3AC6FBCB0FCB0FE603329FFB0D +:18EA80003E0032A0FB3A9FFBD38C3A9EFBD38B3A9DFBD38AC9F5C5E578 +:18EA9800DB89FE8020FACD2BEA3E00D3890E0421D8FB0680DB89FEE020 +:18EAB00020FADB8877230520F30D20EEE1C1F1AF32D2FBC9F5C5E5DB80 +:18EAC80089FE8020FACD2BEA3E01D3890E0421D8FB0680DB89FEA020EA +:18EAE000FAC5066410FEC17ED388230520ED0D20E8E1C1F1AF32D2FBC2 +:15EAF800C9E3F5C57EFE0028074FCD96E82318F423C1F1E3C9AE +:04FB9D000000000064 +:15FDD8003E01D338F1FE0128043E0118023E00320300C300E63B +:12FFE8003E01D33821004111000101008FEDB0C300E673 +:02FFFE00D8FD2C +:00000001FF diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/CH376S.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/CH376S.HEX new file mode 100644 index 0000000..0fe183e --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/hexFiles/CH376S.HEX @@ -0,0 +1,6 @@ +:18400000CD6440436865636B2043483337367320636F6D6D756E696320 +:184018006174696F6E0D0A00CD644053656E6420410D0A003E05D320B5 +:184030003E06D3203E41D320AFD320DB20EEFFCD644052656365697676 +:1840480065642000CFCD64400D0A00C9063978FE2FC8D320AFDB20CF3F +:154060000518F3C9E3F5C57EFE002804CF2318F723C1F1E3C9AB +:00000001FF diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/CPM22.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/CPM22.HEX new file mode 100644 index 0000000..773954a --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/hexFiles/CPM22.HEX @@ -0,0 +1,238 @@ +:18D00000C35CD3C358D37F00436F7079726967687420313937392028BE +:18D018006329206279204469676974616C20526573656172636820200E +:18D0300020202020000000000000000000000000000000000000000068 +:18D04800000000000000000000000000000000000000000000000000D0 +:18D06000000000000000000000000000000000000000000000000000B8 +:18D078000000000000000000000000000000000008D000005F0E02C396 +:18D090000500C5CD8CD0C1C93E0DCD92D03E0AC392D03E20C392D0C5DC +:18D0A800CD98D0E17EB7C823E5CD8CD0E1C3ACD00E0DC305005F0E0EAE +:18D0C000C30500CD050032EED73CC90E0FC3C3D0AF32EDD711CDD7C332 +:18D0D800CBD00E10C3C3D00E11C3C3D00E12C3C3D011CDD7C3DFD00E11 +:18D0F00013C30500CD0500B7C90E14C3F4D011CDD7C3F9D00E15C3F437 +:18D10800D00E16C3C3D00E17C305001EFF0E20C30500CD13D18787877F +:18D120008721EFD7B6320400C93AEFD7320400C9FE61D8FE7BD0E65F10 +:18D13800C93AABD7B7CA96D13AEFD7B73E00C4BDD011ACD7CDCBD0CA66 +:18D1500096D13ABBD73D32CCD711ACD7CDF9D0C296D11107D0218000A6 +:18D168000680CD42D421BAD73600233511ACD7CDDAD0CA96D13AEFD7CA +:18D18000B7C4BDD02108D0CDACD0CDC2D1CAA7D1CDDDD1C382D3CDDD6E +:18D19800D1CD1AD10E0A1106D0CD0500CD29D12107D0462378B7CABA4A +:18D1B000D17ECD30D17705C3ABD1772108D02288D0C90E0BCD0500B73A +:18D1C800C80E01CD0500B7C90E19C305001180000E1AC3050021ABD713 +:18D1E0007EB7C83600AFCDBDD011ACD7CDEFD03AEFD7C3BDD01128D37F +:18D1F8002100D806061ABEC2CFD3132305C2FDD1C9CD98D02A8AD07E13 +:18D21000FE20CA22D2B7CA22D2E5CD8CD0E123C30FD23E3FCD8CD0CD8C +:18D2280098D0CDDDD1C382D31AB7C8FE20DA09D2C8FE3DC8FE5FC8FE99 +:18D240002EC8FE3AC8FE3BC8FE3CC8FE3EC8C91AB7C8FE20C013C34F74 +:18D25800D2856FD024C93E0021CDD7CD59D2E5E5AF32F0D72A88D0EB61 +:18D27000CD4FD2EB228AD0EBE11AB7CA89D2DE4047131AFE3ACA90D299 +:18D288001B3AEFD777C396D27832F0D770130608CD30D2CAB9D223FE8A +:18D2A0002AC2A9D2363FC3ABD2771305C298D2CD30D2CAC0D213C3AFEF +:18D2B800D223362005C2B9D20603FE2EC2E9D213CD30D2CAE9D223FE87 +:18D2D0002AC2D9D2363FC3DBD2771305C2C8D2CD30D2CAF0D213C3DFCF +:18D2E800D223362005C2E9D2060323360005C2F2D2EB2288D0E1010B22 +:18D3000000237EFE3FC209D3040DC201D378B7C9444952204552412003 +:18D31800545950455341564552454E2055534552001600000000211001 +:18D33000D30E0079FE06D011CED706041ABEC24FD3132305C23CD31A15 +:18D34800FE20C254D379C92305C24FD30CC333D3AF3207D031ABD7C573 +:18D36000791F1F1F1FE60F5FCD15D1CDB8D032ABD7C179E60F32EFD789 +:18D37800CDBDD03A07D0B7C298D331ABD7CD98D0CDD0D1C641CD8CD0C8 +:18D390003E3ECD8CD0CD39D1118000CDD8D1CDD0D132EFD7CD5ED2C4DB +:18D3A80009D23AF0D7B7C2A5D6CD2ED321C1D35F160019197E23666FFD +:18D3C000E977D41FD55DD5ADD510D68ED6A5D621F3762200D02100D047 +:18D3D800E901DFD3C3A7D052656164206572726F720001F0D3C3A7D0A3 +:18D3F0004E6F2066696C6500CD5ED23AF0D7B7C209D221CED7010B0084 +:18D408007EFE20CA33D423D630FE0AD209D25778E6E0C209D278070709 +:18D420000780DA09D280DA09D282DA09D2470DC208D4C97EFE20C2092A +:18D43800D2230DC233D478C906037E12231305C242D4C921800081CD6C +:18D4500059D27EC9AF32CDD73AF0D7B7C83D21EFD7BEC8C3BDD03AF029 +:18D46800D7B7C83D21EFD7BEC83AEFD7C3BDD0CD5ED2CD54D421CED7A4 +:18D480007EFE20C28FD4060B363F2305C288D41E00D5CDE9D0CCEAD305 +:18D49800CA1BD53AEED70F0F0FE6604F3E0ACD4BD417DA0FD5D17B1C90 +:18D4B000D5E603F5C2CCD4CD98D0C5CDD0D1C1C641CD92D03E3ACD9219 +:18D4C800D0C3D4D4CDA2D03E3ACD92D0CDA2D0060178CD4BD4E67FFE1E +:18D4E00020C2F9D4F1F5FE03C2F7D43E09CD4BD4E67FFE20CA0ED53E70 +:18D4F80020CD92D00478FE0CD20ED5FE09C2D9D4CDA2D0C3D9D4F1CDAF +:18D51000C2D1C21BD5CDE4D0C398D4D1C386D7CD5ED2FE0BC242D5013D +:18D5280052D5CDA7D0CD39D12107D035C282D3237EFE59C282D3232211 +:18D5400088D0CD54D411CDD7CDEFD03CCCEAD3C386D7416C6C20287986 +:18D558002F6E293F00CD5ED2C209D2CD54D4CDD0D0CAA7D5CD98D0211E +:18D57000F1D736FF21F1D77EFE80DA87D5E5CDFED0E1C2A0D5AF773499 +:18D58800218000CD59D27EFE1ACA86D7CD8CD0CDC2D1C286D7C374D581 +:18D5A0003DCA86D7CDD9D3CD66D4C309D2CDF8D3F5CD5ED2C209D2CDFD +:18D5B80054D411CDD7D5CDEFD0D1CD09D1CAFBD5AF32EDD7F16F2600E0 +:18D5D000291100017CB5CAF1D52BE521800019E5CDD8D111CDD7CD049C +:18D5E800D1D1E1C2FBD5C3D4D511CDD7CDDAD03CC201D60107D6CDA757 +:18D60000D0CDD5D1C386D74E6F20737061636500CD5ED2C209D23AF002 +:18D61800D7F5CD54D4CDE9D0C279D621CDD711DDD70610CD42D42A886D +:18D63000D0EBCD4FD2FE3DCA3FD6FE5FC273D6EB232288D0CD5ED2C270 +:18D6480073D6F14721F0D77EB7CA59D6B870C273D670AF32CDD7CDE955 +:18D66000D0CA6DD611CDD7CD0ED1C386D7CDEAD3C386D7CD66D4C309D7 +:18D67800D20182D6CDA7D0C386D746696C652065786973747300CDF806 +:18D69000D3FE10D209D25F3ACED7FE20CA09D2CD15D1C389D7CDF5D18A +:18D6A8003ACED7FE20C2C4D63AF0D7B7CA89D73D32EFD7CD29D1CDBDA9 +:18D6C000D0C389D711D6D71AFE20C209D2D5CD54D4D12183D7CD40D4D5 +:18D6D800CDD0D0CA6BD7210001E5EBCDD8D111CDD7CDF9D0C201D7E193 +:18D6F000118000191100D07D937C9AD271D7C3E1D6E13DC271D7CD6682 +:18D70800D4CD5ED221F0D7E57E32CDD73E10CD60D2E17E32DDD7AF32A4 +:18D72000EDD7115C0021CDD70621CD42D42108D07EB7CA3ED7FE20CAFC +:18D738003ED723C330D706001181007E12B7CA4FD7042313C343D77879 +:18D75000328000CD98D0CDD5D1CD1AD1CD000131ABD7CD29D1CDBDD00D +:18D76800C382D3CD66D4C309D2017AD7CDA7D0C386D7426164206C6F34 +:18D78000616400434F4DCD66D4CD5ED23ACED7D62021F0D7B6C209D2D9 +:18D79800C382D3000000000000000000000000000000000000242424F5 +:18D7B000202020202053554200000000000000000000000000000000D7 +:18D7C800000000000000202020202020202020202000000000002020A9 +:18D7E00020202020202020202000000000000000000000000000000011 +:18D7F8000000000000000000001600000000C311D899D8A5D8ABD8B135 +:18D81000D8EB2243DBEB7B32D6E52100002245DB39220FDB3141DBAF06 +:18D8280032E0E532DEE52174E5E579FE29D04B2147D85F160019195E9D +:18D8400023562A43DBEBE903E6C8DA90D9CEDA12E60FE6D4DAEDDAF34A +:18D85800DAF8DAE1D9FEDA7EE483E445E49CE4A5E4ABE4C8E4D7E4E0A9 +:18D87000E4E6E4ECE4F5E4FEE404E50AE511E52CDD17E51DE526E52D5A +:18D88800E541E547E54DE50EE453E504DB04DB9BE521CAD8CDE5D8FE6C +:18D8A00003CA0000C921D5D8C3B4D821E1D8C3B4D821DCD8CDE5D8C372 +:18D8B800000042646F7320457272204F6E20203A20244261642053650D +:18D8D00063746F722453656C6563742446696C6520522F4F24E5CDC9D1 +:18D8E800D93A42DBC64132C6D801BAD8CDD3D9C1CDD3D9210EDB7E361D +:18D9000000B7C0C309E6CDFBD8CD14D9D8F54FCD90D9F1C9FE0DC8FEAF +:18D918000AC8FE09C8FE08C8FE20C93A0EDBB7C245D9CD06E6E601C87F +:18D93000CD09E6FE13C242D9CD09E6FE03CA0000AFC9320EDB3E01C913 +:18D948003A0ADBB7C262D9C5CD23D9C1C5CD0CE6C1C53A0DDBB7C40FEF +:18D96000E6C179210CDBFE7FC834FE20D0357EB7C879FE08C279D93526 +:18D97800C9FE0AC03600C979CD14D9D290D9F50E5ECD48D9F1F6404FD4 +:18D9900079FE09C248D90E20CD48D93A0CDBE607C296D9C9CDACD90E98 +:18D9A80020CD0CE60E08C30CE60E23CD48D9CDC9D93A0CDB210BDBBE49 +:18D9C000D00E20CD48D9C3B9D90E0DCD48D90E0AC348D90AFE24C80312 +:18D9D800C54FCD90D9C1C3D3D93A0CDB320BDB2A43DB4E23E50600C51B +:18D9F000E5CDFBD8E67FE1C1FE0DCAC1DAFE0ACAC1DAFE08C216DA7886 +:18DA0800B7CAEFD9053A0CDB320ADBC370DAFE7FC226DA78B7CAEFD973 +:18DA20007E052BC3A9DAFE05C237DAC5E5CDC9D9AF320BDBC3F1D9FEB9 +:18DA380010C248DAE5210DDB3E019677E1C3EFD9FE18C25FDAE13A0B05 +:18DA5000DB210CDBBED2E1D935CDA4D9C34EDAFE15C26BDACDB1D9E1D5 +:18DA6800C3E1D9FE12C2A6DAC5CDB1D9C1E1E5C578B7CA8ADA234E059C +:18DA8000C5E5CD7FD9E1C1C378DAE53A0ADBB7CAF1D9210CDB96320ADF +:18DA9800DBCDA4D9210ADB35C299DAC3F1D9237704C5E54FCD7FD9E1B7 +:18DAB000C17EFE0378C2BDDAFE01CA0000B9DAEFD9E1700E0DC348D9D9 +:18DAC800CD06D9C301DBCD15E6C301DB793CCAE0DA3CCA06E6C30CE6B4 +:18DAE000CD06E6B7CA91E5CD09E6C301DB3A0300C301DB21030071C9E9 +:18DAF800EB4D44C3D3D9CD23D93245DBC93E01C301DB00020000000067 +:18DB1000000000000000000000000000000000000000000000000000FD +:18DB2800000000000000000000000000000000000000000000000000E5 +:18DB400000000000000000210BD85E2356EBE90C0DC81A771323C35063 +:18DB5800DB3A42DB4FCD1BE67CB5C85E23562322B3E5232322B5E52394 +:18DB70002322B7E52323EB22D0E521B9E50E08CD4FDB2ABBE5EB21C151 +:18DB8800E50E0FCD4FDB2AC6E57C21DDE536FFB7CA9DDB36003EFFB700 +:18DBA000C9CD18E6AF2AB5E57723772AB7E5772377C9CD27E6C3BBDB82 +:18DBB800CD2AE6B7C82109D8C34ADB2AEAE50E02CDEADC22E5E522EC79 +:18DBD000E521E5E54E23462AB7E55E23562AB5E57E23666F7993789AC1 +:18DBE800D2FADBE52AC1E57B955F7A9C57E12BC3E4DBE52AC1E519DAB7 +:18DC00000FDC7995789CDA0FDCEBE123C3FADBE1C5D5E5EB2ACEE51972 +:18DC1800444DCD1EE6D12AB5E5732372D12AB7E5732372C179934F78C2 +:18DC30009A472AD0E5EBCD30E64D44C321E621C3E54E3AE3E5B71F0DF7 +:18DC4800C245DC473E08964F3AE2E50DCA5CDCB717C353DC80C92A43E9 +:18DC6000DB11100019093ADDE5B7CA71DC6E2600C9095E2356EBC9CD06 +:18DC78003EDC4F0600CD5EDC22E5E5C92AE5E57DB4C93AC3E52AE5E5A5 +:18DC9000293DC290DC22E7E53AC4E54F3AE3E5A1B56F22E5E5C92A43DF +:18DCA800DB110C0019C92A43DB110F0019EB21110019C9CDAEDC7E3203 +:18DCC000E3E5EB7E32E1E5CDA6DC3AC5E5A632E2E5C9CDAEDC3AD5E53D +:18DCD800FE02C2DEDCAF4F3AE3E58177EB3AE1E577C90C0DC87CB71F62 +:18DCF000677D1F6FC3EBDC0E802AB9E5AF86230DC2FDDCC90C0DC829F7 +:18DD0800C305DDC53A42DB4F210100CD04DDC179B56F78B467C92AAD92 +:18DD2000E53A42DB4FCDEADC7DE601C921ADE54E2346CD0BDD22ADE5CD +:18DD38002AC8E523EB2AB3E5732372C9CD5EDD110900197E17D0210F8B +:18DD5000D8C34ADBCD1EDDC8210DD8C34ADB2AB9E53AE9E5856FD024C5 +:18DD6800C92A43DB110E00197EC9CD69DD3600C9CD69DDF68077C92A0E +:18DD8000EAE5EB2AB3E57B96237A9EC9CD7FDDD813722B73C97B956F8E +:18DD98007A9C67C90EFF2AECE5EB2ACCE5CD95DDD0C5CDF7DC2ABDE51F +:18DDB000EB2AECE519C10CCAC4DDBEC8CD7FDDD0CD2CDDC977C9CD9C5D +:18DDC800DDCDE0DD0E01CDB8DBC3DADDCDE0DDCDB2DB21B1E5C3E3DDD5 +:18DDE00021B9E54E2346C324E62AB9E5EB2AB1E50E80C34FDB21EAE50A +:18DDF8007E23BEC03CC921FFFF22EAE5C92AC8E5EB2AEAE52322EAE547 +:18DE1000CD95DDD219DEC3FEDD3AEAE5E60306058705C220DE32E9E50B +:18DE2800B7C0C5CDC3DBCDD4DDC1C39EDD79E6073C5F57790F0F0FE6DA +:18DE40001F4F788787878787B14F780F0F0FE61F472ABFE5097E071DD7 +:18DE5800C256DEC9D5CD35DEE6FEC1B10F15C264DE77C9CD5EDD111057 +:18DE70000019C50E11D10DC8D53ADDE5B7CA88DEC5E54E0600C38EDE12 +:18DE88000DC54E2346E579B0CA9DDE2AC6E57D917C98D45CDEE123C1DC +:18DEA000C375DE2AC6E50E03CDEADC23444D2ABFE53600230B78B1C20A +:18DEB800B1DE2ACAE5EB2ABFE5732372CDA1DB2AB3E53603233600CDBF +:18DED000FEDD0EFFCD05DECDF5DDC8CD5EDD3EE5BECAD2DE3A41DBBEC4 +:18DEE800C2F6DE237ED624C2F6DE3D3245DB0E01CD6BDECD8CDDC3D2DC +:18DF0000DE3AD4E5C301DBC5F53AC5E52F4779A04FF1A091E61FC1C96C +:18DF18003EFF32D4E521D8E5712A43DB22D9E5CDFEDDCDA1DB0E00CD86 +:18DF300005DECDF5DDCA94DF2AD9E5EB1AFEE5CA4ADFD5CD7FDDD1D2B6 +:18DF480094DFCD5EDD3AD8E54F060079B7CA83DF1AFE3FCA7CDF78FEAC +:18DF60000DCA7CDFFE0C1ACA73DF96E67FC22DDFC37CDFC54ECD07DF8A +:18DF7800C1C22DDF1323040DC353DF3AEAE5E6033245DB21D4E57E1713 +:18DF9000D0AF77C9CDFEDD3EFFC301DBCD54DD0E0CCD18DFCDF5DDC8F3 +:18DFA800CD44DDCD5EDD36E50E00CD6BDECDC6DDCD2DDFC3A4DF5059F4 +:18DFC00079B0CAD1DF0BD5C5CD35DE1FD2ECDFC1D12AC6E57B957A9CD8 +:18DFD800D2F4DF13C5D5424BCD35DE1FD2ECDFD1C1C3C0DF173CCD643E +:18DFF000DEE1D1C979B0C2C0DF210000C90E001E20D506002A43DB09D4 +:18E00800EBCD5EDDC1CD4FDBCDC3DBC3C6DDCD54DD0E0CCD18DF2A433B +:18E02000DB7E1110001977CDF5DDC8CD44DD0E101E0CCD01E0CD2DDFBA +:18E03800C327E00E0CCD18DFCDF5DDC80E001E0CCD01E0CD2DDFC340FF +:18E05000E00E0FCD18DFCDF5DDC8CDA6DC7EF5E5CD5EDDEB2A43DB0EA0 +:18E0680020D5CD4FDBCD78DDD1210C00194E210F001946E1F17779BE1E +:18E0800078CA8BE03E00DA8BE03E802A43DB110F001977C97E23B62B57 +:18E09800C01A7713231A771B2BC9AF3245DB32EAE532EBE5CD1EDDC0BD +:18E0B000CD69DDE680C00E0FCD18DFCDF5DDC8011000CD5EDD09EB2AA0 +:18E0C80043DB090E103ADDE5B7CAE8E07EB71AC2DBE077B7C2E1E07EBB +:18E0E00012BEC21FE1C3FDE0CD94E0EBCD94E0EB1ABEC21FE113231AB4 +:18E0F800BEC21FE10D13230DC2CDE001ECFF09EB091ABEDA17E17701C6 +:18E11000030009EB097E123EFF32D2E5C310E02145DB35C9CD54DD2A27 +:18E1280043DBE521ACE52243DB0E01CD18DFCDF5DDE12243DBC8EB2183 +:18E140000F00190E11AF77230DC246E1210D001977CD8CDDCDFDDFC3E1 +:18E1580078DDAF32D2E5CDA2E0CDF5DDC82A43DB010C00097E3CE61FEF +:18E1700077CA83E1473AC5E5A021D2E5A6CA8EE1C3ACE10102000934E0 +:18E188007EE60FCAB6E10E0FCD18DFCDF5DDC2ACE13AD3E53CCAB6E14D +:18E1A000CD24E1CDF5DDCAB6E1C3AFE1CD5AE0CDBBDCAFC301DBCD05B7 +:18E1B800DBC378DD3E0132D5E53EFF32D3E5CDBBDC3AE3E521E1E5BEFF +:18E1D000DAE6E1FE80C2FBE1CD5AE1AF32E3E53A45DBB7C2FBE1CD77D6 +:18E1E800DCCD84DCCAFBE1CD8ADCCDD1DBCDB2DBC3D2DCC305DB3E0117 +:18E2000032D5E53E0032D3E5CD54DD2A43DBCD47DDCDBBDC3AE3E5FE57 +:18E2180080D205DBCD77DCCD84DC0E00C26EE2CD3EDC32D7E501000079 +:18E23000B7CA3BE24F0BCD5EDC444DCDBEDF7DB4C248E23E02C301DBE0 +:18E2480022E5E5EB2A43DB011000093ADDE5B73AD7E5CA64E2CD64DDBE +:18E2600073C36CE24F060009097323720E023A45DBB7C0C5CD8ADC3AA0 +:18E27800D5E53D3DC2BBE2C1C5793D3DC2BBE2E52AB9E557772314F27F +:18E290008CE2CDE0DD2AE7E50E0222E5E5C5CDD1DBC1CDB8DB2AE5E539 +:18E2A8000E003AC4E547A5B823C29AE2E122E5E5CDDADDCDD1DBC1C518 +:18E2C000CDB8DBC13AE3E521E1E5BEDAD2E277340E020000210000F51F +:18E2D800CD69DDE67F77F1FE7FC200E33AD5E5FE01C200E3CDD2DCCD4C +:18E2F0005AE12145DB7EB7C2FEE23D32E3E53600C3D2DCAF32D5E5C585 +:18E308002A43DBEB212100197EE67FF57E17237E17E61F4F7E1F1F1F1B +:18E320001FE60F47F1236E2C2D2E06C28BE32120001977210C001979BB +:18E3380096C247E3210E00197896E67FCA7FE3C5D5CDA2E0D1C12E03B8 +:18E350003A45DB3CCA84E3210C001971210E001970CD51E03A45DB3CEB +:18E36800C27FE3C1C52E040CCA84E3CD24E12E053A45DB3CCA84E3C1F7 +:18E38000AFC301DBE5CD69DD36C0E1C17D3245DBC378DD0EFFCD03E300 +:18E39800CCC1E1C90E00CD03E3CC03E2C9EB194E0600210C00197E0FD0 +:18E3B000E680814F3E0088477E0FE60F8047210E00197E87878787F5F2 +:18E3C8008047F5E17DE1B5E601C90E0CCD18DF2A43DB11210019E57215 +:18E3E00023722372CDF5DDCA0CE4CD5EDD110F00CDA5E3E1E55F7996F1 +:18E3F80023789E237B9EDA06E4732B702B71CD2DDFC3E4E3E1C92A43B0 +:18E41000DB112000CDA5E3212100197123702377C92AAFE53A42DB4F6D +:18E42800CDEADCE5EBCD59DBE1CC47DB7D1FD82AAFE54D44CD0BDD220F +:18E44000AFE5C3A3DE3AD6E52142DBBEC877C321E43EFF32DEE52A4355 +:18E45800DB7EE61F3D32D6E5FE1ED275E43A42DB32DFE57E32E0E5E635 +:18E47000E077CD45E43A41DB2A43DBB677C93E22C301DB21000022ADC4 +:18E48800E522AFE5AF3242DB21800022B1E5CDDADDC321E4CD72DDCD55 +:18E4A00051E4C351E0CD51E4C3A2E00E00EB7EFE3FCAC2E4CDA6DC7E03 +:18E4B800FE3FC472DDCD51E40E0FCD18DFC3E9DD2AD9E52243DBCD514A +:18E4D000E4CD2DDFC3E9DDCD51E4CD9CDFC301DFCD51E4C3BCE1CD5181 +:18E4E800E4C3FEE1CD72DDCD51E4C324E1CD51E4CD16E0C301DF2AAF6F +:18E50000E5C329E53A42DBC301DBEB22B1E5C3DADD2ABFE5C329E52A71 +:18E51800ADE5C329E5CD51E4CD3BE0C301DF2ABBE52245DBC93AD6E531 +:18E53000FEFFC23BE53A41DBC301DBE61F3241DBC9CD51E4C393E3CDDB +:18E5480051E4C39CE3CD51E4C3D2E32A43DB7D2F5F7C2F2AAFE5A45713 +:18E560007DA35F2AADE5EB22AFE57DA36F7CA26722ADE5C93ADEE5B782 +:18E57800CA91E52A43DB36003AE0E5B7CA91E5773ADFE532D6E5CD4563 +:18E59000E42A0FDBF92A45DB7D44C9CD51E43E0232D5E50E00CD07E3BB +:18E5A800CC03E2C9E5000000008000000000000000000000000000007C +:18E5C00000000000000000000000000000000000000000000000000043 +:18E5D8000000000000000000000000000000000000000000000000002B +:18E5F00000000000000000000000000000000000C30000C30000C300CA +:18E6080000C30000C30000C30000C30000C30000C30000C30000C300E2 +:13E6200000C30000C30000C30000C30000C30000C3000055 +:00000001FF diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/DOWNLOAD.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/DOWNLOAD.HEX new file mode 100644 index 0000000..643dffe --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/hexFiles/DOWNLOAD.HEX @@ -0,0 +1,19 @@ +:180100003E00326D02327102327202327002218000226E02CD3902FEE0 +:1801180055CA2A02FE3A20F40E13115C00CD05000E16115C00CD050075 +:18013000CD3902FE3E286147C5CD3902C14FCD4C02473A710280327194 +:18014800023A72023C327202782A6E027723226E023A6D023C326D0249 +:18016000FE8020320E15115C00CD05003E2ECD45023A70023CFE40208F +:180178000F3270023E0DCD45023E0ACD45023E00327002218000226EEE +:18019000023E00326D0218983A6D02FE00280D0E15115C00CD05003E4A +:1801A8002ECD45020E10115C00CD0500CD390247C5CD3902C14FCD4C5B +:1801C00002473A720290FE00281A3E0DCD45023E0ACD45021191020EF3 +:1801D80009CD0500CD3902CD3902183CCD390247C5CD3902C14FCD4C8B +:1801F00002473A710290FE0028143E0DCD45023E0ACD45021176020EE5 +:1802080009CD050018123E0DCD45023E0ACD45021173020E09CD0500AF +:180220000E201E00CD0500C30000CD3902CD65025F0E20CD0500C31473 +:18023800011EFF0E06CD0500FE0028F5C90E025FCD0500C978D630FE40 +:180250000A3802D607070707074779D630FE0A3802D60780C9D630FE27 +:180268000AD8D607C90000000000004F4B243D3D3D3D3D3D4368656357 +:180280006B73756D204572726F723D3D3D3D3D3D243D3D3D3D3D3D4636 +:17029800696C65204C656E677468204572726F723D3D3D3D3D3D24D7 +:00000001FF diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/DOWNLOAD2.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/DOWNLOAD2.HEX new file mode 100644 index 0000000..3db112d --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/hexFiles/DOWNLOAD2.HEX @@ -0,0 +1,15 @@ +:204100003E00326D02327102327202327002218000226E02CD3902FE55CA2A02FE3A20F401 +:204120000E13115C00CD05000E16115C00CD0500CD3902FE3E286147C5CD3902C14FCD4CB2 +:2041400002473A7102803271023A72023C327202782A6E027723226E023A6D023C326D02F0 +:20416000FE8020320E15115C00CD05003E2ECD45023A70023CFE40200F3270023E0DCD4537 +:20418000023E0ACD45023E00327002218000226E023E00326D0218983A6D02FE00280D0E33 +:2041A00015115C00CD05003E2ECD45020E10115C00CD0500CD390247C5CD3902C14FCD4C89 +:2041C00002473A720290FE00281A3E0DCD45023E0ACD45021191020E09CD0500CD3902CDFB +:2041E0003902183CCD390247C5CD3902C14FCD4C02473A710290FE0028143E0DCD45023E8E +:204200000ACD45021176020E09CD050018123E0DCD45023E0ACD45021173020E09CD0500BA +:204220000E201E00CD0500C30000CD3902CD65025F0E20CD0500C314011EFF0E06CD050027 +:20424000FE0028F5C90E025FCD0500C978D630FE0A3802D607070707074779D630FE0A38B1 +:2042600002D60780C9D630FE0AD8D607C90000000000004F4B243D3D3D3D3D3D43686563EB +:204280006B73756D204572726F723D3D3D3D3D3D243D3D3D3D3D3D46696C65204C656E670E +:2042A0007468204572726F723D3D3D3D3D3D24FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:00000001FF diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/FORM128.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/FORM128.HEX new file mode 100644 index 0000000..0c20384 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/hexFiles/FORM128.HEX @@ -0,0 +1,16 @@ +:18500000CDD55043502F4D20466F726D617474657220322E3020627918 +:1850180020472E20536561726C6520323031330D0A003E4132E7503A50 +:18503000E750CF3C32E7503E2032E6503AE650D38A3E00D38B3E00D37D +:185048008C3EE0CDA7503AE6503C32E650FE4020E311400021400006D5 +:185060000F3AE750CF3C32E7503E0032E6503AE650D38A7DD38B7CD3A7 +:185078008CCDA7503AE6503C32E650FE2020E7190520D6CDD5500D0A7A +:18509000466F726D617474696E6720636F6D706C6574650D0A00C9F59F +:1850A800C5E5DB89FE8020FA3E01D3890E0421E8500680DB89FEA0209C +:1850C000FAC5066410FEC17ED388230520ED0D20E5E1C1F1C9E3F5C5C7 +:1850D8007EFE002804CF2318F723C1F1E3C90000E520202020202020D1 +:1850F00020202020000000000000000000000000000000000000000028 +:18510800E520202020202020202020200000000000000000000000004A +:185120000000000000000000E520202020202020202020200000000032 +:1851380000000000000000000000000000000000E5202020202020209A +:18515000202020200000000000000000000000000000000000000000C7 +:00000001FF diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/PUTSYS.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/PUTSYS.HEX new file mode 100644 index 0000000..d98532d --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/hexFiles/PUTSYS.HEX @@ -0,0 +1,10 @@ +:18500000CDBA5043502F4D2053797374656D205472616E736665722088 +:18501800627920472E20536561726C6520323031322D31330D0A000601 +:18503000183E0032CB5032CC5032CD5032CE502100D022CF50CD8C50FD +:185048001100022ACF501922CF503ACB503C32CB5010EACDBA500D0AD4 +:1850600053797374656D207472616E7366657220636F6D706C657465B5 +:185078000D0A00C93ACD50D38C3ACC50D38B3ACB50D38AC9F5C5E5DBE1 +:1850900089FE8020FACD7C503E01D3890E040680DB89FEA020FAC50634 +:1850A8006410FEC17ED388230520ED0D20E8E1C1F1C9E3F5C57EFE0025 +:1150C0002804CF2318F723C1F1E3C900000000000031 +:00000001FF diff --git a/Z80 CPM and bootloader (basmon)/source/BASMON.LST b/Z80 CPM and bootloader (basmon)/source/BASMON.LST new file mode 100644 index 0000000..75b4060 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/BASMON.LST @@ -0,0 +1,5015 @@ +0001 0000 ;================================================================================== +0002 0000 ; The updates to the original BASIC within this file are copyright Grant Searle +0003 0000 ; +0004 0000 ; You have permission to use this for NON COMMERCIAL USE ONLY +0005 0000 ; If you wish to use it elsewhere, please include an acknowledgement to myself. +0006 0000 ; +0007 0000 ; http://searle.hostei.com/grant/index.html +0008 0000 ; +0009 0000 ; eMail: home.micros01@btinternet.com +0010 0000 ; +0011 0000 ; If the above don't work, please perform an Internet search to see if I have +0012 0000 ; updated the web page hosting service. +0013 0000 ; +0014 0000 ;================================================================================== +0015 0000 +0016 0000 +0017 0000 ;================================================================================== +0018 0000 ; Contents of this file are copyright Grant Searle +0019 0000 ; HEX routines from Joel Owens. +0020 0000 ; +0021 0000 ; You have permission to use this for NON COMMERCIAL USE ONLY +0022 0000 ; If you wish to use it elsewhere, please include an acknowledgement to myself. +0023 0000 ; +0024 0000 ; http://searle.hostei.com/grant/index.html +0025 0000 ; +0026 0000 ; eMail: home.micros01@btinternet.com +0027 0000 ; +0028 0000 ; If the above don't work, please perform an Internet search to see if I have +0029 0000 ; updated the web page hosting service. +0030 0000 ; +0031 0000 ;================================================================================== +0032 0000 +0033 0000 ;------------------------------------------------------------------------------ +0034 0000 ; +0035 0000 ; Z80 Monitor Rom +0036 0000 ; +0037 0000 ;------------------------------------------------------------------------------ +0038 0000 ; General Equates +0039 0000 ;------------------------------------------------------------------------------ +0040 0000 +0041 0000 ;CR .EQU 0DH +0042 0000 ;LF .EQU 0AH +0043 0000 ;ESC .EQU 1BH +0044 0000 ;CTRLC .EQU 03H +0045 0000 M_CLS .EQU 0CH +0046 0000 +0047 0000 +0048 0000 loadAddr .EQU 0D000h ; CP/M load address +0049 0000 numSecs .EQU 24 ; Number of 512 sectors to be loaded +0050 0000 +0051 0000 +0052 0000 RTS_HIGH .EQU 0D5H +0053 0000 RTS_LOW .EQU 095H +0054 0000 +0055 0000 ACIA0_D .EQU $81 +0056 0000 ACIA0_C .EQU $80 +0057 0000 ACIA1_D .EQU $83 +0058 0000 ACIA1_C .EQU $82 +0059 0000 +0060 0000 SD_DATA .EQU 088H +0061 0000 SD_CONTROL .EQU 089H +0062 0000 SD_STATUS .EQU 089H +0063 0000 SD_LBA0 .EQU 08AH +0064 0000 SD_LBA1 .EQU 08BH +0065 0000 SD_LBA2 .EQU 08CH +0066 0000 +0067 3000 .ORG $3000 +0068 3000 +0069 3000 primaryIO .ds 1 +0070 3001 secNo .ds 1 +0071 3002 dmaAddr .ds 2 +0072 3004 +0073 3004 00 lba0 .DB 00h +0074 3005 00 lba1 .DB 00h +0075 3006 00 lba2 .DB 00h +0076 3007 00 lba3 .DB 00h +0077 3008 +0078 3008 stackSpace .ds 32 +0079 3028 M_STACK .EQU $ ; Stack top +0080 3028 +0081 3028 +0082 3028 ;------------------------------------------------------------------------------ +0083 3028 ; START OF MONITOR ROM +0084 3028 ;------------------------------------------------------------------------------ +0085 3028 +0086 0000 MON .ORG $0000 ; MONITOR ROM RESET VECTOR +0087 0000 ;------------------------------------------------------------------------------ +0088 0000 ; Reset +0089 0000 ;------------------------------------------------------------------------------ +0090 0000 F3 RST00 DI ;Disable INTerrupts +0091 0001 C3 94 00 JP M_INIT ;Initialize Hardware and go +0092 0004 00 NOP +0093 0005 00 NOP +0094 0006 00 NOP +0095 0007 00 NOP +0096 0008 ;------------------------------------------------------------------------------ +0097 0008 ; TX a character over RS232 wait for TXDONE first. +0098 0008 ;------------------------------------------------------------------------------ +0099 0008 C3 32 00 RST08 JP conout +0100 000B 00 NOP +0101 000C 00 NOP +0102 000D 00 NOP +0103 000E 00 NOP +0104 000F 00 NOP +0105 0010 ;------------------------------------------------------------------------------ +0106 0010 ; RX a character from buffer wait until char ready. +0107 0010 ;------------------------------------------------------------------------------ +0108 0010 C3 1B 00 RST10 JP conin +0109 0013 00 NOP +0110 0014 00 NOP +0111 0015 00 NOP +0112 0016 00 NOP +0113 0017 00 NOP +0114 0018 ;------------------------------------------------------------------------------ +0115 0018 ; Check input buffer status +0116 0018 ;------------------------------------------------------------------------------ +0117 0018 C3 5C 00 RST18 JP CKINCHAR +0118 001B +0119 001B +0120 001B ;------------------------------------------------------------------------------ +0121 001B ; Console input routine +0122 001B ; Use the "primaryIO" flag to determine which input port to monitor. +0123 001B ;------------------------------------------------------------------------------ +0124 001B conin: +0125 001B 3A 00 30 LD A,(primaryIO) +0126 001E FE 00 CP 0 +0127 0020 20 08 JR NZ,coninB +0128 0022 coninA: +0129 0022 +0130 0022 waitForCharA: +0131 0022 CD 63 00 call ckincharA +0132 0025 28 FB JR Z, waitForCharA +0133 0027 DB 81 IN A,(ACIA0_D) +0134 0029 C9 RET ; Char ready in A +0135 002A +0136 002A coninB: +0137 002A +0138 002A waitForCharB: +0139 002A CD 6A 00 call ckincharB +0140 002D 28 FB JR Z, waitForCharB +0141 002F DB 83 IN A,(ACIA1_D) +0142 0031 C9 RET ; Char ready in A +0143 0032 +0144 0032 ;------------------------------------------------------------------------------ +0145 0032 ; Console output routine +0146 0032 ; Use the "primaryIO" flag to determine which output port to send a character. +0147 0032 ;------------------------------------------------------------------------------ +0148 0032 F5 conout: PUSH AF ; Store character +0149 0033 3A 00 30 LD A,(primaryIO) +0150 0036 FE 00 CP 0 +0151 0038 20 0D JR NZ,conoutB1 +0152 003A 18 01 JR conoutA1 +0153 003C conoutA: +0154 003C F5 PUSH AF +0155 003D +0156 003D CD 50 00 conoutA1: CALL CKACIA0 ; See if ACIA channel A is finished transmitting +0157 0040 28 FB JR Z,conoutA1 ; Loop until ACIA flag signals ready +0158 0042 F1 POP AF ; RETrieve character +0159 0043 D3 81 OUT (ACIA0_D),A ; OUTput the character +0160 0045 C9 RET +0161 0046 +0162 0046 conoutB: +0163 0046 F5 PUSH AF +0164 0047 +0165 0047 CD 56 00 conoutB1: CALL CKACIA1 ; See if ACIA channel B is finished transmitting +0166 004A 28 FB JR Z,conoutB1 ; Loop until ACIA flag signals ready +0167 004C F1 POP AF ; RETrieve character +0168 004D D3 83 OUT (ACIA1_D),A ; OUTput the character +0169 004F C9 RET +0170 0050 +0171 0050 ;------------------------------------------------------------------------------ +0172 0050 ; I/O status check routine +0173 0050 ; Use the "primaryIO" flag to determine which port to check. +0174 0050 ;------------------------------------------------------------------------------ +0175 0050 CKACIA0 +0176 0050 DB 80 IN A,(ACIA0_C) ; Status byte D1=TX Buff Empty, D0=RX char ready +0177 0052 0F RRCA ; Rotates RX status into Carry Flag, +0178 0053 CB 47 BIT 0,A ; Set Zero flag if still transmitting character +0179 0055 C9 RET +0180 0056 +0181 0056 CKACIA1 +0182 0056 DB 82 IN A,(ACIA1_C) ; Status byte D1=TX Buff Empty, D0=RX char ready +0183 0058 0F RRCA ; Rotates RX status into Carry Flag, +0184 0059 CB 47 BIT 0,A ; Set Zero flag if still transmitting character +0185 005B C9 RET +0186 005C +0187 005C ;------------------------------------------------------------------------------ +0188 005C ; Check if there is a character in the input buffer +0189 005C ; Use the "primaryIO" flag to determine which port to check. +0190 005C ;------------------------------------------------------------------------------ +0191 005C CKINCHAR +0192 005C 3A 00 30 LD A,(primaryIO) +0193 005F FE 00 CP 0 +0194 0061 20 07 JR NZ,ckincharB +0195 0063 +0196 0063 ckincharA: +0197 0063 +0198 0063 DB 80 IN A,(ACIA0_C) ; Status byte +0199 0065 E6 01 AND $01 +0200 0067 FE 00 CP $0 ; Z flag set if no char +0201 0069 C9 RET +0202 006A +0203 006A ckincharB: +0204 006A +0205 006A DB 82 IN A,(ACIA1_C) ; Status byte +0206 006C E6 01 AND $01 +0207 006E FE 00 CP $0 ; Z flag set if no char +0208 0070 C9 RET +0209 0071 +0210 0071 ;------------------------------------------------------------------------------ +0211 0071 ; Filtered Character I/O +0212 0071 ;------------------------------------------------------------------------------ +0213 0071 +0214 0071 D7 RDCHR RST 10H +0215 0072 FE 0A CP LF +0216 0074 28 FB JR Z,RDCHR ; Ignore LF +0217 0076 FE 1B CP ESC +0218 0078 20 02 JR NZ,RDCHR1 +0219 007A 3E 03 LD A,CTRLC ; Change ESC to CTRL-C +0220 007C C9 RDCHR1 RET +0221 007D +0222 007D FE 0D WRCHR CP CR +0223 007F 28 0A JR Z,WRCRLF ; When CR, write CRLF +0224 0081 FE 0C CP M_CLS +0225 0083 28 04 JR Z,WR ; Allow write of "CLS" +0226 0085 FE 20 CP ' ' ; Don't write out any other control codes +0227 0087 38 01 JR C,NOWR ; ie. < space +0228 0089 CF WR RST 08H +0229 008A C9 NOWR RET +0230 008B +0231 008B 3E 0D WRCRLF LD A,CR +0232 008D CF RST 08H +0233 008E 3E 0A LD A,LF +0234 0090 CF RST 08H +0235 0091 3E 0D LD A,CR +0236 0093 C9 RET +0237 0094 +0238 0094 +0239 0094 ;------------------------------------------------------------------------------ +0240 0094 ; Initialise hardware and start main loop +0241 0094 ;------------------------------------------------------------------------------ +0242 0094 31 28 30 M_INIT LD SP,M_STACK ; Set the Stack Pointer +0243 0097 +0244 0097 3E 95 LD A,RTS_LOW +0245 0099 D3 80 OUT (ACIA0_C),A ; Initialise ACIA0 +0246 009B D3 82 OUT (ACIA1_C),A ; Initialise ACIA1 +0247 009D ; Display the "Press space to start" message on both consoles +0248 009D 3E 00 LD A,$00 +0249 009F 32 00 30 LD (primaryIO),A +0250 00A2 21 65 03 LD HL,INITTXT +0251 00A5 CD 1B 01 CALL M_PRINT +0252 00A8 3E 01 LD A,$01 +0253 00AA 32 00 30 LD (primaryIO),A +0254 00AD 21 65 03 LD HL,INITTXT +0255 00B0 CD 1B 01 CALL M_PRINT +0256 00B3 +0257 00B3 ; Wait until space is in one of the buffers to determine the active console +0258 00B3 +0259 00B3 waitForSpace: +0260 00B3 +0261 00B3 CD 63 00 CALL ckincharA +0262 00B6 28 0F jr Z,notInA +0263 00B8 3E 00 LD A,$00 +0264 00BA 32 00 30 LD (primaryIO),A +0265 00BD CD 1B 00 CALL conin +0266 00C0 FE 20 CP ' ' +0267 00C2 C2 B3 00 JP NZ, waitForSpace +0268 00C5 18 14 JR spacePressed +0269 00C7 +0270 00C7 notInA: +0271 00C7 CD 6A 00 CALL ckincharB +0272 00CA 28 E7 JR Z,waitForSpace +0273 00CC 3E 01 LD A,$01 +0274 00CE 32 00 30 LD (primaryIO),A +0275 00D1 CD 1B 00 CALL conin +0276 00D4 FE 20 CP ' ' +0277 00D6 C2 B3 00 JP NZ, waitForSpace +0278 00D9 18 00 JR spacePressed +0279 00DB +0280 00DB spacePressed: +0281 00DB +0282 00DB ; Clear message on both consoles +0283 00DB 3E 0C LD A,$0C +0284 00DD CD 3C 00 CALL conoutA +0285 00E0 CD 46 00 CALL conoutB +0286 00E3 +0287 00E3 ; primaryIO is now set to the channel where SPACE was pressed +0288 00E3 +0289 00E3 +0290 00E3 CD 22 01 CALL TXCRLF ; TXCRLF +0291 00E6 21 96 02 LD HL,M_SIGNON ; Print SIGNON message +0292 00E9 CD 1B 01 CALL M_PRINT +0293 00EC +0294 00EC ;------------------------------------------------------------------------------ +0295 00EC ; Monitor command loop +0296 00EC ;------------------------------------------------------------------------------ +0297 00EC 21 EC 00 MAIN LD HL,MAIN ; Save entry point for Monitor +0298 00EF E5 PUSH HL ; This is the return address +0299 00F0 CD 22 01 MAIN0 CALL TXCRLF ; Entry point for Monitor, Normal +0300 00F3 3E 3E LD A,'>' ; Get a ">" +0301 00F5 CF RST 08H ; print it +0302 00F6 +0303 00F6 CD 71 00 MAIN1 CALL RDCHR ; Get a character from the input port +0304 00F9 FE 20 CP ' ' ; or less? +0305 00FB 38 F9 JR C,MAIN1 ; Go back +0306 00FD +0307 00FD FE 3A CP ':' ; ":"? +0308 00FF CA 99 01 JP Z,LOAD ; First character of a HEX load +0309 0102 +0310 0102 CD 7D 00 CALL WRCHR ; Print char on console +0311 0105 +0312 0105 E6 5F AND $5F ; Make character uppercase +0313 0107 +0314 0107 FE 42 CP 'B' +0315 0109 CA DA 01 JP Z,BASIC +0316 010C +0317 010C FE 47 CP 'G' +0318 010E CA 93 01 JP Z,M_GOTO +0319 0111 +0320 0111 FE 58 CP 'X' +0321 0113 CA F1 01 JP Z,CPMLOAD +0322 0116 +0323 0116 3E 3F LD A,'?' ; Get a "?" +0324 0118 CF RST 08H ; Print it +0325 0119 18 D5 JR MAIN0 +0326 011B +0327 011B ;------------------------------------------------------------------------------ +0328 011B ; Print string of characters to Serial A until byte=$00, WITH CR, LF +0329 011B ;------------------------------------------------------------------------------ +0330 011B 7E M_PRINT LD A,(HL) ; Get character +0331 011C B7 OR A ; Is it $00 ? +0332 011D C8 RET Z ; Then RETurn on terminator +0333 011E CF RST 08H ; Print it +0334 011F 23 INC HL ; Next Character +0335 0120 18 F9 JR M_PRINT ; Continue until $00 +0336 0122 +0337 0122 +0338 0122 3E 0D TXCRLF LD A,$0D ; +0339 0124 CF RST 08H ; Print character +0340 0125 3E 0A LD A,$0A ; +0341 0127 CF RST 08H ; Print character +0342 0128 C9 RET +0343 0129 +0344 0129 ;------------------------------------------------------------------------------ +0345 0129 ; Get a character from the console, must be $20-$7F to be valid (no control characters) +0346 0129 ; and breaks with the Zero Flag set +0347 0129 ;------------------------------------------------------------------------------ +0348 0129 CD 71 00 M_GETCHR CALL RDCHR ; RX a Character +0349 012C FE 03 CP $03 ; User break? +0350 012E C8 RET Z +0351 012F FE 20 CP $20 ; or better? +0352 0131 38 F6 JR C,M_GETCHR ; Do it again until we get something usable +0353 0133 C9 RET +0354 0134 ;------------------------------------------------------------------------------ +0355 0134 ; Gets two ASCII characters from the console (assuming them to be HEX 0-9 A-F) +0356 0134 ; Moves them into B and C, converts them into a byte value in A and updates a +0357 0134 ; Checksum value in E +0358 0134 ;------------------------------------------------------------------------------ +0359 0134 CD 29 01 GET2 CALL M_GETCHR ; Get us a valid character to work with +0360 0137 47 LD B,A ; Load it in B +0361 0138 CD 29 01 CALL M_GETCHR ; Get us another character +0362 013B 4F LD C,A ; load it in C +0363 013C CD 73 01 CALL BCTOA ; Convert ASCII to byte +0364 013F 4F LD C,A ; Build the checksum +0365 0140 7B LD A,E +0366 0141 91 SUB C ; The checksum should always equal zero when checked +0367 0142 5F LD E,A ; Save the checksum back where it came from +0368 0143 79 LD A,C ; Retrieve the byte and go back +0369 0144 C9 RET +0370 0145 ;------------------------------------------------------------------------------ +0371 0145 ; Gets four Hex characters from the console, converts them to values in HL +0372 0145 ;------------------------------------------------------------------------------ +0373 0145 21 00 00 GETHL LD HL,$0000 ; Gets xxxx but sets Carry Flag on any Terminator +0374 0148 CD 8C 01 CALL ECHO ; RX a Character +0375 014B FE 0D CP $0D ; ? +0376 014D 20 0E JR NZ,GETX2 ; other key +0377 014F 37 SETCY SCF ; Set Carry Flag +0378 0150 C9 RET ; and Return to main program +0379 0151 ;------------------------------------------------------------------------------ +0380 0151 ; This routine converts last four hex characters (0-9 A-F) user types into a value in HL +0381 0151 ; Rotates the old out and replaces with the new until the user hits a terminating character +0382 0151 ;------------------------------------------------------------------------------ +0383 0151 21 00 00 GETX LD HL,$0000 ; CLEAR HL +0384 0154 CD 8C 01 GETX1 CALL ECHO ; RX a character from the console +0385 0157 FE 0D CP $0D ; +0386 0159 C8 RET Z ; quit +0387 015A FE 2C CP $2C ; <,> can be used to safely quit for multiple entries +0388 015C C8 RET Z ; (Like filling both DE and HL from the user) +0389 015D FE 03 GETX2 CP $03 ; Likewise, a will terminate clean, too, but +0390 015F 28 EE JR Z,SETCY ; It also sets the Carry Flag for testing later. +0391 0161 29 ADD HL,HL ; Otherwise, rotate the previous low nibble to high +0392 0162 29 ADD HL,HL ; rather slowly +0393 0163 29 ADD HL,HL ; until we get to the top +0394 0164 29 ADD HL,HL ; and then we can continue on. +0395 0165 D6 30 SUB $30 ; Convert ASCII to byte value +0396 0167 FE 0A CP $0A ; Are we in the 0-9 range? +0397 0169 38 02 JR C,GETX3 ; Then we just need to sub $30, but if it is A-F +0398 016B D6 07 SUB $07 ; We need to take off 7 more to get the value down to +0399 016D E6 0F GETX3 AND $0F ; to the right hex value +0400 016F 85 ADD A,L ; Add the high nibble to the low +0401 0170 6F LD L,A ; Move the byte back to A +0402 0171 18 E1 JR GETX1 ; and go back for next character until he terminates +0403 0173 ;------------------------------------------------------------------------------ +0404 0173 ; Convert ASCII characters in B C registers to a byte value in A +0405 0173 ;------------------------------------------------------------------------------ +0406 0173 78 BCTOA LD A,B ; Move the hi order byte to A +0407 0174 D6 30 SUB $30 ; Take it down from Ascii +0408 0176 FE 0A CP $0A ; Are we in the 0-9 range here? +0409 0178 38 02 JR C,BCTOA1 ; If so, get the next nybble +0410 017A D6 07 SUB $07 ; But if A-F, take it down some more +0411 017C 07 BCTOA1 RLCA ; Rotate the nybble from low to high +0412 017D 07 RLCA ; One bit at a time +0413 017E 07 RLCA ; Until we +0414 017F 07 RLCA ; Get there with it +0415 0180 47 LD B,A ; Save the converted high nybble +0416 0181 79 LD A,C ; Now get the low order byte +0417 0182 D6 30 SUB $30 ; Convert it down from Ascii +0418 0184 FE 0A CP $0A ; 0-9 at this point? +0419 0186 38 02 JR C,BCTOA2 ; Good enough then, but +0420 0188 D6 07 SUB $07 ; Take off 7 more if it's A-F +0421 018A 80 BCTOA2 ADD A,B ; Add in the high order nybble +0422 018B C9 RET +0423 018C +0424 018C ;------------------------------------------------------------------------------ +0425 018C ; Get a character and echo it back to the user +0426 018C ;------------------------------------------------------------------------------ +0427 018C CD 71 00 ECHO CALL RDCHR +0428 018F CD 7D 00 CALL WRCHR +0429 0192 C9 RET +0430 0193 +0431 0193 ;------------------------------------------------------------------------------ +0432 0193 ; GOTO command +0433 0193 ;------------------------------------------------------------------------------ +0434 0193 CD 45 01 M_GOTO CALL GETHL ; ENTRY POINT FOR oto addr. Get XXXX from user. +0435 0196 D8 RET C ; Return if invalid +0436 0197 E5 PUSH HL +0437 0198 C9 RET ; Jump to HL address value +0438 0199 +0439 0199 ;------------------------------------------------------------------------------ +0440 0199 ; LOAD Intel Hex format file from the console. +0441 0199 ; [Intel Hex Format is: +0442 0199 ; 1) Colon (Frame 0) +0443 0199 ; 2) Record Length Field (Frames 1 and 2) +0444 0199 ; 3) Load Address Field (Frames 3,4,5,6) +0445 0199 ; 4) Record Type Field (Frames 7 and 8) +0446 0199 ; 5) Data Field (Frames 9 to 9+2*(Record Length)-1 +0447 0199 ; 6) Checksum Field - Sum of all byte values from Record Length to and +0448 0199 ; including Checksum Field = 0 ] +0449 0199 ;------------------------------------------------------------------------------ +0450 0199 1E 00 LOAD LD E,0 ; First two Characters is the Record Length Field +0451 019B CD 34 01 CALL GET2 ; Get us two characters into BC, convert it to a byte
    +0452 019E 57 LD D,A ; Load Record Length count into D +0453 019F CD 34 01 CALL GET2 ; Get next two characters, Memory Load Address +0454 01A2 67 LD H,A ; put value in H register. +0455 01A3 CD 34 01 CALL GET2 ; Get next two characters, Memory Load Address +0456 01A6 6F LD L,A ; put value in L register. +0457 01A7 CD 34 01 CALL GET2 ; Get next two characters, Record Field Type +0458 01AA FE 01 CP $01 ; Record Field Type 00 is Data, 01 is End of File +0459 01AC 20 09 JR NZ,LOAD2 ; Must be the end of that file +0460 01AE CD 34 01 CALL GET2 ; Get next two characters, assemble into byte +0461 01B1 7B LD A,E ; Recall the Checksum byte +0462 01B2 A7 AND A ; Is it Zero? +0463 01B3 28 1E JR Z,LOAD00 ; Print footer reached message +0464 01B5 18 15 JR LOADERR ; Checksums don't add up, Error out +0465 01B7 +0466 01B7 7A LOAD2 LD A,D ; Retrieve line character counter +0467 01B8 A7 AND A ; Are we done with this line? +0468 01B9 28 0B JR Z,LOAD3 ; Get two more ascii characters, build a byte and checksum +0469 01BB CD 34 01 CALL GET2 ; Get next two chars, convert to byte in A, checksum it +0470 01BE 77 LD (HL),A ; Move converted byte in A to memory location +0471 01BF 23 INC HL ; Increment pointer to next memory location +0472 01C0 3E 2E LD A,'.' ; Print out a "." for every byte loaded +0473 01C2 CF RST 08H ; +0474 01C3 15 DEC D ; Decrement line character counter +0475 01C4 18 F1 JR LOAD2 ; and keep loading into memory until line is complete +0476 01C6 +0477 01C6 CD 34 01 LOAD3 CALL GET2 ; Get two chars, build byte and checksum +0478 01C9 7B LD A,E ; Check the checksum value +0479 01CA A7 AND A ; Is it zero? +0480 01CB C8 RET Z +0481 01CC +0482 01CC 21 54 03 LOADERR LD HL,CKSUMERR ; Get "Checksum Error" message +0483 01CF CD 1B 01 CALL M_PRINT ; Print Message from (HL) and terminate the load +0484 01D2 C9 RET +0485 01D3 +0486 01D3 21 8A 03 LOAD00 LD HL,LDETXT ; Print load complete message +0487 01D6 CD 1B 01 CALL M_PRINT +0488 01D9 C9 RET +0489 01DA +0490 01DA ;------------------------------------------------------------------------------ +0491 01DA ; Start BASIC command +0492 01DA ;------------------------------------------------------------------------------ +0493 01DA BASIC +0494 01DA 21 42 03 LD HL,M_BASTXT +0495 01DD CD 1B 01 CALL M_PRINT +0496 01E0 CD 29 01 CALL M_GETCHR +0497 01E3 C8 RET Z ; Cancel if CTRL-C +0498 01E4 E6 5F AND $5F ; uppercase +0499 01E6 FE 43 CP 'C' +0500 01E8 CA 95 03 JP Z,COLD +0501 01EB FE 57 CP 'W' +0502 01ED CA 98 03 JP Z,WARM +0503 01F0 C9 RET +0504 01F1 +0505 01F1 ;------------------------------------------------------------------------------ +0506 01F1 ; CP/M load command +0507 01F1 ;------------------------------------------------------------------------------ +0508 01F1 CPMLOAD +0509 01F1 +0510 01F1 21 03 02 LD HL,CPMTXT +0511 01F4 CD 1B 01 CALL M_PRINT +0512 01F7 CD 29 01 CALL M_GETCHR +0513 01FA C8 RET Z ; Cancel if CTRL-C +0514 01FB E6 5F AND $5F ; uppercase +0515 01FD FE 59 CP 'Y' +0516 01FF CA 24 02 JP Z,CPMLOAD2 +0517 0202 C9 RET +0518 0203 CPMTXT +0519 0203 0D 0A .BYTE $0D,$0A +0520 0205 426F6F742043 .TEXT "Boot CP/M?" +0520 020B 502F4D3F +0521 020F 00 .BYTE $00 +0522 0210 +0523 0210 CPMTXT2 +0524 0210 0D 0A .BYTE $0D,$0A +0525 0212 4C6F6164696E .TEXT "Loading CP/M..." +0525 0218 672043502F4D2E2E2E +0526 0221 0D 0A 00 .BYTE $0D,$0A,$00 +0527 0224 +0528 0224 CPMLOAD2 +0529 0224 21 10 02 LD HL,CPMTXT2 +0530 0227 CD 1B 01 CALL M_PRINT +0531 022A +0532 022A 06 18 LD B,numSecs +0533 022C +0534 022C 3E 00 LD A,0 +0535 022E 32 04 30 LD (lba0),A +0536 0231 32 05 30 ld (lba1),A +0537 0234 32 06 30 ld (lba2),A +0538 0237 32 07 30 ld (lba3),A +0539 023A +0540 023A 21 00 D0 LD HL,loadAddr +0541 023D 22 02 30 LD (dmaAddr),HL +0542 0240 processSectors: +0543 0240 +0544 0240 CD 6E 02 call readhst +0545 0243 +0546 0243 11 00 02 LD DE,0200H +0547 0246 2A 02 30 LD HL,(dmaAddr) +0548 0249 19 ADD HL,DE +0549 024A 22 02 30 LD (dmaAddr),HL +0550 024D 3A 04 30 LD A,(lba0) +0551 0250 3C INC A +0552 0251 32 04 30 LD (lba0),A +0553 0254 +0554 0254 10 EA djnz processSectors +0555 0256 +0556 0256 ; Start CP/M using entry at top of BIOS +0557 0256 ; The current active console stream ID is pushed onto the stack +0558 0256 ; to allow the CBIOS to pick it up +0559 0256 ; 0 = ACIA0, 1 = ACIA1 +0560 0256 +0561 0256 3A 00 30 ld A,(primaryIO) +0562 0259 F5 PUSH AF +0563 025A 2A FE FF ld HL,($FFFE) +0564 025D E9 jp (HL) +0565 025E +0566 025E +0567 025E ;------------------------------------------------------------------------------ +0568 025E ; ROUTINES AS USED IN BIOS +0569 025E ;------------------------------------------------------------------------------ +0570 025E +0571 025E ;================================================================================================ +0572 025E ; Convert track/head/sector into LBA for physical access to the disk +0573 025E ;================================================================================================ +0574 025E setLBAaddr: +0575 025E ; Transfer LBA to disk (LBA3 not used on SD card) +0576 025E 3A 06 30 LD A,(lba2) +0577 0261 D3 8C OUT (SD_LBA2),A +0578 0263 3A 05 30 LD A,(lba1) +0579 0266 D3 8B OUT (SD_LBA1),A +0580 0268 3A 04 30 LD A,(lba0) +0581 026B D3 8A OUT (SD_LBA0),A +0582 026D C9 RET +0583 026E +0584 026E ;================================================================================================ +0585 026E ; Read physical sector from host +0586 026E ;================================================================================================ +0587 026E +0588 026E readhst: +0589 026E F5 PUSH AF +0590 026F C5 PUSH BC +0591 0270 E5 PUSH HL +0592 0271 +0593 0271 DB 89 rdWait1: IN A,(SD_STATUS) +0594 0273 FE 80 CP 128 +0595 0275 20 FA JR NZ,rdWait1 +0596 0277 +0597 0277 CD 5E 02 CALL setLBAaddr +0598 027A +0599 027A 3E 00 LD A,$00 ; 00 = Read block +0600 027C D3 89 OUT (SD_CONTROL),A +0601 027E +0602 027E 0E 04 LD c,4 +0603 0280 ; LD HL,hstbuf +0604 0280 rd4secs: +0605 0280 06 80 LD b,128 +0606 0282 rdByte: +0607 0282 +0608 0282 DB 89 rdWait2: IN A,(SD_STATUS) +0609 0284 FE E0 CP 224 ; Read byte waiting +0610 0286 20 FA JR NZ,rdWait2 +0611 0288 +0612 0288 DB 88 IN A,(SD_DATA) +0613 028A +0614 028A 77 LD (HL),A +0615 028B 23 INC HL +0616 028C 05 dec b +0617 028D 20 F3 JR NZ, rdByte +0618 028F 0D dec c +0619 0290 20 EE JR NZ,rd4secs +0620 0292 +0621 0292 E1 POP HL +0622 0293 C1 POP BC +0623 0294 F1 POP AF +0624 0295 +0625 0295 ; XOR a +0626 0295 ; ld (erflag),a +0627 0295 C9 RET +0628 0296 +0629 0296 ;------------------------------------------------------------------------------ +0630 0296 ; END OF ROUTINES AS USED IN BIOS +0631 0296 ;------------------------------------------------------------------------------ +0632 0296 +0633 0296 +0634 0296 43502F4D2042M_SIGNON .BYTE "CP/M Boot ROM 2.0" +0634 029C 6F6F7420524F4D20322E30 +0635 02A7 20627920472E .BYTE " by G. Searle" +0635 02AD 20536561726C65 +0636 02B4 0D 0A .BYTE $0D,$0A +0637 02B6 0D 0A .BYTE $0D,$0A +0638 02B8 4243206F7220 .TEXT "BC or BW - ROM BASIC Cold/Warm" +0638 02BE 4257202D20524F4D20424153494320436F6C642F5761726D +0639 02D6 0D 0A .BYTE $0D,$0A +0640 02D8 582020202020 .TEXT "X - Boot CP/M (load $D000-$FFFF)" +0640 02DE 2020202D20426F6F742043502F4D20286C6F61642024443030302D244646464629 +0641 02FF 0D 0A .BYTE $0D,$0A +0642 0301 3A6E6E6E6E2E .TEXT ":nnnn... - Load Intel-Hex file record" +0642 0307 2E2E202D204C6F616420496E74656C2D4865782066696C65207265636F7264 +0643 0326 0D 0A .BYTE $0D,$0A +0644 0328 476E6E6E6E20 .TEXT "Gnnnn - Run loc nnnn" +0644 032E 2020202D2052756E206C6F63206E6E6E6E +0645 033F 0D 0A .BYTE $0D,$0A +0646 0341 00 .BYTE $00 +0647 0342 +0648 0342 M_BASTXT +0649 0342 0D 0A .BYTE $0D,$0A +0650 0344 436F6C64206F .TEXT "Cold or warm?" +0650 034A 72207761726D3F +0651 0351 0D 0A 00 .BYTE $0D,$0A,$00 +0652 0354 +0653 0354 436865636B73CKSUMERR .BYTE "Checksum error" +0653 035A 756D206572726F72 +0654 0362 0D 0A 00 .BYTE $0D,$0A,$00 +0655 0365 +0656 0365 INITTXT +0657 0365 0C .BYTE $0C +0658 0366 507265737320 .TEXT "Press [SPACE] to activate console" +0658 036C 5B53504143455D20746F20616374697661746520636F6E736F6C65 +0659 0387 0D 0A 00 .BYTE $0D,$0A, $00 +0660 038A +0661 038A LDETXT +0662 038A 436F6D706C65 .TEXT "Complete" +0662 0390 7465 +0663 0392 0D 0A 00 .BYTE $0D,$0A, $00 +0664 0395 +0665 0395 ;=========================================================================================================================== +0666 0395 +0667 0395 ; NASCOM ROM BASIC Ver 4.7, (C) 1978 Microsoft +0668 0395 ; Scanned from source published in 80-BUS NEWS from Vol 2, Issue 3 +0669 0395 ; (May-June 1983) to Vol 3, Issue 3 (May-June 1984) +0670 0395 ; Adapted for the freeware Zilog Macro Assembler 2.10 to produce +0671 0395 ; the original ROM code (checksum A934H). PA +0672 0395 +0673 0395 ; GENERAL EQUATES +0674 0395 +0675 0395 CTRLC .EQU 03H ; Control "C" +0676 0395 CTRLG .EQU 07H ; Control "G" +0677 0395 BKSP .EQU 08H ; Back space +0678 0395 LF .EQU 0AH ; Line feed +0679 0395 CS .EQU 0CH ; Clear screen +0680 0395 CR .EQU 0DH ; Carriage return +0681 0395 CTRLO .EQU 0FH ; Control "O" +0682 0395 CTRLQ .EQU 11H ; Control "Q" +0683 0395 CTRLR .EQU 12H ; Control "R" +0684 0395 CTRLS .EQU 13H ; Control "S" +0685 0395 CTRLU .EQU 15H ; Control "U" +0686 0395 ESC .EQU 1BH ; Escape +0687 0395 DEL .EQU 7FH ; Delete +0688 0395 +0689 0395 ; BASIC WORK SPACE LOCATIONS +0690 0395 +0691 0395 WRKSPC .EQU 30B0H ; BASIC Work space +0692 0395 USR .EQU WRKSPC+3H ; "USR (x)" jump +0693 0395 OUTSUB .EQU WRKSPC+6H ; "OUT p,n" +0694 0395 OTPORT .EQU WRKSPC+7H ; Port (p) +0695 0395 DIVSUP .EQU WRKSPC+9H ; Division support routine +0696 0395 DIV1 .EQU WRKSPC+0AH ; <- Values +0697 0395 DIV2 .EQU WRKSPC+0EH ; <- to +0698 0395 DIV3 .EQU WRKSPC+12H ; <- be +0699 0395 DIV4 .EQU WRKSPC+15H ; <-inserted +0700 0395 SEED .EQU WRKSPC+17H ; Random number seed +0701 0395 LSTRND .EQU WRKSPC+3AH ; Last random number +0702 0395 INPSUB .EQU WRKSPC+3EH ; #INP (x)" Routine +0703 0395 INPORT .EQU WRKSPC+3FH ; PORT (x) +0704 0395 NULLS .EQU WRKSPC+41H ; Number of nulls +0705 0395 LWIDTH .EQU WRKSPC+42H ; Terminal width +0706 0395 COMMAN .EQU WRKSPC+43H ; Width for commas +0707 0395 NULFLG .EQU WRKSPC+44H ; Null after input byte flag +0708 0395 CTLOFG .EQU WRKSPC+45H ; Control "O" flag +0709 0395 LINESC .EQU WRKSPC+46H ; Lines counter +0710 0395 LINESN .EQU WRKSPC+48H ; Lines number +0711 0395 CHKSUM .EQU WRKSPC+4AH ; Array load/save check sum +0712 0395 NMIFLG .EQU WRKSPC+4CH ; Flag for NMI break routine +0713 0395 BRKFLG .EQU WRKSPC+4DH ; Break flag +0714 0395 RINPUT .EQU WRKSPC+4EH ; Input reflection +0715 0395 POINT .EQU WRKSPC+51H ; "POINT" reflection (unused) +0716 0395 PSET .EQU WRKSPC+54H ; "SET" reflection +0717 0395 RESET .EQU WRKSPC+57H ; "RESET" reflection +0718 0395 STRSPC .EQU WRKSPC+5AH ; Bottom of string space +0719 0395 LINEAT .EQU WRKSPC+5CH ; Current line number +0720 0395 BASTXT .EQU WRKSPC+5EH ; Pointer to start of program +0721 0395 BUFFER .EQU WRKSPC+61H ; Input buffer +0722 0395 STACK .EQU WRKSPC+66H ; Initial stack +0723 0395 CURPOS .EQU WRKSPC+0ABH ; Character position on line +0724 0395 LCRFLG .EQU WRKSPC+0ACH ; Locate/Create flag +0725 0395 TYPE .EQU WRKSPC+0ADH ; Data type flag +0726 0395 DATFLG .EQU WRKSPC+0AEH ; Literal statement flag +0727 0395 LSTRAM .EQU WRKSPC+0AFH ; Last available RAM +0728 0395 TMSTPT .EQU WRKSPC+0B1H ; Temporary string pointer +0729 0395 TMSTPL .EQU WRKSPC+0B3H ; Temporary string pool +0730 0395 TMPSTR .EQU WRKSPC+0BFH ; Temporary string +0731 0395 STRBOT .EQU WRKSPC+0C3H ; Bottom of string space +0732 0395 CUROPR .EQU WRKSPC+0C5H ; Current operator in EVAL +0733 0395 LOOPST .EQU WRKSPC+0C7H ; First statement of loop +0734 0395 DATLIN .EQU WRKSPC+0C9H ; Line of current DATA item +0735 0395 FORFLG .EQU WRKSPC+0CBH ; "FOR" loop flag +0736 0395 LSTBIN .EQU WRKSPC+0CCH ; Last byte entered +0737 0395 READFG .EQU WRKSPC+0CDH ; Read/Input flag +0738 0395 BRKLIN .EQU WRKSPC+0CEH ; Line of break +0739 0395 NXTOPR .EQU WRKSPC+0D0H ; Next operator in EVAL +0740 0395 ERRLIN .EQU WRKSPC+0D2H ; Line of error +0741 0395 CONTAD .EQU WRKSPC+0D4H ; Where to CONTinue +0742 0395 PROGND .EQU WRKSPC+0D6H ; End of program +0743 0395 VAREND .EQU WRKSPC+0D8H ; End of variables +0744 0395 ARREND .EQU WRKSPC+0DAH ; End of arrays +0745 0395 NXTDAT .EQU WRKSPC+0DCH ; Next data item +0746 0395 FNRGNM .EQU WRKSPC+0DEH ; Name of FN argument +0747 0395 FNARG .EQU WRKSPC+0E0H ; FN argument value +0748 0395 FPREG .EQU WRKSPC+0E4H ; Floating point register +0749 0395 FPEXP .EQU FPREG+3 ; Floating point exponent +0750 0395 SGNRES .EQU WRKSPC+0E8H ; Sign of result +0751 0395 PBUFF .EQU WRKSPC+0E9H ; Number print buffer +0752 0395 MULVAL .EQU WRKSPC+0F6H ; Multiplier +0753 0395 PROGST .EQU WRKSPC+0F9H ; Start of program text area +0754 0395 STLOOK .EQU WRKSPC+15DH ; Start of memory test +0755 0395 +0756 0395 ; BASIC ERROR CODE VALUES +0757 0395 +0758 0395 NF .EQU 00H ; NEXT without FOR +0759 0395 SN .EQU 02H ; Syntax error +0760 0395 RG .EQU 04H ; RETURN without GOSUB +0761 0395 OD .EQU 06H ; Out of DATA +0762 0395 FC .EQU 08H ; Function call error +0763 0395 OV .EQU 0AH ; Overflow +0764 0395 OM .EQU 0CH ; Out of memory +0765 0395 UL .EQU 0EH ; Undefined line number +0766 0395 BS .EQU 10H ; Bad subscript +0767 0395 DD .EQU 12H ; Re-DIMensioned array +0768 0395 DZ .EQU 14H ; Division by zero (/0) +0769 0395 ID .EQU 16H ; Illegal direct +0770 0395 TM .EQU 18H ; Type miss-match +0771 0395 OS .EQU 1AH ; Out of string space +0772 0395 LS .EQU 1CH ; String too long +0773 0395 ST .EQU 1EH ; String formula too complex +0774 0395 CN .EQU 20H ; Can't CONTinue +0775 0395 UF .EQU 22H ; UnDEFined FN function +0776 0395 MO .EQU 24H ; Missing operand +0777 0395 HX .EQU 26H ; HEX error +0778 0395 BN .EQU 28H ; BIN error +0779 0395 +0780 0395 ; .ORG 00396H +0781 0395 +0782 0395 C3 9B 03 COLD: JP STARTB ; Jump for cold start +0783 0398 C3 39 04 WARM: JP WARMST ; Jump for warm start +0784 039B STARTB: +0785 039B DD 21 00 00 LD IX,0 ; Flag cold start +0786 039F C3 A6 03 JP CSTART ; Jump to initialise +0787 03A2 +0788 03A2 4C 0C .WORD DEINT ; Get integer -32768 to 32767 +0789 03A4 C2 13 .WORD ABPASS ; Return integer in AB +0790 03A6 +0791 03A6 +0792 03A6 21 B0 30 CSTART: LD HL,WRKSPC ; Start of workspace RAM +0793 03A9 F9 LD SP,HL ; Set up a temporary stack +0794 03AA C3 E1 1F JP INITST ; Go to initialise +0795 03AD +0796 03AD 11 73 06 INIT: LD DE,INITAB ; Initialise workspace +0797 03B0 06 63 LD B,INITBE-INITAB+3; Bytes to copy +0798 03B2 21 B0 30 LD HL,WRKSPC ; Into workspace RAM +0799 03B5 1A COPY: LD A,(DE) ; Get source +0800 03B6 77 LD (HL),A ; To destination +0801 03B7 23 INC HL ; Next destination +0802 03B8 13 INC DE ; Next source +0803 03B9 05 DEC B ; Count bytes +0804 03BA C2 B5 03 JP NZ,COPY ; More to move +0805 03BD F9 LD SP,HL ; Temporary stack +0806 03BE CD 74 08 CALL CLREG ; Clear registers and stack +0807 03C1 CD 42 0E CALL PRNTCRLF ; Output CRLF +0808 03C4 32 5A 31 LD (BUFFER+72+1),A ; Mark end of buffer +0809 03C7 32 A9 31 LD (PROGST),A ; Initialise program area +0810 03CA 21 88 04 MSIZE: LD HL,MEMMSG ; Point to message +0811 03CD CD E0 14 CALL PRS ; Output "Memory size" +0812 03D0 CD 91 08 CALL PROMPT ; Get input with '?' +0813 03D3 CD 9A 0B CALL GETCHR ; Get next character +0814 03D6 B7 OR A ; Set flags +0815 03D7 C2 EF 03 JP NZ,TSTMEM ; If number - Test if RAM there +0816 03DA 21 0D 32 LD HL,STLOOK ; Point to start of RAM +0817 03DD 23 MLOOP: INC HL ; Next byte +0818 03DE 7C LD A,H ; Above address FFFF ? +0819 03DF B5 OR L +0820 03E0 CA 01 04 JP Z,SETTOP ; Yes - 64K RAM +0821 03E3 7E LD A,(HL) ; Get contents +0822 03E4 47 LD B,A ; Save it +0823 03E5 2F CPL ; Flip all bits +0824 03E6 77 LD (HL),A ; Put it back +0825 03E7 BE CP (HL) ; RAM there if same +0826 03E8 70 LD (HL),B ; Restore old contents +0827 03E9 CA DD 03 JP Z,MLOOP ; If RAM - test next byte +0828 03EC C3 01 04 JP SETTOP ; Top of RAM found +0829 03EF +0830 03EF CD 66 0C TSTMEM: CALL ATOH ; Get high memory into DE +0831 03F2 B7 OR A ; Set flags on last byte +0832 03F3 C2 42 07 JP NZ,SNERR ; ?SN Error if bad character +0833 03F6 EB EX DE,HL ; Address into HL +0834 03F7 2B DEC HL ; Back one byte +0835 03F8 3E D9 LD A,11011001B ; Test byte +0836 03FA 46 LD B,(HL) ; Get old contents +0837 03FB 77 LD (HL),A ; Load test byte +0838 03FC BE CP (HL) ; RAM there if same +0839 03FD 70 LD (HL),B ; Restore old contents +0840 03FE C2 CA 03 JP NZ,MSIZE ; Ask again if no RAM +0841 0401 +0842 0401 2B SETTOP: DEC HL ; Back one byte +0843 0402 11 0C 32 LD DE,STLOOK-1 ; See if enough RAM +0844 0405 CD 0A 0A CALL CPDEHL ; Compare DE with HL +0845 0408 DA CA 03 JP C,MSIZE ; Ask again if not enough RAM +0846 040B 11 CE FF LD DE,0-50 ; 50 Bytes string space +0847 040E 22 5F 31 LD (LSTRAM),HL ; Save last available RAM +0848 0411 19 ADD HL,DE ; Allocate string space +0849 0412 22 0A 31 LD (STRSPC),HL ; Save string space +0850 0415 CD 4F 08 CALL CLRPTR ; Clear program area +0851 0418 2A 0A 31 LD HL,(STRSPC) ; Get end of memory +0852 041B 11 EF FF LD DE,0-17 ; Offset for free bytes +0853 041E 19 ADD HL,DE ; Adjust HL +0854 041F 11 A9 31 LD DE,PROGST ; Start of program text +0855 0422 7D LD A,L ; Get LSB +0856 0423 93 SUB E ; Adjust it +0857 0424 6F LD L,A ; Re-save +0858 0425 7C LD A,H ; Get MSB +0859 0426 9A SBC A,D ; Adjust it +0860 0427 67 LD H,A ; Re-save +0861 0428 E5 PUSH HL ; Save bytes free +0862 0429 21 51 04 LD HL,SIGNON ; Sign-on message +0863 042C CD E0 14 CALL PRS ; Output string +0864 042F E1 POP HL ; Get bytes free back +0865 0430 CD 83 1B CALL PRNTHL ; Output amount of free memory +0866 0433 21 42 04 LD HL,BFREE ; " Bytes free" message +0867 0436 CD E0 14 CALL PRS ; Output string +0868 0439 +0869 0439 31 16 31 WARMST: LD SP,STACK ; Temporary stack +0870 043C CD 74 08 BRKRET: CALL CLREG ; Clear registers and stack +0871 043F C3 8D 07 JP PRNTOK ; Go to get command line +0872 0442 +0873 0442 204279746573BFREE: .BYTE " Bytes free",CR,LF,0,0 +0873 0448 20667265650D0A0000 +0874 0451 +0875 0451 5A3830204241SIGNON: .BYTE "Z80 BASIC Ver 4.7b",CR,LF +0875 0457 5349432056657220342E37620D0A +0876 0465 436F70797269 .BYTE "Copyright ",40,"C",41 +0876 046B 67687420284329 +0877 0472 203139373820 .BYTE " 1978 by Microsoft",CR,LF,0,0 +0877 0478 6279204D6963726F736F66740D0A0000 +0878 0488 +0879 0488 4D656D6F7279MEMMSG: .BYTE "Memory top",0 +0879 048E 20746F7000 +0880 0493 +0881 0493 ; FUNCTION ADDRESS TABLE +0882 0493 +0883 0493 F8 19 FNCTAB: .WORD SGN +0884 0495 BC 1A .WORD INT +0885 0497 0E 1A .WORD ABS +0886 0499 B3 30 .WORD USR +0887 049B A0 13 .WORD FRE +0888 049D 25 17 .WORD INP +0889 049F CE 13 .WORD POS +0890 04A1 82 1C .WORD SQR +0891 04A3 61 1D .WORD RND +0892 04A5 9D 18 .WORD LOG +0893 04A7 D0 1C .WORD EXP +0894 04A9 D6 1D .WORD COS +0895 04AB DC 1D .WORD SIN +0896 04AD 3D 1E .WORD TAN +0897 04AF 52 1E .WORD ATN +0898 04B1 79 17 .WORD PEEK +0899 04B3 BD 1E .WORD DEEK +0900 04B5 01 31 .WORD POINT +0901 04B7 52 16 .WORD LEN +0902 04B9 6A 14 .WORD STR +0903 04BB EC 16 .WORD VAL +0904 04BD 61 16 .WORD ASC +0905 04BF 72 16 .WORD CHR +0906 04C1 DF 1E .WORD HEX +0907 04C3 72 1F .WORD BIN +0908 04C5 82 16 .WORD LEFT +0909 04C7 B2 16 .WORD RIGHT +0910 04C9 BC 16 .WORD MID +0911 04CB +0912 04CB ; RESERVED WORD LIST +0913 04CB +0914 04CB C5 4E 44 WORDS: .BYTE 'E'+80H,"ND" +0915 04CE C6 4F 52 .BYTE 'F'+80H,"OR" +0916 04D1 CE 45 58 54 .BYTE 'N'+80H,"EXT" +0917 04D5 C4 41 54 41 .BYTE 'D'+80H,"ATA" +0918 04D9 C94E505554 .BYTE 'I'+80H,"NPUT" +0919 04DE C4 49 4D .BYTE 'D'+80H,"IM" +0920 04E1 D2 45 41 44 .BYTE 'R'+80H,"EAD" +0921 04E5 CC 45 54 .BYTE 'L'+80H,"ET" +0922 04E8 C7 4F 54 4F .BYTE 'G'+80H,"OTO" +0923 04EC D2 55 4E .BYTE 'R'+80H,"UN" +0924 04EF C9 46 .BYTE 'I'+80H,"F" +0925 04F1 D24553544F52 .BYTE 'R'+80H,"ESTORE" +0925 04F7 45 +0926 04F8 C74F535542 .BYTE 'G'+80H,"OSUB" +0927 04FD D2455455524E .BYTE 'R'+80H,"ETURN" +0928 0503 D2 45 4D .BYTE 'R'+80H,"EM" +0929 0506 D3 54 4F 50 .BYTE 'S'+80H,"TOP" +0930 050A CF 55 54 .BYTE 'O'+80H,"UT" +0931 050D CF 4E .BYTE 'O'+80H,"N" +0932 050F CE 55 4C 4C .BYTE 'N'+80H,"ULL" +0933 0513 D7 41 49 54 .BYTE 'W'+80H,"AIT" +0934 0517 C4 45 46 .BYTE 'D'+80H,"EF" +0935 051A D0 4F 4B 45 .BYTE 'P'+80H,"OKE" +0936 051E C4 4F 4B 45 .BYTE 'D'+80H,"OKE" +0937 0522 D3435245454E .BYTE 'S'+80H,"CREEN" +0938 0528 CC494E4553 .BYTE 'L'+80H,"INES" +0939 052D C3 4C 53 .BYTE 'C'+80H,"LS" +0940 0530 D749445448 .BYTE 'W'+80H,"IDTH" +0941 0535 CD4F4E49544F .BYTE 'M'+80H,"ONITOR" +0941 053B 52 +0942 053C D3 45 54 .BYTE 'S'+80H,"ET" +0943 053F D245534554 .BYTE 'R'+80H,"ESET" +0944 0544 D052494E54 .BYTE 'P'+80H,"RINT" +0945 0549 C3 4F 4E 54 .BYTE 'C'+80H,"ONT" +0946 054D CC 49 53 54 .BYTE 'L'+80H,"IST" +0947 0551 C34C454152 .BYTE 'C'+80H,"LEAR" +0948 0556 C34C4F4144 .BYTE 'C'+80H,"LOAD" +0949 055B C353415645 .BYTE 'C'+80H,"SAVE" +0950 0560 CE 45 57 .BYTE 'N'+80H,"EW" +0951 0563 +0952 0563 D4 41 42 28 .BYTE 'T'+80H,"AB(" +0953 0567 D4 4F .BYTE 'T'+80H,"O" +0954 0569 C6 4E .BYTE 'F'+80H,"N" +0955 056B D3 50 43 28 .BYTE 'S'+80H,"PC(" +0956 056F D4 48 45 4E .BYTE 'T'+80H,"HEN" +0957 0573 CE 4F 54 .BYTE 'N'+80H,"OT" +0958 0576 D3 54 45 50 .BYTE 'S'+80H,"TEP" +0959 057A +0960 057A AB .BYTE '+'+80H +0961 057B AD .BYTE '-'+80H +0962 057C AA .BYTE '*'+80H +0963 057D AF .BYTE '/'+80H +0964 057E DE .BYTE '^'+80H +0965 057F C1 4E 44 .BYTE 'A'+80H,"ND" +0966 0582 CF 52 .BYTE 'O'+80H,"R" +0967 0584 BE .BYTE '>'+80H +0968 0585 BD .BYTE '='+80H +0969 0586 BC .BYTE '<'+80H +0970 0587 +0971 0587 D3 47 4E .BYTE 'S'+80H,"GN" +0972 058A C9 4E 54 .BYTE 'I'+80H,"NT" +0973 058D C1 42 53 .BYTE 'A'+80H,"BS" +0974 0590 D5 53 52 .BYTE 'U'+80H,"SR" +0975 0593 C6 52 45 .BYTE 'F'+80H,"RE" +0976 0596 C9 4E 50 .BYTE 'I'+80H,"NP" +0977 0599 D0 4F 53 .BYTE 'P'+80H,"OS" +0978 059C D3 51 52 .BYTE 'S'+80H,"QR" +0979 059F D2 4E 44 .BYTE 'R'+80H,"ND" +0980 05A2 CC 4F 47 .BYTE 'L'+80H,"OG" +0981 05A5 C5 58 50 .BYTE 'E'+80H,"XP" +0982 05A8 C3 4F 53 .BYTE 'C'+80H,"OS" +0983 05AB D3 49 4E .BYTE 'S'+80H,"IN" +0984 05AE D4 41 4E .BYTE 'T'+80H,"AN" +0985 05B1 C1 54 4E .BYTE 'A'+80H,"TN" +0986 05B4 D0 45 45 4B .BYTE 'P'+80H,"EEK" +0987 05B8 C4 45 45 4B .BYTE 'D'+80H,"EEK" +0988 05BC D04F494E54 .BYTE 'P'+80H,"OINT" +0989 05C1 CC 45 4E .BYTE 'L'+80H,"EN" +0990 05C4 D3 54 52 24 .BYTE 'S'+80H,"TR$" +0991 05C8 D6 41 4C .BYTE 'V'+80H,"AL" +0992 05CB C1 53 43 .BYTE 'A'+80H,"SC" +0993 05CE C3 48 52 24 .BYTE 'C'+80H,"HR$" +0994 05D2 C8 45 58 24 .BYTE 'H'+80H,"EX$" +0995 05D6 C2 49 4E 24 .BYTE 'B'+80H,"IN$" +0996 05DA CC45465424 .BYTE 'L'+80H,"EFT$" +0997 05DF D24947485424 .BYTE 'R'+80H,"IGHT$" +0998 05E5 CD 49 44 24 .BYTE 'M'+80H,"ID$" +0999 05E9 80 .BYTE 80H ; End of list marker +1000 05EA +1001 05EA ; KEYWORD ADDRESS TABLE +1002 05EA +1003 05EA E4 0B WORDTB: .WORD PEND +1004 05EC E1 0A .WORD FOR +1005 05EE BC 0F .WORD NEXT +1006 05F0 31 0D .WORD DATA +1007 05F2 C3 0E .WORD INPUT +1008 05F4 F8 11 .WORD DIM +1009 05F6 F2 0E .WORD READ +1010 05F8 48 0D .WORD LET +1011 05FA EE 0C .WORD GOTO +1012 05FC D1 0C .WORD RUN +1013 05FE C0 0D .WORD IF +1014 0600 AA 0B .WORD RESTOR +1015 0602 DD 0C .WORD GOSUB +1016 0604 0C 0D .WORD RETURN +1017 0606 33 0D .WORD REM +1018 0608 E2 0B .WORD STOP +1019 060A 31 17 .WORD POUT +1020 060C A2 0D .WORD ON +1021 060E 23 0C .WORD NULL +1022 0610 37 17 .WORD WAIT +1023 0612 D6 13 .WORD DEF +1024 0614 80 17 .WORD POKE +1025 0616 C8 1E .WORD DOKE +1026 0618 33 0D .WORD REM +1027 061A AE 1E .WORD LINES +1028 061C A1 1E .WORD CLS +1029 061E A6 1E .WORD WIDTH +1030 0620 DE 1F .WORD MONITR +1031 0622 04 31 .WORD PSET +1032 0624 07 31 .WORD RESET +1033 0626 E4 0D .WORD PRINT +1034 0628 10 0C .WORD CONT +1035 062A 56 0A .WORD LIST +1036 062C 8B 0C .WORD CLEAR +1037 062E 33 0D .WORD REM +1038 0630 33 0D .WORD REM +1039 0632 4E 08 .WORD NEW +1040 0634 +1041 0634 ; RESERVED WORD TOKEN VALUES +1042 0634 +1043 0634 ZEND .EQU 080H ; END +1044 0634 ZFOR .EQU 081H ; FOR +1045 0634 ZDATA .EQU 083H ; DATA +1046 0634 ZGOTO .EQU 088H ; GOTO +1047 0634 ZGOSUB .EQU 08CH ; GOSUB +1048 0634 ZREM .EQU 08EH ; REM +1049 0634 ZPRINT .EQU 09EH ; PRINT +1050 0634 ZNEW .EQU 0A4H ; NEW +1051 0634 +1052 0634 ZTAB .EQU 0A5H ; TAB +1053 0634 ZTO .EQU 0A6H ; TO +1054 0634 ZFN .EQU 0A7H ; FN +1055 0634 ZSPC .EQU 0A8H ; SPC +1056 0634 ZTHEN .EQU 0A9H ; THEN +1057 0634 ZNOT .EQU 0AAH ; NOT +1058 0634 ZSTEP .EQU 0ABH ; STEP +1059 0634 +1060 0634 ZPLUS .EQU 0ACH ; + +1061 0634 ZMINUS .EQU 0ADH ; - +1062 0634 ZTIMES .EQU 0AEH ; * +1063 0634 ZDIV .EQU 0AFH ; / +1064 0634 ZOR .EQU 0B2H ; OR +1065 0634 ZGTR .EQU 0B3H ; > +1066 0634 ZEQUAL .EQU 0B4H ; M +1067 0634 ZLTH .EQU 0B5H ; < +1068 0634 ZSGN .EQU 0B6H ; SGN +1069 0634 ZPOINT .EQU 0C7H ; POINT +1070 0634 ZLEFT .EQU 0CDH +2 ; LEFT$ +1071 0634 +1072 0634 ; ARITHMETIC PRECEDENCE TABLE +1073 0634 +1074 0634 79 PRITAB: .BYTE 79H ; Precedence value +1075 0635 6A 1B .WORD PADD ; FPREG = + FPREG +1076 0637 +1077 0637 79 .BYTE 79H ; Precedence value +1078 0638 9E 17 .WORD PSUB ; FPREG = - FPREG +1079 063A +1080 063A 7C .BYTE 7CH ; Precedence value +1081 063B DC 18 .WORD MULT ; PPREG = * FPREG +1082 063D +1083 063D 7C .BYTE 7CH ; Precedence value +1084 063E 3D 19 .WORD DIV ; FPREG = / FPREG +1085 0640 +1086 0640 7F .BYTE 7FH ; Precedence value +1087 0641 8B 1C .WORD POWER ; FPREG = ^ FPREG +1088 0643 +1089 0643 50 .BYTE 50H ; Precedence value +1090 0644 51 11 .WORD PAND ; FPREG = AND FPREG +1091 0646 +1092 0646 46 .BYTE 46H ; Precedence value +1093 0647 50 11 .WORD POR ; FPREG = OR FPREG +1094 0649 +1095 0649 ; BASIC ERROR CODE LIST +1096 0649 +1097 0649 4E 46 ERRORS: .BYTE "NF" ; NEXT without FOR +1098 064B 53 4E .BYTE "SN" ; Syntax error +1099 064D 52 47 .BYTE "RG" ; RETURN without GOSUB +1100 064F 4F 44 .BYTE "OD" ; Out of DATA +1101 0651 46 43 .BYTE "FC" ; Illegal function call +1102 0653 4F 56 .BYTE "OV" ; Overflow error +1103 0655 4F 4D .BYTE "OM" ; Out of memory +1104 0657 55 4C .BYTE "UL" ; Undefined line +1105 0659 42 53 .BYTE "BS" ; Bad subscript +1106 065B 44 44 .BYTE "DD" ; Re-DIMensioned array +1107 065D 2F 30 .BYTE "/0" ; Division by zero +1108 065F 49 44 .BYTE "ID" ; Illegal direct +1109 0661 54 4D .BYTE "TM" ; Type mis-match +1110 0663 4F 53 .BYTE "OS" ; Out of string space +1111 0665 4C 53 .BYTE "LS" ; String too long +1112 0667 53 54 .BYTE "ST" ; String formula too complex +1113 0669 43 4E .BYTE "CN" ; Can't CONTinue +1114 066B 55 46 .BYTE "UF" ; Undefined FN function +1115 066D 4D 4F .BYTE "MO" ; Missing operand +1116 066F 48 58 .BYTE "HX" ; HEX error +1117 0671 42 4E .BYTE "BN" ; BIN error +1118 0673 +1119 0673 ; INITIALISATION TABLE ------------------------------------------------------- +1120 0673 +1121 0673 C3 39 04 INITAB: JP WARMST ; Warm start jump +1122 0676 C3 61 0C JP FCERR ; "USR (X)" jump (Set to Error) +1123 0679 D3 00 OUT (0),A ; "OUT p,n" skeleton +1124 067B C9 RET +1125 067C D6 00 SUB 0 ; Division support routine +1126 067E 6F LD L,A +1127 067F 7C LD A,H +1128 0680 DE 00 SBC A,0 +1129 0682 67 LD H,A +1130 0683 78 LD A,B +1131 0684 DE 00 SBC A,0 +1132 0686 47 LD B,A +1133 0687 3E 00 LD A,0 +1134 0689 C9 RET +1135 068A 00 00 00 .BYTE 0,0,0 ; Random number seed table used by RND +1136 068D 35 4A CA 99 .BYTE 035H,04AH,0CAH,099H ;-2.65145E+07 +1137 0691 39 1C 76 98 .BYTE 039H,01CH,076H,098H ; 1.61291E+07 +1138 0695 22 95 B3 98 .BYTE 022H,095H,0B3H,098H ;-1.17691E+07 +1139 0699 0A DD 47 98 .BYTE 00AH,0DDH,047H,098H ; 1.30983E+07 +1140 069D 53 D1 99 99 .BYTE 053H,0D1H,099H,099H ;-2-01612E+07 +1141 06A1 0A 1A 9F 98 .BYTE 00AH,01AH,09FH,098H ;-1.04269E+07 +1142 06A5 65 BC CD 98 .BYTE 065H,0BCH,0CDH,098H ;-1.34831E+07 +1143 06A9 D6 77 3E 98 .BYTE 0D6H,077H,03EH,098H ; 1.24825E+07 +1144 06AD 52 C7 4F 80 .BYTE 052H,0C7H,04FH,080H ; Last random number +1145 06B1 DB 00 IN A,(0) ; INP (x) skeleton +1146 06B3 C9 RET +1147 06B4 01 .BYTE 1 ; POS (x) number (1) +1148 06B5 FF .BYTE 255 ; Terminal width (255 = no auto CRLF) +1149 06B6 1C .BYTE 28 ; Width for commas (3 columns) +1150 06B7 00 .BYTE 0 ; No nulls after input bytes +1151 06B8 00 .BYTE 0 ; Output enabled (^O off) +1152 06B9 14 00 .WORD 20 ; Initial lines counter +1153 06BB 14 00 .WORD 20 ; Initial lines number +1154 06BD 00 00 .WORD 0 ; Array load/save check sum +1155 06BF 00 .BYTE 0 ; Break not by NMI +1156 06C0 00 .BYTE 0 ; Break flag +1157 06C1 C3 87 09 JP TTYLIN ; Input reflection (set to TTY) +1158 06C4 C3 00 00 JP $0000 ; POINT reflection unused +1159 06C7 C3 00 00 JP $0000 ; SET reflection +1160 06CA C3 00 00 JP $0000 ; RESET reflection +1161 06CD 0D 32 .WORD STLOOK ; Temp string space +1162 06CF FE FF .WORD -2 ; Current line number (cold) +1163 06D1 AA 31 .WORD PROGST+1 ; Start of program text +1164 06D3 INITBE: +1165 06D3 +1166 06D3 ; END OF INITIALISATION TABLE --------------------------------------------------- +1167 06D3 +1168 06D3 204572726F72ERRMSG: .BYTE " Error",0 +1168 06D9 00 +1169 06DA 20696E2000 INMSG: .BYTE " in ",0 +1170 06DF ZERBYT .EQU $-1 ; A zero byte +1171 06DF 4F6B0D0A0000OKMSG: .BYTE "Ok",CR,LF,0,0 +1172 06E5 427265616B00BRKMSG: .BYTE "Break",0 +1173 06EB +1174 06EB 21 04 00 BAKSTK: LD HL,4 ; Look for "FOR" block with +1175 06EE 39 ADD HL,SP ; same index as specified +1176 06EF 7E LOKFOR: LD A,(HL) ; Get block ID +1177 06F0 23 INC HL ; Point to index address +1178 06F1 FE 81 CP ZFOR ; Is it a "FOR" token +1179 06F3 C0 RET NZ ; No - exit +1180 06F4 4E LD C,(HL) ; BC = Address of "FOR" index +1181 06F5 23 INC HL +1182 06F6 46 LD B,(HL) +1183 06F7 23 INC HL ; Point to sign of STEP +1184 06F8 E5 PUSH HL ; Save pointer to sign +1185 06F9 69 LD L,C ; HL = address of "FOR" index +1186 06FA 60 LD H,B +1187 06FB 7A LD A,D ; See if an index was specified +1188 06FC B3 OR E ; DE = 0 if no index specified +1189 06FD EB EX DE,HL ; Specified index into HL +1190 06FE CA 05 07 JP Z,INDFND ; Skip if no index given +1191 0701 EB EX DE,HL ; Index back into DE +1192 0702 CD 0A 0A CALL CPDEHL ; Compare index with one given +1193 0705 01 0D 00 INDFND: LD BC,16-3 ; Offset to next block +1194 0708 E1 POP HL ; Restore pointer to sign +1195 0709 C8 RET Z ; Return if block found +1196 070A 09 ADD HL,BC ; Point to next block +1197 070B C3 EF 06 JP LOKFOR ; Keep on looking +1198 070E +1199 070E CD 28 07 MOVUP: CALL ENFMEM ; See if enough memory +1200 0711 C5 MOVSTR: PUSH BC ; Save end of source +1201 0712 E3 EX (SP),HL ; Swap source and dest" end +1202 0713 C1 POP BC ; Get end of destination +1203 0714 CD 0A 0A MOVLP: CALL CPDEHL ; See if list moved +1204 0717 7E LD A,(HL) ; Get byte +1205 0718 02 LD (BC),A ; Move it +1206 0719 C8 RET Z ; Exit if all done +1207 071A 0B DEC BC ; Next byte to move to +1208 071B 2B DEC HL ; Next byte to move +1209 071C C3 14 07 JP MOVLP ; Loop until all bytes moved +1210 071F +1211 071F E5 CHKSTK: PUSH HL ; Save code string address +1212 0720 2A 8A 31 LD HL,(ARREND) ; Lowest free memory +1213 0723 06 00 LD B,0 ; BC = Number of levels to test +1214 0725 09 ADD HL,BC ; 2 Bytes for each level +1215 0726 09 ADD HL,BC +1216 0727 3E .BYTE 3EH ; Skip "PUSH HL" +1217 0728 E5 ENFMEM: PUSH HL ; Save code string address +1218 0729 3E D0 LD A,0D0H ;LOW -48 ; 48 Bytes minimum RAM +1219 072B 95 SUB L +1220 072C 6F LD L,A +1221 072D 3E FF LD A,0FFH; HIGH (-48) ; 48 Bytes minimum RAM +1222 072F 9C SBC A,H +1223 0730 DA 37 07 JP C,OMERR ; Not enough - ?OM Error +1224 0733 67 LD H,A +1225 0734 39 ADD HL,SP ; Test if stack is overflowed +1226 0735 E1 POP HL ; Restore code string address +1227 0736 D8 RET C ; Return if enough mmory +1228 0737 1E 0C OMERR: LD E,OM ; ?OM Error +1229 0739 C3 56 07 JP ERROR +1230 073C +1231 073C 2A 79 31 DATSNR: LD HL,(DATLIN) ; Get line of current DATA item +1232 073F 22 0C 31 LD (LINEAT),HL ; Save as current line +1233 0742 1E 02 SNERR: LD E,SN ; ?SN Error +1234 0744 01 .BYTE 01H ; Skip "LD E,DZ" +1235 0745 1E 14 DZERR: LD E,DZ ; ?/0 Error +1236 0747 01 .BYTE 01H ; Skip "LD E,NF" +1237 0748 1E 00 NFERR: LD E,NF ; ?NF Error +1238 074A 01 .BYTE 01H ; Skip "LD E,DD" +1239 074B 1E 12 DDERR: LD E,DD ; ?DD Error +1240 074D 01 .BYTE 01H ; Skip "LD E,UF" +1241 074E 1E 22 UFERR: LD E,UF ; ?UF Error +1242 0750 01 .BYTE 01H ; Skip "LD E,OV +1243 0751 1E 0A OVERR: LD E,OV ; ?OV Error +1244 0753 01 .BYTE 01H ; Skip "LD E,TM" +1245 0754 1E 18 TMERR: LD E,TM ; ?TM Error +1246 0756 +1247 0756 CD 74 08 ERROR: CALL CLREG ; Clear registers and stack +1248 0759 32 F5 30 LD (CTLOFG),A ; Enable output (A is 0) +1249 075C CD 35 0E CALL STTLIN ; Start new line +1250 075F 21 49 06 LD HL,ERRORS ; Point to error codes +1251 0762 57 LD D,A ; D = 0 (A is 0) +1252 0763 3E 3F LD A,'?' +1253 0765 CD 1B 0A CALL OUTC ; Output '?' +1254 0768 19 ADD HL,DE ; Offset to correct error code +1255 0769 7E LD A,(HL) ; First character +1256 076A CD 1B 0A CALL OUTC ; Output it +1257 076D CD 9A 0B CALL GETCHR ; Get next character +1258 0770 CD 1B 0A CALL OUTC ; Output it +1259 0773 21 D3 06 LD HL,ERRMSG ; "Error" message +1260 0776 CD E0 14 ERRIN: CALL PRS ; Output message +1261 0779 2A 0C 31 LD HL,(LINEAT) ; Get line of error +1262 077C 11 FE FF LD DE,-2 ; Cold start error if -2 +1263 077F CD 0A 0A CALL CPDEHL ; See if cold start error +1264 0782 CA A6 03 JP Z,CSTART ; Cold start error - Restart +1265 0785 7C LD A,H ; Was it a direct error? +1266 0786 A5 AND L ; Line = -1 if direct error +1267 0787 3C INC A +1268 0788 C4 7B 1B CALL NZ,LINEIN ; No - output line of error +1269 078B 3E .BYTE 3EH ; Skip "POP BC" +1270 078C C1 POPNOK: POP BC ; Drop address in input buffer +1271 078D +1272 078D AF PRNTOK: XOR A ; Output "Ok" and get command +1273 078E 32 F5 30 LD (CTLOFG),A ; Enable output +1274 0791 CD 35 0E CALL STTLIN ; Start new line +1275 0794 21 DF 06 LD HL,OKMSG ; "Ok" message +1276 0797 CD E0 14 CALL PRS ; Output "Ok" +1277 079A 21 FF FF GETCMD: LD HL,-1 ; Flag direct mode +1278 079D 22 0C 31 LD (LINEAT),HL ; Save as current line +1279 07A0 CD 87 09 CALL GETLIN ; Get an input line +1280 07A3 DA 9A 07 JP C,GETCMD ; Get line again if break +1281 07A6 CD 9A 0B CALL GETCHR ; Get first character +1282 07A9 3C INC A ; Test if end of line +1283 07AA 3D DEC A ; Without affecting Carry +1284 07AB CA 9A 07 JP Z,GETCMD ; Nothing entered - Get another +1285 07AE F5 PUSH AF ; Save Carry status +1286 07AF CD 66 0C CALL ATOH ; Get line number into DE +1287 07B2 D5 PUSH DE ; Save line number +1288 07B3 CD 9E 08 CALL CRUNCH ; Tokenise rest of line +1289 07B6 47 LD B,A ; Length of tokenised line +1290 07B7 D1 POP DE ; Restore line number +1291 07B8 F1 POP AF ; Restore Carry +1292 07B9 D2 7A 0B JP NC,EXCUTE ; No line number - Direct mode +1293 07BC D5 PUSH DE ; Save line number +1294 07BD C5 PUSH BC ; Save length of tokenised line +1295 07BE AF XOR A +1296 07BF 32 7C 31 LD (LSTBIN),A ; Clear last byte input +1297 07C2 CD 9A 0B CALL GETCHR ; Get next character +1298 07C5 B7 OR A ; Set flags +1299 07C6 F5 PUSH AF ; And save them +1300 07C7 CD 2E 08 CALL SRCHLN ; Search for line number in DE +1301 07CA DA D3 07 JP C,LINFND ; Jump if line found +1302 07CD F1 POP AF ; Get status +1303 07CE F5 PUSH AF ; And re-save +1304 07CF CA 07 0D JP Z,ULERR ; Nothing after number - Error +1305 07D2 B7 OR A ; Clear Carry +1306 07D3 C5 LINFND: PUSH BC ; Save address of line in prog +1307 07D4 D2 EA 07 JP NC,INEWLN ; Line not found - Insert new +1308 07D7 EB EX DE,HL ; Next line address in DE +1309 07D8 2A 86 31 LD HL,(PROGND) ; End of program +1310 07DB 1A SFTPRG: LD A,(DE) ; Shift rest of program down +1311 07DC 02 LD (BC),A +1312 07DD 03 INC BC ; Next destination +1313 07DE 13 INC DE ; Next source +1314 07DF CD 0A 0A CALL CPDEHL ; All done? +1315 07E2 C2 DB 07 JP NZ,SFTPRG ; More to do +1316 07E5 60 LD H,B ; HL - New end of program +1317 07E6 69 LD L,C +1318 07E7 22 86 31 LD (PROGND),HL ; Update end of program +1319 07EA +1320 07EA D1 INEWLN: POP DE ; Get address of line, +1321 07EB F1 POP AF ; Get status +1322 07EC CA 11 08 JP Z,SETPTR ; No text - Set up pointers +1323 07EF 2A 86 31 LD HL,(PROGND) ; Get end of program +1324 07F2 E3 EX (SP),HL ; Get length of input line +1325 07F3 C1 POP BC ; End of program to BC +1326 07F4 09 ADD HL,BC ; Find new end +1327 07F5 E5 PUSH HL ; Save new end +1328 07F6 CD 0E 07 CALL MOVUP ; Make space for line +1329 07F9 E1 POP HL ; Restore new end +1330 07FA 22 86 31 LD (PROGND),HL ; Update end of program pointer +1331 07FD EB EX DE,HL ; Get line to move up in HL +1332 07FE 74 LD (HL),H ; Save MSB +1333 07FF D1 POP DE ; Get new line number +1334 0800 23 INC HL ; Skip pointer +1335 0801 23 INC HL +1336 0802 73 LD (HL),E ; Save LSB of line number +1337 0803 23 INC HL +1338 0804 72 LD (HL),D ; Save MSB of line number +1339 0805 23 INC HL ; To first byte in line +1340 0806 11 11 31 LD DE,BUFFER ; Copy buffer to program +1341 0809 1A MOVBUF: LD A,(DE) ; Get source +1342 080A 77 LD (HL),A ; Save destinations +1343 080B 23 INC HL ; Next source +1344 080C 13 INC DE ; Next destination +1345 080D B7 OR A ; Done? +1346 080E C2 09 08 JP NZ,MOVBUF ; No - Repeat +1347 0811 CD 5A 08 SETPTR: CALL RUNFST ; Set line pointers +1348 0814 23 INC HL ; To LSB of pointer +1349 0815 EB EX DE,HL ; Address to DE +1350 0816 62 PTRLP: LD H,D ; Address to HL +1351 0817 6B LD L,E +1352 0818 7E LD A,(HL) ; Get LSB of pointer +1353 0819 23 INC HL ; To MSB of pointer +1354 081A B6 OR (HL) ; Compare with MSB pointer +1355 081B CA 9A 07 JP Z,GETCMD ; Get command line if end +1356 081E 23 INC HL ; To LSB of line number +1357 081F 23 INC HL ; Skip line number +1358 0820 23 INC HL ; Point to first byte in line +1359 0821 AF XOR A ; Looking for 00 byte +1360 0822 BE FNDEND: CP (HL) ; Found end of line? +1361 0823 23 INC HL ; Move to next byte +1362 0824 C2 22 08 JP NZ,FNDEND ; No - Keep looking +1363 0827 EB EX DE,HL ; Next line address to HL +1364 0828 73 LD (HL),E ; Save LSB of pointer +1365 0829 23 INC HL +1366 082A 72 LD (HL),D ; Save MSB of pointer +1367 082B C3 16 08 JP PTRLP ; Do next line +1368 082E +1369 082E 2A 0E 31 SRCHLN: LD HL,(BASTXT) ; Start of program text +1370 0831 44 SRCHLP: LD B,H ; BC = Address to look at +1371 0832 4D LD C,L +1372 0833 7E LD A,(HL) ; Get address of next line +1373 0834 23 INC HL +1374 0835 B6 OR (HL) ; End of program found? +1375 0836 2B DEC HL +1376 0837 C8 RET Z ; Yes - Line not found +1377 0838 23 INC HL +1378 0839 23 INC HL +1379 083A 7E LD A,(HL) ; Get LSB of line number +1380 083B 23 INC HL +1381 083C 66 LD H,(HL) ; Get MSB of line number +1382 083D 6F LD L,A +1383 083E CD 0A 0A CALL CPDEHL ; Compare with line in DE +1384 0841 60 LD H,B ; HL = Start of this line +1385 0842 69 LD L,C +1386 0843 7E LD A,(HL) ; Get LSB of next line address +1387 0844 23 INC HL +1388 0845 66 LD H,(HL) ; Get MSB of next line address +1389 0846 6F LD L,A ; Next line to HL +1390 0847 3F CCF +1391 0848 C8 RET Z ; Lines found - Exit +1392 0849 3F CCF +1393 084A D0 RET NC ; Line not found,at line after +1394 084B C3 31 08 JP SRCHLP ; Keep looking +1395 084E +1396 084E C0 NEW: RET NZ ; Return if any more on line +1397 084F 2A 0E 31 CLRPTR: LD HL,(BASTXT) ; Point to start of program +1398 0852 AF XOR A ; Set program area to empty +1399 0853 77 LD (HL),A ; Save LSB = 00 +1400 0854 23 INC HL +1401 0855 77 LD (HL),A ; Save MSB = 00 +1402 0856 23 INC HL +1403 0857 22 86 31 LD (PROGND),HL ; Set program end +1404 085A +1405 085A 2A 0E 31 RUNFST: LD HL,(BASTXT) ; Clear all variables +1406 085D 2B DEC HL +1407 085E +1408 085E 22 7E 31 INTVAR: LD (BRKLIN),HL ; Initialise RUN variables +1409 0861 2A 5F 31 LD HL,(LSTRAM) ; Get end of RAM +1410 0864 22 73 31 LD (STRBOT),HL ; Clear string space +1411 0867 AF XOR A +1412 0868 CD AA 0B CALL RESTOR ; Reset DATA pointers +1413 086B 2A 86 31 LD HL,(PROGND) ; Get end of program +1414 086E 22 88 31 LD (VAREND),HL ; Clear variables +1415 0871 22 8A 31 LD (ARREND),HL ; Clear arrays +1416 0874 +1417 0874 C1 CLREG: POP BC ; Save return address +1418 0875 2A 0A 31 LD HL,(STRSPC) ; Get end of working RAN +1419 0878 F9 LD SP,HL ; Set stack +1420 0879 21 63 31 LD HL,TMSTPL ; Temporary string pool +1421 087C 22 61 31 LD (TMSTPT),HL ; Reset temporary string ptr +1422 087F AF XOR A ; A = 00 +1423 0880 6F LD L,A ; HL = 0000 +1424 0881 67 LD H,A +1425 0882 22 84 31 LD (CONTAD),HL ; No CONTinue +1426 0885 32 7B 31 LD (FORFLG),A ; Clear FOR flag +1427 0888 22 8E 31 LD (FNRGNM),HL ; Clear FN argument +1428 088B E5 PUSH HL ; HL = 0000 +1429 088C C5 PUSH BC ; Put back return +1430 088D 2A 7E 31 DOAGN: LD HL,(BRKLIN) ; Get address of code to RUN +1431 0890 C9 RET ; Return to execution driver +1432 0891 +1433 0891 3E 3F PROMPT: LD A,'?' ; '?' +1434 0893 CD 1B 0A CALL OUTC ; Output character +1435 0896 3E 20 LD A,' ' ; Space +1436 0898 CD 1B 0A CALL OUTC ; Output character +1437 089B C3 FE 30 JP RINPUT ; Get input line +1438 089E +1439 089E AF CRUNCH: XOR A ; Tokenise line @ HL to BUFFER +1440 089F 32 5E 31 LD (DATFLG),A ; Reset literal flag +1441 08A2 0E 05 LD C,2+3 ; 2 byte number and 3 nulls +1442 08A4 11 11 31 LD DE,BUFFER ; Start of input buffer +1443 08A7 7E CRNCLP: LD A,(HL) ; Get byte +1444 08A8 FE 20 CP ' ' ; Is it a space? +1445 08AA CA 26 09 JP Z,MOVDIR ; Yes - Copy direct +1446 08AD 47 LD B,A ; Save character +1447 08AE FE 22 CP '"' ; Is it a quote? +1448 08B0 CA 46 09 JP Z,CPYLIT ; Yes - Copy literal string +1449 08B3 B7 OR A ; Is it end of buffer? +1450 08B4 CA 4D 09 JP Z,ENDBUF ; Yes - End buffer +1451 08B7 3A 5E 31 LD A,(DATFLG) ; Get data type +1452 08BA B7 OR A ; Literal? +1453 08BB 7E LD A,(HL) ; Get byte to copy +1454 08BC C2 26 09 JP NZ,MOVDIR ; Literal - Copy direct +1455 08BF FE 3F CP '?' ; Is it '?' short for PRINT +1456 08C1 3E 9E LD A,ZPRINT ; "PRINT" token +1457 08C3 CA 26 09 JP Z,MOVDIR ; Yes - replace it +1458 08C6 7E LD A,(HL) ; Get byte again +1459 08C7 FE 30 CP '0' ; Is it less than '0' +1460 08C9 DA D1 08 JP C,FNDWRD ; Yes - Look for reserved words +1461 08CC FE 3C CP 60; ";"+1 ; Is it "0123456789:;" ? +1462 08CE DA 26 09 JP C,MOVDIR ; Yes - copy it direct +1463 08D1 D5 FNDWRD: PUSH DE ; Look for reserved words +1464 08D2 11 CA 04 LD DE,WORDS-1 ; Point to table +1465 08D5 C5 PUSH BC ; Save count +1466 08D6 01 22 09 LD BC,RETNAD ; Where to return to +1467 08D9 C5 PUSH BC ; Save return address +1468 08DA 06 7F LD B,ZEND-1 ; First token value -1 +1469 08DC 7E LD A,(HL) ; Get byte +1470 08DD FE 61 CP 'a' ; Less than 'a' ? +1471 08DF DA EA 08 JP C,SEARCH ; Yes - search for words +1472 08E2 FE 7B CP 'z'+1 ; Greater than 'z' ? +1473 08E4 D2 EA 08 JP NC,SEARCH ; Yes - search for words +1474 08E7 E6 5F AND 01011111B ; Force upper case +1475 08E9 77 LD (HL),A ; Replace byte +1476 08EA 4E SEARCH: LD C,(HL) ; Search for a word +1477 08EB EB EX DE,HL +1478 08EC 23 GETNXT: INC HL ; Get next reserved word +1479 08ED B6 OR (HL) ; Start of word? +1480 08EE F2 EC 08 JP P,GETNXT ; No - move on +1481 08F1 04 INC B ; Increment token value +1482 08F2 7E LD A, (HL) ; Get byte from table +1483 08F3 E6 7F AND 01111111B ; Strip bit 7 +1484 08F5 C8 RET Z ; Return if end of list +1485 08F6 B9 CP C ; Same character as in buffer? +1486 08F7 C2 EC 08 JP NZ,GETNXT ; No - get next word +1487 08FA EB EX DE,HL +1488 08FB E5 PUSH HL ; Save start of word +1489 08FC +1490 08FC 13 NXTBYT: INC DE ; Look through rest of word +1491 08FD 1A LD A,(DE) ; Get byte from table +1492 08FE B7 OR A ; End of word ? +1493 08FF FA 1E 09 JP M,MATCH ; Yes - Match found +1494 0902 4F LD C,A ; Save it +1495 0903 78 LD A,B ; Get token value +1496 0904 FE 88 CP ZGOTO ; Is it "GOTO" token ? +1497 0906 C2 0D 09 JP NZ,NOSPC ; No - Don't allow spaces +1498 0909 CD 9A 0B CALL GETCHR ; Get next character +1499 090C 2B DEC HL ; Cancel increment from GETCHR +1500 090D 23 NOSPC: INC HL ; Next byte +1501 090E 7E LD A,(HL) ; Get byte +1502 090F FE 61 CP 'a' ; Less than 'a' ? +1503 0911 DA 16 09 JP C,NOCHNG ; Yes - don't change +1504 0914 E6 5F AND 01011111B ; Make upper case +1505 0916 B9 NOCHNG: CP C ; Same as in buffer ? +1506 0917 CA FC 08 JP Z,NXTBYT ; Yes - keep testing +1507 091A E1 POP HL ; Get back start of word +1508 091B C3 EA 08 JP SEARCH ; Look at next word +1509 091E +1510 091E 48 MATCH: LD C,B ; Word found - Save token value +1511 091F F1 POP AF ; Throw away return +1512 0920 EB EX DE,HL +1513 0921 C9 RET ; Return to "RETNAD" +1514 0922 EB RETNAD: EX DE,HL ; Get address in string +1515 0923 79 LD A,C ; Get token value +1516 0924 C1 POP BC ; Restore buffer length +1517 0925 D1 POP DE ; Get destination address +1518 0926 23 MOVDIR: INC HL ; Next source in buffer +1519 0927 12 LD (DE),A ; Put byte in buffer +1520 0928 13 INC DE ; Move up buffer +1521 0929 0C INC C ; Increment length of buffer +1522 092A D6 3A SUB ':' ; End of statement? +1523 092C CA 34 09 JP Z,SETLIT ; Jump if multi-statement line +1524 092F FE 49 CP ZDATA-3AH ; Is it DATA statement ? +1525 0931 C2 37 09 JP NZ,TSTREM ; No - see if REM +1526 0934 32 5E 31 SETLIT: LD (DATFLG),A ; Set literal flag +1527 0937 D6 54 TSTREM: SUB ZREM-3AH ; Is it REM? +1528 0939 C2 A7 08 JP NZ,CRNCLP ; No - Leave flag +1529 093C 47 LD B,A ; Copy rest of buffer +1530 093D 7E NXTCHR: LD A,(HL) ; Get byte +1531 093E B7 OR A ; End of line ? +1532 093F CA 4D 09 JP Z,ENDBUF ; Yes - Terminate buffer +1533 0942 B8 CP B ; End of statement ? +1534 0943 CA 26 09 JP Z,MOVDIR ; Yes - Get next one +1535 0946 23 CPYLIT: INC HL ; Move up source string +1536 0947 12 LD (DE),A ; Save in destination +1537 0948 0C INC C ; Increment length +1538 0949 13 INC DE ; Move up destination +1539 094A C3 3D 09 JP NXTCHR ; Repeat +1540 094D +1541 094D 21 10 31 ENDBUF: LD HL,BUFFER-1 ; Point to start of buffer +1542 0950 12 LD (DE),A ; Mark end of buffer (A = 00) +1543 0951 13 INC DE +1544 0952 12 LD (DE),A ; A = 00 +1545 0953 13 INC DE +1546 0954 12 LD (DE),A ; A = 00 +1547 0955 C9 RET +1548 0956 +1549 0956 3A F4 30 DODEL: LD A,(NULFLG) ; Get null flag status +1550 0959 B7 OR A ; Is it zero? +1551 095A 3E 00 LD A,0 ; Zero A - Leave flags +1552 095C 32 F4 30 LD (NULFLG),A ; Zero null flag +1553 095F C2 6A 09 JP NZ,ECHDEL ; Set - Echo it +1554 0962 05 DEC B ; Decrement length +1555 0963 CA 87 09 JP Z,GETLIN ; Get line again if empty +1556 0966 CD 1B 0A CALL OUTC ; Output null character +1557 0969 3E .BYTE 3EH ; Skip "DEC B" +1558 096A 05 ECHDEL: DEC B ; Count bytes in buffer +1559 096B 2B DEC HL ; Back space buffer +1560 096C CA 7E 09 JP Z,OTKLN ; No buffer - Try again +1561 096F 7E LD A,(HL) ; Get deleted byte +1562 0970 CD 1B 0A CALL OUTC ; Echo it +1563 0973 C3 90 09 JP MORINP ; Get more input +1564 0976 +1565 0976 05 DELCHR: DEC B ; Count bytes in buffer +1566 0977 2B DEC HL ; Back space buffer +1567 0978 CD 1B 0A CALL OUTC ; Output character in A +1568 097B C2 90 09 JP NZ,MORINP ; Not end - Get more +1569 097E CD 1B 0A OTKLN: CALL OUTC ; Output character in A +1570 0981 CD 42 0E KILIN: CALL PRNTCRLF ; Output CRLF +1571 0984 C3 87 09 JP TTYLIN ; Get line again +1572 0987 +1573 0987 GETLIN: +1574 0987 21 11 31 TTYLIN: LD HL,BUFFER ; Get a line by character +1575 098A 06 01 LD B,1 ; Set buffer as empty +1576 098C AF XOR A +1577 098D 32 F4 30 LD (NULFLG),A ; Clear null flag +1578 0990 CD 45 0A MORINP: CALL CLOTST ; Get character and test ^O +1579 0993 4F LD C,A ; Save character in C +1580 0994 FE 7F CP DEL ; Delete character? +1581 0996 CA 56 09 JP Z,DODEL ; Yes - Process it +1582 0999 3A F4 30 LD A,(NULFLG) ; Get null flag +1583 099C B7 OR A ; Test null flag status +1584 099D CA A9 09 JP Z,PROCES ; Reset - Process character +1585 09A0 3E 00 LD A,0 ; Set a null +1586 09A2 CD 1B 0A CALL OUTC ; Output null +1587 09A5 AF XOR A ; Clear A +1588 09A6 32 F4 30 LD (NULFLG),A ; Reset null flag +1589 09A9 79 PROCES: LD A,C ; Get character +1590 09AA FE 07 CP CTRLG ; Bell? +1591 09AC CA ED 09 JP Z,PUTCTL ; Yes - Save it +1592 09AF FE 03 CP CTRLC ; Is it control "C"? +1593 09B1 CC 42 0E CALL Z,PRNTCRLF ; Yes - Output CRLF +1594 09B4 37 SCF ; Flag break +1595 09B5 C8 RET Z ; Return if control "C" +1596 09B6 FE 0D CP CR ; Is it enter? +1597 09B8 CA 3D 0E JP Z,ENDINP ; Yes - Terminate input +1598 09BB FE 15 CP CTRLU ; Is it control "U"? +1599 09BD CA 81 09 JP Z,KILIN ; Yes - Get another line +1600 09C0 FE 40 CP '@' ; Is it "kill line"? +1601 09C2 CA 7E 09 JP Z,OTKLN ; Yes - Kill line +1602 09C5 FE 5F CP '_' ; Is it delete? +1603 09C7 CA 76 09 JP Z,DELCHR ; Yes - Delete character +1604 09CA FE 08 CP BKSP ; Is it backspace? +1605 09CC CA 76 09 JP Z,DELCHR ; Yes - Delete character +1606 09CF FE 12 CP CTRLR ; Is it control "R"? +1607 09D1 C2 E8 09 JP NZ,PUTBUF ; No - Put in buffer +1608 09D4 C5 PUSH BC ; Save buffer length +1609 09D5 D5 PUSH DE ; Save DE +1610 09D6 E5 PUSH HL ; Save buffer address +1611 09D7 36 00 LD (HL),0 ; Mark end of buffer +1612 09D9 CD F2 1F CALL OUTNCR ; Output and do CRLF +1613 09DC 21 11 31 LD HL,BUFFER ; Point to buffer start +1614 09DF CD E0 14 CALL PRS ; Output buffer +1615 09E2 E1 POP HL ; Restore buffer address +1616 09E3 D1 POP DE ; Restore DE +1617 09E4 C1 POP BC ; Restore buffer length +1618 09E5 C3 90 09 JP MORINP ; Get another character +1619 09E8 +1620 09E8 FE 20 PUTBUF: CP ' ' ; Is it a control code? +1621 09EA DA 90 09 JP C,MORINP ; Yes - Ignore +1622 09ED 78 PUTCTL: LD A,B ; Get number of bytes in buffer +1623 09EE FE 49 CP 72+1 ; Test for line overflow +1624 09F0 3E 07 LD A,CTRLG ; Set a bell +1625 09F2 D2 02 0A JP NC,OUTNBS ; Ring bell if buffer full +1626 09F5 79 LD A,C ; Get character +1627 09F6 71 LD (HL),C ; Save in buffer +1628 09F7 32 7C 31 LD (LSTBIN),A ; Save last input byte +1629 09FA 23 INC HL ; Move up buffer +1630 09FB 04 INC B ; Increment length +1631 09FC CD 1B 0A OUTIT: CALL OUTC ; Output the character entered +1632 09FF C3 90 09 JP MORINP ; Get another character +1633 0A02 +1634 0A02 CD 1B 0A OUTNBS: CALL OUTC ; Output bell and back over it +1635 0A05 3E 08 LD A,BKSP ; Set back space +1636 0A07 C3 FC 09 JP OUTIT ; Output it and get more +1637 0A0A +1638 0A0A 7C CPDEHL: LD A,H ; Get H +1639 0A0B 92 SUB D ; Compare with D +1640 0A0C C0 RET NZ ; Different - Exit +1641 0A0D 7D LD A,L ; Get L +1642 0A0E 93 SUB E ; Compare with E +1643 0A0F C9 RET ; Return status +1644 0A10 +1645 0A10 7E CHKSYN: LD A,(HL) ; Check syntax of character +1646 0A11 E3 EX (SP),HL ; Address of test byte +1647 0A12 BE CP (HL) ; Same as in code string? +1648 0A13 23 INC HL ; Return address +1649 0A14 E3 EX (SP),HL ; Put it back +1650 0A15 CA 9A 0B JP Z,GETCHR ; Yes - Get next character +1651 0A18 C3 42 07 JP SNERR ; Different - ?SN Error +1652 0A1B +1653 0A1B F5 OUTC: PUSH AF ; Save character +1654 0A1C 3A F5 30 LD A,(CTLOFG) ; Get control "O" flag +1655 0A1F B7 OR A ; Is it set? +1656 0A20 C2 15 15 JP NZ,POPAF ; Yes - don't output +1657 0A23 F1 POP AF ; Restore character +1658 0A24 C5 PUSH BC ; Save buffer length +1659 0A25 F5 PUSH AF ; Save character +1660 0A26 FE 20 CP ' ' ; Is it a control code? +1661 0A28 DA 3F 0A JP C,DINPOS ; Yes - Don't INC POS(X) +1662 0A2B 3A F2 30 LD A,(LWIDTH) ; Get line width +1663 0A2E 47 LD B,A ; To B +1664 0A2F 3A 5B 31 LD A,(CURPOS) ; Get cursor position +1665 0A32 04 INC B ; Width 255? +1666 0A33 CA 3B 0A JP Z,INCLEN ; Yes - No width limit +1667 0A36 05 DEC B ; Restore width +1668 0A37 B8 CP B ; At end of line? +1669 0A38 CC 42 0E CALL Z,PRNTCRLF ; Yes - output CRLF +1670 0A3B 3C INCLEN: INC A ; Move on one character +1671 0A3C 32 5B 31 LD (CURPOS),A ; Save new position +1672 0A3F F1 DINPOS: POP AF ; Restore character +1673 0A40 C1 POP BC ; Restore buffer length +1674 0A41 CD DB 1F CALL MONOUT ; Send it +1675 0A44 C9 RET +1676 0A45 +1677 0A45 CD 9F 1E CLOTST: CALL GETINP ; Get input character +1678 0A48 E6 7F AND 01111111B ; Strip bit 7 +1679 0A4A FE 0F CP CTRLO ; Is it control "O"? +1680 0A4C C0 RET NZ ; No don't flip flag +1681 0A4D 3A F5 30 LD A,(CTLOFG) ; Get flag +1682 0A50 2F CPL ; Flip it +1683 0A51 32 F5 30 LD (CTLOFG),A ; Put it back +1684 0A54 AF XOR A ; Null character +1685 0A55 C9 RET +1686 0A56 +1687 0A56 CD 66 0C LIST: CALL ATOH ; ASCII number to DE +1688 0A59 C0 RET NZ ; Return if anything extra +1689 0A5A C1 POP BC ; Rubbish - Not needed +1690 0A5B CD 2E 08 CALL SRCHLN ; Search for line number in DE +1691 0A5E C5 PUSH BC ; Save address of line +1692 0A5F CD AC 0A CALL SETLIN ; Set up lines counter +1693 0A62 E1 LISTLP: POP HL ; Restore address of line +1694 0A63 4E LD C,(HL) ; Get LSB of next line +1695 0A64 23 INC HL +1696 0A65 46 LD B,(HL) ; Get MSB of next line +1697 0A66 23 INC HL +1698 0A67 78 LD A,B ; BC = 0 (End of program)? +1699 0A68 B1 OR C +1700 0A69 CA 8D 07 JP Z,PRNTOK ; Yes - Go to command mode +1701 0A6C CD B5 0A CALL COUNT ; Count lines +1702 0A6F CD C5 0B CALL TSTBRK ; Test for break key +1703 0A72 C5 PUSH BC ; Save address of next line +1704 0A73 CD 42 0E CALL PRNTCRLF ; Output CRLF +1705 0A76 5E LD E,(HL) ; Get LSB of line number +1706 0A77 23 INC HL +1707 0A78 56 LD D,(HL) ; Get MSB of line number +1708 0A79 23 INC HL +1709 0A7A E5 PUSH HL ; Save address of line start +1710 0A7B EB EX DE,HL ; Line number to HL +1711 0A7C CD 83 1B CALL PRNTHL ; Output line number in decimal +1712 0A7F 3E 20 LD A,' ' ; Space after line number +1713 0A81 E1 POP HL ; Restore start of line address +1714 0A82 CD 1B 0A LSTLP2: CALL OUTC ; Output character in A +1715 0A85 7E LSTLP3: LD A,(HL) ; Get next byte in line +1716 0A86 B7 OR A ; End of line? +1717 0A87 23 INC HL ; To next byte in line +1718 0A88 CA 62 0A JP Z,LISTLP ; Yes - get next line +1719 0A8B F2 82 0A JP P,LSTLP2 ; No token - output it +1720 0A8E D6 7F SUB ZEND-1 ; Find and output word +1721 0A90 4F LD C,A ; Token offset+1 to C +1722 0A91 11 CB 04 LD DE,WORDS ; Reserved word list +1723 0A94 1A FNDTOK: LD A,(DE) ; Get character in list +1724 0A95 13 INC DE ; Move on to next +1725 0A96 B7 OR A ; Is it start of word? +1726 0A97 F2 94 0A JP P,FNDTOK ; No - Keep looking for word +1727 0A9A 0D DEC C ; Count words +1728 0A9B C2 94 0A JP NZ,FNDTOK ; Not there - keep looking +1729 0A9E E6 7F OUTWRD: AND 01111111B ; Strip bit 7 +1730 0AA0 CD 1B 0A CALL OUTC ; Output first character +1731 0AA3 1A LD A,(DE) ; Get next character +1732 0AA4 13 INC DE ; Move on to next +1733 0AA5 B7 OR A ; Is it end of word? +1734 0AA6 F2 9E 0A JP P,OUTWRD ; No - output the rest +1735 0AA9 C3 85 0A JP LSTLP3 ; Next byte in line +1736 0AAC +1737 0AAC E5 SETLIN: PUSH HL ; Set up LINES counter +1738 0AAD 2A F8 30 LD HL,(LINESN) ; Get LINES number +1739 0AB0 22 F6 30 LD (LINESC),HL ; Save in LINES counter +1740 0AB3 E1 POP HL +1741 0AB4 C9 RET +1742 0AB5 +1743 0AB5 E5 COUNT: PUSH HL ; Save code string address +1744 0AB6 D5 PUSH DE +1745 0AB7 2A F6 30 LD HL,(LINESC) ; Get LINES counter +1746 0ABA 11 FF FF LD DE,-1 +1747 0ABD ED 5A ADC HL,DE ; Decrement +1748 0ABF 22 F6 30 LD (LINESC),HL ; Put it back +1749 0AC2 D1 POP DE +1750 0AC3 E1 POP HL ; Restore code string address +1751 0AC4 F0 RET P ; Return if more lines to go +1752 0AC5 E5 PUSH HL ; Save code string address +1753 0AC6 2A F8 30 LD HL,(LINESN) ; Get LINES number +1754 0AC9 22 F6 30 LD (LINESC),HL ; Reset LINES counter +1755 0ACC CD 9F 1E CALL GETINP ; Get input character +1756 0ACF FE 03 CP CTRLC ; Is it control "C"? +1757 0AD1 CA D8 0A JP Z,RSLNBK ; Yes - Reset LINES and break +1758 0AD4 E1 POP HL ; Restore code string address +1759 0AD5 C3 B5 0A JP COUNT ; Keep on counting +1760 0AD8 +1761 0AD8 2A F8 30 RSLNBK: LD HL,(LINESN) ; Get LINES number +1762 0ADB 22 F6 30 LD (LINESC),HL ; Reset LINES counter +1763 0ADE C3 3C 04 JP BRKRET ; Go and output "Break" +1764 0AE1 +1765 0AE1 3E 64 FOR: LD A,64H ; Flag "FOR" assignment +1766 0AE3 32 7B 31 LD (FORFLG),A ; Save "FOR" flag +1767 0AE6 CD 48 0D CALL LET ; Set up initial index +1768 0AE9 C1 POP BC ; Drop RETurn address +1769 0AEA E5 PUSH HL ; Save code string address +1770 0AEB CD 31 0D CALL DATA ; Get next statement address +1771 0AEE 22 77 31 LD (LOOPST),HL ; Save it for start of loop +1772 0AF1 21 02 00 LD HL,2 ; Offset for "FOR" block +1773 0AF4 39 ADD HL,SP ; Point to it +1774 0AF5 CD EF 06 FORSLP: CALL LOKFOR ; Look for existing "FOR" block +1775 0AF8 D1 POP DE ; Get code string address +1776 0AF9 C2 11 0B JP NZ,FORFND ; No nesting found +1777 0AFC 09 ADD HL,BC ; Move into "FOR" block +1778 0AFD D5 PUSH DE ; Save code string address +1779 0AFE 2B DEC HL +1780 0AFF 56 LD D,(HL) ; Get MSB of loop statement +1781 0B00 2B DEC HL +1782 0B01 5E LD E,(HL) ; Get LSB of loop statement +1783 0B02 23 INC HL +1784 0B03 23 INC HL +1785 0B04 E5 PUSH HL ; Save block address +1786 0B05 2A 77 31 LD HL,(LOOPST) ; Get address of loop statement +1787 0B08 CD 0A 0A CALL CPDEHL ; Compare the FOR loops +1788 0B0B E1 POP HL ; Restore block address +1789 0B0C C2 F5 0A JP NZ,FORSLP ; Different FORs - Find another +1790 0B0F D1 POP DE ; Restore code string address +1791 0B10 F9 LD SP,HL ; Remove all nested loops +1792 0B11 +1793 0B11 EB FORFND: EX DE,HL ; Code string address to HL +1794 0B12 0E 08 LD C,8 +1795 0B14 CD 1F 07 CALL CHKSTK ; Check for 8 levels of stack +1796 0B17 E5 PUSH HL ; Save code string address +1797 0B18 2A 77 31 LD HL,(LOOPST) ; Get first statement of loop +1798 0B1B E3 EX (SP),HL ; Save and restore code string +1799 0B1C E5 PUSH HL ; Re-save code string address +1800 0B1D 2A 0C 31 LD HL,(LINEAT) ; Get current line number +1801 0B20 E3 EX (SP),HL ; Save and restore code string +1802 0B21 CD 0A 10 CALL TSTNUM ; Make sure it's a number +1803 0B24 CD 10 0A CALL CHKSYN ; Make sure "TO" is next +1804 0B27 A6 .BYTE ZTO ; "TO" token +1805 0B28 CD 07 10 CALL GETNUM ; Get "TO" expression value +1806 0B2B E5 PUSH HL ; Save code string address +1807 0B2C CD 35 1A CALL BCDEFP ; Move "TO" value to BCDE +1808 0B2F E1 POP HL ; Restore code string address +1809 0B30 C5 PUSH BC ; Save "TO" value in block +1810 0B31 D5 PUSH DE +1811 0B32 01 00 81 LD BC,8100H ; BCDE - 1 (default STEP) +1812 0B35 51 LD D,C ; C=0 +1813 0B36 5A LD E,D ; D=0 +1814 0B37 7E LD A,(HL) ; Get next byte in code string +1815 0B38 FE AB CP ZSTEP ; See if "STEP" is stated +1816 0B3A 3E 01 LD A,1 ; Sign of step = 1 +1817 0B3C C2 4D 0B JP NZ,SAVSTP ; No STEP given - Default to 1 +1818 0B3F CD 9A 0B CALL GETCHR ; Jump over "STEP" token +1819 0B42 CD 07 10 CALL GETNUM ; Get step value +1820 0B45 E5 PUSH HL ; Save code string address +1821 0B46 CD 35 1A CALL BCDEFP ; Move STEP to BCDE +1822 0B49 CD E9 19 CALL TSTSGN ; Test sign of FPREG +1823 0B4C E1 POP HL ; Restore code string address +1824 0B4D C5 SAVSTP: PUSH BC ; Save the STEP value in block +1825 0B4E D5 PUSH DE +1826 0B4F F5 PUSH AF ; Save sign of STEP +1827 0B50 33 INC SP ; Don't save flags +1828 0B51 E5 PUSH HL ; Save code string address +1829 0B52 2A 7E 31 LD HL,(BRKLIN) ; Get address of index variable +1830 0B55 E3 EX (SP),HL ; Save and restore code string +1831 0B56 06 81 PUTFID: LD B,ZFOR ; "FOR" block marker +1832 0B58 C5 PUSH BC ; Save it +1833 0B59 33 INC SP ; Don't save C +1834 0B5A +1835 0B5A CD C5 0B RUNCNT: CALL TSTBRK ; Execution driver - Test break +1836 0B5D 22 7E 31 LD (BRKLIN),HL ; Save code address for break +1837 0B60 7E LD A,(HL) ; Get next byte in code string +1838 0B61 FE 3A CP ':' ; Multi statement line? +1839 0B63 CA 7A 0B JP Z,EXCUTE ; Yes - Execute it +1840 0B66 B7 OR A ; End of line? +1841 0B67 C2 42 07 JP NZ,SNERR ; No - Syntax error +1842 0B6A 23 INC HL ; Point to address of next line +1843 0B6B 7E LD A,(HL) ; Get LSB of line pointer +1844 0B6C 23 INC HL +1845 0B6D B6 OR (HL) ; Is it zero (End of prog)? +1846 0B6E CA EC 0B JP Z,ENDPRG ; Yes - Terminate execution +1847 0B71 23 INC HL ; Point to line number +1848 0B72 5E LD E,(HL) ; Get LSB of line number +1849 0B73 23 INC HL +1850 0B74 56 LD D,(HL) ; Get MSB of line number +1851 0B75 EB EX DE,HL ; Line number to HL +1852 0B76 22 0C 31 LD (LINEAT),HL ; Save as current line number +1853 0B79 EB EX DE,HL ; Line number back to DE +1854 0B7A CD 9A 0B EXCUTE: CALL GETCHR ; Get key word +1855 0B7D 11 5A 0B LD DE,RUNCNT ; Where to RETurn to +1856 0B80 D5 PUSH DE ; Save for RETurn +1857 0B81 C8 IFJMP: RET Z ; Go to RUNCNT if end of STMT +1858 0B82 D6 80 ONJMP: SUB ZEND ; Is it a token? +1859 0B84 DA 48 0D JP C,LET ; No - try to assign it +1860 0B87 FE 25 CP ZNEW+1-ZEND ; END to NEW ? +1861 0B89 D2 42 07 JP NC,SNERR ; Not a key word - ?SN Error +1862 0B8C 07 RLCA ; Double it +1863 0B8D 4F LD C,A ; BC = Offset into table +1864 0B8E 06 00 LD B,0 +1865 0B90 EB EX DE,HL ; Save code string address +1866 0B91 21 EA 05 LD HL,WORDTB ; Keyword address table +1867 0B94 09 ADD HL,BC ; Point to routine address +1868 0B95 4E LD C,(HL) ; Get LSB of routine address +1869 0B96 23 INC HL +1870 0B97 46 LD B,(HL) ; Get MSB of routine address +1871 0B98 C5 PUSH BC ; Save routine address +1872 0B99 EB EX DE,HL ; Restore code string address +1873 0B9A +1874 0B9A 23 GETCHR: INC HL ; Point to next character +1875 0B9B 7E LD A,(HL) ; Get next code string byte +1876 0B9C FE 3A CP ':' ; Z if ':' +1877 0B9E D0 RET NC ; NC if > "9" +1878 0B9F FE 20 CP ' ' +1879 0BA1 CA 9A 0B JP Z,GETCHR ; Skip over spaces +1880 0BA4 FE 30 CP '0' +1881 0BA6 3F CCF ; NC if < '0' +1882 0BA7 3C INC A ; Test for zero - Leave carry +1883 0BA8 3D DEC A ; Z if Null +1884 0BA9 C9 RET +1885 0BAA +1886 0BAA EB RESTOR: EX DE,HL ; Save code string address +1887 0BAB 2A 0E 31 LD HL,(BASTXT) ; Point to start of program +1888 0BAE CA BF 0B JP Z,RESTNL ; Just RESTORE - reset pointer +1889 0BB1 EB EX DE,HL ; Restore code string address +1890 0BB2 CD 66 0C CALL ATOH ; Get line number to DE +1891 0BB5 E5 PUSH HL ; Save code string address +1892 0BB6 CD 2E 08 CALL SRCHLN ; Search for line number in DE +1893 0BB9 60 LD H,B ; HL = Address of line +1894 0BBA 69 LD L,C +1895 0BBB D1 POP DE ; Restore code string address +1896 0BBC D2 07 0D JP NC,ULERR ; ?UL Error if not found +1897 0BBF 2B RESTNL: DEC HL ; Byte before DATA statement +1898 0BC0 22 8C 31 UPDATA: LD (NXTDAT),HL ; Update DATA pointer +1899 0BC3 EB EX DE,HL ; Restore code string address +1900 0BC4 C9 RET +1901 0BC5 +1902 0BC5 +1903 0BC5 DF TSTBRK: RST 18H ; Check input status +1904 0BC6 C8 RET Z ; No key, go back +1905 0BC7 D7 RST 10H ; Get the key into A +1906 0BC8 FE 1B CP ESC ; Escape key? +1907 0BCA 28 11 JR Z,BRK ; Yes, break +1908 0BCC FE 03 CP CTRLC ; +1909 0BCE 28 0D JR Z,BRK ; Yes, break +1910 0BD0 FE 13 CP CTRLS ; Stop scrolling? +1911 0BD2 C0 RET NZ ; Other key, ignore +1912 0BD3 +1913 0BD3 +1914 0BD3 D7 STALL: RST 10H ; Wait for key +1915 0BD4 FE 11 CP CTRLQ ; Resume scrolling? +1916 0BD6 C8 RET Z ; Release the chokehold +1917 0BD7 FE 03 CP CTRLC ; Second break? +1918 0BD9 28 07 JR Z,STOP ; Break during hold exits prog +1919 0BDB 18 F6 JR STALL ; Loop until or +1920 0BDD +1921 0BDD 3E FF BRK LD A,$FF ; Set BRKFLG +1922 0BDF 32 FD 30 LD (BRKFLG),A ; Store it +1923 0BE2 +1924 0BE2 +1925 0BE2 C0 STOP: RET NZ ; Exit if anything else +1926 0BE3 F6 .BYTE 0F6H ; Flag "STOP" +1927 0BE4 C0 PEND: RET NZ ; Exit if anything else +1928 0BE5 22 7E 31 LD (BRKLIN),HL ; Save point of break +1929 0BE8 21 .BYTE 21H ; Skip "OR 11111111B" +1930 0BE9 F6 FF INPBRK: OR 11111111B ; Flag "Break" wanted +1931 0BEB C1 POP BC ; Return not needed and more +1932 0BEC 2A 0C 31 ENDPRG: LD HL,(LINEAT) ; Get current line number +1933 0BEF F5 PUSH AF ; Save STOP / END status +1934 0BF0 7D LD A,L ; Is it direct break? +1935 0BF1 A4 AND H +1936 0BF2 3C INC A ; Line is -1 if direct break +1937 0BF3 CA FF 0B JP Z,NOLIN ; Yes - No line number +1938 0BF6 22 82 31 LD (ERRLIN),HL ; Save line of break +1939 0BF9 2A 7E 31 LD HL,(BRKLIN) ; Get point of break +1940 0BFC 22 84 31 LD (CONTAD),HL ; Save point to CONTinue +1941 0BFF AF NOLIN: XOR A +1942 0C00 32 F5 30 LD (CTLOFG),A ; Enable output +1943 0C03 CD 35 0E CALL STTLIN ; Start a new line +1944 0C06 F1 POP AF ; Restore STOP / END status +1945 0C07 21 E5 06 LD HL,BRKMSG ; "Break" message +1946 0C0A C2 76 07 JP NZ,ERRIN ; "in line" wanted? +1947 0C0D C3 8D 07 JP PRNTOK ; Go to command mode +1948 0C10 +1949 0C10 2A 84 31 CONT: LD HL,(CONTAD) ; Get CONTinue address +1950 0C13 7C LD A,H ; Is it zero? +1951 0C14 B5 OR L +1952 0C15 1E 20 LD E,CN ; ?CN Error +1953 0C17 CA 56 07 JP Z,ERROR ; Yes - output "?CN Error" +1954 0C1A EB EX DE,HL ; Save code string address +1955 0C1B 2A 82 31 LD HL,(ERRLIN) ; Get line of last break +1956 0C1E 22 0C 31 LD (LINEAT),HL ; Set up current line number +1957 0C21 EB EX DE,HL ; Restore code string address +1958 0C22 C9 RET ; CONTinue where left off +1959 0C23 +1960 0C23 CD 68 17 NULL: CALL GETINT ; Get integer 0-255 +1961 0C26 C0 RET NZ ; Return if bad value +1962 0C27 32 F1 30 LD (NULLS),A ; Set nulls number +1963 0C2A C9 RET +1964 0C2B +1965 0C2B +1966 0C2B E5 ACCSUM: PUSH HL ; Save address in array +1967 0C2C 2A FA 30 LD HL,(CHKSUM) ; Get check sum +1968 0C2F 06 00 LD B,0 ; BC - Value of byte +1969 0C31 4F LD C,A +1970 0C32 09 ADD HL,BC ; Add byte to check sum +1971 0C33 22 FA 30 LD (CHKSUM),HL ; Re-save check sum +1972 0C36 E1 POP HL ; Restore address in array +1973 0C37 C9 RET +1974 0C38 +1975 0C38 7E CHKLTR: LD A,(HL) ; Get byte +1976 0C39 FE 41 CP 'A' ; < 'a' ? +1977 0C3B D8 RET C ; Carry set if not letter +1978 0C3C FE 5B CP 'Z'+1 ; > 'z' ? +1979 0C3E 3F CCF +1980 0C3F C9 RET ; Carry set if not letter +1981 0C40 +1982 0C40 CD 9A 0B FPSINT: CALL GETCHR ; Get next character +1983 0C43 CD 07 10 POSINT: CALL GETNUM ; Get integer 0 to 32767 +1984 0C46 CD E9 19 DEPINT: CALL TSTSGN ; Test sign of FPREG +1985 0C49 FA 61 0C JP M,FCERR ; Negative - ?FC Error +1986 0C4C 3A 97 31 DEINT: LD A,(FPEXP) ; Get integer value to DE +1987 0C4F FE 90 CP 80H+16 ; Exponent in range (16 bits)? +1988 0C51 DA 91 1A JP C,FPINT ; Yes - convert it +1989 0C54 01 80 90 LD BC,9080H ; BCDE = -32768 +1990 0C57 11 00 00 LD DE,0000 +1991 0C5A E5 PUSH HL ; Save code string address +1992 0C5B CD 64 1A CALL CMPNUM ; Compare FPREG with BCDE +1993 0C5E E1 POP HL ; Restore code string address +1994 0C5F 51 LD D,C ; MSB to D +1995 0C60 C8 RET Z ; Return if in range +1996 0C61 1E 08 FCERR: LD E,FC ; ?FC Error +1997 0C63 C3 56 07 JP ERROR ; Output error- +1998 0C66 +1999 0C66 2B ATOH: DEC HL ; ASCII number to DE binary +2000 0C67 11 00 00 GETLN: LD DE,0 ; Get number to DE +2001 0C6A CD 9A 0B GTLNLP: CALL GETCHR ; Get next character +2002 0C6D D0 RET NC ; Exit if not a digit +2003 0C6E E5 PUSH HL ; Save code string address +2004 0C6F F5 PUSH AF ; Save digit +2005 0C70 21 98 19 LD HL,65529/10 ; Largest number 65529 +2006 0C73 CD 0A 0A CALL CPDEHL ; Number in range? +2007 0C76 DA 42 07 JP C,SNERR ; No - ?SN Error +2008 0C79 62 LD H,D ; HL = Number +2009 0C7A 6B LD L,E +2010 0C7B 19 ADD HL,DE ; Times 2 +2011 0C7C 29 ADD HL,HL ; Times 4 +2012 0C7D 19 ADD HL,DE ; Times 5 +2013 0C7E 29 ADD HL,HL ; Times 10 +2014 0C7F F1 POP AF ; Restore digit +2015 0C80 D6 30 SUB '0' ; Make it 0 to 9 +2016 0C82 5F LD E,A ; DE = Value of digit +2017 0C83 16 00 LD D,0 +2018 0C85 19 ADD HL,DE ; Add to number +2019 0C86 EB EX DE,HL ; Number to DE +2020 0C87 E1 POP HL ; Restore code string address +2021 0C88 C3 6A 0C JP GTLNLP ; Go to next character +2022 0C8B +2023 0C8B CA 5E 08 CLEAR: JP Z,INTVAR ; Just "CLEAR" Keep parameters +2024 0C8E CD 43 0C CALL POSINT ; Get integer 0 to 32767 to DE +2025 0C91 2B DEC HL ; Cancel increment +2026 0C92 CD 9A 0B CALL GETCHR ; Get next character +2027 0C95 E5 PUSH HL ; Save code string address +2028 0C96 2A 5F 31 LD HL,(LSTRAM) ; Get end of RAM +2029 0C99 CA AE 0C JP Z,STORED ; No value given - Use stored +2030 0C9C E1 POP HL ; Restore code string address +2031 0C9D CD 10 0A CALL CHKSYN ; Check for comma +2032 0CA0 2C .BYTE ',' +2033 0CA1 D5 PUSH DE ; Save number +2034 0CA2 CD 43 0C CALL POSINT ; Get integer 0 to 32767 +2035 0CA5 2B DEC HL ; Cancel increment +2036 0CA6 CD 9A 0B CALL GETCHR ; Get next character +2037 0CA9 C2 42 07 JP NZ,SNERR ; ?SN Error if more on line +2038 0CAC E3 EX (SP),HL ; Save code string address +2039 0CAD EB EX DE,HL ; Number to DE +2040 0CAE 7D STORED: LD A,L ; Get LSB of new RAM top +2041 0CAF 93 SUB E ; Subtract LSB of string space +2042 0CB0 5F LD E,A ; Save LSB +2043 0CB1 7C LD A,H ; Get MSB of new RAM top +2044 0CB2 9A SBC A,D ; Subtract MSB of string space +2045 0CB3 57 LD D,A ; Save MSB +2046 0CB4 DA 37 07 JP C,OMERR ; ?OM Error if not enough mem +2047 0CB7 E5 PUSH HL ; Save RAM top +2048 0CB8 2A 86 31 LD HL,(PROGND) ; Get program end +2049 0CBB 01 28 00 LD BC,40 ; 40 Bytes minimum working RAM +2050 0CBE 09 ADD HL,BC ; Get lowest address +2051 0CBF CD 0A 0A CALL CPDEHL ; Enough memory? +2052 0CC2 D2 37 07 JP NC,OMERR ; No - ?OM Error +2053 0CC5 EB EX DE,HL ; RAM top to HL +2054 0CC6 22 0A 31 LD (STRSPC),HL ; Set new string space +2055 0CC9 E1 POP HL ; End of memory to use +2056 0CCA 22 5F 31 LD (LSTRAM),HL ; Set new top of RAM +2057 0CCD E1 POP HL ; Restore code string address +2058 0CCE C3 5E 08 JP INTVAR ; Initialise variables +2059 0CD1 +2060 0CD1 CA 5A 08 RUN: JP Z,RUNFST ; RUN from start if just RUN +2061 0CD4 CD 5E 08 CALL INTVAR ; Initialise variables +2062 0CD7 01 5A 0B LD BC,RUNCNT ; Execution driver loop +2063 0CDA C3 ED 0C JP RUNLIN ; RUN from line number +2064 0CDD +2065 0CDD 0E 03 GOSUB: LD C,3 ; 3 Levels of stack needed +2066 0CDF CD 1F 07 CALL CHKSTK ; Check for 3 levels of stack +2067 0CE2 C1 POP BC ; Get return address +2068 0CE3 E5 PUSH HL ; Save code string for RETURN +2069 0CE4 E5 PUSH HL ; And for GOSUB routine +2070 0CE5 2A 0C 31 LD HL,(LINEAT) ; Get current line +2071 0CE8 E3 EX (SP),HL ; Into stack - Code string out +2072 0CE9 3E 8C LD A,ZGOSUB ; "GOSUB" token +2073 0CEB F5 PUSH AF ; Save token +2074 0CEC 33 INC SP ; Don't save flags +2075 0CED +2076 0CED C5 RUNLIN: PUSH BC ; Save return address +2077 0CEE CD 66 0C GOTO: CALL ATOH ; ASCII number to DE binary +2078 0CF1 CD 33 0D CALL REM ; Get end of line +2079 0CF4 E5 PUSH HL ; Save end of line +2080 0CF5 2A 0C 31 LD HL,(LINEAT) ; Get current line +2081 0CF8 CD 0A 0A CALL CPDEHL ; Line after current? +2082 0CFB E1 POP HL ; Restore end of line +2083 0CFC 23 INC HL ; Start of next line +2084 0CFD DC 31 08 CALL C,SRCHLP ; Line is after current line +2085 0D00 D4 2E 08 CALL NC,SRCHLN ; Line is before current line +2086 0D03 60 LD H,B ; Set up code string address +2087 0D04 69 LD L,C +2088 0D05 2B DEC HL ; Incremented after +2089 0D06 D8 RET C ; Line found +2090 0D07 1E 0E ULERR: LD E,UL ; ?UL Error +2091 0D09 C3 56 07 JP ERROR ; Output error message +2092 0D0C +2093 0D0C C0 RETURN: RET NZ ; Return if not just RETURN +2094 0D0D 16 FF LD D,-1 ; Flag "GOSUB" search +2095 0D0F CD EB 06 CALL BAKSTK ; Look "GOSUB" block +2096 0D12 F9 LD SP,HL ; Kill all FORs in subroutine +2097 0D13 FE 8C CP ZGOSUB ; Test for "GOSUB" token +2098 0D15 1E 04 LD E,RG ; ?RG Error +2099 0D17 C2 56 07 JP NZ,ERROR ; Error if no "GOSUB" found +2100 0D1A E1 POP HL ; Get RETURN line number +2101 0D1B 22 0C 31 LD (LINEAT),HL ; Save as current +2102 0D1E 23 INC HL ; Was it from direct statement? +2103 0D1F 7C LD A,H +2104 0D20 B5 OR L ; Return to line +2105 0D21 C2 2B 0D JP NZ,RETLIN ; No - Return to line +2106 0D24 3A 7C 31 LD A,(LSTBIN) ; Any INPUT in subroutine? +2107 0D27 B7 OR A ; If so buffer is corrupted +2108 0D28 C2 8C 07 JP NZ,POPNOK ; Yes - Go to command mode +2109 0D2B 21 5A 0B RETLIN: LD HL,RUNCNT ; Execution driver loop +2110 0D2E E3 EX (SP),HL ; Into stack - Code string out +2111 0D2F 3E .BYTE 3EH ; Skip "POP HL" +2112 0D30 E1 NXTDTA: POP HL ; Restore code string address +2113 0D31 +2114 0D31 01 3A DATA: .BYTE 01H,3AH ; ':' End of statement +2115 0D33 0E 00 REM: LD C,0 ; 00 End of statement +2116 0D35 06 00 LD B,0 +2117 0D37 79 NXTSTL: LD A,C ; Statement and byte +2118 0D38 48 LD C,B +2119 0D39 47 LD B,A ; Statement end byte +2120 0D3A 7E NXTSTT: LD A,(HL) ; Get byte +2121 0D3B B7 OR A ; End of line? +2122 0D3C C8 RET Z ; Yes - Exit +2123 0D3D B8 CP B ; End of statement? +2124 0D3E C8 RET Z ; Yes - Exit +2125 0D3F 23 INC HL ; Next byte +2126 0D40 FE 22 CP '"' ; Literal string? +2127 0D42 CA 37 0D JP Z,NXTSTL ; Yes - Look for another '"' +2128 0D45 C3 3A 0D JP NXTSTT ; Keep looking +2129 0D48 +2130 0D48 CD FD 11 LET: CALL GETVAR ; Get variable name +2131 0D4B CD 10 0A CALL CHKSYN ; Make sure "=" follows +2132 0D4E B4 .BYTE ZEQUAL ; "=" token +2133 0D4F D5 PUSH DE ; Save address of variable +2134 0D50 3A 5D 31 LD A,(TYPE) ; Get data type +2135 0D53 F5 PUSH AF ; Save type +2136 0D54 CD 19 10 CALL EVAL ; Evaluate expression +2137 0D57 F1 POP AF ; Restore type +2138 0D58 E3 EX (SP),HL ; Save code - Get var addr +2139 0D59 22 7E 31 LD (BRKLIN),HL ; Save address of variable +2140 0D5C 1F RRA ; Adjust type +2141 0D5D CD 0C 10 CALL CHKTYP ; Check types are the same +2142 0D60 CA 9B 0D JP Z,LETNUM ; Numeric - Move value +2143 0D63 E5 LETSTR: PUSH HL ; Save address of string var +2144 0D64 2A 94 31 LD HL,(FPREG) ; Pointer to string entry +2145 0D67 E5 PUSH HL ; Save it on stack +2146 0D68 23 INC HL ; Skip over length +2147 0D69 23 INC HL +2148 0D6A 5E LD E,(HL) ; LSB of string address +2149 0D6B 23 INC HL +2150 0D6C 56 LD D,(HL) ; MSB of string address +2151 0D6D 2A 0E 31 LD HL,(BASTXT) ; Point to start of program +2152 0D70 CD 0A 0A CALL CPDEHL ; Is string before program? +2153 0D73 D2 8A 0D JP NC,CRESTR ; Yes - Create string entry +2154 0D76 2A 0A 31 LD HL,(STRSPC) ; Point to string space +2155 0D79 CD 0A 0A CALL CPDEHL ; Is string literal in program? +2156 0D7C D1 POP DE ; Restore address of string +2157 0D7D D2 92 0D JP NC,MVSTPT ; Yes - Set up pointer +2158 0D80 21 6F 31 LD HL,TMPSTR ; Temporary string pool +2159 0D83 CD 0A 0A CALL CPDEHL ; Is string in temporary pool? +2160 0D86 D2 92 0D JP NC,MVSTPT ; No - Set up pointer +2161 0D89 3E .BYTE 3EH ; Skip "POP DE" +2162 0D8A D1 CRESTR: POP DE ; Restore address of string +2163 0D8B CD 41 16 CALL BAKTMP ; Back to last tmp-str entry +2164 0D8E EB EX DE,HL ; Address of string entry +2165 0D8F CD 7A 14 CALL SAVSTR ; Save string in string area +2166 0D92 CD 41 16 MVSTPT: CALL BAKTMP ; Back to last tmp-str entry +2167 0D95 E1 POP HL ; Get string pointer +2168 0D96 CD 44 1A CALL DETHL4 ; Move string pointer to var +2169 0D99 E1 POP HL ; Restore code string address +2170 0D9A C9 RET +2171 0D9B +2172 0D9B E5 LETNUM: PUSH HL ; Save address of variable +2173 0D9C CD 41 1A CALL FPTHL ; Move value to variable +2174 0D9F D1 POP DE ; Restore address of variable +2175 0DA0 E1 POP HL ; Restore code string address +2176 0DA1 C9 RET +2177 0DA2 +2178 0DA2 CD 68 17 ON: CALL GETINT ; Get integer 0-255 +2179 0DA5 7E LD A,(HL) ; Get "GOTO" or "GOSUB" token +2180 0DA6 47 LD B,A ; Save in B +2181 0DA7 FE 8C CP ZGOSUB ; "GOSUB" token? +2182 0DA9 CA B1 0D JP Z,ONGO ; Yes - Find line number +2183 0DAC CD 10 0A CALL CHKSYN ; Make sure it's "GOTO" +2184 0DAF 88 .BYTE ZGOTO ; "GOTO" token +2185 0DB0 2B DEC HL ; Cancel increment +2186 0DB1 4B ONGO: LD C,E ; Integer of branch value +2187 0DB2 0D ONGOLP: DEC C ; Count branches +2188 0DB3 78 LD A,B ; Get "GOTO" or "GOSUB" token +2189 0DB4 CA 82 0B JP Z,ONJMP ; Go to that line if right one +2190 0DB7 CD 67 0C CALL GETLN ; Get line number to DE +2191 0DBA FE 2C CP ',' ; Another line number? +2192 0DBC C0 RET NZ ; No - Drop through +2193 0DBD C3 B2 0D JP ONGOLP ; Yes - loop +2194 0DC0 +2195 0DC0 CD 19 10 IF: CALL EVAL ; Evaluate expression +2196 0DC3 7E LD A,(HL) ; Get token +2197 0DC4 FE 88 CP ZGOTO ; "GOTO" token? +2198 0DC6 CA CE 0D JP Z,IFGO ; Yes - Get line +2199 0DC9 CD 10 0A CALL CHKSYN ; Make sure it's "THEN" +2200 0DCC A9 .BYTE ZTHEN ; "THEN" token +2201 0DCD 2B DEC HL ; Cancel increment +2202 0DCE CD 0A 10 IFGO: CALL TSTNUM ; Make sure it's numeric +2203 0DD1 CD E9 19 CALL TSTSGN ; Test state of expression +2204 0DD4 CA 33 0D JP Z,REM ; False - Drop through +2205 0DD7 CD 9A 0B CALL GETCHR ; Get next character +2206 0DDA DA EE 0C JP C,GOTO ; Number - GOTO that line +2207 0DDD C3 81 0B JP IFJMP ; Otherwise do statement +2208 0DE0 +2209 0DE0 2B MRPRNT: DEC HL ; DEC 'cos GETCHR INCs +2210 0DE1 CD 9A 0B CALL GETCHR ; Get next character +2211 0DE4 CA 42 0E PRINT: JP Z,PRNTCRLF ; CRLF if just PRINT +2212 0DE7 C8 PRNTLP: RET Z ; End of list - Exit +2213 0DE8 FE A5 CP ZTAB ; "TAB(" token? +2214 0DEA CA 75 0E JP Z,DOTAB ; Yes - Do TAB routine +2215 0DED FE A8 CP ZSPC ; "SPC(" token? +2216 0DEF CA 75 0E JP Z,DOTAB ; Yes - Do SPC routine +2217 0DF2 E5 PUSH HL ; Save code string address +2218 0DF3 FE 2C CP ',' ; Comma? +2219 0DF5 CA 5E 0E JP Z,DOCOM ; Yes - Move to next zone +2220 0DF8 FE 3B CP 59 ;";" ; Semi-colon? +2221 0DFA CA 98 0E JP Z,NEXITM ; Do semi-colon routine +2222 0DFD C1 POP BC ; Code string address to BC +2223 0DFE CD 19 10 CALL EVAL ; Evaluate expression +2224 0E01 E5 PUSH HL ; Save code string address +2225 0E02 3A 5D 31 LD A,(TYPE) ; Get variable type +2226 0E05 B7 OR A ; Is it a string variable? +2227 0E06 C2 2E 0E JP NZ,PRNTST ; Yes - Output string contents +2228 0E09 CD 8E 1B CALL NUMASC ; Convert number to text +2229 0E0C CD 9E 14 CALL CRTST ; Create temporary string +2230 0E0F 36 20 LD (HL),' ' ; Followed by a space +2231 0E11 2A 94 31 LD HL,(FPREG) ; Get length of output +2232 0E14 34 INC (HL) ; Plus 1 for the space +2233 0E15 2A 94 31 LD HL,(FPREG) ; < Not needed > +2234 0E18 3A F2 30 LD A,(LWIDTH) ; Get width of line +2235 0E1B 47 LD B,A ; To B +2236 0E1C 04 INC B ; Width 255 (No limit)? +2237 0E1D CA 2A 0E JP Z,PRNTNB ; Yes - Output number string +2238 0E20 04 INC B ; Adjust it +2239 0E21 3A 5B 31 LD A,(CURPOS) ; Get cursor position +2240 0E24 86 ADD A,(HL) ; Add length of string +2241 0E25 3D DEC A ; Adjust it +2242 0E26 B8 CP B ; Will output fit on this line? +2243 0E27 D4 42 0E CALL NC,PRNTCRLF ; No - CRLF first +2244 0E2A CD E3 14 PRNTNB: CALL PRS1 ; Output string at (HL) +2245 0E2D AF XOR A ; Skip CALL by setting 'z' flag +2246 0E2E C4 E3 14 PRNTST: CALL NZ,PRS1 ; Output string at (HL) +2247 0E31 E1 POP HL ; Restore code string address +2248 0E32 C3 E0 0D JP MRPRNT ; See if more to PRINT +2249 0E35 +2250 0E35 3A 5B 31 STTLIN: LD A,(CURPOS) ; Make sure on new line +2251 0E38 B7 OR A ; Already at start? +2252 0E39 C8 RET Z ; Yes - Do nothing +2253 0E3A C3 42 0E JP PRNTCRLF ; Start a new line +2254 0E3D +2255 0E3D 36 00 ENDINP: LD (HL),0 ; Mark end of buffer +2256 0E3F 21 10 31 LD HL,BUFFER-1 ; Point to buffer +2257 0E42 3E 0D PRNTCRLF: LD A,CR ; Load a CR +2258 0E44 CD 1B 0A CALL OUTC ; Output character +2259 0E47 3E 0A LD A,LF ; Load a LF +2260 0E49 CD 1B 0A CALL OUTC ; Output character +2261 0E4C AF DONULL: XOR A ; Set to position 0 +2262 0E4D 32 5B 31 LD (CURPOS),A ; Store it +2263 0E50 3A F1 30 LD A,(NULLS) ; Get number of nulls +2264 0E53 3D NULLP: DEC A ; Count them +2265 0E54 C8 RET Z ; Return if done +2266 0E55 F5 PUSH AF ; Save count +2267 0E56 AF XOR A ; Load a null +2268 0E57 CD 1B 0A CALL OUTC ; Output it +2269 0E5A F1 POP AF ; Restore count +2270 0E5B C3 53 0E JP NULLP ; Keep counting +2271 0E5E +2272 0E5E 3A F3 30 DOCOM: LD A,(COMMAN) ; Get comma width +2273 0E61 47 LD B,A ; Save in B +2274 0E62 3A 5B 31 LD A,(CURPOS) ; Get current position +2275 0E65 B8 CP B ; Within the limit? +2276 0E66 D4 42 0E CALL NC,PRNTCRLF ; No - output CRLF +2277 0E69 D2 98 0E JP NC,NEXITM ; Get next item +2278 0E6C D6 0E ZONELP: SUB 14 ; Next zone of 14 characters +2279 0E6E D2 6C 0E JP NC,ZONELP ; Repeat if more zones +2280 0E71 2F CPL ; Number of spaces to output +2281 0E72 C3 8D 0E JP ASPCS ; Output them +2282 0E75 +2283 0E75 F5 DOTAB: PUSH AF ; Save token +2284 0E76 CD 65 17 CALL FNDNUM ; Evaluate expression +2285 0E79 CD 10 0A CALL CHKSYN ; Make sure ")" follows +2286 0E7C 29 .BYTE ")" +2287 0E7D 2B DEC HL ; Back space on to ")" +2288 0E7E F1 POP AF ; Restore token +2289 0E7F D6 A8 SUB ZSPC ; Was it "SPC(" ? +2290 0E81 E5 PUSH HL ; Save code string address +2291 0E82 CA 88 0E JP Z,DOSPC ; Yes - Do 'E' spaces +2292 0E85 3A 5B 31 LD A,(CURPOS) ; Get current position +2293 0E88 2F DOSPC: CPL ; Number of spaces to print to +2294 0E89 83 ADD A,E ; Total number to print +2295 0E8A D2 98 0E JP NC,NEXITM ; TAB < Current POS(X) +2296 0E8D 3C ASPCS: INC A ; Output A spaces +2297 0E8E 47 LD B,A ; Save number to print +2298 0E8F 3E 20 LD A,' ' ; Space +2299 0E91 CD 1B 0A SPCLP: CALL OUTC ; Output character in A +2300 0E94 05 DEC B ; Count them +2301 0E95 C2 91 0E JP NZ,SPCLP ; Repeat if more +2302 0E98 E1 NEXITM: POP HL ; Restore code string address +2303 0E99 CD 9A 0B CALL GETCHR ; Get next character +2304 0E9C C3 E7 0D JP PRNTLP ; More to print +2305 0E9F +2306 0E9F 3F5265646F20REDO: .BYTE "?Redo from start",CR,LF,0 +2306 0EA5 66726F6D2073746172740D0A00 +2307 0EB2 +2308 0EB2 3A 7D 31 BADINP: LD A,(READFG) ; READ or INPUT? +2309 0EB5 B7 OR A +2310 0EB6 C2 3C 07 JP NZ,DATSNR ; READ - ?SN Error +2311 0EB9 C1 POP BC ; Throw away code string addr +2312 0EBA 21 9F 0E LD HL,REDO ; "Redo from start" message +2313 0EBD CD E0 14 CALL PRS ; Output string +2314 0EC0 C3 8D 08 JP DOAGN ; Do last INPUT again +2315 0EC3 +2316 0EC3 CD 4B 14 INPUT: CALL IDTEST ; Test for illegal direct +2317 0EC6 7E LD A,(HL) ; Get character after "INPUT" +2318 0EC7 FE 22 CP '"' ; Is there a prompt string? +2319 0EC9 3E 00 LD A,0 ; Clear A and leave flags +2320 0ECB 32 F5 30 LD (CTLOFG),A ; Enable output +2321 0ECE C2 DD 0E JP NZ,NOPMPT ; No prompt - get input +2322 0ED1 CD 9F 14 CALL QTSTR ; Get string terminated by '"' +2323 0ED4 CD 10 0A CALL CHKSYN ; Check for ';' after prompt +2324 0ED7 3B .BYTE ';' +2325 0ED8 E5 PUSH HL ; Save code string address +2326 0ED9 CD E3 14 CALL PRS1 ; Output prompt string +2327 0EDC 3E .BYTE 3EH ; Skip "PUSH HL" +2328 0EDD E5 NOPMPT: PUSH HL ; Save code string address +2329 0EDE CD 91 08 CALL PROMPT ; Get input with "? " prompt +2330 0EE1 C1 POP BC ; Restore code string address +2331 0EE2 DA E9 0B JP C,INPBRK ; Break pressed - Exit +2332 0EE5 23 INC HL ; Next byte +2333 0EE6 7E LD A,(HL) ; Get it +2334 0EE7 B7 OR A ; End of line? +2335 0EE8 2B DEC HL ; Back again +2336 0EE9 C5 PUSH BC ; Re-save code string address +2337 0EEA CA 30 0D JP Z,NXTDTA ; Yes - Find next DATA stmt +2338 0EED 36 2C LD (HL),',' ; Store comma as separator +2339 0EEF C3 F7 0E JP NXTITM ; Get next item +2340 0EF2 +2341 0EF2 E5 READ: PUSH HL ; Save code string address +2342 0EF3 2A 8C 31 LD HL,(NXTDAT) ; Next DATA statement +2343 0EF6 F6 .BYTE 0F6H ; Flag "READ" +2344 0EF7 AF NXTITM: XOR A ; Flag "INPUT" +2345 0EF8 32 7D 31 LD (READFG),A ; Save "READ"/"INPUT" flag +2346 0EFB E3 EX (SP),HL ; Get code str' , Save pointer +2347 0EFC C3 03 0F JP GTVLUS ; Get values +2348 0EFF +2349 0EFF CD 10 0A NEDMOR: CALL CHKSYN ; Check for comma between items +2350 0F02 2C .BYTE ',' +2351 0F03 CD FD 11 GTVLUS: CALL GETVAR ; Get variable name +2352 0F06 E3 EX (SP),HL ; Save code str" , Get pointer +2353 0F07 D5 PUSH DE ; Save variable address +2354 0F08 7E LD A,(HL) ; Get next "INPUT"/"DATA" byte +2355 0F09 FE 2C CP ',' ; Comma? +2356 0F0B CA 2B 0F JP Z,ANTVLU ; Yes - Get another value +2357 0F0E 3A 7D 31 LD A,(READFG) ; Is it READ? +2358 0F11 B7 OR A +2359 0F12 C2 98 0F JP NZ,FDTLP ; Yes - Find next DATA stmt +2360 0F15 3E 3F LD A,'?' ; More INPUT needed +2361 0F17 CD 1B 0A CALL OUTC ; Output character +2362 0F1A CD 91 08 CALL PROMPT ; Get INPUT with prompt +2363 0F1D D1 POP DE ; Variable address +2364 0F1E C1 POP BC ; Code string address +2365 0F1F DA E9 0B JP C,INPBRK ; Break pressed +2366 0F22 23 INC HL ; Point to next DATA byte +2367 0F23 7E LD A,(HL) ; Get byte +2368 0F24 B7 OR A ; Is it zero (No input) ? +2369 0F25 2B DEC HL ; Back space INPUT pointer +2370 0F26 C5 PUSH BC ; Save code string address +2371 0F27 CA 30 0D JP Z,NXTDTA ; Find end of buffer +2372 0F2A D5 PUSH DE ; Save variable address +2373 0F2B 3A 5D 31 ANTVLU: LD A,(TYPE) ; Check data type +2374 0F2E B7 OR A ; Is it numeric? +2375 0F2F CA 55 0F JP Z,INPBIN ; Yes - Convert to binary +2376 0F32 CD 9A 0B CALL GETCHR ; Get next character +2377 0F35 57 LD D,A ; Save input character +2378 0F36 47 LD B,A ; Again +2379 0F37 FE 22 CP '"' ; Start of literal sting? +2380 0F39 CA 49 0F JP Z,STRENT ; Yes - Create string entry +2381 0F3C 3A 7D 31 LD A,(READFG) ; "READ" or "INPUT" ? +2382 0F3F B7 OR A +2383 0F40 57 LD D,A ; Save 00 if "INPUT" +2384 0F41 CA 46 0F JP Z,ITMSEP ; "INPUT" - End with 00 +2385 0F44 16 3A LD D,':' ; "DATA" - End with 00 or ':' +2386 0F46 06 2C ITMSEP: LD B,',' ; Item separator +2387 0F48 2B DEC HL ; Back space for DTSTR +2388 0F49 CD A2 14 STRENT: CALL DTSTR ; Get string terminated by D +2389 0F4C EB EX DE,HL ; String address to DE +2390 0F4D 21 60 0F LD HL,LTSTND ; Where to go after LETSTR +2391 0F50 E3 EX (SP),HL ; Save HL , get input pointer +2392 0F51 D5 PUSH DE ; Save address of string +2393 0F52 C3 63 0D JP LETSTR ; Assign string to variable +2394 0F55 +2395 0F55 CD 9A 0B INPBIN: CALL GETCHR ; Get next character +2396 0F58 CD F0 1A CALL ASCTFP ; Convert ASCII to FP number +2397 0F5B E3 EX (SP),HL ; Save input ptr, Get var addr +2398 0F5C CD 41 1A CALL FPTHL ; Move FPREG to variable +2399 0F5F E1 POP HL ; Restore input pointer +2400 0F60 2B LTSTND: DEC HL ; DEC 'cos GETCHR INCs +2401 0F61 CD 9A 0B CALL GETCHR ; Get next character +2402 0F64 CA 6C 0F JP Z,MORDT ; End of line - More needed? +2403 0F67 FE 2C CP ',' ; Another value? +2404 0F69 C2 B2 0E JP NZ,BADINP ; No - Bad input +2405 0F6C E3 MORDT: EX (SP),HL ; Get code string address +2406 0F6D 2B DEC HL ; DEC 'cos GETCHR INCs +2407 0F6E CD 9A 0B CALL GETCHR ; Get next character +2408 0F71 C2 FF 0E JP NZ,NEDMOR ; More needed - Get it +2409 0F74 D1 POP DE ; Restore DATA pointer +2410 0F75 3A 7D 31 LD A,(READFG) ; "READ" or "INPUT" ? +2411 0F78 B7 OR A +2412 0F79 EB EX DE,HL ; DATA pointer to HL +2413 0F7A C2 C0 0B JP NZ,UPDATA ; Update DATA pointer if "READ" +2414 0F7D D5 PUSH DE ; Save code string address +2415 0F7E B6 OR (HL) ; More input given? +2416 0F7F 21 87 0F LD HL,EXTIG ; "?Extra ignored" message +2417 0F82 C4 E0 14 CALL NZ,PRS ; Output string if extra given +2418 0F85 E1 POP HL ; Restore code string address +2419 0F86 C9 RET +2420 0F87 +2421 0F87 3F4578747261EXTIG: .BYTE "?Extra ignored",CR,LF,0 +2421 0F8D 2069676E6F7265640D0A00 +2422 0F98 +2423 0F98 CD 31 0D FDTLP: CALL DATA ; Get next statement +2424 0F9B B7 OR A ; End of line? +2425 0F9C C2 B1 0F JP NZ,FANDT ; No - See if DATA statement +2426 0F9F 23 INC HL +2427 0FA0 7E LD A,(HL) ; End of program? +2428 0FA1 23 INC HL +2429 0FA2 B6 OR (HL) ; 00 00 Ends program +2430 0FA3 1E 06 LD E,OD ; ?OD Error +2431 0FA5 CA 56 07 JP Z,ERROR ; Yes - Out of DATA +2432 0FA8 23 INC HL +2433 0FA9 5E LD E,(HL) ; LSB of line number +2434 0FAA 23 INC HL +2435 0FAB 56 LD D,(HL) ; MSB of line number +2436 0FAC EB EX DE,HL +2437 0FAD 22 79 31 LD (DATLIN),HL ; Set line of current DATA item +2438 0FB0 EB EX DE,HL +2439 0FB1 CD 9A 0B FANDT: CALL GETCHR ; Get next character +2440 0FB4 FE 83 CP ZDATA ; "DATA" token +2441 0FB6 C2 98 0F JP NZ,FDTLP ; No "DATA" - Keep looking +2442 0FB9 C3 2B 0F JP ANTVLU ; Found - Convert input +2443 0FBC +2444 0FBC 11 00 00 NEXT: LD DE,0 ; In case no index given +2445 0FBF C4 FD 11 NEXT1: CALL NZ,GETVAR ; Get index address +2446 0FC2 22 7E 31 LD (BRKLIN),HL ; Save code string address +2447 0FC5 CD EB 06 CALL BAKSTK ; Look for "FOR" block +2448 0FC8 C2 48 07 JP NZ,NFERR ; No "FOR" - ?NF Error +2449 0FCB F9 LD SP,HL ; Clear nested loops +2450 0FCC D5 PUSH DE ; Save index address +2451 0FCD 7E LD A,(HL) ; Get sign of STEP +2452 0FCE 23 INC HL +2453 0FCF F5 PUSH AF ; Save sign of STEP +2454 0FD0 D5 PUSH DE ; Save index address +2455 0FD1 CD 27 1A CALL PHLTFP ; Move index value to FPREG +2456 0FD4 E3 EX (SP),HL ; Save address of TO value +2457 0FD5 E5 PUSH HL ; Save address of index +2458 0FD6 CD 94 17 CALL ADDPHL ; Add STEP to index value +2459 0FD9 E1 POP HL ; Restore address of index +2460 0FDA CD 41 1A CALL FPTHL ; Move value to index variable +2461 0FDD E1 POP HL ; Restore address of TO value +2462 0FDE CD 38 1A CALL LOADFP ; Move TO value to BCDE +2463 0FE1 E5 PUSH HL ; Save address of line of FOR +2464 0FE2 CD 64 1A CALL CMPNUM ; Compare index with TO value +2465 0FE5 E1 POP HL ; Restore address of line num +2466 0FE6 C1 POP BC ; Address of sign of STEP +2467 0FE7 90 SUB B ; Compare with expected sign +2468 0FE8 CD 38 1A CALL LOADFP ; BC = Loop stmt,DE = Line num +2469 0FEB CA F7 0F JP Z,KILFOR ; Loop finished - Terminate it +2470 0FEE EB EX DE,HL ; Loop statement line number +2471 0FEF 22 0C 31 LD (LINEAT),HL ; Set loop line number +2472 0FF2 69 LD L,C ; Set code string to loop +2473 0FF3 60 LD H,B +2474 0FF4 C3 56 0B JP PUTFID ; Put back "FOR" and continue +2475 0FF7 +2476 0FF7 F9 KILFOR: LD SP,HL ; Remove "FOR" block +2477 0FF8 2A 7E 31 LD HL,(BRKLIN) ; Code string after "NEXT" +2478 0FFB 7E LD A,(HL) ; Get next byte in code string +2479 0FFC FE 2C CP ',' ; More NEXTs ? +2480 0FFE C2 5A 0B JP NZ,RUNCNT ; No - Do next statement +2481 1001 CD 9A 0B CALL GETCHR ; Position to index name +2482 1004 CD BF 0F CALL NEXT1 ; Re-enter NEXT routine +2483 1007 ; < will not RETurn to here , Exit to RUNCNT or Loop > +2484 1007 +2485 1007 CD 19 10 GETNUM: CALL EVAL ; Get a numeric expression +2486 100A F6 TSTNUM: .BYTE 0F6H ; Clear carry (numeric) +2487 100B 37 TSTSTR: SCF ; Set carry (string) +2488 100C 3A 5D 31 CHKTYP: LD A,(TYPE) ; Check types match +2489 100F 8F ADC A,A ; Expected + actual +2490 1010 B7 OR A ; Clear carry , set parity +2491 1011 E8 RET PE ; Even parity - Types match +2492 1012 C3 54 07 JP TMERR ; Different types - Error +2493 1015 +2494 1015 CD 10 0A OPNPAR: CALL CHKSYN ; Make sure "(" follows +2495 1018 28 .BYTE "(" +2496 1019 2B EVAL: DEC HL ; Evaluate expression & save +2497 101A 16 00 LD D,0 ; Precedence value +2498 101C D5 EVAL1: PUSH DE ; Save precedence +2499 101D 0E 01 LD C,1 +2500 101F CD 1F 07 CALL CHKSTK ; Check for 1 level of stack +2501 1022 CD 90 10 CALL OPRND ; Get next expression value +2502 1025 22 80 31 EVAL2: LD (NXTOPR),HL ; Save address of next operator +2503 1028 2A 80 31 EVAL3: LD HL,(NXTOPR) ; Restore address of next opr +2504 102B C1 POP BC ; Precedence value and operator +2505 102C 78 LD A,B ; Get precedence value +2506 102D FE 78 CP 78H ; "AND" or "OR" ? +2507 102F D4 0A 10 CALL NC,TSTNUM ; No - Make sure it's a number +2508 1032 7E LD A,(HL) ; Get next operator / function +2509 1033 16 00 LD D,0 ; Clear Last relation +2510 1035 D6 B3 RLTLP: SUB ZGTR ; ">" Token +2511 1037 DA 51 10 JP C,FOPRND ; + - * / ^ AND OR - Test it +2512 103A FE 03 CP ZLTH+1-ZGTR ; < = > +2513 103C D2 51 10 JP NC,FOPRND ; Function - Call it +2514 103F FE 01 CP ZEQUAL-ZGTR ; "=" +2515 1041 17 RLA ; <- Test for legal +2516 1042 AA XOR D ; <- combinations of < = > +2517 1043 BA CP D ; <- by combining last token +2518 1044 57 LD D,A ; <- with current one +2519 1045 DA 42 07 JP C,SNERR ; Error if "<<' '==" or ">>" +2520 1048 22 75 31 LD (CUROPR),HL ; Save address of current token +2521 104B CD 9A 0B CALL GETCHR ; Get next character +2522 104E C3 35 10 JP RLTLP ; Treat the two as one +2523 1051 +2524 1051 7A FOPRND: LD A,D ; < = > found ? +2525 1052 B7 OR A +2526 1053 C2 78 11 JP NZ,TSTRED ; Yes - Test for reduction +2527 1056 7E LD A,(HL) ; Get operator token +2528 1057 22 75 31 LD (CUROPR),HL ; Save operator address +2529 105A D6 AC SUB ZPLUS ; Operator or function? +2530 105C D8 RET C ; Neither - Exit +2531 105D FE 07 CP ZOR+1-ZPLUS ; Is it + - * / ^ AND OR ? +2532 105F D0 RET NC ; No - Exit +2533 1060 5F LD E,A ; Coded operator +2534 1061 3A 5D 31 LD A,(TYPE) ; Get data type +2535 1064 3D DEC A ; FF = numeric , 00 = string +2536 1065 B3 OR E ; Combine with coded operator +2537 1066 7B LD A,E ; Get coded operator +2538 1067 CA D6 15 JP Z,CONCAT ; String concatenation +2539 106A 07 RLCA ; Times 2 +2540 106B 83 ADD A,E ; Times 3 +2541 106C 5F LD E,A ; To DE (D is 0) +2542 106D 21 34 06 LD HL,PRITAB ; Precedence table +2543 1070 19 ADD HL,DE ; To the operator concerned +2544 1071 78 LD A,B ; Last operator precedence +2545 1072 56 LD D,(HL) ; Get evaluation precedence +2546 1073 BA CP D ; Compare with eval precedence +2547 1074 D0 RET NC ; Exit if higher precedence +2548 1075 23 INC HL ; Point to routine address +2549 1076 CD 0A 10 CALL TSTNUM ; Make sure it's a number +2550 1079 +2551 1079 C5 STKTHS: PUSH BC ; Save last precedence & token +2552 107A 01 28 10 LD BC,EVAL3 ; Where to go on prec' break +2553 107D C5 PUSH BC ; Save on stack for return +2554 107E 43 LD B,E ; Save operator +2555 107F 4A LD C,D ; Save precedence +2556 1080 CD 1A 1A CALL STAKFP ; Move value to stack +2557 1083 58 LD E,B ; Restore operator +2558 1084 51 LD D,C ; Restore precedence +2559 1085 4E LD C,(HL) ; Get LSB of routine address +2560 1086 23 INC HL +2561 1087 46 LD B,(HL) ; Get MSB of routine address +2562 1088 23 INC HL +2563 1089 C5 PUSH BC ; Save routine address +2564 108A 2A 75 31 LD HL,(CUROPR) ; Address of current operator +2565 108D C3 1C 10 JP EVAL1 ; Loop until prec' break +2566 1090 +2567 1090 AF OPRND: XOR A ; Get operand routine +2568 1091 32 5D 31 LD (TYPE),A ; Set numeric expected +2569 1094 CD 9A 0B CALL GETCHR ; Get next character +2570 1097 1E 24 LD E,MO ; ?MO Error +2571 1099 CA 56 07 JP Z,ERROR ; No operand - Error +2572 109C DA F0 1A JP C,ASCTFP ; Number - Get value +2573 109F CD 38 0C CALL CHKLTR ; See if a letter +2574 10A2 D2 F7 10 JP NC,CONVAR ; Letter - Find variable +2575 10A5 FE 26 CP '&' ; &H = HEX, &B = BINARY +2576 10A7 20 12 JR NZ, NOTAMP +2577 10A9 CD 9A 0B CALL GETCHR ; Get next character +2578 10AC FE 48 CP 'H' ; Hex number indicated? [function added] +2579 10AE CA 34 1F JP Z,HEXTFP ; Convert Hex to FPREG +2580 10B1 FE 42 CP 'B' ; Binary number indicated? [function added] +2581 10B3 CA A4 1F JP Z,BINTFP ; Convert Bin to FPREG +2582 10B6 1E 02 LD E,SN ; If neither then a ?SN Error +2583 10B8 CA 56 07 JP Z,ERROR ; +2584 10BB FE AC NOTAMP: CP ZPLUS ; '+' Token ? +2585 10BD CA 90 10 JP Z,OPRND ; Yes - Look for operand +2586 10C0 FE 2E CP '.' ; '.' ? +2587 10C2 CA F0 1A JP Z,ASCTFP ; Yes - Create FP number +2588 10C5 FE AD CP ZMINUS ; '-' Token ? +2589 10C7 CA E6 10 JP Z,MINUS ; Yes - Do minus +2590 10CA FE 22 CP '"' ; Literal string ? +2591 10CC CA 9F 14 JP Z,QTSTR ; Get string terminated by '"' +2592 10CF FE AA CP ZNOT ; "NOT" Token ? +2593 10D1 CA D8 11 JP Z,EVNOT ; Yes - Eval NOT expression +2594 10D4 FE A7 CP ZFN ; "FN" Token ? +2595 10D6 CA 03 14 JP Z,DOFN ; Yes - Do FN routine +2596 10D9 D6 B6 SUB ZSGN ; Is it a function? +2597 10DB D2 08 11 JP NC,FNOFST ; Yes - Evaluate function +2598 10DE CD 15 10 EVLPAR: CALL OPNPAR ; Evaluate expression in "()" +2599 10E1 CD 10 0A CALL CHKSYN ; Make sure ")" follows +2600 10E4 29 .BYTE ")" +2601 10E5 C9 RET +2602 10E6 +2603 10E6 16 7D MINUS: LD D,7DH ; '-' precedence +2604 10E8 CD 1C 10 CALL EVAL1 ; Evaluate until prec' break +2605 10EB 2A 80 31 LD HL,(NXTOPR) ; Get next operator address +2606 10EE E5 PUSH HL ; Save next operator address +2607 10EF CD 12 1A CALL INVSGN ; Negate value +2608 10F2 CD 0A 10 RETNUM: CALL TSTNUM ; Make sure it's a number +2609 10F5 E1 POP HL ; Restore next operator address +2610 10F6 C9 RET +2611 10F7 +2612 10F7 CD FD 11 CONVAR: CALL GETVAR ; Get variable address to DE +2613 10FA E5 FRMEVL: PUSH HL ; Save code string address +2614 10FB EB EX DE,HL ; Variable address to HL +2615 10FC 22 94 31 LD (FPREG),HL ; Save address of variable +2616 10FF 3A 5D 31 LD A,(TYPE) ; Get type +2617 1102 B7 OR A ; Numeric? +2618 1103 CC 27 1A CALL Z,PHLTFP ; Yes - Move contents to FPREG +2619 1106 E1 POP HL ; Restore code string address +2620 1107 C9 RET +2621 1108 +2622 1108 06 00 FNOFST: LD B,0 ; Get address of function +2623 110A 07 RLCA ; Double function offset +2624 110B 4F LD C,A ; BC = Offset in function table +2625 110C C5 PUSH BC ; Save adjusted token value +2626 110D CD 9A 0B CALL GETCHR ; Get next character +2627 1110 79 LD A,C ; Get adjusted token value +2628 1111 FE 31 CP 2*(ZLEFT-ZSGN)-1; Adj' LEFT$,RIGHT$ or MID$ ? +2629 1113 DA 2F 11 JP C,FNVAL ; No - Do function +2630 1116 CD 15 10 CALL OPNPAR ; Evaluate expression (X,... +2631 1119 CD 10 0A CALL CHKSYN ; Make sure ',' follows +2632 111C 2C .BYTE ',' +2633 111D CD 0B 10 CALL TSTSTR ; Make sure it's a string +2634 1120 EB EX DE,HL ; Save code string address +2635 1121 2A 94 31 LD HL,(FPREG) ; Get address of string +2636 1124 E3 EX (SP),HL ; Save address of string +2637 1125 E5 PUSH HL ; Save adjusted token value +2638 1126 EB EX DE,HL ; Restore code string address +2639 1127 CD 68 17 CALL GETINT ; Get integer 0-255 +2640 112A EB EX DE,HL ; Save code string address +2641 112B E3 EX (SP),HL ; Save integer,HL = adj' token +2642 112C C3 37 11 JP GOFUNC ; Jump to string function +2643 112F +2644 112F CD DE 10 FNVAL: CALL EVLPAR ; Evaluate expression +2645 1132 E3 EX (SP),HL ; HL = Adjusted token value +2646 1133 11 F2 10 LD DE,RETNUM ; Return number from function +2647 1136 D5 PUSH DE ; Save on stack +2648 1137 01 93 04 GOFUNC: LD BC,FNCTAB ; Function routine addresses +2649 113A 09 ADD HL,BC ; Point to right address +2650 113B 4E LD C,(HL) ; Get LSB of address +2651 113C 23 INC HL ; +2652 113D 66 LD H,(HL) ; Get MSB of address +2653 113E 69 LD L,C ; Address to HL +2654 113F E9 JP (HL) ; Jump to function +2655 1140 +2656 1140 15 SGNEXP: DEC D ; Dee to flag negative exponent +2657 1141 FE AD CP ZMINUS ; '-' token ? +2658 1143 C8 RET Z ; Yes - Return +2659 1144 FE 2D CP '-' ; '-' ASCII ? +2660 1146 C8 RET Z ; Yes - Return +2661 1147 14 INC D ; Inc to flag positive exponent +2662 1148 FE 2B CP '+' ; '+' ASCII ? +2663 114A C8 RET Z ; Yes - Return +2664 114B FE AC CP ZPLUS ; '+' token ? +2665 114D C8 RET Z ; Yes - Return +2666 114E 2B DEC HL ; DEC 'cos GETCHR INCs +2667 114F C9 RET ; Return "NZ" +2668 1150 +2669 1150 F6 POR: .BYTE 0F6H ; Flag "OR" +2670 1151 AF PAND: XOR A ; Flag "AND" +2671 1152 F5 PUSH AF ; Save "AND" / "OR" flag +2672 1153 CD 0A 10 CALL TSTNUM ; Make sure it's a number +2673 1156 CD 4C 0C CALL DEINT ; Get integer -32768 to 32767 +2674 1159 F1 POP AF ; Restore "AND" / "OR" flag +2675 115A EB EX DE,HL ; <- Get last +2676 115B C1 POP BC ; <- value +2677 115C E3 EX (SP),HL ; <- from +2678 115D EB EX DE,HL ; <- stack +2679 115E CD 2A 1A CALL FPBCDE ; Move last value to FPREG +2680 1161 F5 PUSH AF ; Save "AND" / "OR" flag +2681 1162 CD 4C 0C CALL DEINT ; Get integer -32768 to 32767 +2682 1165 F1 POP AF ; Restore "AND" / "OR" flag +2683 1166 C1 POP BC ; Get value +2684 1167 79 LD A,C ; Get LSB +2685 1168 21 C1 13 LD HL,ACPASS ; Address of save AC as current +2686 116B C2 73 11 JP NZ,POR1 ; Jump if OR +2687 116E A3 AND E ; "AND" LSBs +2688 116F 4F LD C,A ; Save LSB +2689 1170 78 LD A,B ; Get MBS +2690 1171 A2 AND D ; "AND" MSBs +2691 1172 E9 JP (HL) ; Save AC as current (ACPASS) +2692 1173 +2693 1173 B3 POR1: OR E ; "OR" LSBs +2694 1174 4F LD C,A ; Save LSB +2695 1175 78 LD A,B ; Get MSB +2696 1176 B2 OR D ; "OR" MSBs +2697 1177 E9 JP (HL) ; Save AC as current (ACPASS) +2698 1178 +2699 1178 21 8A 11 TSTRED: LD HL,CMPLOG ; Logical compare routine +2700 117B 3A 5D 31 LD A,(TYPE) ; Get data type +2701 117E 1F RRA ; Carry set = string +2702 117F 7A LD A,D ; Get last precedence value +2703 1180 17 RLA ; Times 2 plus carry +2704 1181 5F LD E,A ; To E +2705 1182 16 64 LD D,64H ; Relational precedence +2706 1184 78 LD A,B ; Get current precedence +2707 1185 BA CP D ; Compare with last +2708 1186 D0 RET NC ; Eval if last was rel' or log' +2709 1187 C3 79 10 JP STKTHS ; Stack this one and get next +2710 118A +2711 118A 8C 11 CMPLOG: .WORD CMPLG1 ; Compare two values / strings +2712 118C 79 CMPLG1: LD A,C ; Get data type +2713 118D B7 OR A +2714 118E 1F RRA +2715 118F C1 POP BC ; Get last expression to BCDE +2716 1190 D1 POP DE +2717 1191 F5 PUSH AF ; Save status +2718 1192 CD 0C 10 CALL CHKTYP ; Check that types match +2719 1195 21 CE 11 LD HL,CMPRES ; Result to comparison +2720 1198 E5 PUSH HL ; Save for RETurn +2721 1199 CA 64 1A JP Z,CMPNUM ; Compare values if numeric +2722 119C AF XOR A ; Compare two strings +2723 119D 32 5D 31 LD (TYPE),A ; Set type to numeric +2724 11A0 D5 PUSH DE ; Save string name +2725 11A1 CD 23 16 CALL GSTRCU ; Get current string +2726 11A4 7E LD A,(HL) ; Get length of string +2727 11A5 23 INC HL +2728 11A6 23 INC HL +2729 11A7 4E LD C,(HL) ; Get LSB of address +2730 11A8 23 INC HL +2731 11A9 46 LD B,(HL) ; Get MSB of address +2732 11AA D1 POP DE ; Restore string name +2733 11AB C5 PUSH BC ; Save address of string +2734 11AC F5 PUSH AF ; Save length of string +2735 11AD CD 27 16 CALL GSTRDE ; Get second string +2736 11B0 CD 38 1A CALL LOADFP ; Get address of second string +2737 11B3 F1 POP AF ; Restore length of string 1 +2738 11B4 57 LD D,A ; Length to D +2739 11B5 E1 POP HL ; Restore address of string 1 +2740 11B6 7B CMPSTR: LD A,E ; Bytes of string 2 to do +2741 11B7 B2 OR D ; Bytes of string 1 to do +2742 11B8 C8 RET Z ; Exit if all bytes compared +2743 11B9 7A LD A,D ; Get bytes of string 1 to do +2744 11BA D6 01 SUB 1 +2745 11BC D8 RET C ; Exit if end of string 1 +2746 11BD AF XOR A +2747 11BE BB CP E ; Bytes of string 2 to do +2748 11BF 3C INC A +2749 11C0 D0 RET NC ; Exit if end of string 2 +2750 11C1 15 DEC D ; Count bytes in string 1 +2751 11C2 1D DEC E ; Count bytes in string 2 +2752 11C3 0A LD A,(BC) ; Byte in string 2 +2753 11C4 BE CP (HL) ; Compare to byte in string 1 +2754 11C5 23 INC HL ; Move up string 1 +2755 11C6 03 INC BC ; Move up string 2 +2756 11C7 CA B6 11 JP Z,CMPSTR ; Same - Try next bytes +2757 11CA 3F CCF ; Flag difference (">" or "<") +2758 11CB C3 F4 19 JP FLGDIF ; "<" gives -1 , ">" gives +1 +2759 11CE +2760 11CE 3C CMPRES: INC A ; Increment current value +2761 11CF 8F ADC A,A ; Double plus carry +2762 11D0 C1 POP BC ; Get other value +2763 11D1 A0 AND B ; Combine them +2764 11D2 C6 FF ADD A,-1 ; Carry set if different +2765 11D4 9F SBC A,A ; 00 - Equal , FF - Different +2766 11D5 C3 FB 19 JP FLGREL ; Set current value & continue +2767 11D8 +2768 11D8 16 5A EVNOT: LD D,5AH ; Precedence value for "NOT" +2769 11DA CD 1C 10 CALL EVAL1 ; Eval until precedence break +2770 11DD CD 0A 10 CALL TSTNUM ; Make sure it's a number +2771 11E0 CD 4C 0C CALL DEINT ; Get integer -32768 - 32767 +2772 11E3 7B LD A,E ; Get LSB +2773 11E4 2F CPL ; Invert LSB +2774 11E5 4F LD C,A ; Save "NOT" of LSB +2775 11E6 7A LD A,D ; Get MSB +2776 11E7 2F CPL ; Invert MSB +2777 11E8 CD C1 13 CALL ACPASS ; Save AC as current +2778 11EB C1 POP BC ; Clean up stack +2779 11EC C3 28 10 JP EVAL3 ; Continue evaluation +2780 11EF +2781 11EF 2B DIMRET: DEC HL ; DEC 'cos GETCHR INCs +2782 11F0 CD 9A 0B CALL GETCHR ; Get next character +2783 11F3 C8 RET Z ; End of DIM statement +2784 11F4 CD 10 0A CALL CHKSYN ; Make sure ',' follows +2785 11F7 2C .BYTE ',' +2786 11F8 01 EF 11 DIM: LD BC,DIMRET ; Return to "DIMRET" +2787 11FB C5 PUSH BC ; Save on stack +2788 11FC F6 .BYTE 0F6H ; Flag "Create" variable +2789 11FD AF GETVAR: XOR A ; Find variable address,to DE +2790 11FE 32 5C 31 LD (LCRFLG),A ; Set locate / create flag +2791 1201 46 LD B,(HL) ; Get First byte of name +2792 1202 CD 38 0C GTFNAM: CALL CHKLTR ; See if a letter +2793 1205 DA 42 07 JP C,SNERR ; ?SN Error if not a letter +2794 1208 AF XOR A +2795 1209 4F LD C,A ; Clear second byte of name +2796 120A 32 5D 31 LD (TYPE),A ; Set type to numeric +2797 120D CD 9A 0B CALL GETCHR ; Get next character +2798 1210 DA 19 12 JP C,SVNAM2 ; Numeric - Save in name +2799 1213 CD 38 0C CALL CHKLTR ; See if a letter +2800 1216 DA 26 12 JP C,CHARTY ; Not a letter - Check type +2801 1219 4F SVNAM2: LD C,A ; Save second byte of name +2802 121A CD 9A 0B ENDNAM: CALL GETCHR ; Get next character +2803 121D DA 1A 12 JP C,ENDNAM ; Numeric - Get another +2804 1220 CD 38 0C CALL CHKLTR ; See if a letter +2805 1223 D2 1A 12 JP NC,ENDNAM ; Letter - Get another +2806 1226 D6 24 CHARTY: SUB '$' ; String variable? +2807 1228 C2 35 12 JP NZ,NOTSTR ; No - Numeric variable +2808 122B 3C INC A ; A = 1 (string type) +2809 122C 32 5D 31 LD (TYPE),A ; Set type to string +2810 122F 0F RRCA ; A = 80H , Flag for string +2811 1230 81 ADD A,C ; 2nd byte of name has bit 7 on +2812 1231 4F LD C,A ; Resave second byte on name +2813 1232 CD 9A 0B CALL GETCHR ; Get next character +2814 1235 3A 7B 31 NOTSTR: LD A,(FORFLG) ; Array name needed ? +2815 1238 3D DEC A +2816 1239 CA E2 12 JP Z,ARLDSV ; Yes - Get array name +2817 123C F2 45 12 JP P,NSCFOR ; No array with "FOR" or "FN" +2818 123F 7E LD A,(HL) ; Get byte again +2819 1240 D6 28 SUB '(' ; Subscripted variable? +2820 1242 CA BA 12 JP Z,SBSCPT ; Yes - Sort out subscript +2821 1245 +2822 1245 AF NSCFOR: XOR A ; Simple variable +2823 1246 32 7B 31 LD (FORFLG),A ; Clear "FOR" flag +2824 1249 E5 PUSH HL ; Save code string address +2825 124A 50 LD D,B ; DE = Variable name to find +2826 124B 59 LD E,C +2827 124C 2A 8E 31 LD HL,(FNRGNM) ; FN argument name +2828 124F CD 0A 0A CALL CPDEHL ; Is it the FN argument? +2829 1252 11 90 31 LD DE,FNARG ; Point to argument value +2830 1255 CA 2A 19 JP Z,POPHRT ; Yes - Return FN argument value +2831 1258 2A 88 31 LD HL,(VAREND) ; End of variables +2832 125B EB EX DE,HL ; Address of end of search +2833 125C 2A 86 31 LD HL,(PROGND) ; Start of variables address +2834 125F CD 0A 0A FNDVAR: CALL CPDEHL ; End of variable list table? +2835 1262 CA 78 12 JP Z,CFEVAL ; Yes - Called from EVAL? +2836 1265 79 LD A,C ; Get second byte of name +2837 1266 96 SUB (HL) ; Compare with name in list +2838 1267 23 INC HL ; Move on to first byte +2839 1268 C2 6D 12 JP NZ,FNTHR ; Different - Find another +2840 126B 78 LD A,B ; Get first byte of name +2841 126C 96 SUB (HL) ; Compare with name in list +2842 126D 23 FNTHR: INC HL ; Move on to LSB of value +2843 126E CA AC 12 JP Z,RETADR ; Found - Return address +2844 1271 23 INC HL ; <- Skip +2845 1272 23 INC HL ; <- over +2846 1273 23 INC HL ; <- F.P. +2847 1274 23 INC HL ; <- value +2848 1275 C3 5F 12 JP FNDVAR ; Keep looking +2849 1278 +2850 1278 E1 CFEVAL: POP HL ; Restore code string address +2851 1279 E3 EX (SP),HL ; Get return address +2852 127A D5 PUSH DE ; Save address of variable +2853 127B 11 FA 10 LD DE,FRMEVL ; Return address in EVAL +2854 127E CD 0A 0A CALL CPDEHL ; Called from EVAL ? +2855 1281 D1 POP DE ; Restore address of variable +2856 1282 CA AF 12 JP Z,RETNUL ; Yes - Return null variable +2857 1285 E3 EX (SP),HL ; Put back return +2858 1286 E5 PUSH HL ; Save code string address +2859 1287 C5 PUSH BC ; Save variable name +2860 1288 01 06 00 LD BC,6 ; 2 byte name plus 4 byte data +2861 128B 2A 8A 31 LD HL,(ARREND) ; End of arrays +2862 128E E5 PUSH HL ; Save end of arrays +2863 128F 09 ADD HL,BC ; Move up 6 bytes +2864 1290 C1 POP BC ; Source address in BC +2865 1291 E5 PUSH HL ; Save new end address +2866 1292 CD 0E 07 CALL MOVUP ; Move arrays up +2867 1295 E1 POP HL ; Restore new end address +2868 1296 22 8A 31 LD (ARREND),HL ; Set new end address +2869 1299 60 LD H,B ; End of variables to HL +2870 129A 69 LD L,C +2871 129B 22 88 31 LD (VAREND),HL ; Set new end address +2872 129E +2873 129E 2B ZEROLP: DEC HL ; Back through to zero variable +2874 129F 36 00 LD (HL),0 ; Zero byte in variable +2875 12A1 CD 0A 0A CALL CPDEHL ; Done them all? +2876 12A4 C2 9E 12 JP NZ,ZEROLP ; No - Keep on going +2877 12A7 D1 POP DE ; Get variable name +2878 12A8 73 LD (HL),E ; Store second character +2879 12A9 23 INC HL +2880 12AA 72 LD (HL),D ; Store first character +2881 12AB 23 INC HL +2882 12AC EB RETADR: EX DE,HL ; Address of variable in DE +2883 12AD E1 POP HL ; Restore code string address +2884 12AE C9 RET +2885 12AF +2886 12AF 32 97 31 RETNUL: LD (FPEXP),A ; Set result to zero +2887 12B2 21 DE 06 LD HL,ZERBYT ; Also set a null string +2888 12B5 22 94 31 LD (FPREG),HL ; Save for EVAL +2889 12B8 E1 POP HL ; Restore code string address +2890 12B9 C9 RET +2891 12BA +2892 12BA E5 SBSCPT: PUSH HL ; Save code string address +2893 12BB 2A 5C 31 LD HL,(LCRFLG) ; Locate/Create and Type +2894 12BE E3 EX (SP),HL ; Save and get code string +2895 12BF 57 LD D,A ; Zero number of dimensions +2896 12C0 D5 SCPTLP: PUSH DE ; Save number of dimensions +2897 12C1 C5 PUSH BC ; Save array name +2898 12C2 CD 40 0C CALL FPSINT ; Get subscript (0-32767) +2899 12C5 C1 POP BC ; Restore array name +2900 12C6 F1 POP AF ; Get number of dimensions +2901 12C7 EB EX DE,HL +2902 12C8 E3 EX (SP),HL ; Save subscript value +2903 12C9 E5 PUSH HL ; Save LCRFLG and TYPE +2904 12CA EB EX DE,HL +2905 12CB 3C INC A ; Count dimensions +2906 12CC 57 LD D,A ; Save in D +2907 12CD 7E LD A,(HL) ; Get next byte in code string +2908 12CE FE 2C CP ',' ; Comma (more to come)? +2909 12D0 CA C0 12 JP Z,SCPTLP ; Yes - More subscripts +2910 12D3 CD 10 0A CALL CHKSYN ; Make sure ")" follows +2911 12D6 29 .BYTE ")" +2912 12D7 22 80 31 LD (NXTOPR),HL ; Save code string address +2913 12DA E1 POP HL ; Get LCRFLG and TYPE +2914 12DB 22 5C 31 LD (LCRFLG),HL ; Restore Locate/create & type +2915 12DE 1E 00 LD E,0 ; Flag not CSAVE* or CLOAD* +2916 12E0 D5 PUSH DE ; Save number of dimensions (D) +2917 12E1 11 .BYTE 11H ; Skip "PUSH HL" and "PUSH AF' +2918 12E2 +2919 12E2 E5 ARLDSV: PUSH HL ; Save code string address +2920 12E3 F5 PUSH AF ; A = 00 , Flags set = Z,N +2921 12E4 2A 88 31 LD HL,(VAREND) ; Start of arrays +2922 12E7 3E .BYTE 3EH ; Skip "ADD HL,DE" +2923 12E8 19 FNDARY: ADD HL,DE ; Move to next array start +2924 12E9 EB EX DE,HL +2925 12EA 2A 8A 31 LD HL,(ARREND) ; End of arrays +2926 12ED EB EX DE,HL ; Current array pointer +2927 12EE CD 0A 0A CALL CPDEHL ; End of arrays found? +2928 12F1 CA 1A 13 JP Z,CREARY ; Yes - Create array +2929 12F4 7E LD A,(HL) ; Get second byte of name +2930 12F5 B9 CP C ; Compare with name given +2931 12F6 23 INC HL ; Move on +2932 12F7 C2 FC 12 JP NZ,NXTARY ; Different - Find next array +2933 12FA 7E LD A,(HL) ; Get first byte of name +2934 12FB B8 CP B ; Compare with name given +2935 12FC 23 NXTARY: INC HL ; Move on +2936 12FD 5E LD E,(HL) ; Get LSB of next array address +2937 12FE 23 INC HL +2938 12FF 56 LD D,(HL) ; Get MSB of next array address +2939 1300 23 INC HL +2940 1301 C2 E8 12 JP NZ,FNDARY ; Not found - Keep looking +2941 1304 3A 5C 31 LD A,(LCRFLG) ; Found Locate or Create it? +2942 1307 B7 OR A +2943 1308 C2 4B 07 JP NZ,DDERR ; Create - ?DD Error +2944 130B F1 POP AF ; Locate - Get number of dim'ns +2945 130C 44 LD B,H ; BC Points to array dim'ns +2946 130D 4D LD C,L +2947 130E CA 2A 19 JP Z,POPHRT ; Jump if array load/save +2948 1311 96 SUB (HL) ; Same number of dimensions? +2949 1312 CA 78 13 JP Z,FINDEL ; Yes - Find element +2950 1315 1E 10 BSERR: LD E,BS ; ?BS Error +2951 1317 C3 56 07 JP ERROR ; Output error +2952 131A +2953 131A 11 04 00 CREARY: LD DE,4 ; 4 Bytes per entry +2954 131D F1 POP AF ; Array to save or 0 dim'ns? +2955 131E CA 61 0C JP Z,FCERR ; Yes - ?FC Error +2956 1321 71 LD (HL),C ; Save second byte of name +2957 1322 23 INC HL +2958 1323 70 LD (HL),B ; Save first byte of name +2959 1324 23 INC HL +2960 1325 4F LD C,A ; Number of dimensions to C +2961 1326 CD 1F 07 CALL CHKSTK ; Check if enough memory +2962 1329 23 INC HL ; Point to number of dimensions +2963 132A 23 INC HL +2964 132B 22 75 31 LD (CUROPR),HL ; Save address of pointer +2965 132E 71 LD (HL),C ; Set number of dimensions +2966 132F 23 INC HL +2967 1330 3A 5C 31 LD A,(LCRFLG) ; Locate of Create? +2968 1333 17 RLA ; Carry set = Create +2969 1334 79 LD A,C ; Get number of dimensions +2970 1335 01 0B 00 CRARLP: LD BC,10+1 ; Default dimension size 10 +2971 1338 D2 3D 13 JP NC,DEFSIZ ; Locate - Set default size +2972 133B C1 POP BC ; Get specified dimension size +2973 133C 03 INC BC ; Include zero element +2974 133D 71 DEFSIZ: LD (HL),C ; Save LSB of dimension size +2975 133E 23 INC HL +2976 133F 70 LD (HL),B ; Save MSB of dimension size +2977 1340 23 INC HL +2978 1341 F5 PUSH AF ; Save num' of dim'ns an status +2979 1342 E5 PUSH HL ; Save address of dim'n size +2980 1343 CD D5 1A CALL MLDEBC ; Multiply DE by BC to find +2981 1346 EB EX DE,HL ; amount of mem needed (to DE) +2982 1347 E1 POP HL ; Restore address of dimension +2983 1348 F1 POP AF ; Restore number of dimensions +2984 1349 3D DEC A ; Count them +2985 134A C2 35 13 JP NZ,CRARLP ; Do next dimension if more +2986 134D F5 PUSH AF ; Save locate/create flag +2987 134E 42 LD B,D ; MSB of memory needed +2988 134F 4B LD C,E ; LSB of memory needed +2989 1350 EB EX DE,HL +2990 1351 19 ADD HL,DE ; Add bytes to array start +2991 1352 DA 37 07 JP C,OMERR ; Too big - Error +2992 1355 CD 28 07 CALL ENFMEM ; See if enough memory +2993 1358 22 8A 31 LD (ARREND),HL ; Save new end of array +2994 135B +2995 135B 2B ZERARY: DEC HL ; Back through array data +2996 135C 36 00 LD (HL),0 ; Set array element to zero +2997 135E CD 0A 0A CALL CPDEHL ; All elements zeroed? +2998 1361 C2 5B 13 JP NZ,ZERARY ; No - Keep on going +2999 1364 03 INC BC ; Number of bytes + 1 +3000 1365 57 LD D,A ; A=0 +3001 1366 2A 75 31 LD HL,(CUROPR) ; Get address of array +3002 1369 5E LD E,(HL) ; Number of dimensions +3003 136A EB EX DE,HL ; To HL +3004 136B 29 ADD HL,HL ; Two bytes per dimension size +3005 136C 09 ADD HL,BC ; Add number of bytes +3006 136D EB EX DE,HL ; Bytes needed to DE +3007 136E 2B DEC HL +3008 136F 2B DEC HL +3009 1370 73 LD (HL),E ; Save LSB of bytes needed +3010 1371 23 INC HL +3011 1372 72 LD (HL),D ; Save MSB of bytes needed +3012 1373 23 INC HL +3013 1374 F1 POP AF ; Locate / Create? +3014 1375 DA 9C 13 JP C,ENDDIM ; A is 0 , End if create +3015 1378 47 FINDEL: LD B,A ; Find array element +3016 1379 4F LD C,A +3017 137A 7E LD A,(HL) ; Number of dimensions +3018 137B 23 INC HL +3019 137C 16 .BYTE 16H ; Skip "POP HL" +3020 137D E1 FNDELP: POP HL ; Address of next dim' size +3021 137E 5E LD E,(HL) ; Get LSB of dim'n size +3022 137F 23 INC HL +3023 1380 56 LD D,(HL) ; Get MSB of dim'n size +3024 1381 23 INC HL +3025 1382 E3 EX (SP),HL ; Save address - Get index +3026 1383 F5 PUSH AF ; Save number of dim'ns +3027 1384 CD 0A 0A CALL CPDEHL ; Dimension too large? +3028 1387 D2 15 13 JP NC,BSERR ; Yes - ?BS Error +3029 138A E5 PUSH HL ; Save index +3030 138B CD D5 1A CALL MLDEBC ; Multiply previous by size +3031 138E D1 POP DE ; Index supplied to DE +3032 138F 19 ADD HL,DE ; Add index to pointer +3033 1390 F1 POP AF ; Number of dimensions +3034 1391 3D DEC A ; Count them +3035 1392 44 LD B,H ; MSB of pointer +3036 1393 4D LD C,L ; LSB of pointer +3037 1394 C2 7D 13 JP NZ,FNDELP ; More - Keep going +3038 1397 29 ADD HL,HL ; 4 Bytes per element +3039 1398 29 ADD HL,HL +3040 1399 C1 POP BC ; Start of array +3041 139A 09 ADD HL,BC ; Point to element +3042 139B EB EX DE,HL ; Address of element to DE +3043 139C 2A 80 31 ENDDIM: LD HL,(NXTOPR) ; Got code string address +3044 139F C9 RET +3045 13A0 +3046 13A0 2A 8A 31 FRE: LD HL,(ARREND) ; Start of free memory +3047 13A3 EB EX DE,HL ; To DE +3048 13A4 21 00 00 LD HL,0 ; End of free memory +3049 13A7 39 ADD HL,SP ; Current stack value +3050 13A8 3A 5D 31 LD A,(TYPE) ; Dummy argument type +3051 13AB B7 OR A +3052 13AC CA BC 13 JP Z,FRENUM ; Numeric - Free variable space +3053 13AF CD 23 16 CALL GSTRCU ; Current string to pool +3054 13B2 CD 23 15 CALL GARBGE ; Garbage collection +3055 13B5 2A 0A 31 LD HL,(STRSPC) ; Bottom of string space in use +3056 13B8 EB EX DE,HL ; To DE +3057 13B9 2A 73 31 LD HL,(STRBOT) ; Bottom of string space +3058 13BC 7D FRENUM: LD A,L ; Get LSB of end +3059 13BD 93 SUB E ; Subtract LSB of beginning +3060 13BE 4F LD C,A ; Save difference if C +3061 13BF 7C LD A,H ; Get MSB of end +3062 13C0 9A SBC A,D ; Subtract MSB of beginning +3063 13C1 41 ACPASS: LD B,C ; Return integer AC +3064 13C2 50 ABPASS: LD D,B ; Return integer AB +3065 13C3 1E 00 LD E,0 +3066 13C5 21 5D 31 LD HL,TYPE ; Point to type +3067 13C8 73 LD (HL),E ; Set type to numeric +3068 13C9 06 90 LD B,80H+16 ; 16 bit integer +3069 13CB C3 00 1A JP RETINT ; Return the integr +3070 13CE +3071 13CE 3A 5B 31 POS: LD A,(CURPOS) ; Get cursor position +3072 13D1 47 PASSA: LD B,A ; Put A into AB +3073 13D2 AF XOR A ; Zero A +3074 13D3 C3 C2 13 JP ABPASS ; Return integer AB +3075 13D6 +3076 13D6 CD 59 14 DEF: CALL CHEKFN ; Get "FN" and name +3077 13D9 CD 4B 14 CALL IDTEST ; Test for illegal direct +3078 13DC 01 31 0D LD BC,DATA ; To get next statement +3079 13DF C5 PUSH BC ; Save address for RETurn +3080 13E0 D5 PUSH DE ; Save address of function ptr +3081 13E1 CD 10 0A CALL CHKSYN ; Make sure "(" follows +3082 13E4 28 .BYTE "(" +3083 13E5 CD FD 11 CALL GETVAR ; Get argument variable name +3084 13E8 E5 PUSH HL ; Save code string address +3085 13E9 EB EX DE,HL ; Argument address to HL +3086 13EA 2B DEC HL +3087 13EB 56 LD D,(HL) ; Get first byte of arg name +3088 13EC 2B DEC HL +3089 13ED 5E LD E,(HL) ; Get second byte of arg name +3090 13EE E1 POP HL ; Restore code string address +3091 13EF CD 0A 10 CALL TSTNUM ; Make sure numeric argument +3092 13F2 CD 10 0A CALL CHKSYN ; Make sure ")" follows +3093 13F5 29 .BYTE ")" +3094 13F6 CD 10 0A CALL CHKSYN ; Make sure "=" follows +3095 13F9 B4 .BYTE ZEQUAL ; "=" token +3096 13FA 44 LD B,H ; Code string address to BC +3097 13FB 4D LD C,L +3098 13FC E3 EX (SP),HL ; Save code str , Get FN ptr +3099 13FD 71 LD (HL),C ; Save LSB of FN code string +3100 13FE 23 INC HL +3101 13FF 70 LD (HL),B ; Save MSB of FN code string +3102 1400 C3 98 14 JP SVSTAD ; Save address and do function +3103 1403 +3104 1403 CD 59 14 DOFN: CALL CHEKFN ; Make sure FN follows +3105 1406 D5 PUSH DE ; Save function pointer address +3106 1407 CD DE 10 CALL EVLPAR ; Evaluate expression in "()" +3107 140A CD 0A 10 CALL TSTNUM ; Make sure numeric result +3108 140D E3 EX (SP),HL ; Save code str , Get FN ptr +3109 140E 5E LD E,(HL) ; Get LSB of FN code string +3110 140F 23 INC HL +3111 1410 56 LD D,(HL) ; Get MSB of FN code string +3112 1411 23 INC HL +3113 1412 7A LD A,D ; And function DEFined? +3114 1413 B3 OR E +3115 1414 CA 4E 07 JP Z,UFERR ; No - ?UF Error +3116 1417 7E LD A,(HL) ; Get LSB of argument address +3117 1418 23 INC HL +3118 1419 66 LD H,(HL) ; Get MSB of argument address +3119 141A 6F LD L,A ; HL = Arg variable address +3120 141B E5 PUSH HL ; Save it +3121 141C 2A 8E 31 LD HL,(FNRGNM) ; Get old argument name +3122 141F E3 EX (SP),HL ; ; Save old , Get new +3123 1420 22 8E 31 LD (FNRGNM),HL ; Set new argument name +3124 1423 2A 92 31 LD HL,(FNARG+2) ; Get LSB,NLSB of old arg value +3125 1426 E5 PUSH HL ; Save it +3126 1427 2A 90 31 LD HL,(FNARG) ; Get MSB,EXP of old arg value +3127 142A E5 PUSH HL ; Save it +3128 142B 21 90 31 LD HL,FNARG ; HL = Value of argument +3129 142E D5 PUSH DE ; Save FN code string address +3130 142F CD 41 1A CALL FPTHL ; Move FPREG to argument +3131 1432 E1 POP HL ; Get FN code string address +3132 1433 CD 07 10 CALL GETNUM ; Get value from function +3133 1436 2B DEC HL ; DEC 'cos GETCHR INCs +3134 1437 CD 9A 0B CALL GETCHR ; Get next character +3135 143A C2 42 07 JP NZ,SNERR ; Bad character in FN - Error +3136 143D E1 POP HL ; Get MSB,EXP of old arg +3137 143E 22 90 31 LD (FNARG),HL ; Restore it +3138 1441 E1 POP HL ; Get LSB,NLSB of old arg +3139 1442 22 92 31 LD (FNARG+2),HL ; Restore it +3140 1445 E1 POP HL ; Get name of old arg +3141 1446 22 8E 31 LD (FNRGNM),HL ; Restore it +3142 1449 E1 POP HL ; Restore code string address +3143 144A C9 RET +3144 144B +3145 144B E5 IDTEST: PUSH HL ; Save code string address +3146 144C 2A 0C 31 LD HL,(LINEAT) ; Get current line number +3147 144F 23 INC HL ; -1 means direct statement +3148 1450 7C LD A,H +3149 1451 B5 OR L +3150 1452 E1 POP HL ; Restore code string address +3151 1453 C0 RET NZ ; Return if in program +3152 1454 1E 16 LD E,ID ; ?ID Error +3153 1456 C3 56 07 JP ERROR +3154 1459 +3155 1459 CD 10 0A CHEKFN: CALL CHKSYN ; Make sure FN follows +3156 145C A7 .BYTE ZFN ; "FN" token +3157 145D 3E 80 LD A,80H +3158 145F 32 7B 31 LD (FORFLG),A ; Flag FN name to find +3159 1462 B6 OR (HL) ; FN name has bit 7 set +3160 1463 47 LD B,A ; in first byte of name +3161 1464 CD 02 12 CALL GTFNAM ; Get FN name +3162 1467 C3 0A 10 JP TSTNUM ; Make sure numeric function +3163 146A +3164 146A CD 0A 10 STR: CALL TSTNUM ; Make sure it's a number +3165 146D CD 8E 1B CALL NUMASC ; Turn number into text +3166 1470 CD 9E 14 STR1: CALL CRTST ; Create string entry for it +3167 1473 CD 23 16 CALL GSTRCU ; Current string to pool +3168 1476 01 7E 16 LD BC,TOPOOL ; Save in string pool +3169 1479 C5 PUSH BC ; Save address on stack +3170 147A +3171 147A 7E SAVSTR: LD A,(HL) ; Get string length +3172 147B 23 INC HL +3173 147C 23 INC HL +3174 147D E5 PUSH HL ; Save pointer to string +3175 147E CD F9 14 CALL TESTR ; See if enough string space +3176 1481 E1 POP HL ; Restore pointer to string +3177 1482 4E LD C,(HL) ; Get LSB of address +3178 1483 23 INC HL +3179 1484 46 LD B,(HL) ; Get MSB of address +3180 1485 CD 92 14 CALL CRTMST ; Create string entry +3181 1488 E5 PUSH HL ; Save pointer to MSB of addr +3182 1489 6F LD L,A ; Length of string +3183 148A CD 16 16 CALL TOSTRA ; Move to string area +3184 148D D1 POP DE ; Restore pointer to MSB +3185 148E C9 RET +3186 148F +3187 148F CD F9 14 MKTMST: CALL TESTR ; See if enough string space +3188 1492 21 6F 31 CRTMST: LD HL,TMPSTR ; Temporary string +3189 1495 E5 PUSH HL ; Save it +3190 1496 77 LD (HL),A ; Save length of string +3191 1497 23 INC HL +3192 1498 23 SVSTAD: INC HL +3193 1499 73 LD (HL),E ; Save LSB of address +3194 149A 23 INC HL +3195 149B 72 LD (HL),D ; Save MSB of address +3196 149C E1 POP HL ; Restore pointer +3197 149D C9 RET +3198 149E +3199 149E 2B CRTST: DEC HL ; DEC - INCed after +3200 149F 06 22 QTSTR: LD B,'"' ; Terminating quote +3201 14A1 50 LD D,B ; Quote to D +3202 14A2 E5 DTSTR: PUSH HL ; Save start +3203 14A3 0E FF LD C,-1 ; Set counter to -1 +3204 14A5 23 QTSTLP: INC HL ; Move on +3205 14A6 7E LD A,(HL) ; Get byte +3206 14A7 0C INC C ; Count bytes +3207 14A8 B7 OR A ; End of line? +3208 14A9 CA B4 14 JP Z,CRTSTE ; Yes - Create string entry +3209 14AC BA CP D ; Terminator D found? +3210 14AD CA B4 14 JP Z,CRTSTE ; Yes - Create string entry +3211 14B0 B8 CP B ; Terminator B found? +3212 14B1 C2 A5 14 JP NZ,QTSTLP ; No - Keep looking +3213 14B4 FE 22 CRTSTE: CP '"' ; End with '"'? +3214 14B6 CC 9A 0B CALL Z,GETCHR ; Yes - Get next character +3215 14B9 E3 EX (SP),HL ; Starting quote +3216 14BA 23 INC HL ; First byte of string +3217 14BB EB EX DE,HL ; To DE +3218 14BC 79 LD A,C ; Get length +3219 14BD CD 92 14 CALL CRTMST ; Create string entry +3220 14C0 11 6F 31 TSTOPL: LD DE,TMPSTR ; Temporary string +3221 14C3 2A 61 31 LD HL,(TMSTPT) ; Temporary string pool pointer +3222 14C6 22 94 31 LD (FPREG),HL ; Save address of string ptr +3223 14C9 3E 01 LD A,1 +3224 14CB 32 5D 31 LD (TYPE),A ; Set type to string +3225 14CE CD 44 1A CALL DETHL4 ; Move string to pool +3226 14D1 CD 0A 0A CALL CPDEHL ; Out of string pool? +3227 14D4 22 61 31 LD (TMSTPT),HL ; Save new pointer +3228 14D7 E1 POP HL ; Restore code string address +3229 14D8 7E LD A,(HL) ; Get next code byte +3230 14D9 C0 RET NZ ; Return if pool OK +3231 14DA 1E 1E LD E,ST ; ?ST Error +3232 14DC C3 56 07 JP ERROR ; String pool overflow +3233 14DF +3234 14DF 23 PRNUMS: INC HL ; Skip leading space +3235 14E0 CD 9E 14 PRS: CALL CRTST ; Create string entry for it +3236 14E3 CD 23 16 PRS1: CALL GSTRCU ; Current string to pool +3237 14E6 CD 38 1A CALL LOADFP ; Move string block to BCDE +3238 14E9 1C INC E ; Length + 1 +3239 14EA 1D PRSLP: DEC E ; Count characters +3240 14EB C8 RET Z ; End of string +3241 14EC 0A LD A,(BC) ; Get byte to output +3242 14ED CD 1B 0A CALL OUTC ; Output character in A +3243 14F0 FE 0D CP CR ; Return? +3244 14F2 CC 4C 0E CALL Z,DONULL ; Yes - Do nulls +3245 14F5 03 INC BC ; Next byte in string +3246 14F6 C3 EA 14 JP PRSLP ; More characters to output +3247 14F9 +3248 14F9 B7 TESTR: OR A ; Test if enough room +3249 14FA 0E .BYTE 0EH ; No garbage collection done +3250 14FB F1 GRBDON: POP AF ; Garbage collection done +3251 14FC F5 PUSH AF ; Save status +3252 14FD 2A 0A 31 LD HL,(STRSPC) ; Bottom of string space in use +3253 1500 EB EX DE,HL ; To DE +3254 1501 2A 73 31 LD HL,(STRBOT) ; Bottom of string area +3255 1504 2F CPL ; Negate length (Top down) +3256 1505 4F LD C,A ; -Length to BC +3257 1506 06 FF LD B,-1 ; BC = -ve length of string +3258 1508 09 ADD HL,BC ; Add to bottom of space in use +3259 1509 23 INC HL ; Plus one for 2's complement +3260 150A CD 0A 0A CALL CPDEHL ; Below string RAM area? +3261 150D DA 17 15 JP C,TESTOS ; Tidy up if not done else err +3262 1510 22 73 31 LD (STRBOT),HL ; Save new bottom of area +3263 1513 23 INC HL ; Point to first byte of string +3264 1514 EB EX DE,HL ; Address to DE +3265 1515 F1 POPAF: POP AF ; Throw away status push +3266 1516 C9 RET +3267 1517 +3268 1517 F1 TESTOS: POP AF ; Garbage collect been done? +3269 1518 1E 1A LD E,OS ; ?OS Error +3270 151A CA 56 07 JP Z,ERROR ; Yes - Not enough string apace +3271 151D BF CP A ; Flag garbage collect done +3272 151E F5 PUSH AF ; Save status +3273 151F 01 FB 14 LD BC,GRBDON ; Garbage collection done +3274 1522 C5 PUSH BC ; Save for RETurn +3275 1523 2A 5F 31 GARBGE: LD HL,(LSTRAM) ; Get end of RAM pointer +3276 1526 22 73 31 GARBLP: LD (STRBOT),HL ; Reset string pointer +3277 1529 21 00 00 LD HL,0 +3278 152C E5 PUSH HL ; Flag no string found +3279 152D 2A 0A 31 LD HL,(STRSPC) ; Get bottom of string space +3280 1530 E5 PUSH HL ; Save bottom of string space +3281 1531 21 63 31 LD HL,TMSTPL ; Temporary string pool +3282 1534 EB GRBLP: EX DE,HL +3283 1535 2A 61 31 LD HL,(TMSTPT) ; Temporary string pool pointer +3284 1538 EB EX DE,HL +3285 1539 CD 0A 0A CALL CPDEHL ; Temporary string pool done? +3286 153C 01 34 15 LD BC,GRBLP ; Loop until string pool done +3287 153F C2 88 15 JP NZ,STPOOL ; No - See if in string area +3288 1542 2A 86 31 LD HL,(PROGND) ; Start of simple variables +3289 1545 EB SMPVAR: EX DE,HL +3290 1546 2A 88 31 LD HL,(VAREND) ; End of simple variables +3291 1549 EB EX DE,HL +3292 154A CD 0A 0A CALL CPDEHL ; All simple strings done? +3293 154D CA 5B 15 JP Z,ARRLP ; Yes - Do string arrays +3294 1550 7E LD A,(HL) ; Get type of variable +3295 1551 23 INC HL +3296 1552 23 INC HL +3297 1553 B7 OR A ; "S" flag set if string +3298 1554 CD 8B 15 CALL STRADD ; See if string in string area +3299 1557 C3 45 15 JP SMPVAR ; Loop until simple ones done +3300 155A +3301 155A C1 GNXARY: POP BC ; Scrap address of this array +3302 155B EB ARRLP: EX DE,HL +3303 155C 2A 8A 31 LD HL,(ARREND) ; End of string arrays +3304 155F EB EX DE,HL +3305 1560 CD 0A 0A CALL CPDEHL ; All string arrays done? +3306 1563 CA B1 15 JP Z,SCNEND ; Yes - Move string if found +3307 1566 CD 38 1A CALL LOADFP ; Get array name to BCDE +3308 1569 7B LD A,E ; Get type of array +3309 156A E5 PUSH HL ; Save address of num of dim'ns +3310 156B 09 ADD HL,BC ; Start of next array +3311 156C B7 OR A ; Test type of array +3312 156D F2 5A 15 JP P,GNXARY ; Numeric array - Ignore it +3313 1570 22 75 31 LD (CUROPR),HL ; Save address of next array +3314 1573 E1 POP HL ; Get address of num of dim'ns +3315 1574 4E LD C,(HL) ; BC = Number of dimensions +3316 1575 06 00 LD B,0 +3317 1577 09 ADD HL,BC ; Two bytes per dimension size +3318 1578 09 ADD HL,BC +3319 1579 23 INC HL ; Plus one for number of dim'ns +3320 157A EB GRBARY: EX DE,HL +3321 157B 2A 75 31 LD HL,(CUROPR) ; Get address of next array +3322 157E EB EX DE,HL +3323 157F CD 0A 0A CALL CPDEHL ; Is this array finished? +3324 1582 CA 5B 15 JP Z,ARRLP ; Yes - Get next one +3325 1585 01 7A 15 LD BC,GRBARY ; Loop until array all done +3326 1588 C5 STPOOL: PUSH BC ; Save return address +3327 1589 F6 80 OR 80H ; Flag string type +3328 158B 7E STRADD: LD A,(HL) ; Get string length +3329 158C 23 INC HL +3330 158D 23 INC HL +3331 158E 5E LD E,(HL) ; Get LSB of string address +3332 158F 23 INC HL +3333 1590 56 LD D,(HL) ; Get MSB of string address +3334 1591 23 INC HL +3335 1592 F0 RET P ; Not a string - Return +3336 1593 B7 OR A ; Set flags on string length +3337 1594 C8 RET Z ; Null string - Return +3338 1595 44 LD B,H ; Save variable pointer +3339 1596 4D LD C,L +3340 1597 2A 73 31 LD HL,(STRBOT) ; Bottom of new area +3341 159A CD 0A 0A CALL CPDEHL ; String been done? +3342 159D 60 LD H,B ; Restore variable pointer +3343 159E 69 LD L,C +3344 159F D8 RET C ; String done - Ignore +3345 15A0 E1 POP HL ; Return address +3346 15A1 E3 EX (SP),HL ; Lowest available string area +3347 15A2 CD 0A 0A CALL CPDEHL ; String within string area? +3348 15A5 E3 EX (SP),HL ; Lowest available string area +3349 15A6 E5 PUSH HL ; Re-save return address +3350 15A7 60 LD H,B ; Restore variable pointer +3351 15A8 69 LD L,C +3352 15A9 D0 RET NC ; Outside string area - Ignore +3353 15AA C1 POP BC ; Get return , Throw 2 away +3354 15AB F1 POP AF ; +3355 15AC F1 POP AF ; +3356 15AD E5 PUSH HL ; Save variable pointer +3357 15AE D5 PUSH DE ; Save address of current +3358 15AF C5 PUSH BC ; Put back return address +3359 15B0 C9 RET ; Go to it +3360 15B1 +3361 15B1 D1 SCNEND: POP DE ; Addresses of strings +3362 15B2 E1 POP HL ; +3363 15B3 7D LD A,L ; HL = 0 if no more to do +3364 15B4 B4 OR H +3365 15B5 C8 RET Z ; No more to do - Return +3366 15B6 2B DEC HL +3367 15B7 46 LD B,(HL) ; MSB of address of string +3368 15B8 2B DEC HL +3369 15B9 4E LD C,(HL) ; LSB of address of string +3370 15BA E5 PUSH HL ; Save variable address +3371 15BB 2B DEC HL +3372 15BC 2B DEC HL +3373 15BD 6E LD L,(HL) ; HL = Length of string +3374 15BE 26 00 LD H,0 +3375 15C0 09 ADD HL,BC ; Address of end of string+1 +3376 15C1 50 LD D,B ; String address to DE +3377 15C2 59 LD E,C +3378 15C3 2B DEC HL ; Last byte in string +3379 15C4 44 LD B,H ; Address to BC +3380 15C5 4D LD C,L +3381 15C6 2A 73 31 LD HL,(STRBOT) ; Current bottom of string area +3382 15C9 CD 11 07 CALL MOVSTR ; Move string to new address +3383 15CC E1 POP HL ; Restore variable address +3384 15CD 71 LD (HL),C ; Save new LSB of address +3385 15CE 23 INC HL +3386 15CF 70 LD (HL),B ; Save new MSB of address +3387 15D0 69 LD L,C ; Next string area+1 to HL +3388 15D1 60 LD H,B +3389 15D2 2B DEC HL ; Next string area address +3390 15D3 C3 26 15 JP GARBLP ; Look for more strings +3391 15D6 +3392 15D6 C5 CONCAT: PUSH BC ; Save prec' opr & code string +3393 15D7 E5 PUSH HL ; +3394 15D8 2A 94 31 LD HL,(FPREG) ; Get first string +3395 15DB E3 EX (SP),HL ; Save first string +3396 15DC CD 90 10 CALL OPRND ; Get second string +3397 15DF E3 EX (SP),HL ; Restore first string +3398 15E0 CD 0B 10 CALL TSTSTR ; Make sure it's a string +3399 15E3 7E LD A,(HL) ; Get length of second string +3400 15E4 E5 PUSH HL ; Save first string +3401 15E5 2A 94 31 LD HL,(FPREG) ; Get second string +3402 15E8 E5 PUSH HL ; Save second string +3403 15E9 86 ADD A,(HL) ; Add length of second string +3404 15EA 1E 1C LD E,LS ; ?LS Error +3405 15EC DA 56 07 JP C,ERROR ; String too long - Error +3406 15EF CD 8F 14 CALL MKTMST ; Make temporary string +3407 15F2 D1 POP DE ; Get second string to DE +3408 15F3 CD 27 16 CALL GSTRDE ; Move to string pool if needed +3409 15F6 E3 EX (SP),HL ; Get first string +3410 15F7 CD 26 16 CALL GSTRHL ; Move to string pool if needed +3411 15FA E5 PUSH HL ; Save first string +3412 15FB 2A 71 31 LD HL,(TMPSTR+2) ; Temporary string address +3413 15FE EB EX DE,HL ; To DE +3414 15FF CD 0D 16 CALL SSTSA ; First string to string area +3415 1602 CD 0D 16 CALL SSTSA ; Second string to string area +3416 1605 21 25 10 LD HL,EVAL2 ; Return to evaluation loop +3417 1608 E3 EX (SP),HL ; Save return,get code string +3418 1609 E5 PUSH HL ; Save code string address +3419 160A C3 C0 14 JP TSTOPL ; To temporary string to pool +3420 160D +3421 160D E1 SSTSA: POP HL ; Return address +3422 160E E3 EX (SP),HL ; Get string block,save return +3423 160F 7E LD A,(HL) ; Get length of string +3424 1610 23 INC HL +3425 1611 23 INC HL +3426 1612 4E LD C,(HL) ; Get LSB of string address +3427 1613 23 INC HL +3428 1614 46 LD B,(HL) ; Get MSB of string address +3429 1615 6F LD L,A ; Length to L +3430 1616 2C TOSTRA: INC L ; INC - DECed after +3431 1617 2D TSALP: DEC L ; Count bytes moved +3432 1618 C8 RET Z ; End of string - Return +3433 1619 0A LD A,(BC) ; Get source +3434 161A 12 LD (DE),A ; Save destination +3435 161B 03 INC BC ; Next source +3436 161C 13 INC DE ; Next destination +3437 161D C3 17 16 JP TSALP ; Loop until string moved +3438 1620 +3439 1620 CD 0B 10 GETSTR: CALL TSTSTR ; Make sure it's a string +3440 1623 2A 94 31 GSTRCU: LD HL,(FPREG) ; Get current string +3441 1626 EB GSTRHL: EX DE,HL ; Save DE +3442 1627 CD 41 16 GSTRDE: CALL BAKTMP ; Was it last tmp-str? +3443 162A EB EX DE,HL ; Restore DE +3444 162B C0 RET NZ ; No - Return +3445 162C D5 PUSH DE ; Save string +3446 162D 50 LD D,B ; String block address to DE +3447 162E 59 LD E,C +3448 162F 1B DEC DE ; Point to length +3449 1630 4E LD C,(HL) ; Get string length +3450 1631 2A 73 31 LD HL,(STRBOT) ; Current bottom of string area +3451 1634 CD 0A 0A CALL CPDEHL ; Last one in string area? +3452 1637 C2 3F 16 JP NZ,POPHL ; No - Return +3453 163A 47 LD B,A ; Clear B (A=0) +3454 163B 09 ADD HL,BC ; Remove string from str' area +3455 163C 22 73 31 LD (STRBOT),HL ; Save new bottom of str' area +3456 163F E1 POPHL: POP HL ; Restore string +3457 1640 C9 RET +3458 1641 +3459 1641 2A 61 31 BAKTMP: LD HL,(TMSTPT) ; Get temporary string pool top +3460 1644 2B DEC HL ; Back +3461 1645 46 LD B,(HL) ; Get MSB of address +3462 1646 2B DEC HL ; Back +3463 1647 4E LD C,(HL) ; Get LSB of address +3464 1648 2B DEC HL ; Back +3465 1649 2B DEC HL ; Back +3466 164A CD 0A 0A CALL CPDEHL ; String last in string pool? +3467 164D C0 RET NZ ; Yes - Leave it +3468 164E 22 61 31 LD (TMSTPT),HL ; Save new string pool top +3469 1651 C9 RET +3470 1652 +3471 1652 01 D1 13 LEN: LD BC,PASSA ; To return integer A +3472 1655 C5 PUSH BC ; Save address +3473 1656 CD 20 16 GETLEN: CALL GETSTR ; Get string and its length +3474 1659 AF XOR A +3475 165A 57 LD D,A ; Clear D +3476 165B 32 5D 31 LD (TYPE),A ; Set type to numeric +3477 165E 7E LD A,(HL) ; Get length of string +3478 165F B7 OR A ; Set status flags +3479 1660 C9 RET +3480 1661 +3481 1661 01 D1 13 ASC: LD BC,PASSA ; To return integer A +3482 1664 C5 PUSH BC ; Save address +3483 1665 CD 56 16 GTFLNM: CALL GETLEN ; Get length of string +3484 1668 CA 61 0C JP Z,FCERR ; Null string - Error +3485 166B 23 INC HL +3486 166C 23 INC HL +3487 166D 5E LD E,(HL) ; Get LSB of address +3488 166E 23 INC HL +3489 166F 56 LD D,(HL) ; Get MSB of address +3490 1670 1A LD A,(DE) ; Get first byte of string +3491 1671 C9 RET +3492 1672 +3493 1672 3E 01 CHR: LD A,1 ; One character string +3494 1674 CD 8F 14 CALL MKTMST ; Make a temporary string +3495 1677 CD 6B 17 CALL MAKINT ; Make it integer A +3496 167A 2A 71 31 LD HL,(TMPSTR+2) ; Get address of string +3497 167D 73 LD (HL),E ; Save character +3498 167E C1 TOPOOL: POP BC ; Clean up stack +3499 167F C3 C0 14 JP TSTOPL ; Temporary string to pool +3500 1682 +3501 1682 CD 1B 17 LEFT: CALL LFRGNM ; Get number and ending ")" +3502 1685 AF XOR A ; Start at first byte in string +3503 1686 E3 RIGHT1: EX (SP),HL ; Save code string,Get string +3504 1687 4F LD C,A ; Starting position in string +3505 1688 E5 MID1: PUSH HL ; Save string block address +3506 1689 7E LD A,(HL) ; Get length of string +3507 168A B8 CP B ; Compare with number given +3508 168B DA 90 16 JP C,ALLFOL ; All following bytes required +3509 168E 78 LD A,B ; Get new length +3510 168F 11 .BYTE 11H ; Skip "LD C,0" +3511 1690 0E 00 ALLFOL: LD C,0 ; First byte of string +3512 1692 C5 PUSH BC ; Save position in string +3513 1693 CD F9 14 CALL TESTR ; See if enough string space +3514 1696 C1 POP BC ; Get position in string +3515 1697 E1 POP HL ; Restore string block address +3516 1698 E5 PUSH HL ; And re-save it +3517 1699 23 INC HL +3518 169A 23 INC HL +3519 169B 46 LD B,(HL) ; Get LSB of address +3520 169C 23 INC HL +3521 169D 66 LD H,(HL) ; Get MSB of address +3522 169E 68 LD L,B ; HL = address of string +3523 169F 06 00 LD B,0 ; BC = starting address +3524 16A1 09 ADD HL,BC ; Point to that byte +3525 16A2 44 LD B,H ; BC = source string +3526 16A3 4D LD C,L +3527 16A4 CD 92 14 CALL CRTMST ; Create a string entry +3528 16A7 6F LD L,A ; Length of new string +3529 16A8 CD 16 16 CALL TOSTRA ; Move string to string area +3530 16AB D1 POP DE ; Clear stack +3531 16AC CD 27 16 CALL GSTRDE ; Move to string pool if needed +3532 16AF C3 C0 14 JP TSTOPL ; Temporary string to pool +3533 16B2 +3534 16B2 CD 1B 17 RIGHT: CALL LFRGNM ; Get number and ending ")" +3535 16B5 D1 POP DE ; Get string length +3536 16B6 D5 PUSH DE ; And re-save +3537 16B7 1A LD A,(DE) ; Get length +3538 16B8 90 SUB B ; Move back N bytes +3539 16B9 C3 86 16 JP RIGHT1 ; Go and get sub-string +3540 16BC +3541 16BC EB MID: EX DE,HL ; Get code string address +3542 16BD 7E LD A,(HL) ; Get next byte ',' or ")" +3543 16BE CD 20 17 CALL MIDNUM ; Get number supplied +3544 16C1 04 INC B ; Is it character zero? +3545 16C2 05 DEC B +3546 16C3 CA 61 0C JP Z,FCERR ; Yes - Error +3547 16C6 C5 PUSH BC ; Save starting position +3548 16C7 1E FF LD E,255 ; All of string +3549 16C9 FE 29 CP ')' ; Any length given? +3550 16CB CA D5 16 JP Z,RSTSTR ; No - Rest of string +3551 16CE CD 10 0A CALL CHKSYN ; Make sure ',' follows +3552 16D1 2C .BYTE ',' +3553 16D2 CD 68 17 CALL GETINT ; Get integer 0-255 +3554 16D5 CD 10 0A RSTSTR: CALL CHKSYN ; Make sure ")" follows +3555 16D8 29 .BYTE ")" +3556 16D9 F1 POP AF ; Restore starting position +3557 16DA E3 EX (SP),HL ; Get string,8ave code string +3558 16DB 01 88 16 LD BC,MID1 ; Continuation of MID$ routine +3559 16DE C5 PUSH BC ; Save for return +3560 16DF 3D DEC A ; Starting position-1 +3561 16E0 BE CP (HL) ; Compare with length +3562 16E1 06 00 LD B,0 ; Zero bytes length +3563 16E3 D0 RET NC ; Null string if start past end +3564 16E4 4F LD C,A ; Save starting position-1 +3565 16E5 7E LD A,(HL) ; Get length of string +3566 16E6 91 SUB C ; Subtract start +3567 16E7 BB CP E ; Enough string for it? +3568 16E8 47 LD B,A ; Save maximum length available +3569 16E9 D8 RET C ; Truncate string if needed +3570 16EA 43 LD B,E ; Set specified length +3571 16EB C9 RET ; Go and create string +3572 16EC +3573 16EC CD 56 16 VAL: CALL GETLEN ; Get length of string +3574 16EF CA 09 18 JP Z,RESZER ; Result zero +3575 16F2 5F LD E,A ; Save length +3576 16F3 23 INC HL +3577 16F4 23 INC HL +3578 16F5 7E LD A,(HL) ; Get LSB of address +3579 16F6 23 INC HL +3580 16F7 66 LD H,(HL) ; Get MSB of address +3581 16F8 6F LD L,A ; HL = String address +3582 16F9 E5 PUSH HL ; Save string address +3583 16FA 19 ADD HL,DE +3584 16FB 46 LD B,(HL) ; Get end of string+1 byte +3585 16FC 72 LD (HL),D ; Zero it to terminate +3586 16FD E3 EX (SP),HL ; Save string end,get start +3587 16FE C5 PUSH BC ; Save end+1 byte +3588 16FF 7E LD A,(HL) ; Get starting byte +3589 1700 FE 24 CP '$' ; Hex number indicated? [function added] +3590 1702 C2 0A 17 JP NZ,VAL1 +3591 1705 CD 34 1F CALL HEXTFP ; Convert Hex to FPREG +3592 1708 18 0D JR VAL3 +3593 170A FE 25 VAL1: CP '%' ; Binary number indicated? [function added] +3594 170C C2 14 17 JP NZ,VAL2 +3595 170F CD A4 1F CALL BINTFP ; Convert Bin to FPREG +3596 1712 18 03 JR VAL3 +3597 1714 CD F0 1A VAL2: CALL ASCTFP ; Convert ASCII string to FP +3598 1717 C1 VAL3: POP BC ; Restore end+1 byte +3599 1718 E1 POP HL ; Restore end+1 address +3600 1719 70 LD (HL),B ; Put back original byte +3601 171A C9 RET +3602 171B +3603 171B EB LFRGNM: EX DE,HL ; Code string address to HL +3604 171C CD 10 0A CALL CHKSYN ; Make sure ")" follows +3605 171F 29 .BYTE ")" +3606 1720 C1 MIDNUM: POP BC ; Get return address +3607 1721 D1 POP DE ; Get number supplied +3608 1722 C5 PUSH BC ; Re-save return address +3609 1723 43 LD B,E ; Number to B +3610 1724 C9 RET +3611 1725 +3612 1725 CD 6B 17 INP: CALL MAKINT ; Make it integer A +3613 1728 32 EF 30 LD (INPORT),A ; Set input port +3614 172B CD EE 30 CALL INPSUB ; Get input from port +3615 172E C3 D1 13 JP PASSA ; Return integer A +3616 1731 +3617 1731 CD 55 17 POUT: CALL SETIO ; Set up port number +3618 1734 C3 B6 30 JP OUTSUB ; Output data and return +3619 1737 +3620 1737 CD 55 17 WAIT: CALL SETIO ; Set up port number +3621 173A F5 PUSH AF ; Save AND mask +3622 173B 1E 00 LD E,0 ; Assume zero if none given +3623 173D 2B DEC HL ; DEC 'cos GETCHR INCs +3624 173E CD 9A 0B CALL GETCHR ; Get next character +3625 1741 CA 4B 17 JP Z,NOXOR ; No XOR byte given +3626 1744 CD 10 0A CALL CHKSYN ; Make sure ',' follows +3627 1747 2C .BYTE ',' +3628 1748 CD 68 17 CALL GETINT ; Get integer 0-255 to XOR with +3629 174B C1 NOXOR: POP BC ; Restore AND mask +3630 174C CD EE 30 WAITLP: CALL INPSUB ; Get input +3631 174F AB XOR E ; Flip selected bits +3632 1750 A0 AND B ; Result non-zero? +3633 1751 CA 4C 17 JP Z,WAITLP ; No = keep waiting +3634 1754 C9 RET +3635 1755 +3636 1755 CD 68 17 SETIO: CALL GETINT ; Get integer 0-255 +3637 1758 32 EF 30 LD (INPORT),A ; Set input port +3638 175B 32 B7 30 LD (OTPORT),A ; Set output port +3639 175E CD 10 0A CALL CHKSYN ; Make sure ',' follows +3640 1761 2C .BYTE ',' +3641 1762 C3 68 17 JP GETINT ; Get integer 0-255 and return +3642 1765 +3643 1765 CD 9A 0B FNDNUM: CALL GETCHR ; Get next character +3644 1768 CD 07 10 GETINT: CALL GETNUM ; Get a number from 0 to 255 +3645 176B CD 46 0C MAKINT: CALL DEPINT ; Make sure value 0 - 255 +3646 176E 7A LD A,D ; Get MSB of number +3647 176F B7 OR A ; Zero? +3648 1770 C2 61 0C JP NZ,FCERR ; No - Error +3649 1773 2B DEC HL ; DEC 'cos GETCHR INCs +3650 1774 CD 9A 0B CALL GETCHR ; Get next character +3651 1777 7B LD A,E ; Get number to A +3652 1778 C9 RET +3653 1779 +3654 1779 CD 4C 0C PEEK: CALL DEINT ; Get memory address +3655 177C 1A LD A,(DE) ; Get byte in memory +3656 177D C3 D1 13 JP PASSA ; Return integer A +3657 1780 +3658 1780 CD 07 10 POKE: CALL GETNUM ; Get memory address +3659 1783 CD 4C 0C CALL DEINT ; Get integer -32768 to 3276 +3660 1786 D5 PUSH DE ; Save memory address +3661 1787 CD 10 0A CALL CHKSYN ; Make sure ',' follows +3662 178A 2C .BYTE ',' +3663 178B CD 68 17 CALL GETINT ; Get integer 0-255 +3664 178E D1 POP DE ; Restore memory address +3665 178F 12 LD (DE),A ; Load it into memory +3666 1790 C9 RET +3667 1791 +3668 1791 21 67 1C ROUND: LD HL,HALF ; Add 0.5 to FPREG +3669 1794 CD 38 1A ADDPHL: CALL LOADFP ; Load FP at (HL) to BCDE +3670 1797 C3 A3 17 JP FPADD ; Add BCDE to FPREG +3671 179A +3672 179A CD 38 1A SUBPHL: CALL LOADFP ; FPREG = -FPREG + number at HL +3673 179D 21 .BYTE 21H ; Skip "POP BC" and "POP DE" +3674 179E C1 PSUB: POP BC ; Get FP number from stack +3675 179F D1 POP DE +3676 17A0 CD 12 1A SUBCDE: CALL INVSGN ; Negate FPREG +3677 17A3 78 FPADD: LD A,B ; Get FP exponent +3678 17A4 B7 OR A ; Is number zero? +3679 17A5 C8 RET Z ; Yes - Nothing to add +3680 17A6 3A 97 31 LD A,(FPEXP) ; Get FPREG exponent +3681 17A9 B7 OR A ; Is this number zero? +3682 17AA CA 2A 1A JP Z,FPBCDE ; Yes - Move BCDE to FPREG +3683 17AD 90 SUB B ; BCDE number larger? +3684 17AE D2 BD 17 JP NC,NOSWAP ; No - Don't swap them +3685 17B1 2F CPL ; Two's complement +3686 17B2 3C INC A ; FP exponent +3687 17B3 EB EX DE,HL +3688 17B4 CD 1A 1A CALL STAKFP ; Put FPREG on stack +3689 17B7 EB EX DE,HL +3690 17B8 CD 2A 1A CALL FPBCDE ; Move BCDE to FPREG +3691 17BB C1 POP BC ; Restore number from stack +3692 17BC D1 POP DE +3693 17BD FE 19 NOSWAP: CP 24+1 ; Second number insignificant? +3694 17BF D0 RET NC ; Yes - First number is result +3695 17C0 F5 PUSH AF ; Save number of bits to scale +3696 17C1 CD 4F 1A CALL SIGNS ; Set MSBs & sign of result +3697 17C4 67 LD H,A ; Save sign of result +3698 17C5 F1 POP AF ; Restore scaling factor +3699 17C6 CD 68 18 CALL SCALE ; Scale BCDE to same exponent +3700 17C9 B4 OR H ; Result to be positive? +3701 17CA 21 94 31 LD HL,FPREG ; Point to FPREG +3702 17CD F2 E3 17 JP P,MINCDE ; No - Subtract FPREG from CDE +3703 17D0 CD 48 18 CALL PLUCDE ; Add FPREG to CDE +3704 17D3 D2 29 18 JP NC,RONDUP ; No overflow - Round it up +3705 17D6 23 INC HL ; Point to exponent +3706 17D7 34 INC (HL) ; Increment it +3707 17D8 CA 51 07 JP Z,OVERR ; Number overflowed - Error +3708 17DB 2E 01 LD L,1 ; 1 bit to shift right +3709 17DD CD 7E 18 CALL SHRT1 ; Shift result right +3710 17E0 C3 29 18 JP RONDUP ; Round it up +3711 17E3 +3712 17E3 AF MINCDE: XOR A ; Clear A and carry +3713 17E4 90 SUB B ; Negate exponent +3714 17E5 47 LD B,A ; Re-save exponent +3715 17E6 7E LD A,(HL) ; Get LSB of FPREG +3716 17E7 9B SBC A, E ; Subtract LSB of BCDE +3717 17E8 5F LD E,A ; Save LSB of BCDE +3718 17E9 23 INC HL +3719 17EA 7E LD A,(HL) ; Get NMSB of FPREG +3720 17EB 9A SBC A,D ; Subtract NMSB of BCDE +3721 17EC 57 LD D,A ; Save NMSB of BCDE +3722 17ED 23 INC HL +3723 17EE 7E LD A,(HL) ; Get MSB of FPREG +3724 17EF 99 SBC A,C ; Subtract MSB of BCDE +3725 17F0 4F LD C,A ; Save MSB of BCDE +3726 17F1 DC 54 18 CONPOS: CALL C,COMPL ; Overflow - Make it positive +3727 17F4 +3728 17F4 68 BNORM: LD L,B ; L = Exponent +3729 17F5 63 LD H,E ; H = LSB +3730 17F6 AF XOR A +3731 17F7 47 BNRMLP: LD B,A ; Save bit count +3732 17F8 79 LD A,C ; Get MSB +3733 17F9 B7 OR A ; Is it zero? +3734 17FA C2 16 18 JP NZ,PNORM ; No - Do it bit at a time +3735 17FD 4A LD C,D ; MSB = NMSB +3736 17FE 54 LD D,H ; NMSB= LSB +3737 17FF 65 LD H,L ; LSB = VLSB +3738 1800 6F LD L,A ; VLSB= 0 +3739 1801 78 LD A,B ; Get exponent +3740 1802 D6 08 SUB 8 ; Count 8 bits +3741 1804 FE E0 CP -24-8 ; Was number zero? +3742 1806 C2 F7 17 JP NZ,BNRMLP ; No - Keep normalising +3743 1809 AF RESZER: XOR A ; Result is zero +3744 180A 32 97 31 SAVEXP: LD (FPEXP),A ; Save result as zero +3745 180D C9 RET +3746 180E +3747 180E 05 NORMAL: DEC B ; Count bits +3748 180F 29 ADD HL,HL ; Shift HL left +3749 1810 7A LD A,D ; Get NMSB +3750 1811 17 RLA ; Shift left with last bit +3751 1812 57 LD D,A ; Save NMSB +3752 1813 79 LD A,C ; Get MSB +3753 1814 8F ADC A,A ; Shift left with last bit +3754 1815 4F LD C,A ; Save MSB +3755 1816 F2 0E 18 PNORM: JP P,NORMAL ; Not done - Keep going +3756 1819 78 LD A,B ; Number of bits shifted +3757 181A 5C LD E,H ; Save HL in EB +3758 181B 45 LD B,L +3759 181C B7 OR A ; Any shifting done? +3760 181D CA 29 18 JP Z,RONDUP ; No - Round it up +3761 1820 21 97 31 LD HL,FPEXP ; Point to exponent +3762 1823 86 ADD A,(HL) ; Add shifted bits +3763 1824 77 LD (HL),A ; Re-save exponent +3764 1825 D2 09 18 JP NC,RESZER ; Underflow - Result is zero +3765 1828 C8 RET Z ; Result is zero +3766 1829 78 RONDUP: LD A,B ; Get VLSB of number +3767 182A 21 97 31 RONDB: LD HL,FPEXP ; Point to exponent +3768 182D B7 OR A ; Any rounding? +3769 182E FC 3B 18 CALL M,FPROND ; Yes - Round number up +3770 1831 46 LD B,(HL) ; B = Exponent +3771 1832 23 INC HL +3772 1833 7E LD A,(HL) ; Get sign of result +3773 1834 E6 80 AND 10000000B ; Only bit 7 needed +3774 1836 A9 XOR C ; Set correct sign +3775 1837 4F LD C,A ; Save correct sign in number +3776 1838 C3 2A 1A JP FPBCDE ; Move BCDE to FPREG +3777 183B +3778 183B 1C FPROND: INC E ; Round LSB +3779 183C C0 RET NZ ; Return if ok +3780 183D 14 INC D ; Round NMSB +3781 183E C0 RET NZ ; Return if ok +3782 183F 0C INC C ; Round MSB +3783 1840 C0 RET NZ ; Return if ok +3784 1841 0E 80 LD C,80H ; Set normal value +3785 1843 34 INC (HL) ; Increment exponent +3786 1844 C0 RET NZ ; Return if ok +3787 1845 C3 51 07 JP OVERR ; Overflow error +3788 1848 +3789 1848 7E PLUCDE: LD A,(HL) ; Get LSB of FPREG +3790 1849 83 ADD A,E ; Add LSB of BCDE +3791 184A 5F LD E,A ; Save LSB of BCDE +3792 184B 23 INC HL +3793 184C 7E LD A,(HL) ; Get NMSB of FPREG +3794 184D 8A ADC A,D ; Add NMSB of BCDE +3795 184E 57 LD D,A ; Save NMSB of BCDE +3796 184F 23 INC HL +3797 1850 7E LD A,(HL) ; Get MSB of FPREG +3798 1851 89 ADC A,C ; Add MSB of BCDE +3799 1852 4F LD C,A ; Save MSB of BCDE +3800 1853 C9 RET +3801 1854 +3802 1854 21 98 31 COMPL: LD HL,SGNRES ; Sign of result +3803 1857 7E LD A,(HL) ; Get sign of result +3804 1858 2F CPL ; Negate it +3805 1859 77 LD (HL),A ; Put it back +3806 185A AF XOR A +3807 185B 6F LD L,A ; Set L to zero +3808 185C 90 SUB B ; Negate exponent,set carry +3809 185D 47 LD B,A ; Re-save exponent +3810 185E 7D LD A,L ; Load zero +3811 185F 9B SBC A,E ; Negate LSB +3812 1860 5F LD E,A ; Re-save LSB +3813 1861 7D LD A,L ; Load zero +3814 1862 9A SBC A,D ; Negate NMSB +3815 1863 57 LD D,A ; Re-save NMSB +3816 1864 7D LD A,L ; Load zero +3817 1865 99 SBC A,C ; Negate MSB +3818 1866 4F LD C,A ; Re-save MSB +3819 1867 C9 RET +3820 1868 +3821 1868 06 00 SCALE: LD B,0 ; Clear underflow +3822 186A D6 08 SCALLP: SUB 8 ; 8 bits (a whole byte)? +3823 186C DA 77 18 JP C,SHRITE ; No - Shift right A bits +3824 186F 43 LD B,E ; <- Shift +3825 1870 5A LD E,D ; <- right +3826 1871 51 LD D,C ; <- eight +3827 1872 0E 00 LD C,0 ; <- bits +3828 1874 C3 6A 18 JP SCALLP ; More bits to shift +3829 1877 +3830 1877 C6 09 SHRITE: ADD A,8+1 ; Adjust count +3831 1879 6F LD L,A ; Save bits to shift +3832 187A AF SHRLP: XOR A ; Flag for all done +3833 187B 2D DEC L ; All shifting done? +3834 187C C8 RET Z ; Yes - Return +3835 187D 79 LD A,C ; Get MSB +3836 187E 1F SHRT1: RRA ; Shift it right +3837 187F 4F LD C,A ; Re-save +3838 1880 7A LD A,D ; Get NMSB +3839 1881 1F RRA ; Shift right with last bit +3840 1882 57 LD D,A ; Re-save it +3841 1883 7B LD A,E ; Get LSB +3842 1884 1F RRA ; Shift right with last bit +3843 1885 5F LD E,A ; Re-save it +3844 1886 78 LD A,B ; Get underflow +3845 1887 1F RRA ; Shift right with last bit +3846 1888 47 LD B,A ; Re-save underflow +3847 1889 C3 7A 18 JP SHRLP ; More bits to do +3848 188C +3849 188C 00 00 00 81 UNITY: .BYTE 000H,000H,000H,081H ; 1.00000 +3850 1890 +3851 1890 03 LOGTAB: .BYTE 3 ; Table used by LOG +3852 1891 AA 56 19 80 .BYTE 0AAH,056H,019H,080H ; 0.59898 +3853 1895 F1 22 76 80 .BYTE 0F1H,022H,076H,080H ; 0.96147 +3854 1899 45 AA 38 82 .BYTE 045H,0AAH,038H,082H ; 2.88539 +3855 189D +3856 189D CD E9 19 LOG: CALL TSTSGN ; Test sign of value +3857 18A0 B7 OR A +3858 18A1 EA 61 0C JP PE,FCERR ; ?FC Error if <= zero +3859 18A4 21 97 31 LD HL,FPEXP ; Point to exponent +3860 18A7 7E LD A,(HL) ; Get exponent +3861 18A8 01 35 80 LD BC,8035H ; BCDE = SQR(1/2) +3862 18AB 11 F3 04 LD DE,04F3H +3863 18AE 90 SUB B ; Scale value to be < 1 +3864 18AF F5 PUSH AF ; Save scale factor +3865 18B0 70 LD (HL),B ; Save new exponent +3866 18B1 D5 PUSH DE ; Save SQR(1/2) +3867 18B2 C5 PUSH BC +3868 18B3 CD A3 17 CALL FPADD ; Add SQR(1/2) to value +3869 18B6 C1 POP BC ; Restore SQR(1/2) +3870 18B7 D1 POP DE +3871 18B8 04 INC B ; Make it SQR(2) +3872 18B9 CD 3F 19 CALL DVBCDE ; Divide by SQR(2) +3873 18BC 21 8C 18 LD HL,UNITY ; Point to 1. +3874 18BF CD 9A 17 CALL SUBPHL ; Subtract FPREG from 1 +3875 18C2 21 90 18 LD HL,LOGTAB ; Coefficient table +3876 18C5 CD 31 1D CALL SUMSER ; Evaluate sum of series +3877 18C8 01 80 80 LD BC,8080H ; BCDE = -0.5 +3878 18CB 11 00 00 LD DE,0000H +3879 18CE CD A3 17 CALL FPADD ; Subtract 0.5 from FPREG +3880 18D1 F1 POP AF ; Restore scale factor +3881 18D2 CD 64 1B CALL RSCALE ; Re-scale number +3882 18D5 01 31 80 MULLN2: LD BC,8031H ; BCDE = Ln(2) +3883 18D8 11 18 72 LD DE,7218H +3884 18DB 21 .BYTE 21H ; Skip "POP BC" and "POP DE" +3885 18DC +3886 18DC C1 MULT: POP BC ; Get number from stack +3887 18DD D1 POP DE +3888 18DE CD E9 19 FPMULT: CALL TSTSGN ; Test sign of FPREG +3889 18E1 C8 RET Z ; Return zero if zero +3890 18E2 2E 00 LD L,0 ; Flag add exponents +3891 18E4 CD A7 19 CALL ADDEXP ; Add exponents +3892 18E7 79 LD A,C ; Get MSB of multiplier +3893 18E8 32 A6 31 LD (MULVAL),A ; Save MSB of multiplier +3894 18EB EB EX DE,HL +3895 18EC 22 A7 31 LD (MULVAL+1),HL ; Save rest of multiplier +3896 18EF 01 00 00 LD BC,0 ; Partial product (BCDE) = zero +3897 18F2 50 LD D,B +3898 18F3 58 LD E,B +3899 18F4 21 F4 17 LD HL,BNORM ; Address of normalise +3900 18F7 E5 PUSH HL ; Save for return +3901 18F8 21 00 19 LD HL,MULT8 ; Address of 8 bit multiply +3902 18FB E5 PUSH HL ; Save for NMSB,MSB +3903 18FC E5 PUSH HL ; +3904 18FD 21 94 31 LD HL,FPREG ; Point to number +3905 1900 7E MULT8: LD A,(HL) ; Get LSB of number +3906 1901 23 INC HL ; Point to NMSB +3907 1902 B7 OR A ; Test LSB +3908 1903 CA 2C 19 JP Z,BYTSFT ; Zero - shift to next byte +3909 1906 E5 PUSH HL ; Save address of number +3910 1907 2E 08 LD L,8 ; 8 bits to multiply by +3911 1909 1F MUL8LP: RRA ; Shift LSB right +3912 190A 67 LD H,A ; Save LSB +3913 190B 79 LD A,C ; Get MSB +3914 190C D2 1A 19 JP NC,NOMADD ; Bit was zero - Don't add +3915 190F E5 PUSH HL ; Save LSB and count +3916 1910 2A A7 31 LD HL,(MULVAL+1) ; Get LSB and NMSB +3917 1913 19 ADD HL,DE ; Add NMSB and LSB +3918 1914 EB EX DE,HL ; Leave sum in DE +3919 1915 E1 POP HL ; Restore MSB and count +3920 1916 3A A6 31 LD A,(MULVAL) ; Get MSB of multiplier +3921 1919 89 ADC A,C ; Add MSB +3922 191A 1F NOMADD: RRA ; Shift MSB right +3923 191B 4F LD C,A ; Re-save MSB +3924 191C 7A LD A,D ; Get NMSB +3925 191D 1F RRA ; Shift NMSB right +3926 191E 57 LD D,A ; Re-save NMSB +3927 191F 7B LD A,E ; Get LSB +3928 1920 1F RRA ; Shift LSB right +3929 1921 5F LD E,A ; Re-save LSB +3930 1922 78 LD A,B ; Get VLSB +3931 1923 1F RRA ; Shift VLSB right +3932 1924 47 LD B,A ; Re-save VLSB +3933 1925 2D DEC L ; Count bits multiplied +3934 1926 7C LD A,H ; Get LSB of multiplier +3935 1927 C2 09 19 JP NZ,MUL8LP ; More - Do it +3936 192A E1 POPHRT: POP HL ; Restore address of number +3937 192B C9 RET +3938 192C +3939 192C 43 BYTSFT: LD B,E ; Shift partial product left +3940 192D 5A LD E,D +3941 192E 51 LD D,C +3942 192F 4F LD C,A +3943 1930 C9 RET +3944 1931 +3945 1931 CD 1A 1A DIV10: CALL STAKFP ; Save FPREG on stack +3946 1934 01 20 84 LD BC,8420H ; BCDE = 10. +3947 1937 11 00 00 LD DE,0000H +3948 193A CD 2A 1A CALL FPBCDE ; Move 10 to FPREG +3949 193D +3950 193D C1 DIV: POP BC ; Get number from stack +3951 193E D1 POP DE +3952 193F CD E9 19 DVBCDE: CALL TSTSGN ; Test sign of FPREG +3953 1942 CA 45 07 JP Z,DZERR ; Error if division by zero +3954 1945 2E FF LD L,-1 ; Flag subtract exponents +3955 1947 CD A7 19 CALL ADDEXP ; Subtract exponents +3956 194A 34 INC (HL) ; Add 2 to exponent to adjust +3957 194B 34 INC (HL) +3958 194C 2B DEC HL ; Point to MSB +3959 194D 7E LD A,(HL) ; Get MSB of dividend +3960 194E 32 C2 30 LD (DIV3),A ; Save for subtraction +3961 1951 2B DEC HL +3962 1952 7E LD A,(HL) ; Get NMSB of dividend +3963 1953 32 BE 30 LD (DIV2),A ; Save for subtraction +3964 1956 2B DEC HL +3965 1957 7E LD A,(HL) ; Get MSB of dividend +3966 1958 32 BA 30 LD (DIV1),A ; Save for subtraction +3967 195B 41 LD B,C ; Get MSB +3968 195C EB EX DE,HL ; NMSB,LSB to HL +3969 195D AF XOR A +3970 195E 4F LD C,A ; Clear MSB of quotient +3971 195F 57 LD D,A ; Clear NMSB of quotient +3972 1960 5F LD E,A ; Clear LSB of quotient +3973 1961 32 C5 30 LD (DIV4),A ; Clear overflow count +3974 1964 E5 DIVLP: PUSH HL ; Save divisor +3975 1965 C5 PUSH BC +3976 1966 7D LD A,L ; Get LSB of number +3977 1967 CD B9 30 CALL DIVSUP ; Subt' divisor from dividend +3978 196A DE 00 SBC A,0 ; Count for overflows +3979 196C 3F CCF +3980 196D D2 77 19 JP NC,RESDIV ; Restore divisor if borrow +3981 1970 32 C5 30 LD (DIV4),A ; Re-save overflow count +3982 1973 F1 POP AF ; Scrap divisor +3983 1974 F1 POP AF +3984 1975 37 SCF ; Set carry to +3985 1976 D2 .BYTE 0D2H ; Skip "POP BC" and "POP HL" +3986 1977 +3987 1977 C1 RESDIV: POP BC ; Restore divisor +3988 1978 E1 POP HL +3989 1979 79 LD A,C ; Get MSB of quotient +3990 197A 3C INC A +3991 197B 3D DEC A +3992 197C 1F RRA ; Bit 0 to bit 7 +3993 197D FA 2A 18 JP M,RONDB ; Done - Normalise result +3994 1980 17 RLA ; Restore carry +3995 1981 7B LD A,E ; Get LSB of quotient +3996 1982 17 RLA ; Double it +3997 1983 5F LD E,A ; Put it back +3998 1984 7A LD A,D ; Get NMSB of quotient +3999 1985 17 RLA ; Double it +4000 1986 57 LD D,A ; Put it back +4001 1987 79 LD A,C ; Get MSB of quotient +4002 1988 17 RLA ; Double it +4003 1989 4F LD C,A ; Put it back +4004 198A 29 ADD HL,HL ; Double NMSB,LSB of divisor +4005 198B 78 LD A,B ; Get MSB of divisor +4006 198C 17 RLA ; Double it +4007 198D 47 LD B,A ; Put it back +4008 198E 3A C5 30 LD A,(DIV4) ; Get VLSB of quotient +4009 1991 17 RLA ; Double it +4010 1992 32 C5 30 LD (DIV4),A ; Put it back +4011 1995 79 LD A,C ; Get MSB of quotient +4012 1996 B2 OR D ; Merge NMSB +4013 1997 B3 OR E ; Merge LSB +4014 1998 C2 64 19 JP NZ,DIVLP ; Not done - Keep dividing +4015 199B E5 PUSH HL ; Save divisor +4016 199C 21 97 31 LD HL,FPEXP ; Point to exponent +4017 199F 35 DEC (HL) ; Divide by 2 +4018 19A0 E1 POP HL ; Restore divisor +4019 19A1 C2 64 19 JP NZ,DIVLP ; Ok - Keep going +4020 19A4 C3 51 07 JP OVERR ; Overflow error +4021 19A7 +4022 19A7 78 ADDEXP: LD A,B ; Get exponent of dividend +4023 19A8 B7 OR A ; Test it +4024 19A9 CA CB 19 JP Z,OVTST3 ; Zero - Result zero +4025 19AC 7D LD A,L ; Get add/subtract flag +4026 19AD 21 97 31 LD HL,FPEXP ; Point to exponent +4027 19B0 AE XOR (HL) ; Add or subtract it +4028 19B1 80 ADD A,B ; Add the other exponent +4029 19B2 47 LD B,A ; Save new exponent +4030 19B3 1F RRA ; Test exponent for overflow +4031 19B4 A8 XOR B +4032 19B5 78 LD A,B ; Get exponent +4033 19B6 F2 CA 19 JP P,OVTST2 ; Positive - Test for overflow +4034 19B9 C6 80 ADD A,80H ; Add excess 128 +4035 19BB 77 LD (HL),A ; Save new exponent +4036 19BC CA 2A 19 JP Z,POPHRT ; Zero - Result zero +4037 19BF CD 4F 1A CALL SIGNS ; Set MSBs and sign of result +4038 19C2 77 LD (HL),A ; Save new exponent +4039 19C3 2B DEC HL ; Point to MSB +4040 19C4 C9 RET +4041 19C5 +4042 19C5 CD E9 19 OVTST1: CALL TSTSGN ; Test sign of FPREG +4043 19C8 2F CPL ; Invert sign +4044 19C9 E1 POP HL ; Clean up stack +4045 19CA B7 OVTST2: OR A ; Test if new exponent zero +4046 19CB E1 OVTST3: POP HL ; Clear off return address +4047 19CC F2 09 18 JP P,RESZER ; Result zero +4048 19CF C3 51 07 JP OVERR ; Overflow error +4049 19D2 +4050 19D2 CD 35 1A MLSP10: CALL BCDEFP ; Move FPREG to BCDE +4051 19D5 78 LD A,B ; Get exponent +4052 19D6 B7 OR A ; Is it zero? +4053 19D7 C8 RET Z ; Yes - Result is zero +4054 19D8 C6 02 ADD A,2 ; Multiply by 4 +4055 19DA DA 51 07 JP C,OVERR ; Overflow - ?OV Error +4056 19DD 47 LD B,A ; Re-save exponent +4057 19DE CD A3 17 CALL FPADD ; Add BCDE to FPREG (Times 5) +4058 19E1 21 97 31 LD HL,FPEXP ; Point to exponent +4059 19E4 34 INC (HL) ; Double number (Times 10) +4060 19E5 C0 RET NZ ; Ok - Return +4061 19E6 C3 51 07 JP OVERR ; Overflow error +4062 19E9 +4063 19E9 3A 97 31 TSTSGN: LD A,(FPEXP) ; Get sign of FPREG +4064 19EC B7 OR A +4065 19ED C8 RET Z ; RETurn if number is zero +4066 19EE 3A 96 31 LD A,(FPREG+2) ; Get MSB of FPREG +4067 19F1 FE .BYTE 0FEH ; Test sign +4068 19F2 2F RETREL: CPL ; Invert sign +4069 19F3 17 RLA ; Sign bit to carry +4070 19F4 9F FLGDIF: SBC A,A ; Carry to all bits of A +4071 19F5 C0 RET NZ ; Return -1 if negative +4072 19F6 3C INC A ; Bump to +1 +4073 19F7 C9 RET ; Positive - Return +1 +4074 19F8 +4075 19F8 CD E9 19 SGN: CALL TSTSGN ; Test sign of FPREG +4076 19FB 06 88 FLGREL: LD B,80H+8 ; 8 bit integer in exponent +4077 19FD 11 00 00 LD DE,0 ; Zero NMSB and LSB +4078 1A00 21 97 31 RETINT: LD HL,FPEXP ; Point to exponent +4079 1A03 4F LD C,A ; CDE = MSB,NMSB and LSB +4080 1A04 70 LD (HL),B ; Save exponent +4081 1A05 06 00 LD B,0 ; CDE = integer to normalise +4082 1A07 23 INC HL ; Point to sign of result +4083 1A08 36 80 LD (HL),80H ; Set sign of result +4084 1A0A 17 RLA ; Carry = sign of integer +4085 1A0B C3 F1 17 JP CONPOS ; Set sign of result +4086 1A0E +4087 1A0E CD E9 19 ABS: CALL TSTSGN ; Test sign of FPREG +4088 1A11 F0 RET P ; Return if positive +4089 1A12 21 96 31 INVSGN: LD HL,FPREG+2 ; Point to MSB +4090 1A15 7E LD A,(HL) ; Get sign of mantissa +4091 1A16 EE 80 XOR 80H ; Invert sign of mantissa +4092 1A18 77 LD (HL),A ; Re-save sign of mantissa +4093 1A19 C9 RET +4094 1A1A +4095 1A1A EB STAKFP: EX DE,HL ; Save code string address +4096 1A1B 2A 94 31 LD HL,(FPREG) ; LSB,NLSB of FPREG +4097 1A1E E3 EX (SP),HL ; Stack them,get return +4098 1A1F E5 PUSH HL ; Re-save return +4099 1A20 2A 96 31 LD HL,(FPREG+2) ; MSB and exponent of FPREG +4100 1A23 E3 EX (SP),HL ; Stack them,get return +4101 1A24 E5 PUSH HL ; Re-save return +4102 1A25 EB EX DE,HL ; Restore code string address +4103 1A26 C9 RET +4104 1A27 +4105 1A27 CD 38 1A PHLTFP: CALL LOADFP ; Number at HL to BCDE +4106 1A2A EB FPBCDE: EX DE,HL ; Save code string address +4107 1A2B 22 94 31 LD (FPREG),HL ; Save LSB,NLSB of number +4108 1A2E 60 LD H,B ; Exponent of number +4109 1A2F 69 LD L,C ; MSB of number +4110 1A30 22 96 31 LD (FPREG+2),HL ; Save MSB and exponent +4111 1A33 EB EX DE,HL ; Restore code string address +4112 1A34 C9 RET +4113 1A35 +4114 1A35 21 94 31 BCDEFP: LD HL,FPREG ; Point to FPREG +4115 1A38 5E LOADFP: LD E,(HL) ; Get LSB of number +4116 1A39 23 INC HL +4117 1A3A 56 LD D,(HL) ; Get NMSB of number +4118 1A3B 23 INC HL +4119 1A3C 4E LD C,(HL) ; Get MSB of number +4120 1A3D 23 INC HL +4121 1A3E 46 LD B,(HL) ; Get exponent of number +4122 1A3F 23 INCHL: INC HL ; Used for conditional "INC HL" +4123 1A40 C9 RET +4124 1A41 +4125 1A41 11 94 31 FPTHL: LD DE,FPREG ; Point to FPREG +4126 1A44 06 04 DETHL4: LD B,4 ; 4 bytes to move +4127 1A46 1A DETHLB: LD A,(DE) ; Get source +4128 1A47 77 LD (HL),A ; Save destination +4129 1A48 13 INC DE ; Next source +4130 1A49 23 INC HL ; Next destination +4131 1A4A 05 DEC B ; Count bytes +4132 1A4B C2 46 1A JP NZ,DETHLB ; Loop if more +4133 1A4E C9 RET +4134 1A4F +4135 1A4F 21 96 31 SIGNS: LD HL,FPREG+2 ; Point to MSB of FPREG +4136 1A52 7E LD A,(HL) ; Get MSB +4137 1A53 07 RLCA ; Old sign to carry +4138 1A54 37 SCF ; Set MSBit +4139 1A55 1F RRA ; Set MSBit of MSB +4140 1A56 77 LD (HL),A ; Save new MSB +4141 1A57 3F CCF ; Complement sign +4142 1A58 1F RRA ; Old sign to carry +4143 1A59 23 INC HL +4144 1A5A 23 INC HL +4145 1A5B 77 LD (HL),A ; Set sign of result +4146 1A5C 79 LD A,C ; Get MSB +4147 1A5D 07 RLCA ; Old sign to carry +4148 1A5E 37 SCF ; Set MSBit +4149 1A5F 1F RRA ; Set MSBit of MSB +4150 1A60 4F LD C,A ; Save MSB +4151 1A61 1F RRA +4152 1A62 AE XOR (HL) ; New sign of result +4153 1A63 C9 RET +4154 1A64 +4155 1A64 78 CMPNUM: LD A,B ; Get exponent of number +4156 1A65 B7 OR A +4157 1A66 CA E9 19 JP Z,TSTSGN ; Zero - Test sign of FPREG +4158 1A69 21 F2 19 LD HL,RETREL ; Return relation routine +4159 1A6C E5 PUSH HL ; Save for return +4160 1A6D CD E9 19 CALL TSTSGN ; Test sign of FPREG +4161 1A70 79 LD A,C ; Get MSB of number +4162 1A71 C8 RET Z ; FPREG zero - Number's MSB +4163 1A72 21 96 31 LD HL,FPREG+2 ; MSB of FPREG +4164 1A75 AE XOR (HL) ; Combine signs +4165 1A76 79 LD A,C ; Get MSB of number +4166 1A77 F8 RET M ; Exit if signs different +4167 1A78 CD 7E 1A CALL CMPFP ; Compare FP numbers +4168 1A7B 1F RRA ; Get carry to sign +4169 1A7C A9 XOR C ; Combine with MSB of number +4170 1A7D C9 RET +4171 1A7E +4172 1A7E 23 CMPFP: INC HL ; Point to exponent +4173 1A7F 78 LD A,B ; Get exponent +4174 1A80 BE CP (HL) ; Compare exponents +4175 1A81 C0 RET NZ ; Different +4176 1A82 2B DEC HL ; Point to MBS +4177 1A83 79 LD A,C ; Get MSB +4178 1A84 BE CP (HL) ; Compare MSBs +4179 1A85 C0 RET NZ ; Different +4180 1A86 2B DEC HL ; Point to NMSB +4181 1A87 7A LD A,D ; Get NMSB +4182 1A88 BE CP (HL) ; Compare NMSBs +4183 1A89 C0 RET NZ ; Different +4184 1A8A 2B DEC HL ; Point to LSB +4185 1A8B 7B LD A,E ; Get LSB +4186 1A8C 96 SUB (HL) ; Compare LSBs +4187 1A8D C0 RET NZ ; Different +4188 1A8E E1 POP HL ; Drop RETurn +4189 1A8F E1 POP HL ; Drop another RETurn +4190 1A90 C9 RET +4191 1A91 +4192 1A91 47 FPINT: LD B,A ; <- Move +4193 1A92 4F LD C,A ; <- exponent +4194 1A93 57 LD D,A ; <- to all +4195 1A94 5F LD E,A ; <- bits +4196 1A95 B7 OR A ; Test exponent +4197 1A96 C8 RET Z ; Zero - Return zero +4198 1A97 E5 PUSH HL ; Save pointer to number +4199 1A98 CD 35 1A CALL BCDEFP ; Move FPREG to BCDE +4200 1A9B CD 4F 1A CALL SIGNS ; Set MSBs & sign of result +4201 1A9E AE XOR (HL) ; Combine with sign of FPREG +4202 1A9F 67 LD H,A ; Save combined signs +4203 1AA0 FC B5 1A CALL M,DCBCDE ; Negative - Decrement BCDE +4204 1AA3 3E 98 LD A,80H+24 ; 24 bits +4205 1AA5 90 SUB B ; Bits to shift +4206 1AA6 CD 68 18 CALL SCALE ; Shift BCDE +4207 1AA9 7C LD A,H ; Get combined sign +4208 1AAA 17 RLA ; Sign to carry +4209 1AAB DC 3B 18 CALL C,FPROND ; Negative - Round number up +4210 1AAE 06 00 LD B,0 ; Zero exponent +4211 1AB0 DC 54 18 CALL C,COMPL ; If negative make positive +4212 1AB3 E1 POP HL ; Restore pointer to number +4213 1AB4 C9 RET +4214 1AB5 +4215 1AB5 1B DCBCDE: DEC DE ; Decrement BCDE +4216 1AB6 7A LD A,D ; Test LSBs +4217 1AB7 A3 AND E +4218 1AB8 3C INC A +4219 1AB9 C0 RET NZ ; Exit if LSBs not FFFF +4220 1ABA 0B DEC BC ; Decrement MSBs +4221 1ABB C9 RET +4222 1ABC +4223 1ABC 21 97 31 INT: LD HL,FPEXP ; Point to exponent +4224 1ABF 7E LD A,(HL) ; Get exponent +4225 1AC0 FE 98 CP 80H+24 ; Integer accuracy only? +4226 1AC2 3A 94 31 LD A,(FPREG) ; Get LSB +4227 1AC5 D0 RET NC ; Yes - Already integer +4228 1AC6 7E LD A,(HL) ; Get exponent +4229 1AC7 CD 91 1A CALL FPINT ; F.P to integer +4230 1ACA 36 98 LD (HL),80H+24 ; Save 24 bit integer +4231 1ACC 7B LD A,E ; Get LSB of number +4232 1ACD F5 PUSH AF ; Save LSB +4233 1ACE 79 LD A,C ; Get MSB of number +4234 1ACF 17 RLA ; Sign to carry +4235 1AD0 CD F1 17 CALL CONPOS ; Set sign of result +4236 1AD3 F1 POP AF ; Restore LSB of number +4237 1AD4 C9 RET +4238 1AD5 +4239 1AD5 21 00 00 MLDEBC: LD HL,0 ; Clear partial product +4240 1AD8 78 LD A,B ; Test multiplier +4241 1AD9 B1 OR C +4242 1ADA C8 RET Z ; Return zero if zero +4243 1ADB 3E 10 LD A,16 ; 16 bits +4244 1ADD 29 MLDBLP: ADD HL,HL ; Shift P.P left +4245 1ADE DA 15 13 JP C,BSERR ; ?BS Error if overflow +4246 1AE1 EB EX DE,HL +4247 1AE2 29 ADD HL,HL ; Shift multiplier left +4248 1AE3 EB EX DE,HL +4249 1AE4 D2 EB 1A JP NC,NOMLAD ; Bit was zero - No add +4250 1AE7 09 ADD HL,BC ; Add multiplicand +4251 1AE8 DA 15 13 JP C,BSERR ; ?BS Error if overflow +4252 1AEB 3D NOMLAD: DEC A ; Count bits +4253 1AEC C2 DD 1A JP NZ,MLDBLP ; More +4254 1AEF C9 RET +4255 1AF0 +4256 1AF0 FE 2D ASCTFP: CP '-' ; Negative? +4257 1AF2 F5 PUSH AF ; Save it and flags +4258 1AF3 CA FC 1A JP Z,CNVNUM ; Yes - Convert number +4259 1AF6 FE 2B CP '+' ; Positive? +4260 1AF8 CA FC 1A JP Z,CNVNUM ; Yes - Convert number +4261 1AFB 2B DEC HL ; DEC 'cos GETCHR INCs +4262 1AFC CD 09 18 CNVNUM: CALL RESZER ; Set result to zero +4263 1AFF 47 LD B,A ; Digits after point counter +4264 1B00 57 LD D,A ; Sign of exponent +4265 1B01 5F LD E,A ; Exponent of ten +4266 1B02 2F CPL +4267 1B03 4F LD C,A ; Before or after point flag +4268 1B04 CD 9A 0B MANLP: CALL GETCHR ; Get next character +4269 1B07 DA 4D 1B JP C,ADDIG ; Digit - Add to number +4270 1B0A FE 2E CP '.' +4271 1B0C CA 28 1B JP Z,DPOINT ; '.' - Flag point +4272 1B0F FE 45 CP 'E' +4273 1B11 C2 2C 1B JP NZ,CONEXP ; Not 'E' - Scale number +4274 1B14 CD 9A 0B CALL GETCHR ; Get next character +4275 1B17 CD 40 11 CALL SGNEXP ; Get sign of exponent +4276 1B1A CD 9A 0B EXPLP: CALL GETCHR ; Get next character +4277 1B1D DA 6F 1B JP C,EDIGIT ; Digit - Add to exponent +4278 1B20 14 INC D ; Is sign negative? +4279 1B21 C2 2C 1B JP NZ,CONEXP ; No - Scale number +4280 1B24 AF XOR A +4281 1B25 93 SUB E ; Negate exponent +4282 1B26 5F LD E,A ; And re-save it +4283 1B27 0C INC C ; Flag end of number +4284 1B28 0C DPOINT: INC C ; Flag point passed +4285 1B29 CA 04 1B JP Z,MANLP ; Zero - Get another digit +4286 1B2C E5 CONEXP: PUSH HL ; Save code string address +4287 1B2D 7B LD A,E ; Get exponent +4288 1B2E 90 SUB B ; Subtract digits after point +4289 1B2F F4 45 1B SCALMI: CALL P,SCALPL ; Positive - Multiply number +4290 1B32 F2 3B 1B JP P,ENDCON ; Positive - All done +4291 1B35 F5 PUSH AF ; Save number of times to /10 +4292 1B36 CD 31 19 CALL DIV10 ; Divide by 10 +4293 1B39 F1 POP AF ; Restore count +4294 1B3A 3C INC A ; Count divides +4295 1B3B +4296 1B3B C2 2F 1B ENDCON: JP NZ,SCALMI ; More to do +4297 1B3E D1 POP DE ; Restore code string address +4298 1B3F F1 POP AF ; Restore sign of number +4299 1B40 CC 12 1A CALL Z,INVSGN ; Negative - Negate number +4300 1B43 EB EX DE,HL ; Code string address to HL +4301 1B44 C9 RET +4302 1B45 +4303 1B45 C8 SCALPL: RET Z ; Exit if no scaling needed +4304 1B46 F5 MULTEN: PUSH AF ; Save count +4305 1B47 CD D2 19 CALL MLSP10 ; Multiply number by 10 +4306 1B4A F1 POP AF ; Restore count +4307 1B4B 3D DEC A ; Count multiplies +4308 1B4C C9 RET +4309 1B4D +4310 1B4D D5 ADDIG: PUSH DE ; Save sign of exponent +4311 1B4E 57 LD D,A ; Save digit +4312 1B4F 78 LD A,B ; Get digits after point +4313 1B50 89 ADC A,C ; Add one if after point +4314 1B51 47 LD B,A ; Re-save counter +4315 1B52 C5 PUSH BC ; Save point flags +4316 1B53 E5 PUSH HL ; Save code string address +4317 1B54 D5 PUSH DE ; Save digit +4318 1B55 CD D2 19 CALL MLSP10 ; Multiply number by 10 +4319 1B58 F1 POP AF ; Restore digit +4320 1B59 D6 30 SUB '0' ; Make it absolute +4321 1B5B CD 64 1B CALL RSCALE ; Re-scale number +4322 1B5E E1 POP HL ; Restore code string address +4323 1B5F C1 POP BC ; Restore point flags +4324 1B60 D1 POP DE ; Restore sign of exponent +4325 1B61 C3 04 1B JP MANLP ; Get another digit +4326 1B64 +4327 1B64 CD 1A 1A RSCALE: CALL STAKFP ; Put number on stack +4328 1B67 CD FB 19 CALL FLGREL ; Digit to add to FPREG +4329 1B6A C1 PADD: POP BC ; Restore number +4330 1B6B D1 POP DE +4331 1B6C C3 A3 17 JP FPADD ; Add BCDE to FPREG and return +4332 1B6F +4333 1B6F 7B EDIGIT: LD A,E ; Get digit +4334 1B70 07 RLCA ; Times 2 +4335 1B71 07 RLCA ; Times 4 +4336 1B72 83 ADD A,E ; Times 5 +4337 1B73 07 RLCA ; Times 10 +4338 1B74 86 ADD A,(HL) ; Add next digit +4339 1B75 D6 30 SUB '0' ; Make it absolute +4340 1B77 5F LD E,A ; Save new digit +4341 1B78 C3 1A 1B JP EXPLP ; Look for another digit +4342 1B7B +4343 1B7B E5 LINEIN: PUSH HL ; Save code string address +4344 1B7C 21 DA 06 LD HL,INMSG ; Output " in " +4345 1B7F CD E0 14 CALL PRS ; Output string at HL +4346 1B82 E1 POP HL ; Restore code string address +4347 1B83 EB PRNTHL: EX DE,HL ; Code string address to DE +4348 1B84 AF XOR A +4349 1B85 06 98 LD B,80H+24 ; 24 bits +4350 1B87 CD 00 1A CALL RETINT ; Return the integer +4351 1B8A 21 DF 14 LD HL,PRNUMS ; Print number string +4352 1B8D E5 PUSH HL ; Save for return +4353 1B8E 21 99 31 NUMASC: LD HL,PBUFF ; Convert number to ASCII +4354 1B91 E5 PUSH HL ; Save for return +4355 1B92 CD E9 19 CALL TSTSGN ; Test sign of FPREG +4356 1B95 36 20 LD (HL),' ' ; Space at start +4357 1B97 F2 9C 1B JP P,SPCFST ; Positive - Space to start +4358 1B9A 36 2D LD (HL),'-' ; '-' sign at start +4359 1B9C 23 SPCFST: INC HL ; First byte of number +4360 1B9D 36 30 LD (HL),'0' ; '0' if zero +4361 1B9F CA 52 1C JP Z,JSTZER ; Return '0' if zero +4362 1BA2 E5 PUSH HL ; Save buffer address +4363 1BA3 FC 12 1A CALL M,INVSGN ; Negate FPREG if negative +4364 1BA6 AF XOR A ; Zero A +4365 1BA7 F5 PUSH AF ; Save it +4366 1BA8 CD 58 1C CALL RNGTST ; Test number is in range +4367 1BAB 01 43 91 SIXDIG: LD BC,9143H ; BCDE - 99999.9 +4368 1BAE 11 F8 4F LD DE,4FF8H +4369 1BB1 CD 64 1A CALL CMPNUM ; Compare numbers +4370 1BB4 B7 OR A +4371 1BB5 E2 C9 1B JP PO,INRNG ; > 99999.9 - Sort it out +4372 1BB8 F1 POP AF ; Restore count +4373 1BB9 CD 46 1B CALL MULTEN ; Multiply by ten +4374 1BBC F5 PUSH AF ; Re-save count +4375 1BBD C3 AB 1B JP SIXDIG ; Test it again +4376 1BC0 +4377 1BC0 CD 31 19 GTSIXD: CALL DIV10 ; Divide by 10 +4378 1BC3 F1 POP AF ; Get count +4379 1BC4 3C INC A ; Count divides +4380 1BC5 F5 PUSH AF ; Re-save count +4381 1BC6 CD 58 1C CALL RNGTST ; Test number is in range +4382 1BC9 CD 91 17 INRNG: CALL ROUND ; Add 0.5 to FPREG +4383 1BCC 3C INC A +4384 1BCD CD 91 1A CALL FPINT ; F.P to integer +4385 1BD0 CD 2A 1A CALL FPBCDE ; Move BCDE to FPREG +4386 1BD3 01 06 03 LD BC,0306H ; 1E+06 to 1E-03 range +4387 1BD6 F1 POP AF ; Restore count +4388 1BD7 81 ADD A,C ; 6 digits before point +4389 1BD8 3C INC A ; Add one +4390 1BD9 FA E5 1B JP M,MAKNUM ; Do it in 'E' form if < 1E-02 +4391 1BDC FE 08 CP 6+1+1 ; More than 999999 ? +4392 1BDE D2 E5 1B JP NC,MAKNUM ; Yes - Do it in 'E' form +4393 1BE1 3C INC A ; Adjust for exponent +4394 1BE2 47 LD B,A ; Exponent of number +4395 1BE3 3E 02 LD A,2 ; Make it zero after +4396 1BE5 +4397 1BE5 3D MAKNUM: DEC A ; Adjust for digits to do +4398 1BE6 3D DEC A +4399 1BE7 E1 POP HL ; Restore buffer address +4400 1BE8 F5 PUSH AF ; Save count +4401 1BE9 11 6B 1C LD DE,POWERS ; Powers of ten +4402 1BEC 05 DEC B ; Count digits before point +4403 1BED C2 F6 1B JP NZ,DIGTXT ; Not zero - Do number +4404 1BF0 36 2E LD (HL),'.' ; Save point +4405 1BF2 23 INC HL ; Move on +4406 1BF3 36 30 LD (HL),'0' ; Save zero +4407 1BF5 23 INC HL ; Move on +4408 1BF6 05 DIGTXT: DEC B ; Count digits before point +4409 1BF7 36 2E LD (HL),'.' ; Save point in case +4410 1BF9 CC 3F 1A CALL Z,INCHL ; Last digit - move on +4411 1BFC C5 PUSH BC ; Save digits before point +4412 1BFD E5 PUSH HL ; Save buffer address +4413 1BFE D5 PUSH DE ; Save powers of ten +4414 1BFF CD 35 1A CALL BCDEFP ; Move FPREG to BCDE +4415 1C02 E1 POP HL ; Powers of ten table +4416 1C03 06 2F LD B, '0'-1 ; ASCII '0' - 1 +4417 1C05 04 TRYAGN: INC B ; Count subtractions +4418 1C06 7B LD A,E ; Get LSB +4419 1C07 96 SUB (HL) ; Subtract LSB +4420 1C08 5F LD E,A ; Save LSB +4421 1C09 23 INC HL +4422 1C0A 7A LD A,D ; Get NMSB +4423 1C0B 9E SBC A,(HL) ; Subtract NMSB +4424 1C0C 57 LD D,A ; Save NMSB +4425 1C0D 23 INC HL +4426 1C0E 79 LD A,C ; Get MSB +4427 1C0F 9E SBC A,(HL) ; Subtract MSB +4428 1C10 4F LD C,A ; Save MSB +4429 1C11 2B DEC HL ; Point back to start +4430 1C12 2B DEC HL +4431 1C13 D2 05 1C JP NC,TRYAGN ; No overflow - Try again +4432 1C16 CD 48 18 CALL PLUCDE ; Restore number +4433 1C19 23 INC HL ; Start of next number +4434 1C1A CD 2A 1A CALL FPBCDE ; Move BCDE to FPREG +4435 1C1D EB EX DE,HL ; Save point in table +4436 1C1E E1 POP HL ; Restore buffer address +4437 1C1F 70 LD (HL),B ; Save digit in buffer +4438 1C20 23 INC HL ; And move on +4439 1C21 C1 POP BC ; Restore digit count +4440 1C22 0D DEC C ; Count digits +4441 1C23 C2 F6 1B JP NZ,DIGTXT ; More - Do them +4442 1C26 05 DEC B ; Any decimal part? +4443 1C27 CA 36 1C JP Z,DOEBIT ; No - Do 'E' bit +4444 1C2A 2B SUPTLZ: DEC HL ; Move back through buffer +4445 1C2B 7E LD A,(HL) ; Get character +4446 1C2C FE 30 CP '0' ; '0' character? +4447 1C2E CA 2A 1C JP Z,SUPTLZ ; Yes - Look back for more +4448 1C31 FE 2E CP '.' ; A decimal point? +4449 1C33 C4 3F 1A CALL NZ,INCHL ; Move back over digit +4450 1C36 +4451 1C36 F1 DOEBIT: POP AF ; Get 'E' flag +4452 1C37 CA 55 1C JP Z,NOENED ; No 'E' needed - End buffer +4453 1C3A 36 45 LD (HL),'E' ; Put 'E' in buffer +4454 1C3C 23 INC HL ; And move on +4455 1C3D 36 2B LD (HL),'+' ; Put '+' in buffer +4456 1C3F F2 46 1C JP P,OUTEXP ; Positive - Output exponent +4457 1C42 36 2D LD (HL),'-' ; Put '-' in buffer +4458 1C44 2F CPL ; Negate exponent +4459 1C45 3C INC A +4460 1C46 06 2F OUTEXP: LD B,'0'-1 ; ASCII '0' - 1 +4461 1C48 04 EXPTEN: INC B ; Count subtractions +4462 1C49 D6 0A SUB 10 ; Tens digit +4463 1C4B D2 48 1C JP NC,EXPTEN ; More to do +4464 1C4E C6 3A ADD A,'0'+10 ; Restore and make ASCII +4465 1C50 23 INC HL ; Move on +4466 1C51 70 LD (HL),B ; Save MSB of exponent +4467 1C52 23 JSTZER: INC HL ; +4468 1C53 77 LD (HL),A ; Save LSB of exponent +4469 1C54 23 INC HL +4470 1C55 71 NOENED: LD (HL),C ; Mark end of buffer +4471 1C56 E1 POP HL ; Restore code string address +4472 1C57 C9 RET +4473 1C58 +4474 1C58 01 74 94 RNGTST: LD BC,9474H ; BCDE = 999999. +4475 1C5B 11 F7 23 LD DE,23F7H +4476 1C5E CD 64 1A CALL CMPNUM ; Compare numbers +4477 1C61 B7 OR A +4478 1C62 E1 POP HL ; Return address to HL +4479 1C63 E2 C0 1B JP PO,GTSIXD ; Too big - Divide by ten +4480 1C66 E9 JP (HL) ; Otherwise return to caller +4481 1C67 +4482 1C67 00 00 00 80 HALF: .BYTE 00H,00H,00H,80H ; 0.5 +4483 1C6B +4484 1C6B A0 86 01 POWERS: .BYTE 0A0H,086H,001H ; 100000 +4485 1C6E 10 27 00 .BYTE 010H,027H,000H ; 10000 +4486 1C71 E8 03 00 .BYTE 0E8H,003H,000H ; 1000 +4487 1C74 64 00 00 .BYTE 064H,000H,000H ; 100 +4488 1C77 0A 00 00 .BYTE 00AH,000H,000H ; 10 +4489 1C7A 01 00 00 .BYTE 001H,000H,000H ; 1 +4490 1C7D +4491 1C7D 21 12 1A NEGAFT: LD HL,INVSGN ; Negate result +4492 1C80 E3 EX (SP),HL ; To be done after caller +4493 1C81 E9 JP (HL) ; Return to caller +4494 1C82 +4495 1C82 CD 1A 1A SQR: CALL STAKFP ; Put value on stack +4496 1C85 21 67 1C LD HL,HALF ; Set power to 1/2 +4497 1C88 CD 27 1A CALL PHLTFP ; Move 1/2 to FPREG +4498 1C8B +4499 1C8B C1 POWER: POP BC ; Get base +4500 1C8C D1 POP DE +4501 1C8D CD E9 19 CALL TSTSGN ; Test sign of power +4502 1C90 78 LD A,B ; Get exponent of base +4503 1C91 CA D0 1C JP Z,EXP ; Make result 1 if zero +4504 1C94 F2 9B 1C JP P,POWER1 ; Positive base - Ok +4505 1C97 B7 OR A ; Zero to negative power? +4506 1C98 CA 45 07 JP Z,DZERR ; Yes - ?/0 Error +4507 1C9B B7 POWER1: OR A ; Base zero? +4508 1C9C CA 0A 18 JP Z,SAVEXP ; Yes - Return zero +4509 1C9F D5 PUSH DE ; Save base +4510 1CA0 C5 PUSH BC +4511 1CA1 79 LD A,C ; Get MSB of base +4512 1CA2 F6 7F OR 01111111B ; Get sign status +4513 1CA4 CD 35 1A CALL BCDEFP ; Move power to BCDE +4514 1CA7 F2 B8 1C JP P,POWER2 ; Positive base - Ok +4515 1CAA D5 PUSH DE ; Save power +4516 1CAB C5 PUSH BC +4517 1CAC CD BC 1A CALL INT ; Get integer of power +4518 1CAF C1 POP BC ; Restore power +4519 1CB0 D1 POP DE +4520 1CB1 F5 PUSH AF ; MSB of base +4521 1CB2 CD 64 1A CALL CMPNUM ; Power an integer? +4522 1CB5 E1 POP HL ; Restore MSB of base +4523 1CB6 7C LD A,H ; but don't affect flags +4524 1CB7 1F RRA ; Exponent odd or even? +4525 1CB8 E1 POWER2: POP HL ; Restore MSB and exponent +4526 1CB9 22 96 31 LD (FPREG+2),HL ; Save base in FPREG +4527 1CBC E1 POP HL ; LSBs of base +4528 1CBD 22 94 31 LD (FPREG),HL ; Save in FPREG +4529 1CC0 DC 7D 1C CALL C,NEGAFT ; Odd power - Negate result +4530 1CC3 CC 12 1A CALL Z,INVSGN ; Negative base - Negate it +4531 1CC6 D5 PUSH DE ; Save power +4532 1CC7 C5 PUSH BC +4533 1CC8 CD 9D 18 CALL LOG ; Get LOG of base +4534 1CCB C1 POP BC ; Restore power +4535 1CCC D1 POP DE +4536 1CCD CD DE 18 CALL FPMULT ; Multiply LOG by power +4537 1CD0 +4538 1CD0 CD 1A 1A EXP: CALL STAKFP ; Put value on stack +4539 1CD3 01 38 81 LD BC,08138H ; BCDE = 1/Ln(2) +4540 1CD6 11 3B AA LD DE,0AA3BH +4541 1CD9 CD DE 18 CALL FPMULT ; Multiply value by 1/LN(2) +4542 1CDC 3A 97 31 LD A,(FPEXP) ; Get exponent +4543 1CDF FE 88 CP 80H+8 ; Is it in range? +4544 1CE1 D2 C5 19 JP NC,OVTST1 ; No - Test for overflow +4545 1CE4 CD BC 1A CALL INT ; Get INT of FPREG +4546 1CE7 C6 80 ADD A,80H ; For excess 128 +4547 1CE9 C6 02 ADD A,2 ; Exponent > 126? +4548 1CEB DA C5 19 JP C,OVTST1 ; Yes - Test for overflow +4549 1CEE F5 PUSH AF ; Save scaling factor +4550 1CEF 21 8C 18 LD HL,UNITY ; Point to 1. +4551 1CF2 CD 94 17 CALL ADDPHL ; Add 1 to FPREG +4552 1CF5 CD D5 18 CALL MULLN2 ; Multiply by LN(2) +4553 1CF8 F1 POP AF ; Restore scaling factor +4554 1CF9 C1 POP BC ; Restore exponent +4555 1CFA D1 POP DE +4556 1CFB F5 PUSH AF ; Save scaling factor +4557 1CFC CD A0 17 CALL SUBCDE ; Subtract exponent from FPREG +4558 1CFF CD 12 1A CALL INVSGN ; Negate result +4559 1D02 21 10 1D LD HL,EXPTAB ; Coefficient table +4560 1D05 CD 40 1D CALL SMSER1 ; Sum the series +4561 1D08 11 00 00 LD DE,0 ; Zero LSBs +4562 1D0B C1 POP BC ; Scaling factor +4563 1D0C 4A LD C,D ; Zero MSB +4564 1D0D C3 DE 18 JP FPMULT ; Scale result to correct value +4565 1D10 +4566 1D10 08 EXPTAB: .BYTE 8 ; Table used by EXP +4567 1D11 40 2E 94 74 .BYTE 040H,02EH,094H,074H ; -1/7! (-1/5040) +4568 1D15 70 4F 2E 77 .BYTE 070H,04FH,02EH,077H ; 1/6! ( 1/720) +4569 1D19 6E 02 88 7A .BYTE 06EH,002H,088H,07AH ; -1/5! (-1/120) +4570 1D1D E6 A0 2A 7C .BYTE 0E6H,0A0H,02AH,07CH ; 1/4! ( 1/24) +4571 1D21 50 AA AA 7E .BYTE 050H,0AAH,0AAH,07EH ; -1/3! (-1/6) +4572 1D25 FF FF 7F 7F .BYTE 0FFH,0FFH,07FH,07FH ; 1/2! ( 1/2) +4573 1D29 00 00 80 81 .BYTE 000H,000H,080H,081H ; -1/1! (-1/1) +4574 1D2D 00 00 00 81 .BYTE 000H,000H,000H,081H ; 1/0! ( 1/1) +4575 1D31 +4576 1D31 CD 1A 1A SUMSER: CALL STAKFP ; Put FPREG on stack +4577 1D34 11 DC 18 LD DE,MULT ; Multiply by "X" +4578 1D37 D5 PUSH DE ; To be done after +4579 1D38 E5 PUSH HL ; Save address of table +4580 1D39 CD 35 1A CALL BCDEFP ; Move FPREG to BCDE +4581 1D3C CD DE 18 CALL FPMULT ; Square the value +4582 1D3F E1 POP HL ; Restore address of table +4583 1D40 CD 1A 1A SMSER1: CALL STAKFP ; Put value on stack +4584 1D43 7E LD A,(HL) ; Get number of coefficients +4585 1D44 23 INC HL ; Point to start of table +4586 1D45 CD 27 1A CALL PHLTFP ; Move coefficient to FPREG +4587 1D48 06 .BYTE 06H ; Skip "POP AF" +4588 1D49 F1 SUMLP: POP AF ; Restore count +4589 1D4A C1 POP BC ; Restore number +4590 1D4B D1 POP DE +4591 1D4C 3D DEC A ; Cont coefficients +4592 1D4D C8 RET Z ; All done +4593 1D4E D5 PUSH DE ; Save number +4594 1D4F C5 PUSH BC +4595 1D50 F5 PUSH AF ; Save count +4596 1D51 E5 PUSH HL ; Save address in table +4597 1D52 CD DE 18 CALL FPMULT ; Multiply FPREG by BCDE +4598 1D55 E1 POP HL ; Restore address in table +4599 1D56 CD 38 1A CALL LOADFP ; Number at HL to BCDE +4600 1D59 E5 PUSH HL ; Save address in table +4601 1D5A CD A3 17 CALL FPADD ; Add coefficient to FPREG +4602 1D5D E1 POP HL ; Restore address in table +4603 1D5E C3 49 1D JP SUMLP ; More coefficients +4604 1D61 +4605 1D61 CD E9 19 RND: CALL TSTSGN ; Test sign of FPREG +4606 1D64 21 C9 30 LD HL,SEED+2 ; Random number seed +4607 1D67 FA C2 1D JP M,RESEED ; Negative - Re-seed +4608 1D6A 21 EA 30 LD HL,LSTRND ; Last random number +4609 1D6D CD 27 1A CALL PHLTFP ; Move last RND to FPREG +4610 1D70 21 C9 30 LD HL,SEED+2 ; Random number seed +4611 1D73 C8 RET Z ; Return if RND(0) +4612 1D74 86 ADD A,(HL) ; Add (SEED)+2) +4613 1D75 E6 07 AND 00000111B ; 0 to 7 +4614 1D77 06 00 LD B,0 +4615 1D79 77 LD (HL),A ; Re-save seed +4616 1D7A 23 INC HL ; Move to coefficient table +4617 1D7B 87 ADD A,A ; 4 bytes +4618 1D7C 87 ADD A,A ; per entry +4619 1D7D 4F LD C,A ; BC = Offset into table +4620 1D7E 09 ADD HL,BC ; Point to coefficient +4621 1D7F CD 38 1A CALL LOADFP ; Coefficient to BCDE +4622 1D82 CD DE 18 CALL FPMULT ; ; Multiply FPREG by coefficient +4623 1D85 3A C8 30 LD A,(SEED+1) ; Get (SEED+1) +4624 1D88 3C INC A ; Add 1 +4625 1D89 E6 03 AND 00000011B ; 0 to 3 +4626 1D8B 06 00 LD B,0 +4627 1D8D FE 01 CP 1 ; Is it zero? +4628 1D8F 88 ADC A,B ; Yes - Make it 1 +4629 1D90 32 C8 30 LD (SEED+1),A ; Re-save seed +4630 1D93 21 C6 1D LD HL,RNDTAB-4 ; Addition table +4631 1D96 87 ADD A,A ; 4 bytes +4632 1D97 87 ADD A,A ; per entry +4633 1D98 4F LD C,A ; BC = Offset into table +4634 1D99 09 ADD HL,BC ; Point to value +4635 1D9A CD 94 17 CALL ADDPHL ; Add value to FPREG +4636 1D9D CD 35 1A RND1: CALL BCDEFP ; Move FPREG to BCDE +4637 1DA0 7B LD A,E ; Get LSB +4638 1DA1 59 LD E,C ; LSB = MSB +4639 1DA2 EE 4F XOR 01001111B ; Fiddle around +4640 1DA4 4F LD C,A ; New MSB +4641 1DA5 36 80 LD (HL),80H ; Set exponent +4642 1DA7 2B DEC HL ; Point to MSB +4643 1DA8 46 LD B,(HL) ; Get MSB +4644 1DA9 36 80 LD (HL),80H ; Make value -0.5 +4645 1DAB 21 C7 30 LD HL,SEED ; Random number seed +4646 1DAE 34 INC (HL) ; Count seed +4647 1DAF 7E LD A,(HL) ; Get seed +4648 1DB0 D6 AB SUB 171 ; Do it modulo 171 +4649 1DB2 C2 B9 1D JP NZ,RND2 ; Non-zero - Ok +4650 1DB5 77 LD (HL),A ; Zero seed +4651 1DB6 0C INC C ; Fillde about +4652 1DB7 15 DEC D ; with the +4653 1DB8 1C INC E ; number +4654 1DB9 CD F4 17 RND2: CALL BNORM ; Normalise number +4655 1DBC 21 EA 30 LD HL,LSTRND ; Save random number +4656 1DBF C3 41 1A JP FPTHL ; Move FPREG to last and return +4657 1DC2 +4658 1DC2 77 RESEED: LD (HL),A ; Re-seed random numbers +4659 1DC3 2B DEC HL +4660 1DC4 77 LD (HL),A +4661 1DC5 2B DEC HL +4662 1DC6 77 LD (HL),A +4663 1DC7 C3 9D 1D JP RND1 ; Return RND seed +4664 1DCA +4665 1DCA 68 B1 46 68 RNDTAB: .BYTE 068H,0B1H,046H,068H ; Table used by RND +4666 1DCE 99 E9 92 69 .BYTE 099H,0E9H,092H,069H +4667 1DD2 10 D1 75 68 .BYTE 010H,0D1H,075H,068H +4668 1DD6 +4669 1DD6 21 20 1E COS: LD HL,HALFPI ; Point to PI/2 +4670 1DD9 CD 94 17 CALL ADDPHL ; Add it to PPREG +4671 1DDC CD 1A 1A SIN: CALL STAKFP ; Put angle on stack +4672 1DDF 01 49 83 LD BC,8349H ; BCDE = 2 PI +4673 1DE2 11 DB 0F LD DE,0FDBH +4674 1DE5 CD 2A 1A CALL FPBCDE ; Move 2 PI to FPREG +4675 1DE8 C1 POP BC ; Restore angle +4676 1DE9 D1 POP DE +4677 1DEA CD 3F 19 CALL DVBCDE ; Divide angle by 2 PI +4678 1DED CD 1A 1A CALL STAKFP ; Put it on stack +4679 1DF0 CD BC 1A CALL INT ; Get INT of result +4680 1DF3 C1 POP BC ; Restore number +4681 1DF4 D1 POP DE +4682 1DF5 CD A0 17 CALL SUBCDE ; Make it 0 <= value < 1 +4683 1DF8 21 24 1E LD HL,QUARTR ; Point to 0.25 +4684 1DFB CD 9A 17 CALL SUBPHL ; Subtract value from 0.25 +4685 1DFE CD E9 19 CALL TSTSGN ; Test sign of value +4686 1E01 37 SCF ; Flag positive +4687 1E02 F2 0C 1E JP P,SIN1 ; Positive - Ok +4688 1E05 CD 91 17 CALL ROUND ; Add 0.5 to value +4689 1E08 CD E9 19 CALL TSTSGN ; Test sign of value +4690 1E0B B7 OR A ; Flag negative +4691 1E0C F5 SIN1: PUSH AF ; Save sign +4692 1E0D F4 12 1A CALL P,INVSGN ; Negate value if positive +4693 1E10 21 24 1E LD HL,QUARTR ; Point to 0.25 +4694 1E13 CD 94 17 CALL ADDPHL ; Add 0.25 to value +4695 1E16 F1 POP AF ; Restore sign +4696 1E17 D4 12 1A CALL NC,INVSGN ; Negative - Make positive +4697 1E1A 21 28 1E LD HL,SINTAB ; Coefficient table +4698 1E1D C3 31 1D JP SUMSER ; Evaluate sum of series +4699 1E20 +4700 1E20 DB 0F 49 81 HALFPI: .BYTE 0DBH,00FH,049H,081H ; 1.5708 (PI/2) +4701 1E24 +4702 1E24 00 00 00 7F QUARTR: .BYTE 000H,000H,000H,07FH ; 0.25 +4703 1E28 +4704 1E28 05 SINTAB: .BYTE 5 ; Table used by SIN +4705 1E29 BA D7 1E 86 .BYTE 0BAH,0D7H,01EH,086H ; 39.711 +4706 1E2D 64 26 99 87 .BYTE 064H,026H,099H,087H ;-76.575 +4707 1E31 58 34 23 87 .BYTE 058H,034H,023H,087H ; 81.602 +4708 1E35 E0 5D A5 86 .BYTE 0E0H,05DH,0A5H,086H ;-41.342 +4709 1E39 DA 0F 49 83 .BYTE 0DAH,00FH,049H,083H ; 6.2832 +4710 1E3D +4711 1E3D CD 1A 1A TAN: CALL STAKFP ; Put angle on stack +4712 1E40 CD DC 1D CALL SIN ; Get SIN of angle +4713 1E43 C1 POP BC ; Restore angle +4714 1E44 E1 POP HL +4715 1E45 CD 1A 1A CALL STAKFP ; Save SIN of angle +4716 1E48 EB EX DE,HL ; BCDE = Angle +4717 1E49 CD 2A 1A CALL FPBCDE ; Angle to FPREG +4718 1E4C CD D6 1D CALL COS ; Get COS of angle +4719 1E4F C3 3D 19 JP DIV ; TAN = SIN / COS +4720 1E52 +4721 1E52 CD E9 19 ATN: CALL TSTSGN ; Test sign of value +4722 1E55 FC 7D 1C CALL M,NEGAFT ; Negate result after if -ve +4723 1E58 FC 12 1A CALL M,INVSGN ; Negate value if -ve +4724 1E5B 3A 97 31 LD A,(FPEXP) ; Get exponent +4725 1E5E FE 81 CP 81H ; Number less than 1? +4726 1E60 DA 6F 1E JP C,ATN1 ; Yes - Get arc tangnt +4727 1E63 01 00 81 LD BC,8100H ; BCDE = 1 +4728 1E66 51 LD D,C +4729 1E67 59 LD E,C +4730 1E68 CD 3F 19 CALL DVBCDE ; Get reciprocal of number +4731 1E6B 21 9A 17 LD HL,SUBPHL ; Sub angle from PI/2 +4732 1E6E E5 PUSH HL ; Save for angle > 1 +4733 1E6F 21 79 1E ATN1: LD HL,ATNTAB ; Coefficient table +4734 1E72 CD 31 1D CALL SUMSER ; Evaluate sum of series +4735 1E75 21 20 1E LD HL,HALFPI ; PI/2 - angle in case > 1 +4736 1E78 C9 RET ; Number > 1 - Sub from PI/2 +4737 1E79 +4738 1E79 09 ATNTAB: .BYTE 9 ; Table used by ATN +4739 1E7A 4A D7 3B 78 .BYTE 04AH,0D7H,03BH,078H ; 1/17 +4740 1E7E 02 6E 84 7B .BYTE 002H,06EH,084H,07BH ;-1/15 +4741 1E82 FE C1 2F 7C .BYTE 0FEH,0C1H,02FH,07CH ; 1/13 +4742 1E86 74 31 9A 7D .BYTE 074H,031H,09AH,07DH ;-1/11 +4743 1E8A 84 3D 5A 7D .BYTE 084H,03DH,05AH,07DH ; 1/9 +4744 1E8E C8 7F 91 7E .BYTE 0C8H,07FH,091H,07EH ;-1/7 +4745 1E92 E4 BB 4C 7E .BYTE 0E4H,0BBH,04CH,07EH ; 1/5 +4746 1E96 6C AA AA 7F .BYTE 06CH,0AAH,0AAH,07FH ;-1/3 +4747 1E9A 00 00 00 81 .BYTE 000H,000H,000H,081H ; 1/1 +4748 1E9E +4749 1E9E +4750 1E9E C9 ARET: RET ; A RETurn instruction +4751 1E9F +4752 1E9F D7 GETINP: RST 10H ;input a character +4753 1EA0 C9 RET +4754 1EA1 +4755 1EA1 CLS: +4756 1EA1 3E 0C LD A,CS ; ASCII Clear screen +4757 1EA3 C3 DB 1F JP MONOUT ; Output character +4758 1EA6 +4759 1EA6 CD 68 17 WIDTH: CALL GETINT ; Get integer 0-255 +4760 1EA9 7B LD A,E ; Width to A +4761 1EAA 32 F2 30 LD (LWIDTH),A ; Set width +4762 1EAD C9 RET +4763 1EAE +4764 1EAE CD 07 10 LINES: CALL GETNUM ; Get a number +4765 1EB1 CD 4C 0C CALL DEINT ; Get integer -32768 to 32767 +4766 1EB4 ED 53 F6 30 LD (LINESC),DE ; Set lines counter +4767 1EB8 ED 53 F8 30 LD (LINESN),DE ; Set lines number +4768 1EBC C9 RET +4769 1EBD +4770 1EBD CD 4C 0C DEEK: CALL DEINT ; Get integer -32768 to 32767 +4771 1EC0 D5 PUSH DE ; Save number +4772 1EC1 E1 POP HL ; Number to HL +4773 1EC2 46 LD B,(HL) ; Get LSB of contents +4774 1EC3 23 INC HL +4775 1EC4 7E LD A,(HL) ; Get MSB of contents +4776 1EC5 C3 C2 13 JP ABPASS ; Return integer AB +4777 1EC8 +4778 1EC8 CD 07 10 DOKE: CALL GETNUM ; Get a number +4779 1ECB CD 4C 0C CALL DEINT ; Get integer -32768 to 32767 +4780 1ECE D5 PUSH DE ; Save address +4781 1ECF CD 10 0A CALL CHKSYN ; Make sure ',' follows +4782 1ED2 2C .BYTE ',' +4783 1ED3 CD 07 10 CALL GETNUM ; Get a number +4784 1ED6 CD 4C 0C CALL DEINT ; Get integer -32768 to 32767 +4785 1ED9 E3 EX (SP),HL ; Save value,get address +4786 1EDA 73 LD (HL),E ; Save LSB of value +4787 1EDB 23 INC HL +4788 1EDC 72 LD (HL),D ; Save MSB of value +4789 1EDD E1 POP HL ; Restore code string address +4790 1EDE C9 RET +4791 1EDF +4792 1EDF +4793 1EDF ; HEX$(nn) Convert 16 bit number to Hexadecimal string +4794 1EDF +4795 1EDF CD 0A 10 HEX: CALL TSTNUM ; Verify it's a number +4796 1EE2 CD 4C 0C CALL DEINT ; Get integer -32768 to 32767 +4797 1EE5 C5 PUSH BC ; Save contents of BC +4798 1EE6 21 99 31 LD HL,PBUFF +4799 1EE9 7A LD A,D ; Get high order into A +4800 1EEA FE 00 CP $0 +4801 1EEC 28 0C JR Z,HEX2 ; Skip output if both high digits are zero +4802 1EEE CD 17 1F CALL BYT2ASC ; Convert D to ASCII +4803 1EF1 78 LD A,B +4804 1EF2 FE 30 CP '0' +4805 1EF4 28 02 JR Z,HEX1 ; Don't store high digit if zero +4806 1EF6 70 LD (HL),B ; Store it to PBUFF +4807 1EF7 23 INC HL ; Next location +4808 1EF8 71 HEX1: LD (HL),C ; Store C to PBUFF+1 +4809 1EF9 23 INC HL ; Next location +4810 1EFA 7B HEX2: LD A,E ; Get lower byte +4811 1EFB CD 17 1F CALL BYT2ASC ; Convert E to ASCII +4812 1EFE 7A LD A,D +4813 1EFF FE 00 CP $0 +4814 1F01 20 05 JR NZ,HEX3 ; If upper byte was not zero then always print lower byte +4815 1F03 78 LD A,B +4816 1F04 FE 30 CP '0' ; If high digit of lower byte is zero then don't print +4817 1F06 28 02 JR Z,HEX4 +4818 1F08 70 HEX3: LD (HL),B ; to PBUFF+2 +4819 1F09 23 INC HL ; Next location +4820 1F0A 71 HEX4: LD (HL),C ; to PBUFF+3 +4821 1F0B 23 INC HL ; PBUFF+4 to zero +4822 1F0C AF XOR A ; Terminating character +4823 1F0D 77 LD (HL),A ; Store zero to terminate +4824 1F0E 23 INC HL ; Make sure PBUFF is terminated +4825 1F0F 77 LD (HL),A ; Store the double zero there +4826 1F10 C1 POP BC ; Get BC back +4827 1F11 21 99 31 LD HL,PBUFF ; Reset to start of PBUFF +4828 1F14 C3 70 14 JP STR1 ; Convert the PBUFF to a string and return it +4829 1F17 +4830 1F17 47 BYT2ASC LD B,A ; Save original value +4831 1F18 E6 0F AND $0F ; Strip off upper nybble +4832 1F1A FE 0A CP $0A ; 0-9? +4833 1F1C 38 02 JR C,ADD30 ; If A-F, add 7 more +4834 1F1E C6 07 ADD A,$07 ; Bring value up to ASCII A-F +4835 1F20 C6 30 ADD30 ADD A,$30 ; And make ASCII +4836 1F22 4F LD C,A ; Save converted char to C +4837 1F23 78 LD A,B ; Retrieve original value +4838 1F24 0F RRCA ; and Rotate it right +4839 1F25 0F RRCA +4840 1F26 0F RRCA +4841 1F27 0F RRCA +4842 1F28 E6 0F AND $0F ; Mask off upper nybble +4843 1F2A FE 0A CP $0A ; 0-9? < A hex? +4844 1F2C 38 02 JR C,ADD301 ; Skip Add 7 +4845 1F2E C6 07 ADD A,$07 ; Bring it up to ASCII A-F +4846 1F30 C6 30 ADD301 ADD A,$30 ; And make it full ASCII +4847 1F32 47 LD B,A ; Store high order byte +4848 1F33 C9 RET +4849 1F34 +4850 1F34 ; Convert "&Hnnnn" to FPREG +4851 1F34 ; Gets a character from (HL) checks for Hexadecimal ASCII numbers "&Hnnnn" +4852 1F34 ; Char is in A, NC if char is ;<=>?@ A-z, CY is set if 0-9 +4853 1F34 EB HEXTFP EX DE,HL ; Move code string pointer to DE +4854 1F35 21 00 00 LD HL,$0000 ; Zero out the value +4855 1F38 CD 4D 1F CALL GETHEX ; Check the number for valid hex +4856 1F3B DA 6D 1F JP C,HXERR ; First value wasn't hex, HX error +4857 1F3E 18 05 JR HEXLP1 ; Convert first character +4858 1F40 CD 4D 1F HEXLP CALL GETHEX ; Get second and addtional characters +4859 1F43 38 1F JR C,HEXIT ; Exit if not a hex character +4860 1F45 29 HEXLP1 ADD HL,HL ; Rotate 4 bits to the left +4861 1F46 29 ADD HL,HL +4862 1F47 29 ADD HL,HL +4863 1F48 29 ADD HL,HL +4864 1F49 B5 OR L ; Add in D0-D3 into L +4865 1F4A 6F LD L,A ; Save new value +4866 1F4B 18 F3 JR HEXLP ; And continue until all hex characters are in +4867 1F4D +4868 1F4D 13 GETHEX INC DE ; Next location +4869 1F4E 1A LD A,(DE) ; Load character at pointer +4870 1F4F FE 20 CP ' ' +4871 1F51 CA 4D 1F JP Z,GETHEX ; Skip spaces +4872 1F54 D6 30 SUB $30 ; Get absolute value +4873 1F56 D8 RET C ; < "0", error +4874 1F57 FE 0A CP $0A +4875 1F59 38 05 JR C,NOSUB7 ; Is already in the range 0-9 +4876 1F5B D6 07 SUB $07 ; Reduce to A-F +4877 1F5D FE 0A CP $0A ; Value should be $0A-$0F at this point +4878 1F5F D8 RET C ; CY set if was : ; < = > ? @ +4879 1F60 FE 10 NOSUB7 CP $10 ; > Greater than "F"? +4880 1F62 3F CCF +4881 1F63 C9 RET ; CY set if it wasn't valid hex +4882 1F64 +4883 1F64 EB HEXIT EX DE,HL ; Value into DE, Code string into HL +4884 1F65 7A LD A,D ; Load DE into AC +4885 1F66 4B LD C,E ; For prep to +4886 1F67 E5 PUSH HL +4887 1F68 CD C1 13 CALL ACPASS ; ACPASS to set AC as integer into FPREG +4888 1F6B E1 POP HL +4889 1F6C C9 RET +4890 1F6D +4891 1F6D 1E 26 HXERR: LD E,HX ; ?HEX Error +4892 1F6F C3 56 07 JP ERROR +4893 1F72 +4894 1F72 ; BIN$(NN) Convert integer to a 1-16 char binary string +4895 1F72 CD 0A 10 BIN: CALL TSTNUM ; Verify it's a number +4896 1F75 CD 4C 0C CALL DEINT ; Get integer -32768 to 32767 +4897 1F78 C5 BIN2: PUSH BC ; Save contents of BC +4898 1F79 21 99 31 LD HL,PBUFF +4899 1F7C 06 11 LD B,17 ; One higher than max char count +4900 1F7E ZEROSUP: ; Suppress leading zeros +4901 1F7E 05 DEC B ; Max 16 chars +4902 1F7F 78 LD A,B +4903 1F80 FE 01 CP $01 +4904 1F82 28 08 JR Z,BITOUT ; Always output at least one character +4905 1F84 CB 13 RL E +4906 1F86 CB 12 RL D +4907 1F88 30 F4 JR NC,ZEROSUP +4908 1F8A 18 04 JR BITOUT2 +4909 1F8C BITOUT: +4910 1F8C CB 13 RL E +4911 1F8E CB 12 RL D ; Top bit now in carry +4912 1F90 BITOUT2: +4913 1F90 3E 30 LD A,'0' ; Char for '0' +4914 1F92 CE 00 ADC A,0 ; If carry set then '0' --> '1' +4915 1F94 77 LD (HL),A +4916 1F95 23 INC HL +4917 1F96 05 DEC B +4918 1F97 20 F3 JR NZ,BITOUT +4919 1F99 AF XOR A ; Terminating character +4920 1F9A 77 LD (HL),A ; Store zero to terminate +4921 1F9B 23 INC HL ; Make sure PBUFF is terminated +4922 1F9C 77 LD (HL),A ; Store the double zero there +4923 1F9D C1 POP BC +4924 1F9E 21 99 31 LD HL,PBUFF +4925 1FA1 C3 70 14 JP STR1 +4926 1FA4 +4927 1FA4 ; Convert "&Bnnnn" to FPREG +4928 1FA4 ; Gets a character from (HL) checks for Binary ASCII numbers "&Bnnnn" +4929 1FA4 EB BINTFP: EX DE,HL ; Move code string pointer to DE +4930 1FA5 21 00 00 LD HL,$0000 ; Zero out the value +4931 1FA8 CD C1 1F CALL CHKBIN ; Check the number for valid bin +4932 1FAB DA CF 1F JP C,BINERR ; First value wasn't bin, HX error +4933 1FAE D6 30 BINIT: SUB '0' +4934 1FB0 29 ADD HL,HL ; Rotate HL left +4935 1FB1 B5 OR L +4936 1FB2 6F LD L,A +4937 1FB3 CD C1 1F CALL CHKBIN ; Get second and addtional characters +4938 1FB6 30 F6 JR NC,BINIT ; Process if a bin character +4939 1FB8 EB EX DE,HL ; Value into DE, Code string into HL +4940 1FB9 7A LD A,D ; Load DE into AC +4941 1FBA 4B LD C,E ; For prep to +4942 1FBB E5 PUSH HL +4943 1FBC CD C1 13 CALL ACPASS ; ACPASS to set AC as integer into FPREG +4944 1FBF E1 POP HL +4945 1FC0 C9 RET +4946 1FC1 +4947 1FC1 ; Char is in A, NC if char is 0 or 1 +4948 1FC1 13 CHKBIN: INC DE +4949 1FC2 1A LD A,(DE) +4950 1FC3 FE 20 CP ' ' +4951 1FC5 CA C1 1F JP Z,CHKBIN ; Skip spaces +4952 1FC8 FE 30 CP '0' ; Set C if < '0' +4953 1FCA D8 RET C +4954 1FCB FE 32 CP '2' +4955 1FCD 3F CCF ; Set C if > '1' +4956 1FCE C9 RET +4957 1FCF +4958 1FCF 1E 28 BINERR: LD E,BN ; ?BIN Error +4959 1FD1 C3 56 07 JP ERROR +4960 1FD4 +4961 1FD4 +4962 1FD4 JJUMP1: +4963 1FD4 DD 21 FF FF LD IX,-1 ; Flag cold start +4964 1FD8 C3 A6 03 JP CSTART ; Go and initialise +4965 1FDB +4966 1FDB MONOUT: +4967 1FDB C3 08 00 JP $0008 ; output a char +4968 1FDE +4969 1FDE +4970 1FDE MONITR: +4971 1FDE C3 00 00 JP $0000 ; Restart (Normally Monitor Start) +4972 1FE1 +4973 1FE1 +4974 1FE1 3E 00 INITST: LD A,0 ; Clear break flag +4975 1FE3 32 FD 30 LD (BRKFLG),A +4976 1FE6 C3 AD 03 JP INIT +4977 1FE9 +4978 1FE9 ED 45 ARETN: RETN ; Return from NMI +4979 1FEB +4980 1FEB +4981 1FEB F5 TSTBIT: PUSH AF ; Save bit mask +4982 1FEC A0 AND B ; Get common bits +4983 1FED C1 POP BC ; Restore bit mask +4984 1FEE B8 CP B ; Same bit set? +4985 1FEF 3E 00 LD A,0 ; Return 0 in A +4986 1FF1 C9 RET +4987 1FF2 +4988 1FF2 CD 1B 0A OUTNCR: CALL OUTC ; Output character in A +4989 1FF5 C3 42 0E JP PRNTCRLF ; Output CRLF +4990 1FF8 +4991 1FF8 .end +4992 1FF8 +tasm: Number of errors = 0 diff --git a/Z80 CPM and bootloader (basmon)/source/BASMON.OBJ b/Z80 CPM and bootloader (basmon)/source/BASMON.OBJ new file mode 100644 index 0000000..02f308a --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/BASMON.OBJ @@ -0,0 +1,52 @@ +:0430040000000000C8 +:180000000D0A426F6F742043502F4D3F000D0A4C6F6164696E67204397 +:18001800502F4D2E2E2E0D0A0043502F4D20426F6F7420524F4D203240 +:180030002E3020627920472E20536561726C650D0A0D0A4243206F729A +:18004800204257202D20524F4D20424153494320436F6C642F5761720F +:180060006D0D0A5820202020202020202D20426F6F742043502F4D207C +:18007800286C6F61642024443030302D2446464646290D0A3A6E6E6E63 +:180090006E2E2E2E202D204C6F616420496E74656C2D48657820666916 +:1800A8006C65207265636F72640D0A476E6E6E6E202020202D20527526 +:1800C0006E206C6F63206E6E6E6E0D0A000D0A436F6C64206F7220773C +:1800D80061726D3F0D0A00436865636B73756D206572726F720D0A00E6 +:1800F0000C5072657373205B53504143455D20746F2061637469766100 +:18010800746520636F6E736F6C650D0A00436F6D706C6574650D0A008C +:180120000000000020427974657320667265650D0A00005A38302042A3 +:18013800415349432056657220342E37620D0A436F7079726967687457 +:18015000202843292031393738206279204D6963726F736F66740D0A02 +:1801680000004D656D6F727920746F7000000000000000B330000000B0 +:1801800000000000000000000000000000000000000000000000000166 +:18019800310000000000000000000000000000000000000000C54E44C7 +:1801B000C64F52CE455854C4415441C94E505554C4494DD2454144CCA5 +:1801C8004554C74F544FD2554EC946D24553544F5245C74F535542D2D3 +:1801E000455455524ED2454DD3544F50CF5554CF4ECE554C4CD741499E +:1801F80054C44546D04F4B45C44F4B45D3435245454ECC494E4553C3FC +:180210004C53D749445448CD4F4E49544F52D34554D245534554D052FE +:18022800494E54C34F4E54CC495354C34C454152C34C4F4144C3534142 +:180240005645CE4557D4414228D44FC64ED3504328D448454ECE4F543D +:18025800D3544550ABADAAAFDEC14E44CF52BEBDBCD3474EC94E54C104 +:180270004253D55352C65245C94E50D04F53D35152D24E44CC4F47C530 +:180288005850C34F53D3494ED4414EC1544ED045454BC445454BD04FC4 +:1802A000494E54CC454ED3545224D6414CC15343C3485224C84558249B +:1802B800C2494E24CC45465424D24947485424CD4944248000000000C2 +:1802D0000000B50300000000000000000000000000000000000000005E +:1802E80000000000000000000000000000000000000000000000980462 +:1803000000009904043107310000000000000000000000000000790062 +:18031800007900007C00007C00007F000050000046E8034E46534E52D5 +:18033000474F4446434F564F4D554C425344442F304944544D4F534CD8 +:18034800535354434E55464D4F4858424E000000354ACA99391C769866 +:180360002295B3980ADD479853D199990A1A9F9865BCCD98D6773E9863 +:1803780052C74F8001FF1C000014001400000000000D32FEFFAA31200A +:180390004572726F720020696E20004F6B0D0A0000427265616B003E40 +:1803A8000101010101013E3EA6F6212C3E013AB43E88A9293F526564B3 +:1803C0006F2066726F6D2073746172740D0A003B3EF62C3F4578747200 +:1803D800612069676E6F7265640D0A00F628292CF600002CF629113E8A +:1803F000162829B4A70E112C29292C2C2C210000008103AA561980F1E3 +:1804080022768045AA388221D2FE00000080A08601102700E8030064FD +:1804200000000A000001000008402E9474704F2E776E02887AE6A02AB5 +:180438007C50AAAA7EFFFF7F7F00008081000000810668B1466899E941 +:18045000926910D17568DB0F49810000007F05BAD71E8664269987586C +:18046800342387E05DA586DA0F4983094AD73B78026E847BFEC12F7CCB +:1804800074319A7D843D5A7DC87F917EE4BB4C7E6CAAAA7F0000008191 +:010498002C37 +:00000001FF diff --git a/Z80 CPM and bootloader (basmon)/source/CBIOS128.LST b/Z80 CPM and bootloader (basmon)/source/CBIOS128.LST new file mode 100644 index 0000000..b3c6cd7 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/CBIOS128.LST @@ -0,0 +1,947 @@ +0001 0000 ;================================================================================== +0002 0000 ; Contents of this file are copyright Grant Searle +0003 0000 ; Blocking/unblocking routines are the published version by Digital Research +0004 0000 ; (bugfixed, as found on the web) +0005 0000 ; +0006 0000 ; You have permission to use this for NON COMMERCIAL USE ONLY +0007 0000 ; If you wish to use it elsewhere, please include an acknowledgement to myself. +0008 0000 ; +0009 0000 ; http://searle.hostei.com/grant/index.html +0010 0000 ; +0011 0000 ; eMail: home.micros01@btinternet.com +0012 0000 ; +0013 0000 ; If the above don't work, please perform an Internet search to see if I have +0014 0000 ; updated the web page hosting service. +0015 0000 ; +0016 0000 ;================================================================================== +0017 0000 +0018 0000 ccp .EQU 0D000h ; Base of CCP. +0019 0000 bdos .EQU ccp + 0806h ; Base of BDOS. +0020 0000 bios .EQU ccp + 1600h ; Base of BIOS. +0021 0000 +0022 0000 ; Set CP/M low memory datA, vector and buffer addresses. +0023 0000 +0024 0000 iobyte .EQU 03h ; Intel standard I/O definition byte. +0025 0000 userdrv .EQU 04h ; Current user number and drive. +0026 0000 tpabuf .EQU 80h ; Default I/O buffer and command line storage. +0027 0000 +0028 0000 +0029 0000 SD_DATA .EQU 088H +0030 0000 SD_CONTROL .EQU 089H +0031 0000 SD_STATUS .EQU 089H +0032 0000 SD_LBA0 .EQU 08AH +0033 0000 SD_LBA1 .EQU 08BH +0034 0000 SD_LBA2 .EQU 08CH +0035 0000 +0036 0000 RTS_HIGH .EQU 0D5H +0037 0000 RTS_LOW .EQU 095H +0038 0000 +0039 0000 ACIA0_D .EQU $81 +0040 0000 ACIA0_C .EQU $80 +0041 0000 ACIA1_D .EQU $83 +0042 0000 ACIA1_C .EQU $82 +0043 0000 +0044 0000 nmi .EQU 66H +0045 0000 +0046 0000 blksiz .equ 4096 ;CP/M allocation size +0047 0000 hstsiz .equ 512 ;host disk sector size +0048 0000 hstspt .equ 32 ;host disk sectors/trk +0049 0000 hstblk .equ hstsiz/128 ;CP/M sects/host buff +0050 0000 cpmspt .equ hstblk * hstspt ;CP/M sectors/track +0051 0000 secmsk .equ hstblk-1 ;sector mask +0052 0000 ;compute sector mask +0053 0000 ;secshf .equ 2 ;log2(hstblk) +0054 0000 +0055 0000 wrall .equ 0 ;write to allocated +0056 0000 wrdir .equ 1 ;write to directory +0057 0000 wrual .equ 2 ;write to unallocated +0058 0000 +0059 0000 LF .EQU 0AH ;line feed +0060 0000 FF .EQU 0CH ;form feed +0061 0000 CR .EQU 0DH ;carriage RETurn +0062 0000 +0063 0000 ;================================================================================================ +0064 0000 +0065 E600 .ORG bios ; BIOS origin. +0066 E600 +0067 E600 ;================================================================================================ +0068 E600 ; BIOS jump table. +0069 E600 ;================================================================================================ +0070 E600 C3 51 E7 JP boot ; 0 Initialize. +0071 E603 C3 B5 E7 wboote: JP wboot ; 1 Warm boot. +0072 E606 C3 1D E8 JP const ; 2 Console status. +0073 E609 C3 58 E8 JP conin ; 3 Console input. +0074 E60C C3 96 E8 JP conout ; 4 Console OUTput. +0075 E60F C3 7E E8 JP list ; 5 List OUTput. +0076 E612 C3 8A E8 JP punch ; 6 punch OUTput. +0077 E615 C3 4C E8 JP reader ; 7 Reader input. +0078 E618 C3 EF E8 JP home ; 8 Home disk. +0079 E61B C3 C7 E8 JP seldsk ; 9 Select disk. +0080 E61E C3 FB E8 JP settrk ; 10 Select track. +0081 E621 C3 00 E9 JP setsec ; 11 Select sector. +0082 E624 C3 05 E9 JP setdma ; 12 Set DMA ADDress. +0083 E627 C3 0D E9 JP read ; 13 Read 128 bytes. +0084 E62A C3 21 E9 JP write ; 14 Write 128 bytes. +0085 E62D C3 C4 E8 JP listst ; 15 List status. +0086 E630 C3 0A E9 JP sectran ; 16 Sector translate. +0087 E633 +0088 E633 ;================================================================================================ +0089 E633 ; Disk parameter headers for disk 0 to 15 +0090 E633 ;================================================================================================ +0091 E633 dpbase: +0092 E633 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb0,0000h,alv00 +0092 E639 00000DEB33E700008DEB +0093 E643 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv01 +0093 E649 00000DEB42E700008EEC +0094 E653 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv02 +0094 E659 00000DEB42E700008FED +0095 E663 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv03 +0095 E669 00000DEB42E7000090EE +0096 E673 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv04 +0096 E679 00000DEB42E7000091EF +0097 E683 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv05 +0097 E689 00000DEB42E7000092F0 +0098 E693 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv06 +0098 E699 00000DEB42E7000093F1 +0099 E6A3 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv07 +0099 E6A9 00000DEB42E7000094F2 +0100 E6B3 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv08 +0100 E6B9 00000DEB42E7000095F3 +0101 E6C3 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv09 +0101 E6C9 00000DEB42E7000096F4 +0102 E6D3 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv10 +0102 E6D9 00000DEB42E7000097F5 +0103 E6E3 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv11 +0103 E6E9 00000DEB42E7000098F6 +0104 E6F3 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv12 +0104 E6F9 00000DEB42E7000099F7 +0105 E703 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv13 +0105 E709 00000DEB42E700009AF8 +0106 E713 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv14 +0106 E719 00000DEB42E700009BF9 +0107 E723 000000000000 .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv15 +0107 E729 00000DEB42E700009CFA +0108 E733 +0109 E733 ; First drive has a reserved track for CP/M +0110 E733 dpb0: +0111 E733 80 00 .DW 128 ;SPT - sectors per track +0112 E735 05 .DB 5 ;BSH - block shift factor +0113 E736 1F .DB 31 ;BLM - block mask +0114 E737 01 .DB 1 ;EXM - Extent mask +0115 E738 FB 07 .DW 2043 ; (2047-4) DSM - Storage size (blocks - 1) +0116 E73A FF 01 .DW 511 ;DRM - Number of directory entries - 1 +0117 E73C F0 .DB 240 ;AL0 - 1 bit set per directory block +0118 E73D 00 .DB 0 ;AL1 - " +0119 E73E 00 00 .DW 0 ;CKS - DIR check vector size (DRM+1)/4 (0=fixed disk) +0120 E740 01 00 .DW 1 ;OFF - Reserved tracks +0121 E742 +0122 E742 dpb: +0123 E742 80 00 .DW 128 ;SPT - sectors per track +0124 E744 05 .DB 5 ;BSH - block shift factor +0125 E745 1F .DB 31 ;BLM - block mask +0126 E746 01 .DB 1 ;EXM - Extent mask +0127 E747 FF 07 .DW 2047 ;DSM - Storage size (blocks - 1) +0128 E749 FF 01 .DW 511 ;DRM - Number of directory entries - 1 +0129 E74B F0 .DB 240 ;AL0 - 1 bit set per directory block +0130 E74C 00 .DB 0 ;AL1 - " +0131 E74D 00 00 .DW 0 ;CKS - DIR check vector size (DRM+1)/4 (0=fixed disk) +0132 E74F 00 00 .DW 0 ;OFF - Reserved tracks +0133 E751 +0134 E751 ;================================================================================================ +0135 E751 ; Cold boot +0136 E751 ;================================================================================================ +0137 E751 +0138 E751 boot: +0139 E751 F3 DI ; Disable interrupts. +0140 E752 31 C1 FB LD SP,biosstack ; Set default stack. +0141 E755 +0142 E755 ; Turn off ROM +0143 E755 +0144 E755 3E 01 LD A,$01 +0145 E757 D3 38 OUT ($38),A +0146 E759 +0147 E759 3E 95 LD A,RTS_LOW +0148 E75B D3 80 OUT (ACIA0_C),A ; Initialise ACIA0 +0149 E75D D3 82 OUT (ACIA1_C),A ; Initialise ACIA1 +0150 E75F +0151 E75F CD F9 EA CALL printInline +0152 E762 0C .DB FF +0153 E763 43502F4D2042 .TEXT "CP/M BIOS 2.0 by G. Searle 2013" +0153 E769 494F5320322E3020627920472E20536561726C652032303133 +0154 E782 0D 0A .DB CR,LF +0155 E784 0D 0A .DB CR,LF +0156 E786 43502F4D2032 .TEXT "CP/M 2.2 " +0156 E78C 2E3220 +0157 E78F 28 63 29 .TEXT "(c)" +0158 E792 203139373920 .TEXT " 1979 by Digital Research" +0158 E798 6279204469676974616C205265736561726368 +0159 E7AB 0D 0A 00 .DB CR,LF,0 +0160 E7AE +0161 E7AE ; CALL sdPreamble?? +0162 E7AE +0163 E7AE AF XOR a ; Clear I/O & drive bytes. +0164 E7AF 32 04 00 LD (userdrv),A +0165 E7B2 C3 F5 E7 JP gocpm +0166 E7B5 +0167 E7B5 ;================================================================================================ +0168 E7B5 ; Warm boot +0169 E7B5 ;================================================================================================ +0170 E7B5 +0171 E7B5 wboot: +0172 E7B5 F3 DI ; Disable interrupts. +0173 E7B6 31 C1 FB LD SP,biosstack ; Set default stack. +0174 E7B9 +0175 E7B9 06 0B LD B,11 ; Number of sectors to reload +0176 E7BB +0177 E7BB 3E 00 LD A,0 +0178 E7BD 32 C9 FB LD (hstsec),A +0179 E7C0 D3 8C OUT (SD_LBA2),A +0180 E7C2 D3 8B OUT (SD_LBA1),A +0181 E7C4 +0182 E7C4 21 00 D0 LD HL,ccp +0183 E7C7 +0184 E7C7 wbRdAllSecs: +0185 E7C7 +0186 E7C7 DB 89 wBrdWait1: IN A,(SD_STATUS) +0187 E7C9 FE 80 CP 128 +0188 E7CB 20 FA JR NZ,wBrdWait1 +0189 E7CD +0190 E7CD 3A C9 FB LD A,(hstsec) +0191 E7D0 D3 8A OUT (SD_LBA0),A +0192 E7D2 +0193 E7D2 3E 00 LD A,$00 ; 00 = Read block +0194 E7D4 D3 89 OUT (SD_CONTROL),A +0195 E7D6 C5 PUSH BC +0196 E7D7 +0197 E7D7 0E 04 LD c,4 +0198 E7D9 wBrd4secs: +0199 E7D9 06 80 LD b,128 +0200 E7DB wBrdByte: +0201 E7DB +0202 E7DB DB 89 wBrdWait2: IN A,(SD_STATUS) +0203 E7DD FE E0 CP 224 ; Read byte waiting +0204 E7DF 20 FA JR NZ,wBrdWait2 +0205 E7E1 +0206 E7E1 DB 88 IN A,(SD_DATA) +0207 E7E3 +0208 E7E3 77 LD (HL),A +0209 E7E4 23 INC HL +0210 E7E5 05 dec b +0211 E7E6 20 F3 JR NZ, wBrdByte +0212 E7E8 +0213 E7E8 0D dec c +0214 E7E9 20 EE JR NZ,wBrd4secs +0215 E7EB +0216 E7EB 3A C9 FB LD A,(hstsec) +0217 E7EE 3C INC A +0218 E7EF 32 C9 FB LD (hstsec),A +0219 E7F2 +0220 E7F2 C1 POP BC +0221 E7F3 +0222 E7F3 10 D2 DJNZ wbRdAllSecs +0223 E7F5 ;================================================================================================ +0224 E7F5 ; Common code for cold and warm boot +0225 E7F5 ;================================================================================================ +0226 E7F5 +0227 E7F5 gocpm: +0228 E7F5 AF xor a ;0 to accumulator +0229 E7F6 32 CB FB ld (hstact),a ;host buffer inactive +0230 E7F9 32 CD FB ld (unacnt),a ;clear unalloc count +0231 E7FC +0232 E7FC 21 80 00 LD HL,tpabuf ; Address of BIOS DMA buffer. +0233 E7FF 22 D6 FB LD (dmaAddr),HL +0234 E802 3E C3 LD A,0C3h ; Opcode for 'JP'. +0235 E804 32 00 00 LD (00h),A ; Load at start of RAM. +0236 E807 21 03 E6 LD HL,wboote ; Address of jump for a warm boot. +0237 E80A 22 01 00 LD (01h),HL +0238 E80D 32 05 00 LD (05h),A ; Opcode for 'JP'. +0239 E810 21 06 D8 LD HL,bdos ; Address of jump for the BDOS. +0240 E813 22 06 00 LD (06h),HL +0241 E816 3A 04 00 LD A,(userdrv) ; Save new drive number (0). +0242 E819 4F LD c,A ; Pass drive number in C. +0243 E81A +0244 E81A C3 00 D0 JP ccp ; Start CP/M by jumping to the CCP. +0245 E81D +0246 E81D ;================================================================================================ +0247 E81D ; Console I/O routines +0248 E81D ;================================================================================================ +0249 E81D +0250 E81D +0251 E81D ;------------------------------------------------------------------------------------------------ +0252 E81D const: +0253 E81D 3A 03 00 LD A,(iobyte) +0254 E820 E6 0B AND 00001011b ; Mask off console and high bit of reader +0255 E822 FE 0A CP 00001010b ; redirected to reader on UR1/2 (Serial A) +0256 E824 28 0A JR Z,constA +0257 E826 FE 02 CP 00000010b ; redirected to reader on TTY/RDR (Serial B) +0258 E828 28 14 JR Z,constB +0259 E82A +0260 E82A E6 03 AND $03 ; remove the reader from the mask - only console bits then remain +0261 E82C FE 01 CP $01 +0262 E82E 20 0E JR NZ,constB +0263 E830 constA: +0264 E830 DB 80 IN A,(ACIA0_C) ; Status byte +0265 E832 E6 01 AND $01 +0266 E834 FE 00 CP $0 ; Z flag set if no char +0267 E836 28 03 JR Z, dataAEmpty +0268 E838 3E FF LD A,0FFH +0269 E83A C9 RET +0270 E83B dataAEmpty: +0271 E83B 3E 00 LD A,0 +0272 E83D C9 RET +0273 E83E +0274 E83E +0275 E83E constB: +0276 E83E DB 82 IN A,(ACIA1_C) ; Status byte +0277 E840 E6 01 AND $01 +0278 E842 FE 00 CP $0 ; Z flag set if no char +0279 E844 28 03 JR Z, dataBEmpty +0280 E846 3E FF LD A,0FFH +0281 E848 C9 RET +0282 E849 dataBEmpty: +0283 E849 3E 00 LD A,0 +0284 E84B C9 RET +0285 E84C +0286 E84C ;------------------------------------------------------------------------------------------------ +0287 E84C reader: +0288 E84C F5 PUSH AF +0289 E84D 3A 03 00 reader2: LD A,(iobyte) +0290 E850 E6 08 AND $08 +0291 E852 FE 08 CP $08 +0292 E854 20 1C JR NZ,coninB +0293 E856 18 0E JR coninA +0294 E858 ;------------------------------------------------------------------------------------------------ +0295 E858 conin: +0296 E858 F5 PUSH AF +0297 E859 3A 03 00 LD A,(iobyte) +0298 E85C E6 03 AND $03 +0299 E85E FE 02 CP $02 +0300 E860 28 EB JR Z,reader2 ; "BAT:" redirect +0301 E862 FE 01 CP $01 +0302 E864 20 0C JR NZ,coninB +0303 E866 +0304 E866 +0305 E866 coninA: +0306 E866 F1 POP AF +0307 E867 waitForCharA: +0308 E867 DB 80 IN A,(ACIA0_C) ; Status byte +0309 E869 E6 01 AND $01 +0310 E86B FE 00 CP $0 ; Z flag set if no char +0311 E86D 28 F8 JR Z, waitForCharA +0312 E86F DB 81 IN A,(ACIA0_D) +0313 E871 +0314 E871 C9 RET ; Char ready in A +0315 E872 +0316 E872 +0317 E872 coninB: +0318 E872 F1 POP AF +0319 E873 waitForCharB: +0320 E873 DB 82 IN A,(ACIA1_C) ; Status byte +0321 E875 E6 01 AND $01 +0322 E877 FE 00 CP $0 ; Z flag set if no char +0323 E879 28 F8 JR Z, waitForCharB +0324 E87B DB 83 IN A,(ACIA1_D) +0325 E87D +0326 E87D C9 RET ; Char ready in A +0327 E87E +0328 E87E ;------------------------------------------------------------------------------------------------ +0329 E87E F5 list: PUSH AF ; Store character +0330 E87F 3A 03 00 list2: LD A,(iobyte) +0331 E882 E6 C0 AND $C0 +0332 E884 FE 40 CP $40 +0333 E886 20 26 JR NZ,conoutB1 +0334 E888 18 1A JR conoutA1 +0335 E88A +0336 E88A ;------------------------------------------------------------------------------------------------ +0337 E88A F5 punch: PUSH AF ; Store character +0338 E88B 3A 03 00 LD A,(iobyte) +0339 E88E E6 20 AND $20 +0340 E890 FE 20 CP $20 +0341 E892 20 1A JR NZ,conoutB1 +0342 E894 18 0E JR conoutA1 +0343 E896 +0344 E896 ;------------------------------------------------------------------------------------------------ +0345 E896 F5 conout: PUSH AF +0346 E897 3A 03 00 LD A,(iobyte) +0347 E89A E6 03 AND $03 +0348 E89C FE 02 CP $02 +0349 E89E 28 DF JR Z,list2 ; "BAT:" redirect +0350 E8A0 FE 01 CP $01 +0351 E8A2 20 0A JR NZ,conoutB1 +0352 E8A4 +0353 E8A4 CD B8 E8 conoutA1: CALL CKACIA0 ; See if ACIA channel A is finished transmitting +0354 E8A7 28 FB JR Z,conoutA1 ; Loop until ACIA flag signals ready +0355 E8A9 79 LD A,C +0356 E8AA D3 81 OUT (ACIA0_D),A ; OUTput the character +0357 E8AC F1 POP AF +0358 E8AD C9 RET +0359 E8AE +0360 E8AE CD BE E8 conoutB1: CALL CKACIA1 ; See if ACIA channel B is finished transmitting +0361 E8B1 28 FB JR Z,conoutB1 ; Loop until ACIA flag signals ready +0362 E8B3 79 LD A,C +0363 E8B4 D3 83 OUT (ACIA1_D),A ; OUTput the character +0364 E8B6 F1 POP AF +0365 E8B7 C9 RET +0366 E8B8 +0367 E8B8 ;------------------------------------------------------------------------------------------------ +0368 E8B8 CKACIA0 +0369 E8B8 DB 80 IN A,(ACIA0_C) ; Status byte D1=TX Buff Empty, D0=RX char ready +0370 E8BA 0F RRCA ; Rotates RX status into Carry Flag, +0371 E8BB CB 47 BIT 0,A ; Set Zero flag if still transmitting character +0372 E8BD C9 RET +0373 E8BE +0374 E8BE CKACIA1 +0375 E8BE DB 82 IN A,(ACIA1_C) ; Status byte D1=TX Buff Empty, D0=RX char ready +0376 E8C0 0F RRCA ; Rotates RX status into Carry Flag, +0377 E8C1 CB 47 BIT 0,A ; Set Zero flag if still transmitting character +0378 E8C3 C9 RET +0379 E8C4 +0380 E8C4 ;------------------------------------------------------------------------------------------------ +0381 E8C4 3E FF listst: LD A,$FF ; Return list status of 0xFF (ready). +0382 E8C6 C9 RET +0383 E8C7 +0384 E8C7 ;================================================================================================ +0385 E8C7 ; Disk processing entry points +0386 E8C7 ;================================================================================================ +0387 E8C7 +0388 E8C7 seldsk: +0389 E8C7 21 00 00 LD HL,$0000 +0390 E8CA 79 LD A,C +0391 E8CB FE 10 CP 16 ; 16 for 128MB disk, 8 for 64MB disk +0392 E8CD 38 0D jr C,chgdsk ; if invalid drive will give BDOS error +0393 E8CF 3A 04 00 LD A,(userdrv) ; so set the drive back to a: +0394 E8D2 B9 CP C ; If the default disk is not the same as the +0395 E8D3 C0 RET NZ ; selected drive then return, +0396 E8D4 AF XOR A ; else reset default back to a: +0397 E8D5 32 04 00 LD (userdrv),A ; otherwise will be stuck in a loop +0398 E8D8 32 C1 FB LD (sekdsk),A +0399 E8DB C9 ret +0400 E8DC +0401 E8DC 32 C1 FB chgdsk: LD (sekdsk),A +0402 E8DF CB 07 RLC a ;*2 +0403 E8E1 CB 07 RLC a ;*4 +0404 E8E3 CB 07 RLC a ;*8 +0405 E8E5 CB 07 RLC a ;*16 +0406 E8E7 21 33 E6 LD HL,dpbase +0407 E8EA 06 00 LD b,0 +0408 E8EC 4F LD c,A +0409 E8ED 09 ADD HL,BC +0410 E8EE +0411 E8EE C9 RET +0412 E8EF +0413 E8EF ;------------------------------------------------------------------------------------------------ +0414 E8EF home: +0415 E8EF 3A CC FB ld a,(hstwrt) ;check for pending write +0416 E8F2 B7 or a +0417 E8F3 20 03 jr nz,homed +0418 E8F5 32 CB FB ld (hstact),a ;clear host active flag +0419 E8F8 homed: +0420 E8F8 01 00 00 LD BC,0000h +0421 E8FB +0422 E8FB ;------------------------------------------------------------------------------------------------ +0423 E8FB ED 43 C2 FB settrk: LD (sektrk),BC ; Set track passed from BDOS in register BC. +0424 E8FF C9 RET +0425 E900 +0426 E900 ;------------------------------------------------------------------------------------------------ +0427 E900 ED 43 C4 FB setsec: LD (seksec),BC ; Set sector passed from BDOS in register BC. +0428 E904 C9 RET +0429 E905 +0430 E905 ;------------------------------------------------------------------------------------------------ +0431 E905 ED 43 D6 FB setdma: LD (dmaAddr),BC ; Set DMA ADDress given by registers BC. +0432 E909 C9 RET +0433 E90A +0434 E90A ;------------------------------------------------------------------------------------------------ +0435 E90A C5 sectran: PUSH BC +0436 E90B E1 POP HL +0437 E90C C9 RET +0438 E90D +0439 E90D ;------------------------------------------------------------------------------------------------ +0440 E90D read: +0441 E90D ;read the selected CP/M sector +0442 E90D AF xor a +0443 E90E 32 CD FB ld (unacnt),a +0444 E911 3E 01 ld a,1 +0445 E913 32 D4 FB ld (readop),a ;read operation +0446 E916 32 D3 FB ld (rsflag),a ;must read data +0447 E919 3E 02 ld a,wrual +0448 E91B 32 D5 FB ld (wrtype),a ;treat as unalloc +0449 E91E C3 88 E9 jp rwoper ;to perform the read +0450 E921 +0451 E921 +0452 E921 ;------------------------------------------------------------------------------------------------ +0453 E921 write: +0454 E921 ;write the selected CP/M sector +0455 E921 AF xor a ;0 to accumulator +0456 E922 32 D4 FB ld (readop),a ;not a read operation +0457 E925 79 ld a,c ;write type in c +0458 E926 32 D5 FB ld (wrtype),a +0459 E929 FE 02 cp wrual ;write unallocated? +0460 E92B 20 17 jr nz,chkuna ;check for unalloc +0461 E92D ; +0462 E92D ; write to unallocated, set parameters +0463 E92D 3E 20 ld a,blksiz/128 ;next unalloc recs +0464 E92F 32 CD FB ld (unacnt),a +0465 E932 3A C1 FB ld a,(sekdsk) ;disk to seek +0466 E935 32 CE FB ld (unadsk),a ;unadsk = sekdsk +0467 E938 2A C2 FB ld hl,(sektrk) +0468 E93B 22 CF FB ld (unatrk),hl ;unatrk = sectrk +0469 E93E 3A C4 FB ld a,(seksec) +0470 E941 32 D1 FB ld (unasec),a ;unasec = seksec +0471 E944 ; +0472 E944 chkuna: +0473 E944 ; check for write to unallocated sector +0474 E944 3A CD FB ld a,(unacnt) ;any unalloc remain? +0475 E947 B7 or a +0476 E948 28 36 jr z,alloc ;skip if not +0477 E94A ; +0478 E94A ; more unallocated records remain +0479 E94A 3D dec a ;unacnt = unacnt-1 +0480 E94B 32 CD FB ld (unacnt),a +0481 E94E 3A C1 FB ld a,(sekdsk) ;same disk? +0482 E951 21 CE FB ld hl,unadsk +0483 E954 BE cp (hl) ;sekdsk = unadsk? +0484 E955 C2 80 E9 jp nz,alloc ;skip if not +0485 E958 ; +0486 E958 ; disks are the same +0487 E958 21 CF FB ld hl,unatrk +0488 E95B CD 1F EA call sektrkcmp ;sektrk = unatrk? +0489 E95E C2 80 E9 jp nz,alloc ;skip if not +0490 E961 ; +0491 E961 ; tracks are the same +0492 E961 3A C4 FB ld a,(seksec) ;same sector? +0493 E964 21 D1 FB ld hl,unasec +0494 E967 BE cp (hl) ;seksec = unasec? +0495 E968 C2 80 E9 jp nz,alloc ;skip if not +0496 E96B ; +0497 E96B ; match, move to next sector for future ref +0498 E96B 34 inc (hl) ;unasec = unasec+1 +0499 E96C 7E ld a,(hl) ;end of track? +0500 E96D FE 80 cp cpmspt ;count CP/M sectors +0501 E96F 38 09 jr c,noovf ;skip if no overflow +0502 E971 ; +0503 E971 ; overflow to next track +0504 E971 36 00 ld (hl),0 ;unasec = 0 +0505 E973 2A CF FB ld hl,(unatrk) +0506 E976 23 inc hl +0507 E977 22 CF FB ld (unatrk),hl ;unatrk = unatrk+1 +0508 E97A ; +0509 E97A noovf: +0510 E97A ;match found, mark as unnecessary read +0511 E97A AF xor a ;0 to accumulator +0512 E97B 32 D3 FB ld (rsflag),a ;rsflag = 0 +0513 E97E 18 08 jr rwoper ;to perform the write +0514 E980 ; +0515 E980 alloc: +0516 E980 ;not an unallocated record, requires pre-read +0517 E980 AF xor a ;0 to accum +0518 E981 32 CD FB ld (unacnt),a ;unacnt = 0 +0519 E984 3C inc a ;1 to accum +0520 E985 32 D3 FB ld (rsflag),a ;rsflag = 1 +0521 E988 +0522 E988 ;------------------------------------------------------------------------------------------------ +0523 E988 rwoper: +0524 E988 ;enter here to perform the read/write +0525 E988 AF xor a ;zero to accum +0526 E989 32 D2 FB ld (erflag),a ;no errors (yet) +0527 E98C 3A C4 FB ld a,(seksec) ;compute host sector +0528 E98F B7 or a ;carry = 0 +0529 E990 1F rra ;shift right +0530 E991 B7 or a ;carry = 0 +0531 E992 1F rra ;shift right +0532 E993 32 CA FB ld (sekhst),a ;host sector to seek +0533 E996 ; +0534 E996 ; active host sector? +0535 E996 21 CB FB ld hl,hstact ;host active flag +0536 E999 7E ld a,(hl) +0537 E99A 36 01 ld (hl),1 ;always becomes 1 +0538 E99C B7 or a ;was it already? +0539 E99D 28 21 jr z,filhst ;fill host if not +0540 E99F ; +0541 E99F ; host buffer active, same as seek buffer? +0542 E99F 3A C1 FB ld a,(sekdsk) +0543 E9A2 21 C6 FB ld hl,hstdsk ;same disk? +0544 E9A5 BE cp (hl) ;sekdsk = hstdsk? +0545 E9A6 20 11 jr nz,nomatch +0546 E9A8 ; +0547 E9A8 ; same disk, same track? +0548 E9A8 21 C7 FB ld hl,hsttrk +0549 E9AB CD 1F EA call sektrkcmp ;sektrk = hsttrk? +0550 E9AE 20 09 jr nz,nomatch +0551 E9B0 ; +0552 E9B0 ; same disk, same track, same buffer? +0553 E9B0 3A CA FB ld a,(sekhst) +0554 E9B3 21 C9 FB ld hl,hstsec ;sekhst = hstsec? +0555 E9B6 BE cp (hl) +0556 E9B7 28 24 jr z,match ;skip if match +0557 E9B9 ; +0558 E9B9 nomatch: +0559 E9B9 ;proper disk, but not correct sector +0560 E9B9 3A CC FB ld a,(hstwrt) ;host written? +0561 E9BC B7 or a +0562 E9BD C4 C4 EA call nz,writehst ;clear host buff +0563 E9C0 ; +0564 E9C0 filhst: +0565 E9C0 ;may have to fill the host buffer +0566 E9C0 3A C1 FB ld a,(sekdsk) +0567 E9C3 32 C6 FB ld (hstdsk),a +0568 E9C6 2A C2 FB ld hl,(sektrk) +0569 E9C9 22 C7 FB ld (hsttrk),hl +0570 E9CC 3A CA FB ld a,(sekhst) +0571 E9CF 32 C9 FB ld (hstsec),a +0572 E9D2 3A D3 FB ld a,(rsflag) ;need to read? +0573 E9D5 B7 or a +0574 E9D6 C4 95 EA call nz,readhst ;yes, if 1 +0575 E9D9 AF xor a ;0 to accum +0576 E9DA 32 CC FB ld (hstwrt),a ;no pending write +0577 E9DD ; +0578 E9DD match: +0579 E9DD ;copy data to or from buffer +0580 E9DD 3A C4 FB ld a,(seksec) ;mask buffer number +0581 E9E0 E6 03 and secmsk ;least signif bits +0582 E9E2 6F ld l,a ;ready to shift +0583 E9E3 26 00 ld h,0 ;double count +0584 E9E5 29 add hl,hl +0585 E9E6 29 add hl,hl +0586 E9E7 29 add hl,hl +0587 E9E8 29 add hl,hl +0588 E9E9 29 add hl,hl +0589 E9EA 29 add hl,hl +0590 E9EB 29 add hl,hl +0591 E9EC ; hl has relative host buffer address +0592 E9EC 11 D8 FB ld de,hstbuf +0593 E9EF 19 add hl,de ;hl = host address +0594 E9F0 EB ex de,hl ;now in DE +0595 E9F1 2A D6 FB ld hl,(dmaAddr) ;get/put CP/M data +0596 E9F4 0E 80 ld c,128 ;length of move +0597 E9F6 3A D4 FB ld a,(readop) ;which way? +0598 E9F9 B7 or a +0599 E9FA 20 06 jr nz,rwmove ;skip if read +0600 E9FC ; +0601 E9FC ; write operation, mark and switch direction +0602 E9FC 3E 01 ld a,1 +0603 E9FE 32 CC FB ld (hstwrt),a ;hstwrt = 1 +0604 EA01 EB ex de,hl ;source/dest swap +0605 EA02 ; +0606 EA02 rwmove: +0607 EA02 ;C initially 128, DE is source, HL is dest +0608 EA02 1A ld a,(de) ;source character +0609 EA03 13 inc de +0610 EA04 77 ld (hl),a ;to dest +0611 EA05 23 inc hl +0612 EA06 0D dec c ;loop 128 times +0613 EA07 20 F9 jr nz,rwmove +0614 EA09 ; +0615 EA09 ; data has been moved to/from host buffer +0616 EA09 3A D5 FB ld a,(wrtype) ;write type +0617 EA0C FE 01 cp wrdir ;to directory? +0618 EA0E 3A D2 FB ld a,(erflag) ;in case of errors +0619 EA11 C0 ret nz ;no further processing +0620 EA12 ; +0621 EA12 ; clear host buffer for directory write +0622 EA12 B7 or a ;errors? +0623 EA13 C0 ret nz ;skip if so +0624 EA14 AF xor a ;0 to accum +0625 EA15 32 CC FB ld (hstwrt),a ;buffer written +0626 EA18 CD C4 EA call writehst +0627 EA1B 3A D2 FB ld a,(erflag) +0628 EA1E C9 ret +0629 EA1F +0630 EA1F ;------------------------------------------------------------------------------------------------ +0631 EA1F ;Utility subroutine for 16-bit compare +0632 EA1F sektrkcmp: +0633 EA1F ;HL = .unatrk or .hsttrk, compare with sektrk +0634 EA1F EB ex de,hl +0635 EA20 21 C2 FB ld hl,sektrk +0636 EA23 1A ld a,(de) ;low byte compare +0637 EA24 BE cp (HL) ;same? +0638 EA25 C0 ret nz ;return if not +0639 EA26 ; low bytes equal, test high 1s +0640 EA26 13 inc de +0641 EA27 23 inc hl +0642 EA28 1A ld a,(de) +0643 EA29 BE cp (hl) ;sets flags +0644 EA2A C9 ret +0645 EA2B +0646 EA2B ;================================================================================================ +0647 EA2B ; Convert track/head/sector into LBA for physical access to the disk +0648 EA2B ;================================================================================================ +0649 EA2B setLBAaddr: +0650 EA2B 2A C7 FB LD HL,(hsttrk) +0651 EA2E CB 05 RLC L +0652 EA30 CB 05 RLC L +0653 EA32 CB 05 RLC L +0654 EA34 CB 05 RLC L +0655 EA36 CB 05 RLC L +0656 EA38 7D LD A,L +0657 EA39 E6 E0 AND 0E0H +0658 EA3B 6F LD L,A +0659 EA3C 3A C9 FB LD A,(hstsec) +0660 EA3F 85 ADD A,L +0661 EA40 32 9D FB LD (lba0),A +0662 EA43 +0663 EA43 2A C7 FB LD HL,(hsttrk) +0664 EA46 CB 0D RRC L +0665 EA48 CB 0D RRC L +0666 EA4A CB 0D RRC L +0667 EA4C 7D LD A,L +0668 EA4D E6 1F AND 01FH +0669 EA4F 6F LD L,A +0670 EA50 CB 04 RLC H +0671 EA52 CB 04 RLC H +0672 EA54 CB 04 RLC H +0673 EA56 CB 04 RLC H +0674 EA58 CB 04 RLC H +0675 EA5A 7C LD A,H +0676 EA5B E6 20 AND 020H +0677 EA5D 67 LD H,A +0678 EA5E 3A C6 FB LD A,(hstdsk) +0679 EA61 CB 07 RLC a +0680 EA63 CB 07 RLC a +0681 EA65 CB 07 RLC a +0682 EA67 CB 07 RLC a +0683 EA69 CB 07 RLC a +0684 EA6B CB 07 RLC a +0685 EA6D E6 C0 AND 0C0H +0686 EA6F 84 ADD A,H +0687 EA70 85 ADD A,L +0688 EA71 32 9E FB LD (lba1),A +0689 EA74 +0690 EA74 3A C6 FB LD A,(hstdsk) +0691 EA77 CB 0F RRC A +0692 EA79 CB 0F RRC A +0693 EA7B E6 03 AND 03H +0694 EA7D 32 9F FB LD (lba2),A +0695 EA80 +0696 EA80 3E 00 LD a,00H +0697 EA82 32 A0 FB LD (lba3),A +0698 EA85 +0699 EA85 ; Transfer LBA to disk (LBA3 not used on SD card) +0700 EA85 3A 9F FB LD A,(lba2) +0701 EA88 D3 8C OUT (SD_LBA2),A +0702 EA8A 3A 9E FB LD A,(lba1) +0703 EA8D D3 8B OUT (SD_LBA1),A +0704 EA8F 3A 9D FB LD A,(lba0) +0705 EA92 D3 8A OUT (SD_LBA0),A +0706 EA94 C9 RET +0707 EA95 +0708 EA95 ;================================================================================================ +0709 EA95 ; Read physical sector from host +0710 EA95 ;================================================================================================ +0711 EA95 +0712 EA95 readhst: +0713 EA95 F5 PUSH AF +0714 EA96 C5 PUSH BC +0715 EA97 E5 PUSH HL +0716 EA98 +0717 EA98 DB 89 rdWait1: IN A,(SD_STATUS) +0718 EA9A FE 80 CP 128 +0719 EA9C 20 FA JR NZ,rdWait1 +0720 EA9E +0721 EA9E CD 2B EA CALL setLBAaddr +0722 EAA1 +0723 EAA1 3E 00 LD A,$00 ; 00 = Read block +0724 EAA3 D3 89 OUT (SD_CONTROL),A +0725 EAA5 +0726 EAA5 0E 04 LD c,4 +0727 EAA7 21 D8 FB LD HL,hstbuf +0728 EAAA rd4secs: +0729 EAAA 06 80 LD b,128 +0730 EAAC rdByte: +0731 EAAC +0732 EAAC DB 89 rdWait2: IN A,(SD_STATUS) +0733 EAAE FE E0 CP 224 ; Read byte waiting +0734 EAB0 20 FA JR NZ,rdWait2 +0735 EAB2 +0736 EAB2 DB 88 IN A,(SD_DATA) +0737 EAB4 +0738 EAB4 77 LD (HL),A +0739 EAB5 23 INC HL +0740 EAB6 05 dec b +0741 EAB7 20 F3 JR NZ, rdByte +0742 EAB9 0D dec c +0743 EABA 20 EE JR NZ,rd4secs +0744 EABC +0745 EABC E1 POP HL +0746 EABD C1 POP BC +0747 EABE F1 POP AF +0748 EABF +0749 EABF AF XOR a +0750 EAC0 32 D2 FB ld (erflag),a +0751 EAC3 C9 RET +0752 EAC4 +0753 EAC4 +0754 EAC4 ;================================================================================================ +0755 EAC4 ; Write physical sector to host +0756 EAC4 ;================================================================================================ +0757 EAC4 +0758 EAC4 writehst: +0759 EAC4 F5 PUSH AF +0760 EAC5 C5 PUSH BC +0761 EAC6 E5 PUSH HL +0762 EAC7 +0763 EAC7 DB 89 wrWait1: IN A,(SD_STATUS) +0764 EAC9 FE 80 CP 128 +0765 EACB 20 FA JR NZ,wrWait1 +0766 EACD +0767 EACD CD 2B EA CALL setLBAaddr +0768 EAD0 +0769 EAD0 3E 01 LD A,$01 ; 01 = Write block +0770 EAD2 D3 89 OUT (SD_CONTROL),A +0771 EAD4 +0772 EAD4 0E 04 LD c,4 +0773 EAD6 21 D8 FB LD HL,hstbuf +0774 EAD9 wr4secs: +0775 EAD9 06 80 LD b,128 +0776 EADB wrByte: +0777 EADB +0778 EADB DB 89 wrWait2: IN A,(SD_STATUS) +0779 EADD FE A0 CP 160 ; Write buffer empty +0780 EADF 20 FA JR NZ,wrWait2 +0781 EAE1 +0782 EAE1 ; UPDATE S0urceror, inserted wait cycle between IN and OUT +0783 EAE1 ; to resolve unknown write issue in sd_controller.vhd in combination +0784 EAE1 ; with MISTer virtual SD interface sys/sd_card.sv +0785 EAE1 ; which results in hangs or write errors. +0786 EAE1 C5 push bc +0787 EAE2 06 64 ld b,100 +0788 EAE4 _again: +0789 EAE4 10 FE djnz _again +0790 EAE6 C1 pop bc +0791 EAE7 ; END UPDATE +0792 EAE7 +0793 EAE7 7E LD A,(HL) +0794 EAE8 D3 88 OUT (SD_DATA),A +0795 EAEA 23 INC HL +0796 EAEB 05 dec b +0797 EAEC 20 ED JR NZ, wrByte +0798 EAEE +0799 EAEE 0D dec c +0800 EAEF 20 E8 JR NZ,wr4secs +0801 EAF1 +0802 EAF1 E1 POP HL +0803 EAF2 C1 POP BC +0804 EAF3 F1 POP AF +0805 EAF4 +0806 EAF4 AF XOR a +0807 EAF5 32 D2 FB ld (erflag),a +0808 EAF8 C9 RET +0809 EAF9 +0810 EAF9 ;================================================================================================ +0811 EAF9 ; Utilities +0812 EAF9 ;================================================================================================ +0813 EAF9 +0814 EAF9 printInline: +0815 EAF9 E3 EX (SP),HL ; PUSH HL and put RET ADDress into HL +0816 EAFA F5 PUSH AF +0817 EAFB C5 PUSH BC +0818 EAFC 7E nextILChar: LD A,(HL) +0819 EAFD FE 00 CP 0 +0820 EAFF 28 07 JR Z,endOfPrint +0821 EB01 4F LD C,A +0822 EB02 CD 96 E8 CALL conout ; Print to TTY +0823 EB05 23 iNC HL +0824 EB06 18 F4 JR nextILChar +0825 EB08 23 endOfPrint: INC HL ; Get past "null" terminator +0826 EB09 C1 POP BC +0827 EB0A F1 POP AF +0828 EB0B E3 EX (SP),HL ; PUSH new RET ADDress on stack and restore HL +0829 EB0C C9 RET +0830 EB0D +0831 EB0D ;================================================================================================ +0832 EB0D ; Data storage +0833 EB0D ;================================================================================================ +0834 EB0D +0835 EB0D dirbuf: .ds 128 ;scratch directory area +0836 EB8D alv00: .ds 257 ;allocation vector 0 +0837 EC8E alv01: .ds 257 ;allocation vector 1 +0838 ED8F alv02: .ds 257 ;allocation vector 2 +0839 EE90 alv03: .ds 257 ;allocation vector 3 +0840 EF91 alv04: .ds 257 ;allocation vector 4 +0841 F092 alv05: .ds 257 ;allocation vector 5 +0842 F193 alv06: .ds 257 ;allocation vector 6 +0843 F294 alv07: .ds 257 ;allocation vector 7 +0844 F395 alv08: .ds 257 ;allocation vector 8 +0845 F496 alv09: .ds 257 ;allocation vector 9 +0846 F597 alv10: .ds 257 ;allocation vector 10 +0847 F698 alv11: .ds 257 ;allocation vector 11 +0848 F799 alv12: .ds 257 ;allocation vector 12 +0849 F89A alv13: .ds 257 ;allocation vector 13 +0850 F99B alv14: .ds 257 ;allocation vector 14 +0851 FA9C alv15: .ds 257 ;allocation vector 15 +0852 FB9D +0853 FB9D 00 lba0 .DB 00h +0854 FB9E 00 lba1 .DB 00h +0855 FB9F 00 lba2 .DB 00h +0856 FBA0 00 lba3 .DB 00h +0857 FBA1 +0858 FBA1 .DS 020h ; Start of BIOS stack area. +0859 FBC1 biosstack: .EQU $ +0860 FBC1 +0861 FBC1 sekdsk: .ds 1 ;seek disk number +0862 FBC2 sektrk: .ds 2 ;seek track number +0863 FBC4 seksec: .ds 2 ;seek sector number +0864 FBC6 ; +0865 FBC6 hstdsk: .ds 1 ;host disk number +0866 FBC7 hsttrk: .ds 2 ;host track number +0867 FBC9 hstsec: .ds 1 ;host sector number +0868 FBCA ; +0869 FBCA sekhst: .ds 1 ;seek shr secshf +0870 FBCB hstact: .ds 1 ;host active flag +0871 FBCC hstwrt: .ds 1 ;host written flag +0872 FBCD ; +0873 FBCD unacnt: .ds 1 ;unalloc rec cnt +0874 FBCE unadsk: .ds 1 ;last unalloc disk +0875 FBCF unatrk: .ds 2 ;last unalloc track +0876 FBD1 unasec: .ds 1 ;last unalloc sector +0877 FBD2 ; +0878 FBD2 erflag: .ds 1 ;error reporting +0879 FBD3 rsflag: .ds 1 ;read sector flag +0880 FBD4 readop: .ds 1 ;1 if read operation +0881 FBD5 wrtype: .ds 1 ;write operation type +0882 FBD6 dmaAddr: .ds 2 ;last dma address +0883 FBD8 hstbuf: .ds 512 ;host buffer +0884 FDD8 +0885 FDD8 hstBufEnd: .EQU $ +0886 FDD8 +0887 FDD8 biosEnd: .EQU $ +0888 FDD8 +0889 FDD8 ; Disable the ROM, pop the active IO port from the stack (supplied by monitor), +0890 FDD8 ; then start CP/M +0891 FDD8 popAndRun: +0892 FDD8 3E 01 LD A,$01 +0893 FDDA D3 38 OUT ($38),A +0894 FDDC +0895 FDDC F1 POP AF +0896 FDDD FE 01 CP $01 +0897 FDDF 28 04 JR Z,consoleAtB +0898 FDE1 3E 01 LD A,$01 ;(List is TTY:, Punch is TTY:, Reader is TTY:, Console is CRT:) +0899 FDE3 18 02 JR setIOByte +0900 FDE5 3E 00 consoleAtB: LD A,$00 ;(List is TTY:, Punch is TTY:, Reader is TTY:, Console is TTY:) +0901 FDE7 32 03 00 setIOByte: LD (iobyte),A +0902 FDEA C3 00 E6 JP bios +0903 FDED +0904 FDED +0905 FDED ;================================================================================= +0906 FDED ; Relocate TPA area from 4100 to 0100 then start CP/M +0907 FDED ; Used to manually transfer a loaded program after CP/M was previously loaded +0908 FDED ;================================================================================= +0909 FDED +0910 FFE8 .org 0FFE8H +0911 FFE8 3E 01 LD A,$01 +0912 FFEA D3 38 OUT ($38),A +0913 FFEC +0914 FFEC 21 00 41 LD HL,04100H +0915 FFEF 11 00 01 LD DE,00100H +0916 FFF2 01 00 8F LD BC,08F00H +0917 FFF5 ED B0 LDIR +0918 FFF7 C3 00 E6 JP bios +0919 FFFA +0920 FFFA ;================================================================================= +0921 FFFA ; Normal start CP/M vector +0922 FFFA ;================================================================================= +0923 FFFA +0924 FFFE .ORG 0FFFEH +0925 FFFE D8 FD .dw popAndRun +0926 0000 +0927 0000 .END +tasm: Number of errors = 0 diff --git a/Z80 CPM and bootloader (basmon)/source/CH376S~1.LST b/Z80 CPM and bootloader (basmon)/source/CH376S~1.LST new file mode 100644 index 0000000..829b8a9 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/CH376S~1.LST @@ -0,0 +1,88 @@ +0001 0000 LF .EQU 0AH ;line feed +0002 0000 FF .EQU 0CH ;form feed +0003 0000 CR .EQU 0DH ;carriage RETurn +0004 0000 DOT .EQU '.' +0005 0000 CH375_CMD_CHECK_EXIST .EQU 06H +0006 0000 CH375_CMD_RESET_ALL .EQU 05H +0007 0000 +0008 4000 .ORG 4000H +0009 4000 +0010 4000 CD 64 40 CALL printInline +0011 4003 436865636B20 .TEXT "Check CH376s communication" +0011 4009 43483337367320636F6D6D756E69636174696F6E +0012 401D 0D 0A 00 .DB CR,LF,0 +0013 4020 +0014 4020 CD 64 40 CALL printInline +0015 4023 53656E642041 .TEXT "Send A" +0016 4029 0D 0A 00 .DB CR,LF,0 +0017 402C +0018 402C 3E 05 ld a, CH375_CMD_RESET_ALL +0019 402E D3 20 out (20h),a +0020 4030 +0021 4030 3E 06 ld a, CH375_CMD_CHECK_EXIST +0022 4032 D3 20 out (20h),a +0023 4034 3E 41 ld a, 'A' +0024 4036 D3 20 out (20h),a +0025 4038 ; receive result +0026 4038 AF xor a +0027 4039 D3 20 out (20h),a +0028 403B DB 20 in a, (20h) +0029 403D EE FF xor 255 +0030 403F +0031 403F CD 64 40 CALL printInline +0032 4042 526563656976 .TEXT "Received " +0032 4048 656420 +0033 404B 00 .DB 0 +0034 404C +0035 404C CF RST 08H ; print contents of A +0036 404D +0037 404D CD 64 40 CALL printInline +0038 4050 0D 0A 00 .DB CR,LF,0 +0039 4053 +0040 4053 C9 ret +0041 4054 +0042 4054 ; LOOPBACK TEST +0043 4054 +0044 4054 06 39 ld b, 39h +0045 4056 outer: +0046 4056 78 ld a, b +0047 4057 FE 2F cp 2fh +0048 4059 C8 ret z +0049 405A ; send out +0050 405A D3 20 out (20h),a +0051 405C ;inner: +0052 405C ; ld a, DOT +0053 405C ; rst 08h +0054 405C ; in a, (21h) +0055 405C ; bit 0,a +0056 405C ; jr z, inner +0057 405C AF xor a +0058 405D +0059 405D ; read back +0060 405D DB 20 in a, (20h) +0061 405F CF rst 08h ; should be 30h => 0..9 +0062 4060 +0063 4060 05 dec b +0064 4061 18 F3 jr outer +0065 4063 +0066 4063 C9 ret +0067 4064 +0068 4064 printInline: +0069 4064 E3 EX (SP),HL ; PUSH HL and put RET ADDress into HL +0070 4065 F5 PUSH AF +0071 4066 C5 PUSH BC +0072 4067 7E nextILChar: LD A,(HL) +0073 4068 FE 00 CP 0 +0074 406A 28 04 JR Z,endOfPrint +0075 406C CF RST 08H +0076 406D 23 INC HL +0077 406E 18 F7 JR nextILChar +0078 4070 23 endOfPrint: INC HL ; Get past "null" terminator +0079 4071 C1 POP BC +0080 4072 F1 POP AF +0081 4073 E3 EX (SP),HL ; PUSH new RET ADDress on stack and restore HL +0082 4074 C9 RET +0083 4075 +0084 4075 +0085 4075 .END +tasm: Number of errors = 0 diff --git a/Z80 CPM and bootloader (basmon)/source/CPM22.LST b/Z80 CPM and bootloader (basmon)/source/CPM22.LST new file mode 100644 index 0000000..8bcb096 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/CPM22.LST @@ -0,0 +1,3781 @@ +0001 0000 ;************************************************************** +0002 0000 ;* +0003 0000 ;* C P / M version 2 . 2 +0004 0000 ;* +0005 0000 ;* Reconstructed from memory image on February 27, 1981 +0006 0000 ;* +0007 0000 ;* by Clark A. Calkins +0008 0000 ;* +0009 0000 ;************************************************************** +0010 0000 ; +0011 0000 ; Set memory limit here. This is the amount of contigeous +0012 0000 ; ram starting from 0000. CP/M will reside at the end of this space. +0013 0000 ; +0014 0000 +0015 0000 IOBYTE .EQU 3 ;i/o definition byte. +0016 0000 TDRIVE .EQU 4 ;current drive name and user number. +0017 0000 ENTRY .EQU 5 ;entry point for the cp/m bdos. +0018 0000 TFCB .EQU 5CH ;default file control block. +0019 0000 TBUFF .EQU 80H ;i/o buffer and command line storage. +0020 0000 TBASE .EQU 100H ;transiant program storage area. +0021 0000 ; +0022 0000 ; Set control character equates. +0023 0000 ; +0024 0000 CNTRLC .EQU 3 ;control-c +0025 0000 CNTRLE .EQU 05H ;control-e +0026 0000 BS .EQU 08H ;backspace +0027 0000 TAB .EQU 09H ;tab +0028 0000 LF .EQU 0AH ;line feed +0029 0000 FF .EQU 0CH ;form feed +0030 0000 CR .EQU 0DH ;carriage return +0031 0000 CNTRLP .EQU 10H ;control-p +0032 0000 CNTRLR .EQU 12H ;control-r +0033 0000 CNTRLS .EQU 13H ;control-s +0034 0000 CNTRLU .EQU 15H ;control-u +0035 0000 CNTRLX .EQU 18H ;control-x +0036 0000 CNTRLZ .EQU 1AH ;control-z (end-of-file mark) +0037 0000 DEL .EQU 7FH ;rubout +0038 0000 ; +0039 0000 ; Set origin for CP/M +0040 0000 ; +0041 D000 .ORG 0D000H +0042 D000 ; +0043 D000 C3 5C D3 CBASE: JP COMMAND ;execute command processor (ccp). +0044 D003 C3 58 D3 JP CLEARBUF ;entry to empty input buffer before starting ccp. +0045 D006 +0046 D006 ; +0047 D006 ; Standard cp/m ccp input buffer. Format is (max length), +0048 D006 ; (actual length), (char #1), (char #2), (char #3), etc. +0049 D006 ; +0050 D006 7F INBUFF: .DB 127 ;length of input buffer. +0051 D007 00 .DB 0 ;current length of contents. +0052 D008 436F70797269 .TEXT "Copyright" +0052 D00E 676874 +0053 D011 203139373920 .TEXT " 1979 (c) by Digital Research " +0053 D017 286329206279204469676974616C205265736561726368202020202020 +0054 D034 000000000000 .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0054 D03A 0000000000000000000000000000000000 +0055 D04B 000000000000 .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0055 D051 0000000000000000000000000000000000 +0056 D062 000000000000 .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0056 D068 0000000000000000000000000000000000 +0057 D079 000000000000 .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0057 D07F 000000000000000000 +0058 D088 08 D0 INPOINT:.DW INBUFF+2 ;input line pointer +0059 D08A 00 00 NAMEPNT:.DW 0 ;input line pointer used for error message. Points to +0060 D08C ; ;start of name in error. +0061 D08C ; +0062 D08C ; Routine to print (A) on the console. All registers used. +0063 D08C ; +0064 D08C 5F PRINT: LD E,A ;setup bdos call. +0065 D08D 0E 02 LD C,2 +0066 D08F C3 05 00 JP ENTRY +0067 D092 ; +0068 D092 ; Routine to print (A) on the console and to save (BC). +0069 D092 ; +0070 D092 C5 PRINTB: PUSH BC +0071 D093 CD 8C D0 CALL PRINT +0072 D096 C1 POP BC +0073 D097 C9 RET +0074 D098 ; +0075 D098 ; Routine to send a carriage return, line feed combination +0076 D098 ; to the console. +0077 D098 ; +0078 D098 3E 0D CRLF: LD A,CR +0079 D09A CD 92 D0 CALL PRINTB +0080 D09D 3E 0A LD A,LF +0081 D09F C3 92 D0 JP PRINTB +0082 D0A2 ; +0083 D0A2 ; Routine to send one space to the console and save (BC). +0084 D0A2 ; +0085 D0A2 3E 20 SPACE: LD A,' ' +0086 D0A4 C3 92 D0 JP PRINTB +0087 D0A7 ; +0088 D0A7 ; Routine to print character string pointed to be (BC) on the +0089 D0A7 ; console. It must terminate with a null byte. +0090 D0A7 ; +0091 D0A7 C5 PLINE: PUSH BC +0092 D0A8 CD 98 D0 CALL CRLF +0093 D0AB E1 POP HL +0094 D0AC 7E PLINE2: LD A,(HL) +0095 D0AD B7 OR A +0096 D0AE C8 RET Z +0097 D0AF 23 INC HL +0098 D0B0 E5 PUSH HL +0099 D0B1 CD 8C D0 CALL PRINT +0100 D0B4 E1 POP HL +0101 D0B5 C3 AC D0 JP PLINE2 +0102 D0B8 ; +0103 D0B8 ; Routine to reset the disk system. +0104 D0B8 ; +0105 D0B8 0E 0D RESDSK: LD C,13 +0106 D0BA C3 05 00 JP ENTRY +0107 D0BD ; +0108 D0BD ; Routine to select disk (A). +0109 D0BD ; +0110 D0BD 5F DSKSEL: LD E,A +0111 D0BE 0E 0E LD C,14 +0112 D0C0 C3 05 00 JP ENTRY +0113 D0C3 ; +0114 D0C3 ; Routine to call bdos and save the return code. The zero +0115 D0C3 ; flag is set on a return of 0ffh. +0116 D0C3 ; +0117 D0C3 CD 05 00 ENTRY1: CALL ENTRY +0118 D0C6 32 EE D7 LD (RTNCODE),A ;save return code. +0119 D0C9 3C INC A ;set zero if 0ffh returned. +0120 D0CA C9 RET +0121 D0CB ; +0122 D0CB ; Routine to open a file. (DE) must point to the FCB. +0123 D0CB ; +0124 D0CB 0E 0F OPEN: LD C,15 +0125 D0CD C3 C3 D0 JP ENTRY1 +0126 D0D0 ; +0127 D0D0 ; Routine to open file at (FCB). +0128 D0D0 ; +0129 D0D0 AF OPENFCB:XOR A ;clear the record number byte at fcb+32 +0130 D0D1 32 ED D7 LD (FCB+32),A +0131 D0D4 11 CD D7 LD DE,FCB +0132 D0D7 C3 CB D0 JP OPEN +0133 D0DA ; +0134 D0DA ; Routine to close a file. (DE) points to FCB. +0135 D0DA ; +0136 D0DA 0E 10 CLOSE: LD C,16 +0137 D0DC C3 C3 D0 JP ENTRY1 +0138 D0DF ; +0139 D0DF ; Routine to search for the first file with ambigueous name +0140 D0DF ; (DE). +0141 D0DF ; +0142 D0DF 0E 11 SRCHFST:LD C,17 +0143 D0E1 C3 C3 D0 JP ENTRY1 +0144 D0E4 ; +0145 D0E4 ; Search for the next ambigeous file name. +0146 D0E4 ; +0147 D0E4 0E 12 SRCHNXT:LD C,18 +0148 D0E6 C3 C3 D0 JP ENTRY1 +0149 D0E9 ; +0150 D0E9 ; Search for file at (FCB). +0151 D0E9 ; +0152 D0E9 11 CD D7 SRCHFCB:LD DE,FCB +0153 D0EC C3 DF D0 JP SRCHFST +0154 D0EF ; +0155 D0EF ; Routine to delete a file pointed to by (DE). +0156 D0EF ; +0157 D0EF 0E 13 DELETE: LD C,19 +0158 D0F1 C3 05 00 JP ENTRY +0159 D0F4 ; +0160 D0F4 ; Routine to call the bdos and set the zero flag if a zero +0161 D0F4 ; status is returned. +0162 D0F4 ; +0163 D0F4 CD 05 00 ENTRY2: CALL ENTRY +0164 D0F7 B7 OR A ;set zero flag if appropriate. +0165 D0F8 C9 RET +0166 D0F9 ; +0167 D0F9 ; Routine to read the next record from a sequential file. +0168 D0F9 ; (DE) points to the FCB. +0169 D0F9 ; +0170 D0F9 0E 14 RDREC: LD C,20 +0171 D0FB C3 F4 D0 JP ENTRY2 +0172 D0FE ; +0173 D0FE ; Routine to read file at (FCB). +0174 D0FE ; +0175 D0FE 11 CD D7 READFCB:LD DE,FCB +0176 D101 C3 F9 D0 JP RDREC +0177 D104 ; +0178 D104 ; Routine to write the next record of a sequential file. +0179 D104 ; (DE) points to the FCB. +0180 D104 ; +0181 D104 0E 15 WRTREC: LD C,21 +0182 D106 C3 F4 D0 JP ENTRY2 +0183 D109 ; +0184 D109 ; Routine to create the file pointed to by (DE). +0185 D109 ; +0186 D109 0E 16 CREATE: LD C,22 +0187 D10B C3 C3 D0 JP ENTRY1 +0188 D10E ; +0189 D10E ; Routine to rename the file pointed to by (DE). Note that +0190 D10E ; the new name starts at (DE+16). +0191 D10E ; +0192 D10E 0E 17 RENAM: LD C,23 +0193 D110 C3 05 00 JP ENTRY +0194 D113 ; +0195 D113 ; Get the current user code. +0196 D113 ; +0197 D113 1E FF GETUSR: LD E,0FFH +0198 D115 ; +0199 D115 ; Routne to get or set the current user code. +0200 D115 ; If (E) is FF then this is a GET, else it is a SET. +0201 D115 ; +0202 D115 0E 20 GETSETUC: LD C,32 +0203 D117 C3 05 00 JP ENTRY +0204 D11A ; +0205 D11A ; Routine to set the current drive byte at (TDRIVE). +0206 D11A ; +0207 D11A CD 13 D1 SETCDRV:CALL GETUSR ;get user number +0208 D11D 87 ADD A,A ;and shift into the upper 4 bits. +0209 D11E 87 ADD A,A +0210 D11F 87 ADD A,A +0211 D120 87 ADD A,A +0212 D121 21 EF D7 LD HL,CDRIVE ;now add in the current drive number. +0213 D124 B6 OR (HL) +0214 D125 32 04 00 LD (TDRIVE),A ;and save. +0215 D128 C9 RET +0216 D129 ; +0217 D129 ; Move currently active drive down to (TDRIVE). +0218 D129 ; +0219 D129 3A EF D7 MOVECD: LD A,(CDRIVE) +0220 D12C 32 04 00 LD (TDRIVE),A +0221 D12F C9 RET +0222 D130 ; +0223 D130 ; Routine to convert (A) into upper case ascii. Only letters +0224 D130 ; are affected. +0225 D130 ; +0226 D130 FE 61 UPPER: CP 'a' ;check for letters in the range of 'a' to 'z'. +0227 D132 D8 RET C +0228 D133 FE 7B CP '{' +0229 D135 D0 RET NC +0230 D136 E6 5F AND 5FH ;convert it if found. +0231 D138 C9 RET +0232 D139 ; +0233 D139 ; Routine to get a line of input. We must check to see if the +0234 D139 ; user is in (BATCH) mode. If so, then read the input from file +0235 D139 ; ($$$.SUB). At the end, reset to console input. +0236 D139 ; +0237 D139 3A AB D7 GETINP: LD A,(BATCH) ;if =0, then use console input. +0238 D13C B7 OR A +0239 D13D CA 96 D1 JP Z,GETINP1 +0240 D140 ; +0241 D140 ; Use the submit file ($$$.sub) which is prepared by a +0242 D140 ; SUBMIT run. It must be on drive (A) and it will be deleted +0243 D140 ; if and error occures (like eof). +0244 D140 ; +0245 D140 3A EF D7 LD A,(CDRIVE) ;select drive 0 if need be. +0246 D143 B7 OR A +0247 D144 3E 00 LD A,0 ;always use drive A for submit. +0248 D146 C4 BD D0 CALL NZ,DSKSEL ;select it if required. +0249 D149 11 AC D7 LD DE,BATCHFCB +0250 D14C CD CB D0 CALL OPEN ;look for it. +0251 D14F CA 96 D1 JP Z,GETINP1 ;if not there, use normal input. +0252 D152 3A BB D7 LD A,(BATCHFCB+15) ;get last record number+1. +0253 D155 3D DEC A +0254 D156 32 CC D7 LD (BATCHFCB+32),A +0255 D159 11 AC D7 LD DE,BATCHFCB +0256 D15C CD F9 D0 CALL RDREC ;read last record. +0257 D15F C2 96 D1 JP NZ,GETINP1 ;quit on end of file. +0258 D162 ; +0259 D162 ; Move this record into input buffer. +0260 D162 ; +0261 D162 11 07 D0 LD DE,INBUFF+1 +0262 D165 21 80 00 LD HL,TBUFF ;data was read into buffer here. +0263 D168 06 80 LD B,128 ;all 128 characters may be used. +0264 D16A CD 42 D4 CALL HL2DE ;(HL) to (DE), (B) bytes. +0265 D16D 21 BA D7 LD HL,BATCHFCB+14 +0266 D170 36 00 LD (HL),0 ;zero out the 's2' byte. +0267 D172 23 INC HL ;and decrement the record count. +0268 D173 35 DEC (HL) +0269 D174 11 AC D7 LD DE,BATCHFCB ;close the batch file now. +0270 D177 CD DA D0 CALL CLOSE +0271 D17A CA 96 D1 JP Z,GETINP1 ;quit on an error. +0272 D17D 3A EF D7 LD A,(CDRIVE) ;re-select previous drive if need be. +0273 D180 B7 OR A +0274 D181 C4 BD D0 CALL NZ,DSKSEL ;don't do needless selects. +0275 D184 ; +0276 D184 ; Print line just read on console. +0277 D184 ; +0278 D184 21 08 D0 LD HL,INBUFF+2 +0279 D187 CD AC D0 CALL PLINE2 +0280 D18A CD C2 D1 CALL CHKCON ;check console, quit on a key. +0281 D18D CA A7 D1 JP Z,GETINP2 ;jump if no key is pressed. +0282 D190 ; +0283 D190 ; Terminate the submit job on any keyboard input. Delete this +0284 D190 ; file such that it is not re-started and jump to normal keyboard +0285 D190 ; input section. +0286 D190 ; +0287 D190 CD DD D1 CALL DELBATCH ;delete the batch file. +0288 D193 C3 82 D3 JP CMMND1 ;and restart command input. +0289 D196 ; +0290 D196 ; Get here for normal keyboard input. Delete the submit file +0291 D196 ; incase there was one. +0292 D196 ; +0293 D196 CD DD D1 GETINP1:CALL DELBATCH ;delete file ($$$.sub). +0294 D199 CD 1A D1 CALL SETCDRV ;reset active disk. +0295 D19C 0E 0A LD C,10 ;get line from console device. +0296 D19E 11 06 D0 LD DE,INBUFF +0297 D1A1 CD 05 00 CALL ENTRY +0298 D1A4 CD 29 D1 CALL MOVECD ;reset current drive (again). +0299 D1A7 ; +0300 D1A7 ; Convert input line to upper case. +0301 D1A7 ; +0302 D1A7 21 07 D0 GETINP2:LD HL,INBUFF+1 +0303 D1AA 46 LD B,(HL) ;(B)=character counter. +0304 D1AB 23 GETINP3:INC HL +0305 D1AC 78 LD A,B ;end of the line? +0306 D1AD B7 OR A +0307 D1AE CA BA D1 JP Z,GETINP4 +0308 D1B1 7E LD A,(HL) ;convert to upper case. +0309 D1B2 CD 30 D1 CALL UPPER +0310 D1B5 77 LD (HL),A +0311 D1B6 05 DEC B ;adjust character count. +0312 D1B7 C3 AB D1 JP GETINP3 +0313 D1BA 77 GETINP4:LD (HL),A ;add trailing null. +0314 D1BB 21 08 D0 LD HL,INBUFF+2 +0315 D1BE 22 88 D0 LD (INPOINT),HL ;reset input line pointer. +0316 D1C1 C9 RET +0317 D1C2 ; +0318 D1C2 ; Routine to check the console for a key pressed. The zero +0319 D1C2 ; flag is set is none, else the character is returned in (A). +0320 D1C2 ; +0321 D1C2 0E 0B CHKCON: LD C,11 ;check console. +0322 D1C4 CD 05 00 CALL ENTRY +0323 D1C7 B7 OR A +0324 D1C8 C8 RET Z ;return if nothing. +0325 D1C9 0E 01 LD C,1 ;else get character. +0326 D1CB CD 05 00 CALL ENTRY +0327 D1CE B7 OR A ;clear zero flag and return. +0328 D1CF C9 RET +0329 D1D0 ; +0330 D1D0 ; Routine to get the currently active drive number. +0331 D1D0 ; +0332 D1D0 0E 19 GETDSK: LD C,25 +0333 D1D2 C3 05 00 JP ENTRY +0334 D1D5 ; +0335 D1D5 ; Set the stabdard dma address. +0336 D1D5 ; +0337 D1D5 11 80 00 STDDMA: LD DE,TBUFF +0338 D1D8 ; +0339 D1D8 ; Routine to set the dma address to (DE). +0340 D1D8 ; +0341 D1D8 0E 1A DMASET: LD C,26 +0342 D1DA C3 05 00 JP ENTRY +0343 D1DD ; +0344 D1DD ; Delete the batch file created by SUBMIT. +0345 D1DD ; +0346 D1DD 21 AB D7 DELBATCH: LD HL,BATCH ;is batch active? +0347 D1E0 7E LD A,(HL) +0348 D1E1 B7 OR A +0349 D1E2 C8 RET Z +0350 D1E3 36 00 LD (HL),0 ;yes, de-activate it. +0351 D1E5 AF XOR A +0352 D1E6 CD BD D0 CALL DSKSEL ;select drive 0 for sure. +0353 D1E9 11 AC D7 LD DE,BATCHFCB ;and delete this file. +0354 D1EC CD EF D0 CALL DELETE +0355 D1EF 3A EF D7 LD A,(CDRIVE) ;reset current drive. +0356 D1F2 C3 BD D0 JP DSKSEL +0357 D1F5 ; +0358 D1F5 ; Check to two strings at (PATTRN1) and (PATTRN2). They must be +0359 D1F5 ; the same or we halt.... +0360 D1F5 ; +0361 D1F5 11 28 D3 VERIFY: LD DE,PATTRN1 ;these are the serial number bytes. +0362 D1F8 21 00 D8 LD HL,PATTRN2 ;ditto, but how could they be different? +0363 D1FB 06 06 LD B,6 ;6 bytes each. +0364 D1FD 1A VERIFY1:LD A,(DE) +0365 D1FE BE CP (HL) +0366 D1FF C2 CF D3 JP NZ,HALT ;jump to halt routine. +0367 D202 13 INC DE +0368 D203 23 INC HL +0369 D204 05 DEC B +0370 D205 C2 FD D1 JP NZ,VERIFY1 +0371 D208 C9 RET +0372 D209 ; +0373 D209 ; Print back file name with a '?' to indicate a syntax error. +0374 D209 ; +0375 D209 CD 98 D0 SYNERR: CALL CRLF ;end current line. +0376 D20C 2A 8A D0 LD HL,(NAMEPNT) ;this points to name in error. +0377 D20F 7E SYNERR1:LD A,(HL) ;print it until a space or null is found. +0378 D210 FE 20 CP ' ' +0379 D212 CA 22 D2 JP Z,SYNERR2 +0380 D215 B7 OR A +0381 D216 CA 22 D2 JP Z,SYNERR2 +0382 D219 E5 PUSH HL +0383 D21A CD 8C D0 CALL PRINT +0384 D21D E1 POP HL +0385 D21E 23 INC HL +0386 D21F C3 0F D2 JP SYNERR1 +0387 D222 3E 3F SYNERR2:LD A,'?' ;add trailing '?'. +0388 D224 CD 8C D0 CALL PRINT +0389 D227 CD 98 D0 CALL CRLF +0390 D22A CD DD D1 CALL DELBATCH ;delete any batch file. +0391 D22D C3 82 D3 JP CMMND1 ;and restart from console input. +0392 D230 ; +0393 D230 ; Check character at (DE) for legal command input. Note that the +0394 D230 ; zero flag is set if the character is a delimiter. +0395 D230 ; +0396 D230 1A CHECK: LD A,(DE) +0397 D231 B7 OR A +0398 D232 C8 RET Z +0399 D233 FE 20 CP ' ' ;control characters are not legal here. +0400 D235 DA 09 D2 JP C,SYNERR +0401 D238 C8 RET Z ;check for valid delimiter. +0402 D239 FE 3D CP '=' +0403 D23B C8 RET Z +0404 D23C FE 5F CP '_' +0405 D23E C8 RET Z +0406 D23F FE 2E CP '.' +0407 D241 C8 RET Z +0408 D242 FE 3A CP ':' +0409 D244 C8 RET Z +0410 D245 FE 3B CP 03BH ; ';' +0411 D247 C8 RET Z +0412 D248 FE 3C CP '<' +0413 D24A C8 RET Z +0414 D24B FE 3E CP '>' +0415 D24D C8 RET Z +0416 D24E C9 RET +0417 D24F ; +0418 D24F ; Get the next non-blank character from (DE). +0419 D24F ; +0420 D24F 1A NONBLANK: LD A,(DE) +0421 D250 B7 OR A ;string ends with a null. +0422 D251 C8 RET Z +0423 D252 FE 20 CP ' ' +0424 D254 C0 RET NZ +0425 D255 13 INC DE +0426 D256 C3 4F D2 JP NONBLANK +0427 D259 ; +0428 D259 ; Add (HL)=(HL)+(A) +0429 D259 ; +0430 D259 85 ADDHL: ADD A,L +0431 D25A 6F LD L,A +0432 D25B D0 RET NC ;take care of any carry. +0433 D25C 24 INC H +0434 D25D C9 RET +0435 D25E ; +0436 D25E ; Convert the first name in (FCB). +0437 D25E ; +0438 D25E 3E 00 CONVFST:LD A,0 +0439 D260 ; +0440 D260 ; Format a file name (convert * to '?', etc.). On return, +0441 D260 ; (A)=0 is an unambigeous name was specified. Enter with (A) equal to +0442 D260 ; the position within the fcb for the name (either 0 or 16). +0443 D260 ; +0444 D260 21 CD D7 CONVERT:LD HL,FCB +0445 D263 CD 59 D2 CALL ADDHL +0446 D266 E5 PUSH HL +0447 D267 E5 PUSH HL +0448 D268 AF XOR A +0449 D269 32 F0 D7 LD (CHGDRV),A ;initialize drive change flag. +0450 D26C 2A 88 D0 LD HL,(INPOINT) ;set (HL) as pointer into input line. +0451 D26F EB EX DE,HL +0452 D270 CD 4F D2 CALL NONBLANK ;get next non-blank character. +0453 D273 EB EX DE,HL +0454 D274 22 8A D0 LD (NAMEPNT),HL ;save pointer here for any error message. +0455 D277 EB EX DE,HL +0456 D278 E1 POP HL +0457 D279 1A LD A,(DE) ;get first character. +0458 D27A B7 OR A +0459 D27B CA 89 D2 JP Z,CONVRT1 +0460 D27E DE 40 SBC A,'A'-1 ;might be a drive name, convert to binary. +0461 D280 47 LD B,A ;and save. +0462 D281 13 INC DE ;check next character for a ':'. +0463 D282 1A LD A,(DE) +0464 D283 FE 3A CP ':' +0465 D285 CA 90 D2 JP Z,CONVRT2 +0466 D288 1B DEC DE ;nope, move pointer back to the start of the line. +0467 D289 3A EF D7 CONVRT1:LD A,(CDRIVE) +0468 D28C 77 LD (HL),A +0469 D28D C3 96 D2 JP CONVRT3 +0470 D290 78 CONVRT2:LD A,B +0471 D291 32 F0 D7 LD (CHGDRV),A ;set change in drives flag. +0472 D294 70 LD (HL),B +0473 D295 13 INC DE +0474 D296 ; +0475 D296 ; Convert the basic file name. +0476 D296 ; +0477 D296 06 08 CONVRT3:LD B,08H +0478 D298 CD 30 D2 CONVRT4:CALL CHECK +0479 D29B CA B9 D2 JP Z,CONVRT8 +0480 D29E 23 INC HL +0481 D29F FE 2A CP '*' ;note that an '*' will fill the remaining +0482 D2A1 C2 A9 D2 JP NZ,CONVRT5 ;field with '?'. +0483 D2A4 36 3F LD (HL),'?' +0484 D2A6 C3 AB D2 JP CONVRT6 +0485 D2A9 77 CONVRT5:LD (HL),A +0486 D2AA 13 INC DE +0487 D2AB 05 CONVRT6:DEC B +0488 D2AC C2 98 D2 JP NZ,CONVRT4 +0489 D2AF CD 30 D2 CONVRT7:CALL CHECK ;get next delimiter. +0490 D2B2 CA C0 D2 JP Z,GETEXT +0491 D2B5 13 INC DE +0492 D2B6 C3 AF D2 JP CONVRT7 +0493 D2B9 23 CONVRT8:INC HL ;blank fill the file name. +0494 D2BA 36 20 LD (HL),' ' +0495 D2BC 05 DEC B +0496 D2BD C2 B9 D2 JP NZ,CONVRT8 +0497 D2C0 ; +0498 D2C0 ; Get the extension and convert it. +0499 D2C0 ; +0500 D2C0 06 03 GETEXT: LD B,03H +0501 D2C2 FE 2E CP '.' +0502 D2C4 C2 E9 D2 JP NZ,GETEXT5 +0503 D2C7 13 INC DE +0504 D2C8 CD 30 D2 GETEXT1:CALL CHECK +0505 D2CB CA E9 D2 JP Z,GETEXT5 +0506 D2CE 23 INC HL +0507 D2CF FE 2A CP '*' +0508 D2D1 C2 D9 D2 JP NZ,GETEXT2 +0509 D2D4 36 3F LD (HL),'?' +0510 D2D6 C3 DB D2 JP GETEXT3 +0511 D2D9 77 GETEXT2:LD (HL),A +0512 D2DA 13 INC DE +0513 D2DB 05 GETEXT3:DEC B +0514 D2DC C2 C8 D2 JP NZ,GETEXT1 +0515 D2DF CD 30 D2 GETEXT4:CALL CHECK +0516 D2E2 CA F0 D2 JP Z,GETEXT6 +0517 D2E5 13 INC DE +0518 D2E6 C3 DF D2 JP GETEXT4 +0519 D2E9 23 GETEXT5:INC HL +0520 D2EA 36 20 LD (HL),' ' +0521 D2EC 05 DEC B +0522 D2ED C2 E9 D2 JP NZ,GETEXT5 +0523 D2F0 06 03 GETEXT6:LD B,3 +0524 D2F2 23 GETEXT7:INC HL +0525 D2F3 36 00 LD (HL),0 +0526 D2F5 05 DEC B +0527 D2F6 C2 F2 D2 JP NZ,GETEXT7 +0528 D2F9 EB EX DE,HL +0529 D2FA 22 88 D0 LD (INPOINT),HL ;save input line pointer. +0530 D2FD E1 POP HL +0531 D2FE ; +0532 D2FE ; Check to see if this is an ambigeous file name specification. +0533 D2FE ; Set the (A) register to non zero if it is. +0534 D2FE ; +0535 D2FE 01 0B 00 LD BC,11 ;set name length. +0536 D301 23 GETEXT8:INC HL +0537 D302 7E LD A,(HL) +0538 D303 FE 3F CP '?' ;any question marks? +0539 D305 C2 09 D3 JP NZ,GETEXT9 +0540 D308 04 INC B ;count them. +0541 D309 0D GETEXT9:DEC C +0542 D30A C2 01 D3 JP NZ,GETEXT8 +0543 D30D 78 LD A,B +0544 D30E B7 OR A +0545 D30F C9 RET +0546 D310 ; +0547 D310 ; CP/M command table. Note commands can be either 3 or 4 characters long. +0548 D310 ; +0549 D310 NUMCMDS .EQU 6 ;number of commands +0550 D310 44 49 52 20 CMDTBL: .TEXT "DIR " +0551 D314 45 52 41 20 .TEXT "ERA " +0552 D318 54 59 50 45 .TEXT "TYPE" +0553 D31C 53 41 56 45 .TEXT "SAVE" +0554 D320 52 45 4E 20 .TEXT "REN " +0555 D324 55 53 45 52 .TEXT "USER" +0556 D328 ; +0557 D328 ; The following six bytes must agree with those at (PATTRN2) +0558 D328 ; or cp/m will HALT. Why? +0559 D328 ; +0560 D328 001600000000PATTRN1:.DB 0,22,0,0,0,0 ;(* serial number bytes *). +0561 D32E ; +0562 D32E ; Search the command table for a match with what has just +0563 D32E ; been entered. If a match is found, then we jump to the +0564 D32E ; proper section. Else jump to (UNKNOWN). +0565 D32E ; On return, the (C) register is set to the command number +0566 D32E ; that matched (or NUMCMDS+1 if no match). +0567 D32E ; +0568 D32E 21 10 D3 SEARCH: LD HL,CMDTBL +0569 D331 0E 00 LD C,0 +0570 D333 79 SEARCH1:LD A,C +0571 D334 FE 06 CP NUMCMDS ;this commands exists. +0572 D336 D0 RET NC +0573 D337 11 CE D7 LD DE,FCB+1 ;check this one. +0574 D33A 06 04 LD B,4 ;max command length. +0575 D33C 1A SEARCH2:LD A,(DE) +0576 D33D BE CP (HL) +0577 D33E C2 4F D3 JP NZ,SEARCH3 ;not a match. +0578 D341 13 INC DE +0579 D342 23 INC HL +0580 D343 05 DEC B +0581 D344 C2 3C D3 JP NZ,SEARCH2 +0582 D347 1A LD A,(DE) ;allow a 3 character command to match. +0583 D348 FE 20 CP ' ' +0584 D34A C2 54 D3 JP NZ,SEARCH4 +0585 D34D 79 LD A,C ;set return register for this command. +0586 D34E C9 RET +0587 D34F 23 SEARCH3:INC HL +0588 D350 05 DEC B +0589 D351 C2 4F D3 JP NZ,SEARCH3 +0590 D354 0C SEARCH4:INC C +0591 D355 C3 33 D3 JP SEARCH1 +0592 D358 ; +0593 D358 ; Set the input buffer to empty and then start the command +0594 D358 ; processor (ccp). +0595 D358 ; +0596 D358 AF CLEARBUF: XOR A +0597 D359 32 07 D0 LD (INBUFF+1),A ;second byte is actual length. +0598 D35C ; +0599 D35C ;************************************************************** +0600 D35C ;* +0601 D35C ;* +0602 D35C ;* C C P - C o n s o l e C o m m a n d P r o c e s s o r +0603 D35C ;* +0604 D35C ;************************************************************** +0605 D35C ;* +0606 D35C 31 AB D7 COMMAND:LD SP,CCPSTACK ;setup stack area. +0607 D35F C5 PUSH BC ;note that (C) should be equal to: +0608 D360 79 LD A,C ;(uuuudddd) where 'uuuu' is the user number +0609 D361 1F RRA ;and 'dddd' is the drive number. +0610 D362 1F RRA +0611 D363 1F RRA +0612 D364 1F RRA +0613 D365 E6 0F AND 0FH ;isolate the user number. +0614 D367 5F LD E,A +0615 D368 CD 15 D1 CALL GETSETUC ;and set it. +0616 D36B CD B8 D0 CALL RESDSK ;reset the disk system. +0617 D36E 32 AB D7 LD (BATCH),A ;clear batch mode flag. +0618 D371 C1 POP BC +0619 D372 79 LD A,C +0620 D373 E6 0F AND 0FH ;isolate the drive number. +0621 D375 32 EF D7 LD (CDRIVE),A ;and save. +0622 D378 CD BD D0 CALL DSKSEL ;...and select. +0623 D37B 3A 07 D0 LD A,(INBUFF+1) +0624 D37E B7 OR A ;anything in input buffer already? +0625 D37F C2 98 D3 JP NZ,CMMND2 ;yes, we just process it. +0626 D382 ; +0627 D382 ; Entry point to get a command line from the console. +0628 D382 ; +0629 D382 31 AB D7 CMMND1: LD SP,CCPSTACK ;set stack straight. +0630 D385 CD 98 D0 CALL CRLF ;start a new line on the screen. +0631 D388 CD D0 D1 CALL GETDSK ;get current drive. +0632 D38B C6 41 ADD A,'A' +0633 D38D CD 8C D0 CALL PRINT ;print current drive. +0634 D390 3E 3E LD A,'>' +0635 D392 CD 8C D0 CALL PRINT ;and add prompt. +0636 D395 CD 39 D1 CALL GETINP ;get line from user. +0637 D398 ; +0638 D398 ; Process command line here. +0639 D398 ; +0640 D398 11 80 00 CMMND2: LD DE,TBUFF +0641 D39B CD D8 D1 CALL DMASET ;set standard dma address. +0642 D39E CD D0 D1 CALL GETDSK +0643 D3A1 32 EF D7 LD (CDRIVE),A ;set current drive. +0644 D3A4 CD 5E D2 CALL CONVFST ;convert name typed in. +0645 D3A7 C4 09 D2 CALL NZ,SYNERR ;wild cards are not allowed. +0646 D3AA 3A F0 D7 LD A,(CHGDRV) ;if a change in drives was indicated, +0647 D3AD B7 OR A ;then treat this as an unknown command +0648 D3AE C2 A5 D6 JP NZ,UNKNOWN ;which gets executed. +0649 D3B1 CD 2E D3 CALL SEARCH ;else search command table for a match. +0650 D3B4 ; +0651 D3B4 ; Note that an unknown command returns +0652 D3B4 ; with (A) pointing to the last address +0653 D3B4 ; in our table which is (UNKNOWN). +0654 D3B4 ; +0655 D3B4 21 C1 D3 LD HL,CMDADR ;now, look thru our address table for command (A). +0656 D3B7 5F LD E,A ;set (DE) to command number. +0657 D3B8 16 00 LD D,0 +0658 D3BA 19 ADD HL,DE +0659 D3BB 19 ADD HL,DE ;(HL)=(CMDADR)+2*(command number). +0660 D3BC 7E LD A,(HL) ;now pick out this address. +0661 D3BD 23 INC HL +0662 D3BE 66 LD H,(HL) +0663 D3BF 6F LD L,A +0664 D3C0 E9 JP (HL) ;now execute it. +0665 D3C1 ; +0666 D3C1 ; CP/M command address table. +0667 D3C1 ; +0668 D3C1 77D41FD55DD5CMDADR: .DW DIRECT,ERASE,TYPE,SAVE +0668 D3C7 ADD5 +0669 D3C9 10D68ED6A5D6 .DW RENAME,USER,UNKNOWN +0670 D3CF ; +0671 D3CF ; Halt the system. Reason for this is unknown at present. +0672 D3CF ; +0673 D3CF 21 F3 76 HALT: LD HL,76F3H ;'DI HLT' instructions. +0674 D3D2 22 00 D0 LD (CBASE),HL +0675 D3D5 21 00 D0 LD HL,CBASE +0676 D3D8 E9 JP (HL) +0677 D3D9 ; +0678 D3D9 ; Read error while TYPEing a file. +0679 D3D9 ; +0680 D3D9 01 DF D3 RDERROR:LD BC,RDERR +0681 D3DC C3 A7 D0 JP PLINE +0682 D3DF 526561642065RDERR: .TEXT "Read error" +0682 D3E5 72726F72 +0683 D3E9 00 .DB 0 +0684 D3EA ; +0685 D3EA ; Required file was not located. +0686 D3EA ; +0687 D3EA 01 F0 D3 NONE: LD BC,NOFILE +0688 D3ED C3 A7 D0 JP PLINE +0689 D3F0 4E6F2066696CNOFILE: .TEXT "No file" +0689 D3F6 65 +0690 D3F7 00 .DB 0 +0691 D3F8 ; +0692 D3F8 ; Decode a command of the form 'A>filename number{ filename}. +0693 D3F8 ; Note that a drive specifier is not allowed on the first file +0694 D3F8 ; name. On return, the number is in register (A). Any error +0695 D3F8 ; causes 'filename?' to be printed and the command is aborted. +0696 D3F8 ; +0697 D3F8 CD 5E D2 DECODE: CALL CONVFST ;convert filename. +0698 D3FB 3A F0 D7 LD A,(CHGDRV) ;do not allow a drive to be specified. +0699 D3FE B7 OR A +0700 D3FF C2 09 D2 JP NZ,SYNERR +0701 D402 21 CE D7 LD HL,FCB+1 ;convert number now. +0702 D405 01 0B 00 LD BC,11 ;(B)=sum register, (C)=max digit count. +0703 D408 7E DECODE1:LD A,(HL) +0704 D409 FE 20 CP ' ' ;a space terminates the numeral. +0705 D40B CA 33 D4 JP Z,DECODE3 +0706 D40E 23 INC HL +0707 D40F D6 30 SUB '0' ;make binary from ascii. +0708 D411 FE 0A CP 10 ;legal digit? +0709 D413 D2 09 D2 JP NC,SYNERR +0710 D416 57 LD D,A ;yes, save it in (D). +0711 D417 78 LD A,B ;compute (B)=(B)*10 and check for overflow. +0712 D418 E6 E0 AND 0E0H +0713 D41A C2 09 D2 JP NZ,SYNERR +0714 D41D 78 LD A,B +0715 D41E 07 RLCA +0716 D41F 07 RLCA +0717 D420 07 RLCA ;(A)=(B)*8 +0718 D421 80 ADD A,B ;.......*9 +0719 D422 DA 09 D2 JP C,SYNERR +0720 D425 80 ADD A,B ;.......*10 +0721 D426 DA 09 D2 JP C,SYNERR +0722 D429 82 ADD A,D ;add in new digit now. +0723 D42A DA 09 D2 DECODE2:JP C,SYNERR +0724 D42D 47 LD B,A ;and save result. +0725 D42E 0D DEC C ;only look at 11 digits. +0726 D42F C2 08 D4 JP NZ,DECODE1 +0727 D432 C9 RET +0728 D433 7E DECODE3:LD A,(HL) ;spaces must follow (why?). +0729 D434 FE 20 CP ' ' +0730 D436 C2 09 D2 JP NZ,SYNERR +0731 D439 23 INC HL +0732 D43A 0D DECODE4:DEC C +0733 D43B C2 33 D4 JP NZ,DECODE3 +0734 D43E 78 LD A,B ;set (A)=the numeric value entered. +0735 D43F C9 RET +0736 D440 ; +0737 D440 ; Move 3 bytes from (HL) to (DE). Note that there is only +0738 D440 ; one reference to this at (A2D5h). +0739 D440 ; +0740 D440 06 03 MOVE3: LD B,3 +0741 D442 ; +0742 D442 ; Move (B) bytes from (HL) to (DE). +0743 D442 ; +0744 D442 7E HL2DE: LD A,(HL) +0745 D443 12 LD (DE),A +0746 D444 23 INC HL +0747 D445 13 INC DE +0748 D446 05 DEC B +0749 D447 C2 42 D4 JP NZ,HL2DE +0750 D44A C9 RET +0751 D44B ; +0752 D44B ; Compute (HL)=(TBUFF)+(A)+(C) and get the byte that's here. +0753 D44B ; +0754 D44B 21 80 00 EXTRACT:LD HL,TBUFF +0755 D44E 81 ADD A,C +0756 D44F CD 59 D2 CALL ADDHL +0757 D452 7E LD A,(HL) +0758 D453 C9 RET +0759 D454 ; +0760 D454 ; Check drive specified. If it means a change, then the new +0761 D454 ; drive will be selected. In any case, the drive byte of the +0762 D454 ; fcb will be set to null (means use current drive). +0763 D454 ; +0764 D454 AF DSELECT:XOR A ;null out first byte of fcb. +0765 D455 32 CD D7 LD (FCB),A +0766 D458 3A F0 D7 LD A,(CHGDRV) ;a drive change indicated? +0767 D45B B7 OR A +0768 D45C C8 RET Z +0769 D45D 3D DEC A ;yes, is it the same as the current drive? +0770 D45E 21 EF D7 LD HL,CDRIVE +0771 D461 BE CP (HL) +0772 D462 C8 RET Z +0773 D463 C3 BD D0 JP DSKSEL ;no. Select it then. +0774 D466 ; +0775 D466 ; Check the drive selection and reset it to the previous +0776 D466 ; drive if it was changed for the preceeding command. +0777 D466 ; +0778 D466 3A F0 D7 RESETDR:LD A,(CHGDRV) ;drive change indicated? +0779 D469 B7 OR A +0780 D46A C8 RET Z +0781 D46B 3D DEC A ;yes, was it a different drive? +0782 D46C 21 EF D7 LD HL,CDRIVE +0783 D46F BE CP (HL) +0784 D470 C8 RET Z +0785 D471 3A EF D7 LD A,(CDRIVE) ;yes, re-select our old drive. +0786 D474 C3 BD D0 JP DSKSEL +0787 D477 ; +0788 D477 ;************************************************************** +0789 D477 ;* +0790 D477 ;* D I R E C T O R Y C O M M A N D +0791 D477 ;* +0792 D477 ;************************************************************** +0793 D477 ; +0794 D477 CD 5E D2 DIRECT: CALL CONVFST ;convert file name. +0795 D47A CD 54 D4 CALL DSELECT ;select indicated drive. +0796 D47D 21 CE D7 LD HL,FCB+1 ;was any file indicated? +0797 D480 7E LD A,(HL) +0798 D481 FE 20 CP ' ' +0799 D483 C2 8F D4 JP NZ,DIRECT2 +0800 D486 06 0B LD B,11 ;no. Fill field with '?' - same as *.*. +0801 D488 36 3F DIRECT1:LD (HL),'?' +0802 D48A 23 INC HL +0803 D48B 05 DEC B +0804 D48C C2 88 D4 JP NZ,DIRECT1 +0805 D48F 1E 00 DIRECT2:LD E,0 ;set initial cursor position. +0806 D491 D5 PUSH DE +0807 D492 CD E9 D0 CALL SRCHFCB ;get first file name. +0808 D495 CC EA D3 CALL Z,NONE ;none found at all? +0809 D498 CA 1B D5 DIRECT3:JP Z,DIRECT9 ;terminate if no more names. +0810 D49B 3A EE D7 LD A,(RTNCODE) ;get file's position in segment (0-3). +0811 D49E 0F RRCA +0812 D49F 0F RRCA +0813 D4A0 0F RRCA +0814 D4A1 E6 60 AND 60H ;(A)=position*32 +0815 D4A3 4F LD C,A +0816 D4A4 3E 0A LD A,10 +0817 D4A6 CD 4B D4 CALL EXTRACT ;extract the tenth entry in fcb. +0818 D4A9 17 RLA ;check system file status bit. +0819 D4AA DA 0F D5 JP C,DIRECT8 ;we don't list them. +0820 D4AD D1 POP DE +0821 D4AE 7B LD A,E ;bump name count. +0822 D4AF 1C INC E +0823 D4B0 D5 PUSH DE +0824 D4B1 E6 03 AND 03H ;at end of line? +0825 D4B3 F5 PUSH AF +0826 D4B4 C2 CC D4 JP NZ,DIRECT4 +0827 D4B7 CD 98 D0 CALL CRLF ;yes, end this line and start another. +0828 D4BA C5 PUSH BC +0829 D4BB CD D0 D1 CALL GETDSK ;start line with ('A:'). +0830 D4BE C1 POP BC +0831 D4BF C6 41 ADD A,'A' +0832 D4C1 CD 92 D0 CALL PRINTB +0833 D4C4 3E 3A LD A,':' +0834 D4C6 CD 92 D0 CALL PRINTB +0835 D4C9 C3 D4 D4 JP DIRECT5 +0836 D4CC CD A2 D0 DIRECT4:CALL SPACE ;add seperator between file names. +0837 D4CF 3E 3A LD A,':' +0838 D4D1 CD 92 D0 CALL PRINTB +0839 D4D4 CD A2 D0 DIRECT5:CALL SPACE +0840 D4D7 06 01 LD B,1 ;'extract' each file name character at a time. +0841 D4D9 78 DIRECT6:LD A,B +0842 D4DA CD 4B D4 CALL EXTRACT +0843 D4DD E6 7F AND 7FH ;strip bit 7 (status bit). +0844 D4DF FE 20 CP ' ' ;are we at the end of the name? +0845 D4E1 C2 F9 D4 JP NZ,DRECT65 +0846 D4E4 F1 POP AF ;yes, don't print spaces at the end of a line. +0847 D4E5 F5 PUSH AF +0848 D4E6 FE 03 CP 3 +0849 D4E8 C2 F7 D4 JP NZ,DRECT63 +0850 D4EB 3E 09 LD A,9 ;first check for no extension. +0851 D4ED CD 4B D4 CALL EXTRACT +0852 D4F0 E6 7F AND 7FH +0853 D4F2 FE 20 CP ' ' +0854 D4F4 CA 0E D5 JP Z,DIRECT7 ;don't print spaces. +0855 D4F7 3E 20 DRECT63:LD A,' ' ;else print them. +0856 D4F9 CD 92 D0 DRECT65:CALL PRINTB +0857 D4FC 04 INC B ;bump to next character psoition. +0858 D4FD 78 LD A,B +0859 D4FE FE 0C CP 12 ;end of the name? +0860 D500 D2 0E D5 JP NC,DIRECT7 +0861 D503 FE 09 CP 9 ;nope, starting extension? +0862 D505 C2 D9 D4 JP NZ,DIRECT6 +0863 D508 CD A2 D0 CALL SPACE ;yes, add seperating space. +0864 D50B C3 D9 D4 JP DIRECT6 +0865 D50E F1 DIRECT7:POP AF ;get the next file name. +0866 D50F CD C2 D1 DIRECT8:CALL CHKCON ;first check console, quit on anything. +0867 D512 C2 1B D5 JP NZ,DIRECT9 +0868 D515 CD E4 D0 CALL SRCHNXT ;get next name. +0869 D518 C3 98 D4 JP DIRECT3 ;and continue with our list. +0870 D51B D1 DIRECT9:POP DE ;restore the stack and return to command level. +0871 D51C C3 86 D7 JP GETBACK +0872 D51F ; +0873 D51F ;************************************************************** +0874 D51F ;* +0875 D51F ;* E R A S E C O M M A N D +0876 D51F ;* +0877 D51F ;************************************************************** +0878 D51F ; +0879 D51F CD 5E D2 ERASE: CALL CONVFST ;convert file name. +0880 D522 FE 0B CP 11 ;was '*.*' entered? +0881 D524 C2 42 D5 JP NZ,ERASE1 +0882 D527 01 52 D5 LD BC,YESNO ;yes, ask for confirmation. +0883 D52A CD A7 D0 CALL PLINE +0884 D52D CD 39 D1 CALL GETINP +0885 D530 21 07 D0 LD HL,INBUFF+1 +0886 D533 35 DEC (HL) ;must be exactly 'y'. +0887 D534 C2 82 D3 JP NZ,CMMND1 +0888 D537 23 INC HL +0889 D538 7E LD A,(HL) +0890 D539 FE 59 CP 'Y' +0891 D53B C2 82 D3 JP NZ,CMMND1 +0892 D53E 23 INC HL +0893 D53F 22 88 D0 LD (INPOINT),HL ;save input line pointer. +0894 D542 CD 54 D4 ERASE1: CALL DSELECT ;select desired disk. +0895 D545 11 CD D7 LD DE,FCB +0896 D548 CD EF D0 CALL DELETE ;delete the file. +0897 D54B 3C INC A +0898 D54C CC EA D3 CALL Z,NONE ;not there? +0899 D54F C3 86 D7 JP GETBACK ;return to command level now. +0900 D552 416C6C202879YESNO: .TEXT "All (y/n)?" +0900 D558 2F6E293F +0901 D55C 00 .DB 0 +0902 D55D ; +0903 D55D ;************************************************************** +0904 D55D ;* +0905 D55D ;* T Y P E C O M M A N D +0906 D55D ;* +0907 D55D ;************************************************************** +0908 D55D ; +0909 D55D CD 5E D2 TYPE: CALL CONVFST ;convert file name. +0910 D560 C2 09 D2 JP NZ,SYNERR ;wild cards not allowed. +0911 D563 CD 54 D4 CALL DSELECT ;select indicated drive. +0912 D566 CD D0 D0 CALL OPENFCB ;open the file. +0913 D569 CA A7 D5 JP Z,TYPE5 ;not there? +0914 D56C CD 98 D0 CALL CRLF ;ok, start a new line on the screen. +0915 D56F 21 F1 D7 LD HL,NBYTES ;initialize byte counter. +0916 D572 36 FF LD (HL),0FFH ;set to read first sector. +0917 D574 21 F1 D7 TYPE1: LD HL,NBYTES +0918 D577 7E TYPE2: LD A,(HL) ;have we written the entire sector? +0919 D578 FE 80 CP 128 +0920 D57A DA 87 D5 JP C,TYPE3 +0921 D57D E5 PUSH HL ;yes, read in the next one. +0922 D57E CD FE D0 CALL READFCB +0923 D581 E1 POP HL +0924 D582 C2 A0 D5 JP NZ,TYPE4 ;end or error? +0925 D585 AF XOR A ;ok, clear byte counter. +0926 D586 77 LD (HL),A +0927 D587 34 TYPE3: INC (HL) ;count this byte. +0928 D588 21 80 00 LD HL,TBUFF ;and get the (A)th one from the buffer (TBUFF). +0929 D58B CD 59 D2 CALL ADDHL +0930 D58E 7E LD A,(HL) +0931 D58F FE 1A CP CNTRLZ ;end of file mark? +0932 D591 CA 86 D7 JP Z,GETBACK +0933 D594 CD 8C D0 CALL PRINT ;no, print it. +0934 D597 CD C2 D1 CALL CHKCON ;check console, quit if anything ready. +0935 D59A C2 86 D7 JP NZ,GETBACK +0936 D59D C3 74 D5 JP TYPE1 +0937 D5A0 ; +0938 D5A0 ; Get here on an end of file or read error. +0939 D5A0 ; +0940 D5A0 3D TYPE4: DEC A ;read error? +0941 D5A1 CA 86 D7 JP Z,GETBACK +0942 D5A4 CD D9 D3 CALL RDERROR ;yes, print message. +0943 D5A7 CD 66 D4 TYPE5: CALL RESETDR ;and reset proper drive +0944 D5AA C3 09 D2 JP SYNERR ;now print file name with problem. +0945 D5AD ; +0946 D5AD ;************************************************************** +0947 D5AD ;* +0948 D5AD ;* S A V E C O M M A N D +0949 D5AD ;* +0950 D5AD ;************************************************************** +0951 D5AD ; +0952 D5AD CD F8 D3 SAVE: CALL DECODE ;get numeric number that follows SAVE. +0953 D5B0 F5 PUSH AF ;save number of pages to write. +0954 D5B1 CD 5E D2 CALL CONVFST ;convert file name. +0955 D5B4 C2 09 D2 JP NZ,SYNERR ;wild cards not allowed. +0956 D5B7 CD 54 D4 CALL DSELECT ;select specified drive. +0957 D5BA 11 CD D7 LD DE,FCB ;now delete this file. +0958 D5BD D5 PUSH DE +0959 D5BE CD EF D0 CALL DELETE +0960 D5C1 D1 POP DE +0961 D5C2 CD 09 D1 CALL CREATE ;and create it again. +0962 D5C5 CA FB D5 JP Z,SAVE3 ;can't create? +0963 D5C8 AF XOR A ;clear record number byte. +0964 D5C9 32 ED D7 LD (FCB+32),A +0965 D5CC F1 POP AF ;convert pages to sectors. +0966 D5CD 6F LD L,A +0967 D5CE 26 00 LD H,0 +0968 D5D0 29 ADD HL,HL ;(HL)=number of sectors to write. +0969 D5D1 11 00 01 LD DE,TBASE ;and we start from here. +0970 D5D4 7C SAVE1: LD A,H ;done yet? +0971 D5D5 B5 OR L +0972 D5D6 CA F1 D5 JP Z,SAVE2 +0973 D5D9 2B DEC HL ;nope, count this and compute the start +0974 D5DA E5 PUSH HL ;of the next 128 byte sector. +0975 D5DB 21 80 00 LD HL,128 +0976 D5DE 19 ADD HL,DE +0977 D5DF E5 PUSH HL ;save it and set the transfer address. +0978 D5E0 CD D8 D1 CALL DMASET +0979 D5E3 11 CD D7 LD DE,FCB ;write out this sector now. +0980 D5E6 CD 04 D1 CALL WRTREC +0981 D5E9 D1 POP DE ;reset (DE) to the start of the last sector. +0982 D5EA E1 POP HL ;restore sector count. +0983 D5EB C2 FB D5 JP NZ,SAVE3 ;write error? +0984 D5EE C3 D4 D5 JP SAVE1 +0985 D5F1 ; +0986 D5F1 ; Get here after writing all of the file. +0987 D5F1 ; +0988 D5F1 11 CD D7 SAVE2: LD DE,FCB ;now close the file. +0989 D5F4 CD DA D0 CALL CLOSE +0990 D5F7 3C INC A ;did it close ok? +0991 D5F8 C2 01 D6 JP NZ,SAVE4 +0992 D5FB ; +0993 D5FB ; Print out error message (no space). +0994 D5FB ; +0995 D5FB 01 07 D6 SAVE3: LD BC,NOSPACE +0996 D5FE CD A7 D0 CALL PLINE +0997 D601 CD D5 D1 SAVE4: CALL STDDMA ;reset the standard dma address. +0998 D604 C3 86 D7 JP GETBACK +0999 D607 4E6F20737061NOSPACE:.TEXT "No space" +0999 D60D 6365 +1000 D60F 00 .DB 0 +1001 D610 ; +1002 D610 ;************************************************************** +1003 D610 ;* +1004 D610 ;* R E N A M E C O M M A N D +1005 D610 ;* +1006 D610 ;************************************************************** +1007 D610 ; +1008 D610 CD 5E D2 RENAME: CALL CONVFST ;convert first file name. +1009 D613 C2 09 D2 JP NZ,SYNERR ;wild cards not allowed. +1010 D616 3A F0 D7 LD A,(CHGDRV) ;remember any change in drives specified. +1011 D619 F5 PUSH AF +1012 D61A CD 54 D4 CALL DSELECT ;and select this drive. +1013 D61D CD E9 D0 CALL SRCHFCB ;is this file present? +1014 D620 C2 79 D6 JP NZ,RENAME6 ;yes, print error message. +1015 D623 21 CD D7 LD HL,FCB ;yes, move this name into second slot. +1016 D626 11 DD D7 LD DE,FCB+16 +1017 D629 06 10 LD B,16 +1018 D62B CD 42 D4 CALL HL2DE +1019 D62E 2A 88 D0 LD HL,(INPOINT) ;get input pointer. +1020 D631 EB EX DE,HL +1021 D632 CD 4F D2 CALL NONBLANK ;get next non blank character. +1022 D635 FE 3D CP '=' ;only allow an '=' or '_' seperator. +1023 D637 CA 3F D6 JP Z,RENAME1 +1024 D63A FE 5F CP '_' +1025 D63C C2 73 D6 JP NZ,RENAME5 +1026 D63F EB RENAME1:EX DE,HL +1027 D640 23 INC HL ;ok, skip seperator. +1028 D641 22 88 D0 LD (INPOINT),HL ;save input line pointer. +1029 D644 CD 5E D2 CALL CONVFST ;convert this second file name now. +1030 D647 C2 73 D6 JP NZ,RENAME5 ;again, no wild cards. +1031 D64A F1 POP AF ;if a drive was specified, then it +1032 D64B 47 LD B,A ;must be the same as before. +1033 D64C 21 F0 D7 LD HL,CHGDRV +1034 D64F 7E LD A,(HL) +1035 D650 B7 OR A +1036 D651 CA 59 D6 JP Z,RENAME2 +1037 D654 B8 CP B +1038 D655 70 LD (HL),B +1039 D656 C2 73 D6 JP NZ,RENAME5 ;they were different, error. +1040 D659 70 RENAME2:LD (HL),B ; reset as per the first file specification. +1041 D65A AF XOR A +1042 D65B 32 CD D7 LD (FCB),A ;clear the drive byte of the fcb. +1043 D65E CD E9 D0 RENAME3:CALL SRCHFCB ;and go look for second file. +1044 D661 CA 6D D6 JP Z,RENAME4 ;doesn't exist? +1045 D664 11 CD D7 LD DE,FCB +1046 D667 CD 0E D1 CALL RENAM ;ok, rename the file. +1047 D66A C3 86 D7 JP GETBACK +1048 D66D ; +1049 D66D ; Process rename errors here. +1050 D66D ; +1051 D66D CD EA D3 RENAME4:CALL NONE ;file not there. +1052 D670 C3 86 D7 JP GETBACK +1053 D673 CD 66 D4 RENAME5:CALL RESETDR ;bad command format. +1054 D676 C3 09 D2 JP SYNERR +1055 D679 01 82 D6 RENAME6:LD BC,EXISTS ;destination file already exists. +1056 D67C CD A7 D0 CALL PLINE +1057 D67F C3 86 D7 JP GETBACK +1058 D682 46696C652065EXISTS: .TEXT "File exists" +1058 D688 7869737473 +1059 D68D 00 .DB 0 +1060 D68E ; +1061 D68E ;************************************************************** +1062 D68E ;* +1063 D68E ;* U S E R C O M M A N D +1064 D68E ;* +1065 D68E ;************************************************************** +1066 D68E ; +1067 D68E CD F8 D3 USER: CALL DECODE ;get numeric value following command. +1068 D691 FE 10 CP 16 ;legal user number? +1069 D693 D2 09 D2 JP NC,SYNERR +1070 D696 5F LD E,A ;yes but is there anything else? +1071 D697 3A CE D7 LD A,(FCB+1) +1072 D69A FE 20 CP ' ' +1073 D69C CA 09 D2 JP Z,SYNERR ;yes, that is not allowed. +1074 D69F CD 15 D1 CALL GETSETUC ;ok, set user code. +1075 D6A2 C3 89 D7 JP GETBACK1 +1076 D6A5 ; +1077 D6A5 ;************************************************************** +1078 D6A5 ;* +1079 D6A5 ;* T R A N S I A N T P R O G R A M C O M M A N D +1080 D6A5 ;* +1081 D6A5 ;************************************************************** +1082 D6A5 ; +1083 D6A5 CD F5 D1 UNKNOWN:CALL VERIFY ;check for valid system (why?). +1084 D6A8 3A CE D7 LD A,(FCB+1) ;anything to execute? +1085 D6AB FE 20 CP ' ' +1086 D6AD C2 C4 D6 JP NZ,UNKWN1 +1087 D6B0 3A F0 D7 LD A,(CHGDRV) ;nope, only a drive change? +1088 D6B3 B7 OR A +1089 D6B4 CA 89 D7 JP Z,GETBACK1 ;neither??? +1090 D6B7 3D DEC A +1091 D6B8 32 EF D7 LD (CDRIVE),A ;ok, store new drive. +1092 D6BB CD 29 D1 CALL MOVECD ;set (TDRIVE) also. +1093 D6BE CD BD D0 CALL DSKSEL ;and select this drive. +1094 D6C1 C3 89 D7 JP GETBACK1 ;then return. +1095 D6C4 ; +1096 D6C4 ; Here a file name was typed. Prepare to execute it. +1097 D6C4 ; +1098 D6C4 11 D6 D7 UNKWN1: LD DE,FCB+9 ;an extension specified? +1099 D6C7 1A LD A,(DE) +1100 D6C8 FE 20 CP ' ' +1101 D6CA C2 09 D2 JP NZ,SYNERR ;yes, not allowed. +1102 D6CD D5 UNKWN2: PUSH DE +1103 D6CE CD 54 D4 CALL DSELECT ;select specified drive. +1104 D6D1 D1 POP DE +1105 D6D2 21 83 D7 LD HL,COMFILE ;set the extension to 'COM'. +1106 D6D5 CD 40 D4 CALL MOVE3 +1107 D6D8 CD D0 D0 CALL OPENFCB ;and open this file. +1108 D6DB CA 6B D7 JP Z,UNKWN9 ;not present? +1109 D6DE ; +1110 D6DE ; Load in the program. +1111 D6DE ; +1112 D6DE 21 00 01 LD HL,TBASE ;store the program starting here. +1113 D6E1 E5 UNKWN3: PUSH HL +1114 D6E2 EB EX DE,HL +1115 D6E3 CD D8 D1 CALL DMASET ;set transfer address. +1116 D6E6 11 CD D7 LD DE,FCB ;and read the next record. +1117 D6E9 CD F9 D0 CALL RDREC +1118 D6EC C2 01 D7 JP NZ,UNKWN4 ;end of file or read error? +1119 D6EF E1 POP HL ;nope, bump pointer for next sector. +1120 D6F0 11 80 00 LD DE,128 +1121 D6F3 19 ADD HL,DE +1122 D6F4 11 00 D0 LD DE,CBASE ;enough room for the whole file? +1123 D6F7 7D LD A,L +1124 D6F8 93 SUB E +1125 D6F9 7C LD A,H +1126 D6FA 9A SBC A,D +1127 D6FB D2 71 D7 JP NC,UNKWN0 ;no, it can't fit. +1128 D6FE C3 E1 D6 JP UNKWN3 +1129 D701 ; +1130 D701 ; Get here after finished reading. +1131 D701 ; +1132 D701 E1 UNKWN4: POP HL +1133 D702 3D DEC A ;normal end of file? +1134 D703 C2 71 D7 JP NZ,UNKWN0 +1135 D706 CD 66 D4 CALL RESETDR ;yes, reset previous drive. +1136 D709 CD 5E D2 CALL CONVFST ;convert the first file name that follows +1137 D70C 21 F0 D7 LD HL,CHGDRV ;command name. +1138 D70F E5 PUSH HL +1139 D710 7E LD A,(HL) ;set drive code in default fcb. +1140 D711 32 CD D7 LD (FCB),A +1141 D714 3E 10 LD A,16 ;put second name 16 bytes later. +1142 D716 CD 60 D2 CALL CONVERT ;convert second file name. +1143 D719 E1 POP HL +1144 D71A 7E LD A,(HL) ;and set the drive for this second file. +1145 D71B 32 DD D7 LD (FCB+16),A +1146 D71E AF XOR A ;clear record byte in fcb. +1147 D71F 32 ED D7 LD (FCB+32),A +1148 D722 11 5C 00 LD DE,TFCB ;move it into place at(005Ch). +1149 D725 21 CD D7 LD HL,FCB +1150 D728 06 21 LD B,33 +1151 D72A CD 42 D4 CALL HL2DE +1152 D72D 21 08 D0 LD HL,INBUFF+2 ;now move the remainder of the input +1153 D730 7E UNKWN5: LD A,(HL) ;line down to (0080h). Look for a non blank. +1154 D731 B7 OR A ;or a null. +1155 D732 CA 3E D7 JP Z,UNKWN6 +1156 D735 FE 20 CP ' ' +1157 D737 CA 3E D7 JP Z,UNKWN6 +1158 D73A 23 INC HL +1159 D73B C3 30 D7 JP UNKWN5 +1160 D73E ; +1161 D73E ; Do the line move now. It ends in a null byte. +1162 D73E ; +1163 D73E 06 00 UNKWN6: LD B,0 ;keep a character count. +1164 D740 11 81 00 LD DE,TBUFF+1 ;data gets put here. +1165 D743 7E UNKWN7: LD A,(HL) ;move it now. +1166 D744 12 LD (DE),A +1167 D745 B7 OR A +1168 D746 CA 4F D7 JP Z,UNKWN8 +1169 D749 04 INC B +1170 D74A 23 INC HL +1171 D74B 13 INC DE +1172 D74C C3 43 D7 JP UNKWN7 +1173 D74F 78 UNKWN8: LD A,B ;now store the character count. +1174 D750 32 80 00 LD (TBUFF),A +1175 D753 CD 98 D0 CALL CRLF ;clean up the screen. +1176 D756 CD D5 D1 CALL STDDMA ;set standard transfer address. +1177 D759 CD 1A D1 CALL SETCDRV ;reset current drive. +1178 D75C CD 00 01 CALL TBASE ;and execute the program. +1179 D75F ; +1180 D75F ; Transiant programs return here (or reboot). +1181 D75F ; +1182 D75F 31 AB D7 LD SP,BATCH ;set stack first off. +1183 D762 CD 29 D1 CALL MOVECD ;move current drive into place (TDRIVE). +1184 D765 CD BD D0 CALL DSKSEL ;and reselect it. +1185 D768 C3 82 D3 JP CMMND1 ;back to comand mode. +1186 D76B ; +1187 D76B ; Get here if some error occured. +1188 D76B ; +1189 D76B CD 66 D4 UNKWN9: CALL RESETDR ;inproper format. +1190 D76E C3 09 D2 JP SYNERR +1191 D771 01 7A D7 UNKWN0: LD BC,BADLOAD ;read error or won't fit. +1192 D774 CD A7 D0 CALL PLINE +1193 D777 C3 86 D7 JP GETBACK +1194 D77A 426164206C6FBADLOAD:.TEXT "Bad load" +1194 D780 6164 +1195 D782 00 .DB 0 +1196 D783 43 4F 4D COMFILE:.TEXT "COM" ;command file extension. +1197 D786 ; +1198 D786 ; Get here to return to command level. We will reset the +1199 D786 ; previous active drive and then either return to command +1200 D786 ; level directly or print error message and then return. +1201 D786 ; +1202 D786 CD 66 D4 GETBACK:CALL RESETDR ;reset previous drive. +1203 D789 CD 5E D2 GETBACK1: CALL CONVFST ;convert first name in (FCB). +1204 D78C 3A CE D7 LD A,(FCB+1) ;if this was just a drive change request, +1205 D78F D6 20 SUB ' ' ;make sure it was valid. +1206 D791 21 F0 D7 LD HL,CHGDRV +1207 D794 B6 OR (HL) +1208 D795 C2 09 D2 JP NZ,SYNERR +1209 D798 C3 82 D3 JP CMMND1 ;ok, return to command level. +1210 D79B ; +1211 D79B ; ccp stack area. +1212 D79B ; +1213 D79B 000000000000 .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1213 D7A1 00000000000000000000 +1214 D7AB CCPSTACK .EQU $ ;end of ccp stack area. +1215 D7AB ; +1216 D7AB ; Batch (or SUBMIT) processing information storage. +1217 D7AB ; +1218 D7AB 00 BATCH: .DB 0 ;batch mode flag (0=not active). +1219 D7AC 00 BATCHFCB: .DB 0, +1220 D7AD 242424202020 .TEXT "$$$ SUB" +1220 D7B3 2020535542 +1221 D7B8 000000000000 .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1221 D7BE 000000000000000000000000000000 +1222 D7CD ; +1223 D7CD ; File control block setup by the CCP. +1224 D7CD ; +1225 D7CD 00 FCB: .DB 0 +1226 D7CE 202020202020 .TEXT " " +1226 D7D4 2020202020 +1227 D7D9 0000000000 .DB 0,0,0,0,0 +1228 D7DE 202020202020 .TEXT " " +1228 D7E4 2020202020 +1229 D7E9 0000000000 .DB 0,0,0,0,0 +1230 D7EE 00 RTNCODE:.DB 0 ;status returned from bdos call. +1231 D7EF 00 CDRIVE: .DB 0 ;currently active drive. +1232 D7F0 00 CHGDRV: .DB 0 ;change in drives flag (0=no change). +1233 D7F1 00 00 NBYTES: .DW 0 ;byte counter used by TYPE. +1234 D7F3 ; +1235 D7F3 ; Room for expansion? +1236 D7F3 ; +1237 D7F3 000000000000 .DB 0,0,0,0,0,0,0,0,0,0,0,0,0 +1237 D7F9 00000000000000 +1238 D800 ; +1239 D800 ; Note that the following six bytes must match those at +1240 D800 ; (PATTRN1) or cp/m will HALT. Why? +1241 D800 ; +1242 D800 001600000000PATTRN2:.DB 0,22,0,0,0,0 ;(* serial number bytes *). +1243 D806 ; +1244 D806 ;************************************************************** +1245 D806 ;* +1246 D806 ;* B D O S E N T R Y +1247 D806 ;* +1248 D806 ;************************************************************** +1249 D806 ; +1250 D806 C3 11 D8 FBASE: JP FBASE1 +1251 D809 ; +1252 D809 ; Bdos error table. +1253 D809 ; +1254 D809 99 D8 BADSCTR:.DW ERROR1 ;bad sector on read or write. +1255 D80B A5 D8 BADSLCT:.DW ERROR2 ;bad disk select. +1256 D80D AB D8 RODISK: .DW ERROR3 ;disk is read only. +1257 D80F B1 D8 ROFILE: .DW ERROR4 ;file is read only. +1258 D811 ; +1259 D811 ; Entry into bdos. (DE) or (E) are the parameters passed. The +1260 D811 ; function number desired is in register (C). +1261 D811 ; +1262 D811 EB FBASE1: EX DE,HL ;save the (DE) parameters. +1263 D812 22 43 DB LD (PARAMS),HL +1264 D815 EB EX DE,HL +1265 D816 7B LD A,E ;and save register (E) in particular. +1266 D817 32 D6 E5 LD (EPARAM),A +1267 D81A 21 00 00 LD HL,0 +1268 D81D 22 45 DB LD (STATUS),HL ;clear return status. +1269 D820 39 ADD HL,SP +1270 D821 22 0F DB LD (USRSTACK),HL ;save users stack pointer. +1271 D824 31 41 DB LD SP,STKAREA ;and set our own. +1272 D827 AF XOR A ;clear auto select storage space. +1273 D828 32 E0 E5 LD (AUTOFLAG),A +1274 D82B 32 DE E5 LD (AUTO),A +1275 D82E 21 74 E5 LD HL,GOBACK ;set return address. +1276 D831 E5 PUSH HL +1277 D832 79 LD A,C ;get function number. +1278 D833 FE 29 CP NFUNCTS ;valid function number? +1279 D835 D0 RET NC +1280 D836 4B LD C,E ;keep single register function here. +1281 D837 21 47 D8 LD HL,FUNCTNS ;now look thru the function table. +1282 D83A 5F LD E,A +1283 D83B 16 00 LD D,0 ;(DE)=function number. +1284 D83D 19 ADD HL,DE +1285 D83E 19 ADD HL,DE ;(HL)=(start of table)+2*(function number). +1286 D83F 5E LD E,(HL) +1287 D840 23 INC HL +1288 D841 56 LD D,(HL) ;now (DE)=address for this function. +1289 D842 2A 43 DB LD HL,(PARAMS) ;retrieve parameters. +1290 D845 EB EX DE,HL ;now (DE) has the original parameters. +1291 D846 E9 JP (HL) ;execute desired function. +1292 D847 ; +1293 D847 ; BDOS function jump table. +1294 D847 ; +1295 D847 NFUNCTS .EQU 41 ;number of functions in followin table. +1296 D847 ; +1297 D847 03E6C8DA90D9FUNCTNS:.DW WBOOT,GETCON,OUTCON,GETRDR,PUNCH,LIST,DIRCIO,GETIOB +1297 D84D CEDA12E60FE6D4DAEDDA +1298 D857 F3DAF8DAE1D9 .DW SETIOB,PRTSTR,RDBUFF,GETCSTS,GETVER,RSTDSK,SETDSK,OPENFIL +1298 D85D FEDA7EE483E445E49CE4 +1299 D867 A5E4ABE4C8E4 .DW CLOSEFIL,GETFST,GETNXT,DELFILE,READSEQ,WRTSEQ,FCREATE +1299 D86D D7E4E0E4E6E4ECE4 +1300 D875 F5E4FEE404E5 .DW RENFILE,GETLOG,GETCRNT,PUTDMA,GETALOC,WRTPRTD,GETROV,SETATTR +1300 D87B 0AE511E52CDD17E51DE5 +1301 D885 26E52DE541E5 .DW GETPARM,GETUSER,RDRANDOM,WTRANDOM,FILESIZE,SETRAN,LOGOFF,RTN +1301 D88B 47E54DE50EE453E504DB +1302 D895 04 DB 9B E5 .DW RTN,WTSPECL +1303 D899 ; +1304 D899 ; Bdos error message section. +1305 D899 ; +1306 D899 21 CA D8 ERROR1: LD HL,BADSEC ;bad sector message. +1307 D89C CD E5 D8 CALL PRTERR ;print it and get a 1 char responce. +1308 D89F FE 03 CP CNTRLC ;re-boot request (control-c)? +1309 D8A1 CA 00 00 JP Z,0 ;yes. +1310 D8A4 C9 RET ;no, return to retry i/o function. +1311 D8A5 ; +1312 D8A5 21 D5 D8 ERROR2: LD HL,BADSEL ;bad drive selected. +1313 D8A8 C3 B4 D8 JP ERROR5 +1314 D8AB ; +1315 D8AB 21 E1 D8 ERROR3: LD HL,DISKRO ;disk is read only. +1316 D8AE C3 B4 D8 JP ERROR5 +1317 D8B1 ; +1318 D8B1 21 DC D8 ERROR4: LD HL,FILERO ;file is read only. +1319 D8B4 ; +1320 D8B4 CD E5 D8 ERROR5: CALL PRTERR +1321 D8B7 C3 00 00 JP 0 ;always reboot on these errors. +1322 D8BA ; +1323 D8BA 42646F732045BDOSERR:.TEXT "Bdos Err On " +1323 D8C0 7272204F6E20 +1324 D8C6 20 3A 20 24 BDOSDRV:.TEXT " : $" +1325 D8CA 426164205365BADSEC: .TEXT "Bad Sector$" +1325 D8D0 63746F7224 +1326 D8D5 53656C656374BADSEL: .TEXT "Select$" +1326 D8DB 24 +1327 D8DC 46696C6520 FILERO: .TEXT "File " +1328 D8E1 52 2F 4F 24 DISKRO: .TEXT "R/O$" +1329 D8E5 ; +1330 D8E5 ; Print bdos error message. +1331 D8E5 ; +1332 D8E5 E5 PRTERR: PUSH HL ;save second message pointer. +1333 D8E6 CD C9 D9 CALL OUTCRLF ;send (cr)(lf). +1334 D8E9 3A 42 DB LD A,(ACTIVE) ;get active drive. +1335 D8EC C6 41 ADD A,'A' ;make ascii. +1336 D8EE 32 C6 D8 LD (BDOSDRV),A ;and put in message. +1337 D8F1 01 BA D8 LD BC,BDOSERR ;and print it. +1338 D8F4 CD D3 D9 CALL PRTMESG +1339 D8F7 C1 POP BC ;print second message line now. +1340 D8F8 CD D3 D9 CALL PRTMESG +1341 D8FB ; +1342 D8FB ; Get an input character. We will check our 1 character +1343 D8FB ; buffer first. This may be set by the console status routine. +1344 D8FB ; +1345 D8FB 21 0E DB GETCHAR:LD HL,CHARBUF ;check character buffer. +1346 D8FE 7E LD A,(HL) ;anything present already? +1347 D8FF 36 00 LD (HL),0 ;...either case clear it. +1348 D901 B7 OR A +1349 D902 C0 RET NZ ;yes, use it. +1350 D903 C3 09 E6 JP CONIN ;nope, go get a character responce. +1351 D906 ; +1352 D906 ; Input and echo a character. +1353 D906 ; +1354 D906 CD FB D8 GETECHO:CALL GETCHAR ;input a character. +1355 D909 CD 14 D9 CALL CHKCHAR ;carriage control? +1356 D90C D8 RET C ;no, a regular control char so don't echo. +1357 D90D F5 PUSH AF ;ok, save character now. +1358 D90E 4F LD C,A +1359 D90F CD 90 D9 CALL OUTCON ;and echo it. +1360 D912 F1 POP AF ;get character and return. +1361 D913 C9 RET +1362 D914 ; +1363 D914 ; Check character in (A). Set the zero flag on a carriage +1364 D914 ; control character and the carry flag on any other control +1365 D914 ; character. +1366 D914 ; +1367 D914 FE 0D CHKCHAR:CP CR ;check for carriage return, line feed, backspace, +1368 D916 C8 RET Z ;or a tab. +1369 D917 FE 0A CP LF +1370 D919 C8 RET Z +1371 D91A FE 09 CP TAB +1372 D91C C8 RET Z +1373 D91D FE 08 CP BS +1374 D91F C8 RET Z +1375 D920 FE 20 CP ' ' ;other control char? Set carry flag. +1376 D922 C9 RET +1377 D923 ; +1378 D923 ; Check the console during output. Halt on a control-s, then +1379 D923 ; reboot on a control-c. If anything else is ready, clear the +1380 D923 ; zero flag and return (the calling routine may want to do +1381 D923 ; something). +1382 D923 ; +1383 D923 3A 0E DB CKCONSOL: LD A,(CHARBUF) ;check buffer. +1384 D926 B7 OR A ;if anything, just return without checking. +1385 D927 C2 45 D9 JP NZ,CKCON2 +1386 D92A CD 06 E6 CALL CONST ;nothing in buffer. Check console. +1387 D92D E6 01 AND 01H ;look at bit 0. +1388 D92F C8 RET Z ;return if nothing. +1389 D930 CD 09 E6 CALL CONIN ;ok, get it. +1390 D933 FE 13 CP CNTRLS ;if not control-s, return with zero cleared. +1391 D935 C2 42 D9 JP NZ,CKCON1 +1392 D938 CD 09 E6 CALL CONIN ;halt processing until another char +1393 D93B FE 03 CP CNTRLC ;is typed. Control-c? +1394 D93D CA 00 00 JP Z,0 ;yes, reboot now. +1395 D940 AF XOR A ;no, just pretend nothing was ever ready. +1396 D941 C9 RET +1397 D942 32 0E DB CKCON1: LD (CHARBUF),A ;save character in buffer for later processing. +1398 D945 3E 01 CKCON2: LD A,1 ;set (A) to non zero to mean something is ready. +1399 D947 C9 RET +1400 D948 ; +1401 D948 ; Output (C) to the screen. If the printer flip-flop flag +1402 D948 ; is set, we will send character to printer also. The console +1403 D948 ; will be checked in the process. +1404 D948 ; +1405 D948 3A 0A DB OUTCHAR:LD A,(OUTFLAG) ;check output flag. +1406 D94B B7 OR A ;anything and we won't generate output. +1407 D94C C2 62 D9 JP NZ,OUTCHR1 +1408 D94F C5 PUSH BC +1409 D950 CD 23 D9 CALL CKCONSOL ;check console (we don't care whats there). +1410 D953 C1 POP BC +1411 D954 C5 PUSH BC +1412 D955 CD 0C E6 CALL CONOUT ;output (C) to the screen. +1413 D958 C1 POP BC +1414 D959 C5 PUSH BC +1415 D95A 3A 0D DB LD A,(PRTFLAG) ;check printer flip-flop flag. +1416 D95D B7 OR A +1417 D95E C4 0F E6 CALL NZ,LIST ;print it also if non-zero. +1418 D961 C1 POP BC +1419 D962 79 OUTCHR1:LD A,C ;update cursors position. +1420 D963 21 0C DB LD HL,CURPOS +1421 D966 FE 7F CP DEL ;rubouts don't do anything here. +1422 D968 C8 RET Z +1423 D969 34 INC (HL) ;bump line pointer. +1424 D96A FE 20 CP ' ' ;and return if a normal character. +1425 D96C D0 RET NC +1426 D96D 35 DEC (HL) ;restore and check for the start of the line. +1427 D96E 7E LD A,(HL) +1428 D96F B7 OR A +1429 D970 C8 RET Z ;ingnore control characters at the start of the line. +1430 D971 79 LD A,C +1431 D972 FE 08 CP BS ;is it a backspace? +1432 D974 C2 79 D9 JP NZ,OUTCHR2 +1433 D977 35 DEC (HL) ;yes, backup pointer. +1434 D978 C9 RET +1435 D979 FE 0A OUTCHR2:CP LF ;is it a line feed? +1436 D97B C0 RET NZ ;ignore anything else. +1437 D97C 36 00 LD (HL),0 ;reset pointer to start of line. +1438 D97E C9 RET +1439 D97F ; +1440 D97F ; Output (A) to the screen. If it is a control character +1441 D97F ; (other than carriage control), use ^x format. +1442 D97F ; +1443 D97F 79 SHOWIT: LD A,C +1444 D980 CD 14 D9 CALL CHKCHAR ;check character. +1445 D983 D2 90 D9 JP NC,OUTCON ;not a control, use normal output. +1446 D986 F5 PUSH AF +1447 D987 0E 5E LD C,'^' ;for a control character, preceed it with '^'. +1448 D989 CD 48 D9 CALL OUTCHAR +1449 D98C F1 POP AF +1450 D98D F6 40 OR '@' ;and then use the letter equivelant. +1451 D98F 4F LD C,A +1452 D990 ; +1453 D990 ; Function to output (C) to the console device and expand tabs +1454 D990 ; if necessary. +1455 D990 ; +1456 D990 79 OUTCON: LD A,C +1457 D991 FE 09 CP TAB ;is it a tab? +1458 D993 C2 48 D9 JP NZ,OUTCHAR ;use regular output. +1459 D996 0E 20 OUTCON1:LD C,' ' ;yes it is, use spaces instead. +1460 D998 CD 48 D9 CALL OUTCHAR +1461 D99B 3A 0C DB LD A,(CURPOS) ;go until the cursor is at a multiple of 8 +1462 D99E +1463 D99E E6 07 AND 07H ;position. +1464 D9A0 C2 96 D9 JP NZ,OUTCON1 +1465 D9A3 C9 RET +1466 D9A4 ; +1467 D9A4 ; Echo a backspace character. Erase the prevoius character +1468 D9A4 ; on the screen. +1469 D9A4 ; +1470 D9A4 CD AC D9 BACKUP: CALL BACKUP1 ;backup the screen 1 place. +1471 D9A7 0E 20 LD C,' ' ;then blank that character. +1472 D9A9 CD 0C E6 CALL CONOUT +1473 D9AC 0E 08 BACKUP1:LD C,BS ;then back space once more. +1474 D9AE C3 0C E6 JP CONOUT +1475 D9B1 ; +1476 D9B1 ; Signal a deleted line. Print a '#' at the end and start +1477 D9B1 ; over. +1478 D9B1 ; +1479 D9B1 0E 23 NEWLINE:LD C,'#' +1480 D9B3 CD 48 D9 CALL OUTCHAR ;print this. +1481 D9B6 CD C9 D9 CALL OUTCRLF ;start new line. +1482 D9B9 3A 0C DB NEWLN1: LD A,(CURPOS) ;move the cursor to the starting position. +1483 D9BC 21 0B DB LD HL,STARTING +1484 D9BF BE CP (HL) +1485 D9C0 D0 RET NC ;there yet? +1486 D9C1 0E 20 LD C,' ' +1487 D9C3 CD 48 D9 CALL OUTCHAR ;nope, keep going. +1488 D9C6 C3 B9 D9 JP NEWLN1 +1489 D9C9 ; +1490 D9C9 ; Output a (cr) (lf) to the console device (screen). +1491 D9C9 ; +1492 D9C9 0E 0D OUTCRLF:LD C,CR +1493 D9CB CD 48 D9 CALL OUTCHAR +1494 D9CE 0E 0A LD C,LF +1495 D9D0 C3 48 D9 JP OUTCHAR +1496 D9D3 ; +1497 D9D3 ; Print message pointed to by (BC). It will end with a '$'. +1498 D9D3 ; +1499 D9D3 0A PRTMESG:LD A,(BC) ;check for terminating character. +1500 D9D4 FE 24 CP '$' +1501 D9D6 C8 RET Z +1502 D9D7 03 INC BC +1503 D9D8 C5 PUSH BC ;otherwise, bump pointer and print it. +1504 D9D9 4F LD C,A +1505 D9DA CD 90 D9 CALL OUTCON +1506 D9DD C1 POP BC +1507 D9DE C3 D3 D9 JP PRTMESG +1508 D9E1 ; +1509 D9E1 ; Function to execute a buffered read. +1510 D9E1 ; +1511 D9E1 3A 0C DB RDBUFF: LD A,(CURPOS) ;use present location as starting one. +1512 D9E4 32 0B DB LD (STARTING),A +1513 D9E7 2A 43 DB LD HL,(PARAMS) ;get the maximum buffer space. +1514 D9EA 4E LD C,(HL) +1515 D9EB 23 INC HL ;point to first available space. +1516 D9EC E5 PUSH HL ;and save. +1517 D9ED 06 00 LD B,0 ;keep a character count. +1518 D9EF C5 RDBUF1: PUSH BC +1519 D9F0 E5 PUSH HL +1520 D9F1 CD FB D8 RDBUF2: CALL GETCHAR ;get the next input character. +1521 D9F4 E6 7F AND 7FH ;strip bit 7. +1522 D9F6 E1 POP HL ;reset registers. +1523 D9F7 C1 POP BC +1524 D9F8 FE 0D CP CR ;en of the line? +1525 D9FA CA C1 DA JP Z,RDBUF17 +1526 D9FD FE 0A CP LF +1527 D9FF CA C1 DA JP Z,RDBUF17 +1528 DA02 FE 08 CP BS ;how about a backspace? +1529 DA04 C2 16 DA JP NZ,RDBUF3 +1530 DA07 78 LD A,B ;yes, but ignore at the beginning of the line. +1531 DA08 B7 OR A +1532 DA09 CA EF D9 JP Z,RDBUF1 +1533 DA0C 05 DEC B ;ok, update counter. +1534 DA0D 3A 0C DB LD A,(CURPOS) ;if we backspace to the start of the line, +1535 DA10 32 0A DB LD (OUTFLAG),A ;treat as a cancel (control-x). +1536 DA13 C3 70 DA JP RDBUF10 +1537 DA16 FE 7F RDBUF3: CP DEL ;user typed a rubout? +1538 DA18 C2 26 DA JP NZ,RDBUF4 +1539 DA1B 78 LD A,B ;ignore at the start of the line. +1540 DA1C B7 OR A +1541 DA1D CA EF D9 JP Z,RDBUF1 +1542 DA20 7E LD A,(HL) ;ok, echo the prevoius character. +1543 DA21 05 DEC B ;and reset pointers (counters). +1544 DA22 2B DEC HL +1545 DA23 C3 A9 DA JP RDBUF15 +1546 DA26 FE 05 RDBUF4: CP CNTRLE ;physical end of line? +1547 DA28 C2 37 DA JP NZ,RDBUF5 +1548 DA2B C5 PUSH BC ;yes, do it. +1549 DA2C E5 PUSH HL +1550 DA2D CD C9 D9 CALL OUTCRLF +1551 DA30 AF XOR A ;and update starting position. +1552 DA31 32 0B DB LD (STARTING),A +1553 DA34 C3 F1 D9 JP RDBUF2 +1554 DA37 FE 10 RDBUF5: CP CNTRLP ;control-p? +1555 DA39 C2 48 DA JP NZ,RDBUF6 +1556 DA3C E5 PUSH HL ;yes, flip the print flag filp-flop byte. +1557 DA3D 21 0D DB LD HL,PRTFLAG +1558 DA40 3E 01 LD A,1 ;PRTFLAG=1-PRTFLAG +1559 DA42 96 SUB (HL) +1560 DA43 77 LD (HL),A +1561 DA44 E1 POP HL +1562 DA45 C3 EF D9 JP RDBUF1 +1563 DA48 FE 18 RDBUF6: CP CNTRLX ;control-x (cancel)? +1564 DA4A C2 5F DA JP NZ,RDBUF8 +1565 DA4D E1 POP HL +1566 DA4E 3A 0B DB RDBUF7: LD A,(STARTING) ;yes, backup the cursor to here. +1567 DA51 21 0C DB LD HL,CURPOS +1568 DA54 BE CP (HL) +1569 DA55 D2 E1 D9 JP NC,RDBUFF ;done yet? +1570 DA58 35 DEC (HL) ;no, decrement pointer and output back up one space. +1571 DA59 CD A4 D9 CALL BACKUP +1572 DA5C C3 4E DA JP RDBUF7 +1573 DA5F FE 15 RDBUF8: CP CNTRLU ;cntrol-u (cancel line)? +1574 DA61 C2 6B DA JP NZ,RDBUF9 +1575 DA64 CD B1 D9 CALL NEWLINE ;start a new line. +1576 DA67 E1 POP HL +1577 DA68 C3 E1 D9 JP RDBUFF +1578 DA6B FE 12 RDBUF9: CP CNTRLR ;control-r? +1579 DA6D C2 A6 DA JP NZ,RDBUF14 +1580 DA70 C5 RDBUF10:PUSH BC ;yes, start a new line and retype the old one. +1581 DA71 CD B1 D9 CALL NEWLINE +1582 DA74 C1 POP BC +1583 DA75 E1 POP HL +1584 DA76 E5 PUSH HL +1585 DA77 C5 PUSH BC +1586 DA78 78 RDBUF11:LD A,B ;done whole line yet? +1587 DA79 B7 OR A +1588 DA7A CA 8A DA JP Z,RDBUF12 +1589 DA7D 23 INC HL ;nope, get next character. +1590 DA7E 4E LD C,(HL) +1591 DA7F 05 DEC B ;count it. +1592 DA80 C5 PUSH BC +1593 DA81 E5 PUSH HL +1594 DA82 CD 7F D9 CALL SHOWIT ;and display it. +1595 DA85 E1 POP HL +1596 DA86 C1 POP BC +1597 DA87 C3 78 DA JP RDBUF11 +1598 DA8A E5 RDBUF12:PUSH HL ;done with line. If we were displaying +1599 DA8B 3A 0A DB LD A,(OUTFLAG) ;then update cursor position. +1600 DA8E B7 OR A +1601 DA8F CA F1 D9 JP Z,RDBUF2 +1602 DA92 21 0C DB LD HL,CURPOS ;because this line is shorter, we must +1603 DA95 96 SUB (HL) ;back up the cursor (not the screen however) +1604 DA96 32 0A DB LD (OUTFLAG),A ;some number of positions. +1605 DA99 CD A4 D9 RDBUF13:CALL BACKUP ;note that as long as (OUTFLAG) is non +1606 DA9C 21 0A DB LD HL,OUTFLAG ;zero, the screen will not be changed. +1607 DA9F 35 DEC (HL) +1608 DAA0 C2 99 DA JP NZ,RDBUF13 +1609 DAA3 C3 F1 D9 JP RDBUF2 ;now just get the next character. +1610 DAA6 ; +1611 DAA6 ; Just a normal character, put this in our buffer and echo. +1612 DAA6 ; +1613 DAA6 23 RDBUF14:INC HL +1614 DAA7 77 LD (HL),A ;store character. +1615 DAA8 04 INC B ;and count it. +1616 DAA9 C5 RDBUF15:PUSH BC +1617 DAAA E5 PUSH HL +1618 DAAB 4F LD C,A ;echo it now. +1619 DAAC CD 7F D9 CALL SHOWIT +1620 DAAF E1 POP HL +1621 DAB0 C1 POP BC +1622 DAB1 7E LD A,(HL) ;was it an abort request? +1623 DAB2 FE 03 CP CNTRLC ;control-c abort? +1624 DAB4 78 LD A,B +1625 DAB5 C2 BD DA JP NZ,RDBUF16 +1626 DAB8 FE 01 CP 1 ;only if at start of line. +1627 DABA CA 00 00 JP Z,0 +1628 DABD B9 RDBUF16:CP C ;nope, have we filled the buffer? +1629 DABE DA EF D9 JP C,RDBUF1 +1630 DAC1 E1 RDBUF17:POP HL ;yes end the line and return. +1631 DAC2 70 LD (HL),B +1632 DAC3 0E 0D LD C,CR +1633 DAC5 C3 48 D9 JP OUTCHAR ;output (cr) and return. +1634 DAC8 ; +1635 DAC8 ; Function to get a character from the console device. +1636 DAC8 ; +1637 DAC8 CD 06 D9 GETCON: CALL GETECHO ;get and echo. +1638 DACB C3 01 DB JP SETSTAT ;save status and return. +1639 DACE ; +1640 DACE ; Function to get a character from the tape reader device. +1641 DACE ; +1642 DACE CD 15 E6 GETRDR: CALL READER ;get a character from reader, set status and return. +1643 DAD1 C3 01 DB JP SETSTAT +1644 DAD4 ; +1645 DAD4 ; Function to perform direct console i/o. If (C) contains (FF) +1646 DAD4 ; then this is an input request. If (C) contains (FE) then +1647 DAD4 ; this is a status request. Otherwise we are to output (C). +1648 DAD4 ; +1649 DAD4 79 DIRCIO: LD A,C ;test for (FF). +1650 DAD5 3C INC A +1651 DAD6 CA E0 DA JP Z,DIRC1 +1652 DAD9 3C INC A ;test for (FE). +1653 DADA CA 06 E6 JP Z,CONST +1654 DADD C3 0C E6 JP CONOUT ;just output (C). +1655 DAE0 CD 06 E6 DIRC1: CALL CONST ;this is an input request. +1656 DAE3 B7 OR A +1657 DAE4 CA 91 E5 JP Z,GOBACK1 ;not ready? Just return (directly). +1658 DAE7 CD 09 E6 CALL CONIN ;yes, get character. +1659 DAEA C3 01 DB JP SETSTAT ;set status and return. +1660 DAED ; +1661 DAED ; Function to return the i/o byte. +1662 DAED ; +1663 DAED 3A 03 00 GETIOB: LD A,(IOBYTE) +1664 DAF0 C3 01 DB JP SETSTAT +1665 DAF3 ; +1666 DAF3 ; Function to set the i/o byte. +1667 DAF3 ; +1668 DAF3 21 03 00 SETIOB: LD HL,IOBYTE +1669 DAF6 71 LD (HL),C +1670 DAF7 C9 RET +1671 DAF8 ; +1672 DAF8 ; Function to print the character string pointed to by (DE) +1673 DAF8 ; on the console device. The string ends with a '$'. +1674 DAF8 ; +1675 DAF8 EB PRTSTR: EX DE,HL +1676 DAF9 4D LD C,L +1677 DAFA 44 LD B,H ;now (BC) points to it. +1678 DAFB C3 D3 D9 JP PRTMESG +1679 DAFE ; +1680 DAFE ; Function to interigate the console device. +1681 DAFE ; +1682 DAFE CD 23 D9 GETCSTS:CALL CKCONSOL +1683 DB01 ; +1684 DB01 ; Get here to set the status and return to the cleanup +1685 DB01 ; section. Then back to the user. +1686 DB01 ; +1687 DB01 32 45 DB SETSTAT:LD (STATUS),A +1688 DB04 C9 RTN: RET +1689 DB05 ; +1690 DB05 ; Set the status to 1 (read or write error code). +1691 DB05 ; +1692 DB05 3E 01 IOERR1: LD A,1 +1693 DB07 C3 01 DB JP SETSTAT +1694 DB0A ; +1695 DB0A 00 OUTFLAG:.DB 0 ;output flag (non zero means no output). +1696 DB0B 02 STARTING: .DB 2 ;starting position for cursor. +1697 DB0C 00 CURPOS: .DB 0 ;cursor position (0=start of line). +1698 DB0D 00 PRTFLAG:.DB 0 ;printer flag (control-p toggle). List if non zero. +1699 DB0E 00 CHARBUF:.DB 0 ;single input character buffer. +1700 DB0F ; +1701 DB0F ; Stack area for BDOS calls. +1702 DB0F ; +1703 DB0F 00 00 USRSTACK: .DW 0 ;save users stack pointer here. +1704 DB11 ; +1705 DB11 000000000000 .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1705 DB17 000000000000000000000000000000000000 +1706 DB29 000000000000 .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1706 DB2F 000000000000000000000000000000000000 +1707 DB41 STKAREA .EQU $ ;end of stack area. +1708 DB41 ; +1709 DB41 00 USERNO: .DB 0 ;current user number. +1710 DB42 00 ACTIVE: .DB 0 ;currently active drive. +1711 DB43 00 00 PARAMS: .DW 0 ;save (DE) parameters here on entry. +1712 DB45 00 00 STATUS: .DW 0 ;status returned from bdos function. +1713 DB47 ; +1714 DB47 ; Select error occured, jump to error routine. +1715 DB47 ; +1716 DB47 21 0B D8 SLCTERR:LD HL,BADSLCT +1717 DB4A ; +1718 DB4A ; Jump to (HL) indirectly. +1719 DB4A ; +1720 DB4A 5E JUMPHL: LD E,(HL) +1721 DB4B 23 INC HL +1722 DB4C 56 LD D,(HL) ;now (DE) contain the desired address. +1723 DB4D EB EX DE,HL +1724 DB4E E9 JP (HL) +1725 DB4F ; +1726 DB4F ; Block move. (DE) to (HL), (C) bytes total. +1727 DB4F ; +1728 DB4F 0C DE2HL: INC C ;is count down to zero? +1729 DB50 0D DE2HL1: DEC C +1730 DB51 C8 RET Z ;yes, we are done. +1731 DB52 1A LD A,(DE) ;no, move one more byte. +1732 DB53 77 LD (HL),A +1733 DB54 13 INC DE +1734 DB55 23 INC HL +1735 DB56 C3 50 DB JP DE2HL1 ;and repeat. +1736 DB59 ; +1737 DB59 ; Select the desired drive. +1738 DB59 ; +1739 DB59 3A 42 DB SELECT: LD A,(ACTIVE) ;get active disk. +1740 DB5C 4F LD C,A +1741 DB5D CD 1B E6 CALL SELDSK ;select it. +1742 DB60 7C LD A,H ;valid drive? +1743 DB61 B5 OR L ;valid drive? +1744 DB62 C8 RET Z ;return if not. +1745 DB63 ; +1746 DB63 ; Here, the BIOS returned the address of the parameter block +1747 DB63 ; in (HL). We will extract the necessary pointers and save them. +1748 DB63 ; +1749 DB63 5E LD E,(HL) ;yes, get address of translation table into (DE). +1750 DB64 23 INC HL +1751 DB65 56 LD D,(HL) +1752 DB66 23 INC HL +1753 DB67 22 B3 E5 LD (SCRATCH1),HL ;save pointers to scratch areas. +1754 DB6A 23 INC HL +1755 DB6B 23 INC HL +1756 DB6C 22 B5 E5 LD (SCRATCH2),HL ;ditto. +1757 DB6F 23 INC HL +1758 DB70 23 INC HL +1759 DB71 22 B7 E5 LD (SCRATCH3),HL ;ditto. +1760 DB74 23 INC HL +1761 DB75 23 INC HL +1762 DB76 EB EX DE,HL ;now save the translation table address. +1763 DB77 22 D0 E5 LD (XLATE),HL +1764 DB7A 21 B9 E5 LD HL,DIRBUF ;put the next 8 bytes here. +1765 DB7D 0E 08 LD C,8 ;they consist of the directory buffer +1766 DB7F CD 4F DB CALL DE2HL ;pointer, parameter block pointer, +1767 DB82 2A BB E5 LD HL,(DISKPB) ;check and allocation vectors. +1768 DB85 EB EX DE,HL +1769 DB86 21 C1 E5 LD HL,SECTORS ;move parameter block into our ram. +1770 DB89 0E 0F LD C,15 ;it is 15 bytes long. +1771 DB8B CD 4F DB CALL DE2HL +1772 DB8E 2A C6 E5 LD HL,(DSKSIZE) ;check disk size. +1773 DB91 7C LD A,H ;more than 256 blocks on this? +1774 DB92 21 DD E5 LD HL,BIGDISK +1775 DB95 36 FF LD (HL),0FFH ;set to samll. +1776 DB97 B7 OR A +1777 DB98 CA 9D DB JP Z,SELECT1 +1778 DB9B 36 00 LD (HL),0 ;wrong, set to large. +1779 DB9D 3E FF SELECT1:LD A,0FFH ;clear the zero flag. +1780 DB9F B7 OR A +1781 DBA0 C9 RET +1782 DBA1 ; +1783 DBA1 ; Routine to home the disk track head and clear pointers. +1784 DBA1 ; +1785 DBA1 CD 18 E6 HOMEDRV:CALL HOME ;home the head. +1786 DBA4 AF XOR A +1787 DBA5 2A B5 E5 LD HL,(SCRATCH2) ;set our track pointer also. +1788 DBA8 77 LD (HL),A +1789 DBA9 23 INC HL +1790 DBAA 77 LD (HL),A +1791 DBAB 2A B7 E5 LD HL,(SCRATCH3) ;and our sector pointer. +1792 DBAE 77 LD (HL),A +1793 DBAF 23 INC HL +1794 DBB0 77 LD (HL),A +1795 DBB1 C9 RET +1796 DBB2 ; +1797 DBB2 ; Do the actual disk read and check the error return status. +1798 DBB2 ; +1799 DBB2 CD 27 E6 DOREAD: CALL READ +1800 DBB5 C3 BB DB JP IORET +1801 DBB8 ; +1802 DBB8 ; Do the actual disk write and handle any bios error. +1803 DBB8 ; +1804 DBB8 CD 2A E6 DOWRITE:CALL WRITE +1805 DBBB B7 IORET: OR A +1806 DBBC C8 RET Z ;return unless an error occured. +1807 DBBD 21 09 D8 LD HL,BADSCTR ;bad read/write on this sector. +1808 DBC0 C3 4A DB JP JUMPHL +1809 DBC3 ; +1810 DBC3 ; Routine to select the track and sector that the desired +1811 DBC3 ; block number falls in. +1812 DBC3 ; +1813 DBC3 2A EA E5 TRKSEC: LD HL,(FILEPOS) ;get position of last accessed file +1814 DBC6 0E 02 LD C,2 ;in directory and compute sector #. +1815 DBC8 CD EA DC CALL SHIFTR ;sector #=file-position/4. +1816 DBCB 22 E5 E5 LD (BLKNMBR),HL ;save this as the block number of interest. +1817 DBCE 22 EC E5 LD (CKSUMTBL),HL ;what's it doing here too? +1818 DBD1 ; +1819 DBD1 ; if the sector number has already been set (BLKNMBR), enter +1820 DBD1 ; at this point. +1821 DBD1 ; +1822 DBD1 21 E5 E5 TRKSEC1:LD HL,BLKNMBR +1823 DBD4 4E LD C,(HL) ;move sector number into (BC). +1824 DBD5 23 INC HL +1825 DBD6 46 LD B,(HL) +1826 DBD7 2A B7 E5 LD HL,(SCRATCH3) ;get current sector number and +1827 DBDA 5E LD E,(HL) ;move this into (DE). +1828 DBDB 23 INC HL +1829 DBDC 56 LD D,(HL) +1830 DBDD 2A B5 E5 LD HL,(SCRATCH2) ;get current track number. +1831 DBE0 7E LD A,(HL) ;and this into (HL). +1832 DBE1 23 INC HL +1833 DBE2 66 LD H,(HL) +1834 DBE3 6F LD L,A +1835 DBE4 79 TRKSEC2:LD A,C ;is desired sector before current one? +1836 DBE5 93 SUB E +1837 DBE6 78 LD A,B +1838 DBE7 9A SBC A,D +1839 DBE8 D2 FA DB JP NC,TRKSEC3 +1840 DBEB E5 PUSH HL ;yes, decrement sectors by one track. +1841 DBEC 2A C1 E5 LD HL,(SECTORS) ;get sectors per track. +1842 DBEF 7B LD A,E +1843 DBF0 95 SUB L +1844 DBF1 5F LD E,A +1845 DBF2 7A LD A,D +1846 DBF3 9C SBC A,H +1847 DBF4 57 LD D,A ;now we have backed up one full track. +1848 DBF5 E1 POP HL +1849 DBF6 2B DEC HL ;adjust track counter. +1850 DBF7 C3 E4 DB JP TRKSEC2 +1851 DBFA E5 TRKSEC3:PUSH HL ;desired sector is after current one. +1852 DBFB 2A C1 E5 LD HL,(SECTORS) ;get sectors per track. +1853 DBFE 19 ADD HL,DE ;bump sector pointer to next track. +1854 DBFF DA 0F DC JP C,TRKSEC4 +1855 DC02 79 LD A,C ;is desired sector now before current one? +1856 DC03 95 SUB L +1857 DC04 78 LD A,B +1858 DC05 9C SBC A,H +1859 DC06 DA 0F DC JP C,TRKSEC4 +1860 DC09 EB EX DE,HL ;not yes, increment track counter +1861 DC0A E1 POP HL ;and continue until it is. +1862 DC0B 23 INC HL +1863 DC0C C3 FA DB JP TRKSEC3 +1864 DC0F ; +1865 DC0F ; here we have determined the track number that contains the +1866 DC0F ; desired sector. +1867 DC0F ; +1868 DC0F E1 TRKSEC4:POP HL ;get track number (HL). +1869 DC10 C5 PUSH BC +1870 DC11 D5 PUSH DE +1871 DC12 E5 PUSH HL +1872 DC13 EB EX DE,HL +1873 DC14 2A CE E5 LD HL,(OFFSET) ;adjust for first track offset. +1874 DC17 19 ADD HL,DE +1875 DC18 44 LD B,H +1876 DC19 4D LD C,L +1877 DC1A CD 1E E6 CALL SETTRK ;select this track. +1878 DC1D D1 POP DE ;reset current track pointer. +1879 DC1E 2A B5 E5 LD HL,(SCRATCH2) +1880 DC21 73 LD (HL),E +1881 DC22 23 INC HL +1882 DC23 72 LD (HL),D +1883 DC24 D1 POP DE +1884 DC25 2A B7 E5 LD HL,(SCRATCH3) ;reset the first sector on this track. +1885 DC28 73 LD (HL),E +1886 DC29 23 INC HL +1887 DC2A 72 LD (HL),D +1888 DC2B C1 POP BC +1889 DC2C 79 LD A,C ;now subtract the desired one. +1890 DC2D 93 SUB E ;to make it relative (1-# sectors/track). +1891 DC2E 4F LD C,A +1892 DC2F 78 LD A,B +1893 DC30 9A SBC A,D +1894 DC31 47 LD B,A +1895 DC32 2A D0 E5 LD HL,(XLATE) ;translate this sector according to this table. +1896 DC35 EB EX DE,HL +1897 DC36 CD 30 E6 CALL SECTRN ;let the bios translate it. +1898 DC39 4D LD C,L +1899 DC3A 44 LD B,H +1900 DC3B C3 21 E6 JP SETSEC ;and select it. +1901 DC3E ; +1902 DC3E ; Compute block number from record number (SAVNREC) and +1903 DC3E ; extent number (SAVEXT). +1904 DC3E ; +1905 DC3E 21 C3 E5 GETBLOCK: LD HL,BLKSHFT ;get logical to physical conversion. +1906 DC41 4E LD C,(HL) ;note that this is base 2 log of ratio. +1907 DC42 3A E3 E5 LD A,(SAVNREC) ;get record number. +1908 DC45 B7 GETBLK1:OR A ;compute (A)=(A)/2^BLKSHFT. +1909 DC46 1F RRA +1910 DC47 0D DEC C +1911 DC48 C2 45 DC JP NZ,GETBLK1 +1912 DC4B 47 LD B,A ;save result in (B). +1913 DC4C 3E 08 LD A,8 +1914 DC4E 96 SUB (HL) +1915 DC4F 4F LD C,A ;compute (C)=8-BLKSHFT. +1916 DC50 3A E2 E5 LD A,(SAVEXT) +1917 DC53 0D GETBLK2:DEC C ;compute (A)=SAVEXT*2^(8-BLKSHFT). +1918 DC54 CA 5C DC JP Z,GETBLK3 +1919 DC57 B7 OR A +1920 DC58 17 RLA +1921 DC59 C3 53 DC JP GETBLK2 +1922 DC5C 80 GETBLK3:ADD A,B +1923 DC5D C9 RET +1924 DC5E ; +1925 DC5E ; Routine to extract the (BC) block byte from the fcb pointed +1926 DC5E ; to by (PARAMS). If this is a big-disk, then these are 16 bit +1927 DC5E ; block numbers, else they are 8 bit numbers. +1928 DC5E ; Number is returned in (HL). +1929 DC5E ; +1930 DC5E 2A 43 DB EXTBLK: LD HL,(PARAMS) ;get fcb address. +1931 DC61 11 10 00 LD DE,16 ;block numbers start 16 bytes into fcb. +1932 DC64 19 ADD HL,DE +1933 DC65 09 ADD HL,BC +1934 DC66 3A DD E5 LD A,(BIGDISK) ;are we using a big-disk? +1935 DC69 B7 OR A +1936 DC6A CA 71 DC JP Z,EXTBLK1 +1937 DC6D 6E LD L,(HL) ;no, extract an 8 bit number from the fcb. +1938 DC6E 26 00 LD H,0 +1939 DC70 C9 RET +1940 DC71 09 EXTBLK1:ADD HL,BC ;yes, extract a 16 bit number. +1941 DC72 5E LD E,(HL) +1942 DC73 23 INC HL +1943 DC74 56 LD D,(HL) +1944 DC75 EB EX DE,HL ;return in (HL). +1945 DC76 C9 RET +1946 DC77 ; +1947 DC77 ; Compute block number. +1948 DC77 ; +1949 DC77 CD 3E DC COMBLK: CALL GETBLOCK +1950 DC7A 4F LD C,A +1951 DC7B 06 00 LD B,0 +1952 DC7D CD 5E DC CALL EXTBLK +1953 DC80 22 E5 E5 LD (BLKNMBR),HL +1954 DC83 C9 RET +1955 DC84 ; +1956 DC84 ; Check for a zero block number (unused). +1957 DC84 ; +1958 DC84 2A E5 E5 CHKBLK: LD HL,(BLKNMBR) +1959 DC87 7D LD A,L ;is it zero? +1960 DC88 B4 OR H +1961 DC89 C9 RET +1962 DC8A ; +1963 DC8A ; Adjust physical block (BLKNMBR) and convert to logical +1964 DC8A ; sector (LOGSECT). This is the starting sector of this block. +1965 DC8A ; The actual sector of interest is then added to this and the +1966 DC8A ; resulting sector number is stored back in (BLKNMBR). This +1967 DC8A ; will still have to be adjusted for the track number. +1968 DC8A ; +1969 DC8A 3A C3 E5 LOGICAL:LD A,(BLKSHFT) ;get log2(physical/logical sectors). +1970 DC8D 2A E5 E5 LD HL,(BLKNMBR) ;get physical sector desired. +1971 DC90 29 LOGICL1:ADD HL,HL ;compute logical sector number. +1972 DC91 3D DEC A ;note logical sectors are 128 bytes long. +1973 DC92 C2 90 DC JP NZ,LOGICL1 +1974 DC95 22 E7 E5 LD (LOGSECT),HL ;save logical sector. +1975 DC98 3A C4 E5 LD A,(BLKMASK) ;get block mask. +1976 DC9B 4F LD C,A +1977 DC9C 3A E3 E5 LD A,(SAVNREC) ;get next sector to access. +1978 DC9F A1 AND C ;extract the relative position within physical block. +1979 DCA0 B5 OR L ;and add it too logical sector. +1980 DCA1 6F LD L,A +1981 DCA2 22 E5 E5 LD (BLKNMBR),HL ;and store. +1982 DCA5 C9 RET +1983 DCA6 ; +1984 DCA6 ; Set (HL) to point to extent byte in fcb. +1985 DCA6 ; +1986 DCA6 2A 43 DB SETEXT: LD HL,(PARAMS) +1987 DCA9 11 0C 00 LD DE,12 ;it is the twelth byte. +1988 DCAC 19 ADD HL,DE +1989 DCAD C9 RET +1990 DCAE ; +1991 DCAE ; Set (HL) to point to record count byte in fcb and (DE) to +1992 DCAE ; next record number byte. +1993 DCAE ; +1994 DCAE 2A 43 DB SETHLDE:LD HL,(PARAMS) +1995 DCB1 11 0F 00 LD DE,15 ;record count byte (#15). +1996 DCB4 19 ADD HL,DE +1997 DCB5 EB EX DE,HL +1998 DCB6 21 11 00 LD HL,17 ;next record number (#32). +1999 DCB9 19 ADD HL,DE +2000 DCBA C9 RET +2001 DCBB ; +2002 DCBB ; Save current file data from fcb. +2003 DCBB ; +2004 DCBB CD AE DC STRDATA:CALL SETHLDE +2005 DCBE 7E LD A,(HL) ;get and store record count byte. +2006 DCBF 32 E3 E5 LD (SAVNREC),A +2007 DCC2 EB EX DE,HL +2008 DCC3 7E LD A,(HL) ;get and store next record number byte. +2009 DCC4 32 E1 E5 LD (SAVNXT),A +2010 DCC7 CD A6 DC CALL SETEXT ;point to extent byte. +2011 DCCA 3A C5 E5 LD A,(EXTMASK) ;get extent mask. +2012 DCCD A6 AND (HL) +2013 DCCE 32 E2 E5 LD (SAVEXT),A ;and save extent here. +2014 DCD1 C9 RET +2015 DCD2 ; +2016 DCD2 ; Set the next record to access. If (MODE) is set to 2, then +2017 DCD2 ; the last record byte (SAVNREC) has the correct number to access. +2018 DCD2 ; For sequential access, (MODE) will be equal to 1. +2019 DCD2 ; +2020 DCD2 CD AE DC SETNREC:CALL SETHLDE +2021 DCD5 3A D5 E5 LD A,(MODE) ;get sequential flag (=1). +2022 DCD8 FE 02 CP 2 ;a 2 indicates that no adder is needed. +2023 DCDA C2 DE DC JP NZ,STNREC1 +2024 DCDD AF XOR A ;clear adder (random access?). +2025 DCDE 4F STNREC1:LD C,A +2026 DCDF 3A E3 E5 LD A,(SAVNREC) ;get last record number. +2027 DCE2 81 ADD A,C ;increment record count. +2028 DCE3 77 LD (HL),A ;and set fcb's next record byte. +2029 DCE4 EB EX DE,HL +2030 DCE5 3A E1 E5 LD A,(SAVNXT) ;get next record byte from storage. +2031 DCE8 77 LD (HL),A ;and put this into fcb as number of records used. +2032 DCE9 C9 RET +2033 DCEA ; +2034 DCEA ; Shift (HL) right (C) bits. +2035 DCEA ; +2036 DCEA 0C SHIFTR: INC C +2037 DCEB 0D SHIFTR1:DEC C +2038 DCEC C8 RET Z +2039 DCED 7C LD A,H +2040 DCEE B7 OR A +2041 DCEF 1F RRA +2042 DCF0 67 LD H,A +2043 DCF1 7D LD A,L +2044 DCF2 1F RRA +2045 DCF3 6F LD L,A +2046 DCF4 C3 EB DC JP SHIFTR1 +2047 DCF7 ; +2048 DCF7 ; Compute the check-sum for the directory buffer. Return +2049 DCF7 ; integer sum in (A). +2050 DCF7 ; +2051 DCF7 0E 80 CHECKSUM: LD C,128 ;length of buffer. +2052 DCF9 2A B9 E5 LD HL,(DIRBUF) ;get its location. +2053 DCFC AF XOR A ;clear summation byte. +2054 DCFD 86 CHKSUM1:ADD A,(HL) ;and compute sum ignoring carries. +2055 DCFE 23 INC HL +2056 DCFF 0D DEC C +2057 DD00 C2 FD DC JP NZ,CHKSUM1 +2058 DD03 C9 RET +2059 DD04 ; +2060 DD04 ; Shift (HL) left (C) bits. +2061 DD04 ; +2062 DD04 0C SHIFTL: INC C +2063 DD05 0D SHIFTL1:DEC C +2064 DD06 C8 RET Z +2065 DD07 29 ADD HL,HL ;shift left 1 bit. +2066 DD08 C3 05 DD JP SHIFTL1 +2067 DD0B ; +2068 DD0B ; Routine to set a bit in a 16 bit value contained in (BC). +2069 DD0B ; The bit set depends on the current drive selection. +2070 DD0B ; +2071 DD0B C5 SETBIT: PUSH BC ;save 16 bit word. +2072 DD0C 3A 42 DB LD A,(ACTIVE) ;get active drive. +2073 DD0F 4F LD C,A +2074 DD10 21 01 00 LD HL,1 +2075 DD13 CD 04 DD CALL SHIFTL ;shift bit 0 into place. +2076 DD16 C1 POP BC ;now 'or' this with the original word. +2077 DD17 79 LD A,C +2078 DD18 B5 OR L +2079 DD19 6F LD L,A ;low byte done, do high byte. +2080 DD1A 78 LD A,B +2081 DD1B B4 OR H +2082 DD1C 67 LD H,A +2083 DD1D C9 RET +2084 DD1E ; +2085 DD1E ; Extract the write protect status bit for the current drive. +2086 DD1E ; The result is returned in (A), bit 0. +2087 DD1E ; +2088 DD1E 2A AD E5 GETWPRT:LD HL,(WRTPRT) ;get status bytes. +2089 DD21 3A 42 DB LD A,(ACTIVE) ;which drive is current? +2090 DD24 4F LD C,A +2091 DD25 CD EA DC CALL SHIFTR ;shift status such that bit 0 is the +2092 DD28 7D LD A,L ;one of interest for this drive. +2093 DD29 E6 01 AND 01H ;and isolate it. +2094 DD2B C9 RET +2095 DD2C ; +2096 DD2C ; Function to write protect the current disk. +2097 DD2C ; +2098 DD2C 21 AD E5 WRTPRTD:LD HL,WRTPRT ;point to status word. +2099 DD2F 4E LD C,(HL) ;set (BC) equal to the status. +2100 DD30 23 INC HL +2101 DD31 46 LD B,(HL) +2102 DD32 CD 0B DD CALL SETBIT ;and set this bit according to current drive. +2103 DD35 22 AD E5 LD (WRTPRT),HL ;then save. +2104 DD38 2A C8 E5 LD HL,(DIRSIZE) ;now save directory size limit. +2105 DD3B 23 INC HL ;remember the last one. +2106 DD3C EB EX DE,HL +2107 DD3D 2A B3 E5 LD HL,(SCRATCH1) ;and store it here. +2108 DD40 73 LD (HL),E ;put low byte. +2109 DD41 23 INC HL +2110 DD42 72 LD (HL),D ;then high byte. +2111 DD43 C9 RET +2112 DD44 ; +2113 DD44 ; Check for a read only file. +2114 DD44 ; +2115 DD44 CD 5E DD CHKROFL:CALL FCB2HL ;set (HL) to file entry in directory buffer. +2116 DD47 11 09 00 CKROF1: LD DE,9 ;look at bit 7 of the ninth byte. +2117 DD4A 19 ADD HL,DE +2118 DD4B 7E LD A,(HL) +2119 DD4C 17 RLA +2120 DD4D D0 RET NC ;return if ok. +2121 DD4E 21 0F D8 LD HL,ROFILE ;else, print error message and terminate. +2122 DD51 C3 4A DB JP JUMPHL +2123 DD54 ; +2124 DD54 ; Check the write protect status of the active disk. +2125 DD54 ; +2126 DD54 CD 1E DD CHKWPRT:CALL GETWPRT +2127 DD57 C8 RET Z ;return if ok. +2128 DD58 21 0D D8 LD HL,RODISK ;else print message and terminate. +2129 DD5B C3 4A DB JP JUMPHL +2130 DD5E ; +2131 DD5E ; Routine to set (HL) pointing to the proper entry in the +2132 DD5E ; directory buffer. +2133 DD5E ; +2134 DD5E 2A B9 E5 FCB2HL: LD HL,(DIRBUF) ;get address of buffer. +2135 DD61 3A E9 E5 LD A,(FCBPOS) ;relative position of file. +2136 DD64 ; +2137 DD64 ; Routine to add (A) to (HL). +2138 DD64 ; +2139 DD64 85 ADDA2HL:ADD A,L +2140 DD65 6F LD L,A +2141 DD66 D0 RET NC +2142 DD67 24 INC H ;take care of any carry. +2143 DD68 C9 RET +2144 DD69 ; +2145 DD69 ; Routine to get the 's2' byte from the fcb supplied in +2146 DD69 ; the initial parameter specification. +2147 DD69 ; +2148 DD69 2A 43 DB GETS2: LD HL,(PARAMS) ;get address of fcb. +2149 DD6C 11 0E 00 LD DE,14 ;relative position of 's2'. +2150 DD6F 19 ADD HL,DE +2151 DD70 7E LD A,(HL) ;extract this byte. +2152 DD71 C9 RET +2153 DD72 ; +2154 DD72 ; Clear the 's2' byte in the fcb. +2155 DD72 ; +2156 DD72 CD 69 DD CLEARS2:CALL GETS2 ;this sets (HL) pointing to it. +2157 DD75 36 00 LD (HL),0 ;now clear it. +2158 DD77 C9 RET +2159 DD78 ; +2160 DD78 ; Set bit 7 in the 's2' byte of the fcb. +2161 DD78 ; +2162 DD78 CD 69 DD SETS2B7:CALL GETS2 ;get the byte. +2163 DD7B F6 80 OR 80H ;and set bit 7. +2164 DD7D 77 LD (HL),A ;then store. +2165 DD7E C9 RET +2166 DD7F ; +2167 DD7F ; Compare (FILEPOS) with (SCRATCH1) and set flags based on +2168 DD7F ; the difference. This checks to see if there are more file +2169 DD7F ; names in the directory. We are at (FILEPOS) and there are +2170 DD7F ; (SCRATCH1) of them to check. +2171 DD7F ; +2172 DD7F 2A EA E5 MOREFLS:LD HL,(FILEPOS) ;we are here. +2173 DD82 EB EX DE,HL +2174 DD83 2A B3 E5 LD HL,(SCRATCH1) ;and don't go past here. +2175 DD86 7B LD A,E ;compute difference but don't keep. +2176 DD87 96 SUB (HL) +2177 DD88 23 INC HL +2178 DD89 7A LD A,D +2179 DD8A 9E SBC A,(HL) ;set carry if no more names. +2180 DD8B C9 RET +2181 DD8C ; +2182 DD8C ; Call this routine to prevent (SCRATCH1) from being greater +2183 DD8C ; than (FILEPOS). +2184 DD8C ; +2185 DD8C CD 7F DD CHKNMBR:CALL MOREFLS ;SCRATCH1 too big? +2186 DD8F D8 RET C +2187 DD90 13 INC DE ;yes, reset it to (FILEPOS). +2188 DD91 72 LD (HL),D +2189 DD92 2B DEC HL +2190 DD93 73 LD (HL),E +2191 DD94 C9 RET +2192 DD95 ; +2193 DD95 ; Compute (HL)=(DE)-(HL) +2194 DD95 ; +2195 DD95 7B SUBHL: LD A,E ;compute difference. +2196 DD96 95 SUB L +2197 DD97 6F LD L,A ;store low byte. +2198 DD98 7A LD A,D +2199 DD99 9C SBC A,H +2200 DD9A 67 LD H,A ;and then high byte. +2201 DD9B C9 RET +2202 DD9C ; +2203 DD9C ; Set the directory checksum byte. +2204 DD9C ; +2205 DD9C 0E FF SETDIR: LD C,0FFH +2206 DD9E ; +2207 DD9E ; Routine to set or compare the directory checksum byte. If +2208 DD9E ; (C)=0ffh, then this will set the checksum byte. Else the byte +2209 DD9E ; will be checked. If the check fails (the disk has been changed), +2210 DD9E ; then this disk will be write protected. +2211 DD9E ; +2212 DD9E 2A EC E5 CHECKDIR: LD HL,(CKSUMTBL) +2213 DDA1 EB EX DE,HL +2214 DDA2 2A CC E5 LD HL,(ALLOC1) +2215 DDA5 CD 95 DD CALL SUBHL +2216 DDA8 D0 RET NC ;ok if (CKSUMTBL) > (ALLOC1), so return. +2217 DDA9 C5 PUSH BC +2218 DDAA CD F7 DC CALL CHECKSUM ;else compute checksum. +2219 DDAD 2A BD E5 LD HL,(CHKVECT) ;get address of checksum table. +2220 DDB0 EB EX DE,HL +2221 DDB1 2A EC E5 LD HL,(CKSUMTBL) +2222 DDB4 19 ADD HL,DE ;set (HL) to point to byte for this drive. +2223 DDB5 C1 POP BC +2224 DDB6 0C INC C ;set or check ? +2225 DDB7 CA C4 DD JP Z,CHKDIR1 +2226 DDBA BE CP (HL) ;check them. +2227 DDBB C8 RET Z ;return if they are the same. +2228 DDBC CD 7F DD CALL MOREFLS ;not the same, do we care? +2229 DDBF D0 RET NC +2230 DDC0 CD 2C DD CALL WRTPRTD ;yes, mark this as write protected. +2231 DDC3 C9 RET +2232 DDC4 77 CHKDIR1:LD (HL),A ;just set the byte. +2233 DDC5 C9 RET +2234 DDC6 ; +2235 DDC6 ; Do a write to the directory of the current disk. +2236 DDC6 ; +2237 DDC6 CD 9C DD DIRWRITE: CALL SETDIR ;set checksum byte. +2238 DDC9 CD E0 DD CALL DIRDMA ;set directory dma address. +2239 DDCC 0E 01 LD C,1 ;tell the bios to actually write. +2240 DDCE CD B8 DB CALL DOWRITE ;then do the write. +2241 DDD1 C3 DA DD JP DEFDMA +2242 DDD4 ; +2243 DDD4 ; Read from the directory. +2244 DDD4 ; +2245 DDD4 CD E0 DD DIRREAD:CALL DIRDMA ;set the directory dma address. +2246 DDD7 CD B2 DB CALL DOREAD ;and read it. +2247 DDDA ; +2248 DDDA ; Routine to set the dma address to the users choice. +2249 DDDA ; +2250 DDDA 21 B1 E5 DEFDMA: LD HL,USERDMA ;reset the default dma address and return. +2251 DDDD C3 E3 DD JP DIRDMA1 +2252 DDE0 ; +2253 DDE0 ; Routine to set the dma address for directory work. +2254 DDE0 ; +2255 DDE0 21 B9 E5 DIRDMA: LD HL,DIRBUF +2256 DDE3 ; +2257 DDE3 ; Set the dma address. On entry, (HL) points to +2258 DDE3 ; word containing the desired dma address. +2259 DDE3 ; +2260 DDE3 4E DIRDMA1:LD C,(HL) +2261 DDE4 23 INC HL +2262 DDE5 46 LD B,(HL) ;setup (BC) and go to the bios to set it. +2263 DDE6 C3 24 E6 JP SETDMA +2264 DDE9 ; +2265 DDE9 ; Move the directory buffer into user's dma space. +2266 DDE9 ; +2267 DDE9 2A B9 E5 MOVEDIR:LD HL,(DIRBUF) ;buffer is located here, and +2268 DDEC EB EX DE,HL +2269 DDED 2A B1 E5 LD HL,(USERDMA) ; put it here. +2270 DDF0 0E 80 LD C,128 ;this is its length. +2271 DDF2 C3 4F DB JP DE2HL ;move it now and return. +2272 DDF5 ; +2273 DDF5 ; Check (FILEPOS) and set the zero flag if it equals 0ffffh. +2274 DDF5 ; +2275 DDF5 21 EA E5 CKFILPOS: LD HL,FILEPOS +2276 DDF8 7E LD A,(HL) +2277 DDF9 23 INC HL +2278 DDFA BE CP (HL) ;are both bytes the same? +2279 DDFB C0 RET NZ +2280 DDFC 3C INC A ;yes, but are they each 0ffh? +2281 DDFD C9 RET +2282 DDFE ; +2283 DDFE ; Set location (FILEPOS) to 0ffffh. +2284 DDFE ; +2285 DDFE 21 FF FF STFILPOS: LD HL,0FFFFH +2286 DE01 22 EA E5 LD (FILEPOS),HL +2287 DE04 C9 RET +2288 DE05 ; +2289 DE05 ; Move on to the next file position within the current +2290 DE05 ; directory buffer. If no more exist, set pointer to 0ffffh +2291 DE05 ; and the calling routine will check for this. Enter with (C) +2292 DE05 ; equal to 0ffh to cause the checksum byte to be set, else we +2293 DE05 ; will check this disk and set write protect if checksums are +2294 DE05 ; not the same (applies only if another directory sector must +2295 DE05 ; be read). +2296 DE05 ; +2297 DE05 2A C8 E5 NXENTRY:LD HL,(DIRSIZE) ;get directory entry size limit. +2298 DE08 EB EX DE,HL +2299 DE09 2A EA E5 LD HL,(FILEPOS) ;get current count. +2300 DE0C 23 INC HL ;go on to the next one. +2301 DE0D 22 EA E5 LD (FILEPOS),HL +2302 DE10 CD 95 DD CALL SUBHL ;(HL)=(DIRSIZE)-(FILEPOS) +2303 DE13 D2 19 DE JP NC,NXENT1 ;is there more room left? +2304 DE16 C3 FE DD JP STFILPOS ;no. Set this flag and return. +2305 DE19 3A EA E5 NXENT1: LD A,(FILEPOS) ;get file position within directory. +2306 DE1C E6 03 AND 03H ;only look within this sector (only 4 entries fit). +2307 DE1E 06 05 LD B,5 ;convert to relative position (32 bytes each). +2308 DE20 87 NXENT2: ADD A,A ;note that this is not efficient code. +2309 DE21 05 DEC B ;5 'ADD A's would be better. +2310 DE22 C2 20 DE JP NZ,NXENT2 +2311 DE25 32 E9 E5 LD (FCBPOS),A ;save it as position of fcb. +2312 DE28 B7 OR A +2313 DE29 C0 RET NZ ;return if we are within buffer. +2314 DE2A C5 PUSH BC +2315 DE2B CD C3 DB CALL TRKSEC ;we need the next directory sector. +2316 DE2E CD D4 DD CALL DIRREAD +2317 DE31 C1 POP BC +2318 DE32 C3 9E DD JP CHECKDIR +2319 DE35 ; +2320 DE35 ; Routine to to get a bit from the disk space allocation +2321 DE35 ; map. It is returned in (A), bit position 0. On entry to here, +2322 DE35 ; set (BC) to the block number on the disk to check. +2323 DE35 ; On return, (D) will contain the original bit position for +2324 DE35 ; this block number and (HL) will point to the address for it. +2325 DE35 ; +2326 DE35 79 CKBITMAP: LD A,C ;determine bit number of interest. +2327 DE36 E6 07 AND 07H ;compute (D)=(E)=(C and 7)+1. +2328 DE38 3C INC A +2329 DE39 5F LD E,A ;save particular bit number. +2330 DE3A 57 LD D,A +2331 DE3B ; +2332 DE3B ; compute (BC)=(BC)/8. +2333 DE3B ; +2334 DE3B 79 LD A,C +2335 DE3C 0F RRCA ;now shift right 3 bits. +2336 DE3D 0F RRCA +2337 DE3E 0F RRCA +2338 DE3F E6 1F AND 1FH ;and clear bits 7,6,5. +2339 DE41 4F LD C,A +2340 DE42 78 LD A,B +2341 DE43 87 ADD A,A ;now shift (B) into bits 7,6,5. +2342 DE44 87 ADD A,A +2343 DE45 87 ADD A,A +2344 DE46 87 ADD A,A +2345 DE47 87 ADD A,A +2346 DE48 B1 OR C ;and add in (C). +2347 DE49 4F LD C,A ;ok, (C) ha been completed. +2348 DE4A 78 LD A,B ;is there a better way of doing this? +2349 DE4B 0F RRCA +2350 DE4C 0F RRCA +2351 DE4D 0F RRCA +2352 DE4E E6 1F AND 1FH +2353 DE50 47 LD B,A ;and now (B) is completed. +2354 DE51 ; +2355 DE51 ; use this as an offset into the disk space allocation +2356 DE51 ; table. +2357 DE51 ; +2358 DE51 2A BF E5 LD HL,(ALOCVECT) +2359 DE54 09 ADD HL,BC +2360 DE55 7E LD A,(HL) ;now get correct byte. +2361 DE56 07 CKBMAP1:RLCA ;get correct bit into position 0. +2362 DE57 1D DEC E +2363 DE58 C2 56 DE JP NZ,CKBMAP1 +2364 DE5B C9 RET +2365 DE5C ; +2366 DE5C ; Set or clear the bit map such that block number (BC) will be marked +2367 DE5C ; as used. On entry, if (E)=0 then this bit will be cleared, if it equals +2368 DE5C ; 1 then it will be set (don't use anyother values). +2369 DE5C ; +2370 DE5C D5 STBITMAP: PUSH DE +2371 DE5D CD 35 DE CALL CKBITMAP ;get the byte of interest. +2372 DE60 E6 FE AND 0FEH ;clear the affected bit. +2373 DE62 C1 POP BC +2374 DE63 B1 OR C ;and now set it acording to (C). +2375 DE64 ; +2376 DE64 ; entry to restore the original bit position and then store +2377 DE64 ; in table. (A) contains the value, (D) contains the bit +2378 DE64 ; position (1-8), and (HL) points to the address within the +2379 DE64 ; space allocation table for this byte. +2380 DE64 ; +2381 DE64 0F STBMAP1:RRCA ;restore original bit position. +2382 DE65 15 DEC D +2383 DE66 C2 64 DE JP NZ,STBMAP1 +2384 DE69 77 LD (HL),A ;and stor byte in table. +2385 DE6A C9 RET +2386 DE6B ; +2387 DE6B ; Set/clear space used bits in allocation map for this file. +2388 DE6B ; On entry, (C)=1 to set the map and (C)=0 to clear it. +2389 DE6B ; +2390 DE6B CD 5E DD SETFILE:CALL FCB2HL ;get address of fcb +2391 DE6E 11 10 00 LD DE,16 +2392 DE71 19 ADD HL,DE ;get to block number bytes. +2393 DE72 C5 PUSH BC +2394 DE73 0E 11 LD C,17 ;check all 17 bytes (max) of table. +2395 DE75 D1 SETFL1: POP DE +2396 DE76 0D DEC C ;done all bytes yet? +2397 DE77 C8 RET Z +2398 DE78 D5 PUSH DE +2399 DE79 3A DD E5 LD A,(BIGDISK) ;check disk size for 16 bit block numbers. +2400 DE7C B7 OR A +2401 DE7D CA 88 DE JP Z,SETFL2 +2402 DE80 C5 PUSH BC ;only 8 bit numbers. set (BC) to this one. +2403 DE81 E5 PUSH HL +2404 DE82 4E LD C,(HL) ;get low byte from table, always +2405 DE83 06 00 LD B,0 ;set high byte to zero. +2406 DE85 C3 8E DE JP SETFL3 +2407 DE88 0D SETFL2: DEC C ;for 16 bit block numbers, adjust counter. +2408 DE89 C5 PUSH BC +2409 DE8A 4E LD C,(HL) ;now get both the low and high bytes. +2410 DE8B 23 INC HL +2411 DE8C 46 LD B,(HL) +2412 DE8D E5 PUSH HL +2413 DE8E 79 SETFL3: LD A,C ;block used? +2414 DE8F B0 OR B +2415 DE90 CA 9D DE JP Z,SETFL4 +2416 DE93 2A C6 E5 LD HL,(DSKSIZE) ;is this block number within the +2417 DE96 7D LD A,L ;space on the disk? +2418 DE97 91 SUB C +2419 DE98 7C LD A,H +2420 DE99 98 SBC A,B +2421 DE9A D4 5C DE CALL NC,STBITMAP ;yes, set the proper bit. +2422 DE9D E1 SETFL4: POP HL ;point to next block number in fcb. +2423 DE9E 23 INC HL +2424 DE9F C1 POP BC +2425 DEA0 C3 75 DE JP SETFL1 +2426 DEA3 ; +2427 DEA3 ; Construct the space used allocation bit map for the active +2428 DEA3 ; drive. If a file name starts with '$' and it is under the +2429 DEA3 ; current user number, then (STATUS) is set to minus 1. Otherwise +2430 DEA3 ; it is not set at all. +2431 DEA3 ; +2432 DEA3 2A C6 E5 BITMAP: LD HL,(DSKSIZE) ;compute size of allocation table. +2433 DEA6 0E 03 LD C,3 +2434 DEA8 CD EA DC CALL SHIFTR ;(HL)=(HL)/8. +2435 DEAB 23 INC HL ;at lease 1 byte. +2436 DEAC 44 LD B,H +2437 DEAD 4D LD C,L ;set (BC) to the allocation table length. +2438 DEAE ; +2439 DEAE ; Initialize the bitmap for this drive. Right now, the first +2440 DEAE ; two bytes are specified by the disk parameter block. However +2441 DEAE ; a patch could be entered here if it were necessary to setup +2442 DEAE ; this table in a special mannor. For example, the bios could +2443 DEAE ; determine locations of 'bad blocks' and set them as already +2444 DEAE ; 'used' in the map. +2445 DEAE ; +2446 DEAE 2A BF E5 LD HL,(ALOCVECT) ;now zero out the table now. +2447 DEB1 36 00 BITMAP1:LD (HL),0 +2448 DEB3 23 INC HL +2449 DEB4 0B DEC BC +2450 DEB5 78 LD A,B +2451 DEB6 B1 OR C +2452 DEB7 C2 B1 DE JP NZ,BITMAP1 +2453 DEBA 2A CA E5 LD HL,(ALLOC0) ;get initial space used by directory. +2454 DEBD EB EX DE,HL +2455 DEBE 2A BF E5 LD HL,(ALOCVECT) ;and put this into map. +2456 DEC1 73 LD (HL),E +2457 DEC2 23 INC HL +2458 DEC3 72 LD (HL),D +2459 DEC4 ; +2460 DEC4 ; End of initialization portion. +2461 DEC4 ; +2462 DEC4 CD A1 DB CALL HOMEDRV ;now home the drive. +2463 DEC7 2A B3 E5 LD HL,(SCRATCH1) +2464 DECA 36 03 LD (HL),3 ;force next directory request to read +2465 DECC 23 INC HL ;in a sector. +2466 DECD 36 00 LD (HL),0 +2467 DECF CD FE DD CALL STFILPOS ;clear initial file position also. +2468 DED2 0E FF BITMAP2:LD C,0FFH ;read next file name in directory +2469 DED4 CD 05 DE CALL NXENTRY ;and set checksum byte. +2470 DED7 CD F5 DD CALL CKFILPOS ;is there another file? +2471 DEDA C8 RET Z +2472 DEDB CD 5E DD CALL FCB2HL ;yes, get its address. +2473 DEDE 3E E5 LD A,0E5H +2474 DEE0 BE CP (HL) ;empty file entry? +2475 DEE1 CA D2 DE JP Z,BITMAP2 +2476 DEE4 3A 41 DB LD A,(USERNO) ;no, correct user number? +2477 DEE7 BE CP (HL) +2478 DEE8 C2 F6 DE JP NZ,BITMAP3 +2479 DEEB 23 INC HL +2480 DEEC 7E LD A,(HL) ;yes, does name start with a '$'? +2481 DEED D6 24 SUB '$' +2482 DEEF C2 F6 DE JP NZ,BITMAP3 +2483 DEF2 3D DEC A ;yes, set atatus to minus one. +2484 DEF3 32 45 DB LD (STATUS),A +2485 DEF6 0E 01 BITMAP3:LD C,1 ;now set this file's space as used in bit map. +2486 DEF8 CD 6B DE CALL SETFILE +2487 DEFB CD 8C DD CALL CHKNMBR ;keep (SCRATCH1) in bounds. +2488 DEFE C3 D2 DE JP BITMAP2 +2489 DF01 ; +2490 DF01 ; Set the status (STATUS) and return. +2491 DF01 ; +2492 DF01 3A D4 E5 STSTATUS: LD A,(FNDSTAT) +2493 DF04 C3 01 DB JP SETSTAT +2494 DF07 ; +2495 DF07 ; Check extents in (A) and (C). Set the zero flag if they +2496 DF07 ; are the same. The number of 16k chunks of disk space that +2497 DF07 ; the directory extent covers is expressad is (EXTMASK+1). +2498 DF07 ; No registers are modified. +2499 DF07 ; +2500 DF07 C5 SAMEXT: PUSH BC +2501 DF08 F5 PUSH AF +2502 DF09 3A C5 E5 LD A,(EXTMASK) ;get extent mask and use it to +2503 DF0C 2F CPL ;to compare both extent numbers. +2504 DF0D 47 LD B,A ;save resulting mask here. +2505 DF0E 79 LD A,C ;mask first extent and save in (C). +2506 DF0F A0 AND B +2507 DF10 4F LD C,A +2508 DF11 F1 POP AF ;now mask second extent and compare +2509 DF12 A0 AND B ;with the first one. +2510 DF13 91 SUB C +2511 DF14 E6 1F AND 1FH ;(* only check buts 0-4 *) +2512 DF16 C1 POP BC ;the zero flag is set if they are the same. +2513 DF17 C9 RET ;restore (BC) and return. +2514 DF18 ; +2515 DF18 ; Search for the first occurence of a file name. On entry, +2516 DF18 ; register (C) should contain the number of bytes of the fcb +2517 DF18 ; that must match. +2518 DF18 ; +2519 DF18 3E FF FINDFST:LD A,0FFH +2520 DF1A 32 D4 E5 LD (FNDSTAT),A +2521 DF1D 21 D8 E5 LD HL,COUNTER ;save character count. +2522 DF20 71 LD (HL),C +2523 DF21 2A 43 DB LD HL,(PARAMS) ;get filename to match. +2524 DF24 22 D9 E5 LD (SAVEFCB),HL ;and save. +2525 DF27 CD FE DD CALL STFILPOS ;clear initial file position (set to 0ffffh). +2526 DF2A CD A1 DB CALL HOMEDRV ;home the drive. +2527 DF2D ; +2528 DF2D ; Entry to locate the next occurence of a filename within the +2529 DF2D ; directory. The disk is not expected to have been changed. If +2530 DF2D ; it was, then it will be write protected. +2531 DF2D ; +2532 DF2D 0E 00 FINDNXT:LD C,0 ;write protect the disk if changed. +2533 DF2F CD 05 DE CALL NXENTRY ;get next filename entry in directory. +2534 DF32 CD F5 DD CALL CKFILPOS ;is file position = 0ffffh? +2535 DF35 CA 94 DF JP Z,FNDNXT6 ;yes, exit now then. +2536 DF38 2A D9 E5 LD HL,(SAVEFCB) ;set (DE) pointing to filename to match. +2537 DF3B EB EX DE,HL +2538 DF3C 1A LD A,(DE) +2539 DF3D FE E5 CP 0E5H ;empty directory entry? +2540 DF3F CA 4A DF JP Z,FNDNXT1 ;(* are we trying to reserect erased entries? *) +2541 DF42 D5 PUSH DE +2542 DF43 CD 7F DD CALL MOREFLS ;more files in directory? +2543 DF46 D1 POP DE +2544 DF47 D2 94 DF JP NC,FNDNXT6 ;no more. Exit now. +2545 DF4A CD 5E DD FNDNXT1:CALL FCB2HL ;get address of this fcb in directory. +2546 DF4D 3A D8 E5 LD A,(COUNTER) ;get number of bytes (characters) to check. +2547 DF50 4F LD C,A +2548 DF51 06 00 LD B,0 ;initialize byte position counter. +2549 DF53 79 FNDNXT2:LD A,C ;are we done with the compare? +2550 DF54 B7 OR A +2551 DF55 CA 83 DF JP Z,FNDNXT5 +2552 DF58 1A LD A,(DE) ;no, check next byte. +2553 DF59 FE 3F CP '?' ;don't care about this character? +2554 DF5B CA 7C DF JP Z,FNDNXT4 +2555 DF5E 78 LD A,B ;get bytes position in fcb. +2556 DF5F FE 0D CP 13 ;don't care about the thirteenth byte either. +2557 DF61 CA 7C DF JP Z,FNDNXT4 +2558 DF64 FE 0C CP 12 ;extent byte? +2559 DF66 1A LD A,(DE) +2560 DF67 CA 73 DF JP Z,FNDNXT3 +2561 DF6A 96 SUB (HL) ;otherwise compare characters. +2562 DF6B E6 7F AND 7FH +2563 DF6D C2 2D DF JP NZ,FINDNXT ;not the same, check next entry. +2564 DF70 C3 7C DF JP FNDNXT4 ;so far so good, keep checking. +2565 DF73 C5 FNDNXT3:PUSH BC ;check the extent byte here. +2566 DF74 4E LD C,(HL) +2567 DF75 CD 07 DF CALL SAMEXT +2568 DF78 C1 POP BC +2569 DF79 C2 2D DF JP NZ,FINDNXT ;not the same, look some more. +2570 DF7C ; +2571 DF7C ; So far the names compare. Bump pointers to the next byte +2572 DF7C ; and continue until all (C) characters have been checked. +2573 DF7C ; +2574 DF7C 13 FNDNXT4:INC DE ;bump pointers. +2575 DF7D 23 INC HL +2576 DF7E 04 INC B +2577 DF7F 0D DEC C ;adjust character counter. +2578 DF80 C3 53 DF JP FNDNXT2 +2579 DF83 3A EA E5 FNDNXT5:LD A,(FILEPOS) ;return the position of this entry. +2580 DF86 E6 03 AND 03H +2581 DF88 32 45 DB LD (STATUS),A +2582 DF8B 21 D4 E5 LD HL,FNDSTAT +2583 DF8E 7E LD A,(HL) +2584 DF8F 17 RLA +2585 DF90 D0 RET NC +2586 DF91 AF XOR A +2587 DF92 77 LD (HL),A +2588 DF93 C9 RET +2589 DF94 ; +2590 DF94 ; Filename was not found. Set appropriate status. +2591 DF94 ; +2592 DF94 CD FE DD FNDNXT6:CALL STFILPOS ;set (FILEPOS) to 0ffffh. +2593 DF97 3E FF LD A,0FFH ;say not located. +2594 DF99 C3 01 DB JP SETSTAT +2595 DF9C ; +2596 DF9C ; Erase files from the directory. Only the first byte of the +2597 DF9C ; fcb will be affected. It is set to (E5). +2598 DF9C ; +2599 DF9C CD 54 DD ERAFILE:CALL CHKWPRT ;is disk write protected? +2600 DF9F 0E 0C LD C,12 ;only compare file names. +2601 DFA1 CD 18 DF CALL FINDFST ;get first file name. +2602 DFA4 CD F5 DD ERAFIL1:CALL CKFILPOS ;any found? +2603 DFA7 C8 RET Z ;nope, we must be done. +2604 DFA8 CD 44 DD CALL CHKROFL ;is file read only? +2605 DFAB CD 5E DD CALL FCB2HL ;nope, get address of fcb and +2606 DFAE 36 E5 LD (HL),0E5H ;set first byte to 'empty'. +2607 DFB0 0E 00 LD C,0 ;clear the space from the bit map. +2608 DFB2 CD 6B DE CALL SETFILE +2609 DFB5 CD C6 DD CALL DIRWRITE ;now write the directory sector back out. +2610 DFB8 CD 2D DF CALL FINDNXT ;find the next file name. +2611 DFBB C3 A4 DF JP ERAFIL1 ;and repeat process. +2612 DFBE ; +2613 DFBE ; Look through the space allocation map (bit map) for the +2614 DFBE ; next available block. Start searching at block number (BC-1). +2615 DFBE ; The search procedure is to look for an empty block that is +2616 DFBE ; before the starting block. If not empty, look at a later +2617 DFBE ; block number. In this way, we return the closest empty block +2618 DFBE ; on either side of the 'target' block number. This will speed +2619 DFBE ; access on random devices. For serial devices, this should be +2620 DFBE ; changed to look in the forward direction first and then start +2621 DFBE ; at the front and search some more. +2622 DFBE ; +2623 DFBE ; On return, (DE)= block number that is empty and (HL) =0 +2624 DFBE ; if no empry block was found. +2625 DFBE ; +2626 DFBE 50 FNDSPACE: LD D,B ;set (DE) as the block that is checked. +2627 DFBF 59 LD E,C +2628 DFC0 ; +2629 DFC0 ; Look before target block. Registers (BC) are used as the lower +2630 DFC0 ; pointer and (DE) as the upper pointer. +2631 DFC0 ; +2632 DFC0 79 FNDSPA1:LD A,C ;is block 0 specified? +2633 DFC1 B0 OR B +2634 DFC2 CA D1 DF JP Z,FNDSPA2 +2635 DFC5 0B DEC BC ;nope, check previous block. +2636 DFC6 D5 PUSH DE +2637 DFC7 C5 PUSH BC +2638 DFC8 CD 35 DE CALL CKBITMAP +2639 DFCB 1F RRA ;is this block empty? +2640 DFCC D2 EC DF JP NC,FNDSPA3 ;yes. use this. +2641 DFCF ; +2642 DFCF ; Note that the above logic gets the first block that it finds +2643 DFCF ; that is empty. Thus a file could be written 'backward' making +2644 DFCF ; it very slow to access. This could be changed to look for the +2645 DFCF ; first empty block and then continue until the start of this +2646 DFCF ; empty space is located and then used that starting block. +2647 DFCF ; This should help speed up access to some files especially on +2648 DFCF ; a well used disk with lots of fairly small 'holes'. +2649 DFCF ; +2650 DFCF C1 POP BC ;nope, check some more. +2651 DFD0 D1 POP DE +2652 DFD1 ; +2653 DFD1 ; Now look after target block. +2654 DFD1 ; +2655 DFD1 2A C6 E5 FNDSPA2:LD HL,(DSKSIZE) ;is block (DE) within disk limits? +2656 DFD4 7B LD A,E +2657 DFD5 95 SUB L +2658 DFD6 7A LD A,D +2659 DFD7 9C SBC A,H +2660 DFD8 D2 F4 DF JP NC,FNDSPA4 +2661 DFDB 13 INC DE ;yes, move on to next one. +2662 DFDC C5 PUSH BC +2663 DFDD D5 PUSH DE +2664 DFDE 42 LD B,D +2665 DFDF 4B LD C,E +2666 DFE0 CD 35 DE CALL CKBITMAP ;check it. +2667 DFE3 1F RRA ;empty? +2668 DFE4 D2 EC DF JP NC,FNDSPA3 +2669 DFE7 D1 POP DE ;nope, continue searching. +2670 DFE8 C1 POP BC +2671 DFE9 C3 C0 DF JP FNDSPA1 +2672 DFEC ; +2673 DFEC ; Empty block found. Set it as used and return with (HL) +2674 DFEC ; pointing to it (true?). +2675 DFEC ; +2676 DFEC 17 FNDSPA3:RLA ;reset byte. +2677 DFED 3C INC A ;and set bit 0. +2678 DFEE CD 64 DE CALL STBMAP1 ;update bit map. +2679 DFF1 E1 POP HL ;set return registers. +2680 DFF2 D1 POP DE +2681 DFF3 C9 RET +2682 DFF4 ; +2683 DFF4 ; Free block was not found. If (BC) is not zero, then we have +2684 DFF4 ; not checked all of the disk space. +2685 DFF4 ; +2686 DFF4 79 FNDSPA4:LD A,C +2687 DFF5 B0 OR B +2688 DFF6 C2 C0 DF JP NZ,FNDSPA1 +2689 DFF9 21 00 00 LD HL,0 ;set 'not found' status. +2690 DFFC C9 RET +2691 DFFD ; +2692 DFFD ; Move a complete fcb entry into the directory and write it. +2693 DFFD ; +2694 DFFD 0E 00 FCBSET: LD C,0 +2695 DFFF 1E 20 LD E,32 ;length of each entry. +2696 E001 ; +2697 E001 ; Move (E) bytes from the fcb pointed to by (PARAMS) into +2698 E001 ; fcb in directory starting at relative byte (C). This updated +2699 E001 ; directory buffer is then written to the disk. +2700 E001 ; +2701 E001 D5 UPDATE: PUSH DE +2702 E002 06 00 LD B,0 ;set (BC) to relative byte position. +2703 E004 2A 43 DB LD HL,(PARAMS) ;get address of fcb. +2704 E007 09 ADD HL,BC ;compute starting byte. +2705 E008 EB EX DE,HL +2706 E009 CD 5E DD CALL FCB2HL ;get address of fcb to update in directory. +2707 E00C C1 POP BC ;set (C) to number of bytes to change. +2708 E00D CD 4F DB CALL DE2HL +2709 E010 CD C3 DB UPDATE1:CALL TRKSEC ;determine the track and sector affected. +2710 E013 C3 C6 DD JP DIRWRITE ;then write this sector out. +2711 E016 ; +2712 E016 ; Routine to change the name of all files on the disk with a +2713 E016 ; specified name. The fcb contains the current name as the +2714 E016 ; first 12 characters and the new name 16 bytes into the fcb. +2715 E016 ; +2716 E016 CD 54 DD CHGNAMES: CALL CHKWPRT ;check for a write protected disk. +2717 E019 0E 0C LD C,12 ;match first 12 bytes of fcb only. +2718 E01B CD 18 DF CALL FINDFST ;get first name. +2719 E01E 2A 43 DB LD HL,(PARAMS) ;get address of fcb. +2720 E021 7E LD A,(HL) ;get user number. +2721 E022 11 10 00 LD DE,16 ;move over to desired name. +2722 E025 19 ADD HL,DE +2723 E026 77 LD (HL),A ;keep same user number. +2724 E027 CD F5 DD CHGNAM1:CALL CKFILPOS ;any matching file found? +2725 E02A C8 RET Z ;no, we must be done. +2726 E02B CD 44 DD CALL CHKROFL ;check for read only file. +2727 E02E 0E 10 LD C,16 ;start 16 bytes into fcb. +2728 E030 1E 0C LD E,12 ;and update the first 12 bytes of directory. +2729 E032 CD 01 E0 CALL UPDATE +2730 E035 CD 2D DF CALL FINDNXT ;get te next file name. +2731 E038 C3 27 E0 JP CHGNAM1 ;and continue. +2732 E03B ; +2733 E03B ; Update a files attributes. The procedure is to search for +2734 E03B ; every file with the same name as shown in fcb (ignoring bit 7) +2735 E03B ; and then to update it (which includes bit 7). No other changes +2736 E03B ; are made. +2737 E03B ; +2738 E03B 0E 0C SAVEATTR: LD C,12 ;match first 12 bytes. +2739 E03D CD 18 DF CALL FINDFST ;look for first filename. +2740 E040 CD F5 DD SAVATR1:CALL CKFILPOS ;was one found? +2741 E043 C8 RET Z ;nope, we must be done. +2742 E044 0E 00 LD C,0 ;yes, update the first 12 bytes now. +2743 E046 1E 0C LD E,12 +2744 E048 CD 01 E0 CALL UPDATE ;update filename and write directory. +2745 E04B CD 2D DF CALL FINDNXT ;and get the next file. +2746 E04E C3 40 E0 JP SAVATR1 ;then continue until done. +2747 E051 ; +2748 E051 ; Open a file (name specified in fcb). +2749 E051 ; +2750 E051 0E 0F OPENIT: LD C,15 ;compare the first 15 bytes. +2751 E053 CD 18 DF CALL FINDFST ;get the first one in directory. +2752 E056 CD F5 DD CALL CKFILPOS ;any at all? +2753 E059 C8 RET Z +2754 E05A CD A6 DC OPENIT1:CALL SETEXT ;point to extent byte within users fcb. +2755 E05D 7E LD A,(HL) ;and get it. +2756 E05E F5 PUSH AF ;save it and address. +2757 E05F E5 PUSH HL +2758 E060 CD 5E DD CALL FCB2HL ;point to fcb in directory. +2759 E063 EB EX DE,HL +2760 E064 2A 43 DB LD HL,(PARAMS) ;this is the users copy. +2761 E067 0E 20 LD C,32 ;move it into users space. +2762 E069 D5 PUSH DE +2763 E06A CD 4F DB CALL DE2HL +2764 E06D CD 78 DD CALL SETS2B7 ;set bit 7 in 's2' byte (unmodified). +2765 E070 D1 POP DE ;now get the extent byte from this fcb. +2766 E071 21 0C 00 LD HL,12 +2767 E074 19 ADD HL,DE +2768 E075 4E LD C,(HL) ;into (C). +2769 E076 21 0F 00 LD HL,15 ;now get the record count byte into (B). +2770 E079 19 ADD HL,DE +2771 E07A 46 LD B,(HL) +2772 E07B E1 POP HL ;keep the same extent as the user had originally. +2773 E07C F1 POP AF +2774 E07D 77 LD (HL),A +2775 E07E 79 LD A,C ;is it the same as in the directory fcb? +2776 E07F BE CP (HL) +2777 E080 78 LD A,B ;if yes, then use the same record count. +2778 E081 CA 8B E0 JP Z,OPENIT2 +2779 E084 3E 00 LD A,0 ;if the user specified an extent greater than +2780 E086 DA 8B E0 JP C,OPENIT2 ;the one in the directory, then set record count to 0. +2781 E089 3E 80 LD A,128 ;otherwise set to maximum. +2782 E08B 2A 43 DB OPENIT2:LD HL,(PARAMS) ;set record count in users fcb to (A). +2783 E08E 11 0F 00 LD DE,15 +2784 E091 19 ADD HL,DE ;compute relative position. +2785 E092 77 LD (HL),A ;and set the record count. +2786 E093 C9 RET +2787 E094 ; +2788 E094 ; Move two bytes from (DE) to (HL) if (and only if) (HL) +2789 E094 ; point to a zero value (16 bit). +2790 E094 ; Return with zero flag set it (DE) was moved. Registers (DE) +2791 E094 ; and (HL) are not changed. However (A) is. +2792 E094 ; +2793 E094 7E MOVEWORD: LD A,(HL) ;check for a zero word. +2794 E095 23 INC HL +2795 E096 B6 OR (HL) ;both bytes zero? +2796 E097 2B DEC HL +2797 E098 C0 RET NZ ;nope, just return. +2798 E099 1A LD A,(DE) ;yes, move two bytes from (DE) into +2799 E09A 77 LD (HL),A ;this zero space. +2800 E09B 13 INC DE +2801 E09C 23 INC HL +2802 E09D 1A LD A,(DE) +2803 E09E 77 LD (HL),A +2804 E09F 1B DEC DE ;don't disturb these registers. +2805 E0A0 2B DEC HL +2806 E0A1 C9 RET +2807 E0A2 ; +2808 E0A2 ; Get here to close a file specified by (fcb). +2809 E0A2 ; +2810 E0A2 AF CLOSEIT:XOR A ;clear status and file position bytes. +2811 E0A3 32 45 DB LD (STATUS),A +2812 E0A6 32 EA E5 LD (FILEPOS),A +2813 E0A9 32 EB E5 LD (FILEPOS+1),A +2814 E0AC CD 1E DD CALL GETWPRT ;get write protect bit for this drive. +2815 E0AF C0 RET NZ ;just return if it is set. +2816 E0B0 CD 69 DD CALL GETS2 ;else get the 's2' byte. +2817 E0B3 E6 80 AND 80H ;and look at bit 7 (file unmodified?). +2818 E0B5 C0 RET NZ ;just return if set. +2819 E0B6 0E 0F LD C,15 ;else look up this file in directory. +2820 E0B8 CD 18 DF CALL FINDFST +2821 E0BB CD F5 DD CALL CKFILPOS ;was it found? +2822 E0BE C8 RET Z ;just return if not. +2823 E0BF 01 10 00 LD BC,16 ;set (HL) pointing to records used section. +2824 E0C2 CD 5E DD CALL FCB2HL +2825 E0C5 09 ADD HL,BC +2826 E0C6 EB EX DE,HL +2827 E0C7 2A 43 DB LD HL,(PARAMS) ;do the same for users specified fcb. +2828 E0CA 09 ADD HL,BC +2829 E0CB 0E 10 LD C,16 ;this many bytes are present in this extent. +2830 E0CD 3A DD E5 CLOSEIT1: LD A,(BIGDISK) ;8 or 16 bit record numbers? +2831 E0D0 B7 OR A +2832 E0D1 CA E8 E0 JP Z,CLOSEIT4 +2833 E0D4 7E LD A,(HL) ;just 8 bit. Get one from users fcb. +2834 E0D5 B7 OR A +2835 E0D6 1A LD A,(DE) ;now get one from directory fcb. +2836 E0D7 C2 DB E0 JP NZ,CLOSEIT2 +2837 E0DA 77 LD (HL),A ;users byte was zero. Update from directory. +2838 E0DB B7 CLOSEIT2: OR A +2839 E0DC C2 E1 E0 JP NZ,CLOSEIT3 +2840 E0DF 7E LD A,(HL) ;directories byte was zero, update from users fcb. +2841 E0E0 12 LD (DE),A +2842 E0E1 BE CLOSEIT3: CP (HL) ;if neither one of these bytes were zero, +2843 E0E2 C2 1F E1 JP NZ,CLOSEIT7 ;then close error if they are not the same. +2844 E0E5 C3 FD E0 JP CLOSEIT5 ;ok so far, get to next byte in fcbs. +2845 E0E8 CD 94 E0 CLOSEIT4: CALL MOVEWORD ;update users fcb if it is zero. +2846 E0EB EB EX DE,HL +2847 E0EC CD 94 E0 CALL MOVEWORD ;update directories fcb if it is zero. +2848 E0EF EB EX DE,HL +2849 E0F0 1A LD A,(DE) ;if these two values are no different, +2850 E0F1 BE CP (HL) ;then a close error occured. +2851 E0F2 C2 1F E1 JP NZ,CLOSEIT7 +2852 E0F5 13 INC DE ;check second byte. +2853 E0F6 23 INC HL +2854 E0F7 1A LD A,(DE) +2855 E0F8 BE CP (HL) +2856 E0F9 C2 1F E1 JP NZ,CLOSEIT7 +2857 E0FC 0D DEC C ;remember 16 bit values. +2858 E0FD 13 CLOSEIT5: INC DE ;bump to next item in table. +2859 E0FE 23 INC HL +2860 E0FF 0D DEC C ;there are 16 entries only. +2861 E100 C2 CD E0 JP NZ,CLOSEIT1 ;continue if more to do. +2862 E103 01 EC FF LD BC,0FFECH ;backup 20 places (extent byte). +2863 E106 09 ADD HL,BC +2864 E107 EB EX DE,HL +2865 E108 09 ADD HL,BC +2866 E109 1A LD A,(DE) +2867 E10A BE CP (HL) ;directory's extent already greater than the +2868 E10B DA 17 E1 JP C,CLOSEIT6 ;users extent? +2869 E10E 77 LD (HL),A ;no, update directory extent. +2870 E10F 01 03 00 LD BC,3 ;and update the record count byte in +2871 E112 09 ADD HL,BC ;directories fcb. +2872 E113 EB EX DE,HL +2873 E114 09 ADD HL,BC +2874 E115 7E LD A,(HL) ;get from user. +2875 E116 12 LD (DE),A ;and put in directory. +2876 E117 3E FF CLOSEIT6: LD A,0FFH ;set 'was open and is now closed' byte. +2877 E119 32 D2 E5 LD (CLOSEFLG),A +2878 E11C C3 10 E0 JP UPDATE1 ;update the directory now. +2879 E11F 21 45 DB CLOSEIT7: LD HL,STATUS ;set return status and then return. +2880 E122 35 DEC (HL) +2881 E123 C9 RET +2882 E124 ; +2883 E124 ; Routine to get the next empty space in the directory. It +2884 E124 ; will then be cleared for use. +2885 E124 ; +2886 E124 CD 54 DD GETEMPTY: CALL CHKWPRT ;make sure disk is not write protected. +2887 E127 2A 43 DB LD HL,(PARAMS) ;save current parameters (fcb). +2888 E12A E5 PUSH HL +2889 E12B 21 AC E5 LD HL,EMPTYFCB ;use special one for empty space. +2890 E12E 22 43 DB LD (PARAMS),HL +2891 E131 0E 01 LD C,1 ;search for first empty spot in directory. +2892 E133 CD 18 DF CALL FINDFST ;(* only check first byte *) +2893 E136 CD F5 DD CALL CKFILPOS ;none? +2894 E139 E1 POP HL +2895 E13A 22 43 DB LD (PARAMS),HL ;restore original fcb address. +2896 E13D C8 RET Z ;return if no more space. +2897 E13E EB EX DE,HL +2898 E13F 21 0F 00 LD HL,15 ;point to number of records for this file. +2899 E142 19 ADD HL,DE +2900 E143 0E 11 LD C,17 ;and clear all of this space. +2901 E145 AF XOR A +2902 E146 77 GETMT1: LD (HL),A +2903 E147 23 INC HL +2904 E148 0D DEC C +2905 E149 C2 46 E1 JP NZ,GETMT1 +2906 E14C 21 0D 00 LD HL,13 ;clear the 's1' byte also. +2907 E14F 19 ADD HL,DE +2908 E150 77 LD (HL),A +2909 E151 CD 8C DD CALL CHKNMBR ;keep (SCRATCH1) within bounds. +2910 E154 CD FD DF CALL FCBSET ;write out this fcb entry to directory. +2911 E157 C3 78 DD JP SETS2B7 ;set 's2' byte bit 7 (unmodified at present). +2912 E15A ; +2913 E15A ; Routine to close the current extent and open the next one +2914 E15A ; for reading. +2915 E15A ; +2916 E15A AF GETNEXT:XOR A +2917 E15B 32 D2 E5 LD (CLOSEFLG),A ;clear close flag. +2918 E15E CD A2 E0 CALL CLOSEIT ;close this extent. +2919 E161 CD F5 DD CALL CKFILPOS +2920 E164 C8 RET Z ;not there??? +2921 E165 2A 43 DB LD HL,(PARAMS) ;get extent byte. +2922 E168 01 0C 00 LD BC,12 +2923 E16B 09 ADD HL,BC +2924 E16C 7E LD A,(HL) ;and increment it. +2925 E16D 3C INC A +2926 E16E E6 1F AND 1FH ;keep within range 0-31. +2927 E170 77 LD (HL),A +2928 E171 CA 83 E1 JP Z,GTNEXT1 ;overflow? +2929 E174 47 LD B,A ;mask extent byte. +2930 E175 3A C5 E5 LD A,(EXTMASK) +2931 E178 A0 AND B +2932 E179 21 D2 E5 LD HL,CLOSEFLG ;check close flag (0ffh is ok). +2933 E17C A6 AND (HL) +2934 E17D CA 8E E1 JP Z,GTNEXT2 ;if zero, we must read in next extent. +2935 E180 C3 AC E1 JP GTNEXT3 ;else, it is already in memory. +2936 E183 01 02 00 GTNEXT1:LD BC,2 ;Point to the 's2' byte. +2937 E186 09 ADD HL,BC +2938 E187 34 INC (HL) ;and bump it. +2939 E188 7E LD A,(HL) ;too many extents? +2940 E189 E6 0F AND 0FH +2941 E18B CA B6 E1 JP Z,GTNEXT5 ;yes, set error code. +2942 E18E ; +2943 E18E ; Get here to open the next extent. +2944 E18E ; +2945 E18E 0E 0F GTNEXT2:LD C,15 ;set to check first 15 bytes of fcb. +2946 E190 CD 18 DF CALL FINDFST ;find the first one. +2947 E193 CD F5 DD CALL CKFILPOS ;none available? +2948 E196 C2 AC E1 JP NZ,GTNEXT3 +2949 E199 3A D3 E5 LD A,(RDWRTFLG) ;no extent present. Can we open an empty one? +2950 E19C 3C INC A ;0ffh means reading (so not possible). +2951 E19D CA B6 E1 JP Z,GTNEXT5 ;or an error. +2952 E1A0 CD 24 E1 CALL GETEMPTY ;we are writing, get an empty entry. +2953 E1A3 CD F5 DD CALL CKFILPOS ;none? +2954 E1A6 CA B6 E1 JP Z,GTNEXT5 ;error if true. +2955 E1A9 C3 AF E1 JP GTNEXT4 ;else we are almost done. +2956 E1AC CD 5A E0 GTNEXT3:CALL OPENIT1 ;open this extent. +2957 E1AF CD BB DC GTNEXT4:CALL STRDATA ;move in updated data (rec #, extent #, etc.) +2958 E1B2 AF XOR A ;clear status and return. +2959 E1B3 C3 01 DB JP SETSTAT +2960 E1B6 ; +2961 E1B6 ; Error in extending the file. Too many extents were needed +2962 E1B6 ; or not enough space on the disk. +2963 E1B6 ; +2964 E1B6 CD 05 DB GTNEXT5:CALL IOERR1 ;set error code, clear bit 7 of 's2' +2965 E1B9 C3 78 DD JP SETS2B7 ;so this is not written on a close. +2966 E1BC ; +2967 E1BC ; Read a sequential file. +2968 E1BC ; +2969 E1BC 3E 01 RDSEQ: LD A,1 ;set sequential access mode. +2970 E1BE 32 D5 E5 LD (MODE),A +2971 E1C1 3E FF RDSEQ1: LD A,0FFH ;don't allow reading unwritten space. +2972 E1C3 32 D3 E5 LD (RDWRTFLG),A +2973 E1C6 CD BB DC CALL STRDATA ;put rec# and ext# into fcb. +2974 E1C9 3A E3 E5 LD A,(SAVNREC) ;get next record to read. +2975 E1CC 21 E1 E5 LD HL,SAVNXT ;get number of records in extent. +2976 E1CF BE CP (HL) ;within this extent? +2977 E1D0 DA E6 E1 JP C,RDSEQ2 +2978 E1D3 FE 80 CP 128 ;no. Is this extent fully used? +2979 E1D5 C2 FB E1 JP NZ,RDSEQ3 ;no. End-of-file. +2980 E1D8 CD 5A E1 CALL GETNEXT ;yes, open the next one. +2981 E1DB AF XOR A ;reset next record to read. +2982 E1DC 32 E3 E5 LD (SAVNREC),A +2983 E1DF 3A 45 DB LD A,(STATUS) ;check on open, successful? +2984 E1E2 B7 OR A +2985 E1E3 C2 FB E1 JP NZ,RDSEQ3 ;no, error. +2986 E1E6 CD 77 DC RDSEQ2: CALL COMBLK ;ok. compute block number to read. +2987 E1E9 CD 84 DC CALL CHKBLK ;check it. Within bounds? +2988 E1EC CA FB E1 JP Z,RDSEQ3 ;no, error. +2989 E1EF CD 8A DC CALL LOGICAL ;convert (BLKNMBR) to logical sector (128 byte). +2990 E1F2 CD D1 DB CALL TRKSEC1 ;set the track and sector for this block #. +2991 E1F5 CD B2 DB CALL DOREAD ;and read it. +2992 E1F8 C3 D2 DC JP SETNREC ;and set the next record to be accessed. +2993 E1FB ; +2994 E1FB ; Read error occured. Set status and return. +2995 E1FB ; +2996 E1FB C3 05 DB RDSEQ3: JP IOERR1 +2997 E1FE ; +2998 E1FE ; Write the next sequential record. +2999 E1FE ; +3000 E1FE 3E 01 WTSEQ: LD A,1 ;set sequential access mode. +3001 E200 32 D5 E5 LD (MODE),A +3002 E203 3E 00 WTSEQ1: LD A,0 ;allow an addition empty extent to be opened. +3003 E205 32 D3 E5 LD (RDWRTFLG),A +3004 E208 CD 54 DD CALL CHKWPRT ;check write protect status. +3005 E20B 2A 43 DB LD HL,(PARAMS) +3006 E20E CD 47 DD CALL CKROF1 ;check for read only file, (HL) already set to fcb. +3007 E211 CD BB DC CALL STRDATA ;put updated data into fcb. +3008 E214 3A E3 E5 LD A,(SAVNREC) ;get record number to write. +3009 E217 FE 80 CP 128 ;within range? +3010 E219 D2 05 DB JP NC,IOERR1 ;no, error(?). +3011 E21C CD 77 DC CALL COMBLK ;compute block number. +3012 E21F CD 84 DC CALL CHKBLK ;check number. +3013 E222 0E 00 LD C,0 ;is there one to write to? +3014 E224 C2 6E E2 JP NZ,WTSEQ6 ;yes, go do it. +3015 E227 CD 3E DC CALL GETBLOCK ;get next block number within fcb to use. +3016 E22A 32 D7 E5 LD (RELBLOCK),A ;and save. +3017 E22D 01 00 00 LD BC,0 ;start looking for space from the start +3018 E230 B7 OR A ;if none allocated as yet. +3019 E231 CA 3B E2 JP Z,WTSEQ2 +3020 E234 4F LD C,A ;extract previous block number from fcb +3021 E235 0B DEC BC ;so we can be closest to it. +3022 E236 CD 5E DC CALL EXTBLK +3023 E239 44 LD B,H +3024 E23A 4D LD C,L +3025 E23B CD BE DF WTSEQ2: CALL FNDSPACE ;find the next empty block nearest number (BC). +3026 E23E 7D LD A,L ;check for a zero number. +3027 E23F B4 OR H +3028 E240 C2 48 E2 JP NZ,WTSEQ3 +3029 E243 3E 02 LD A,2 ;no more space? +3030 E245 C3 01 DB JP SETSTAT +3031 E248 22 E5 E5 WTSEQ3: LD (BLKNMBR),HL ;save block number to access. +3032 E24B EB EX DE,HL ;put block number into (DE). +3033 E24C 2A 43 DB LD HL,(PARAMS) ;now we must update the fcb for this +3034 E24F 01 10 00 LD BC,16 ;newly allocated block. +3035 E252 09 ADD HL,BC +3036 E253 3A DD E5 LD A,(BIGDISK) ;8 or 16 bit block numbers? +3037 E256 B7 OR A +3038 E257 3A D7 E5 LD A,(RELBLOCK) ;(* update this entry *) +3039 E25A CA 64 E2 JP Z,WTSEQ4 ;zero means 16 bit ones. +3040 E25D CD 64 DD CALL ADDA2HL ;(HL)=(HL)+(A) +3041 E260 73 LD (HL),E ;store new block number. +3042 E261 C3 6C E2 JP WTSEQ5 +3043 E264 4F WTSEQ4: LD C,A ;compute spot in this 16 bit table. +3044 E265 06 00 LD B,0 +3045 E267 09 ADD HL,BC +3046 E268 09 ADD HL,BC +3047 E269 73 LD (HL),E ;stuff block number (DE) there. +3048 E26A 23 INC HL +3049 E26B 72 LD (HL),D +3050 E26C 0E 02 WTSEQ5: LD C,2 ;set (C) to indicate writing to un-used disk space. +3051 E26E 3A 45 DB WTSEQ6: LD A,(STATUS) ;are we ok so far? +3052 E271 B7 OR A +3053 E272 C0 RET NZ +3054 E273 C5 PUSH BC ;yes, save write flag for bios (register C). +3055 E274 CD 8A DC CALL LOGICAL ;convert (BLKNMBR) over to loical sectors. +3056 E277 3A D5 E5 LD A,(MODE) ;get access mode flag (1=sequential, +3057 E27A 3D DEC A ;0=random, 2=special?). +3058 E27B 3D DEC A +3059 E27C C2 BB E2 JP NZ,WTSEQ9 +3060 E27F ; +3061 E27F ; Special random i/o from function #40. Maybe for M/PM, but the +3062 E27F ; current block, if it has not been written to, will be zeroed +3063 E27F ; out and then written (reason?). +3064 E27F ; +3065 E27F C1 POP BC +3066 E280 C5 PUSH BC +3067 E281 79 LD A,C ;get write status flag (2=writing unused space). +3068 E282 3D DEC A +3069 E283 3D DEC A +3070 E284 C2 BB E2 JP NZ,WTSEQ9 +3071 E287 E5 PUSH HL +3072 E288 2A B9 E5 LD HL,(DIRBUF) ;zero out the directory buffer. +3073 E28B 57 LD D,A ;note that (A) is zero here. +3074 E28C 77 WTSEQ7: LD (HL),A +3075 E28D 23 INC HL +3076 E28E 14 INC D ;do 128 bytes. +3077 E28F F2 8C E2 JP P,WTSEQ7 +3078 E292 CD E0 DD CALL DIRDMA ;tell the bios the dma address for directory access. +3079 E295 2A E7 E5 LD HL,(LOGSECT) ;get sector that starts current block. +3080 E298 0E 02 LD C,2 ;set 'writing to unused space' flag. +3081 E29A 22 E5 E5 WTSEQ8: LD (BLKNMBR),HL ;save sector to write. +3082 E29D C5 PUSH BC +3083 E29E CD D1 DB CALL TRKSEC1 ;determine its track and sector numbers. +3084 E2A1 C1 POP BC +3085 E2A2 CD B8 DB CALL DOWRITE ;now write out 128 bytes of zeros. +3086 E2A5 2A E5 E5 LD HL,(BLKNMBR) ;get sector number. +3087 E2A8 0E 00 LD C,0 ;set normal write flag. +3088 E2AA 3A C4 E5 LD A,(BLKMASK) ;determine if we have written the entire +3089 E2AD 47 LD B,A ;physical block. +3090 E2AE A5 AND L +3091 E2AF B8 CP B +3092 E2B0 23 INC HL ;prepare for the next one. +3093 E2B1 C2 9A E2 JP NZ,WTSEQ8 ;continue until (BLKMASK+1) sectors written. +3094 E2B4 E1 POP HL ;reset next sector number. +3095 E2B5 22 E5 E5 LD (BLKNMBR),HL +3096 E2B8 CD DA DD CALL DEFDMA ;and reset dma address. +3097 E2BB ; +3098 E2BB ; Normal disk write. Set the desired track and sector then +3099 E2BB ; do the actual write. +3100 E2BB ; +3101 E2BB CD D1 DB WTSEQ9: CALL TRKSEC1 ;determine track and sector for this write. +3102 E2BE C1 POP BC ;get write status flag. +3103 E2BF C5 PUSH BC +3104 E2C0 CD B8 DB CALL DOWRITE ;and write this out. +3105 E2C3 C1 POP BC +3106 E2C4 3A E3 E5 LD A,(SAVNREC) ;get number of records in file. +3107 E2C7 21 E1 E5 LD HL,SAVNXT ;get last record written. +3108 E2CA BE CP (HL) +3109 E2CB DA D2 E2 JP C,WTSEQ10 +3110 E2CE 77 LD (HL),A ;we have to update record count. +3111 E2CF 34 INC (HL) +3112 E2D0 0E 02 LD C,2 +3113 E2D2 ; +3114 E2D2 ;* This area has been patched to correct disk update problem +3115 E2D2 ;* when using blocking and de-blocking in the BIOS. +3116 E2D2 ; +3117 E2D2 00 WTSEQ10:NOP ;was 'dcr c' +3118 E2D3 00 NOP ;was 'dcr c' +3119 E2D4 21 00 00 LD HL,0 ;was 'jnz wtseq99' +3120 E2D7 ; +3121 E2D7 ; * End of patch. +3122 E2D7 ; +3123 E2D7 F5 PUSH AF +3124 E2D8 CD 69 DD CALL GETS2 ;set 'extent written to' flag. +3125 E2DB E6 7F AND 7FH ;(* clear bit 7 *) +3126 E2DD 77 LD (HL),A +3127 E2DE F1 POP AF ;get record count for this extent. +3128 E2DF FE 7F WTSEQ99:CP 127 ;is it full? +3129 E2E1 C2 00 E3 JP NZ,WTSEQ12 +3130 E2E4 3A D5 E5 LD A,(MODE) ;yes, are we in sequential mode? +3131 E2E7 FE 01 CP 1 +3132 E2E9 C2 00 E3 JP NZ,WTSEQ12 +3133 E2EC CD D2 DC CALL SETNREC ;yes, set next record number. +3134 E2EF CD 5A E1 CALL GETNEXT ;and get next empty space in directory. +3135 E2F2 21 45 DB LD HL,STATUS ;ok? +3136 E2F5 7E LD A,(HL) +3137 E2F6 B7 OR A +3138 E2F7 C2 FE E2 JP NZ,WTSEQ11 +3139 E2FA 3D DEC A ;yes, set record count to -1. +3140 E2FB 32 E3 E5 LD (SAVNREC),A +3141 E2FE 36 00 WTSEQ11:LD (HL),0 ;clear status. +3142 E300 C3 D2 DC WTSEQ12:JP SETNREC ;set next record to access. +3143 E303 ; +3144 E303 ; For random i/o, set the fcb for the desired record number +3145 E303 ; based on the 'r0,r1,r2' bytes. These bytes in the fcb are +3146 E303 ; used as follows: +3147 E303 ; +3148 E303 ; fcb+35 fcb+34 fcb+33 +3149 E303 ; | 'r-2' | 'r-1' | 'r-0' | +3150 E303 ; |7 0 | 7 0 | 7 0| +3151 E303 ; |0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0| +3152 E303 ; | overflow | | extra | extent | record # | +3153 E303 ; | ______________| |_extent|__number___|_____________| +3154 E303 ; also 's2' +3155 E303 ; +3156 E303 ; On entry, register (C) contains 0ffh if this is a read +3157 E303 ; and thus we can not access unwritten disk space. Otherwise, +3158 E303 ; another extent will be opened (for writing) if required. +3159 E303 ; +3160 E303 AF POSITION: XOR A ;set random i/o flag. +3161 E304 32 D5 E5 LD (MODE),A +3162 E307 ; +3163 E307 ; Special entry (function #40). M/PM ? +3164 E307 ; +3165 E307 C5 POSITN1:PUSH BC ;save read/write flag. +3166 E308 2A 43 DB LD HL,(PARAMS) ;get address of fcb. +3167 E30B EB EX DE,HL +3168 E30C 21 21 00 LD HL,33 ;now get byte 'r0'. +3169 E30F 19 ADD HL,DE +3170 E310 7E LD A,(HL) +3171 E311 E6 7F AND 7FH ;keep bits 0-6 for the record number to access. +3172 E313 F5 PUSH AF +3173 E314 7E LD A,(HL) ;now get bit 7 of 'r0' and bits 0-3 of 'r1'. +3174 E315 17 RLA +3175 E316 23 INC HL +3176 E317 7E LD A,(HL) +3177 E318 17 RLA +3178 E319 E6 1F AND 1FH ;and save this in bits 0-4 of (C). +3179 E31B 4F LD C,A ;this is the extent byte. +3180 E31C 7E LD A,(HL) ;now get the extra extent byte. +3181 E31D 1F RRA +3182 E31E 1F RRA +3183 E31F 1F RRA +3184 E320 1F RRA +3185 E321 E6 0F AND 0FH +3186 E323 47 LD B,A ;and save it in (B). +3187 E324 F1 POP AF ;get record number back to (A). +3188 E325 23 INC HL ;check overflow byte 'r2'. +3189 E326 6E LD L,(HL) +3190 E327 2C INC L +3191 E328 2D DEC L +3192 E329 2E 06 LD L,6 ;prepare for error. +3193 E32B C2 8B E3 JP NZ,POSITN5 ;out of disk space error. +3194 E32E 21 20 00 LD HL,32 ;store record number into fcb. +3195 E331 19 ADD HL,DE +3196 E332 77 LD (HL),A +3197 E333 21 0C 00 LD HL,12 ;and now check the extent byte. +3198 E336 19 ADD HL,DE +3199 E337 79 LD A,C +3200 E338 96 SUB (HL) ;same extent as before? +3201 E339 C2 47 E3 JP NZ,POSITN2 +3202 E33C 21 0E 00 LD HL,14 ;yes, check extra extent byte 's2' also. +3203 E33F 19 ADD HL,DE +3204 E340 78 LD A,B +3205 E341 96 SUB (HL) +3206 E342 E6 7F AND 7FH +3207 E344 CA 7F E3 JP Z,POSITN3 ;same, we are almost done then. +3208 E347 ; +3209 E347 ; Get here when another extent is required. +3210 E347 ; +3211 E347 C5 POSITN2:PUSH BC +3212 E348 D5 PUSH DE +3213 E349 CD A2 E0 CALL CLOSEIT ;close current extent. +3214 E34C D1 POP DE +3215 E34D C1 POP BC +3216 E34E 2E 03 LD L,3 ;prepare for error. +3217 E350 3A 45 DB LD A,(STATUS) +3218 E353 3C INC A +3219 E354 CA 84 E3 JP Z,POSITN4 ;close error. +3220 E357 21 0C 00 LD HL,12 ;put desired extent into fcb now. +3221 E35A 19 ADD HL,DE +3222 E35B 71 LD (HL),C +3223 E35C 21 0E 00 LD HL,14 ;and store extra extent byte 's2'. +3224 E35F 19 ADD HL,DE +3225 E360 70 LD (HL),B +3226 E361 CD 51 E0 CALL OPENIT ;try and get this extent. +3227 E364 3A 45 DB LD A,(STATUS) ;was it there? +3228 E367 3C INC A +3229 E368 C2 7F E3 JP NZ,POSITN3 +3230 E36B C1 POP BC ;no. can we create a new one (writing?). +3231 E36C C5 PUSH BC +3232 E36D 2E 04 LD L,4 ;prepare for error. +3233 E36F 0C INC C +3234 E370 CA 84 E3 JP Z,POSITN4 ;nope, reading unwritten space error. +3235 E373 CD 24 E1 CALL GETEMPTY ;yes we can, try to find space. +3236 E376 2E 05 LD L,5 ;prepare for error. +3237 E378 3A 45 DB LD A,(STATUS) +3238 E37B 3C INC A +3239 E37C CA 84 E3 JP Z,POSITN4 ;out of space? +3240 E37F ; +3241 E37F ; Normal return location. Clear error code and return. +3242 E37F ; +3243 E37F C1 POSITN3:POP BC ;restore stack. +3244 E380 AF XOR A ;and clear error code byte. +3245 E381 C3 01 DB JP SETSTAT +3246 E384 ; +3247 E384 ; Error. Set the 's2' byte to indicate this (why?). +3248 E384 ; +3249 E384 E5 POSITN4:PUSH HL +3250 E385 CD 69 DD CALL GETS2 +3251 E388 36 C0 LD (HL),0C0H +3252 E38A E1 POP HL +3253 E38B ; +3254 E38B ; Return with error code (presently in L). +3255 E38B ; +3256 E38B C1 POSITN5:POP BC +3257 E38C 7D LD A,L ;get error code. +3258 E38D 32 45 DB LD (STATUS),A +3259 E390 C3 78 DD JP SETS2B7 +3260 E393 ; +3261 E393 ; Read a random record. +3262 E393 ; +3263 E393 0E FF READRAN:LD C,0FFH ;set 'read' status. +3264 E395 CD 03 E3 CALL POSITION ;position the file to proper record. +3265 E398 CC C1 E1 CALL Z,RDSEQ1 ;and read it as usual (if no errors). +3266 E39B C9 RET +3267 E39C ; +3268 E39C ; Write to a random record. +3269 E39C ; +3270 E39C 0E 00 WRITERAN: LD C,0 ;set 'writing' flag. +3271 E39E CD 03 E3 CALL POSITION ;position the file to proper record. +3272 E3A1 CC 03 E2 CALL Z,WTSEQ1 ;and write as usual (if no errors). +3273 E3A4 C9 RET +3274 E3A5 ; +3275 E3A5 ; Compute the random record number. Enter with (HL) pointing +3276 E3A5 ; to a fcb an (DE) contains a relative location of a record +3277 E3A5 ; number. On exit, (C) contains the 'r0' byte, (B) the 'r1' +3278 E3A5 ; byte, and (A) the 'r2' byte. +3279 E3A5 ; +3280 E3A5 ; On return, the zero flag is set if the record is within +3281 E3A5 ; bounds. Otherwise, an overflow occured. +3282 E3A5 ; +3283 E3A5 EB COMPRAND: EX DE,HL ;save fcb pointer in (DE). +3284 E3A6 19 ADD HL,DE ;compute relative position of record #. +3285 E3A7 4E LD C,(HL) ;get record number into (BC). +3286 E3A8 06 00 LD B,0 +3287 E3AA 21 0C 00 LD HL,12 ;now get extent. +3288 E3AD 19 ADD HL,DE +3289 E3AE 7E LD A,(HL) ;compute (BC)=(record #)+(extent)*128. +3290 E3AF 0F RRCA ;move lower bit into bit 7. +3291 E3B0 E6 80 AND 80H ;and ignore all other bits. +3292 E3B2 81 ADD A,C ;add to our record number. +3293 E3B3 4F LD C,A +3294 E3B4 3E 00 LD A,0 ;take care of any carry. +3295 E3B6 88 ADC A,B +3296 E3B7 47 LD B,A +3297 E3B8 7E LD A,(HL) ;now get the upper bits of extent into +3298 E3B9 0F RRCA ;bit positions 0-3. +3299 E3BA E6 0F AND 0FH ;and ignore all others. +3300 E3BC 80 ADD A,B ;add this in to 'r1' byte. +3301 E3BD 47 LD B,A +3302 E3BE 21 0E 00 LD HL,14 ;get the 's2' byte (extra extent). +3303 E3C1 19 ADD HL,DE +3304 E3C2 7E LD A,(HL) +3305 E3C3 87 ADD A,A ;and shift it left 4 bits (bits 4-7). +3306 E3C4 87 ADD A,A +3307 E3C5 87 ADD A,A +3308 E3C6 87 ADD A,A +3309 E3C7 F5 PUSH AF ;save carry flag (bit 0 of flag byte). +3310 E3C8 80 ADD A,B ;now add extra extent into 'r1'. +3311 E3C9 47 LD B,A +3312 E3CA F5 PUSH AF ;and save carry (overflow byte 'r2'). +3313 E3CB E1 POP HL ;bit 0 of (L) is the overflow indicator. +3314 E3CC 7D LD A,L +3315 E3CD E1 POP HL ;and same for first carry flag. +3316 E3CE B5 OR L ;either one of these set? +3317 E3CF E6 01 AND 01H ;only check the carry flags. +3318 E3D1 C9 RET +3319 E3D2 ; +3320 E3D2 ; Routine to setup the fcb (bytes 'r0', 'r1', 'r2') to +3321 E3D2 ; reflect the last record used for a random (or other) file. +3322 E3D2 ; This reads the directory and looks at all extents computing +3323 E3D2 ; the largerst record number for each and keeping the maximum +3324 E3D2 ; value only. Then 'r0', 'r1', and 'r2' will reflect this +3325 E3D2 ; maximum record number. This is used to compute the space used +3326 E3D2 ; by a random file. +3327 E3D2 ; +3328 E3D2 0E 0C RANSIZE:LD C,12 ;look thru directory for first entry with +3329 E3D4 CD 18 DF CALL FINDFST ;this name. +3330 E3D7 2A 43 DB LD HL,(PARAMS) ;zero out the 'r0, r1, r2' bytes. +3331 E3DA 11 21 00 LD DE,33 +3332 E3DD 19 ADD HL,DE +3333 E3DE E5 PUSH HL +3334 E3DF 72 LD (HL),D ;note that (D)=0. +3335 E3E0 23 INC HL +3336 E3E1 72 LD (HL),D +3337 E3E2 23 INC HL +3338 E3E3 72 LD (HL),D +3339 E3E4 CD F5 DD RANSIZ1:CALL CKFILPOS ;is there an extent to process? +3340 E3E7 CA 0C E4 JP Z,RANSIZ3 ;no, we are done. +3341 E3EA CD 5E DD CALL FCB2HL ;set (HL) pointing to proper fcb in dir. +3342 E3ED 11 0F 00 LD DE,15 ;point to last record in extent. +3343 E3F0 CD A5 E3 CALL COMPRAND ;and compute random parameters. +3344 E3F3 E1 POP HL +3345 E3F4 E5 PUSH HL ;now check these values against those +3346 E3F5 5F LD E,A ;already in fcb. +3347 E3F6 79 LD A,C ;the carry flag will be set if those +3348 E3F7 96 SUB (HL) ;in the fcb represent a larger size than +3349 E3F8 23 INC HL ;this extent does. +3350 E3F9 78 LD A,B +3351 E3FA 9E SBC A,(HL) +3352 E3FB 23 INC HL +3353 E3FC 7B LD A,E +3354 E3FD 9E SBC A,(HL) +3355 E3FE DA 06 E4 JP C,RANSIZ2 +3356 E401 73 LD (HL),E ;we found a larger (in size) extent. +3357 E402 2B DEC HL ;stuff these values into fcb. +3358 E403 70 LD (HL),B +3359 E404 2B DEC HL +3360 E405 71 LD (HL),C +3361 E406 CD 2D DF RANSIZ2:CALL FINDNXT ;now get the next extent. +3362 E409 C3 E4 E3 JP RANSIZ1 ;continue til all done. +3363 E40C E1 RANSIZ3:POP HL ;we are done, restore the stack and +3364 E40D C9 RET ;return. +3365 E40E ; +3366 E40E ; Function to return the random record position of a given +3367 E40E ; file which has been read in sequential mode up to now. +3368 E40E ; +3369 E40E 2A 43 DB SETRAN: LD HL,(PARAMS) ;point to fcb. +3370 E411 11 20 00 LD DE,32 ;and to last used record. +3371 E414 CD A5 E3 CALL COMPRAND ;compute random position. +3372 E417 21 21 00 LD HL,33 ;now stuff these values into fcb. +3373 E41A 19 ADD HL,DE +3374 E41B 71 LD (HL),C ;move 'r0'. +3375 E41C 23 INC HL +3376 E41D 70 LD (HL),B ;and 'r1'. +3377 E41E 23 INC HL +3378 E41F 77 LD (HL),A ;and lastly 'r2'. +3379 E420 C9 RET +3380 E421 ; +3381 E421 ; This routine select the drive specified in (ACTIVE) and +3382 E421 ; update the login vector and bitmap table if this drive was +3383 E421 ; not already active. +3384 E421 ; +3385 E421 2A AF E5 LOGINDRV: LD HL,(LOGIN) ;get the login vector. +3386 E424 3A 42 DB LD A,(ACTIVE) ;get the default drive. +3387 E427 4F LD C,A +3388 E428 CD EA DC CALL SHIFTR ;position active bit for this drive +3389 E42B E5 PUSH HL ;into bit 0. +3390 E42C EB EX DE,HL +3391 E42D CD 59 DB CALL SELECT ;select this drive. +3392 E430 E1 POP HL +3393 E431 CC 47 DB CALL Z,SLCTERR ;valid drive? +3394 E434 7D LD A,L ;is this a newly activated drive? +3395 E435 1F RRA +3396 E436 D8 RET C +3397 E437 2A AF E5 LD HL,(LOGIN) ;yes, update the login vector. +3398 E43A 4D LD C,L +3399 E43B 44 LD B,H +3400 E43C CD 0B DD CALL SETBIT +3401 E43F 22 AF E5 LD (LOGIN),HL ;and save. +3402 E442 C3 A3 DE JP BITMAP ;now update the bitmap. +3403 E445 ; +3404 E445 ; Function to set the active disk number. +3405 E445 ; +3406 E445 3A D6 E5 SETDSK: LD A,(EPARAM) ;get parameter passed and see if this +3407 E448 21 42 DB LD HL,ACTIVE ;represents a change in drives. +3408 E44B BE CP (HL) +3409 E44C C8 RET Z +3410 E44D 77 LD (HL),A ;yes it does, log it in. +3411 E44E C3 21 E4 JP LOGINDRV +3412 E451 ; +3413 E451 ; This is the 'auto disk select' routine. The firsst byte +3414 E451 ; of the fcb is examined for a drive specification. If non +3415 E451 ; zero then the drive will be selected and loged in. +3416 E451 ; +3417 E451 3E FF AUTOSEL:LD A,0FFH ;say 'auto-select activated'. +3418 E453 32 DE E5 LD (AUTO),A +3419 E456 2A 43 DB LD HL,(PARAMS) ;get drive specified. +3420 E459 7E LD A,(HL) +3421 E45A E6 1F AND 1FH ;look at lower 5 bits. +3422 E45C 3D DEC A ;adjust for (1=A, 2=B) etc. +3423 E45D 32 D6 E5 LD (EPARAM),A ;and save for the select routine. +3424 E460 FE 1E CP 1EH ;check for 'no change' condition. +3425 E462 D2 75 E4 JP NC,AUTOSL1 ;yes, don't change. +3426 E465 3A 42 DB LD A,(ACTIVE) ;we must change, save currently active +3427 E468 32 DF E5 LD (OLDDRV),A ;drive. +3428 E46B 7E LD A,(HL) ;and save first byte of fcb also. +3429 E46C 32 E0 E5 LD (AUTOFLAG),A ;this must be non-zero. +3430 E46F E6 E0 AND 0E0H ;whats this for (bits 6,7 are used for +3431 E471 77 LD (HL),A ;something)? +3432 E472 CD 45 E4 CALL SETDSK ;select and log in this drive. +3433 E475 3A 41 DB AUTOSL1:LD A,(USERNO) ;move user number into fcb. +3434 E478 2A 43 DB LD HL,(PARAMS) ;(* upper half of first byte *) +3435 E47B B6 OR (HL) +3436 E47C 77 LD (HL),A +3437 E47D C9 RET ;and return (all done). +3438 E47E ; +3439 E47E ; Function to return the current cp/m version number. +3440 E47E ; +3441 E47E 3E 22 GETVER: LD A,022H ;version 2.2 +3442 E480 C3 01 DB JP SETSTAT +3443 E483 ; +3444 E483 ; Function to reset the disk system. +3445 E483 ; +3446 E483 21 00 00 RSTDSK: LD HL,0 ;clear write protect status and log +3447 E486 22 AD E5 LD (WRTPRT),HL ;in vector. +3448 E489 22 AF E5 LD (LOGIN),HL +3449 E48C AF XOR A ;select drive 'A'. +3450 E48D 32 42 DB LD (ACTIVE),A +3451 E490 21 80 00 LD HL,TBUFF ;setup default dma address. +3452 E493 22 B1 E5 LD (USERDMA),HL +3453 E496 CD DA DD CALL DEFDMA +3454 E499 C3 21 E4 JP LOGINDRV ;now log in drive 'A'. +3455 E49C ; +3456 E49C ; Function to open a specified file. +3457 E49C ; +3458 E49C CD 72 DD OPENFIL:CALL CLEARS2 ;clear 's2' byte. +3459 E49F CD 51 E4 CALL AUTOSEL ;select proper disk. +3460 E4A2 C3 51 E0 JP OPENIT ;and open the file. +3461 E4A5 ; +3462 E4A5 ; Function to close a specified file. +3463 E4A5 ; +3464 E4A5 CD 51 E4 CLOSEFIL: CALL AUTOSEL ;select proper disk. +3465 E4A8 C3 A2 E0 JP CLOSEIT ;and close the file. +3466 E4AB ; +3467 E4AB ; Function to return the first occurence of a specified file +3468 E4AB ; name. If the first byte of the fcb is '?' then the name will +3469 E4AB ; not be checked (get the first entry no matter what). +3470 E4AB ; +3471 E4AB 0E 00 GETFST: LD C,0 ;prepare for special search. +3472 E4AD EB EX DE,HL +3473 E4AE 7E LD A,(HL) ;is first byte a '?'? +3474 E4AF FE 3F CP '?' +3475 E4B1 CA C2 E4 JP Z,GETFST1 ;yes, just get very first entry (zero length match). +3476 E4B4 CD A6 DC CALL SETEXT ;get the extension byte from fcb. +3477 E4B7 7E LD A,(HL) ;is it '?'? if yes, then we want +3478 E4B8 FE 3F CP '?' ;an entry with a specific 's2' byte. +3479 E4BA C4 72 DD CALL NZ,CLEARS2 ;otherwise, look for a zero 's2' byte. +3480 E4BD CD 51 E4 CALL AUTOSEL ;select proper drive. +3481 E4C0 0E 0F LD C,15 ;compare bytes 0-14 in fcb (12&13 excluded). +3482 E4C2 CD 18 DF GETFST1:CALL FINDFST ;find an entry and then move it into +3483 E4C5 C3 E9 DD JP MOVEDIR ;the users dma space. +3484 E4C8 ; +3485 E4C8 ; Function to return the next occurence of a file name. +3486 E4C8 ; +3487 E4C8 2A D9 E5 GETNXT: LD HL,(SAVEFCB) ;restore pointers. note that no +3488 E4CB 22 43 DB LD (PARAMS),HL ;other dbos calls are allowed. +3489 E4CE CD 51 E4 CALL AUTOSEL ;no error will be returned, but the +3490 E4D1 CD 2D DF CALL FINDNXT ;results will be wrong. +3491 E4D4 C3 E9 DD JP MOVEDIR +3492 E4D7 ; +3493 E4D7 ; Function to delete a file by name. +3494 E4D7 ; +3495 E4D7 CD 51 E4 DELFILE:CALL AUTOSEL ;select proper drive. +3496 E4DA CD 9C DF CALL ERAFILE ;erase the file. +3497 E4DD C3 01 DF JP STSTATUS ;set status and return. +3498 E4E0 ; +3499 E4E0 ; Function to execute a sequential read of the specified +3500 E4E0 ; record number. +3501 E4E0 ; +3502 E4E0 CD 51 E4 READSEQ:CALL AUTOSEL ;select proper drive then read. +3503 E4E3 C3 BC E1 JP RDSEQ +3504 E4E6 ; +3505 E4E6 ; Function to write the net sequential record. +3506 E4E6 ; +3507 E4E6 CD 51 E4 WRTSEQ: CALL AUTOSEL ;select proper drive then write. +3508 E4E9 C3 FE E1 JP WTSEQ +3509 E4EC ; +3510 E4EC ; Create a file function. +3511 E4EC ; +3512 E4EC CD 72 DD FCREATE:CALL CLEARS2 ;clear the 's2' byte on all creates. +3513 E4EF CD 51 E4 CALL AUTOSEL ;select proper drive and get the next +3514 E4F2 C3 24 E1 JP GETEMPTY ;empty directory space. +3515 E4F5 ; +3516 E4F5 ; Function to rename a file. +3517 E4F5 ; +3518 E4F5 CD 51 E4 RENFILE:CALL AUTOSEL ;select proper drive and then switch +3519 E4F8 CD 16 E0 CALL CHGNAMES ;file names. +3520 E4FB C3 01 DF JP STSTATUS +3521 E4FE ; +3522 E4FE ; Function to return the login vector. +3523 E4FE ; +3524 E4FE 2A AF E5 GETLOG: LD HL,(LOGIN) +3525 E501 C3 29 E5 JP GETPRM1 +3526 E504 ; +3527 E504 ; Function to return the current disk assignment. +3528 E504 ; +3529 E504 3A 42 DB GETCRNT:LD A,(ACTIVE) +3530 E507 C3 01 DB JP SETSTAT +3531 E50A ; +3532 E50A ; Function to set the dma address. +3533 E50A ; +3534 E50A EB PUTDMA: EX DE,HL +3535 E50B 22 B1 E5 LD (USERDMA),HL ;save in our space and then get to +3536 E50E C3 DA DD JP DEFDMA ;the bios with this also. +3537 E511 ; +3538 E511 ; Function to return the allocation vector. +3539 E511 ; +3540 E511 2A BF E5 GETALOC:LD HL,(ALOCVECT) +3541 E514 C3 29 E5 JP GETPRM1 +3542 E517 ; +3543 E517 ; Function to return the read-only status vector. +3544 E517 ; +3545 E517 2A AD E5 GETROV: LD HL,(WRTPRT) +3546 E51A C3 29 E5 JP GETPRM1 +3547 E51D ; +3548 E51D ; Function to set the file attributes (read-only, system). +3549 E51D ; +3550 E51D CD 51 E4 SETATTR:CALL AUTOSEL ;select proper drive then save attributes. +3551 E520 CD 3B E0 CALL SAVEATTR +3552 E523 C3 01 DF JP STSTATUS +3553 E526 ; +3554 E526 ; Function to return the address of the disk parameter block +3555 E526 ; for the current drive. +3556 E526 ; +3557 E526 2A BB E5 GETPARM:LD HL,(DISKPB) +3558 E529 22 45 DB GETPRM1:LD (STATUS),HL +3559 E52C C9 RET +3560 E52D ; +3561 E52D ; Function to get or set the user number. If (E) was (FF) +3562 E52D ; then this is a request to return the current user number. +3563 E52D ; Else set the user number from (E). +3564 E52D ; +3565 E52D 3A D6 E5 GETUSER:LD A,(EPARAM) ;get parameter. +3566 E530 FE FF CP 0FFH ;get user number? +3567 E532 C2 3B E5 JP NZ,SETUSER +3568 E535 3A 41 DB LD A,(USERNO) ;yes, just do it. +3569 E538 C3 01 DB JP SETSTAT +3570 E53B E6 1F SETUSER:AND 1FH ;no, we should set it instead. keep low +3571 E53D 32 41 DB LD (USERNO),A ;bits (0-4) only. +3572 E540 C9 RET +3573 E541 ; +3574 E541 ; Function to read a random record from a file. +3575 E541 ; +3576 E541 CD 51 E4 RDRANDOM: CALL AUTOSEL ;select proper drive and read. +3577 E544 C3 93 E3 JP READRAN +3578 E547 ; +3579 E547 ; Function to compute the file size for random files. +3580 E547 ; +3581 E547 CD 51 E4 WTRANDOM: CALL AUTOSEL ;select proper drive and write. +3582 E54A C3 9C E3 JP WRITERAN +3583 E54D ; +3584 E54D ; Function to compute the size of a random file. +3585 E54D ; +3586 E54D CD 51 E4 FILESIZE: CALL AUTOSEL ;select proper drive and check file length +3587 E550 C3 D2 E3 JP RANSIZE +3588 E553 ; +3589 E553 ; Function #37. This allows a program to log off any drives. +3590 E553 ; On entry, set (DE) to contain a word with bits set for those +3591 E553 ; drives that are to be logged off. The log-in vector and the +3592 E553 ; write protect vector will be updated. This must be a M/PM +3593 E553 ; special function. +3594 E553 ; +3595 E553 2A 43 DB LOGOFF: LD HL,(PARAMS) ;get drives to log off. +3596 E556 7D LD A,L ;for each bit that is set, we want +3597 E557 2F CPL ;to clear that bit in (LOGIN) +3598 E558 5F LD E,A ;and (WRTPRT). +3599 E559 7C LD A,H +3600 E55A 2F CPL +3601 E55B 2A AF E5 LD HL,(LOGIN) ;reset the login vector. +3602 E55E A4 AND H +3603 E55F 57 LD D,A +3604 E560 7D LD A,L +3605 E561 A3 AND E +3606 E562 5F LD E,A +3607 E563 2A AD E5 LD HL,(WRTPRT) +3608 E566 EB EX DE,HL +3609 E567 22 AF E5 LD (LOGIN),HL ;and save. +3610 E56A 7D LD A,L ;now do the write protect vector. +3611 E56B A3 AND E +3612 E56C 6F LD L,A +3613 E56D 7C LD A,H +3614 E56E A2 AND D +3615 E56F 67 LD H,A +3616 E570 22 AD E5 LD (WRTPRT),HL ;and save. all done. +3617 E573 C9 RET +3618 E574 ; +3619 E574 ; Get here to return to the user. +3620 E574 ; +3621 E574 3A DE E5 GOBACK: LD A,(AUTO) ;was auto select activated? +3622 E577 B7 OR A +3623 E578 CA 91 E5 JP Z,GOBACK1 +3624 E57B 2A 43 DB LD HL,(PARAMS) ;yes, but was a change made? +3625 E57E 36 00 LD (HL),0 ;(* reset first byte of fcb *) +3626 E580 3A E0 E5 LD A,(AUTOFLAG) +3627 E583 B7 OR A +3628 E584 CA 91 E5 JP Z,GOBACK1 +3629 E587 77 LD (HL),A ;yes, reset first byte properly. +3630 E588 3A DF E5 LD A,(OLDDRV) ;and get the old drive and select it. +3631 E58B 32 D6 E5 LD (EPARAM),A +3632 E58E CD 45 E4 CALL SETDSK +3633 E591 2A 0F DB GOBACK1:LD HL,(USRSTACK) ;reset the users stack pointer. +3634 E594 F9 LD SP,HL +3635 E595 2A 45 DB LD HL,(STATUS) ;get return status. +3636 E598 7D LD A,L ;force version 1.4 compatability. +3637 E599 44 LD B,H +3638 E59A C9 RET ;and go back to user. +3639 E59B ; +3640 E59B ; Function #40. This is a special entry to do random i/o. +3641 E59B ; For the case where we are writing to unused disk space, this +3642 E59B ; space will be zeroed out first. This must be a M/PM special +3643 E59B ; purpose function, because why would any normal program even +3644 E59B ; care about the previous contents of a sector about to be +3645 E59B ; written over. +3646 E59B ; +3647 E59B CD 51 E4 WTSPECL:CALL AUTOSEL ;select proper drive. +3648 E59E 3E 02 LD A,2 ;use special write mode. +3649 E5A0 32 D5 E5 LD (MODE),A +3650 E5A3 0E 00 LD C,0 ;set write indicator. +3651 E5A5 CD 07 E3 CALL POSITN1 ;position the file. +3652 E5A8 CC 03 E2 CALL Z,WTSEQ1 ;and write (if no errors). +3653 E5AB C9 RET +3654 E5AC ; +3655 E5AC ;************************************************************** +3656 E5AC ;* +3657 E5AC ;* BDOS data storage pool. +3658 E5AC ;* +3659 E5AC ;************************************************************** +3660 E5AC ; +3661 E5AC E5 EMPTYFCB: .DB 0E5H ;empty directory segment indicator. +3662 E5AD 00 00 WRTPRT: .DW 0 ;write protect status for all 16 drives. +3663 E5AF 00 00 LOGIN: .DW 0 ;drive active word (1 bit per drive). +3664 E5B1 80 00 USERDMA:.DW 080H ;user's dma address (defaults to 80h). +3665 E5B3 ; +3666 E5B3 ; Scratch areas from parameter block. +3667 E5B3 ; +3668 E5B3 00 00 SCRATCH1: .DW 0 ;relative position within dir segment for file (0-3). +3669 E5B5 00 00 SCRATCH2: .DW 0 ;last selected track number. +3670 E5B7 00 00 SCRATCH3: .DW 0 ;last selected sector number. +3671 E5B9 ; +3672 E5B9 ; Disk storage areas from parameter block. +3673 E5B9 ; +3674 E5B9 00 00 DIRBUF: .DW 0 ;address of directory buffer to use. +3675 E5BB 00 00 DISKPB: .DW 0 ;contains address of disk parameter block. +3676 E5BD 00 00 CHKVECT:.DW 0 ;address of check vector. +3677 E5BF 00 00 ALOCVECT: .DW 0 ;address of allocation vector (bit map). +3678 E5C1 ; +3679 E5C1 ; Parameter block returned from the bios. +3680 E5C1 ; +3681 E5C1 00 00 SECTORS:.DW 0 ;sectors per track from bios. +3682 E5C3 00 BLKSHFT:.DB 0 ;block shift. +3683 E5C4 00 BLKMASK:.DB 0 ;block mask. +3684 E5C5 00 EXTMASK:.DB 0 ;extent mask. +3685 E5C6 00 00 DSKSIZE:.DW 0 ;disk size from bios (number of blocks-1). +3686 E5C8 00 00 DIRSIZE:.DW 0 ;directory size. +3687 E5CA 00 00 ALLOC0: .DW 0 ;storage for first bytes of bit map (dir space used). +3688 E5CC 00 00 ALLOC1: .DW 0 +3689 E5CE 00 00 OFFSET: .DW 0 ;first usable track number. +3690 E5D0 00 00 XLATE: .DW 0 ;sector translation table address. +3691 E5D2 ; +3692 E5D2 ; +3693 E5D2 00 CLOSEFLG: .DB 0 ;close flag (=0ffh is extent written ok). +3694 E5D3 00 RDWRTFLG: .DB 0 ;read/write flag (0ffh=read, 0=write). +3695 E5D4 00 FNDSTAT:.DB 0 ;filename found status (0=found first entry). +3696 E5D5 00 MODE: .DB 0 ;I/o mode select (0=random, 1=sequential, 2=special random). +3697 E5D6 00 EPARAM: .DB 0 ;storage for register (E) on entry to bdos. +3698 E5D7 00 RELBLOCK: .DB 0 ;relative position within fcb of block number written. +3699 E5D8 00 COUNTER:.DB 0 ;byte counter for directory name searches. +3700 E5D9 00 00 00 00 SAVEFCB:.DW 0,0 ;save space for address of fcb (for directory searches). +3701 E5DD 00 BIGDISK:.DB 0 ;if =0 then disk is > 256 blocks long. +3702 E5DE 00 AUTO: .DB 0 ;if non-zero, then auto select activated. +3703 E5DF 00 OLDDRV: .DB 0 ;on auto select, storage for previous drive. +3704 E5E0 00 AUTOFLAG: .DB 0 ;if non-zero, then auto select changed drives. +3705 E5E1 00 SAVNXT: .DB 0 ;storage for next record number to access. +3706 E5E2 00 SAVEXT: .DB 0 ;storage for extent number of file. +3707 E5E3 00 00 SAVNREC:.DW 0 ;storage for number of records in file. +3708 E5E5 00 00 BLKNMBR:.DW 0 ;block number (physical sector) used within a file or logical sect +3709 E5E7 00 00 LOGSECT:.DW 0 ;starting logical (128 byte) sector of block (physical sector). +3710 E5E9 00 FCBPOS: .DB 0 ;relative position within buffer for fcb of file of interest. +3711 E5EA 00 00 FILEPOS:.DW 0 ;files position within directory (0 to max entries -1). +3712 E5EC ; +3713 E5EC ; Disk directory buffer checksum bytes. One for each of the +3714 E5EC ; 16 possible drives. +3715 E5EC ; +3716 E5EC 000000000000CKSUMTBL: .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +3716 E5F2 00000000000000000000 +3717 E5FC ; +3718 E5FC ; Extra space ? +3719 E5FC ; +3720 E5FC 00 00 00 00 .DB 0,0,0,0 +3721 E600 ; +3722 E600 ;************************************************************** +3723 E600 ;* +3724 E600 ;* B I O S J U M P T A B L E +3725 E600 ;* +3726 E600 ;************************************************************** +3727 E600 ; +3728 E600 C3 00 00 BOOT: JP 0 ;NOTE WE USE FAKE DESTINATIONS +3729 E603 C3 00 00 WBOOT: JP 0 +3730 E606 C3 00 00 CONST: JP 0 +3731 E609 C3 00 00 CONIN: JP 0 +3732 E60C C3 00 00 CONOUT: JP 0 +3733 E60F C3 00 00 LIST: JP 0 +3734 E612 C3 00 00 PUNCH: JP 0 +3735 E615 C3 00 00 READER: JP 0 +3736 E618 C3 00 00 HOME: JP 0 +3737 E61B C3 00 00 SELDSK: JP 0 +3738 E61E C3 00 00 SETTRK: JP 0 +3739 E621 C3 00 00 SETSEC: JP 0 +3740 E624 C3 00 00 SETDMA: JP 0 +3741 E627 C3 00 00 READ: JP 0 +3742 E62A C3 00 00 WRITE: JP 0 +3743 E62D C3 00 00 PRSTAT: JP 0 +3744 E630 C3 00 00 SECTRN: JP 0 +3745 E633 ; +3746 E633 ;* +3747 E633 ;****************** E N D O F C P / M ***************** +3748 E633 ;* +3749 E633 +3750 E633 .END +tasm: Number of errors = 0 diff --git a/Z80 CPM and bootloader (basmon)/source/DOWNLOAD.LST b/Z80 CPM and bootloader (basmon)/source/DOWNLOAD.LST new file mode 100644 index 0000000..98fa498 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/DOWNLOAD.LST @@ -0,0 +1,290 @@ +0001 0000 ;================================================================================== +0002 0000 ; Contents of this file are copyright Grant Searle +0003 0000 ; HEX routine from Joel Owens. +0004 0000 ; +0005 0000 ; You have permission to use this for NON COMMERCIAL USE ONLY +0006 0000 ; If you wish to use it elsewhere, please include an acknowledgement to myself. +0007 0000 ; +0008 0000 ; http://searle.hostei.com/grant/index.html +0009 0000 ; +0010 0000 ; eMail: home.micros01@btinternet.com +0011 0000 ; +0012 0000 ; If the above don't work, please perform an Internet search to see if I have +0013 0000 ; updated the web page hosting service. +0014 0000 ; +0015 0000 ;================================================================================== +0016 0000 +0017 0000 TPA .EQU 100H +0018 0000 REBOOT .EQU 0H +0019 0000 BDOS .EQU 5H +0020 0000 CONIO .EQU 6 +0021 0000 CONINP .EQU 1 +0022 0000 CONOUT .EQU 2 +0023 0000 PSTRING .EQU 9 +0024 0000 MAKEF .EQU 22 +0025 0000 CLOSEF .EQU 16 +0026 0000 WRITES .EQU 21 +0027 0000 DELF .EQU 19 +0028 0000 SETUSR .EQU 32 +0029 0000 +0030 0000 CR .EQU 0DH +0031 0000 LF .EQU 0AH +0032 0000 +0033 0000 FCB .EQU 05CH +0034 0000 BUFF .EQU 080H +0035 0000 +0036 0100 .ORG TPA +0037 0100 +0038 0100 +0039 0100 3E 00 LD A,0 +0040 0102 32 6D 02 LD (buffPos),A +0041 0105 32 71 02 LD (checkSum),A +0042 0108 32 72 02 LD (byteCount),A +0043 010B 32 70 02 LD (printCount),A +0044 010E 21 80 00 LD HL,BUFF +0045 0111 22 6E 02 LD (buffPtr),HL +0046 0114 +0047 0114 +0048 0114 CD 39 02 WAITLT: CALL GETCHR +0049 0117 FE 55 CP 'U' +0050 0119 CA 2A 02 JP Z,SETUSER +0051 011C FE 3A CP ':' +0052 011E 20 F4 JR NZ,WAITLT +0053 0120 +0054 0120 +0055 0120 0E 13 LD C,DELF +0056 0122 11 5C 00 LD DE,FCB +0057 0125 CD 05 00 CALL BDOS +0058 0128 +0059 0128 0E 16 LD C,MAKEF +0060 012A 11 5C 00 LD DE,FCB +0061 012D CD 05 00 CALL BDOS +0062 0130 +0063 0130 GETHEX: +0064 0130 CD 39 02 CALL GETCHR +0065 0133 FE 3E CP '>' +0066 0135 28 61 JR Z,CLOSE +0067 0137 47 LD B,A +0068 0138 C5 PUSH BC +0069 0139 CD 39 02 CALL GETCHR +0070 013C C1 POP BC +0071 013D 4F LD C,A +0072 013E +0073 013E CD 4C 02 CALL BCTOA +0074 0141 +0075 0141 47 LD B,A +0076 0142 3A 71 02 LD A,(checkSum) +0077 0145 80 ADD A,B +0078 0146 32 71 02 LD (checkSum),A +0079 0149 3A 72 02 LD A,(byteCount) +0080 014C 3C INC A +0081 014D 32 72 02 LD (byteCount),A +0082 0150 +0083 0150 78 LD A,B +0084 0151 +0085 0151 2A 6E 02 LD HL,(buffPtr) +0086 0154 +0087 0154 77 LD (HL),A +0088 0155 23 INC HL +0089 0156 22 6E 02 LD (buffPtr),HL +0090 0159 +0091 0159 3A 6D 02 LD A,(buffPos) +0092 015C 3C INC A +0093 015D 32 6D 02 LD (buffPos),A +0094 0160 FE 80 CP 80H +0095 0162 +0096 0162 20 32 JR NZ,NOWRITE +0097 0164 +0098 0164 0E 15 LD C,WRITES +0099 0166 11 5C 00 LD DE,FCB +0100 0169 CD 05 00 CALL BDOS +0101 016C 3E 2E LD A,'.' +0102 016E CD 45 02 CALL PUTCHR +0103 0171 +0104 0171 ; New line every 8K (64 dots) +0105 0171 3A 70 02 LD A,(printCount) +0106 0174 3C INC A +0107 0175 FE 40 CP 64 +0108 0177 20 0F JR NZ,noCRLF +0109 0179 32 70 02 LD (printCount),A +0110 017C 3E 0D LD A,CR +0111 017E CD 45 02 CALL PUTCHR +0112 0181 3E 0A LD A,LF +0113 0183 CD 45 02 CALL PUTCHR +0114 0186 3E 00 LD A,0 +0115 0188 32 70 02 noCRLF: LD (printCount),A +0116 018B +0117 018B 21 80 00 LD HL,BUFF +0118 018E 22 6E 02 LD (buffPtr),HL +0119 0191 +0120 0191 3E 00 LD A,0 +0121 0193 32 6D 02 LD (buffPos),A +0122 0196 NOWRITE: +0123 0196 18 98 JR GETHEX +0124 0198 +0125 0198 +0126 0198 CLOSE: +0127 0198 +0128 0198 3A 6D 02 LD A,(buffPos) +0129 019B FE 00 CP 0 +0130 019D 28 0D JR Z,NOWRITE2 +0131 019F +0132 019F 0E 15 LD C,WRITES +0133 01A1 11 5C 00 LD DE,FCB +0134 01A4 CD 05 00 CALL BDOS +0135 01A7 3E 2E LD A,'.' +0136 01A9 CD 45 02 CALL PUTCHR +0137 01AC +0138 01AC NOWRITE2: +0139 01AC 0E 10 LD C,CLOSEF +0140 01AE 11 5C 00 LD DE,FCB +0141 01B1 CD 05 00 CALL BDOS +0142 01B4 +0143 01B4 ; Byte count (lower 8 bits) +0144 01B4 CD 39 02 CALL GETCHR +0145 01B7 47 LD B,A +0146 01B8 C5 PUSH BC +0147 01B9 CD 39 02 CALL GETCHR +0148 01BC C1 POP BC +0149 01BD 4F LD C,A +0150 01BE +0151 01BE CD 4C 02 CALL BCTOA +0152 01C1 47 LD B,A +0153 01C2 3A 72 02 LD A,(byteCount) +0154 01C5 90 SUB B +0155 01C6 FE 00 CP 0 +0156 01C8 28 1A JR Z,byteCountOK +0157 01CA +0158 01CA 3E 0D LD A,CR +0159 01CC CD 45 02 CALL PUTCHR +0160 01CF 3E 0A LD A,LF +0161 01D1 CD 45 02 CALL PUTCHR +0162 01D4 +0163 01D4 11 91 02 LD DE,countErrMess +0164 01D7 0E 09 LD C,PSTRING +0165 01D9 CD 05 00 CALL BDOS +0166 01DC +0167 01DC ; Sink remaining 2 bytes +0168 01DC CD 39 02 CALL GETCHR +0169 01DF CD 39 02 CALL GETCHR +0170 01E2 +0171 01E2 18 3C JR FINISH +0172 01E4 +0173 01E4 byteCountOK: +0174 01E4 +0175 01E4 ; Checksum +0176 01E4 CD 39 02 CALL GETCHR +0177 01E7 47 LD B,A +0178 01E8 C5 PUSH BC +0179 01E9 CD 39 02 CALL GETCHR +0180 01EC C1 POP BC +0181 01ED 4F LD C,A +0182 01EE +0183 01EE CD 4C 02 CALL BCTOA +0184 01F1 47 LD B,A +0185 01F2 3A 71 02 LD A,(checkSum) +0186 01F5 90 SUB B +0187 01F6 FE 00 CP 0 +0188 01F8 28 14 JR Z,checksumOK +0189 01FA +0190 01FA 3E 0D LD A,CR +0191 01FC CD 45 02 CALL PUTCHR +0192 01FF 3E 0A LD A,LF +0193 0201 CD 45 02 CALL PUTCHR +0194 0204 +0195 0204 11 76 02 LD DE,chkErrMess +0196 0207 0E 09 LD C,PSTRING +0197 0209 CD 05 00 CALL BDOS +0198 020C 18 12 JR FINISH +0199 020E +0200 020E checksumOK: +0201 020E 3E 0D LD A,CR +0202 0210 CD 45 02 CALL PUTCHR +0203 0213 3E 0A LD A,LF +0204 0215 CD 45 02 CALL PUTCHR +0205 0218 +0206 0218 11 73 02 LD DE,OKMess +0207 021B 0E 09 LD C,PSTRING +0208 021D CD 05 00 CALL BDOS +0209 0220 +0210 0220 +0211 0220 +0212 0220 FINISH: +0213 0220 0E 20 LD C,SETUSR +0214 0222 1E 00 LD E,0 +0215 0224 CD 05 00 CALL BDOS +0216 0227 +0217 0227 C3 00 00 JP REBOOT +0218 022A +0219 022A +0220 022A SETUSER: +0221 022A CD 39 02 CALL GETCHR +0222 022D CD 65 02 CALL HEX2VAL +0223 0230 5F LD E,A +0224 0231 0E 20 LD C,SETUSR +0225 0233 CD 05 00 CALL BDOS +0226 0236 C3 14 01 JP WAITLT +0227 0239 +0228 0239 +0229 0239 ; Get a char into A +0230 0239 ;GETCHR: LD C,CONINP +0231 0239 ; CALL BDOS +0232 0239 ; RET +0233 0239 +0234 0239 ; Wait for a char into A (no echo) +0235 0239 GETCHR: +0236 0239 1E FF LD E,$FF +0237 023B 0E 06 LD C,CONIO +0238 023D CD 05 00 CALL BDOS +0239 0240 FE 00 CP 0 +0240 0242 28 F5 JR Z,GETCHR +0241 0244 C9 RET +0242 0245 +0243 0245 ; Write A to output +0244 0245 0E 02 PUTCHR: LD C,CONOUT +0245 0247 5F LD E,A +0246 0248 CD 05 00 CALL BDOS +0247 024B C9 RET +0248 024C +0249 024C +0250 024C ;------------------------------------------------------------------------------ +0251 024C ; Convert ASCII characters in B C registers to a byte value in A +0252 024C ;------------------------------------------------------------------------------ +0253 024C 78 BCTOA LD A,B ; Move the hi order byte to A +0254 024D D6 30 SUB $30 ; Take it down from Ascii +0255 024F FE 0A CP $0A ; Are we in the 0-9 range here? +0256 0251 38 02 JR C,BCTOA1 ; If so, get the next nybble +0257 0253 D6 07 SUB $07 ; But if A-F, take it down some more +0258 0255 07 BCTOA1 RLCA ; Rotate the nybble from low to high +0259 0256 07 RLCA ; One bit at a time +0260 0257 07 RLCA ; Until we +0261 0258 07 RLCA ; Get there with it +0262 0259 47 LD B,A ; Save the converted high nybble +0263 025A 79 LD A,C ; Now get the low order byte +0264 025B D6 30 SUB $30 ; Convert it down from Ascii +0265 025D FE 0A CP $0A ; 0-9 at this point? +0266 025F 38 02 JR C,BCTOA2 ; Good enough then, but +0267 0261 D6 07 SUB $07 ; Take off 7 more if it's A-F +0268 0263 80 BCTOA2 ADD A,B ; Add in the high order nybble +0269 0264 C9 RET +0270 0265 +0271 0265 ; Change Hex in A to actual value in A +0272 0265 D6 30 HEX2VAL SUB $30 +0273 0267 FE 0A CP $0A +0274 0269 D8 RET C +0275 026A D6 07 SUB $07 +0276 026C C9 RET +0277 026D +0278 026D +0279 026D 00 buffPos .DB 0H +0280 026E 00 00 buffPtr .DW 0000H +0281 0270 00 printCount .DB 0H +0282 0271 00 checkSum .DB 0H +0283 0272 00 byteCount .DB 0H +0284 0273 4F 4B 24 OKMess .BYTE "OK$" +0285 0276 3D3D3D3D3D3DchkErrMess .BYTE "======Checksum Error======$" +0285 027C 436865636B73756D204572726F723D3D3D3D3D3D24 +0286 0291 3D3D3D3D3D3DcountErrMess .BYTE "======File Length Error======$" +0286 0297 46696C65204C656E677468204572726F723D3D3D3D3D3D24 +0287 02AF .END +tasm: Number of errors = 0 diff --git a/Z80 CPM and bootloader (basmon)/source/FORM128.LST b/Z80 CPM and bootloader (basmon)/source/FORM128.LST new file mode 100644 index 0000000..fe9ca64 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/FORM128.LST @@ -0,0 +1,230 @@ +0001 0000 ;================================================================================== +0002 0000 ; Contents of this file are copyright Grant Searle +0003 0000 ; +0004 0000 ; You have permission to use this for NON COMMERCIAL USE ONLY +0005 0000 ; If you wish to use it elsewhere, please include an acknowledgement to myself. +0006 0000 ; +0007 0000 ; http://searle.hostei.com/grant/index.html +0008 0000 ; +0009 0000 ; eMail: home.micros01@btinternet.com +0010 0000 ; +0011 0000 ; If the above don't work, please perform an Internet search to see if I have +0012 0000 ; updated the web page hosting service. +0013 0000 ; +0014 0000 ;================================================================================== +0015 0000 +0016 0000 numDrives .EQU 15 ; Not including A: +0017 0000 +0018 0000 +0019 0000 SD_DATA .EQU 088H +0020 0000 SD_CONTROL .EQU 089H +0021 0000 SD_STATUS .EQU 089H +0022 0000 SD_LBA0 .EQU 08AH +0023 0000 SD_LBA1 .EQU 08BH +0024 0000 SD_LBA2 .EQU 08CH +0025 0000 +0026 0000 LF .EQU 0AH ;line feed +0027 0000 FF .EQU 0CH ;form feed +0028 0000 CR .EQU 0DH ;carriage RETurn +0029 0000 +0030 0000 ;==================================================================================== +0031 0000 +0032 5000 .ORG 5000H ; Format program origin. +0033 5000 +0034 5000 +0035 5000 CD D5 50 CALL printInline +0036 5003 43502F4D2046 .TEXT "CP/M Formatter 2.0 by G. Searle 2013" +0036 5009 6F726D617474657220322E3020627920472E20536561726C652032303133 +0037 5027 0D 0A 00 .DB CR,LF,0 +0038 502A +0039 502A 3E 41 LD A,'A' +0040 502C 32 E7 50 LD (drvName),A +0041 502F +0042 502F ; There are 512 directory entries per disk, 4 DIR entries per sector +0043 502F ; So 128 x 128 byte sectors are to be initialised +0044 502F ; The drive uses 512 byte sectors, so 32 x 512 byte sectors per disk +0045 502F ; require initialisation +0046 502F +0047 502F ;Drive 0 (A:) is slightly different due to reserved track, so DIR sector starts at 32 +0048 502F 3A E7 50 LD A,(drvName) +0049 5032 CF RST 08H ; Print drive letter +0050 5033 3C INC A +0051 5034 32 E7 50 LD (drvName),A +0052 5037 +0053 5037 3E 20 LD A,$20 +0054 5039 32 E6 50 LD (secNo),A +0055 503C +0056 503C processSectorA: +0057 503C +0058 503C 3A E6 50 LD A,(secNo) +0059 503F D3 8A OUT (SD_LBA0),A +0060 5041 3E 00 LD A,0 +0061 5043 D3 8B OUT (SD_LBA1),A +0062 5045 3E 00 LD A,0 +0063 5047 D3 8C OUT (SD_LBA2),A +0064 5049 3E E0 LD a,$E0 +0065 504B +0066 504B CD A7 50 call writehst +0067 504E +0068 504E 3A E6 50 LD A,(secNo) +0069 5051 3C INC A +0070 5052 32 E6 50 LD (secNo),A +0071 5055 FE 40 CP $40 +0072 5057 20 E3 JR NZ, processSectorA +0073 5059 +0074 5059 +0075 5059 +0076 5059 ;Drive 1 onwards (B: etc) don't have reserved tracks, so sector starts at 0 +0077 5059 +0078 5059 11 40 00 LD DE,$0040 ; HL increment +0079 505C 21 40 00 LD HL,$0040 ; H = LBA2, L=LBA1, initialise for drive 1 (B:) +0080 505F +0081 505F 06 0F LD B,numDrives +0082 5061 +0083 5061 processDirs: +0084 5061 +0085 5061 3A E7 50 LD A,(drvName) +0086 5064 CF RST 08H ; Print drive letter +0087 5065 3C INC A +0088 5066 32 E7 50 LD (drvName),A +0089 5069 +0090 5069 3E 00 LD A,0 +0091 506B 32 E6 50 LD (secNo),A +0092 506E +0093 506E processSector: +0094 506E 3A E6 50 LD A,(secNo) +0095 5071 D3 8A OUT (SD_LBA0),A +0096 5073 7D LD A,L +0097 5074 D3 8B OUT (SD_LBA1),A +0098 5076 7C LD A,H +0099 5077 D3 8C OUT (SD_LBA2),A +0100 5079 +0101 5079 CD A7 50 call writehst +0102 507C +0103 507C 3A E6 50 LD A,(secNo) +0104 507F 3C INC A +0105 5080 32 E6 50 LD (secNo),A +0106 5083 FE 20 CP $20 +0107 5085 20 E7 JR NZ, processSector +0108 5087 +0109 5087 19 ADD HL,DE +0110 5088 +0111 5088 05 DEC B +0112 5089 20 D6 JR NZ,processDirs +0113 508B +0114 508B CD D5 50 CALL printInline +0115 508E 0D 0A .DB CR,LF +0116 5090 466F726D6174 .TEXT "Formatting complete" +0116 5096 74696E6720636F6D706C657465 +0117 50A3 0D 0A 00 .DB CR,LF,0 +0118 50A6 +0119 50A6 C9 RET +0120 50A7 +0121 50A7 ;================================================================================================ +0122 50A7 ; Write physical sector to host +0123 50A7 ;================================================================================================ +0124 50A7 +0125 50A7 writehst: +0126 50A7 F5 PUSH AF +0127 50A8 C5 PUSH BC +0128 50A9 E5 PUSH HL +0129 50AA +0130 50AA DB 89 wrWait1: IN A,(SD_STATUS) +0131 50AC FE 80 CP 128 +0132 50AE 20 FA JR NZ,wrWait1 +0133 50B0 +0134 50B0 ;CALL setLBAaddr +0135 50B0 +0136 50B0 3E 01 LD A,$01 ; 01 = Write block +0137 50B2 D3 89 OUT (SD_CONTROL),A +0138 50B4 +0139 50B4 0E 04 LD c,4 +0140 50B6 wr4secs: +0141 50B6 21 E8 50 LD HL,dirData +0142 50B9 06 80 LD b,128 +0143 50BB wrByte: +0144 50BB DB 89 wrWait2: IN A,(SD_STATUS) +0145 50BD FE A0 CP 160 ; Write buffer empty +0146 50BF 20 FA JR NZ,wrWait2 +0147 50C1 +0148 50C1 ;LD A,'.' +0149 50C1 ;RST 08H +0150 50C1 +0151 50C1 ; UPDATE S0urceror, inserted wait cycle between IN and OUT +0152 50C1 ; to resolve unknown write issue in sd_controller.vhd in combination +0153 50C1 ; with MISTer virtual SD interface sys/sd_card.sv +0154 50C1 ; which results in hangs or write errors. +0155 50C1 C5 push bc +0156 50C2 06 64 ld b,100 +0157 50C4 _again: +0158 50C4 10 FE djnz _again +0159 50C6 C1 pop bc +0160 50C7 ; END UPDATE +0161 50C7 +0162 50C7 7E LD A,(HL) +0163 50C8 D3 88 OUT (SD_DATA),A +0164 50CA +0165 50CA 23 INC HL +0166 50CB 05 dec b +0167 50CC 20 ED JR NZ, wrByte +0168 50CE +0169 50CE 0D dec c +0170 50CF 20 E5 JR NZ,wr4secs +0171 50D1 +0172 50D1 E1 POP HL +0173 50D2 C1 POP BC +0174 50D3 F1 POP AF +0175 50D4 +0176 50D4 ;XOR a +0177 50D4 ;ld (erflag),a +0178 50D4 C9 RET +0179 50D5 +0180 50D5 ;================================================================================================ +0181 50D5 ; Utilities +0182 50D5 ;================================================================================================ +0183 50D5 +0184 50D5 printInline: +0185 50D5 E3 EX (SP),HL ; PUSH HL and put RET ADDress into HL +0186 50D6 F5 PUSH AF +0187 50D7 C5 PUSH BC +0188 50D8 7E nextILChar: LD A,(HL) +0189 50D9 FE 00 CP 0 +0190 50DB 28 04 JR Z,endOfPrint +0191 50DD CF RST 08H +0192 50DE 23 INC HL +0193 50DF 18 F7 JR nextILChar +0194 50E1 23 endOfPrint: INC HL ; Get past "null" terminator +0195 50E2 C1 POP BC +0196 50E3 F1 POP AF +0197 50E4 E3 EX (SP),HL ; PUSH new RET ADDress on stack and restore HL +0198 50E5 C9 RET +0199 50E6 +0200 50E6 +0201 50E6 00 secNo .db 0 +0202 50E7 00 drvName .db 0 +0203 50E8 +0204 50E8 +0205 50E8 ; Directory data for 1 x 128 byte sector +0206 50E8 dirData: +0207 50E8 E52020202020 .DB $E5,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00,$00,$00 +0207 50EE 20202020202000000000 +0208 50F8 000000000000 .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +0208 50FE 00000000000000000000 +0209 5108 +0210 5108 E52020202020 .DB $E5,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00,$00,$00 +0210 510E 20202020202000000000 +0211 5118 000000000000 .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +0211 511E 00000000000000000000 +0212 5128 +0213 5128 E52020202020 .DB $E5,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00,$00,$00 +0213 512E 20202020202000000000 +0214 5138 000000000000 .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +0214 513E 00000000000000000000 +0215 5148 +0216 5148 E52020202020 .DB $E5,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00,$00,$00 +0216 514E 20202020202000000000 +0217 5158 000000000000 .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +0217 515E 00000000000000000000 +0218 5168 +0219 5168 .END +tasm: Number of errors = 0 diff --git a/Z80 CPM and bootloader (basmon)/source/PUTSYS.LST b/Z80 CPM and bootloader (basmon)/source/PUTSYS.LST new file mode 100644 index 0000000..b1100a3 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/PUTSYS.LST @@ -0,0 +1,166 @@ +0001 0000 ;================================================================================== +0002 0000 ; Contents of this file are copyright Grant Searle +0003 0000 ; +0004 0000 ; You have permission to use this for NON COMMERCIAL USE ONLY +0005 0000 ; If you wish to use it elsewhere, please include an acknowledgement to myself. +0006 0000 ; +0007 0000 ; http://searle.hostei.com/grant/index.html +0008 0000 ; +0009 0000 ; eMail: home.micros01@btinternet.com +0010 0000 ; +0011 0000 ; If the above don't work, please perform an Internet search to see if I have +0012 0000 ; updated the web page hosting service. +0013 0000 ; +0014 0000 ;================================================================================== +0015 0000 +0016 0000 loadAddr .EQU 0D000h +0017 0000 numSecs .EQU 24 ; Number of 512 sectors to be loaded +0018 0000 +0019 0000 SD_DATA .EQU 088H +0020 0000 SD_CONTROL .EQU 089H +0021 0000 SD_STATUS .EQU 089H +0022 0000 SD_LBA0 .EQU 08AH +0023 0000 SD_LBA1 .EQU 08BH +0024 0000 SD_LBA2 .EQU 08CH +0025 0000 +0026 0000 LF .EQU 0AH ;line feed +0027 0000 FF .EQU 0CH ;form feed +0028 0000 CR .EQU 0DH ;carriage RETurn +0029 0000 +0030 0000 ;================================================================================================ +0031 0000 +0032 5000 .ORG 5000H ; Loader origin. +0033 5000 +0034 5000 CD BA 50 CALL printInline +0035 5003 43502F4D2053 .TEXT "CP/M System Transfer by G. Searle 2012-13" +0035 5009 797374656D205472616E7366657220627920472E20536561726C6520323031322D3133 +0036 502C 0D 0A 00 .DB CR,LF,0 +0037 502F +0038 502F 06 18 LD B,numSecs +0039 5031 +0040 5031 3E 00 LD A,0 +0041 5033 32 CB 50 LD (lba0),A +0042 5036 32 CC 50 ld (lba1),A +0043 5039 32 CD 50 ld (lba2),A +0044 503C 32 CE 50 ld (lba3),A +0045 503F 21 00 D0 LD HL,loadAddr +0046 5042 22 CF 50 LD (dmaAddr),HL +0047 5045 processSectors: +0048 5045 +0049 5045 CD 8C 50 call writehst +0050 5048 +0051 5048 11 00 02 LD DE,0200H +0052 504B 2A CF 50 LD HL,(dmaAddr) +0053 504E 19 ADD HL,DE +0054 504F 22 CF 50 LD (dmaAddr),HL +0055 5052 3A CB 50 LD A,(lba0) +0056 5055 3C INC A +0057 5056 32 CB 50 LD (lba0),A +0058 5059 +0059 5059 10 EA djnz processSectors +0060 505B +0061 505B CD BA 50 CALL printInline +0062 505E 0D 0A .DB CR,LF +0063 5060 53797374656D .TEXT "System transfer complete" +0063 5066 207472616E7366657220636F6D706C657465 +0064 5078 0D 0A 00 .DB CR,LF,0 +0065 507B +0066 507B C9 RET +0067 507C +0068 507C ; ========================================================================= +0069 507C ; Disk routines as used in CBIOS +0070 507C ; ========================================================================= +0071 507C setLBAaddr: +0072 507C 3A CD 50 LD A,(lba2) +0073 507F D3 8C OUT (SD_LBA2),A +0074 5081 3A CC 50 LD A,(lba1) +0075 5084 D3 8B OUT (SD_LBA1),A +0076 5086 3A CB 50 LD A,(lba0) +0077 5089 D3 8A OUT (SD_LBA0),A +0078 508B C9 ret +0079 508C +0080 508C ;================================================================================================ +0081 508C ; Write physical sector to host +0082 508C ;================================================================================================ +0083 508C +0084 508C writehst: +0085 508C F5 PUSH AF +0086 508D C5 PUSH BC +0087 508E E5 PUSH HL +0088 508F +0089 508F DB 89 wrWait1: IN A,(SD_STATUS) +0090 5091 FE 80 CP 128 +0091 5093 20 FA JR NZ,wrWait1 +0092 5095 +0093 5095 CD 7C 50 CALL setLBAaddr +0094 5098 +0095 5098 3E 01 LD A,$01 ; 01 = Write block +0096 509A D3 89 OUT (SD_CONTROL),A +0097 509C +0098 509C 0E 04 LD c,4 +0099 509E ;LD HL,hstbuf +0100 509E wr4secs: +0101 509E 06 80 LD b,128 +0102 50A0 wrByte: +0103 50A0 +0104 50A0 DB 89 wrWait2: IN A,(SD_STATUS) +0105 50A2 FE A0 CP 160 ; Write buffer empty +0106 50A4 20 FA JR NZ,wrWait2 +0107 50A6 +0108 50A6 ; UPDATE S0urceror, inserted wait cycle between IN and OUT +0109 50A6 ; to resolve unknown write issue in sd_controller.vhd in combination +0110 50A6 ; with MISTer virtual SD interface sys/sd_card.sv +0111 50A6 ; which results in hangs or write errors. +0112 50A6 C5 push bc +0113 50A7 06 64 ld b,100 +0114 50A9 _again: +0115 50A9 10 FE djnz _again +0116 50AB C1 pop bc +0117 50AC ; END UPDATE +0118 50AC +0119 50AC 7E LD A,(HL) +0120 50AD D3 88 OUT (SD_DATA),A +0121 50AF 23 INC HL +0122 50B0 05 dec b +0123 50B1 20 ED JR NZ, wrByte +0124 50B3 +0125 50B3 0D dec c +0126 50B4 20 E8 JR NZ,wr4secs +0127 50B6 +0128 50B6 E1 POP HL +0129 50B7 C1 POP BC +0130 50B8 F1 POP AF +0131 50B9 +0132 50B9 ;XOR a +0133 50B9 ;ld (erflag),a +0134 50B9 C9 RET +0135 50BA +0136 50BA +0137 50BA ;================================================================================================ +0138 50BA ; Utilities +0139 50BA ;================================================================================================ +0140 50BA +0141 50BA printInline: +0142 50BA E3 EX (SP),HL ; PUSH HL and put RET ADDress into HL +0143 50BB F5 PUSH AF +0144 50BC C5 PUSH BC +0145 50BD 7E nextILChar: LD A,(HL) +0146 50BE FE 00 CP 0 +0147 50C0 28 04 JR Z,endOfPrint +0148 50C2 CF RST 08H +0149 50C3 23 INC HL +0150 50C4 18 F7 JR nextILChar +0151 50C6 23 endOfPrint: INC HL ; Get past "null" terminator +0152 50C7 C1 POP BC +0153 50C8 F1 POP AF +0154 50C9 E3 EX (SP),HL ; PUSH new RET ADDress on stack and restore HL +0155 50CA C9 RET +0156 50CB +0157 50CB 00 lba0 .DB 00h +0158 50CC 00 lba1 .DB 00h +0159 50CD 00 lba2 .DB 00h +0160 50CE 00 lba3 .DB 00h +0161 50CF 00 00 dmaAddr .dw 0 +0162 50D1 +0163 50D1 .END +tasm: Number of errors = 0 diff --git a/Z80 CPM and bootloader (basmon)/source/basMon.asm b/Z80 CPM and bootloader (basmon)/source/basMon.asm new file mode 100644 index 0000000..fb36b2e --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/basMon.asm @@ -0,0 +1,4992 @@ +;================================================================================== +; The updates to the original BASIC within this file are copyright Grant Searle +; +; You have permission to use this for NON COMMERCIAL USE ONLY +; If you wish to use it elsewhere, please include an acknowledgement to myself. +; +; http://searle.hostei.com/grant/index.html +; +; eMail: home.micros01@btinternet.com +; +; If the above don't work, please perform an Internet search to see if I have +; updated the web page hosting service. +; +;================================================================================== + + +;================================================================================== +; Contents of this file are copyright Grant Searle +; HEX routines from Joel Owens. +; +; You have permission to use this for NON COMMERCIAL USE ONLY +; If you wish to use it elsewhere, please include an acknowledgement to myself. +; +; http://searle.hostei.com/grant/index.html +; +; eMail: home.micros01@btinternet.com +; +; If the above don't work, please perform an Internet search to see if I have +; updated the web page hosting service. +; +;================================================================================== + +;------------------------------------------------------------------------------ +; +; Z80 Monitor Rom +; +;------------------------------------------------------------------------------ +; General Equates +;------------------------------------------------------------------------------ + +;CR .EQU 0DH +;LF .EQU 0AH +;ESC .EQU 1BH +;CTRLC .EQU 03H +M_CLS .EQU 0CH + + +loadAddr .EQU 0D000h ; CP/M load address +numSecs .EQU 24 ; Number of 512 sectors to be loaded + + +RTS_HIGH .EQU 0D5H +RTS_LOW .EQU 095H + +ACIA0_D .EQU $81 +ACIA0_C .EQU $80 +ACIA1_D .EQU $83 +ACIA1_C .EQU $82 + +SD_DATA .EQU 088H +SD_CONTROL .EQU 089H +SD_STATUS .EQU 089H +SD_LBA0 .EQU 08AH +SD_LBA1 .EQU 08BH +SD_LBA2 .EQU 08CH + + .ORG $3000 + +primaryIO .ds 1 +secNo .ds 1 +dmaAddr .ds 2 + +lba0 .DB 00h +lba1 .DB 00h +lba2 .DB 00h +lba3 .DB 00h + +stackSpace .ds 32 +M_STACK .EQU $ ; Stack top + + +;------------------------------------------------------------------------------ +; START OF MONITOR ROM +;------------------------------------------------------------------------------ + +MON .ORG $0000 ; MONITOR ROM RESET VECTOR +;------------------------------------------------------------------------------ +; Reset +;------------------------------------------------------------------------------ +RST00 DI ;Disable INTerrupts + JP M_INIT ;Initialize Hardware and go + NOP + NOP + NOP + NOP +;------------------------------------------------------------------------------ +; TX a character over RS232 wait for TXDONE first. +;------------------------------------------------------------------------------ +RST08 JP conout + NOP + NOP + NOP + NOP + NOP +;------------------------------------------------------------------------------ +; RX a character from buffer wait until char ready. +;------------------------------------------------------------------------------ +RST10 JP conin + NOP + NOP + NOP + NOP + NOP +;------------------------------------------------------------------------------ +; Check input buffer status +;------------------------------------------------------------------------------ +RST18 JP CKINCHAR + + +;------------------------------------------------------------------------------ +; Console input routine +; Use the "primaryIO" flag to determine which input port to monitor. +;------------------------------------------------------------------------------ +conin: + LD A,(primaryIO) + CP 0 + JR NZ,coninB +coninA: + +waitForCharA: + call ckincharA + JR Z, waitForCharA + IN A,(ACIA0_D) + RET ; Char ready in A + +coninB: + +waitForCharB: + call ckincharB + JR Z, waitForCharB + IN A,(ACIA1_D) + RET ; Char ready in A + +;------------------------------------------------------------------------------ +; Console output routine +; Use the "primaryIO" flag to determine which output port to send a character. +;------------------------------------------------------------------------------ +conout: PUSH AF ; Store character + LD A,(primaryIO) + CP 0 + JR NZ,conoutB1 + JR conoutA1 +conoutA: + PUSH AF + +conoutA1: CALL CKACIA0 ; See if ACIA channel A is finished transmitting + JR Z,conoutA1 ; Loop until ACIA flag signals ready + POP AF ; RETrieve character + OUT (ACIA0_D),A ; OUTput the character + RET + +conoutB: + PUSH AF + +conoutB1: CALL CKACIA1 ; See if ACIA channel B is finished transmitting + JR Z,conoutB1 ; Loop until ACIA flag signals ready + POP AF ; RETrieve character + OUT (ACIA1_D),A ; OUTput the character + RET + +;------------------------------------------------------------------------------ +; I/O status check routine +; Use the "primaryIO" flag to determine which port to check. +;------------------------------------------------------------------------------ +CKACIA0 + IN A,(ACIA0_C) ; Status byte D1=TX Buff Empty, D0=RX char ready + RRCA ; Rotates RX status into Carry Flag, + BIT 0,A ; Set Zero flag if still transmitting character + RET + +CKACIA1 + IN A,(ACIA1_C) ; Status byte D1=TX Buff Empty, D0=RX char ready + RRCA ; Rotates RX status into Carry Flag, + BIT 0,A ; Set Zero flag if still transmitting character + RET + +;------------------------------------------------------------------------------ +; Check if there is a character in the input buffer +; Use the "primaryIO" flag to determine which port to check. +;------------------------------------------------------------------------------ +CKINCHAR + LD A,(primaryIO) + CP 0 + JR NZ,ckincharB + +ckincharA: + + IN A,(ACIA0_C) ; Status byte + AND $01 + CP $0 ; Z flag set if no char + RET + +ckincharB: + + IN A,(ACIA1_C) ; Status byte + AND $01 + CP $0 ; Z flag set if no char + RET + +;------------------------------------------------------------------------------ +; Filtered Character I/O +;------------------------------------------------------------------------------ + +RDCHR RST 10H + CP LF + JR Z,RDCHR ; Ignore LF + CP ESC + JR NZ,RDCHR1 + LD A,CTRLC ; Change ESC to CTRL-C +RDCHR1 RET + +WRCHR CP CR + JR Z,WRCRLF ; When CR, write CRLF + CP M_CLS + JR Z,WR ; Allow write of "CLS" + CP ' ' ; Don't write out any other control codes + JR C,NOWR ; ie. < space +WR RST 08H +NOWR RET + +WRCRLF LD A,CR + RST 08H + LD A,LF + RST 08H + LD A,CR + RET + + +;------------------------------------------------------------------------------ +; Initialise hardware and start main loop +;------------------------------------------------------------------------------ +M_INIT LD SP,M_STACK ; Set the Stack Pointer + + LD A,RTS_LOW + OUT (ACIA0_C),A ; Initialise ACIA0 + OUT (ACIA1_C),A ; Initialise ACIA1 + ; Display the "Press space to start" message on both consoles + LD A,$00 + LD (primaryIO),A + LD HL,INITTXT + CALL M_PRINT + LD A,$01 + LD (primaryIO),A + LD HL,INITTXT + CALL M_PRINT + + ; Wait until space is in one of the buffers to determine the active console + +waitForSpace: + + CALL ckincharA + jr Z,notInA + LD A,$00 + LD (primaryIO),A + CALL conin + CP ' ' + JP NZ, waitForSpace + JR spacePressed + +notInA: + CALL ckincharB + JR Z,waitForSpace + LD A,$01 + LD (primaryIO),A + CALL conin + CP ' ' + JP NZ, waitForSpace + JR spacePressed + +spacePressed: + + ; Clear message on both consoles + LD A,$0C + CALL conoutA + CALL conoutB + + ; primaryIO is now set to the channel where SPACE was pressed + + + CALL TXCRLF ; TXCRLF + LD HL,M_SIGNON ; Print SIGNON message + CALL M_PRINT + +;------------------------------------------------------------------------------ +; Monitor command loop +;------------------------------------------------------------------------------ +MAIN LD HL,MAIN ; Save entry point for Monitor + PUSH HL ; This is the return address +MAIN0 CALL TXCRLF ; Entry point for Monitor, Normal + LD A,'>' ; Get a ">" + RST 08H ; print it + +MAIN1 CALL RDCHR ; Get a character from the input port + CP ' ' ; or less? + JR C,MAIN1 ; Go back + + CP ':' ; ":"? + JP Z,LOAD ; First character of a HEX load + + CALL WRCHR ; Print char on console + + AND $5F ; Make character uppercase + + CP 'B' + JP Z,BASIC + + CP 'G' + JP Z,M_GOTO + + CP 'X' + JP Z,CPMLOAD + + LD A,'?' ; Get a "?" + RST 08H ; Print it + JR MAIN0 + +;------------------------------------------------------------------------------ +; Print string of characters to Serial A until byte=$00, WITH CR, LF +;------------------------------------------------------------------------------ +M_PRINT LD A,(HL) ; Get character + OR A ; Is it $00 ? + RET Z ; Then RETurn on terminator + RST 08H ; Print it + INC HL ; Next Character + JR M_PRINT ; Continue until $00 + + +TXCRLF LD A,$0D ; + RST 08H ; Print character + LD A,$0A ; + RST 08H ; Print character + RET + +;------------------------------------------------------------------------------ +; Get a character from the console, must be $20-$7F to be valid (no control characters) +; and breaks with the Zero Flag set +;------------------------------------------------------------------------------ +M_GETCHR CALL RDCHR ; RX a Character + CP $03 ; User break? + RET Z + CP $20 ; or better? + JR C,M_GETCHR ; Do it again until we get something usable + RET +;------------------------------------------------------------------------------ +; Gets two ASCII characters from the console (assuming them to be HEX 0-9 A-F) +; Moves them into B and C, converts them into a byte value in A and updates a +; Checksum value in E +;------------------------------------------------------------------------------ +GET2 CALL M_GETCHR ; Get us a valid character to work with + LD B,A ; Load it in B + CALL M_GETCHR ; Get us another character + LD C,A ; load it in C + CALL BCTOA ; Convert ASCII to byte + LD C,A ; Build the checksum + LD A,E + SUB C ; The checksum should always equal zero when checked + LD E,A ; Save the checksum back where it came from + LD A,C ; Retrieve the byte and go back + RET +;------------------------------------------------------------------------------ +; Gets four Hex characters from the console, converts them to values in HL +;------------------------------------------------------------------------------ +GETHL LD HL,$0000 ; Gets xxxx but sets Carry Flag on any Terminator + CALL ECHO ; RX a Character + CP $0D ; ? + JR NZ,GETX2 ; other key +SETCY SCF ; Set Carry Flag + RET ; and Return to main program +;------------------------------------------------------------------------------ +; This routine converts last four hex characters (0-9 A-F) user types into a value in HL +; Rotates the old out and replaces with the new until the user hits a terminating character +;------------------------------------------------------------------------------ +GETX LD HL,$0000 ; CLEAR HL +GETX1 CALL ECHO ; RX a character from the console + CP $0D ; + RET Z ; quit + CP $2C ; <,> can be used to safely quit for multiple entries + RET Z ; (Like filling both DE and HL from the user) +GETX2 CP $03 ; Likewise, a will terminate clean, too, but + JR Z,SETCY ; It also sets the Carry Flag for testing later. + ADD HL,HL ; Otherwise, rotate the previous low nibble to high + ADD HL,HL ; rather slowly + ADD HL,HL ; until we get to the top + ADD HL,HL ; and then we can continue on. + SUB $30 ; Convert ASCII to byte value + CP $0A ; Are we in the 0-9 range? + JR C,GETX3 ; Then we just need to sub $30, but if it is A-F + SUB $07 ; We need to take off 7 more to get the value down to +GETX3 AND $0F ; to the right hex value + ADD A,L ; Add the high nibble to the low + LD L,A ; Move the byte back to A + JR GETX1 ; and go back for next character until he terminates +;------------------------------------------------------------------------------ +; Convert ASCII characters in B C registers to a byte value in A +;------------------------------------------------------------------------------ +BCTOA LD A,B ; Move the hi order byte to A + SUB $30 ; Take it down from Ascii + CP $0A ; Are we in the 0-9 range here? + JR C,BCTOA1 ; If so, get the next nybble + SUB $07 ; But if A-F, take it down some more +BCTOA1 RLCA ; Rotate the nybble from low to high + RLCA ; One bit at a time + RLCA ; Until we + RLCA ; Get there with it + LD B,A ; Save the converted high nybble + LD A,C ; Now get the low order byte + SUB $30 ; Convert it down from Ascii + CP $0A ; 0-9 at this point? + JR C,BCTOA2 ; Good enough then, but + SUB $07 ; Take off 7 more if it's A-F +BCTOA2 ADD A,B ; Add in the high order nybble + RET + +;------------------------------------------------------------------------------ +; Get a character and echo it back to the user +;------------------------------------------------------------------------------ +ECHO CALL RDCHR + CALL WRCHR + RET + +;------------------------------------------------------------------------------ +; GOTO command +;------------------------------------------------------------------------------ +M_GOTO CALL GETHL ; ENTRY POINT FOR oto addr. Get XXXX from user. + RET C ; Return if invalid + PUSH HL + RET ; Jump to HL address value + +;------------------------------------------------------------------------------ +; LOAD Intel Hex format file from the console. +; [Intel Hex Format is: +; 1) Colon (Frame 0) +; 2) Record Length Field (Frames 1 and 2) +; 3) Load Address Field (Frames 3,4,5,6) +; 4) Record Type Field (Frames 7 and 8) +; 5) Data Field (Frames 9 to 9+2*(Record Length)-1 +; 6) Checksum Field - Sum of all byte values from Record Length to and +; including Checksum Field = 0 ] +;------------------------------------------------------------------------------ +LOAD LD E,0 ; First two Characters is the Record Length Field + CALL GET2 ; Get us two characters into BC, convert it to a byte + LD D,A ; Load Record Length count into D + CALL GET2 ; Get next two characters, Memory Load Address + LD H,A ; put value in H register. + CALL GET2 ; Get next two characters, Memory Load Address + LD L,A ; put value in L register. + CALL GET2 ; Get next two characters, Record Field Type + CP $01 ; Record Field Type 00 is Data, 01 is End of File + JR NZ,LOAD2 ; Must be the end of that file + CALL GET2 ; Get next two characters, assemble into byte + LD A,E ; Recall the Checksum byte + AND A ; Is it Zero? + JR Z,LOAD00 ; Print footer reached message + JR LOADERR ; Checksums don't add up, Error out + +LOAD2 LD A,D ; Retrieve line character counter + AND A ; Are we done with this line? + JR Z,LOAD3 ; Get two more ascii characters, build a byte and checksum + CALL GET2 ; Get next two chars, convert to byte in A, checksum it + LD (HL),A ; Move converted byte in A to memory location + INC HL ; Increment pointer to next memory location + LD A,'.' ; Print out a "." for every byte loaded + RST 08H ; + DEC D ; Decrement line character counter + JR LOAD2 ; and keep loading into memory until line is complete + +LOAD3 CALL GET2 ; Get two chars, build byte and checksum + LD A,E ; Check the checksum value + AND A ; Is it zero? + RET Z + +LOADERR LD HL,CKSUMERR ; Get "Checksum Error" message + CALL M_PRINT ; Print Message from (HL) and terminate the load + RET + +LOAD00 LD HL,LDETXT ; Print load complete message + CALL M_PRINT + RET + +;------------------------------------------------------------------------------ +; Start BASIC command +;------------------------------------------------------------------------------ +BASIC + LD HL,M_BASTXT + CALL M_PRINT + CALL M_GETCHR + RET Z ; Cancel if CTRL-C + AND $5F ; uppercase + CP 'C' + JP Z,COLD + CP 'W' + JP Z,WARM + RET + +;------------------------------------------------------------------------------ +; CP/M load command +;------------------------------------------------------------------------------ +CPMLOAD + + LD HL,CPMTXT + CALL M_PRINT + CALL M_GETCHR + RET Z ; Cancel if CTRL-C + AND $5F ; uppercase + CP 'Y' + JP Z,CPMLOAD2 + RET +CPMTXT + .BYTE $0D,$0A + .TEXT "Boot CP/M?" + .BYTE $00 + +CPMTXT2 + .BYTE $0D,$0A + .TEXT "Loading CP/M..." + .BYTE $0D,$0A,$00 + +CPMLOAD2 + LD HL,CPMTXT2 + CALL M_PRINT + + LD B,numSecs + + LD A,0 + LD (lba0),A + ld (lba1),A + ld (lba2),A + ld (lba3),A + + LD HL,loadAddr + LD (dmaAddr),HL +processSectors: + + call readhst + + LD DE,0200H + LD HL,(dmaAddr) + ADD HL,DE + LD (dmaAddr),HL + LD A,(lba0) + INC A + LD (lba0),A + + djnz processSectors + +; Start CP/M using entry at top of BIOS +; The current active console stream ID is pushed onto the stack +; to allow the CBIOS to pick it up +; 0 = ACIA0, 1 = ACIA1 + + ld A,(primaryIO) + PUSH AF + ld HL,($FFFE) + jp (HL) + + +;------------------------------------------------------------------------------ +; ROUTINES AS USED IN BIOS +;------------------------------------------------------------------------------ + +;================================================================================================ +; Convert track/head/sector into LBA for physical access to the disk +;================================================================================================ +setLBAaddr: + ; Transfer LBA to disk (LBA3 not used on SD card) + LD A,(lba2) + OUT (SD_LBA2),A + LD A,(lba1) + OUT (SD_LBA1),A + LD A,(lba0) + OUT (SD_LBA0),A + RET + +;================================================================================================ +; Read physical sector from host +;================================================================================================ + +readhst: + PUSH AF + PUSH BC + PUSH HL + +rdWait1: IN A,(SD_STATUS) + CP 128 + JR NZ,rdWait1 + + CALL setLBAaddr + + LD A,$00 ; 00 = Read block + OUT (SD_CONTROL),A + + LD c,4 +; LD HL,hstbuf +rd4secs: + LD b,128 +rdByte: + +rdWait2: IN A,(SD_STATUS) + CP 224 ; Read byte waiting + JR NZ,rdWait2 + + IN A,(SD_DATA) + + LD (HL),A + INC HL + dec b + JR NZ, rdByte + dec c + JR NZ,rd4secs + + POP HL + POP BC + POP AF + +; XOR a +; ld (erflag),a + RET + +;------------------------------------------------------------------------------ +; END OF ROUTINES AS USED IN BIOS +;------------------------------------------------------------------------------ + + +M_SIGNON .BYTE "CP/M Boot ROM 2.0" + .BYTE " by G. Searle" + .BYTE $0D,$0A + .BYTE $0D,$0A + .TEXT "BC or BW - ROM BASIC Cold/Warm" + .BYTE $0D,$0A + .TEXT "X - Boot CP/M (load $D000-$FFFF)" + .BYTE $0D,$0A + .TEXT ":nnnn... - Load Intel-Hex file record" + .BYTE $0D,$0A + .TEXT "Gnnnn - Run loc nnnn" + .BYTE $0D,$0A + .BYTE $00 + +M_BASTXT + .BYTE $0D,$0A + .TEXT "Cold or warm?" + .BYTE $0D,$0A,$00 + +CKSUMERR .BYTE "Checksum error" + .BYTE $0D,$0A,$00 + +INITTXT + .BYTE $0C + .TEXT "Press [SPACE] to activate console" + .BYTE $0D,$0A, $00 + +LDETXT + .TEXT "Complete" + .BYTE $0D,$0A, $00 + +;=========================================================================================================================== + +; NASCOM ROM BASIC Ver 4.7, (C) 1978 Microsoft +; Scanned from source published in 80-BUS NEWS from Vol 2, Issue 3 +; (May-June 1983) to Vol 3, Issue 3 (May-June 1984) +; Adapted for the freeware Zilog Macro Assembler 2.10 to produce +; the original ROM code (checksum A934H). PA + +; GENERAL EQUATES + +CTRLC .EQU 03H ; Control "C" +CTRLG .EQU 07H ; Control "G" +BKSP .EQU 08H ; Back space +LF .EQU 0AH ; Line feed +CS .EQU 0CH ; Clear screen +CR .EQU 0DH ; Carriage return +CTRLO .EQU 0FH ; Control "O" +CTRLQ .EQU 11H ; Control "Q" +CTRLR .EQU 12H ; Control "R" +CTRLS .EQU 13H ; Control "S" +CTRLU .EQU 15H ; Control "U" +ESC .EQU 1BH ; Escape +DEL .EQU 7FH ; Delete + +; BASIC WORK SPACE LOCATIONS + +WRKSPC .EQU 30B0H ; BASIC Work space +USR .EQU WRKSPC+3H ; "USR (x)" jump +OUTSUB .EQU WRKSPC+6H ; "OUT p,n" +OTPORT .EQU WRKSPC+7H ; Port (p) +DIVSUP .EQU WRKSPC+9H ; Division support routine +DIV1 .EQU WRKSPC+0AH ; <- Values +DIV2 .EQU WRKSPC+0EH ; <- to +DIV3 .EQU WRKSPC+12H ; <- be +DIV4 .EQU WRKSPC+15H ; <-inserted +SEED .EQU WRKSPC+17H ; Random number seed +LSTRND .EQU WRKSPC+3AH ; Last random number +INPSUB .EQU WRKSPC+3EH ; #INP (x)" Routine +INPORT .EQU WRKSPC+3FH ; PORT (x) +NULLS .EQU WRKSPC+41H ; Number of nulls +LWIDTH .EQU WRKSPC+42H ; Terminal width +COMMAN .EQU WRKSPC+43H ; Width for commas +NULFLG .EQU WRKSPC+44H ; Null after input byte flag +CTLOFG .EQU WRKSPC+45H ; Control "O" flag +LINESC .EQU WRKSPC+46H ; Lines counter +LINESN .EQU WRKSPC+48H ; Lines number +CHKSUM .EQU WRKSPC+4AH ; Array load/save check sum +NMIFLG .EQU WRKSPC+4CH ; Flag for NMI break routine +BRKFLG .EQU WRKSPC+4DH ; Break flag +RINPUT .EQU WRKSPC+4EH ; Input reflection +POINT .EQU WRKSPC+51H ; "POINT" reflection (unused) +PSET .EQU WRKSPC+54H ; "SET" reflection +RESET .EQU WRKSPC+57H ; "RESET" reflection +STRSPC .EQU WRKSPC+5AH ; Bottom of string space +LINEAT .EQU WRKSPC+5CH ; Current line number +BASTXT .EQU WRKSPC+5EH ; Pointer to start of program +BUFFER .EQU WRKSPC+61H ; Input buffer +STACK .EQU WRKSPC+66H ; Initial stack +CURPOS .EQU WRKSPC+0ABH ; Character position on line +LCRFLG .EQU WRKSPC+0ACH ; Locate/Create flag +TYPE .EQU WRKSPC+0ADH ; Data type flag +DATFLG .EQU WRKSPC+0AEH ; Literal statement flag +LSTRAM .EQU WRKSPC+0AFH ; Last available RAM +TMSTPT .EQU WRKSPC+0B1H ; Temporary string pointer +TMSTPL .EQU WRKSPC+0B3H ; Temporary string pool +TMPSTR .EQU WRKSPC+0BFH ; Temporary string +STRBOT .EQU WRKSPC+0C3H ; Bottom of string space +CUROPR .EQU WRKSPC+0C5H ; Current operator in EVAL +LOOPST .EQU WRKSPC+0C7H ; First statement of loop +DATLIN .EQU WRKSPC+0C9H ; Line of current DATA item +FORFLG .EQU WRKSPC+0CBH ; "FOR" loop flag +LSTBIN .EQU WRKSPC+0CCH ; Last byte entered +READFG .EQU WRKSPC+0CDH ; Read/Input flag +BRKLIN .EQU WRKSPC+0CEH ; Line of break +NXTOPR .EQU WRKSPC+0D0H ; Next operator in EVAL +ERRLIN .EQU WRKSPC+0D2H ; Line of error +CONTAD .EQU WRKSPC+0D4H ; Where to CONTinue +PROGND .EQU WRKSPC+0D6H ; End of program +VAREND .EQU WRKSPC+0D8H ; End of variables +ARREND .EQU WRKSPC+0DAH ; End of arrays +NXTDAT .EQU WRKSPC+0DCH ; Next data item +FNRGNM .EQU WRKSPC+0DEH ; Name of FN argument +FNARG .EQU WRKSPC+0E0H ; FN argument value +FPREG .EQU WRKSPC+0E4H ; Floating point register +FPEXP .EQU FPREG+3 ; Floating point exponent +SGNRES .EQU WRKSPC+0E8H ; Sign of result +PBUFF .EQU WRKSPC+0E9H ; Number print buffer +MULVAL .EQU WRKSPC+0F6H ; Multiplier +PROGST .EQU WRKSPC+0F9H ; Start of program text area +STLOOK .EQU WRKSPC+15DH ; Start of memory test + +; BASIC ERROR CODE VALUES + +NF .EQU 00H ; NEXT without FOR +SN .EQU 02H ; Syntax error +RG .EQU 04H ; RETURN without GOSUB +OD .EQU 06H ; Out of DATA +FC .EQU 08H ; Function call error +OV .EQU 0AH ; Overflow +OM .EQU 0CH ; Out of memory +UL .EQU 0EH ; Undefined line number +BS .EQU 10H ; Bad subscript +DD .EQU 12H ; Re-DIMensioned array +DZ .EQU 14H ; Division by zero (/0) +ID .EQU 16H ; Illegal direct +TM .EQU 18H ; Type miss-match +OS .EQU 1AH ; Out of string space +LS .EQU 1CH ; String too long +ST .EQU 1EH ; String formula too complex +CN .EQU 20H ; Can't CONTinue +UF .EQU 22H ; UnDEFined FN function +MO .EQU 24H ; Missing operand +HX .EQU 26H ; HEX error +BN .EQU 28H ; BIN error + +; .ORG 00396H + +COLD: JP STARTB ; Jump for cold start +WARM: JP WARMST ; Jump for warm start +STARTB: + LD IX,0 ; Flag cold start + JP CSTART ; Jump to initialise + + .WORD DEINT ; Get integer -32768 to 32767 + .WORD ABPASS ; Return integer in AB + + +CSTART: LD HL,WRKSPC ; Start of workspace RAM + LD SP,HL ; Set up a temporary stack + JP INITST ; Go to initialise + +INIT: LD DE,INITAB ; Initialise workspace + LD B,INITBE-INITAB+3; Bytes to copy + LD HL,WRKSPC ; Into workspace RAM +COPY: LD A,(DE) ; Get source + LD (HL),A ; To destination + INC HL ; Next destination + INC DE ; Next source + DEC B ; Count bytes + JP NZ,COPY ; More to move + LD SP,HL ; Temporary stack + CALL CLREG ; Clear registers and stack + CALL PRNTCRLF ; Output CRLF + LD (BUFFER+72+1),A ; Mark end of buffer + LD (PROGST),A ; Initialise program area +MSIZE: LD HL,MEMMSG ; Point to message + CALL PRS ; Output "Memory size" + CALL PROMPT ; Get input with '?' + CALL GETCHR ; Get next character + OR A ; Set flags + JP NZ,TSTMEM ; If number - Test if RAM there + LD HL,STLOOK ; Point to start of RAM +MLOOP: INC HL ; Next byte + LD A,H ; Above address FFFF ? + OR L + JP Z,SETTOP ; Yes - 64K RAM + LD A,(HL) ; Get contents + LD B,A ; Save it + CPL ; Flip all bits + LD (HL),A ; Put it back + CP (HL) ; RAM there if same + LD (HL),B ; Restore old contents + JP Z,MLOOP ; If RAM - test next byte + JP SETTOP ; Top of RAM found + +TSTMEM: CALL ATOH ; Get high memory into DE + OR A ; Set flags on last byte + JP NZ,SNERR ; ?SN Error if bad character + EX DE,HL ; Address into HL + DEC HL ; Back one byte + LD A,11011001B ; Test byte + LD B,(HL) ; Get old contents + LD (HL),A ; Load test byte + CP (HL) ; RAM there if same + LD (HL),B ; Restore old contents + JP NZ,MSIZE ; Ask again if no RAM + +SETTOP: DEC HL ; Back one byte + LD DE,STLOOK-1 ; See if enough RAM + CALL CPDEHL ; Compare DE with HL + JP C,MSIZE ; Ask again if not enough RAM + LD DE,0-50 ; 50 Bytes string space + LD (LSTRAM),HL ; Save last available RAM + ADD HL,DE ; Allocate string space + LD (STRSPC),HL ; Save string space + CALL CLRPTR ; Clear program area + LD HL,(STRSPC) ; Get end of memory + LD DE,0-17 ; Offset for free bytes + ADD HL,DE ; Adjust HL + LD DE,PROGST ; Start of program text + LD A,L ; Get LSB + SUB E ; Adjust it + LD L,A ; Re-save + LD A,H ; Get MSB + SBC A,D ; Adjust it + LD H,A ; Re-save + PUSH HL ; Save bytes free + LD HL,SIGNON ; Sign-on message + CALL PRS ; Output string + POP HL ; Get bytes free back + CALL PRNTHL ; Output amount of free memory + LD HL,BFREE ; " Bytes free" message + CALL PRS ; Output string + +WARMST: LD SP,STACK ; Temporary stack +BRKRET: CALL CLREG ; Clear registers and stack + JP PRNTOK ; Go to get command line + +BFREE: .BYTE " Bytes free",CR,LF,0,0 + +SIGNON: .BYTE "Z80 BASIC Ver 4.7b",CR,LF + .BYTE "Copyright ",40,"C",41 + .BYTE " 1978 by Microsoft",CR,LF,0,0 + +MEMMSG: .BYTE "Memory top",0 + +; FUNCTION ADDRESS TABLE + +FNCTAB: .WORD SGN + .WORD INT + .WORD ABS + .WORD USR + .WORD FRE + .WORD INP + .WORD POS + .WORD SQR + .WORD RND + .WORD LOG + .WORD EXP + .WORD COS + .WORD SIN + .WORD TAN + .WORD ATN + .WORD PEEK + .WORD DEEK + .WORD POINT + .WORD LEN + .WORD STR + .WORD VAL + .WORD ASC + .WORD CHR + .WORD HEX + .WORD BIN + .WORD LEFT + .WORD RIGHT + .WORD MID + +; RESERVED WORD LIST + +WORDS: .BYTE 'E'+80H,"ND" + .BYTE 'F'+80H,"OR" + .BYTE 'N'+80H,"EXT" + .BYTE 'D'+80H,"ATA" + .BYTE 'I'+80H,"NPUT" + .BYTE 'D'+80H,"IM" + .BYTE 'R'+80H,"EAD" + .BYTE 'L'+80H,"ET" + .BYTE 'G'+80H,"OTO" + .BYTE 'R'+80H,"UN" + .BYTE 'I'+80H,"F" + .BYTE 'R'+80H,"ESTORE" + .BYTE 'G'+80H,"OSUB" + .BYTE 'R'+80H,"ETURN" + .BYTE 'R'+80H,"EM" + .BYTE 'S'+80H,"TOP" + .BYTE 'O'+80H,"UT" + .BYTE 'O'+80H,"N" + .BYTE 'N'+80H,"ULL" + .BYTE 'W'+80H,"AIT" + .BYTE 'D'+80H,"EF" + .BYTE 'P'+80H,"OKE" + .BYTE 'D'+80H,"OKE" + .BYTE 'S'+80H,"CREEN" + .BYTE 'L'+80H,"INES" + .BYTE 'C'+80H,"LS" + .BYTE 'W'+80H,"IDTH" + .BYTE 'M'+80H,"ONITOR" + .BYTE 'S'+80H,"ET" + .BYTE 'R'+80H,"ESET" + .BYTE 'P'+80H,"RINT" + .BYTE 'C'+80H,"ONT" + .BYTE 'L'+80H,"IST" + .BYTE 'C'+80H,"LEAR" + .BYTE 'C'+80H,"LOAD" + .BYTE 'C'+80H,"SAVE" + .BYTE 'N'+80H,"EW" + + .BYTE 'T'+80H,"AB(" + .BYTE 'T'+80H,"O" + .BYTE 'F'+80H,"N" + .BYTE 'S'+80H,"PC(" + .BYTE 'T'+80H,"HEN" + .BYTE 'N'+80H,"OT" + .BYTE 'S'+80H,"TEP" + + .BYTE '+'+80H + .BYTE '-'+80H + .BYTE '*'+80H + .BYTE '/'+80H + .BYTE '^'+80H + .BYTE 'A'+80H,"ND" + .BYTE 'O'+80H,"R" + .BYTE '>'+80H + .BYTE '='+80H + .BYTE '<'+80H + + .BYTE 'S'+80H,"GN" + .BYTE 'I'+80H,"NT" + .BYTE 'A'+80H,"BS" + .BYTE 'U'+80H,"SR" + .BYTE 'F'+80H,"RE" + .BYTE 'I'+80H,"NP" + .BYTE 'P'+80H,"OS" + .BYTE 'S'+80H,"QR" + .BYTE 'R'+80H,"ND" + .BYTE 'L'+80H,"OG" + .BYTE 'E'+80H,"XP" + .BYTE 'C'+80H,"OS" + .BYTE 'S'+80H,"IN" + .BYTE 'T'+80H,"AN" + .BYTE 'A'+80H,"TN" + .BYTE 'P'+80H,"EEK" + .BYTE 'D'+80H,"EEK" + .BYTE 'P'+80H,"OINT" + .BYTE 'L'+80H,"EN" + .BYTE 'S'+80H,"TR$" + .BYTE 'V'+80H,"AL" + .BYTE 'A'+80H,"SC" + .BYTE 'C'+80H,"HR$" + .BYTE 'H'+80H,"EX$" + .BYTE 'B'+80H,"IN$" + .BYTE 'L'+80H,"EFT$" + .BYTE 'R'+80H,"IGHT$" + .BYTE 'M'+80H,"ID$" + .BYTE 80H ; End of list marker + +; KEYWORD ADDRESS TABLE + +WORDTB: .WORD PEND + .WORD FOR + .WORD NEXT + .WORD DATA + .WORD INPUT + .WORD DIM + .WORD READ + .WORD LET + .WORD GOTO + .WORD RUN + .WORD IF + .WORD RESTOR + .WORD GOSUB + .WORD RETURN + .WORD REM + .WORD STOP + .WORD POUT + .WORD ON + .WORD NULL + .WORD WAIT + .WORD DEF + .WORD POKE + .WORD DOKE + .WORD REM + .WORD LINES + .WORD CLS + .WORD WIDTH + .WORD MONITR + .WORD PSET + .WORD RESET + .WORD PRINT + .WORD CONT + .WORD LIST + .WORD CLEAR + .WORD REM + .WORD REM + .WORD NEW + +; RESERVED WORD TOKEN VALUES + +ZEND .EQU 080H ; END +ZFOR .EQU 081H ; FOR +ZDATA .EQU 083H ; DATA +ZGOTO .EQU 088H ; GOTO +ZGOSUB .EQU 08CH ; GOSUB +ZREM .EQU 08EH ; REM +ZPRINT .EQU 09EH ; PRINT +ZNEW .EQU 0A4H ; NEW + +ZTAB .EQU 0A5H ; TAB +ZTO .EQU 0A6H ; TO +ZFN .EQU 0A7H ; FN +ZSPC .EQU 0A8H ; SPC +ZTHEN .EQU 0A9H ; THEN +ZNOT .EQU 0AAH ; NOT +ZSTEP .EQU 0ABH ; STEP + +ZPLUS .EQU 0ACH ; + +ZMINUS .EQU 0ADH ; - +ZTIMES .EQU 0AEH ; * +ZDIV .EQU 0AFH ; / +ZOR .EQU 0B2H ; OR +ZGTR .EQU 0B3H ; > +ZEQUAL .EQU 0B4H ; M +ZLTH .EQU 0B5H ; < +ZSGN .EQU 0B6H ; SGN +ZPOINT .EQU 0C7H ; POINT +ZLEFT .EQU 0CDH +2 ; LEFT$ + +; ARITHMETIC PRECEDENCE TABLE + +PRITAB: .BYTE 79H ; Precedence value + .WORD PADD ; FPREG = + FPREG + + .BYTE 79H ; Precedence value + .WORD PSUB ; FPREG = - FPREG + + .BYTE 7CH ; Precedence value + .WORD MULT ; PPREG = * FPREG + + .BYTE 7CH ; Precedence value + .WORD DIV ; FPREG = / FPREG + + .BYTE 7FH ; Precedence value + .WORD POWER ; FPREG = ^ FPREG + + .BYTE 50H ; Precedence value + .WORD PAND ; FPREG = AND FPREG + + .BYTE 46H ; Precedence value + .WORD POR ; FPREG = OR FPREG + +; BASIC ERROR CODE LIST + +ERRORS: .BYTE "NF" ; NEXT without FOR + .BYTE "SN" ; Syntax error + .BYTE "RG" ; RETURN without GOSUB + .BYTE "OD" ; Out of DATA + .BYTE "FC" ; Illegal function call + .BYTE "OV" ; Overflow error + .BYTE "OM" ; Out of memory + .BYTE "UL" ; Undefined line + .BYTE "BS" ; Bad subscript + .BYTE "DD" ; Re-DIMensioned array + .BYTE "/0" ; Division by zero + .BYTE "ID" ; Illegal direct + .BYTE "TM" ; Type mis-match + .BYTE "OS" ; Out of string space + .BYTE "LS" ; String too long + .BYTE "ST" ; String formula too complex + .BYTE "CN" ; Can't CONTinue + .BYTE "UF" ; Undefined FN function + .BYTE "MO" ; Missing operand + .BYTE "HX" ; HEX error + .BYTE "BN" ; BIN error + +; INITIALISATION TABLE ------------------------------------------------------- + +INITAB: JP WARMST ; Warm start jump + JP FCERR ; "USR (X)" jump (Set to Error) + OUT (0),A ; "OUT p,n" skeleton + RET + SUB 0 ; Division support routine + LD L,A + LD A,H + SBC A,0 + LD H,A + LD A,B + SBC A,0 + LD B,A + LD A,0 + RET + .BYTE 0,0,0 ; Random number seed table used by RND + .BYTE 035H,04AH,0CAH,099H ;-2.65145E+07 + .BYTE 039H,01CH,076H,098H ; 1.61291E+07 + .BYTE 022H,095H,0B3H,098H ;-1.17691E+07 + .BYTE 00AH,0DDH,047H,098H ; 1.30983E+07 + .BYTE 053H,0D1H,099H,099H ;-2-01612E+07 + .BYTE 00AH,01AH,09FH,098H ;-1.04269E+07 + .BYTE 065H,0BCH,0CDH,098H ;-1.34831E+07 + .BYTE 0D6H,077H,03EH,098H ; 1.24825E+07 + .BYTE 052H,0C7H,04FH,080H ; Last random number + IN A,(0) ; INP (x) skeleton + RET + .BYTE 1 ; POS (x) number (1) + .BYTE 255 ; Terminal width (255 = no auto CRLF) + .BYTE 28 ; Width for commas (3 columns) + .BYTE 0 ; No nulls after input bytes + .BYTE 0 ; Output enabled (^O off) + .WORD 20 ; Initial lines counter + .WORD 20 ; Initial lines number + .WORD 0 ; Array load/save check sum + .BYTE 0 ; Break not by NMI + .BYTE 0 ; Break flag + JP TTYLIN ; Input reflection (set to TTY) + JP $0000 ; POINT reflection unused + JP $0000 ; SET reflection + JP $0000 ; RESET reflection + .WORD STLOOK ; Temp string space + .WORD -2 ; Current line number (cold) + .WORD PROGST+1 ; Start of program text +INITBE: + +; END OF INITIALISATION TABLE --------------------------------------------------- + +ERRMSG: .BYTE " Error",0 +INMSG: .BYTE " in ",0 +ZERBYT .EQU $-1 ; A zero byte +OKMSG: .BYTE "Ok",CR,LF,0,0 +BRKMSG: .BYTE "Break",0 + +BAKSTK: LD HL,4 ; Look for "FOR" block with + ADD HL,SP ; same index as specified +LOKFOR: LD A,(HL) ; Get block ID + INC HL ; Point to index address + CP ZFOR ; Is it a "FOR" token + RET NZ ; No - exit + LD C,(HL) ; BC = Address of "FOR" index + INC HL + LD B,(HL) + INC HL ; Point to sign of STEP + PUSH HL ; Save pointer to sign + LD L,C ; HL = address of "FOR" index + LD H,B + LD A,D ; See if an index was specified + OR E ; DE = 0 if no index specified + EX DE,HL ; Specified index into HL + JP Z,INDFND ; Skip if no index given + EX DE,HL ; Index back into DE + CALL CPDEHL ; Compare index with one given +INDFND: LD BC,16-3 ; Offset to next block + POP HL ; Restore pointer to sign + RET Z ; Return if block found + ADD HL,BC ; Point to next block + JP LOKFOR ; Keep on looking + +MOVUP: CALL ENFMEM ; See if enough memory +MOVSTR: PUSH BC ; Save end of source + EX (SP),HL ; Swap source and dest" end + POP BC ; Get end of destination +MOVLP: CALL CPDEHL ; See if list moved + LD A,(HL) ; Get byte + LD (BC),A ; Move it + RET Z ; Exit if all done + DEC BC ; Next byte to move to + DEC HL ; Next byte to move + JP MOVLP ; Loop until all bytes moved + +CHKSTK: PUSH HL ; Save code string address + LD HL,(ARREND) ; Lowest free memory + LD B,0 ; BC = Number of levels to test + ADD HL,BC ; 2 Bytes for each level + ADD HL,BC + .BYTE 3EH ; Skip "PUSH HL" +ENFMEM: PUSH HL ; Save code string address + LD A,0D0H ;LOW -48 ; 48 Bytes minimum RAM + SUB L + LD L,A + LD A,0FFH; HIGH (-48) ; 48 Bytes minimum RAM + SBC A,H + JP C,OMERR ; Not enough - ?OM Error + LD H,A + ADD HL,SP ; Test if stack is overflowed + POP HL ; Restore code string address + RET C ; Return if enough mmory +OMERR: LD E,OM ; ?OM Error + JP ERROR + +DATSNR: LD HL,(DATLIN) ; Get line of current DATA item + LD (LINEAT),HL ; Save as current line +SNERR: LD E,SN ; ?SN Error + .BYTE 01H ; Skip "LD E,DZ" +DZERR: LD E,DZ ; ?/0 Error + .BYTE 01H ; Skip "LD E,NF" +NFERR: LD E,NF ; ?NF Error + .BYTE 01H ; Skip "LD E,DD" +DDERR: LD E,DD ; ?DD Error + .BYTE 01H ; Skip "LD E,UF" +UFERR: LD E,UF ; ?UF Error + .BYTE 01H ; Skip "LD E,OV +OVERR: LD E,OV ; ?OV Error + .BYTE 01H ; Skip "LD E,TM" +TMERR: LD E,TM ; ?TM Error + +ERROR: CALL CLREG ; Clear registers and stack + LD (CTLOFG),A ; Enable output (A is 0) + CALL STTLIN ; Start new line + LD HL,ERRORS ; Point to error codes + LD D,A ; D = 0 (A is 0) + LD A,'?' + CALL OUTC ; Output '?' + ADD HL,DE ; Offset to correct error code + LD A,(HL) ; First character + CALL OUTC ; Output it + CALL GETCHR ; Get next character + CALL OUTC ; Output it + LD HL,ERRMSG ; "Error" message +ERRIN: CALL PRS ; Output message + LD HL,(LINEAT) ; Get line of error + LD DE,-2 ; Cold start error if -2 + CALL CPDEHL ; See if cold start error + JP Z,CSTART ; Cold start error - Restart + LD A,H ; Was it a direct error? + AND L ; Line = -1 if direct error + INC A + CALL NZ,LINEIN ; No - output line of error + .BYTE 3EH ; Skip "POP BC" +POPNOK: POP BC ; Drop address in input buffer + +PRNTOK: XOR A ; Output "Ok" and get command + LD (CTLOFG),A ; Enable output + CALL STTLIN ; Start new line + LD HL,OKMSG ; "Ok" message + CALL PRS ; Output "Ok" +GETCMD: LD HL,-1 ; Flag direct mode + LD (LINEAT),HL ; Save as current line + CALL GETLIN ; Get an input line + JP C,GETCMD ; Get line again if break + CALL GETCHR ; Get first character + INC A ; Test if end of line + DEC A ; Without affecting Carry + JP Z,GETCMD ; Nothing entered - Get another + PUSH AF ; Save Carry status + CALL ATOH ; Get line number into DE + PUSH DE ; Save line number + CALL CRUNCH ; Tokenise rest of line + LD B,A ; Length of tokenised line + POP DE ; Restore line number + POP AF ; Restore Carry + JP NC,EXCUTE ; No line number - Direct mode + PUSH DE ; Save line number + PUSH BC ; Save length of tokenised line + XOR A + LD (LSTBIN),A ; Clear last byte input + CALL GETCHR ; Get next character + OR A ; Set flags + PUSH AF ; And save them + CALL SRCHLN ; Search for line number in DE + JP C,LINFND ; Jump if line found + POP AF ; Get status + PUSH AF ; And re-save + JP Z,ULERR ; Nothing after number - Error + OR A ; Clear Carry +LINFND: PUSH BC ; Save address of line in prog + JP NC,INEWLN ; Line not found - Insert new + EX DE,HL ; Next line address in DE + LD HL,(PROGND) ; End of program +SFTPRG: LD A,(DE) ; Shift rest of program down + LD (BC),A + INC BC ; Next destination + INC DE ; Next source + CALL CPDEHL ; All done? + JP NZ,SFTPRG ; More to do + LD H,B ; HL - New end of program + LD L,C + LD (PROGND),HL ; Update end of program + +INEWLN: POP DE ; Get address of line, + POP AF ; Get status + JP Z,SETPTR ; No text - Set up pointers + LD HL,(PROGND) ; Get end of program + EX (SP),HL ; Get length of input line + POP BC ; End of program to BC + ADD HL,BC ; Find new end + PUSH HL ; Save new end + CALL MOVUP ; Make space for line + POP HL ; Restore new end + LD (PROGND),HL ; Update end of program pointer + EX DE,HL ; Get line to move up in HL + LD (HL),H ; Save MSB + POP DE ; Get new line number + INC HL ; Skip pointer + INC HL + LD (HL),E ; Save LSB of line number + INC HL + LD (HL),D ; Save MSB of line number + INC HL ; To first byte in line + LD DE,BUFFER ; Copy buffer to program +MOVBUF: LD A,(DE) ; Get source + LD (HL),A ; Save destinations + INC HL ; Next source + INC DE ; Next destination + OR A ; Done? + JP NZ,MOVBUF ; No - Repeat +SETPTR: CALL RUNFST ; Set line pointers + INC HL ; To LSB of pointer + EX DE,HL ; Address to DE +PTRLP: LD H,D ; Address to HL + LD L,E + LD A,(HL) ; Get LSB of pointer + INC HL ; To MSB of pointer + OR (HL) ; Compare with MSB pointer + JP Z,GETCMD ; Get command line if end + INC HL ; To LSB of line number + INC HL ; Skip line number + INC HL ; Point to first byte in line + XOR A ; Looking for 00 byte +FNDEND: CP (HL) ; Found end of line? + INC HL ; Move to next byte + JP NZ,FNDEND ; No - Keep looking + EX DE,HL ; Next line address to HL + LD (HL),E ; Save LSB of pointer + INC HL + LD (HL),D ; Save MSB of pointer + JP PTRLP ; Do next line + +SRCHLN: LD HL,(BASTXT) ; Start of program text +SRCHLP: LD B,H ; BC = Address to look at + LD C,L + LD A,(HL) ; Get address of next line + INC HL + OR (HL) ; End of program found? + DEC HL + RET Z ; Yes - Line not found + INC HL + INC HL + LD A,(HL) ; Get LSB of line number + INC HL + LD H,(HL) ; Get MSB of line number + LD L,A + CALL CPDEHL ; Compare with line in DE + LD H,B ; HL = Start of this line + LD L,C + LD A,(HL) ; Get LSB of next line address + INC HL + LD H,(HL) ; Get MSB of next line address + LD L,A ; Next line to HL + CCF + RET Z ; Lines found - Exit + CCF + RET NC ; Line not found,at line after + JP SRCHLP ; Keep looking + +NEW: RET NZ ; Return if any more on line +CLRPTR: LD HL,(BASTXT) ; Point to start of program + XOR A ; Set program area to empty + LD (HL),A ; Save LSB = 00 + INC HL + LD (HL),A ; Save MSB = 00 + INC HL + LD (PROGND),HL ; Set program end + +RUNFST: LD HL,(BASTXT) ; Clear all variables + DEC HL + +INTVAR: LD (BRKLIN),HL ; Initialise RUN variables + LD HL,(LSTRAM) ; Get end of RAM + LD (STRBOT),HL ; Clear string space + XOR A + CALL RESTOR ; Reset DATA pointers + LD HL,(PROGND) ; Get end of program + LD (VAREND),HL ; Clear variables + LD (ARREND),HL ; Clear arrays + +CLREG: POP BC ; Save return address + LD HL,(STRSPC) ; Get end of working RAN + LD SP,HL ; Set stack + LD HL,TMSTPL ; Temporary string pool + LD (TMSTPT),HL ; Reset temporary string ptr + XOR A ; A = 00 + LD L,A ; HL = 0000 + LD H,A + LD (CONTAD),HL ; No CONTinue + LD (FORFLG),A ; Clear FOR flag + LD (FNRGNM),HL ; Clear FN argument + PUSH HL ; HL = 0000 + PUSH BC ; Put back return +DOAGN: LD HL,(BRKLIN) ; Get address of code to RUN + RET ; Return to execution driver + +PROMPT: LD A,'?' ; '?' + CALL OUTC ; Output character + LD A,' ' ; Space + CALL OUTC ; Output character + JP RINPUT ; Get input line + +CRUNCH: XOR A ; Tokenise line @ HL to BUFFER + LD (DATFLG),A ; Reset literal flag + LD C,2+3 ; 2 byte number and 3 nulls + LD DE,BUFFER ; Start of input buffer +CRNCLP: LD A,(HL) ; Get byte + CP ' ' ; Is it a space? + JP Z,MOVDIR ; Yes - Copy direct + LD B,A ; Save character + CP '"' ; Is it a quote? + JP Z,CPYLIT ; Yes - Copy literal string + OR A ; Is it end of buffer? + JP Z,ENDBUF ; Yes - End buffer + LD A,(DATFLG) ; Get data type + OR A ; Literal? + LD A,(HL) ; Get byte to copy + JP NZ,MOVDIR ; Literal - Copy direct + CP '?' ; Is it '?' short for PRINT + LD A,ZPRINT ; "PRINT" token + JP Z,MOVDIR ; Yes - replace it + LD A,(HL) ; Get byte again + CP '0' ; Is it less than '0' + JP C,FNDWRD ; Yes - Look for reserved words + CP 60; ";"+1 ; Is it "0123456789:;" ? + JP C,MOVDIR ; Yes - copy it direct +FNDWRD: PUSH DE ; Look for reserved words + LD DE,WORDS-1 ; Point to table + PUSH BC ; Save count + LD BC,RETNAD ; Where to return to + PUSH BC ; Save return address + LD B,ZEND-1 ; First token value -1 + LD A,(HL) ; Get byte + CP 'a' ; Less than 'a' ? + JP C,SEARCH ; Yes - search for words + CP 'z'+1 ; Greater than 'z' ? + JP NC,SEARCH ; Yes - search for words + AND 01011111B ; Force upper case + LD (HL),A ; Replace byte +SEARCH: LD C,(HL) ; Search for a word + EX DE,HL +GETNXT: INC HL ; Get next reserved word + OR (HL) ; Start of word? + JP P,GETNXT ; No - move on + INC B ; Increment token value + LD A, (HL) ; Get byte from table + AND 01111111B ; Strip bit 7 + RET Z ; Return if end of list + CP C ; Same character as in buffer? + JP NZ,GETNXT ; No - get next word + EX DE,HL + PUSH HL ; Save start of word + +NXTBYT: INC DE ; Look through rest of word + LD A,(DE) ; Get byte from table + OR A ; End of word ? + JP M,MATCH ; Yes - Match found + LD C,A ; Save it + LD A,B ; Get token value + CP ZGOTO ; Is it "GOTO" token ? + JP NZ,NOSPC ; No - Don't allow spaces + CALL GETCHR ; Get next character + DEC HL ; Cancel increment from GETCHR +NOSPC: INC HL ; Next byte + LD A,(HL) ; Get byte + CP 'a' ; Less than 'a' ? + JP C,NOCHNG ; Yes - don't change + AND 01011111B ; Make upper case +NOCHNG: CP C ; Same as in buffer ? + JP Z,NXTBYT ; Yes - keep testing + POP HL ; Get back start of word + JP SEARCH ; Look at next word + +MATCH: LD C,B ; Word found - Save token value + POP AF ; Throw away return + EX DE,HL + RET ; Return to "RETNAD" +RETNAD: EX DE,HL ; Get address in string + LD A,C ; Get token value + POP BC ; Restore buffer length + POP DE ; Get destination address +MOVDIR: INC HL ; Next source in buffer + LD (DE),A ; Put byte in buffer + INC DE ; Move up buffer + INC C ; Increment length of buffer + SUB ':' ; End of statement? + JP Z,SETLIT ; Jump if multi-statement line + CP ZDATA-3AH ; Is it DATA statement ? + JP NZ,TSTREM ; No - see if REM +SETLIT: LD (DATFLG),A ; Set literal flag +TSTREM: SUB ZREM-3AH ; Is it REM? + JP NZ,CRNCLP ; No - Leave flag + LD B,A ; Copy rest of buffer +NXTCHR: LD A,(HL) ; Get byte + OR A ; End of line ? + JP Z,ENDBUF ; Yes - Terminate buffer + CP B ; End of statement ? + JP Z,MOVDIR ; Yes - Get next one +CPYLIT: INC HL ; Move up source string + LD (DE),A ; Save in destination + INC C ; Increment length + INC DE ; Move up destination + JP NXTCHR ; Repeat + +ENDBUF: LD HL,BUFFER-1 ; Point to start of buffer + LD (DE),A ; Mark end of buffer (A = 00) + INC DE + LD (DE),A ; A = 00 + INC DE + LD (DE),A ; A = 00 + RET + +DODEL: LD A,(NULFLG) ; Get null flag status + OR A ; Is it zero? + LD A,0 ; Zero A - Leave flags + LD (NULFLG),A ; Zero null flag + JP NZ,ECHDEL ; Set - Echo it + DEC B ; Decrement length + JP Z,GETLIN ; Get line again if empty + CALL OUTC ; Output null character + .BYTE 3EH ; Skip "DEC B" +ECHDEL: DEC B ; Count bytes in buffer + DEC HL ; Back space buffer + JP Z,OTKLN ; No buffer - Try again + LD A,(HL) ; Get deleted byte + CALL OUTC ; Echo it + JP MORINP ; Get more input + +DELCHR: DEC B ; Count bytes in buffer + DEC HL ; Back space buffer + CALL OUTC ; Output character in A + JP NZ,MORINP ; Not end - Get more +OTKLN: CALL OUTC ; Output character in A +KILIN: CALL PRNTCRLF ; Output CRLF + JP TTYLIN ; Get line again + +GETLIN: +TTYLIN: LD HL,BUFFER ; Get a line by character + LD B,1 ; Set buffer as empty + XOR A + LD (NULFLG),A ; Clear null flag +MORINP: CALL CLOTST ; Get character and test ^O + LD C,A ; Save character in C + CP DEL ; Delete character? + JP Z,DODEL ; Yes - Process it + LD A,(NULFLG) ; Get null flag + OR A ; Test null flag status + JP Z,PROCES ; Reset - Process character + LD A,0 ; Set a null + CALL OUTC ; Output null + XOR A ; Clear A + LD (NULFLG),A ; Reset null flag +PROCES: LD A,C ; Get character + CP CTRLG ; Bell? + JP Z,PUTCTL ; Yes - Save it + CP CTRLC ; Is it control "C"? + CALL Z,PRNTCRLF ; Yes - Output CRLF + SCF ; Flag break + RET Z ; Return if control "C" + CP CR ; Is it enter? + JP Z,ENDINP ; Yes - Terminate input + CP CTRLU ; Is it control "U"? + JP Z,KILIN ; Yes - Get another line + CP '@' ; Is it "kill line"? + JP Z,OTKLN ; Yes - Kill line + CP '_' ; Is it delete? + JP Z,DELCHR ; Yes - Delete character + CP BKSP ; Is it backspace? + JP Z,DELCHR ; Yes - Delete character + CP CTRLR ; Is it control "R"? + JP NZ,PUTBUF ; No - Put in buffer + PUSH BC ; Save buffer length + PUSH DE ; Save DE + PUSH HL ; Save buffer address + LD (HL),0 ; Mark end of buffer + CALL OUTNCR ; Output and do CRLF + LD HL,BUFFER ; Point to buffer start + CALL PRS ; Output buffer + POP HL ; Restore buffer address + POP DE ; Restore DE + POP BC ; Restore buffer length + JP MORINP ; Get another character + +PUTBUF: CP ' ' ; Is it a control code? + JP C,MORINP ; Yes - Ignore +PUTCTL: LD A,B ; Get number of bytes in buffer + CP 72+1 ; Test for line overflow + LD A,CTRLG ; Set a bell + JP NC,OUTNBS ; Ring bell if buffer full + LD A,C ; Get character + LD (HL),C ; Save in buffer + LD (LSTBIN),A ; Save last input byte + INC HL ; Move up buffer + INC B ; Increment length +OUTIT: CALL OUTC ; Output the character entered + JP MORINP ; Get another character + +OUTNBS: CALL OUTC ; Output bell and back over it + LD A,BKSP ; Set back space + JP OUTIT ; Output it and get more + +CPDEHL: LD A,H ; Get H + SUB D ; Compare with D + RET NZ ; Different - Exit + LD A,L ; Get L + SUB E ; Compare with E + RET ; Return status + +CHKSYN: LD A,(HL) ; Check syntax of character + EX (SP),HL ; Address of test byte + CP (HL) ; Same as in code string? + INC HL ; Return address + EX (SP),HL ; Put it back + JP Z,GETCHR ; Yes - Get next character + JP SNERR ; Different - ?SN Error + +OUTC: PUSH AF ; Save character + LD A,(CTLOFG) ; Get control "O" flag + OR A ; Is it set? + JP NZ,POPAF ; Yes - don't output + POP AF ; Restore character + PUSH BC ; Save buffer length + PUSH AF ; Save character + CP ' ' ; Is it a control code? + JP C,DINPOS ; Yes - Don't INC POS(X) + LD A,(LWIDTH) ; Get line width + LD B,A ; To B + LD A,(CURPOS) ; Get cursor position + INC B ; Width 255? + JP Z,INCLEN ; Yes - No width limit + DEC B ; Restore width + CP B ; At end of line? + CALL Z,PRNTCRLF ; Yes - output CRLF +INCLEN: INC A ; Move on one character + LD (CURPOS),A ; Save new position +DINPOS: POP AF ; Restore character + POP BC ; Restore buffer length + CALL MONOUT ; Send it + RET + +CLOTST: CALL GETINP ; Get input character + AND 01111111B ; Strip bit 7 + CP CTRLO ; Is it control "O"? + RET NZ ; No don't flip flag + LD A,(CTLOFG) ; Get flag + CPL ; Flip it + LD (CTLOFG),A ; Put it back + XOR A ; Null character + RET + +LIST: CALL ATOH ; ASCII number to DE + RET NZ ; Return if anything extra + POP BC ; Rubbish - Not needed + CALL SRCHLN ; Search for line number in DE + PUSH BC ; Save address of line + CALL SETLIN ; Set up lines counter +LISTLP: POP HL ; Restore address of line + LD C,(HL) ; Get LSB of next line + INC HL + LD B,(HL) ; Get MSB of next line + INC HL + LD A,B ; BC = 0 (End of program)? + OR C + JP Z,PRNTOK ; Yes - Go to command mode + CALL COUNT ; Count lines + CALL TSTBRK ; Test for break key + PUSH BC ; Save address of next line + CALL PRNTCRLF ; Output CRLF + LD E,(HL) ; Get LSB of line number + INC HL + LD D,(HL) ; Get MSB of line number + INC HL + PUSH HL ; Save address of line start + EX DE,HL ; Line number to HL + CALL PRNTHL ; Output line number in decimal + LD A,' ' ; Space after line number + POP HL ; Restore start of line address +LSTLP2: CALL OUTC ; Output character in A +LSTLP3: LD A,(HL) ; Get next byte in line + OR A ; End of line? + INC HL ; To next byte in line + JP Z,LISTLP ; Yes - get next line + JP P,LSTLP2 ; No token - output it + SUB ZEND-1 ; Find and output word + LD C,A ; Token offset+1 to C + LD DE,WORDS ; Reserved word list +FNDTOK: LD A,(DE) ; Get character in list + INC DE ; Move on to next + OR A ; Is it start of word? + JP P,FNDTOK ; No - Keep looking for word + DEC C ; Count words + JP NZ,FNDTOK ; Not there - keep looking +OUTWRD: AND 01111111B ; Strip bit 7 + CALL OUTC ; Output first character + LD A,(DE) ; Get next character + INC DE ; Move on to next + OR A ; Is it end of word? + JP P,OUTWRD ; No - output the rest + JP LSTLP3 ; Next byte in line + +SETLIN: PUSH HL ; Set up LINES counter + LD HL,(LINESN) ; Get LINES number + LD (LINESC),HL ; Save in LINES counter + POP HL + RET + +COUNT: PUSH HL ; Save code string address + PUSH DE + LD HL,(LINESC) ; Get LINES counter + LD DE,-1 + ADC HL,DE ; Decrement + LD (LINESC),HL ; Put it back + POP DE + POP HL ; Restore code string address + RET P ; Return if more lines to go + PUSH HL ; Save code string address + LD HL,(LINESN) ; Get LINES number + LD (LINESC),HL ; Reset LINES counter + CALL GETINP ; Get input character + CP CTRLC ; Is it control "C"? + JP Z,RSLNBK ; Yes - Reset LINES and break + POP HL ; Restore code string address + JP COUNT ; Keep on counting + +RSLNBK: LD HL,(LINESN) ; Get LINES number + LD (LINESC),HL ; Reset LINES counter + JP BRKRET ; Go and output "Break" + +FOR: LD A,64H ; Flag "FOR" assignment + LD (FORFLG),A ; Save "FOR" flag + CALL LET ; Set up initial index + POP BC ; Drop RETurn address + PUSH HL ; Save code string address + CALL DATA ; Get next statement address + LD (LOOPST),HL ; Save it for start of loop + LD HL,2 ; Offset for "FOR" block + ADD HL,SP ; Point to it +FORSLP: CALL LOKFOR ; Look for existing "FOR" block + POP DE ; Get code string address + JP NZ,FORFND ; No nesting found + ADD HL,BC ; Move into "FOR" block + PUSH DE ; Save code string address + DEC HL + LD D,(HL) ; Get MSB of loop statement + DEC HL + LD E,(HL) ; Get LSB of loop statement + INC HL + INC HL + PUSH HL ; Save block address + LD HL,(LOOPST) ; Get address of loop statement + CALL CPDEHL ; Compare the FOR loops + POP HL ; Restore block address + JP NZ,FORSLP ; Different FORs - Find another + POP DE ; Restore code string address + LD SP,HL ; Remove all nested loops + +FORFND: EX DE,HL ; Code string address to HL + LD C,8 + CALL CHKSTK ; Check for 8 levels of stack + PUSH HL ; Save code string address + LD HL,(LOOPST) ; Get first statement of loop + EX (SP),HL ; Save and restore code string + PUSH HL ; Re-save code string address + LD HL,(LINEAT) ; Get current line number + EX (SP),HL ; Save and restore code string + CALL TSTNUM ; Make sure it's a number + CALL CHKSYN ; Make sure "TO" is next + .BYTE ZTO ; "TO" token + CALL GETNUM ; Get "TO" expression value + PUSH HL ; Save code string address + CALL BCDEFP ; Move "TO" value to BCDE + POP HL ; Restore code string address + PUSH BC ; Save "TO" value in block + PUSH DE + LD BC,8100H ; BCDE - 1 (default STEP) + LD D,C ; C=0 + LD E,D ; D=0 + LD A,(HL) ; Get next byte in code string + CP ZSTEP ; See if "STEP" is stated + LD A,1 ; Sign of step = 1 + JP NZ,SAVSTP ; No STEP given - Default to 1 + CALL GETCHR ; Jump over "STEP" token + CALL GETNUM ; Get step value + PUSH HL ; Save code string address + CALL BCDEFP ; Move STEP to BCDE + CALL TSTSGN ; Test sign of FPREG + POP HL ; Restore code string address +SAVSTP: PUSH BC ; Save the STEP value in block + PUSH DE + PUSH AF ; Save sign of STEP + INC SP ; Don't save flags + PUSH HL ; Save code string address + LD HL,(BRKLIN) ; Get address of index variable + EX (SP),HL ; Save and restore code string +PUTFID: LD B,ZFOR ; "FOR" block marker + PUSH BC ; Save it + INC SP ; Don't save C + +RUNCNT: CALL TSTBRK ; Execution driver - Test break + LD (BRKLIN),HL ; Save code address for break + LD A,(HL) ; Get next byte in code string + CP ':' ; Multi statement line? + JP Z,EXCUTE ; Yes - Execute it + OR A ; End of line? + JP NZ,SNERR ; No - Syntax error + INC HL ; Point to address of next line + LD A,(HL) ; Get LSB of line pointer + INC HL + OR (HL) ; Is it zero (End of prog)? + JP Z,ENDPRG ; Yes - Terminate execution + INC HL ; Point to line number + LD E,(HL) ; Get LSB of line number + INC HL + LD D,(HL) ; Get MSB of line number + EX DE,HL ; Line number to HL + LD (LINEAT),HL ; Save as current line number + EX DE,HL ; Line number back to DE +EXCUTE: CALL GETCHR ; Get key word + LD DE,RUNCNT ; Where to RETurn to + PUSH DE ; Save for RETurn +IFJMP: RET Z ; Go to RUNCNT if end of STMT +ONJMP: SUB ZEND ; Is it a token? + JP C,LET ; No - try to assign it + CP ZNEW+1-ZEND ; END to NEW ? + JP NC,SNERR ; Not a key word - ?SN Error + RLCA ; Double it + LD C,A ; BC = Offset into table + LD B,0 + EX DE,HL ; Save code string address + LD HL,WORDTB ; Keyword address table + ADD HL,BC ; Point to routine address + LD C,(HL) ; Get LSB of routine address + INC HL + LD B,(HL) ; Get MSB of routine address + PUSH BC ; Save routine address + EX DE,HL ; Restore code string address + +GETCHR: INC HL ; Point to next character + LD A,(HL) ; Get next code string byte + CP ':' ; Z if ':' + RET NC ; NC if > "9" + CP ' ' + JP Z,GETCHR ; Skip over spaces + CP '0' + CCF ; NC if < '0' + INC A ; Test for zero - Leave carry + DEC A ; Z if Null + RET + +RESTOR: EX DE,HL ; Save code string address + LD HL,(BASTXT) ; Point to start of program + JP Z,RESTNL ; Just RESTORE - reset pointer + EX DE,HL ; Restore code string address + CALL ATOH ; Get line number to DE + PUSH HL ; Save code string address + CALL SRCHLN ; Search for line number in DE + LD H,B ; HL = Address of line + LD L,C + POP DE ; Restore code string address + JP NC,ULERR ; ?UL Error if not found +RESTNL: DEC HL ; Byte before DATA statement +UPDATA: LD (NXTDAT),HL ; Update DATA pointer + EX DE,HL ; Restore code string address + RET + + +TSTBRK: RST 18H ; Check input status + RET Z ; No key, go back + RST 10H ; Get the key into A + CP ESC ; Escape key? + JR Z,BRK ; Yes, break + CP CTRLC ; + JR Z,BRK ; Yes, break + CP CTRLS ; Stop scrolling? + RET NZ ; Other key, ignore + + +STALL: RST 10H ; Wait for key + CP CTRLQ ; Resume scrolling? + RET Z ; Release the chokehold + CP CTRLC ; Second break? + JR Z,STOP ; Break during hold exits prog + JR STALL ; Loop until or + +BRK LD A,$FF ; Set BRKFLG + LD (BRKFLG),A ; Store it + + +STOP: RET NZ ; Exit if anything else + .BYTE 0F6H ; Flag "STOP" +PEND: RET NZ ; Exit if anything else + LD (BRKLIN),HL ; Save point of break + .BYTE 21H ; Skip "OR 11111111B" +INPBRK: OR 11111111B ; Flag "Break" wanted + POP BC ; Return not needed and more +ENDPRG: LD HL,(LINEAT) ; Get current line number + PUSH AF ; Save STOP / END status + LD A,L ; Is it direct break? + AND H + INC A ; Line is -1 if direct break + JP Z,NOLIN ; Yes - No line number + LD (ERRLIN),HL ; Save line of break + LD HL,(BRKLIN) ; Get point of break + LD (CONTAD),HL ; Save point to CONTinue +NOLIN: XOR A + LD (CTLOFG),A ; Enable output + CALL STTLIN ; Start a new line + POP AF ; Restore STOP / END status + LD HL,BRKMSG ; "Break" message + JP NZ,ERRIN ; "in line" wanted? + JP PRNTOK ; Go to command mode + +CONT: LD HL,(CONTAD) ; Get CONTinue address + LD A,H ; Is it zero? + OR L + LD E,CN ; ?CN Error + JP Z,ERROR ; Yes - output "?CN Error" + EX DE,HL ; Save code string address + LD HL,(ERRLIN) ; Get line of last break + LD (LINEAT),HL ; Set up current line number + EX DE,HL ; Restore code string address + RET ; CONTinue where left off + +NULL: CALL GETINT ; Get integer 0-255 + RET NZ ; Return if bad value + LD (NULLS),A ; Set nulls number + RET + + +ACCSUM: PUSH HL ; Save address in array + LD HL,(CHKSUM) ; Get check sum + LD B,0 ; BC - Value of byte + LD C,A + ADD HL,BC ; Add byte to check sum + LD (CHKSUM),HL ; Re-save check sum + POP HL ; Restore address in array + RET + +CHKLTR: LD A,(HL) ; Get byte + CP 'A' ; < 'a' ? + RET C ; Carry set if not letter + CP 'Z'+1 ; > 'z' ? + CCF + RET ; Carry set if not letter + +FPSINT: CALL GETCHR ; Get next character +POSINT: CALL GETNUM ; Get integer 0 to 32767 +DEPINT: CALL TSTSGN ; Test sign of FPREG + JP M,FCERR ; Negative - ?FC Error +DEINT: LD A,(FPEXP) ; Get integer value to DE + CP 80H+16 ; Exponent in range (16 bits)? + JP C,FPINT ; Yes - convert it + LD BC,9080H ; BCDE = -32768 + LD DE,0000 + PUSH HL ; Save code string address + CALL CMPNUM ; Compare FPREG with BCDE + POP HL ; Restore code string address + LD D,C ; MSB to D + RET Z ; Return if in range +FCERR: LD E,FC ; ?FC Error + JP ERROR ; Output error- + +ATOH: DEC HL ; ASCII number to DE binary +GETLN: LD DE,0 ; Get number to DE +GTLNLP: CALL GETCHR ; Get next character + RET NC ; Exit if not a digit + PUSH HL ; Save code string address + PUSH AF ; Save digit + LD HL,65529/10 ; Largest number 65529 + CALL CPDEHL ; Number in range? + JP C,SNERR ; No - ?SN Error + LD H,D ; HL = Number + LD L,E + ADD HL,DE ; Times 2 + ADD HL,HL ; Times 4 + ADD HL,DE ; Times 5 + ADD HL,HL ; Times 10 + POP AF ; Restore digit + SUB '0' ; Make it 0 to 9 + LD E,A ; DE = Value of digit + LD D,0 + ADD HL,DE ; Add to number + EX DE,HL ; Number to DE + POP HL ; Restore code string address + JP GTLNLP ; Go to next character + +CLEAR: JP Z,INTVAR ; Just "CLEAR" Keep parameters + CALL POSINT ; Get integer 0 to 32767 to DE + DEC HL ; Cancel increment + CALL GETCHR ; Get next character + PUSH HL ; Save code string address + LD HL,(LSTRAM) ; Get end of RAM + JP Z,STORED ; No value given - Use stored + POP HL ; Restore code string address + CALL CHKSYN ; Check for comma + .BYTE ',' + PUSH DE ; Save number + CALL POSINT ; Get integer 0 to 32767 + DEC HL ; Cancel increment + CALL GETCHR ; Get next character + JP NZ,SNERR ; ?SN Error if more on line + EX (SP),HL ; Save code string address + EX DE,HL ; Number to DE +STORED: LD A,L ; Get LSB of new RAM top + SUB E ; Subtract LSB of string space + LD E,A ; Save LSB + LD A,H ; Get MSB of new RAM top + SBC A,D ; Subtract MSB of string space + LD D,A ; Save MSB + JP C,OMERR ; ?OM Error if not enough mem + PUSH HL ; Save RAM top + LD HL,(PROGND) ; Get program end + LD BC,40 ; 40 Bytes minimum working RAM + ADD HL,BC ; Get lowest address + CALL CPDEHL ; Enough memory? + JP NC,OMERR ; No - ?OM Error + EX DE,HL ; RAM top to HL + LD (STRSPC),HL ; Set new string space + POP HL ; End of memory to use + LD (LSTRAM),HL ; Set new top of RAM + POP HL ; Restore code string address + JP INTVAR ; Initialise variables + +RUN: JP Z,RUNFST ; RUN from start if just RUN + CALL INTVAR ; Initialise variables + LD BC,RUNCNT ; Execution driver loop + JP RUNLIN ; RUN from line number + +GOSUB: LD C,3 ; 3 Levels of stack needed + CALL CHKSTK ; Check for 3 levels of stack + POP BC ; Get return address + PUSH HL ; Save code string for RETURN + PUSH HL ; And for GOSUB routine + LD HL,(LINEAT) ; Get current line + EX (SP),HL ; Into stack - Code string out + LD A,ZGOSUB ; "GOSUB" token + PUSH AF ; Save token + INC SP ; Don't save flags + +RUNLIN: PUSH BC ; Save return address +GOTO: CALL ATOH ; ASCII number to DE binary + CALL REM ; Get end of line + PUSH HL ; Save end of line + LD HL,(LINEAT) ; Get current line + CALL CPDEHL ; Line after current? + POP HL ; Restore end of line + INC HL ; Start of next line + CALL C,SRCHLP ; Line is after current line + CALL NC,SRCHLN ; Line is before current line + LD H,B ; Set up code string address + LD L,C + DEC HL ; Incremented after + RET C ; Line found +ULERR: LD E,UL ; ?UL Error + JP ERROR ; Output error message + +RETURN: RET NZ ; Return if not just RETURN + LD D,-1 ; Flag "GOSUB" search + CALL BAKSTK ; Look "GOSUB" block + LD SP,HL ; Kill all FORs in subroutine + CP ZGOSUB ; Test for "GOSUB" token + LD E,RG ; ?RG Error + JP NZ,ERROR ; Error if no "GOSUB" found + POP HL ; Get RETURN line number + LD (LINEAT),HL ; Save as current + INC HL ; Was it from direct statement? + LD A,H + OR L ; Return to line + JP NZ,RETLIN ; No - Return to line + LD A,(LSTBIN) ; Any INPUT in subroutine? + OR A ; If so buffer is corrupted + JP NZ,POPNOK ; Yes - Go to command mode +RETLIN: LD HL,RUNCNT ; Execution driver loop + EX (SP),HL ; Into stack - Code string out + .BYTE 3EH ; Skip "POP HL" +NXTDTA: POP HL ; Restore code string address + +DATA: .BYTE 01H,3AH ; ':' End of statement +REM: LD C,0 ; 00 End of statement + LD B,0 +NXTSTL: LD A,C ; Statement and byte + LD C,B + LD B,A ; Statement end byte +NXTSTT: LD A,(HL) ; Get byte + OR A ; End of line? + RET Z ; Yes - Exit + CP B ; End of statement? + RET Z ; Yes - Exit + INC HL ; Next byte + CP '"' ; Literal string? + JP Z,NXTSTL ; Yes - Look for another '"' + JP NXTSTT ; Keep looking + +LET: CALL GETVAR ; Get variable name + CALL CHKSYN ; Make sure "=" follows + .BYTE ZEQUAL ; "=" token + PUSH DE ; Save address of variable + LD A,(TYPE) ; Get data type + PUSH AF ; Save type + CALL EVAL ; Evaluate expression + POP AF ; Restore type + EX (SP),HL ; Save code - Get var addr + LD (BRKLIN),HL ; Save address of variable + RRA ; Adjust type + CALL CHKTYP ; Check types are the same + JP Z,LETNUM ; Numeric - Move value +LETSTR: PUSH HL ; Save address of string var + LD HL,(FPREG) ; Pointer to string entry + PUSH HL ; Save it on stack + INC HL ; Skip over length + INC HL + LD E,(HL) ; LSB of string address + INC HL + LD D,(HL) ; MSB of string address + LD HL,(BASTXT) ; Point to start of program + CALL CPDEHL ; Is string before program? + JP NC,CRESTR ; Yes - Create string entry + LD HL,(STRSPC) ; Point to string space + CALL CPDEHL ; Is string literal in program? + POP DE ; Restore address of string + JP NC,MVSTPT ; Yes - Set up pointer + LD HL,TMPSTR ; Temporary string pool + CALL CPDEHL ; Is string in temporary pool? + JP NC,MVSTPT ; No - Set up pointer + .BYTE 3EH ; Skip "POP DE" +CRESTR: POP DE ; Restore address of string + CALL BAKTMP ; Back to last tmp-str entry + EX DE,HL ; Address of string entry + CALL SAVSTR ; Save string in string area +MVSTPT: CALL BAKTMP ; Back to last tmp-str entry + POP HL ; Get string pointer + CALL DETHL4 ; Move string pointer to var + POP HL ; Restore code string address + RET + +LETNUM: PUSH HL ; Save address of variable + CALL FPTHL ; Move value to variable + POP DE ; Restore address of variable + POP HL ; Restore code string address + RET + +ON: CALL GETINT ; Get integer 0-255 + LD A,(HL) ; Get "GOTO" or "GOSUB" token + LD B,A ; Save in B + CP ZGOSUB ; "GOSUB" token? + JP Z,ONGO ; Yes - Find line number + CALL CHKSYN ; Make sure it's "GOTO" + .BYTE ZGOTO ; "GOTO" token + DEC HL ; Cancel increment +ONGO: LD C,E ; Integer of branch value +ONGOLP: DEC C ; Count branches + LD A,B ; Get "GOTO" or "GOSUB" token + JP Z,ONJMP ; Go to that line if right one + CALL GETLN ; Get line number to DE + CP ',' ; Another line number? + RET NZ ; No - Drop through + JP ONGOLP ; Yes - loop + +IF: CALL EVAL ; Evaluate expression + LD A,(HL) ; Get token + CP ZGOTO ; "GOTO" token? + JP Z,IFGO ; Yes - Get line + CALL CHKSYN ; Make sure it's "THEN" + .BYTE ZTHEN ; "THEN" token + DEC HL ; Cancel increment +IFGO: CALL TSTNUM ; Make sure it's numeric + CALL TSTSGN ; Test state of expression + JP Z,REM ; False - Drop through + CALL GETCHR ; Get next character + JP C,GOTO ; Number - GOTO that line + JP IFJMP ; Otherwise do statement + +MRPRNT: DEC HL ; DEC 'cos GETCHR INCs + CALL GETCHR ; Get next character +PRINT: JP Z,PRNTCRLF ; CRLF if just PRINT +PRNTLP: RET Z ; End of list - Exit + CP ZTAB ; "TAB(" token? + JP Z,DOTAB ; Yes - Do TAB routine + CP ZSPC ; "SPC(" token? + JP Z,DOTAB ; Yes - Do SPC routine + PUSH HL ; Save code string address + CP ',' ; Comma? + JP Z,DOCOM ; Yes - Move to next zone + CP 59 ;";" ; Semi-colon? + JP Z,NEXITM ; Do semi-colon routine + POP BC ; Code string address to BC + CALL EVAL ; Evaluate expression + PUSH HL ; Save code string address + LD A,(TYPE) ; Get variable type + OR A ; Is it a string variable? + JP NZ,PRNTST ; Yes - Output string contents + CALL NUMASC ; Convert number to text + CALL CRTST ; Create temporary string + LD (HL),' ' ; Followed by a space + LD HL,(FPREG) ; Get length of output + INC (HL) ; Plus 1 for the space + LD HL,(FPREG) ; < Not needed > + LD A,(LWIDTH) ; Get width of line + LD B,A ; To B + INC B ; Width 255 (No limit)? + JP Z,PRNTNB ; Yes - Output number string + INC B ; Adjust it + LD A,(CURPOS) ; Get cursor position + ADD A,(HL) ; Add length of string + DEC A ; Adjust it + CP B ; Will output fit on this line? + CALL NC,PRNTCRLF ; No - CRLF first +PRNTNB: CALL PRS1 ; Output string at (HL) + XOR A ; Skip CALL by setting 'z' flag +PRNTST: CALL NZ,PRS1 ; Output string at (HL) + POP HL ; Restore code string address + JP MRPRNT ; See if more to PRINT + +STTLIN: LD A,(CURPOS) ; Make sure on new line + OR A ; Already at start? + RET Z ; Yes - Do nothing + JP PRNTCRLF ; Start a new line + +ENDINP: LD (HL),0 ; Mark end of buffer + LD HL,BUFFER-1 ; Point to buffer +PRNTCRLF: LD A,CR ; Load a CR + CALL OUTC ; Output character + LD A,LF ; Load a LF + CALL OUTC ; Output character +DONULL: XOR A ; Set to position 0 + LD (CURPOS),A ; Store it + LD A,(NULLS) ; Get number of nulls +NULLP: DEC A ; Count them + RET Z ; Return if done + PUSH AF ; Save count + XOR A ; Load a null + CALL OUTC ; Output it + POP AF ; Restore count + JP NULLP ; Keep counting + +DOCOM: LD A,(COMMAN) ; Get comma width + LD B,A ; Save in B + LD A,(CURPOS) ; Get current position + CP B ; Within the limit? + CALL NC,PRNTCRLF ; No - output CRLF + JP NC,NEXITM ; Get next item +ZONELP: SUB 14 ; Next zone of 14 characters + JP NC,ZONELP ; Repeat if more zones + CPL ; Number of spaces to output + JP ASPCS ; Output them + +DOTAB: PUSH AF ; Save token + CALL FNDNUM ; Evaluate expression + CALL CHKSYN ; Make sure ")" follows + .BYTE ")" + DEC HL ; Back space on to ")" + POP AF ; Restore token + SUB ZSPC ; Was it "SPC(" ? + PUSH HL ; Save code string address + JP Z,DOSPC ; Yes - Do 'E' spaces + LD A,(CURPOS) ; Get current position +DOSPC: CPL ; Number of spaces to print to + ADD A,E ; Total number to print + JP NC,NEXITM ; TAB < Current POS(X) +ASPCS: INC A ; Output A spaces + LD B,A ; Save number to print + LD A,' ' ; Space +SPCLP: CALL OUTC ; Output character in A + DEC B ; Count them + JP NZ,SPCLP ; Repeat if more +NEXITM: POP HL ; Restore code string address + CALL GETCHR ; Get next character + JP PRNTLP ; More to print + +REDO: .BYTE "?Redo from start",CR,LF,0 + +BADINP: LD A,(READFG) ; READ or INPUT? + OR A + JP NZ,DATSNR ; READ - ?SN Error + POP BC ; Throw away code string addr + LD HL,REDO ; "Redo from start" message + CALL PRS ; Output string + JP DOAGN ; Do last INPUT again + +INPUT: CALL IDTEST ; Test for illegal direct + LD A,(HL) ; Get character after "INPUT" + CP '"' ; Is there a prompt string? + LD A,0 ; Clear A and leave flags + LD (CTLOFG),A ; Enable output + JP NZ,NOPMPT ; No prompt - get input + CALL QTSTR ; Get string terminated by '"' + CALL CHKSYN ; Check for ';' after prompt + .BYTE ';' + PUSH HL ; Save code string address + CALL PRS1 ; Output prompt string + .BYTE 3EH ; Skip "PUSH HL" +NOPMPT: PUSH HL ; Save code string address + CALL PROMPT ; Get input with "? " prompt + POP BC ; Restore code string address + JP C,INPBRK ; Break pressed - Exit + INC HL ; Next byte + LD A,(HL) ; Get it + OR A ; End of line? + DEC HL ; Back again + PUSH BC ; Re-save code string address + JP Z,NXTDTA ; Yes - Find next DATA stmt + LD (HL),',' ; Store comma as separator + JP NXTITM ; Get next item + +READ: PUSH HL ; Save code string address + LD HL,(NXTDAT) ; Next DATA statement + .BYTE 0F6H ; Flag "READ" +NXTITM: XOR A ; Flag "INPUT" + LD (READFG),A ; Save "READ"/"INPUT" flag + EX (SP),HL ; Get code str' , Save pointer + JP GTVLUS ; Get values + +NEDMOR: CALL CHKSYN ; Check for comma between items + .BYTE ',' +GTVLUS: CALL GETVAR ; Get variable name + EX (SP),HL ; Save code str" , Get pointer + PUSH DE ; Save variable address + LD A,(HL) ; Get next "INPUT"/"DATA" byte + CP ',' ; Comma? + JP Z,ANTVLU ; Yes - Get another value + LD A,(READFG) ; Is it READ? + OR A + JP NZ,FDTLP ; Yes - Find next DATA stmt + LD A,'?' ; More INPUT needed + CALL OUTC ; Output character + CALL PROMPT ; Get INPUT with prompt + POP DE ; Variable address + POP BC ; Code string address + JP C,INPBRK ; Break pressed + INC HL ; Point to next DATA byte + LD A,(HL) ; Get byte + OR A ; Is it zero (No input) ? + DEC HL ; Back space INPUT pointer + PUSH BC ; Save code string address + JP Z,NXTDTA ; Find end of buffer + PUSH DE ; Save variable address +ANTVLU: LD A,(TYPE) ; Check data type + OR A ; Is it numeric? + JP Z,INPBIN ; Yes - Convert to binary + CALL GETCHR ; Get next character + LD D,A ; Save input character + LD B,A ; Again + CP '"' ; Start of literal sting? + JP Z,STRENT ; Yes - Create string entry + LD A,(READFG) ; "READ" or "INPUT" ? + OR A + LD D,A ; Save 00 if "INPUT" + JP Z,ITMSEP ; "INPUT" - End with 00 + LD D,':' ; "DATA" - End with 00 or ':' +ITMSEP: LD B,',' ; Item separator + DEC HL ; Back space for DTSTR +STRENT: CALL DTSTR ; Get string terminated by D + EX DE,HL ; String address to DE + LD HL,LTSTND ; Where to go after LETSTR + EX (SP),HL ; Save HL , get input pointer + PUSH DE ; Save address of string + JP LETSTR ; Assign string to variable + +INPBIN: CALL GETCHR ; Get next character + CALL ASCTFP ; Convert ASCII to FP number + EX (SP),HL ; Save input ptr, Get var addr + CALL FPTHL ; Move FPREG to variable + POP HL ; Restore input pointer +LTSTND: DEC HL ; DEC 'cos GETCHR INCs + CALL GETCHR ; Get next character + JP Z,MORDT ; End of line - More needed? + CP ',' ; Another value? + JP NZ,BADINP ; No - Bad input +MORDT: EX (SP),HL ; Get code string address + DEC HL ; DEC 'cos GETCHR INCs + CALL GETCHR ; Get next character + JP NZ,NEDMOR ; More needed - Get it + POP DE ; Restore DATA pointer + LD A,(READFG) ; "READ" or "INPUT" ? + OR A + EX DE,HL ; DATA pointer to HL + JP NZ,UPDATA ; Update DATA pointer if "READ" + PUSH DE ; Save code string address + OR (HL) ; More input given? + LD HL,EXTIG ; "?Extra ignored" message + CALL NZ,PRS ; Output string if extra given + POP HL ; Restore code string address + RET + +EXTIG: .BYTE "?Extra ignored",CR,LF,0 + +FDTLP: CALL DATA ; Get next statement + OR A ; End of line? + JP NZ,FANDT ; No - See if DATA statement + INC HL + LD A,(HL) ; End of program? + INC HL + OR (HL) ; 00 00 Ends program + LD E,OD ; ?OD Error + JP Z,ERROR ; Yes - Out of DATA + INC HL + LD E,(HL) ; LSB of line number + INC HL + LD D,(HL) ; MSB of line number + EX DE,HL + LD (DATLIN),HL ; Set line of current DATA item + EX DE,HL +FANDT: CALL GETCHR ; Get next character + CP ZDATA ; "DATA" token + JP NZ,FDTLP ; No "DATA" - Keep looking + JP ANTVLU ; Found - Convert input + +NEXT: LD DE,0 ; In case no index given +NEXT1: CALL NZ,GETVAR ; Get index address + LD (BRKLIN),HL ; Save code string address + CALL BAKSTK ; Look for "FOR" block + JP NZ,NFERR ; No "FOR" - ?NF Error + LD SP,HL ; Clear nested loops + PUSH DE ; Save index address + LD A,(HL) ; Get sign of STEP + INC HL + PUSH AF ; Save sign of STEP + PUSH DE ; Save index address + CALL PHLTFP ; Move index value to FPREG + EX (SP),HL ; Save address of TO value + PUSH HL ; Save address of index + CALL ADDPHL ; Add STEP to index value + POP HL ; Restore address of index + CALL FPTHL ; Move value to index variable + POP HL ; Restore address of TO value + CALL LOADFP ; Move TO value to BCDE + PUSH HL ; Save address of line of FOR + CALL CMPNUM ; Compare index with TO value + POP HL ; Restore address of line num + POP BC ; Address of sign of STEP + SUB B ; Compare with expected sign + CALL LOADFP ; BC = Loop stmt,DE = Line num + JP Z,KILFOR ; Loop finished - Terminate it + EX DE,HL ; Loop statement line number + LD (LINEAT),HL ; Set loop line number + LD L,C ; Set code string to loop + LD H,B + JP PUTFID ; Put back "FOR" and continue + +KILFOR: LD SP,HL ; Remove "FOR" block + LD HL,(BRKLIN) ; Code string after "NEXT" + LD A,(HL) ; Get next byte in code string + CP ',' ; More NEXTs ? + JP NZ,RUNCNT ; No - Do next statement + CALL GETCHR ; Position to index name + CALL NEXT1 ; Re-enter NEXT routine +; < will not RETurn to here , Exit to RUNCNT or Loop > + +GETNUM: CALL EVAL ; Get a numeric expression +TSTNUM: .BYTE 0F6H ; Clear carry (numeric) +TSTSTR: SCF ; Set carry (string) +CHKTYP: LD A,(TYPE) ; Check types match + ADC A,A ; Expected + actual + OR A ; Clear carry , set parity + RET PE ; Even parity - Types match + JP TMERR ; Different types - Error + +OPNPAR: CALL CHKSYN ; Make sure "(" follows + .BYTE "(" +EVAL: DEC HL ; Evaluate expression & save + LD D,0 ; Precedence value +EVAL1: PUSH DE ; Save precedence + LD C,1 + CALL CHKSTK ; Check for 1 level of stack + CALL OPRND ; Get next expression value +EVAL2: LD (NXTOPR),HL ; Save address of next operator +EVAL3: LD HL,(NXTOPR) ; Restore address of next opr + POP BC ; Precedence value and operator + LD A,B ; Get precedence value + CP 78H ; "AND" or "OR" ? + CALL NC,TSTNUM ; No - Make sure it's a number + LD A,(HL) ; Get next operator / function + LD D,0 ; Clear Last relation +RLTLP: SUB ZGTR ; ">" Token + JP C,FOPRND ; + - * / ^ AND OR - Test it + CP ZLTH+1-ZGTR ; < = > + JP NC,FOPRND ; Function - Call it + CP ZEQUAL-ZGTR ; "=" + RLA ; <- Test for legal + XOR D ; <- combinations of < = > + CP D ; <- by combining last token + LD D,A ; <- with current one + JP C,SNERR ; Error if "<<' '==" or ">>" + LD (CUROPR),HL ; Save address of current token + CALL GETCHR ; Get next character + JP RLTLP ; Treat the two as one + +FOPRND: LD A,D ; < = > found ? + OR A + JP NZ,TSTRED ; Yes - Test for reduction + LD A,(HL) ; Get operator token + LD (CUROPR),HL ; Save operator address + SUB ZPLUS ; Operator or function? + RET C ; Neither - Exit + CP ZOR+1-ZPLUS ; Is it + - * / ^ AND OR ? + RET NC ; No - Exit + LD E,A ; Coded operator + LD A,(TYPE) ; Get data type + DEC A ; FF = numeric , 00 = string + OR E ; Combine with coded operator + LD A,E ; Get coded operator + JP Z,CONCAT ; String concatenation + RLCA ; Times 2 + ADD A,E ; Times 3 + LD E,A ; To DE (D is 0) + LD HL,PRITAB ; Precedence table + ADD HL,DE ; To the operator concerned + LD A,B ; Last operator precedence + LD D,(HL) ; Get evaluation precedence + CP D ; Compare with eval precedence + RET NC ; Exit if higher precedence + INC HL ; Point to routine address + CALL TSTNUM ; Make sure it's a number + +STKTHS: PUSH BC ; Save last precedence & token + LD BC,EVAL3 ; Where to go on prec' break + PUSH BC ; Save on stack for return + LD B,E ; Save operator + LD C,D ; Save precedence + CALL STAKFP ; Move value to stack + LD E,B ; Restore operator + LD D,C ; Restore precedence + LD C,(HL) ; Get LSB of routine address + INC HL + LD B,(HL) ; Get MSB of routine address + INC HL + PUSH BC ; Save routine address + LD HL,(CUROPR) ; Address of current operator + JP EVAL1 ; Loop until prec' break + +OPRND: XOR A ; Get operand routine + LD (TYPE),A ; Set numeric expected + CALL GETCHR ; Get next character + LD E,MO ; ?MO Error + JP Z,ERROR ; No operand - Error + JP C,ASCTFP ; Number - Get value + CALL CHKLTR ; See if a letter + JP NC,CONVAR ; Letter - Find variable + CP '&' ; &H = HEX, &B = BINARY + JR NZ, NOTAMP + CALL GETCHR ; Get next character + CP 'H' ; Hex number indicated? [function added] + JP Z,HEXTFP ; Convert Hex to FPREG + CP 'B' ; Binary number indicated? [function added] + JP Z,BINTFP ; Convert Bin to FPREG + LD E,SN ; If neither then a ?SN Error + JP Z,ERROR ; +NOTAMP: CP ZPLUS ; '+' Token ? + JP Z,OPRND ; Yes - Look for operand + CP '.' ; '.' ? + JP Z,ASCTFP ; Yes - Create FP number + CP ZMINUS ; '-' Token ? + JP Z,MINUS ; Yes - Do minus + CP '"' ; Literal string ? + JP Z,QTSTR ; Get string terminated by '"' + CP ZNOT ; "NOT" Token ? + JP Z,EVNOT ; Yes - Eval NOT expression + CP ZFN ; "FN" Token ? + JP Z,DOFN ; Yes - Do FN routine + SUB ZSGN ; Is it a function? + JP NC,FNOFST ; Yes - Evaluate function +EVLPAR: CALL OPNPAR ; Evaluate expression in "()" + CALL CHKSYN ; Make sure ")" follows + .BYTE ")" + RET + +MINUS: LD D,7DH ; '-' precedence + CALL EVAL1 ; Evaluate until prec' break + LD HL,(NXTOPR) ; Get next operator address + PUSH HL ; Save next operator address + CALL INVSGN ; Negate value +RETNUM: CALL TSTNUM ; Make sure it's a number + POP HL ; Restore next operator address + RET + +CONVAR: CALL GETVAR ; Get variable address to DE +FRMEVL: PUSH HL ; Save code string address + EX DE,HL ; Variable address to HL + LD (FPREG),HL ; Save address of variable + LD A,(TYPE) ; Get type + OR A ; Numeric? + CALL Z,PHLTFP ; Yes - Move contents to FPREG + POP HL ; Restore code string address + RET + +FNOFST: LD B,0 ; Get address of function + RLCA ; Double function offset + LD C,A ; BC = Offset in function table + PUSH BC ; Save adjusted token value + CALL GETCHR ; Get next character + LD A,C ; Get adjusted token value + CP 2*(ZLEFT-ZSGN)-1; Adj' LEFT$,RIGHT$ or MID$ ? + JP C,FNVAL ; No - Do function + CALL OPNPAR ; Evaluate expression (X,... + CALL CHKSYN ; Make sure ',' follows + .BYTE ',' + CALL TSTSTR ; Make sure it's a string + EX DE,HL ; Save code string address + LD HL,(FPREG) ; Get address of string + EX (SP),HL ; Save address of string + PUSH HL ; Save adjusted token value + EX DE,HL ; Restore code string address + CALL GETINT ; Get integer 0-255 + EX DE,HL ; Save code string address + EX (SP),HL ; Save integer,HL = adj' token + JP GOFUNC ; Jump to string function + +FNVAL: CALL EVLPAR ; Evaluate expression + EX (SP),HL ; HL = Adjusted token value + LD DE,RETNUM ; Return number from function + PUSH DE ; Save on stack +GOFUNC: LD BC,FNCTAB ; Function routine addresses + ADD HL,BC ; Point to right address + LD C,(HL) ; Get LSB of address + INC HL ; + LD H,(HL) ; Get MSB of address + LD L,C ; Address to HL + JP (HL) ; Jump to function + +SGNEXP: DEC D ; Dee to flag negative exponent + CP ZMINUS ; '-' token ? + RET Z ; Yes - Return + CP '-' ; '-' ASCII ? + RET Z ; Yes - Return + INC D ; Inc to flag positive exponent + CP '+' ; '+' ASCII ? + RET Z ; Yes - Return + CP ZPLUS ; '+' token ? + RET Z ; Yes - Return + DEC HL ; DEC 'cos GETCHR INCs + RET ; Return "NZ" + +POR: .BYTE 0F6H ; Flag "OR" +PAND: XOR A ; Flag "AND" + PUSH AF ; Save "AND" / "OR" flag + CALL TSTNUM ; Make sure it's a number + CALL DEINT ; Get integer -32768 to 32767 + POP AF ; Restore "AND" / "OR" flag + EX DE,HL ; <- Get last + POP BC ; <- value + EX (SP),HL ; <- from + EX DE,HL ; <- stack + CALL FPBCDE ; Move last value to FPREG + PUSH AF ; Save "AND" / "OR" flag + CALL DEINT ; Get integer -32768 to 32767 + POP AF ; Restore "AND" / "OR" flag + POP BC ; Get value + LD A,C ; Get LSB + LD HL,ACPASS ; Address of save AC as current + JP NZ,POR1 ; Jump if OR + AND E ; "AND" LSBs + LD C,A ; Save LSB + LD A,B ; Get MBS + AND D ; "AND" MSBs + JP (HL) ; Save AC as current (ACPASS) + +POR1: OR E ; "OR" LSBs + LD C,A ; Save LSB + LD A,B ; Get MSB + OR D ; "OR" MSBs + JP (HL) ; Save AC as current (ACPASS) + +TSTRED: LD HL,CMPLOG ; Logical compare routine + LD A,(TYPE) ; Get data type + RRA ; Carry set = string + LD A,D ; Get last precedence value + RLA ; Times 2 plus carry + LD E,A ; To E + LD D,64H ; Relational precedence + LD A,B ; Get current precedence + CP D ; Compare with last + RET NC ; Eval if last was rel' or log' + JP STKTHS ; Stack this one and get next + +CMPLOG: .WORD CMPLG1 ; Compare two values / strings +CMPLG1: LD A,C ; Get data type + OR A + RRA + POP BC ; Get last expression to BCDE + POP DE + PUSH AF ; Save status + CALL CHKTYP ; Check that types match + LD HL,CMPRES ; Result to comparison + PUSH HL ; Save for RETurn + JP Z,CMPNUM ; Compare values if numeric + XOR A ; Compare two strings + LD (TYPE),A ; Set type to numeric + PUSH DE ; Save string name + CALL GSTRCU ; Get current string + LD A,(HL) ; Get length of string + INC HL + INC HL + LD C,(HL) ; Get LSB of address + INC HL + LD B,(HL) ; Get MSB of address + POP DE ; Restore string name + PUSH BC ; Save address of string + PUSH AF ; Save length of string + CALL GSTRDE ; Get second string + CALL LOADFP ; Get address of second string + POP AF ; Restore length of string 1 + LD D,A ; Length to D + POP HL ; Restore address of string 1 +CMPSTR: LD A,E ; Bytes of string 2 to do + OR D ; Bytes of string 1 to do + RET Z ; Exit if all bytes compared + LD A,D ; Get bytes of string 1 to do + SUB 1 + RET C ; Exit if end of string 1 + XOR A + CP E ; Bytes of string 2 to do + INC A + RET NC ; Exit if end of string 2 + DEC D ; Count bytes in string 1 + DEC E ; Count bytes in string 2 + LD A,(BC) ; Byte in string 2 + CP (HL) ; Compare to byte in string 1 + INC HL ; Move up string 1 + INC BC ; Move up string 2 + JP Z,CMPSTR ; Same - Try next bytes + CCF ; Flag difference (">" or "<") + JP FLGDIF ; "<" gives -1 , ">" gives +1 + +CMPRES: INC A ; Increment current value + ADC A,A ; Double plus carry + POP BC ; Get other value + AND B ; Combine them + ADD A,-1 ; Carry set if different + SBC A,A ; 00 - Equal , FF - Different + JP FLGREL ; Set current value & continue + +EVNOT: LD D,5AH ; Precedence value for "NOT" + CALL EVAL1 ; Eval until precedence break + CALL TSTNUM ; Make sure it's a number + CALL DEINT ; Get integer -32768 - 32767 + LD A,E ; Get LSB + CPL ; Invert LSB + LD C,A ; Save "NOT" of LSB + LD A,D ; Get MSB + CPL ; Invert MSB + CALL ACPASS ; Save AC as current + POP BC ; Clean up stack + JP EVAL3 ; Continue evaluation + +DIMRET: DEC HL ; DEC 'cos GETCHR INCs + CALL GETCHR ; Get next character + RET Z ; End of DIM statement + CALL CHKSYN ; Make sure ',' follows + .BYTE ',' +DIM: LD BC,DIMRET ; Return to "DIMRET" + PUSH BC ; Save on stack + .BYTE 0F6H ; Flag "Create" variable +GETVAR: XOR A ; Find variable address,to DE + LD (LCRFLG),A ; Set locate / create flag + LD B,(HL) ; Get First byte of name +GTFNAM: CALL CHKLTR ; See if a letter + JP C,SNERR ; ?SN Error if not a letter + XOR A + LD C,A ; Clear second byte of name + LD (TYPE),A ; Set type to numeric + CALL GETCHR ; Get next character + JP C,SVNAM2 ; Numeric - Save in name + CALL CHKLTR ; See if a letter + JP C,CHARTY ; Not a letter - Check type +SVNAM2: LD C,A ; Save second byte of name +ENDNAM: CALL GETCHR ; Get next character + JP C,ENDNAM ; Numeric - Get another + CALL CHKLTR ; See if a letter + JP NC,ENDNAM ; Letter - Get another +CHARTY: SUB '$' ; String variable? + JP NZ,NOTSTR ; No - Numeric variable + INC A ; A = 1 (string type) + LD (TYPE),A ; Set type to string + RRCA ; A = 80H , Flag for string + ADD A,C ; 2nd byte of name has bit 7 on + LD C,A ; Resave second byte on name + CALL GETCHR ; Get next character +NOTSTR: LD A,(FORFLG) ; Array name needed ? + DEC A + JP Z,ARLDSV ; Yes - Get array name + JP P,NSCFOR ; No array with "FOR" or "FN" + LD A,(HL) ; Get byte again + SUB '(' ; Subscripted variable? + JP Z,SBSCPT ; Yes - Sort out subscript + +NSCFOR: XOR A ; Simple variable + LD (FORFLG),A ; Clear "FOR" flag + PUSH HL ; Save code string address + LD D,B ; DE = Variable name to find + LD E,C + LD HL,(FNRGNM) ; FN argument name + CALL CPDEHL ; Is it the FN argument? + LD DE,FNARG ; Point to argument value + JP Z,POPHRT ; Yes - Return FN argument value + LD HL,(VAREND) ; End of variables + EX DE,HL ; Address of end of search + LD HL,(PROGND) ; Start of variables address +FNDVAR: CALL CPDEHL ; End of variable list table? + JP Z,CFEVAL ; Yes - Called from EVAL? + LD A,C ; Get second byte of name + SUB (HL) ; Compare with name in list + INC HL ; Move on to first byte + JP NZ,FNTHR ; Different - Find another + LD A,B ; Get first byte of name + SUB (HL) ; Compare with name in list +FNTHR: INC HL ; Move on to LSB of value + JP Z,RETADR ; Found - Return address + INC HL ; <- Skip + INC HL ; <- over + INC HL ; <- F.P. + INC HL ; <- value + JP FNDVAR ; Keep looking + +CFEVAL: POP HL ; Restore code string address + EX (SP),HL ; Get return address + PUSH DE ; Save address of variable + LD DE,FRMEVL ; Return address in EVAL + CALL CPDEHL ; Called from EVAL ? + POP DE ; Restore address of variable + JP Z,RETNUL ; Yes - Return null variable + EX (SP),HL ; Put back return + PUSH HL ; Save code string address + PUSH BC ; Save variable name + LD BC,6 ; 2 byte name plus 4 byte data + LD HL,(ARREND) ; End of arrays + PUSH HL ; Save end of arrays + ADD HL,BC ; Move up 6 bytes + POP BC ; Source address in BC + PUSH HL ; Save new end address + CALL MOVUP ; Move arrays up + POP HL ; Restore new end address + LD (ARREND),HL ; Set new end address + LD H,B ; End of variables to HL + LD L,C + LD (VAREND),HL ; Set new end address + +ZEROLP: DEC HL ; Back through to zero variable + LD (HL),0 ; Zero byte in variable + CALL CPDEHL ; Done them all? + JP NZ,ZEROLP ; No - Keep on going + POP DE ; Get variable name + LD (HL),E ; Store second character + INC HL + LD (HL),D ; Store first character + INC HL +RETADR: EX DE,HL ; Address of variable in DE + POP HL ; Restore code string address + RET + +RETNUL: LD (FPEXP),A ; Set result to zero + LD HL,ZERBYT ; Also set a null string + LD (FPREG),HL ; Save for EVAL + POP HL ; Restore code string address + RET + +SBSCPT: PUSH HL ; Save code string address + LD HL,(LCRFLG) ; Locate/Create and Type + EX (SP),HL ; Save and get code string + LD D,A ; Zero number of dimensions +SCPTLP: PUSH DE ; Save number of dimensions + PUSH BC ; Save array name + CALL FPSINT ; Get subscript (0-32767) + POP BC ; Restore array name + POP AF ; Get number of dimensions + EX DE,HL + EX (SP),HL ; Save subscript value + PUSH HL ; Save LCRFLG and TYPE + EX DE,HL + INC A ; Count dimensions + LD D,A ; Save in D + LD A,(HL) ; Get next byte in code string + CP ',' ; Comma (more to come)? + JP Z,SCPTLP ; Yes - More subscripts + CALL CHKSYN ; Make sure ")" follows + .BYTE ")" + LD (NXTOPR),HL ; Save code string address + POP HL ; Get LCRFLG and TYPE + LD (LCRFLG),HL ; Restore Locate/create & type + LD E,0 ; Flag not CSAVE* or CLOAD* + PUSH DE ; Save number of dimensions (D) + .BYTE 11H ; Skip "PUSH HL" and "PUSH AF' + +ARLDSV: PUSH HL ; Save code string address + PUSH AF ; A = 00 , Flags set = Z,N + LD HL,(VAREND) ; Start of arrays + .BYTE 3EH ; Skip "ADD HL,DE" +FNDARY: ADD HL,DE ; Move to next array start + EX DE,HL + LD HL,(ARREND) ; End of arrays + EX DE,HL ; Current array pointer + CALL CPDEHL ; End of arrays found? + JP Z,CREARY ; Yes - Create array + LD A,(HL) ; Get second byte of name + CP C ; Compare with name given + INC HL ; Move on + JP NZ,NXTARY ; Different - Find next array + LD A,(HL) ; Get first byte of name + CP B ; Compare with name given +NXTARY: INC HL ; Move on + LD E,(HL) ; Get LSB of next array address + INC HL + LD D,(HL) ; Get MSB of next array address + INC HL + JP NZ,FNDARY ; Not found - Keep looking + LD A,(LCRFLG) ; Found Locate or Create it? + OR A + JP NZ,DDERR ; Create - ?DD Error + POP AF ; Locate - Get number of dim'ns + LD B,H ; BC Points to array dim'ns + LD C,L + JP Z,POPHRT ; Jump if array load/save + SUB (HL) ; Same number of dimensions? + JP Z,FINDEL ; Yes - Find element +BSERR: LD E,BS ; ?BS Error + JP ERROR ; Output error + +CREARY: LD DE,4 ; 4 Bytes per entry + POP AF ; Array to save or 0 dim'ns? + JP Z,FCERR ; Yes - ?FC Error + LD (HL),C ; Save second byte of name + INC HL + LD (HL),B ; Save first byte of name + INC HL + LD C,A ; Number of dimensions to C + CALL CHKSTK ; Check if enough memory + INC HL ; Point to number of dimensions + INC HL + LD (CUROPR),HL ; Save address of pointer + LD (HL),C ; Set number of dimensions + INC HL + LD A,(LCRFLG) ; Locate of Create? + RLA ; Carry set = Create + LD A,C ; Get number of dimensions +CRARLP: LD BC,10+1 ; Default dimension size 10 + JP NC,DEFSIZ ; Locate - Set default size + POP BC ; Get specified dimension size + INC BC ; Include zero element +DEFSIZ: LD (HL),C ; Save LSB of dimension size + INC HL + LD (HL),B ; Save MSB of dimension size + INC HL + PUSH AF ; Save num' of dim'ns an status + PUSH HL ; Save address of dim'n size + CALL MLDEBC ; Multiply DE by BC to find + EX DE,HL ; amount of mem needed (to DE) + POP HL ; Restore address of dimension + POP AF ; Restore number of dimensions + DEC A ; Count them + JP NZ,CRARLP ; Do next dimension if more + PUSH AF ; Save locate/create flag + LD B,D ; MSB of memory needed + LD C,E ; LSB of memory needed + EX DE,HL + ADD HL,DE ; Add bytes to array start + JP C,OMERR ; Too big - Error + CALL ENFMEM ; See if enough memory + LD (ARREND),HL ; Save new end of array + +ZERARY: DEC HL ; Back through array data + LD (HL),0 ; Set array element to zero + CALL CPDEHL ; All elements zeroed? + JP NZ,ZERARY ; No - Keep on going + INC BC ; Number of bytes + 1 + LD D,A ; A=0 + LD HL,(CUROPR) ; Get address of array + LD E,(HL) ; Number of dimensions + EX DE,HL ; To HL + ADD HL,HL ; Two bytes per dimension size + ADD HL,BC ; Add number of bytes + EX DE,HL ; Bytes needed to DE + DEC HL + DEC HL + LD (HL),E ; Save LSB of bytes needed + INC HL + LD (HL),D ; Save MSB of bytes needed + INC HL + POP AF ; Locate / Create? + JP C,ENDDIM ; A is 0 , End if create +FINDEL: LD B,A ; Find array element + LD C,A + LD A,(HL) ; Number of dimensions + INC HL + .BYTE 16H ; Skip "POP HL" +FNDELP: POP HL ; Address of next dim' size + LD E,(HL) ; Get LSB of dim'n size + INC HL + LD D,(HL) ; Get MSB of dim'n size + INC HL + EX (SP),HL ; Save address - Get index + PUSH AF ; Save number of dim'ns + CALL CPDEHL ; Dimension too large? + JP NC,BSERR ; Yes - ?BS Error + PUSH HL ; Save index + CALL MLDEBC ; Multiply previous by size + POP DE ; Index supplied to DE + ADD HL,DE ; Add index to pointer + POP AF ; Number of dimensions + DEC A ; Count them + LD B,H ; MSB of pointer + LD C,L ; LSB of pointer + JP NZ,FNDELP ; More - Keep going + ADD HL,HL ; 4 Bytes per element + ADD HL,HL + POP BC ; Start of array + ADD HL,BC ; Point to element + EX DE,HL ; Address of element to DE +ENDDIM: LD HL,(NXTOPR) ; Got code string address + RET + +FRE: LD HL,(ARREND) ; Start of free memory + EX DE,HL ; To DE + LD HL,0 ; End of free memory + ADD HL,SP ; Current stack value + LD A,(TYPE) ; Dummy argument type + OR A + JP Z,FRENUM ; Numeric - Free variable space + CALL GSTRCU ; Current string to pool + CALL GARBGE ; Garbage collection + LD HL,(STRSPC) ; Bottom of string space in use + EX DE,HL ; To DE + LD HL,(STRBOT) ; Bottom of string space +FRENUM: LD A,L ; Get LSB of end + SUB E ; Subtract LSB of beginning + LD C,A ; Save difference if C + LD A,H ; Get MSB of end + SBC A,D ; Subtract MSB of beginning +ACPASS: LD B,C ; Return integer AC +ABPASS: LD D,B ; Return integer AB + LD E,0 + LD HL,TYPE ; Point to type + LD (HL),E ; Set type to numeric + LD B,80H+16 ; 16 bit integer + JP RETINT ; Return the integr + +POS: LD A,(CURPOS) ; Get cursor position +PASSA: LD B,A ; Put A into AB + XOR A ; Zero A + JP ABPASS ; Return integer AB + +DEF: CALL CHEKFN ; Get "FN" and name + CALL IDTEST ; Test for illegal direct + LD BC,DATA ; To get next statement + PUSH BC ; Save address for RETurn + PUSH DE ; Save address of function ptr + CALL CHKSYN ; Make sure "(" follows + .BYTE "(" + CALL GETVAR ; Get argument variable name + PUSH HL ; Save code string address + EX DE,HL ; Argument address to HL + DEC HL + LD D,(HL) ; Get first byte of arg name + DEC HL + LD E,(HL) ; Get second byte of arg name + POP HL ; Restore code string address + CALL TSTNUM ; Make sure numeric argument + CALL CHKSYN ; Make sure ")" follows + .BYTE ")" + CALL CHKSYN ; Make sure "=" follows + .BYTE ZEQUAL ; "=" token + LD B,H ; Code string address to BC + LD C,L + EX (SP),HL ; Save code str , Get FN ptr + LD (HL),C ; Save LSB of FN code string + INC HL + LD (HL),B ; Save MSB of FN code string + JP SVSTAD ; Save address and do function + +DOFN: CALL CHEKFN ; Make sure FN follows + PUSH DE ; Save function pointer address + CALL EVLPAR ; Evaluate expression in "()" + CALL TSTNUM ; Make sure numeric result + EX (SP),HL ; Save code str , Get FN ptr + LD E,(HL) ; Get LSB of FN code string + INC HL + LD D,(HL) ; Get MSB of FN code string + INC HL + LD A,D ; And function DEFined? + OR E + JP Z,UFERR ; No - ?UF Error + LD A,(HL) ; Get LSB of argument address + INC HL + LD H,(HL) ; Get MSB of argument address + LD L,A ; HL = Arg variable address + PUSH HL ; Save it + LD HL,(FNRGNM) ; Get old argument name + EX (SP),HL ; ; Save old , Get new + LD (FNRGNM),HL ; Set new argument name + LD HL,(FNARG+2) ; Get LSB,NLSB of old arg value + PUSH HL ; Save it + LD HL,(FNARG) ; Get MSB,EXP of old arg value + PUSH HL ; Save it + LD HL,FNARG ; HL = Value of argument + PUSH DE ; Save FN code string address + CALL FPTHL ; Move FPREG to argument + POP HL ; Get FN code string address + CALL GETNUM ; Get value from function + DEC HL ; DEC 'cos GETCHR INCs + CALL GETCHR ; Get next character + JP NZ,SNERR ; Bad character in FN - Error + POP HL ; Get MSB,EXP of old arg + LD (FNARG),HL ; Restore it + POP HL ; Get LSB,NLSB of old arg + LD (FNARG+2),HL ; Restore it + POP HL ; Get name of old arg + LD (FNRGNM),HL ; Restore it + POP HL ; Restore code string address + RET + +IDTEST: PUSH HL ; Save code string address + LD HL,(LINEAT) ; Get current line number + INC HL ; -1 means direct statement + LD A,H + OR L + POP HL ; Restore code string address + RET NZ ; Return if in program + LD E,ID ; ?ID Error + JP ERROR + +CHEKFN: CALL CHKSYN ; Make sure FN follows + .BYTE ZFN ; "FN" token + LD A,80H + LD (FORFLG),A ; Flag FN name to find + OR (HL) ; FN name has bit 7 set + LD B,A ; in first byte of name + CALL GTFNAM ; Get FN name + JP TSTNUM ; Make sure numeric function + +STR: CALL TSTNUM ; Make sure it's a number + CALL NUMASC ; Turn number into text +STR1: CALL CRTST ; Create string entry for it + CALL GSTRCU ; Current string to pool + LD BC,TOPOOL ; Save in string pool + PUSH BC ; Save address on stack + +SAVSTR: LD A,(HL) ; Get string length + INC HL + INC HL + PUSH HL ; Save pointer to string + CALL TESTR ; See if enough string space + POP HL ; Restore pointer to string + LD C,(HL) ; Get LSB of address + INC HL + LD B,(HL) ; Get MSB of address + CALL CRTMST ; Create string entry + PUSH HL ; Save pointer to MSB of addr + LD L,A ; Length of string + CALL TOSTRA ; Move to string area + POP DE ; Restore pointer to MSB + RET + +MKTMST: CALL TESTR ; See if enough string space +CRTMST: LD HL,TMPSTR ; Temporary string + PUSH HL ; Save it + LD (HL),A ; Save length of string + INC HL +SVSTAD: INC HL + LD (HL),E ; Save LSB of address + INC HL + LD (HL),D ; Save MSB of address + POP HL ; Restore pointer + RET + +CRTST: DEC HL ; DEC - INCed after +QTSTR: LD B,'"' ; Terminating quote + LD D,B ; Quote to D +DTSTR: PUSH HL ; Save start + LD C,-1 ; Set counter to -1 +QTSTLP: INC HL ; Move on + LD A,(HL) ; Get byte + INC C ; Count bytes + OR A ; End of line? + JP Z,CRTSTE ; Yes - Create string entry + CP D ; Terminator D found? + JP Z,CRTSTE ; Yes - Create string entry + CP B ; Terminator B found? + JP NZ,QTSTLP ; No - Keep looking +CRTSTE: CP '"' ; End with '"'? + CALL Z,GETCHR ; Yes - Get next character + EX (SP),HL ; Starting quote + INC HL ; First byte of string + EX DE,HL ; To DE + LD A,C ; Get length + CALL CRTMST ; Create string entry +TSTOPL: LD DE,TMPSTR ; Temporary string + LD HL,(TMSTPT) ; Temporary string pool pointer + LD (FPREG),HL ; Save address of string ptr + LD A,1 + LD (TYPE),A ; Set type to string + CALL DETHL4 ; Move string to pool + CALL CPDEHL ; Out of string pool? + LD (TMSTPT),HL ; Save new pointer + POP HL ; Restore code string address + LD A,(HL) ; Get next code byte + RET NZ ; Return if pool OK + LD E,ST ; ?ST Error + JP ERROR ; String pool overflow + +PRNUMS: INC HL ; Skip leading space +PRS: CALL CRTST ; Create string entry for it +PRS1: CALL GSTRCU ; Current string to pool + CALL LOADFP ; Move string block to BCDE + INC E ; Length + 1 +PRSLP: DEC E ; Count characters + RET Z ; End of string + LD A,(BC) ; Get byte to output + CALL OUTC ; Output character in A + CP CR ; Return? + CALL Z,DONULL ; Yes - Do nulls + INC BC ; Next byte in string + JP PRSLP ; More characters to output + +TESTR: OR A ; Test if enough room + .BYTE 0EH ; No garbage collection done +GRBDON: POP AF ; Garbage collection done + PUSH AF ; Save status + LD HL,(STRSPC) ; Bottom of string space in use + EX DE,HL ; To DE + LD HL,(STRBOT) ; Bottom of string area + CPL ; Negate length (Top down) + LD C,A ; -Length to BC + LD B,-1 ; BC = -ve length of string + ADD HL,BC ; Add to bottom of space in use + INC HL ; Plus one for 2's complement + CALL CPDEHL ; Below string RAM area? + JP C,TESTOS ; Tidy up if not done else err + LD (STRBOT),HL ; Save new bottom of area + INC HL ; Point to first byte of string + EX DE,HL ; Address to DE +POPAF: POP AF ; Throw away status push + RET + +TESTOS: POP AF ; Garbage collect been done? + LD E,OS ; ?OS Error + JP Z,ERROR ; Yes - Not enough string apace + CP A ; Flag garbage collect done + PUSH AF ; Save status + LD BC,GRBDON ; Garbage collection done + PUSH BC ; Save for RETurn +GARBGE: LD HL,(LSTRAM) ; Get end of RAM pointer +GARBLP: LD (STRBOT),HL ; Reset string pointer + LD HL,0 + PUSH HL ; Flag no string found + LD HL,(STRSPC) ; Get bottom of string space + PUSH HL ; Save bottom of string space + LD HL,TMSTPL ; Temporary string pool +GRBLP: EX DE,HL + LD HL,(TMSTPT) ; Temporary string pool pointer + EX DE,HL + CALL CPDEHL ; Temporary string pool done? + LD BC,GRBLP ; Loop until string pool done + JP NZ,STPOOL ; No - See if in string area + LD HL,(PROGND) ; Start of simple variables +SMPVAR: EX DE,HL + LD HL,(VAREND) ; End of simple variables + EX DE,HL + CALL CPDEHL ; All simple strings done? + JP Z,ARRLP ; Yes - Do string arrays + LD A,(HL) ; Get type of variable + INC HL + INC HL + OR A ; "S" flag set if string + CALL STRADD ; See if string in string area + JP SMPVAR ; Loop until simple ones done + +GNXARY: POP BC ; Scrap address of this array +ARRLP: EX DE,HL + LD HL,(ARREND) ; End of string arrays + EX DE,HL + CALL CPDEHL ; All string arrays done? + JP Z,SCNEND ; Yes - Move string if found + CALL LOADFP ; Get array name to BCDE + LD A,E ; Get type of array + PUSH HL ; Save address of num of dim'ns + ADD HL,BC ; Start of next array + OR A ; Test type of array + JP P,GNXARY ; Numeric array - Ignore it + LD (CUROPR),HL ; Save address of next array + POP HL ; Get address of num of dim'ns + LD C,(HL) ; BC = Number of dimensions + LD B,0 + ADD HL,BC ; Two bytes per dimension size + ADD HL,BC + INC HL ; Plus one for number of dim'ns +GRBARY: EX DE,HL + LD HL,(CUROPR) ; Get address of next array + EX DE,HL + CALL CPDEHL ; Is this array finished? + JP Z,ARRLP ; Yes - Get next one + LD BC,GRBARY ; Loop until array all done +STPOOL: PUSH BC ; Save return address + OR 80H ; Flag string type +STRADD: LD A,(HL) ; Get string length + INC HL + INC HL + LD E,(HL) ; Get LSB of string address + INC HL + LD D,(HL) ; Get MSB of string address + INC HL + RET P ; Not a string - Return + OR A ; Set flags on string length + RET Z ; Null string - Return + LD B,H ; Save variable pointer + LD C,L + LD HL,(STRBOT) ; Bottom of new area + CALL CPDEHL ; String been done? + LD H,B ; Restore variable pointer + LD L,C + RET C ; String done - Ignore + POP HL ; Return address + EX (SP),HL ; Lowest available string area + CALL CPDEHL ; String within string area? + EX (SP),HL ; Lowest available string area + PUSH HL ; Re-save return address + LD H,B ; Restore variable pointer + LD L,C + RET NC ; Outside string area - Ignore + POP BC ; Get return , Throw 2 away + POP AF ; + POP AF ; + PUSH HL ; Save variable pointer + PUSH DE ; Save address of current + PUSH BC ; Put back return address + RET ; Go to it + +SCNEND: POP DE ; Addresses of strings + POP HL ; + LD A,L ; HL = 0 if no more to do + OR H + RET Z ; No more to do - Return + DEC HL + LD B,(HL) ; MSB of address of string + DEC HL + LD C,(HL) ; LSB of address of string + PUSH HL ; Save variable address + DEC HL + DEC HL + LD L,(HL) ; HL = Length of string + LD H,0 + ADD HL,BC ; Address of end of string+1 + LD D,B ; String address to DE + LD E,C + DEC HL ; Last byte in string + LD B,H ; Address to BC + LD C,L + LD HL,(STRBOT) ; Current bottom of string area + CALL MOVSTR ; Move string to new address + POP HL ; Restore variable address + LD (HL),C ; Save new LSB of address + INC HL + LD (HL),B ; Save new MSB of address + LD L,C ; Next string area+1 to HL + LD H,B + DEC HL ; Next string area address + JP GARBLP ; Look for more strings + +CONCAT: PUSH BC ; Save prec' opr & code string + PUSH HL ; + LD HL,(FPREG) ; Get first string + EX (SP),HL ; Save first string + CALL OPRND ; Get second string + EX (SP),HL ; Restore first string + CALL TSTSTR ; Make sure it's a string + LD A,(HL) ; Get length of second string + PUSH HL ; Save first string + LD HL,(FPREG) ; Get second string + PUSH HL ; Save second string + ADD A,(HL) ; Add length of second string + LD E,LS ; ?LS Error + JP C,ERROR ; String too long - Error + CALL MKTMST ; Make temporary string + POP DE ; Get second string to DE + CALL GSTRDE ; Move to string pool if needed + EX (SP),HL ; Get first string + CALL GSTRHL ; Move to string pool if needed + PUSH HL ; Save first string + LD HL,(TMPSTR+2) ; Temporary string address + EX DE,HL ; To DE + CALL SSTSA ; First string to string area + CALL SSTSA ; Second string to string area + LD HL,EVAL2 ; Return to evaluation loop + EX (SP),HL ; Save return,get code string + PUSH HL ; Save code string address + JP TSTOPL ; To temporary string to pool + +SSTSA: POP HL ; Return address + EX (SP),HL ; Get string block,save return + LD A,(HL) ; Get length of string + INC HL + INC HL + LD C,(HL) ; Get LSB of string address + INC HL + LD B,(HL) ; Get MSB of string address + LD L,A ; Length to L +TOSTRA: INC L ; INC - DECed after +TSALP: DEC L ; Count bytes moved + RET Z ; End of string - Return + LD A,(BC) ; Get source + LD (DE),A ; Save destination + INC BC ; Next source + INC DE ; Next destination + JP TSALP ; Loop until string moved + +GETSTR: CALL TSTSTR ; Make sure it's a string +GSTRCU: LD HL,(FPREG) ; Get current string +GSTRHL: EX DE,HL ; Save DE +GSTRDE: CALL BAKTMP ; Was it last tmp-str? + EX DE,HL ; Restore DE + RET NZ ; No - Return + PUSH DE ; Save string + LD D,B ; String block address to DE + LD E,C + DEC DE ; Point to length + LD C,(HL) ; Get string length + LD HL,(STRBOT) ; Current bottom of string area + CALL CPDEHL ; Last one in string area? + JP NZ,POPHL ; No - Return + LD B,A ; Clear B (A=0) + ADD HL,BC ; Remove string from str' area + LD (STRBOT),HL ; Save new bottom of str' area +POPHL: POP HL ; Restore string + RET + +BAKTMP: LD HL,(TMSTPT) ; Get temporary string pool top + DEC HL ; Back + LD B,(HL) ; Get MSB of address + DEC HL ; Back + LD C,(HL) ; Get LSB of address + DEC HL ; Back + DEC HL ; Back + CALL CPDEHL ; String last in string pool? + RET NZ ; Yes - Leave it + LD (TMSTPT),HL ; Save new string pool top + RET + +LEN: LD BC,PASSA ; To return integer A + PUSH BC ; Save address +GETLEN: CALL GETSTR ; Get string and its length + XOR A + LD D,A ; Clear D + LD (TYPE),A ; Set type to numeric + LD A,(HL) ; Get length of string + OR A ; Set status flags + RET + +ASC: LD BC,PASSA ; To return integer A + PUSH BC ; Save address +GTFLNM: CALL GETLEN ; Get length of string + JP Z,FCERR ; Null string - Error + INC HL + INC HL + LD E,(HL) ; Get LSB of address + INC HL + LD D,(HL) ; Get MSB of address + LD A,(DE) ; Get first byte of string + RET + +CHR: LD A,1 ; One character string + CALL MKTMST ; Make a temporary string + CALL MAKINT ; Make it integer A + LD HL,(TMPSTR+2) ; Get address of string + LD (HL),E ; Save character +TOPOOL: POP BC ; Clean up stack + JP TSTOPL ; Temporary string to pool + +LEFT: CALL LFRGNM ; Get number and ending ")" + XOR A ; Start at first byte in string +RIGHT1: EX (SP),HL ; Save code string,Get string + LD C,A ; Starting position in string +MID1: PUSH HL ; Save string block address + LD A,(HL) ; Get length of string + CP B ; Compare with number given + JP C,ALLFOL ; All following bytes required + LD A,B ; Get new length + .BYTE 11H ; Skip "LD C,0" +ALLFOL: LD C,0 ; First byte of string + PUSH BC ; Save position in string + CALL TESTR ; See if enough string space + POP BC ; Get position in string + POP HL ; Restore string block address + PUSH HL ; And re-save it + INC HL + INC HL + LD B,(HL) ; Get LSB of address + INC HL + LD H,(HL) ; Get MSB of address + LD L,B ; HL = address of string + LD B,0 ; BC = starting address + ADD HL,BC ; Point to that byte + LD B,H ; BC = source string + LD C,L + CALL CRTMST ; Create a string entry + LD L,A ; Length of new string + CALL TOSTRA ; Move string to string area + POP DE ; Clear stack + CALL GSTRDE ; Move to string pool if needed + JP TSTOPL ; Temporary string to pool + +RIGHT: CALL LFRGNM ; Get number and ending ")" + POP DE ; Get string length + PUSH DE ; And re-save + LD A,(DE) ; Get length + SUB B ; Move back N bytes + JP RIGHT1 ; Go and get sub-string + +MID: EX DE,HL ; Get code string address + LD A,(HL) ; Get next byte ',' or ")" + CALL MIDNUM ; Get number supplied + INC B ; Is it character zero? + DEC B + JP Z,FCERR ; Yes - Error + PUSH BC ; Save starting position + LD E,255 ; All of string + CP ')' ; Any length given? + JP Z,RSTSTR ; No - Rest of string + CALL CHKSYN ; Make sure ',' follows + .BYTE ',' + CALL GETINT ; Get integer 0-255 +RSTSTR: CALL CHKSYN ; Make sure ")" follows + .BYTE ")" + POP AF ; Restore starting position + EX (SP),HL ; Get string,8ave code string + LD BC,MID1 ; Continuation of MID$ routine + PUSH BC ; Save for return + DEC A ; Starting position-1 + CP (HL) ; Compare with length + LD B,0 ; Zero bytes length + RET NC ; Null string if start past end + LD C,A ; Save starting position-1 + LD A,(HL) ; Get length of string + SUB C ; Subtract start + CP E ; Enough string for it? + LD B,A ; Save maximum length available + RET C ; Truncate string if needed + LD B,E ; Set specified length + RET ; Go and create string + +VAL: CALL GETLEN ; Get length of string + JP Z,RESZER ; Result zero + LD E,A ; Save length + INC HL + INC HL + LD A,(HL) ; Get LSB of address + INC HL + LD H,(HL) ; Get MSB of address + LD L,A ; HL = String address + PUSH HL ; Save string address + ADD HL,DE + LD B,(HL) ; Get end of string+1 byte + LD (HL),D ; Zero it to terminate + EX (SP),HL ; Save string end,get start + PUSH BC ; Save end+1 byte + LD A,(HL) ; Get starting byte + CP '$' ; Hex number indicated? [function added] + JP NZ,VAL1 + CALL HEXTFP ; Convert Hex to FPREG + JR VAL3 +VAL1: CP '%' ; Binary number indicated? [function added] + JP NZ,VAL2 + CALL BINTFP ; Convert Bin to FPREG + JR VAL3 +VAL2: CALL ASCTFP ; Convert ASCII string to FP +VAL3: POP BC ; Restore end+1 byte + POP HL ; Restore end+1 address + LD (HL),B ; Put back original byte + RET + +LFRGNM: EX DE,HL ; Code string address to HL + CALL CHKSYN ; Make sure ")" follows + .BYTE ")" +MIDNUM: POP BC ; Get return address + POP DE ; Get number supplied + PUSH BC ; Re-save return address + LD B,E ; Number to B + RET + +INP: CALL MAKINT ; Make it integer A + LD (INPORT),A ; Set input port + CALL INPSUB ; Get input from port + JP PASSA ; Return integer A + +POUT: CALL SETIO ; Set up port number + JP OUTSUB ; Output data and return + +WAIT: CALL SETIO ; Set up port number + PUSH AF ; Save AND mask + LD E,0 ; Assume zero if none given + DEC HL ; DEC 'cos GETCHR INCs + CALL GETCHR ; Get next character + JP Z,NOXOR ; No XOR byte given + CALL CHKSYN ; Make sure ',' follows + .BYTE ',' + CALL GETINT ; Get integer 0-255 to XOR with +NOXOR: POP BC ; Restore AND mask +WAITLP: CALL INPSUB ; Get input + XOR E ; Flip selected bits + AND B ; Result non-zero? + JP Z,WAITLP ; No = keep waiting + RET + +SETIO: CALL GETINT ; Get integer 0-255 + LD (INPORT),A ; Set input port + LD (OTPORT),A ; Set output port + CALL CHKSYN ; Make sure ',' follows + .BYTE ',' + JP GETINT ; Get integer 0-255 and return + +FNDNUM: CALL GETCHR ; Get next character +GETINT: CALL GETNUM ; Get a number from 0 to 255 +MAKINT: CALL DEPINT ; Make sure value 0 - 255 + LD A,D ; Get MSB of number + OR A ; Zero? + JP NZ,FCERR ; No - Error + DEC HL ; DEC 'cos GETCHR INCs + CALL GETCHR ; Get next character + LD A,E ; Get number to A + RET + +PEEK: CALL DEINT ; Get memory address + LD A,(DE) ; Get byte in memory + JP PASSA ; Return integer A + +POKE: CALL GETNUM ; Get memory address + CALL DEINT ; Get integer -32768 to 3276 + PUSH DE ; Save memory address + CALL CHKSYN ; Make sure ',' follows + .BYTE ',' + CALL GETINT ; Get integer 0-255 + POP DE ; Restore memory address + LD (DE),A ; Load it into memory + RET + +ROUND: LD HL,HALF ; Add 0.5 to FPREG +ADDPHL: CALL LOADFP ; Load FP at (HL) to BCDE + JP FPADD ; Add BCDE to FPREG + +SUBPHL: CALL LOADFP ; FPREG = -FPREG + number at HL + .BYTE 21H ; Skip "POP BC" and "POP DE" +PSUB: POP BC ; Get FP number from stack + POP DE +SUBCDE: CALL INVSGN ; Negate FPREG +FPADD: LD A,B ; Get FP exponent + OR A ; Is number zero? + RET Z ; Yes - Nothing to add + LD A,(FPEXP) ; Get FPREG exponent + OR A ; Is this number zero? + JP Z,FPBCDE ; Yes - Move BCDE to FPREG + SUB B ; BCDE number larger? + JP NC,NOSWAP ; No - Don't swap them + CPL ; Two's complement + INC A ; FP exponent + EX DE,HL + CALL STAKFP ; Put FPREG on stack + EX DE,HL + CALL FPBCDE ; Move BCDE to FPREG + POP BC ; Restore number from stack + POP DE +NOSWAP: CP 24+1 ; Second number insignificant? + RET NC ; Yes - First number is result + PUSH AF ; Save number of bits to scale + CALL SIGNS ; Set MSBs & sign of result + LD H,A ; Save sign of result + POP AF ; Restore scaling factor + CALL SCALE ; Scale BCDE to same exponent + OR H ; Result to be positive? + LD HL,FPREG ; Point to FPREG + JP P,MINCDE ; No - Subtract FPREG from CDE + CALL PLUCDE ; Add FPREG to CDE + JP NC,RONDUP ; No overflow - Round it up + INC HL ; Point to exponent + INC (HL) ; Increment it + JP Z,OVERR ; Number overflowed - Error + LD L,1 ; 1 bit to shift right + CALL SHRT1 ; Shift result right + JP RONDUP ; Round it up + +MINCDE: XOR A ; Clear A and carry + SUB B ; Negate exponent + LD B,A ; Re-save exponent + LD A,(HL) ; Get LSB of FPREG + SBC A, E ; Subtract LSB of BCDE + LD E,A ; Save LSB of BCDE + INC HL + LD A,(HL) ; Get NMSB of FPREG + SBC A,D ; Subtract NMSB of BCDE + LD D,A ; Save NMSB of BCDE + INC HL + LD A,(HL) ; Get MSB of FPREG + SBC A,C ; Subtract MSB of BCDE + LD C,A ; Save MSB of BCDE +CONPOS: CALL C,COMPL ; Overflow - Make it positive + +BNORM: LD L,B ; L = Exponent + LD H,E ; H = LSB + XOR A +BNRMLP: LD B,A ; Save bit count + LD A,C ; Get MSB + OR A ; Is it zero? + JP NZ,PNORM ; No - Do it bit at a time + LD C,D ; MSB = NMSB + LD D,H ; NMSB= LSB + LD H,L ; LSB = VLSB + LD L,A ; VLSB= 0 + LD A,B ; Get exponent + SUB 8 ; Count 8 bits + CP -24-8 ; Was number zero? + JP NZ,BNRMLP ; No - Keep normalising +RESZER: XOR A ; Result is zero +SAVEXP: LD (FPEXP),A ; Save result as zero + RET + +NORMAL: DEC B ; Count bits + ADD HL,HL ; Shift HL left + LD A,D ; Get NMSB + RLA ; Shift left with last bit + LD D,A ; Save NMSB + LD A,C ; Get MSB + ADC A,A ; Shift left with last bit + LD C,A ; Save MSB +PNORM: JP P,NORMAL ; Not done - Keep going + LD A,B ; Number of bits shifted + LD E,H ; Save HL in EB + LD B,L + OR A ; Any shifting done? + JP Z,RONDUP ; No - Round it up + LD HL,FPEXP ; Point to exponent + ADD A,(HL) ; Add shifted bits + LD (HL),A ; Re-save exponent + JP NC,RESZER ; Underflow - Result is zero + RET Z ; Result is zero +RONDUP: LD A,B ; Get VLSB of number +RONDB: LD HL,FPEXP ; Point to exponent + OR A ; Any rounding? + CALL M,FPROND ; Yes - Round number up + LD B,(HL) ; B = Exponent + INC HL + LD A,(HL) ; Get sign of result + AND 10000000B ; Only bit 7 needed + XOR C ; Set correct sign + LD C,A ; Save correct sign in number + JP FPBCDE ; Move BCDE to FPREG + +FPROND: INC E ; Round LSB + RET NZ ; Return if ok + INC D ; Round NMSB + RET NZ ; Return if ok + INC C ; Round MSB + RET NZ ; Return if ok + LD C,80H ; Set normal value + INC (HL) ; Increment exponent + RET NZ ; Return if ok + JP OVERR ; Overflow error + +PLUCDE: LD A,(HL) ; Get LSB of FPREG + ADD A,E ; Add LSB of BCDE + LD E,A ; Save LSB of BCDE + INC HL + LD A,(HL) ; Get NMSB of FPREG + ADC A,D ; Add NMSB of BCDE + LD D,A ; Save NMSB of BCDE + INC HL + LD A,(HL) ; Get MSB of FPREG + ADC A,C ; Add MSB of BCDE + LD C,A ; Save MSB of BCDE + RET + +COMPL: LD HL,SGNRES ; Sign of result + LD A,(HL) ; Get sign of result + CPL ; Negate it + LD (HL),A ; Put it back + XOR A + LD L,A ; Set L to zero + SUB B ; Negate exponent,set carry + LD B,A ; Re-save exponent + LD A,L ; Load zero + SBC A,E ; Negate LSB + LD E,A ; Re-save LSB + LD A,L ; Load zero + SBC A,D ; Negate NMSB + LD D,A ; Re-save NMSB + LD A,L ; Load zero + SBC A,C ; Negate MSB + LD C,A ; Re-save MSB + RET + +SCALE: LD B,0 ; Clear underflow +SCALLP: SUB 8 ; 8 bits (a whole byte)? + JP C,SHRITE ; No - Shift right A bits + LD B,E ; <- Shift + LD E,D ; <- right + LD D,C ; <- eight + LD C,0 ; <- bits + JP SCALLP ; More bits to shift + +SHRITE: ADD A,8+1 ; Adjust count + LD L,A ; Save bits to shift +SHRLP: XOR A ; Flag for all done + DEC L ; All shifting done? + RET Z ; Yes - Return + LD A,C ; Get MSB +SHRT1: RRA ; Shift it right + LD C,A ; Re-save + LD A,D ; Get NMSB + RRA ; Shift right with last bit + LD D,A ; Re-save it + LD A,E ; Get LSB + RRA ; Shift right with last bit + LD E,A ; Re-save it + LD A,B ; Get underflow + RRA ; Shift right with last bit + LD B,A ; Re-save underflow + JP SHRLP ; More bits to do + +UNITY: .BYTE 000H,000H,000H,081H ; 1.00000 + +LOGTAB: .BYTE 3 ; Table used by LOG + .BYTE 0AAH,056H,019H,080H ; 0.59898 + .BYTE 0F1H,022H,076H,080H ; 0.96147 + .BYTE 045H,0AAH,038H,082H ; 2.88539 + +LOG: CALL TSTSGN ; Test sign of value + OR A + JP PE,FCERR ; ?FC Error if <= zero + LD HL,FPEXP ; Point to exponent + LD A,(HL) ; Get exponent + LD BC,8035H ; BCDE = SQR(1/2) + LD DE,04F3H + SUB B ; Scale value to be < 1 + PUSH AF ; Save scale factor + LD (HL),B ; Save new exponent + PUSH DE ; Save SQR(1/2) + PUSH BC + CALL FPADD ; Add SQR(1/2) to value + POP BC ; Restore SQR(1/2) + POP DE + INC B ; Make it SQR(2) + CALL DVBCDE ; Divide by SQR(2) + LD HL,UNITY ; Point to 1. + CALL SUBPHL ; Subtract FPREG from 1 + LD HL,LOGTAB ; Coefficient table + CALL SUMSER ; Evaluate sum of series + LD BC,8080H ; BCDE = -0.5 + LD DE,0000H + CALL FPADD ; Subtract 0.5 from FPREG + POP AF ; Restore scale factor + CALL RSCALE ; Re-scale number +MULLN2: LD BC,8031H ; BCDE = Ln(2) + LD DE,7218H + .BYTE 21H ; Skip "POP BC" and "POP DE" + +MULT: POP BC ; Get number from stack + POP DE +FPMULT: CALL TSTSGN ; Test sign of FPREG + RET Z ; Return zero if zero + LD L,0 ; Flag add exponents + CALL ADDEXP ; Add exponents + LD A,C ; Get MSB of multiplier + LD (MULVAL),A ; Save MSB of multiplier + EX DE,HL + LD (MULVAL+1),HL ; Save rest of multiplier + LD BC,0 ; Partial product (BCDE) = zero + LD D,B + LD E,B + LD HL,BNORM ; Address of normalise + PUSH HL ; Save for return + LD HL,MULT8 ; Address of 8 bit multiply + PUSH HL ; Save for NMSB,MSB + PUSH HL ; + LD HL,FPREG ; Point to number +MULT8: LD A,(HL) ; Get LSB of number + INC HL ; Point to NMSB + OR A ; Test LSB + JP Z,BYTSFT ; Zero - shift to next byte + PUSH HL ; Save address of number + LD L,8 ; 8 bits to multiply by +MUL8LP: RRA ; Shift LSB right + LD H,A ; Save LSB + LD A,C ; Get MSB + JP NC,NOMADD ; Bit was zero - Don't add + PUSH HL ; Save LSB and count + LD HL,(MULVAL+1) ; Get LSB and NMSB + ADD HL,DE ; Add NMSB and LSB + EX DE,HL ; Leave sum in DE + POP HL ; Restore MSB and count + LD A,(MULVAL) ; Get MSB of multiplier + ADC A,C ; Add MSB +NOMADD: RRA ; Shift MSB right + LD C,A ; Re-save MSB + LD A,D ; Get NMSB + RRA ; Shift NMSB right + LD D,A ; Re-save NMSB + LD A,E ; Get LSB + RRA ; Shift LSB right + LD E,A ; Re-save LSB + LD A,B ; Get VLSB + RRA ; Shift VLSB right + LD B,A ; Re-save VLSB + DEC L ; Count bits multiplied + LD A,H ; Get LSB of multiplier + JP NZ,MUL8LP ; More - Do it +POPHRT: POP HL ; Restore address of number + RET + +BYTSFT: LD B,E ; Shift partial product left + LD E,D + LD D,C + LD C,A + RET + +DIV10: CALL STAKFP ; Save FPREG on stack + LD BC,8420H ; BCDE = 10. + LD DE,0000H + CALL FPBCDE ; Move 10 to FPREG + +DIV: POP BC ; Get number from stack + POP DE +DVBCDE: CALL TSTSGN ; Test sign of FPREG + JP Z,DZERR ; Error if division by zero + LD L,-1 ; Flag subtract exponents + CALL ADDEXP ; Subtract exponents + INC (HL) ; Add 2 to exponent to adjust + INC (HL) + DEC HL ; Point to MSB + LD A,(HL) ; Get MSB of dividend + LD (DIV3),A ; Save for subtraction + DEC HL + LD A,(HL) ; Get NMSB of dividend + LD (DIV2),A ; Save for subtraction + DEC HL + LD A,(HL) ; Get MSB of dividend + LD (DIV1),A ; Save for subtraction + LD B,C ; Get MSB + EX DE,HL ; NMSB,LSB to HL + XOR A + LD C,A ; Clear MSB of quotient + LD D,A ; Clear NMSB of quotient + LD E,A ; Clear LSB of quotient + LD (DIV4),A ; Clear overflow count +DIVLP: PUSH HL ; Save divisor + PUSH BC + LD A,L ; Get LSB of number + CALL DIVSUP ; Subt' divisor from dividend + SBC A,0 ; Count for overflows + CCF + JP NC,RESDIV ; Restore divisor if borrow + LD (DIV4),A ; Re-save overflow count + POP AF ; Scrap divisor + POP AF + SCF ; Set carry to + .BYTE 0D2H ; Skip "POP BC" and "POP HL" + +RESDIV: POP BC ; Restore divisor + POP HL + LD A,C ; Get MSB of quotient + INC A + DEC A + RRA ; Bit 0 to bit 7 + JP M,RONDB ; Done - Normalise result + RLA ; Restore carry + LD A,E ; Get LSB of quotient + RLA ; Double it + LD E,A ; Put it back + LD A,D ; Get NMSB of quotient + RLA ; Double it + LD D,A ; Put it back + LD A,C ; Get MSB of quotient + RLA ; Double it + LD C,A ; Put it back + ADD HL,HL ; Double NMSB,LSB of divisor + LD A,B ; Get MSB of divisor + RLA ; Double it + LD B,A ; Put it back + LD A,(DIV4) ; Get VLSB of quotient + RLA ; Double it + LD (DIV4),A ; Put it back + LD A,C ; Get MSB of quotient + OR D ; Merge NMSB + OR E ; Merge LSB + JP NZ,DIVLP ; Not done - Keep dividing + PUSH HL ; Save divisor + LD HL,FPEXP ; Point to exponent + DEC (HL) ; Divide by 2 + POP HL ; Restore divisor + JP NZ,DIVLP ; Ok - Keep going + JP OVERR ; Overflow error + +ADDEXP: LD A,B ; Get exponent of dividend + OR A ; Test it + JP Z,OVTST3 ; Zero - Result zero + LD A,L ; Get add/subtract flag + LD HL,FPEXP ; Point to exponent + XOR (HL) ; Add or subtract it + ADD A,B ; Add the other exponent + LD B,A ; Save new exponent + RRA ; Test exponent for overflow + XOR B + LD A,B ; Get exponent + JP P,OVTST2 ; Positive - Test for overflow + ADD A,80H ; Add excess 128 + LD (HL),A ; Save new exponent + JP Z,POPHRT ; Zero - Result zero + CALL SIGNS ; Set MSBs and sign of result + LD (HL),A ; Save new exponent + DEC HL ; Point to MSB + RET + +OVTST1: CALL TSTSGN ; Test sign of FPREG + CPL ; Invert sign + POP HL ; Clean up stack +OVTST2: OR A ; Test if new exponent zero +OVTST3: POP HL ; Clear off return address + JP P,RESZER ; Result zero + JP OVERR ; Overflow error + +MLSP10: CALL BCDEFP ; Move FPREG to BCDE + LD A,B ; Get exponent + OR A ; Is it zero? + RET Z ; Yes - Result is zero + ADD A,2 ; Multiply by 4 + JP C,OVERR ; Overflow - ?OV Error + LD B,A ; Re-save exponent + CALL FPADD ; Add BCDE to FPREG (Times 5) + LD HL,FPEXP ; Point to exponent + INC (HL) ; Double number (Times 10) + RET NZ ; Ok - Return + JP OVERR ; Overflow error + +TSTSGN: LD A,(FPEXP) ; Get sign of FPREG + OR A + RET Z ; RETurn if number is zero + LD A,(FPREG+2) ; Get MSB of FPREG + .BYTE 0FEH ; Test sign +RETREL: CPL ; Invert sign + RLA ; Sign bit to carry +FLGDIF: SBC A,A ; Carry to all bits of A + RET NZ ; Return -1 if negative + INC A ; Bump to +1 + RET ; Positive - Return +1 + +SGN: CALL TSTSGN ; Test sign of FPREG +FLGREL: LD B,80H+8 ; 8 bit integer in exponent + LD DE,0 ; Zero NMSB and LSB +RETINT: LD HL,FPEXP ; Point to exponent + LD C,A ; CDE = MSB,NMSB and LSB + LD (HL),B ; Save exponent + LD B,0 ; CDE = integer to normalise + INC HL ; Point to sign of result + LD (HL),80H ; Set sign of result + RLA ; Carry = sign of integer + JP CONPOS ; Set sign of result + +ABS: CALL TSTSGN ; Test sign of FPREG + RET P ; Return if positive +INVSGN: LD HL,FPREG+2 ; Point to MSB + LD A,(HL) ; Get sign of mantissa + XOR 80H ; Invert sign of mantissa + LD (HL),A ; Re-save sign of mantissa + RET + +STAKFP: EX DE,HL ; Save code string address + LD HL,(FPREG) ; LSB,NLSB of FPREG + EX (SP),HL ; Stack them,get return + PUSH HL ; Re-save return + LD HL,(FPREG+2) ; MSB and exponent of FPREG + EX (SP),HL ; Stack them,get return + PUSH HL ; Re-save return + EX DE,HL ; Restore code string address + RET + +PHLTFP: CALL LOADFP ; Number at HL to BCDE +FPBCDE: EX DE,HL ; Save code string address + LD (FPREG),HL ; Save LSB,NLSB of number + LD H,B ; Exponent of number + LD L,C ; MSB of number + LD (FPREG+2),HL ; Save MSB and exponent + EX DE,HL ; Restore code string address + RET + +BCDEFP: LD HL,FPREG ; Point to FPREG +LOADFP: LD E,(HL) ; Get LSB of number + INC HL + LD D,(HL) ; Get NMSB of number + INC HL + LD C,(HL) ; Get MSB of number + INC HL + LD B,(HL) ; Get exponent of number +INCHL: INC HL ; Used for conditional "INC HL" + RET + +FPTHL: LD DE,FPREG ; Point to FPREG +DETHL4: LD B,4 ; 4 bytes to move +DETHLB: LD A,(DE) ; Get source + LD (HL),A ; Save destination + INC DE ; Next source + INC HL ; Next destination + DEC B ; Count bytes + JP NZ,DETHLB ; Loop if more + RET + +SIGNS: LD HL,FPREG+2 ; Point to MSB of FPREG + LD A,(HL) ; Get MSB + RLCA ; Old sign to carry + SCF ; Set MSBit + RRA ; Set MSBit of MSB + LD (HL),A ; Save new MSB + CCF ; Complement sign + RRA ; Old sign to carry + INC HL + INC HL + LD (HL),A ; Set sign of result + LD A,C ; Get MSB + RLCA ; Old sign to carry + SCF ; Set MSBit + RRA ; Set MSBit of MSB + LD C,A ; Save MSB + RRA + XOR (HL) ; New sign of result + RET + +CMPNUM: LD A,B ; Get exponent of number + OR A + JP Z,TSTSGN ; Zero - Test sign of FPREG + LD HL,RETREL ; Return relation routine + PUSH HL ; Save for return + CALL TSTSGN ; Test sign of FPREG + LD A,C ; Get MSB of number + RET Z ; FPREG zero - Number's MSB + LD HL,FPREG+2 ; MSB of FPREG + XOR (HL) ; Combine signs + LD A,C ; Get MSB of number + RET M ; Exit if signs different + CALL CMPFP ; Compare FP numbers + RRA ; Get carry to sign + XOR C ; Combine with MSB of number + RET + +CMPFP: INC HL ; Point to exponent + LD A,B ; Get exponent + CP (HL) ; Compare exponents + RET NZ ; Different + DEC HL ; Point to MBS + LD A,C ; Get MSB + CP (HL) ; Compare MSBs + RET NZ ; Different + DEC HL ; Point to NMSB + LD A,D ; Get NMSB + CP (HL) ; Compare NMSBs + RET NZ ; Different + DEC HL ; Point to LSB + LD A,E ; Get LSB + SUB (HL) ; Compare LSBs + RET NZ ; Different + POP HL ; Drop RETurn + POP HL ; Drop another RETurn + RET + +FPINT: LD B,A ; <- Move + LD C,A ; <- exponent + LD D,A ; <- to all + LD E,A ; <- bits + OR A ; Test exponent + RET Z ; Zero - Return zero + PUSH HL ; Save pointer to number + CALL BCDEFP ; Move FPREG to BCDE + CALL SIGNS ; Set MSBs & sign of result + XOR (HL) ; Combine with sign of FPREG + LD H,A ; Save combined signs + CALL M,DCBCDE ; Negative - Decrement BCDE + LD A,80H+24 ; 24 bits + SUB B ; Bits to shift + CALL SCALE ; Shift BCDE + LD A,H ; Get combined sign + RLA ; Sign to carry + CALL C,FPROND ; Negative - Round number up + LD B,0 ; Zero exponent + CALL C,COMPL ; If negative make positive + POP HL ; Restore pointer to number + RET + +DCBCDE: DEC DE ; Decrement BCDE + LD A,D ; Test LSBs + AND E + INC A + RET NZ ; Exit if LSBs not FFFF + DEC BC ; Decrement MSBs + RET + +INT: LD HL,FPEXP ; Point to exponent + LD A,(HL) ; Get exponent + CP 80H+24 ; Integer accuracy only? + LD A,(FPREG) ; Get LSB + RET NC ; Yes - Already integer + LD A,(HL) ; Get exponent + CALL FPINT ; F.P to integer + LD (HL),80H+24 ; Save 24 bit integer + LD A,E ; Get LSB of number + PUSH AF ; Save LSB + LD A,C ; Get MSB of number + RLA ; Sign to carry + CALL CONPOS ; Set sign of result + POP AF ; Restore LSB of number + RET + +MLDEBC: LD HL,0 ; Clear partial product + LD A,B ; Test multiplier + OR C + RET Z ; Return zero if zero + LD A,16 ; 16 bits +MLDBLP: ADD HL,HL ; Shift P.P left + JP C,BSERR ; ?BS Error if overflow + EX DE,HL + ADD HL,HL ; Shift multiplier left + EX DE,HL + JP NC,NOMLAD ; Bit was zero - No add + ADD HL,BC ; Add multiplicand + JP C,BSERR ; ?BS Error if overflow +NOMLAD: DEC A ; Count bits + JP NZ,MLDBLP ; More + RET + +ASCTFP: CP '-' ; Negative? + PUSH AF ; Save it and flags + JP Z,CNVNUM ; Yes - Convert number + CP '+' ; Positive? + JP Z,CNVNUM ; Yes - Convert number + DEC HL ; DEC 'cos GETCHR INCs +CNVNUM: CALL RESZER ; Set result to zero + LD B,A ; Digits after point counter + LD D,A ; Sign of exponent + LD E,A ; Exponent of ten + CPL + LD C,A ; Before or after point flag +MANLP: CALL GETCHR ; Get next character + JP C,ADDIG ; Digit - Add to number + CP '.' + JP Z,DPOINT ; '.' - Flag point + CP 'E' + JP NZ,CONEXP ; Not 'E' - Scale number + CALL GETCHR ; Get next character + CALL SGNEXP ; Get sign of exponent +EXPLP: CALL GETCHR ; Get next character + JP C,EDIGIT ; Digit - Add to exponent + INC D ; Is sign negative? + JP NZ,CONEXP ; No - Scale number + XOR A + SUB E ; Negate exponent + LD E,A ; And re-save it + INC C ; Flag end of number +DPOINT: INC C ; Flag point passed + JP Z,MANLP ; Zero - Get another digit +CONEXP: PUSH HL ; Save code string address + LD A,E ; Get exponent + SUB B ; Subtract digits after point +SCALMI: CALL P,SCALPL ; Positive - Multiply number + JP P,ENDCON ; Positive - All done + PUSH AF ; Save number of times to /10 + CALL DIV10 ; Divide by 10 + POP AF ; Restore count + INC A ; Count divides + +ENDCON: JP NZ,SCALMI ; More to do + POP DE ; Restore code string address + POP AF ; Restore sign of number + CALL Z,INVSGN ; Negative - Negate number + EX DE,HL ; Code string address to HL + RET + +SCALPL: RET Z ; Exit if no scaling needed +MULTEN: PUSH AF ; Save count + CALL MLSP10 ; Multiply number by 10 + POP AF ; Restore count + DEC A ; Count multiplies + RET + +ADDIG: PUSH DE ; Save sign of exponent + LD D,A ; Save digit + LD A,B ; Get digits after point + ADC A,C ; Add one if after point + LD B,A ; Re-save counter + PUSH BC ; Save point flags + PUSH HL ; Save code string address + PUSH DE ; Save digit + CALL MLSP10 ; Multiply number by 10 + POP AF ; Restore digit + SUB '0' ; Make it absolute + CALL RSCALE ; Re-scale number + POP HL ; Restore code string address + POP BC ; Restore point flags + POP DE ; Restore sign of exponent + JP MANLP ; Get another digit + +RSCALE: CALL STAKFP ; Put number on stack + CALL FLGREL ; Digit to add to FPREG +PADD: POP BC ; Restore number + POP DE + JP FPADD ; Add BCDE to FPREG and return + +EDIGIT: LD A,E ; Get digit + RLCA ; Times 2 + RLCA ; Times 4 + ADD A,E ; Times 5 + RLCA ; Times 10 + ADD A,(HL) ; Add next digit + SUB '0' ; Make it absolute + LD E,A ; Save new digit + JP EXPLP ; Look for another digit + +LINEIN: PUSH HL ; Save code string address + LD HL,INMSG ; Output " in " + CALL PRS ; Output string at HL + POP HL ; Restore code string address +PRNTHL: EX DE,HL ; Code string address to DE + XOR A + LD B,80H+24 ; 24 bits + CALL RETINT ; Return the integer + LD HL,PRNUMS ; Print number string + PUSH HL ; Save for return +NUMASC: LD HL,PBUFF ; Convert number to ASCII + PUSH HL ; Save for return + CALL TSTSGN ; Test sign of FPREG + LD (HL),' ' ; Space at start + JP P,SPCFST ; Positive - Space to start + LD (HL),'-' ; '-' sign at start +SPCFST: INC HL ; First byte of number + LD (HL),'0' ; '0' if zero + JP Z,JSTZER ; Return '0' if zero + PUSH HL ; Save buffer address + CALL M,INVSGN ; Negate FPREG if negative + XOR A ; Zero A + PUSH AF ; Save it + CALL RNGTST ; Test number is in range +SIXDIG: LD BC,9143H ; BCDE - 99999.9 + LD DE,4FF8H + CALL CMPNUM ; Compare numbers + OR A + JP PO,INRNG ; > 99999.9 - Sort it out + POP AF ; Restore count + CALL MULTEN ; Multiply by ten + PUSH AF ; Re-save count + JP SIXDIG ; Test it again + +GTSIXD: CALL DIV10 ; Divide by 10 + POP AF ; Get count + INC A ; Count divides + PUSH AF ; Re-save count + CALL RNGTST ; Test number is in range +INRNG: CALL ROUND ; Add 0.5 to FPREG + INC A + CALL FPINT ; F.P to integer + CALL FPBCDE ; Move BCDE to FPREG + LD BC,0306H ; 1E+06 to 1E-03 range + POP AF ; Restore count + ADD A,C ; 6 digits before point + INC A ; Add one + JP M,MAKNUM ; Do it in 'E' form if < 1E-02 + CP 6+1+1 ; More than 999999 ? + JP NC,MAKNUM ; Yes - Do it in 'E' form + INC A ; Adjust for exponent + LD B,A ; Exponent of number + LD A,2 ; Make it zero after + +MAKNUM: DEC A ; Adjust for digits to do + DEC A + POP HL ; Restore buffer address + PUSH AF ; Save count + LD DE,POWERS ; Powers of ten + DEC B ; Count digits before point + JP NZ,DIGTXT ; Not zero - Do number + LD (HL),'.' ; Save point + INC HL ; Move on + LD (HL),'0' ; Save zero + INC HL ; Move on +DIGTXT: DEC B ; Count digits before point + LD (HL),'.' ; Save point in case + CALL Z,INCHL ; Last digit - move on + PUSH BC ; Save digits before point + PUSH HL ; Save buffer address + PUSH DE ; Save powers of ten + CALL BCDEFP ; Move FPREG to BCDE + POP HL ; Powers of ten table + LD B, '0'-1 ; ASCII '0' - 1 +TRYAGN: INC B ; Count subtractions + LD A,E ; Get LSB + SUB (HL) ; Subtract LSB + LD E,A ; Save LSB + INC HL + LD A,D ; Get NMSB + SBC A,(HL) ; Subtract NMSB + LD D,A ; Save NMSB + INC HL + LD A,C ; Get MSB + SBC A,(HL) ; Subtract MSB + LD C,A ; Save MSB + DEC HL ; Point back to start + DEC HL + JP NC,TRYAGN ; No overflow - Try again + CALL PLUCDE ; Restore number + INC HL ; Start of next number + CALL FPBCDE ; Move BCDE to FPREG + EX DE,HL ; Save point in table + POP HL ; Restore buffer address + LD (HL),B ; Save digit in buffer + INC HL ; And move on + POP BC ; Restore digit count + DEC C ; Count digits + JP NZ,DIGTXT ; More - Do them + DEC B ; Any decimal part? + JP Z,DOEBIT ; No - Do 'E' bit +SUPTLZ: DEC HL ; Move back through buffer + LD A,(HL) ; Get character + CP '0' ; '0' character? + JP Z,SUPTLZ ; Yes - Look back for more + CP '.' ; A decimal point? + CALL NZ,INCHL ; Move back over digit + +DOEBIT: POP AF ; Get 'E' flag + JP Z,NOENED ; No 'E' needed - End buffer + LD (HL),'E' ; Put 'E' in buffer + INC HL ; And move on + LD (HL),'+' ; Put '+' in buffer + JP P,OUTEXP ; Positive - Output exponent + LD (HL),'-' ; Put '-' in buffer + CPL ; Negate exponent + INC A +OUTEXP: LD B,'0'-1 ; ASCII '0' - 1 +EXPTEN: INC B ; Count subtractions + SUB 10 ; Tens digit + JP NC,EXPTEN ; More to do + ADD A,'0'+10 ; Restore and make ASCII + INC HL ; Move on + LD (HL),B ; Save MSB of exponent +JSTZER: INC HL ; + LD (HL),A ; Save LSB of exponent + INC HL +NOENED: LD (HL),C ; Mark end of buffer + POP HL ; Restore code string address + RET + +RNGTST: LD BC,9474H ; BCDE = 999999. + LD DE,23F7H + CALL CMPNUM ; Compare numbers + OR A + POP HL ; Return address to HL + JP PO,GTSIXD ; Too big - Divide by ten + JP (HL) ; Otherwise return to caller + +HALF: .BYTE 00H,00H,00H,80H ; 0.5 + +POWERS: .BYTE 0A0H,086H,001H ; 100000 + .BYTE 010H,027H,000H ; 10000 + .BYTE 0E8H,003H,000H ; 1000 + .BYTE 064H,000H,000H ; 100 + .BYTE 00AH,000H,000H ; 10 + .BYTE 001H,000H,000H ; 1 + +NEGAFT: LD HL,INVSGN ; Negate result + EX (SP),HL ; To be done after caller + JP (HL) ; Return to caller + +SQR: CALL STAKFP ; Put value on stack + LD HL,HALF ; Set power to 1/2 + CALL PHLTFP ; Move 1/2 to FPREG + +POWER: POP BC ; Get base + POP DE + CALL TSTSGN ; Test sign of power + LD A,B ; Get exponent of base + JP Z,EXP ; Make result 1 if zero + JP P,POWER1 ; Positive base - Ok + OR A ; Zero to negative power? + JP Z,DZERR ; Yes - ?/0 Error +POWER1: OR A ; Base zero? + JP Z,SAVEXP ; Yes - Return zero + PUSH DE ; Save base + PUSH BC + LD A,C ; Get MSB of base + OR 01111111B ; Get sign status + CALL BCDEFP ; Move power to BCDE + JP P,POWER2 ; Positive base - Ok + PUSH DE ; Save power + PUSH BC + CALL INT ; Get integer of power + POP BC ; Restore power + POP DE + PUSH AF ; MSB of base + CALL CMPNUM ; Power an integer? + POP HL ; Restore MSB of base + LD A,H ; but don't affect flags + RRA ; Exponent odd or even? +POWER2: POP HL ; Restore MSB and exponent + LD (FPREG+2),HL ; Save base in FPREG + POP HL ; LSBs of base + LD (FPREG),HL ; Save in FPREG + CALL C,NEGAFT ; Odd power - Negate result + CALL Z,INVSGN ; Negative base - Negate it + PUSH DE ; Save power + PUSH BC + CALL LOG ; Get LOG of base + POP BC ; Restore power + POP DE + CALL FPMULT ; Multiply LOG by power + +EXP: CALL STAKFP ; Put value on stack + LD BC,08138H ; BCDE = 1/Ln(2) + LD DE,0AA3BH + CALL FPMULT ; Multiply value by 1/LN(2) + LD A,(FPEXP) ; Get exponent + CP 80H+8 ; Is it in range? + JP NC,OVTST1 ; No - Test for overflow + CALL INT ; Get INT of FPREG + ADD A,80H ; For excess 128 + ADD A,2 ; Exponent > 126? + JP C,OVTST1 ; Yes - Test for overflow + PUSH AF ; Save scaling factor + LD HL,UNITY ; Point to 1. + CALL ADDPHL ; Add 1 to FPREG + CALL MULLN2 ; Multiply by LN(2) + POP AF ; Restore scaling factor + POP BC ; Restore exponent + POP DE + PUSH AF ; Save scaling factor + CALL SUBCDE ; Subtract exponent from FPREG + CALL INVSGN ; Negate result + LD HL,EXPTAB ; Coefficient table + CALL SMSER1 ; Sum the series + LD DE,0 ; Zero LSBs + POP BC ; Scaling factor + LD C,D ; Zero MSB + JP FPMULT ; Scale result to correct value + +EXPTAB: .BYTE 8 ; Table used by EXP + .BYTE 040H,02EH,094H,074H ; -1/7! (-1/5040) + .BYTE 070H,04FH,02EH,077H ; 1/6! ( 1/720) + .BYTE 06EH,002H,088H,07AH ; -1/5! (-1/120) + .BYTE 0E6H,0A0H,02AH,07CH ; 1/4! ( 1/24) + .BYTE 050H,0AAH,0AAH,07EH ; -1/3! (-1/6) + .BYTE 0FFH,0FFH,07FH,07FH ; 1/2! ( 1/2) + .BYTE 000H,000H,080H,081H ; -1/1! (-1/1) + .BYTE 000H,000H,000H,081H ; 1/0! ( 1/1) + +SUMSER: CALL STAKFP ; Put FPREG on stack + LD DE,MULT ; Multiply by "X" + PUSH DE ; To be done after + PUSH HL ; Save address of table + CALL BCDEFP ; Move FPREG to BCDE + CALL FPMULT ; Square the value + POP HL ; Restore address of table +SMSER1: CALL STAKFP ; Put value on stack + LD A,(HL) ; Get number of coefficients + INC HL ; Point to start of table + CALL PHLTFP ; Move coefficient to FPREG + .BYTE 06H ; Skip "POP AF" +SUMLP: POP AF ; Restore count + POP BC ; Restore number + POP DE + DEC A ; Cont coefficients + RET Z ; All done + PUSH DE ; Save number + PUSH BC + PUSH AF ; Save count + PUSH HL ; Save address in table + CALL FPMULT ; Multiply FPREG by BCDE + POP HL ; Restore address in table + CALL LOADFP ; Number at HL to BCDE + PUSH HL ; Save address in table + CALL FPADD ; Add coefficient to FPREG + POP HL ; Restore address in table + JP SUMLP ; More coefficients + +RND: CALL TSTSGN ; Test sign of FPREG + LD HL,SEED+2 ; Random number seed + JP M,RESEED ; Negative - Re-seed + LD HL,LSTRND ; Last random number + CALL PHLTFP ; Move last RND to FPREG + LD HL,SEED+2 ; Random number seed + RET Z ; Return if RND(0) + ADD A,(HL) ; Add (SEED)+2) + AND 00000111B ; 0 to 7 + LD B,0 + LD (HL),A ; Re-save seed + INC HL ; Move to coefficient table + ADD A,A ; 4 bytes + ADD A,A ; per entry + LD C,A ; BC = Offset into table + ADD HL,BC ; Point to coefficient + CALL LOADFP ; Coefficient to BCDE + CALL FPMULT ; ; Multiply FPREG by coefficient + LD A,(SEED+1) ; Get (SEED+1) + INC A ; Add 1 + AND 00000011B ; 0 to 3 + LD B,0 + CP 1 ; Is it zero? + ADC A,B ; Yes - Make it 1 + LD (SEED+1),A ; Re-save seed + LD HL,RNDTAB-4 ; Addition table + ADD A,A ; 4 bytes + ADD A,A ; per entry + LD C,A ; BC = Offset into table + ADD HL,BC ; Point to value + CALL ADDPHL ; Add value to FPREG +RND1: CALL BCDEFP ; Move FPREG to BCDE + LD A,E ; Get LSB + LD E,C ; LSB = MSB + XOR 01001111B ; Fiddle around + LD C,A ; New MSB + LD (HL),80H ; Set exponent + DEC HL ; Point to MSB + LD B,(HL) ; Get MSB + LD (HL),80H ; Make value -0.5 + LD HL,SEED ; Random number seed + INC (HL) ; Count seed + LD A,(HL) ; Get seed + SUB 171 ; Do it modulo 171 + JP NZ,RND2 ; Non-zero - Ok + LD (HL),A ; Zero seed + INC C ; Fillde about + DEC D ; with the + INC E ; number +RND2: CALL BNORM ; Normalise number + LD HL,LSTRND ; Save random number + JP FPTHL ; Move FPREG to last and return + +RESEED: LD (HL),A ; Re-seed random numbers + DEC HL + LD (HL),A + DEC HL + LD (HL),A + JP RND1 ; Return RND seed + +RNDTAB: .BYTE 068H,0B1H,046H,068H ; Table used by RND + .BYTE 099H,0E9H,092H,069H + .BYTE 010H,0D1H,075H,068H + +COS: LD HL,HALFPI ; Point to PI/2 + CALL ADDPHL ; Add it to PPREG +SIN: CALL STAKFP ; Put angle on stack + LD BC,8349H ; BCDE = 2 PI + LD DE,0FDBH + CALL FPBCDE ; Move 2 PI to FPREG + POP BC ; Restore angle + POP DE + CALL DVBCDE ; Divide angle by 2 PI + CALL STAKFP ; Put it on stack + CALL INT ; Get INT of result + POP BC ; Restore number + POP DE + CALL SUBCDE ; Make it 0 <= value < 1 + LD HL,QUARTR ; Point to 0.25 + CALL SUBPHL ; Subtract value from 0.25 + CALL TSTSGN ; Test sign of value + SCF ; Flag positive + JP P,SIN1 ; Positive - Ok + CALL ROUND ; Add 0.5 to value + CALL TSTSGN ; Test sign of value + OR A ; Flag negative +SIN1: PUSH AF ; Save sign + CALL P,INVSGN ; Negate value if positive + LD HL,QUARTR ; Point to 0.25 + CALL ADDPHL ; Add 0.25 to value + POP AF ; Restore sign + CALL NC,INVSGN ; Negative - Make positive + LD HL,SINTAB ; Coefficient table + JP SUMSER ; Evaluate sum of series + +HALFPI: .BYTE 0DBH,00FH,049H,081H ; 1.5708 (PI/2) + +QUARTR: .BYTE 000H,000H,000H,07FH ; 0.25 + +SINTAB: .BYTE 5 ; Table used by SIN + .BYTE 0BAH,0D7H,01EH,086H ; 39.711 + .BYTE 064H,026H,099H,087H ;-76.575 + .BYTE 058H,034H,023H,087H ; 81.602 + .BYTE 0E0H,05DH,0A5H,086H ;-41.342 + .BYTE 0DAH,00FH,049H,083H ; 6.2832 + +TAN: CALL STAKFP ; Put angle on stack + CALL SIN ; Get SIN of angle + POP BC ; Restore angle + POP HL + CALL STAKFP ; Save SIN of angle + EX DE,HL ; BCDE = Angle + CALL FPBCDE ; Angle to FPREG + CALL COS ; Get COS of angle + JP DIV ; TAN = SIN / COS + +ATN: CALL TSTSGN ; Test sign of value + CALL M,NEGAFT ; Negate result after if -ve + CALL M,INVSGN ; Negate value if -ve + LD A,(FPEXP) ; Get exponent + CP 81H ; Number less than 1? + JP C,ATN1 ; Yes - Get arc tangnt + LD BC,8100H ; BCDE = 1 + LD D,C + LD E,C + CALL DVBCDE ; Get reciprocal of number + LD HL,SUBPHL ; Sub angle from PI/2 + PUSH HL ; Save for angle > 1 +ATN1: LD HL,ATNTAB ; Coefficient table + CALL SUMSER ; Evaluate sum of series + LD HL,HALFPI ; PI/2 - angle in case > 1 + RET ; Number > 1 - Sub from PI/2 + +ATNTAB: .BYTE 9 ; Table used by ATN + .BYTE 04AH,0D7H,03BH,078H ; 1/17 + .BYTE 002H,06EH,084H,07BH ;-1/15 + .BYTE 0FEH,0C1H,02FH,07CH ; 1/13 + .BYTE 074H,031H,09AH,07DH ;-1/11 + .BYTE 084H,03DH,05AH,07DH ; 1/9 + .BYTE 0C8H,07FH,091H,07EH ;-1/7 + .BYTE 0E4H,0BBH,04CH,07EH ; 1/5 + .BYTE 06CH,0AAH,0AAH,07FH ;-1/3 + .BYTE 000H,000H,000H,081H ; 1/1 + + +ARET: RET ; A RETurn instruction + +GETINP: RST 10H ;input a character + RET + +CLS: + LD A,CS ; ASCII Clear screen + JP MONOUT ; Output character + +WIDTH: CALL GETINT ; Get integer 0-255 + LD A,E ; Width to A + LD (LWIDTH),A ; Set width + RET + +LINES: CALL GETNUM ; Get a number + CALL DEINT ; Get integer -32768 to 32767 + LD (LINESC),DE ; Set lines counter + LD (LINESN),DE ; Set lines number + RET + +DEEK: CALL DEINT ; Get integer -32768 to 32767 + PUSH DE ; Save number + POP HL ; Number to HL + LD B,(HL) ; Get LSB of contents + INC HL + LD A,(HL) ; Get MSB of contents + JP ABPASS ; Return integer AB + +DOKE: CALL GETNUM ; Get a number + CALL DEINT ; Get integer -32768 to 32767 + PUSH DE ; Save address + CALL CHKSYN ; Make sure ',' follows + .BYTE ',' + CALL GETNUM ; Get a number + CALL DEINT ; Get integer -32768 to 32767 + EX (SP),HL ; Save value,get address + LD (HL),E ; Save LSB of value + INC HL + LD (HL),D ; Save MSB of value + POP HL ; Restore code string address + RET + + +; HEX$(nn) Convert 16 bit number to Hexadecimal string + +HEX: CALL TSTNUM ; Verify it's a number + CALL DEINT ; Get integer -32768 to 32767 + PUSH BC ; Save contents of BC + LD HL,PBUFF + LD A,D ; Get high order into A + CP $0 + JR Z,HEX2 ; Skip output if both high digits are zero + CALL BYT2ASC ; Convert D to ASCII + LD A,B + CP '0' + JR Z,HEX1 ; Don't store high digit if zero + LD (HL),B ; Store it to PBUFF + INC HL ; Next location +HEX1: LD (HL),C ; Store C to PBUFF+1 + INC HL ; Next location +HEX2: LD A,E ; Get lower byte + CALL BYT2ASC ; Convert E to ASCII + LD A,D + CP $0 + JR NZ,HEX3 ; If upper byte was not zero then always print lower byte + LD A,B + CP '0' ; If high digit of lower byte is zero then don't print + JR Z,HEX4 +HEX3: LD (HL),B ; to PBUFF+2 + INC HL ; Next location +HEX4: LD (HL),C ; to PBUFF+3 + INC HL ; PBUFF+4 to zero + XOR A ; Terminating character + LD (HL),A ; Store zero to terminate + INC HL ; Make sure PBUFF is terminated + LD (HL),A ; Store the double zero there + POP BC ; Get BC back + LD HL,PBUFF ; Reset to start of PBUFF + JP STR1 ; Convert the PBUFF to a string and return it + +BYT2ASC LD B,A ; Save original value + AND $0F ; Strip off upper nybble + CP $0A ; 0-9? + JR C,ADD30 ; If A-F, add 7 more + ADD A,$07 ; Bring value up to ASCII A-F +ADD30 ADD A,$30 ; And make ASCII + LD C,A ; Save converted char to C + LD A,B ; Retrieve original value + RRCA ; and Rotate it right + RRCA + RRCA + RRCA + AND $0F ; Mask off upper nybble + CP $0A ; 0-9? < A hex? + JR C,ADD301 ; Skip Add 7 + ADD A,$07 ; Bring it up to ASCII A-F +ADD301 ADD A,$30 ; And make it full ASCII + LD B,A ; Store high order byte + RET + +; Convert "&Hnnnn" to FPREG +; Gets a character from (HL) checks for Hexadecimal ASCII numbers "&Hnnnn" +; Char is in A, NC if char is ;<=>?@ A-z, CY is set if 0-9 +HEXTFP EX DE,HL ; Move code string pointer to DE + LD HL,$0000 ; Zero out the value + CALL GETHEX ; Check the number for valid hex + JP C,HXERR ; First value wasn't hex, HX error + JR HEXLP1 ; Convert first character +HEXLP CALL GETHEX ; Get second and addtional characters + JR C,HEXIT ; Exit if not a hex character +HEXLP1 ADD HL,HL ; Rotate 4 bits to the left + ADD HL,HL + ADD HL,HL + ADD HL,HL + OR L ; Add in D0-D3 into L + LD L,A ; Save new value + JR HEXLP ; And continue until all hex characters are in + +GETHEX INC DE ; Next location + LD A,(DE) ; Load character at pointer + CP ' ' + JP Z,GETHEX ; Skip spaces + SUB $30 ; Get absolute value + RET C ; < "0", error + CP $0A + JR C,NOSUB7 ; Is already in the range 0-9 + SUB $07 ; Reduce to A-F + CP $0A ; Value should be $0A-$0F at this point + RET C ; CY set if was : ; < = > ? @ +NOSUB7 CP $10 ; > Greater than "F"? + CCF + RET ; CY set if it wasn't valid hex + +HEXIT EX DE,HL ; Value into DE, Code string into HL + LD A,D ; Load DE into AC + LD C,E ; For prep to + PUSH HL + CALL ACPASS ; ACPASS to set AC as integer into FPREG + POP HL + RET + +HXERR: LD E,HX ; ?HEX Error + JP ERROR + +; BIN$(NN) Convert integer to a 1-16 char binary string +BIN: CALL TSTNUM ; Verify it's a number + CALL DEINT ; Get integer -32768 to 32767 +BIN2: PUSH BC ; Save contents of BC + LD HL,PBUFF + LD B,17 ; One higher than max char count +ZEROSUP: ; Suppress leading zeros + DEC B ; Max 16 chars + LD A,B + CP $01 + JR Z,BITOUT ; Always output at least one character + RL E + RL D + JR NC,ZEROSUP + JR BITOUT2 +BITOUT: + RL E + RL D ; Top bit now in carry +BITOUT2: + LD A,'0' ; Char for '0' + ADC A,0 ; If carry set then '0' --> '1' + LD (HL),A + INC HL + DEC B + JR NZ,BITOUT + XOR A ; Terminating character + LD (HL),A ; Store zero to terminate + INC HL ; Make sure PBUFF is terminated + LD (HL),A ; Store the double zero there + POP BC + LD HL,PBUFF + JP STR1 + +; Convert "&Bnnnn" to FPREG +; Gets a character from (HL) checks for Binary ASCII numbers "&Bnnnn" +BINTFP: EX DE,HL ; Move code string pointer to DE + LD HL,$0000 ; Zero out the value + CALL CHKBIN ; Check the number for valid bin + JP C,BINERR ; First value wasn't bin, HX error +BINIT: SUB '0' + ADD HL,HL ; Rotate HL left + OR L + LD L,A + CALL CHKBIN ; Get second and addtional characters + JR NC,BINIT ; Process if a bin character + EX DE,HL ; Value into DE, Code string into HL + LD A,D ; Load DE into AC + LD C,E ; For prep to + PUSH HL + CALL ACPASS ; ACPASS to set AC as integer into FPREG + POP HL + RET + +; Char is in A, NC if char is 0 or 1 +CHKBIN: INC DE + LD A,(DE) + CP ' ' + JP Z,CHKBIN ; Skip spaces + CP '0' ; Set C if < '0' + RET C + CP '2' + CCF ; Set C if > '1' + RET + +BINERR: LD E,BN ; ?BIN Error + JP ERROR + + +JJUMP1: + LD IX,-1 ; Flag cold start + JP CSTART ; Go and initialise + +MONOUT: + JP $0008 ; output a char + + +MONITR: + JP $0000 ; Restart (Normally Monitor Start) + + +INITST: LD A,0 ; Clear break flag + LD (BRKFLG),A + JP INIT + +ARETN: RETN ; Return from NMI + + +TSTBIT: PUSH AF ; Save bit mask + AND B ; Get common bits + POP BC ; Restore bit mask + CP B ; Same bit set? + LD A,0 ; Return 0 in A + RET + +OUTNCR: CALL OUTC ; Output character in A + JP PRNTCRLF ; Output CRLF + +.end + diff --git a/Z80 CPM and bootloader (basmon)/source/cbios128.asm b/Z80 CPM and bootloader (basmon)/source/cbios128.asm new file mode 100644 index 0000000..6c60444 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/cbios128.asm @@ -0,0 +1,927 @@ +;================================================================================== +; Contents of this file are copyright Grant Searle +; Blocking/unblocking routines are the published version by Digital Research +; (bugfixed, as found on the web) +; +; You have permission to use this for NON COMMERCIAL USE ONLY +; If you wish to use it elsewhere, please include an acknowledgement to myself. +; +; http://searle.hostei.com/grant/index.html +; +; eMail: home.micros01@btinternet.com +; +; If the above don't work, please perform an Internet search to see if I have +; updated the web page hosting service. +; +;================================================================================== + +ccp .EQU 0D000h ; Base of CCP. +bdos .EQU ccp + 0806h ; Base of BDOS. +bios .EQU ccp + 1600h ; Base of BIOS. + +; Set CP/M low memory datA, vector and buffer addresses. + +iobyte .EQU 03h ; Intel standard I/O definition byte. +userdrv .EQU 04h ; Current user number and drive. +tpabuf .EQU 80h ; Default I/O buffer and command line storage. + + +SD_DATA .EQU 088H +SD_CONTROL .EQU 089H +SD_STATUS .EQU 089H +SD_LBA0 .EQU 08AH +SD_LBA1 .EQU 08BH +SD_LBA2 .EQU 08CH + +RTS_HIGH .EQU 0D5H +RTS_LOW .EQU 095H + +ACIA0_D .EQU $81 +ACIA0_C .EQU $80 +ACIA1_D .EQU $83 +ACIA1_C .EQU $82 + +nmi .EQU 66H + +blksiz .equ 4096 ;CP/M allocation size +hstsiz .equ 512 ;host disk sector size +hstspt .equ 32 ;host disk sectors/trk +hstblk .equ hstsiz/128 ;CP/M sects/host buff +cpmspt .equ hstblk * hstspt ;CP/M sectors/track +secmsk .equ hstblk-1 ;sector mask + ;compute sector mask +;secshf .equ 2 ;log2(hstblk) + +wrall .equ 0 ;write to allocated +wrdir .equ 1 ;write to directory +wrual .equ 2 ;write to unallocated + +LF .EQU 0AH ;line feed +FF .EQU 0CH ;form feed +CR .EQU 0DH ;carriage RETurn + +;================================================================================================ + + .ORG bios ; BIOS origin. + +;================================================================================================ +; BIOS jump table. +;================================================================================================ + JP boot ; 0 Initialize. +wboote: JP wboot ; 1 Warm boot. + JP const ; 2 Console status. + JP conin ; 3 Console input. + JP conout ; 4 Console OUTput. + JP list ; 5 List OUTput. + JP punch ; 6 punch OUTput. + JP reader ; 7 Reader input. + JP home ; 8 Home disk. + JP seldsk ; 9 Select disk. + JP settrk ; 10 Select track. + JP setsec ; 11 Select sector. + JP setdma ; 12 Set DMA ADDress. + JP read ; 13 Read 128 bytes. + JP write ; 14 Write 128 bytes. + JP listst ; 15 List status. + JP sectran ; 16 Sector translate. + +;================================================================================================ +; Disk parameter headers for disk 0 to 15 +;================================================================================================ +dpbase: + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb0,0000h,alv00 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv01 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv02 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv03 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv04 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv05 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv06 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv07 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv08 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv09 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv10 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv11 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv12 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv13 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv14 + .DW 0000h,0000h,0000h,0000h,dirbuf,dpb,0000h,alv15 + +; First drive has a reserved track for CP/M +dpb0: + .DW 128 ;SPT - sectors per track + .DB 5 ;BSH - block shift factor + .DB 31 ;BLM - block mask + .DB 1 ;EXM - Extent mask + .DW 2043 ; (2047-4) DSM - Storage size (blocks - 1) + .DW 511 ;DRM - Number of directory entries - 1 + .DB 240 ;AL0 - 1 bit set per directory block + .DB 0 ;AL1 - " + .DW 0 ;CKS - DIR check vector size (DRM+1)/4 (0=fixed disk) + .DW 1 ;OFF - Reserved tracks + +dpb: + .DW 128 ;SPT - sectors per track + .DB 5 ;BSH - block shift factor + .DB 31 ;BLM - block mask + .DB 1 ;EXM - Extent mask + .DW 2047 ;DSM - Storage size (blocks - 1) + .DW 511 ;DRM - Number of directory entries - 1 + .DB 240 ;AL0 - 1 bit set per directory block + .DB 0 ;AL1 - " + .DW 0 ;CKS - DIR check vector size (DRM+1)/4 (0=fixed disk) + .DW 0 ;OFF - Reserved tracks + +;================================================================================================ +; Cold boot +;================================================================================================ + +boot: + DI ; Disable interrupts. + LD SP,biosstack ; Set default stack. + +; Turn off ROM + + LD A,$01 + OUT ($38),A + + LD A,RTS_LOW + OUT (ACIA0_C),A ; Initialise ACIA0 + OUT (ACIA1_C),A ; Initialise ACIA1 + + CALL printInline + .DB FF + .TEXT "CP/M BIOS 2.0 by G. Searle 2013" + .DB CR,LF + .DB CR,LF + .TEXT "CP/M 2.2 " + .TEXT "(c)" + .TEXT " 1979 by Digital Research" + .DB CR,LF,0 + + ; CALL sdPreamble?? + + XOR a ; Clear I/O & drive bytes. + LD (userdrv),A + JP gocpm + +;================================================================================================ +; Warm boot +;================================================================================================ + +wboot: + DI ; Disable interrupts. + LD SP,biosstack ; Set default stack. + + LD B,11 ; Number of sectors to reload + + LD A,0 + LD (hstsec),A + OUT (SD_LBA2),A + OUT (SD_LBA1),A + + LD HL,ccp + +wbRdAllSecs: + +wBrdWait1: IN A,(SD_STATUS) + CP 128 + JR NZ,wBrdWait1 + + LD A,(hstsec) + OUT (SD_LBA0),A + + LD A,$00 ; 00 = Read block + OUT (SD_CONTROL),A + PUSH BC + + LD c,4 +wBrd4secs: + LD b,128 +wBrdByte: + +wBrdWait2: IN A,(SD_STATUS) + CP 224 ; Read byte waiting + JR NZ,wBrdWait2 + + IN A,(SD_DATA) + + LD (HL),A + INC HL + dec b + JR NZ, wBrdByte + + dec c + JR NZ,wBrd4secs + + LD A,(hstsec) + INC A + LD (hstsec),A + + POP BC + + DJNZ wbRdAllSecs +;================================================================================================ +; Common code for cold and warm boot +;================================================================================================ + +gocpm: + xor a ;0 to accumulator + ld (hstact),a ;host buffer inactive + ld (unacnt),a ;clear unalloc count + + LD HL,tpabuf ; Address of BIOS DMA buffer. + LD (dmaAddr),HL + LD A,0C3h ; Opcode for 'JP'. + LD (00h),A ; Load at start of RAM. + LD HL,wboote ; Address of jump for a warm boot. + LD (01h),HL + LD (05h),A ; Opcode for 'JP'. + LD HL,bdos ; Address of jump for the BDOS. + LD (06h),HL + LD A,(userdrv) ; Save new drive number (0). + LD c,A ; Pass drive number in C. + + JP ccp ; Start CP/M by jumping to the CCP. + +;================================================================================================ +; Console I/O routines +;================================================================================================ + + +;------------------------------------------------------------------------------------------------ +const: + LD A,(iobyte) + AND 00001011b ; Mask off console and high bit of reader + CP 00001010b ; redirected to reader on UR1/2 (Serial A) + JR Z,constA + CP 00000010b ; redirected to reader on TTY/RDR (Serial B) + JR Z,constB + + AND $03 ; remove the reader from the mask - only console bits then remain + CP $01 + JR NZ,constB +constA: + IN A,(ACIA0_C) ; Status byte + AND $01 + CP $0 ; Z flag set if no char + JR Z, dataAEmpty + LD A,0FFH + RET +dataAEmpty: + LD A,0 + RET + + +constB: + IN A,(ACIA1_C) ; Status byte + AND $01 + CP $0 ; Z flag set if no char + JR Z, dataBEmpty + LD A,0FFH + RET +dataBEmpty: + LD A,0 + RET + +;------------------------------------------------------------------------------------------------ +reader: + PUSH AF +reader2: LD A,(iobyte) + AND $08 + CP $08 + JR NZ,coninB + JR coninA +;------------------------------------------------------------------------------------------------ +conin: + PUSH AF + LD A,(iobyte) + AND $03 + CP $02 + JR Z,reader2 ; "BAT:" redirect + CP $01 + JR NZ,coninB + + +coninA: + POP AF +waitForCharA: + IN A,(ACIA0_C) ; Status byte + AND $01 + CP $0 ; Z flag set if no char + JR Z, waitForCharA + IN A,(ACIA0_D) + + RET ; Char ready in A + + +coninB: + POP AF +waitForCharB: + IN A,(ACIA1_C) ; Status byte + AND $01 + CP $0 ; Z flag set if no char + JR Z, waitForCharB + IN A,(ACIA1_D) + + RET ; Char ready in A + +;------------------------------------------------------------------------------------------------ +list: PUSH AF ; Store character +list2: LD A,(iobyte) + AND $C0 + CP $40 + JR NZ,conoutB1 + JR conoutA1 + +;------------------------------------------------------------------------------------------------ +punch: PUSH AF ; Store character + LD A,(iobyte) + AND $20 + CP $20 + JR NZ,conoutB1 + JR conoutA1 + +;------------------------------------------------------------------------------------------------ +conout: PUSH AF + LD A,(iobyte) + AND $03 + CP $02 + JR Z,list2 ; "BAT:" redirect + CP $01 + JR NZ,conoutB1 + +conoutA1: CALL CKACIA0 ; See if ACIA channel A is finished transmitting + JR Z,conoutA1 ; Loop until ACIA flag signals ready + LD A,C + OUT (ACIA0_D),A ; OUTput the character + POP AF + RET + +conoutB1: CALL CKACIA1 ; See if ACIA channel B is finished transmitting + JR Z,conoutB1 ; Loop until ACIA flag signals ready + LD A,C + OUT (ACIA1_D),A ; OUTput the character + POP AF + RET + +;------------------------------------------------------------------------------------------------ +CKACIA0 + IN A,(ACIA0_C) ; Status byte D1=TX Buff Empty, D0=RX char ready + RRCA ; Rotates RX status into Carry Flag, + BIT 0,A ; Set Zero flag if still transmitting character + RET + +CKACIA1 + IN A,(ACIA1_C) ; Status byte D1=TX Buff Empty, D0=RX char ready + RRCA ; Rotates RX status into Carry Flag, + BIT 0,A ; Set Zero flag if still transmitting character + RET + +;------------------------------------------------------------------------------------------------ +listst: LD A,$FF ; Return list status of 0xFF (ready). + RET + +;================================================================================================ +; Disk processing entry points +;================================================================================================ + +seldsk: + LD HL,$0000 + LD A,C + CP 16 ; 16 for 128MB disk, 8 for 64MB disk + jr C,chgdsk ; if invalid drive will give BDOS error + LD A,(userdrv) ; so set the drive back to a: + CP C ; If the default disk is not the same as the + RET NZ ; selected drive then return, + XOR A ; else reset default back to a: + LD (userdrv),A ; otherwise will be stuck in a loop + LD (sekdsk),A + ret + +chgdsk: LD (sekdsk),A + RLC a ;*2 + RLC a ;*4 + RLC a ;*8 + RLC a ;*16 + LD HL,dpbase + LD b,0 + LD c,A + ADD HL,BC + + RET + +;------------------------------------------------------------------------------------------------ +home: + ld a,(hstwrt) ;check for pending write + or a + jr nz,homed + ld (hstact),a ;clear host active flag +homed: + LD BC,0000h + +;------------------------------------------------------------------------------------------------ +settrk: LD (sektrk),BC ; Set track passed from BDOS in register BC. + RET + +;------------------------------------------------------------------------------------------------ +setsec: LD (seksec),BC ; Set sector passed from BDOS in register BC. + RET + +;------------------------------------------------------------------------------------------------ +setdma: LD (dmaAddr),BC ; Set DMA ADDress given by registers BC. + RET + +;------------------------------------------------------------------------------------------------ +sectran: PUSH BC + POP HL + RET + +;------------------------------------------------------------------------------------------------ +read: + ;read the selected CP/M sector + xor a + ld (unacnt),a + ld a,1 + ld (readop),a ;read operation + ld (rsflag),a ;must read data + ld a,wrual + ld (wrtype),a ;treat as unalloc + jp rwoper ;to perform the read + + +;------------------------------------------------------------------------------------------------ +write: + ;write the selected CP/M sector + xor a ;0 to accumulator + ld (readop),a ;not a read operation + ld a,c ;write type in c + ld (wrtype),a + cp wrual ;write unallocated? + jr nz,chkuna ;check for unalloc +; +; write to unallocated, set parameters + ld a,blksiz/128 ;next unalloc recs + ld (unacnt),a + ld a,(sekdsk) ;disk to seek + ld (unadsk),a ;unadsk = sekdsk + ld hl,(sektrk) + ld (unatrk),hl ;unatrk = sectrk + ld a,(seksec) + ld (unasec),a ;unasec = seksec +; +chkuna: +; check for write to unallocated sector + ld a,(unacnt) ;any unalloc remain? + or a + jr z,alloc ;skip if not +; +; more unallocated records remain + dec a ;unacnt = unacnt-1 + ld (unacnt),a + ld a,(sekdsk) ;same disk? + ld hl,unadsk + cp (hl) ;sekdsk = unadsk? + jp nz,alloc ;skip if not +; +; disks are the same + ld hl,unatrk + call sektrkcmp ;sektrk = unatrk? + jp nz,alloc ;skip if not +; +; tracks are the same + ld a,(seksec) ;same sector? + ld hl,unasec + cp (hl) ;seksec = unasec? + jp nz,alloc ;skip if not +; +; match, move to next sector for future ref + inc (hl) ;unasec = unasec+1 + ld a,(hl) ;end of track? + cp cpmspt ;count CP/M sectors + jr c,noovf ;skip if no overflow +; +; overflow to next track + ld (hl),0 ;unasec = 0 + ld hl,(unatrk) + inc hl + ld (unatrk),hl ;unatrk = unatrk+1 +; +noovf: + ;match found, mark as unnecessary read + xor a ;0 to accumulator + ld (rsflag),a ;rsflag = 0 + jr rwoper ;to perform the write +; +alloc: + ;not an unallocated record, requires pre-read + xor a ;0 to accum + ld (unacnt),a ;unacnt = 0 + inc a ;1 to accum + ld (rsflag),a ;rsflag = 1 + +;------------------------------------------------------------------------------------------------ +rwoper: + ;enter here to perform the read/write + xor a ;zero to accum + ld (erflag),a ;no errors (yet) + ld a,(seksec) ;compute host sector + or a ;carry = 0 + rra ;shift right + or a ;carry = 0 + rra ;shift right + ld (sekhst),a ;host sector to seek +; +; active host sector? + ld hl,hstact ;host active flag + ld a,(hl) + ld (hl),1 ;always becomes 1 + or a ;was it already? + jr z,filhst ;fill host if not +; +; host buffer active, same as seek buffer? + ld a,(sekdsk) + ld hl,hstdsk ;same disk? + cp (hl) ;sekdsk = hstdsk? + jr nz,nomatch +; +; same disk, same track? + ld hl,hsttrk + call sektrkcmp ;sektrk = hsttrk? + jr nz,nomatch +; +; same disk, same track, same buffer? + ld a,(sekhst) + ld hl,hstsec ;sekhst = hstsec? + cp (hl) + jr z,match ;skip if match +; +nomatch: + ;proper disk, but not correct sector + ld a,(hstwrt) ;host written? + or a + call nz,writehst ;clear host buff +; +filhst: + ;may have to fill the host buffer + ld a,(sekdsk) + ld (hstdsk),a + ld hl,(sektrk) + ld (hsttrk),hl + ld a,(sekhst) + ld (hstsec),a + ld a,(rsflag) ;need to read? + or a + call nz,readhst ;yes, if 1 + xor a ;0 to accum + ld (hstwrt),a ;no pending write +; +match: + ;copy data to or from buffer + ld a,(seksec) ;mask buffer number + and secmsk ;least signif bits + ld l,a ;ready to shift + ld h,0 ;double count + add hl,hl + add hl,hl + add hl,hl + add hl,hl + add hl,hl + add hl,hl + add hl,hl +; hl has relative host buffer address + ld de,hstbuf + add hl,de ;hl = host address + ex de,hl ;now in DE + ld hl,(dmaAddr) ;get/put CP/M data + ld c,128 ;length of move + ld a,(readop) ;which way? + or a + jr nz,rwmove ;skip if read +; +; write operation, mark and switch direction + ld a,1 + ld (hstwrt),a ;hstwrt = 1 + ex de,hl ;source/dest swap +; +rwmove: + ;C initially 128, DE is source, HL is dest + ld a,(de) ;source character + inc de + ld (hl),a ;to dest + inc hl + dec c ;loop 128 times + jr nz,rwmove +; +; data has been moved to/from host buffer + ld a,(wrtype) ;write type + cp wrdir ;to directory? + ld a,(erflag) ;in case of errors + ret nz ;no further processing +; +; clear host buffer for directory write + or a ;errors? + ret nz ;skip if so + xor a ;0 to accum + ld (hstwrt),a ;buffer written + call writehst + ld a,(erflag) + ret + +;------------------------------------------------------------------------------------------------ +;Utility subroutine for 16-bit compare +sektrkcmp: + ;HL = .unatrk or .hsttrk, compare with sektrk + ex de,hl + ld hl,sektrk + ld a,(de) ;low byte compare + cp (HL) ;same? + ret nz ;return if not +; low bytes equal, test high 1s + inc de + inc hl + ld a,(de) + cp (hl) ;sets flags + ret + +;================================================================================================ +; Convert track/head/sector into LBA for physical access to the disk +;================================================================================================ +setLBAaddr: + LD HL,(hsttrk) + RLC L + RLC L + RLC L + RLC L + RLC L + LD A,L + AND 0E0H + LD L,A + LD A,(hstsec) + ADD A,L + LD (lba0),A + + LD HL,(hsttrk) + RRC L + RRC L + RRC L + LD A,L + AND 01FH + LD L,A + RLC H + RLC H + RLC H + RLC H + RLC H + LD A,H + AND 020H + LD H,A + LD A,(hstdsk) + RLC a + RLC a + RLC a + RLC a + RLC a + RLC a + AND 0C0H + ADD A,H + ADD A,L + LD (lba1),A + + LD A,(hstdsk) + RRC A + RRC A + AND 03H + LD (lba2),A + + LD a,00H + LD (lba3),A + + ; Transfer LBA to disk (LBA3 not used on SD card) + LD A,(lba2) + OUT (SD_LBA2),A + LD A,(lba1) + OUT (SD_LBA1),A + LD A,(lba0) + OUT (SD_LBA0),A + RET + +;================================================================================================ +; Read physical sector from host +;================================================================================================ + +readhst: + PUSH AF + PUSH BC + PUSH HL + +rdWait1: IN A,(SD_STATUS) + CP 128 + JR NZ,rdWait1 + + CALL setLBAaddr + + LD A,$00 ; 00 = Read block + OUT (SD_CONTROL),A + + LD c,4 + LD HL,hstbuf +rd4secs: + LD b,128 +rdByte: + +rdWait2: IN A,(SD_STATUS) + CP 224 ; Read byte waiting + JR NZ,rdWait2 + + IN A,(SD_DATA) + + LD (HL),A + INC HL + dec b + JR NZ, rdByte + dec c + JR NZ,rd4secs + + POP HL + POP BC + POP AF + + XOR a + ld (erflag),a + RET + + +;================================================================================================ +; Write physical sector to host +;================================================================================================ + +writehst: + PUSH AF + PUSH BC + PUSH HL + +wrWait1: IN A,(SD_STATUS) + CP 128 + JR NZ,wrWait1 + + CALL setLBAaddr + + LD A,$01 ; 01 = Write block + OUT (SD_CONTROL),A + + LD c,4 + LD HL,hstbuf +wr4secs: + LD b,128 +wrByte: + +wrWait2: IN A,(SD_STATUS) + CP 160 ; Write buffer empty + JR NZ,wrWait2 + + ; UPDATE S0urceror, inserted wait cycle between IN and OUT + ; to resolve unknown write issue in sd_controller.vhd in combination + ; with MISTer virtual SD interface sys/sd_card.sv + ; which results in hangs or write errors. + push bc + ld b,100 +_again: + djnz _again + pop bc + ; END UPDATE + + LD A,(HL) + OUT (SD_DATA),A + INC HL + dec b + JR NZ, wrByte + + dec c + JR NZ,wr4secs + + POP HL + POP BC + POP AF + + XOR a + ld (erflag),a + RET + +;================================================================================================ +; Utilities +;================================================================================================ + +printInline: + EX (SP),HL ; PUSH HL and put RET ADDress into HL + PUSH AF + PUSH BC +nextILChar: LD A,(HL) + CP 0 + JR Z,endOfPrint + LD C,A + CALL conout ; Print to TTY + iNC HL + JR nextILChar +endOfPrint: INC HL ; Get past "null" terminator + POP BC + POP AF + EX (SP),HL ; PUSH new RET ADDress on stack and restore HL + RET + +;================================================================================================ +; Data storage +;================================================================================================ + +dirbuf: .ds 128 ;scratch directory area +alv00: .ds 257 ;allocation vector 0 +alv01: .ds 257 ;allocation vector 1 +alv02: .ds 257 ;allocation vector 2 +alv03: .ds 257 ;allocation vector 3 +alv04: .ds 257 ;allocation vector 4 +alv05: .ds 257 ;allocation vector 5 +alv06: .ds 257 ;allocation vector 6 +alv07: .ds 257 ;allocation vector 7 +alv08: .ds 257 ;allocation vector 8 +alv09: .ds 257 ;allocation vector 9 +alv10: .ds 257 ;allocation vector 10 +alv11: .ds 257 ;allocation vector 11 +alv12: .ds 257 ;allocation vector 12 +alv13: .ds 257 ;allocation vector 13 +alv14: .ds 257 ;allocation vector 14 +alv15: .ds 257 ;allocation vector 15 + +lba0 .DB 00h +lba1 .DB 00h +lba2 .DB 00h +lba3 .DB 00h + + .DS 020h ; Start of BIOS stack area. +biosstack: .EQU $ + +sekdsk: .ds 1 ;seek disk number +sektrk: .ds 2 ;seek track number +seksec: .ds 2 ;seek sector number +; +hstdsk: .ds 1 ;host disk number +hsttrk: .ds 2 ;host track number +hstsec: .ds 1 ;host sector number +; +sekhst: .ds 1 ;seek shr secshf +hstact: .ds 1 ;host active flag +hstwrt: .ds 1 ;host written flag +; +unacnt: .ds 1 ;unalloc rec cnt +unadsk: .ds 1 ;last unalloc disk +unatrk: .ds 2 ;last unalloc track +unasec: .ds 1 ;last unalloc sector +; +erflag: .ds 1 ;error reporting +rsflag: .ds 1 ;read sector flag +readop: .ds 1 ;1 if read operation +wrtype: .ds 1 ;write operation type +dmaAddr: .ds 2 ;last dma address +hstbuf: .ds 512 ;host buffer + +hstBufEnd: .EQU $ + +biosEnd: .EQU $ + +; Disable the ROM, pop the active IO port from the stack (supplied by monitor), +; then start CP/M +popAndRun: + LD A,$01 + OUT ($38),A + + POP AF + CP $01 + JR Z,consoleAtB + LD A,$01 ;(List is TTY:, Punch is TTY:, Reader is TTY:, Console is CRT:) + JR setIOByte +consoleAtB: LD A,$00 ;(List is TTY:, Punch is TTY:, Reader is TTY:, Console is TTY:) +setIOByte: LD (iobyte),A + JP bios + + +;================================================================================= +; Relocate TPA area from 4100 to 0100 then start CP/M +; Used to manually transfer a loaded program after CP/M was previously loaded +;================================================================================= + + .org 0FFE8H + LD A,$01 + OUT ($38),A + + LD HL,04100H + LD DE,00100H + LD BC,08F00H + LDIR + JP bios + +;================================================================================= +; Normal start CP/M vector +;================================================================================= + + .ORG 0FFFEH + .dw popAndRun + + .END diff --git a/Z80 CPM and bootloader (basmon)/source/ch376s.bin b/Z80 CPM and bootloader (basmon)/source/ch376s.bin new file mode 100644 index 0000000000000000000000000000000000000000..e4bc4c6f6452e08799bf8a2ee107ad3ab78411c0 GIT binary patch literal 66 zcmV-I0KNasF+f9TWn*g~Lr60>Hgh0jZ*6ULZfRp-bZKvH4GI80Fw-DDF3;N`%SR~p Y+aS-$ 0..9 + + dec b + jr outer + + ret + +printInline: + EX (SP),HL ; PUSH HL and put RET ADDress into HL + PUSH AF + PUSH BC +nextILChar: LD A,(HL) + CP 0 + JR Z,endOfPrint + RST 08H + INC HL + JR nextILChar +endOfPrint: INC HL ; Get past "null" terminator + POP BC + POP AF + EX (SP),HL ; PUSH new RET ADDress on stack and restore HL + RET + + + .END diff --git a/Z80 CPM and bootloader (basmon)/source/cpm22.asm b/Z80 CPM and bootloader (basmon)/source/cpm22.asm new file mode 100644 index 0000000..cb88b05 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/cpm22.asm @@ -0,0 +1,3750 @@ +;************************************************************** +;* +;* C P / M version 2 . 2 +;* +;* Reconstructed from memory image on February 27, 1981 +;* +;* by Clark A. Calkins +;* +;************************************************************** +; +; Set memory limit here. This is the amount of contigeous +; ram starting from 0000. CP/M will reside at the end of this space. +; + +IOBYTE .EQU 3 ;i/o definition byte. +TDRIVE .EQU 4 ;current drive name and user number. +ENTRY .EQU 5 ;entry point for the cp/m bdos. +TFCB .EQU 5CH ;default file control block. +TBUFF .EQU 80H ;i/o buffer and command line storage. +TBASE .EQU 100H ;transiant program storage area. +; +; Set control character equates. +; +CNTRLC .EQU 3 ;control-c +CNTRLE .EQU 05H ;control-e +BS .EQU 08H ;backspace +TAB .EQU 09H ;tab +LF .EQU 0AH ;line feed +FF .EQU 0CH ;form feed +CR .EQU 0DH ;carriage return +CNTRLP .EQU 10H ;control-p +CNTRLR .EQU 12H ;control-r +CNTRLS .EQU 13H ;control-s +CNTRLU .EQU 15H ;control-u +CNTRLX .EQU 18H ;control-x +CNTRLZ .EQU 1AH ;control-z (end-of-file mark) +DEL .EQU 7FH ;rubout +; +; Set origin for CP/M +; + .ORG 0D000H +; +CBASE: JP COMMAND ;execute command processor (ccp). + JP CLEARBUF ;entry to empty input buffer before starting ccp. + +; +; Standard cp/m ccp input buffer. Format is (max length), +; (actual length), (char #1), (char #2), (char #3), etc. +; +INBUFF: .DB 127 ;length of input buffer. + .DB 0 ;current length of contents. + .TEXT "Copyright" + .TEXT " 1979 (c) by Digital Research " + .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +INPOINT:.DW INBUFF+2 ;input line pointer +NAMEPNT:.DW 0 ;input line pointer used for error message. Points to +; ;start of name in error. +; +; Routine to print (A) on the console. All registers used. +; +PRINT: LD E,A ;setup bdos call. + LD C,2 + JP ENTRY +; +; Routine to print (A) on the console and to save (BC). +; +PRINTB: PUSH BC + CALL PRINT + POP BC + RET +; +; Routine to send a carriage return, line feed combination +; to the console. +; +CRLF: LD A,CR + CALL PRINTB + LD A,LF + JP PRINTB +; +; Routine to send one space to the console and save (BC). +; +SPACE: LD A,' ' + JP PRINTB +; +; Routine to print character string pointed to be (BC) on the +; console. It must terminate with a null byte. +; +PLINE: PUSH BC + CALL CRLF + POP HL +PLINE2: LD A,(HL) + OR A + RET Z + INC HL + PUSH HL + CALL PRINT + POP HL + JP PLINE2 +; +; Routine to reset the disk system. +; +RESDSK: LD C,13 + JP ENTRY +; +; Routine to select disk (A). +; +DSKSEL: LD E,A + LD C,14 + JP ENTRY +; +; Routine to call bdos and save the return code. The zero +; flag is set on a return of 0ffh. +; +ENTRY1: CALL ENTRY + LD (RTNCODE),A ;save return code. + INC A ;set zero if 0ffh returned. + RET +; +; Routine to open a file. (DE) must point to the FCB. +; +OPEN: LD C,15 + JP ENTRY1 +; +; Routine to open file at (FCB). +; +OPENFCB:XOR A ;clear the record number byte at fcb+32 + LD (FCB+32),A + LD DE,FCB + JP OPEN +; +; Routine to close a file. (DE) points to FCB. +; +CLOSE: LD C,16 + JP ENTRY1 +; +; Routine to search for the first file with ambigueous name +; (DE). +; +SRCHFST:LD C,17 + JP ENTRY1 +; +; Search for the next ambigeous file name. +; +SRCHNXT:LD C,18 + JP ENTRY1 +; +; Search for file at (FCB). +; +SRCHFCB:LD DE,FCB + JP SRCHFST +; +; Routine to delete a file pointed to by (DE). +; +DELETE: LD C,19 + JP ENTRY +; +; Routine to call the bdos and set the zero flag if a zero +; status is returned. +; +ENTRY2: CALL ENTRY + OR A ;set zero flag if appropriate. + RET +; +; Routine to read the next record from a sequential file. +; (DE) points to the FCB. +; +RDREC: LD C,20 + JP ENTRY2 +; +; Routine to read file at (FCB). +; +READFCB:LD DE,FCB + JP RDREC +; +; Routine to write the next record of a sequential file. +; (DE) points to the FCB. +; +WRTREC: LD C,21 + JP ENTRY2 +; +; Routine to create the file pointed to by (DE). +; +CREATE: LD C,22 + JP ENTRY1 +; +; Routine to rename the file pointed to by (DE). Note that +; the new name starts at (DE+16). +; +RENAM: LD C,23 + JP ENTRY +; +; Get the current user code. +; +GETUSR: LD E,0FFH +; +; Routne to get or set the current user code. +; If (E) is FF then this is a GET, else it is a SET. +; +GETSETUC: LD C,32 + JP ENTRY +; +; Routine to set the current drive byte at (TDRIVE). +; +SETCDRV:CALL GETUSR ;get user number + ADD A,A ;and shift into the upper 4 bits. + ADD A,A + ADD A,A + ADD A,A + LD HL,CDRIVE ;now add in the current drive number. + OR (HL) + LD (TDRIVE),A ;and save. + RET +; +; Move currently active drive down to (TDRIVE). +; +MOVECD: LD A,(CDRIVE) + LD (TDRIVE),A + RET +; +; Routine to convert (A) into upper case ascii. Only letters +; are affected. +; +UPPER: CP 'a' ;check for letters in the range of 'a' to 'z'. + RET C + CP '{' + RET NC + AND 5FH ;convert it if found. + RET +; +; Routine to get a line of input. We must check to see if the +; user is in (BATCH) mode. If so, then read the input from file +; ($$$.SUB). At the end, reset to console input. +; +GETINP: LD A,(BATCH) ;if =0, then use console input. + OR A + JP Z,GETINP1 +; +; Use the submit file ($$$.sub) which is prepared by a +; SUBMIT run. It must be on drive (A) and it will be deleted +; if and error occures (like eof). +; + LD A,(CDRIVE) ;select drive 0 if need be. + OR A + LD A,0 ;always use drive A for submit. + CALL NZ,DSKSEL ;select it if required. + LD DE,BATCHFCB + CALL OPEN ;look for it. + JP Z,GETINP1 ;if not there, use normal input. + LD A,(BATCHFCB+15) ;get last record number+1. + DEC A + LD (BATCHFCB+32),A + LD DE,BATCHFCB + CALL RDREC ;read last record. + JP NZ,GETINP1 ;quit on end of file. +; +; Move this record into input buffer. +; + LD DE,INBUFF+1 + LD HL,TBUFF ;data was read into buffer here. + LD B,128 ;all 128 characters may be used. + CALL HL2DE ;(HL) to (DE), (B) bytes. + LD HL,BATCHFCB+14 + LD (HL),0 ;zero out the 's2' byte. + INC HL ;and decrement the record count. + DEC (HL) + LD DE,BATCHFCB ;close the batch file now. + CALL CLOSE + JP Z,GETINP1 ;quit on an error. + LD A,(CDRIVE) ;re-select previous drive if need be. + OR A + CALL NZ,DSKSEL ;don't do needless selects. +; +; Print line just read on console. +; + LD HL,INBUFF+2 + CALL PLINE2 + CALL CHKCON ;check console, quit on a key. + JP Z,GETINP2 ;jump if no key is pressed. +; +; Terminate the submit job on any keyboard input. Delete this +; file such that it is not re-started and jump to normal keyboard +; input section. +; + CALL DELBATCH ;delete the batch file. + JP CMMND1 ;and restart command input. +; +; Get here for normal keyboard input. Delete the submit file +; incase there was one. +; +GETINP1:CALL DELBATCH ;delete file ($$$.sub). + CALL SETCDRV ;reset active disk. + LD C,10 ;get line from console device. + LD DE,INBUFF + CALL ENTRY + CALL MOVECD ;reset current drive (again). +; +; Convert input line to upper case. +; +GETINP2:LD HL,INBUFF+1 + LD B,(HL) ;(B)=character counter. +GETINP3:INC HL + LD A,B ;end of the line? + OR A + JP Z,GETINP4 + LD A,(HL) ;convert to upper case. + CALL UPPER + LD (HL),A + DEC B ;adjust character count. + JP GETINP3 +GETINP4:LD (HL),A ;add trailing null. + LD HL,INBUFF+2 + LD (INPOINT),HL ;reset input line pointer. + RET +; +; Routine to check the console for a key pressed. The zero +; flag is set is none, else the character is returned in (A). +; +CHKCON: LD C,11 ;check console. + CALL ENTRY + OR A + RET Z ;return if nothing. + LD C,1 ;else get character. + CALL ENTRY + OR A ;clear zero flag and return. + RET +; +; Routine to get the currently active drive number. +; +GETDSK: LD C,25 + JP ENTRY +; +; Set the stabdard dma address. +; +STDDMA: LD DE,TBUFF +; +; Routine to set the dma address to (DE). +; +DMASET: LD C,26 + JP ENTRY +; +; Delete the batch file created by SUBMIT. +; +DELBATCH: LD HL,BATCH ;is batch active? + LD A,(HL) + OR A + RET Z + LD (HL),0 ;yes, de-activate it. + XOR A + CALL DSKSEL ;select drive 0 for sure. + LD DE,BATCHFCB ;and delete this file. + CALL DELETE + LD A,(CDRIVE) ;reset current drive. + JP DSKSEL +; +; Check to two strings at (PATTRN1) and (PATTRN2). They must be +; the same or we halt.... +; +VERIFY: LD DE,PATTRN1 ;these are the serial number bytes. + LD HL,PATTRN2 ;ditto, but how could they be different? + LD B,6 ;6 bytes each. +VERIFY1:LD A,(DE) + CP (HL) + JP NZ,HALT ;jump to halt routine. + INC DE + INC HL + DEC B + JP NZ,VERIFY1 + RET +; +; Print back file name with a '?' to indicate a syntax error. +; +SYNERR: CALL CRLF ;end current line. + LD HL,(NAMEPNT) ;this points to name in error. +SYNERR1:LD A,(HL) ;print it until a space or null is found. + CP ' ' + JP Z,SYNERR2 + OR A + JP Z,SYNERR2 + PUSH HL + CALL PRINT + POP HL + INC HL + JP SYNERR1 +SYNERR2:LD A,'?' ;add trailing '?'. + CALL PRINT + CALL CRLF + CALL DELBATCH ;delete any batch file. + JP CMMND1 ;and restart from console input. +; +; Check character at (DE) for legal command input. Note that the +; zero flag is set if the character is a delimiter. +; +CHECK: LD A,(DE) + OR A + RET Z + CP ' ' ;control characters are not legal here. + JP C,SYNERR + RET Z ;check for valid delimiter. + CP '=' + RET Z + CP '_' + RET Z + CP '.' + RET Z + CP ':' + RET Z + CP 03BH ; ';' + RET Z + CP '<' + RET Z + CP '>' + RET Z + RET +; +; Get the next non-blank character from (DE). +; +NONBLANK: LD A,(DE) + OR A ;string ends with a null. + RET Z + CP ' ' + RET NZ + INC DE + JP NONBLANK +; +; Add (HL)=(HL)+(A) +; +ADDHL: ADD A,L + LD L,A + RET NC ;take care of any carry. + INC H + RET +; +; Convert the first name in (FCB). +; +CONVFST:LD A,0 +; +; Format a file name (convert * to '?', etc.). On return, +; (A)=0 is an unambigeous name was specified. Enter with (A) equal to +; the position within the fcb for the name (either 0 or 16). +; +CONVERT:LD HL,FCB + CALL ADDHL + PUSH HL + PUSH HL + XOR A + LD (CHGDRV),A ;initialize drive change flag. + LD HL,(INPOINT) ;set (HL) as pointer into input line. + EX DE,HL + CALL NONBLANK ;get next non-blank character. + EX DE,HL + LD (NAMEPNT),HL ;save pointer here for any error message. + EX DE,HL + POP HL + LD A,(DE) ;get first character. + OR A + JP Z,CONVRT1 + SBC A,'A'-1 ;might be a drive name, convert to binary. + LD B,A ;and save. + INC DE ;check next character for a ':'. + LD A,(DE) + CP ':' + JP Z,CONVRT2 + DEC DE ;nope, move pointer back to the start of the line. +CONVRT1:LD A,(CDRIVE) + LD (HL),A + JP CONVRT3 +CONVRT2:LD A,B + LD (CHGDRV),A ;set change in drives flag. + LD (HL),B + INC DE +; +; Convert the basic file name. +; +CONVRT3:LD B,08H +CONVRT4:CALL CHECK + JP Z,CONVRT8 + INC HL + CP '*' ;note that an '*' will fill the remaining + JP NZ,CONVRT5 ;field with '?'. + LD (HL),'?' + JP CONVRT6 +CONVRT5:LD (HL),A + INC DE +CONVRT6:DEC B + JP NZ,CONVRT4 +CONVRT7:CALL CHECK ;get next delimiter. + JP Z,GETEXT + INC DE + JP CONVRT7 +CONVRT8:INC HL ;blank fill the file name. + LD (HL),' ' + DEC B + JP NZ,CONVRT8 +; +; Get the extension and convert it. +; +GETEXT: LD B,03H + CP '.' + JP NZ,GETEXT5 + INC DE +GETEXT1:CALL CHECK + JP Z,GETEXT5 + INC HL + CP '*' + JP NZ,GETEXT2 + LD (HL),'?' + JP GETEXT3 +GETEXT2:LD (HL),A + INC DE +GETEXT3:DEC B + JP NZ,GETEXT1 +GETEXT4:CALL CHECK + JP Z,GETEXT6 + INC DE + JP GETEXT4 +GETEXT5:INC HL + LD (HL),' ' + DEC B + JP NZ,GETEXT5 +GETEXT6:LD B,3 +GETEXT7:INC HL + LD (HL),0 + DEC B + JP NZ,GETEXT7 + EX DE,HL + LD (INPOINT),HL ;save input line pointer. + POP HL +; +; Check to see if this is an ambigeous file name specification. +; Set the (A) register to non zero if it is. +; + LD BC,11 ;set name length. +GETEXT8:INC HL + LD A,(HL) + CP '?' ;any question marks? + JP NZ,GETEXT9 + INC B ;count them. +GETEXT9:DEC C + JP NZ,GETEXT8 + LD A,B + OR A + RET +; +; CP/M command table. Note commands can be either 3 or 4 characters long. +; +NUMCMDS .EQU 6 ;number of commands +CMDTBL: .TEXT "DIR " + .TEXT "ERA " + .TEXT "TYPE" + .TEXT "SAVE" + .TEXT "REN " + .TEXT "USER" +; +; The following six bytes must agree with those at (PATTRN2) +; or cp/m will HALT. Why? +; +PATTRN1:.DB 0,22,0,0,0,0 ;(* serial number bytes *). +; +; Search the command table for a match with what has just +; been entered. If a match is found, then we jump to the +; proper section. Else jump to (UNKNOWN). +; On return, the (C) register is set to the command number +; that matched (or NUMCMDS+1 if no match). +; +SEARCH: LD HL,CMDTBL + LD C,0 +SEARCH1:LD A,C + CP NUMCMDS ;this commands exists. + RET NC + LD DE,FCB+1 ;check this one. + LD B,4 ;max command length. +SEARCH2:LD A,(DE) + CP (HL) + JP NZ,SEARCH3 ;not a match. + INC DE + INC HL + DEC B + JP NZ,SEARCH2 + LD A,(DE) ;allow a 3 character command to match. + CP ' ' + JP NZ,SEARCH4 + LD A,C ;set return register for this command. + RET +SEARCH3:INC HL + DEC B + JP NZ,SEARCH3 +SEARCH4:INC C + JP SEARCH1 +; +; Set the input buffer to empty and then start the command +; processor (ccp). +; +CLEARBUF: XOR A + LD (INBUFF+1),A ;second byte is actual length. +; +;************************************************************** +;* +;* +;* C C P - C o n s o l e C o m m a n d P r o c e s s o r +;* +;************************************************************** +;* +COMMAND:LD SP,CCPSTACK ;setup stack area. + PUSH BC ;note that (C) should be equal to: + LD A,C ;(uuuudddd) where 'uuuu' is the user number + RRA ;and 'dddd' is the drive number. + RRA + RRA + RRA + AND 0FH ;isolate the user number. + LD E,A + CALL GETSETUC ;and set it. + CALL RESDSK ;reset the disk system. + LD (BATCH),A ;clear batch mode flag. + POP BC + LD A,C + AND 0FH ;isolate the drive number. + LD (CDRIVE),A ;and save. + CALL DSKSEL ;...and select. + LD A,(INBUFF+1) + OR A ;anything in input buffer already? + JP NZ,CMMND2 ;yes, we just process it. +; +; Entry point to get a command line from the console. +; +CMMND1: LD SP,CCPSTACK ;set stack straight. + CALL CRLF ;start a new line on the screen. + CALL GETDSK ;get current drive. + ADD A,'A' + CALL PRINT ;print current drive. + LD A,'>' + CALL PRINT ;and add prompt. + CALL GETINP ;get line from user. +; +; Process command line here. +; +CMMND2: LD DE,TBUFF + CALL DMASET ;set standard dma address. + CALL GETDSK + LD (CDRIVE),A ;set current drive. + CALL CONVFST ;convert name typed in. + CALL NZ,SYNERR ;wild cards are not allowed. + LD A,(CHGDRV) ;if a change in drives was indicated, + OR A ;then treat this as an unknown command + JP NZ,UNKNOWN ;which gets executed. + CALL SEARCH ;else search command table for a match. +; +; Note that an unknown command returns +; with (A) pointing to the last address +; in our table which is (UNKNOWN). +; + LD HL,CMDADR ;now, look thru our address table for command (A). + LD E,A ;set (DE) to command number. + LD D,0 + ADD HL,DE + ADD HL,DE ;(HL)=(CMDADR)+2*(command number). + LD A,(HL) ;now pick out this address. + INC HL + LD H,(HL) + LD L,A + JP (HL) ;now execute it. +; +; CP/M command address table. +; +CMDADR: .DW DIRECT,ERASE,TYPE,SAVE + .DW RENAME,USER,UNKNOWN +; +; Halt the system. Reason for this is unknown at present. +; +HALT: LD HL,76F3H ;'DI HLT' instructions. + LD (CBASE),HL + LD HL,CBASE + JP (HL) +; +; Read error while TYPEing a file. +; +RDERROR:LD BC,RDERR + JP PLINE +RDERR: .TEXT "Read error" + .DB 0 +; +; Required file was not located. +; +NONE: LD BC,NOFILE + JP PLINE +NOFILE: .TEXT "No file" + .DB 0 +; +; Decode a command of the form 'A>filename number{ filename}. +; Note that a drive specifier is not allowed on the first file +; name. On return, the number is in register (A). Any error +; causes 'filename?' to be printed and the command is aborted. +; +DECODE: CALL CONVFST ;convert filename. + LD A,(CHGDRV) ;do not allow a drive to be specified. + OR A + JP NZ,SYNERR + LD HL,FCB+1 ;convert number now. + LD BC,11 ;(B)=sum register, (C)=max digit count. +DECODE1:LD A,(HL) + CP ' ' ;a space terminates the numeral. + JP Z,DECODE3 + INC HL + SUB '0' ;make binary from ascii. + CP 10 ;legal digit? + JP NC,SYNERR + LD D,A ;yes, save it in (D). + LD A,B ;compute (B)=(B)*10 and check for overflow. + AND 0E0H + JP NZ,SYNERR + LD A,B + RLCA + RLCA + RLCA ;(A)=(B)*8 + ADD A,B ;.......*9 + JP C,SYNERR + ADD A,B ;.......*10 + JP C,SYNERR + ADD A,D ;add in new digit now. +DECODE2:JP C,SYNERR + LD B,A ;and save result. + DEC C ;only look at 11 digits. + JP NZ,DECODE1 + RET +DECODE3:LD A,(HL) ;spaces must follow (why?). + CP ' ' + JP NZ,SYNERR + INC HL +DECODE4:DEC C + JP NZ,DECODE3 + LD A,B ;set (A)=the numeric value entered. + RET +; +; Move 3 bytes from (HL) to (DE). Note that there is only +; one reference to this at (A2D5h). +; +MOVE3: LD B,3 +; +; Move (B) bytes from (HL) to (DE). +; +HL2DE: LD A,(HL) + LD (DE),A + INC HL + INC DE + DEC B + JP NZ,HL2DE + RET +; +; Compute (HL)=(TBUFF)+(A)+(C) and get the byte that's here. +; +EXTRACT:LD HL,TBUFF + ADD A,C + CALL ADDHL + LD A,(HL) + RET +; +; Check drive specified. If it means a change, then the new +; drive will be selected. In any case, the drive byte of the +; fcb will be set to null (means use current drive). +; +DSELECT:XOR A ;null out first byte of fcb. + LD (FCB),A + LD A,(CHGDRV) ;a drive change indicated? + OR A + RET Z + DEC A ;yes, is it the same as the current drive? + LD HL,CDRIVE + CP (HL) + RET Z + JP DSKSEL ;no. Select it then. +; +; Check the drive selection and reset it to the previous +; drive if it was changed for the preceeding command. +; +RESETDR:LD A,(CHGDRV) ;drive change indicated? + OR A + RET Z + DEC A ;yes, was it a different drive? + LD HL,CDRIVE + CP (HL) + RET Z + LD A,(CDRIVE) ;yes, re-select our old drive. + JP DSKSEL +; +;************************************************************** +;* +;* D I R E C T O R Y C O M M A N D +;* +;************************************************************** +; +DIRECT: CALL CONVFST ;convert file name. + CALL DSELECT ;select indicated drive. + LD HL,FCB+1 ;was any file indicated? + LD A,(HL) + CP ' ' + JP NZ,DIRECT2 + LD B,11 ;no. Fill field with '?' - same as *.*. +DIRECT1:LD (HL),'?' + INC HL + DEC B + JP NZ,DIRECT1 +DIRECT2:LD E,0 ;set initial cursor position. + PUSH DE + CALL SRCHFCB ;get first file name. + CALL Z,NONE ;none found at all? +DIRECT3:JP Z,DIRECT9 ;terminate if no more names. + LD A,(RTNCODE) ;get file's position in segment (0-3). + RRCA + RRCA + RRCA + AND 60H ;(A)=position*32 + LD C,A + LD A,10 + CALL EXTRACT ;extract the tenth entry in fcb. + RLA ;check system file status bit. + JP C,DIRECT8 ;we don't list them. + POP DE + LD A,E ;bump name count. + INC E + PUSH DE + AND 03H ;at end of line? + PUSH AF + JP NZ,DIRECT4 + CALL CRLF ;yes, end this line and start another. + PUSH BC + CALL GETDSK ;start line with ('A:'). + POP BC + ADD A,'A' + CALL PRINTB + LD A,':' + CALL PRINTB + JP DIRECT5 +DIRECT4:CALL SPACE ;add seperator between file names. + LD A,':' + CALL PRINTB +DIRECT5:CALL SPACE + LD B,1 ;'extract' each file name character at a time. +DIRECT6:LD A,B + CALL EXTRACT + AND 7FH ;strip bit 7 (status bit). + CP ' ' ;are we at the end of the name? + JP NZ,DRECT65 + POP AF ;yes, don't print spaces at the end of a line. + PUSH AF + CP 3 + JP NZ,DRECT63 + LD A,9 ;first check for no extension. + CALL EXTRACT + AND 7FH + CP ' ' + JP Z,DIRECT7 ;don't print spaces. +DRECT63:LD A,' ' ;else print them. +DRECT65:CALL PRINTB + INC B ;bump to next character psoition. + LD A,B + CP 12 ;end of the name? + JP NC,DIRECT7 + CP 9 ;nope, starting extension? + JP NZ,DIRECT6 + CALL SPACE ;yes, add seperating space. + JP DIRECT6 +DIRECT7:POP AF ;get the next file name. +DIRECT8:CALL CHKCON ;first check console, quit on anything. + JP NZ,DIRECT9 + CALL SRCHNXT ;get next name. + JP DIRECT3 ;and continue with our list. +DIRECT9:POP DE ;restore the stack and return to command level. + JP GETBACK +; +;************************************************************** +;* +;* E R A S E C O M M A N D +;* +;************************************************************** +; +ERASE: CALL CONVFST ;convert file name. + CP 11 ;was '*.*' entered? + JP NZ,ERASE1 + LD BC,YESNO ;yes, ask for confirmation. + CALL PLINE + CALL GETINP + LD HL,INBUFF+1 + DEC (HL) ;must be exactly 'y'. + JP NZ,CMMND1 + INC HL + LD A,(HL) + CP 'Y' + JP NZ,CMMND1 + INC HL + LD (INPOINT),HL ;save input line pointer. +ERASE1: CALL DSELECT ;select desired disk. + LD DE,FCB + CALL DELETE ;delete the file. + INC A + CALL Z,NONE ;not there? + JP GETBACK ;return to command level now. +YESNO: .TEXT "All (y/n)?" + .DB 0 +; +;************************************************************** +;* +;* T Y P E C O M M A N D +;* +;************************************************************** +; +TYPE: CALL CONVFST ;convert file name. + JP NZ,SYNERR ;wild cards not allowed. + CALL DSELECT ;select indicated drive. + CALL OPENFCB ;open the file. + JP Z,TYPE5 ;not there? + CALL CRLF ;ok, start a new line on the screen. + LD HL,NBYTES ;initialize byte counter. + LD (HL),0FFH ;set to read first sector. +TYPE1: LD HL,NBYTES +TYPE2: LD A,(HL) ;have we written the entire sector? + CP 128 + JP C,TYPE3 + PUSH HL ;yes, read in the next one. + CALL READFCB + POP HL + JP NZ,TYPE4 ;end or error? + XOR A ;ok, clear byte counter. + LD (HL),A +TYPE3: INC (HL) ;count this byte. + LD HL,TBUFF ;and get the (A)th one from the buffer (TBUFF). + CALL ADDHL + LD A,(HL) + CP CNTRLZ ;end of file mark? + JP Z,GETBACK + CALL PRINT ;no, print it. + CALL CHKCON ;check console, quit if anything ready. + JP NZ,GETBACK + JP TYPE1 +; +; Get here on an end of file or read error. +; +TYPE4: DEC A ;read error? + JP Z,GETBACK + CALL RDERROR ;yes, print message. +TYPE5: CALL RESETDR ;and reset proper drive + JP SYNERR ;now print file name with problem. +; +;************************************************************** +;* +;* S A V E C O M M A N D +;* +;************************************************************** +; +SAVE: CALL DECODE ;get numeric number that follows SAVE. + PUSH AF ;save number of pages to write. + CALL CONVFST ;convert file name. + JP NZ,SYNERR ;wild cards not allowed. + CALL DSELECT ;select specified drive. + LD DE,FCB ;now delete this file. + PUSH DE + CALL DELETE + POP DE + CALL CREATE ;and create it again. + JP Z,SAVE3 ;can't create? + XOR A ;clear record number byte. + LD (FCB+32),A + POP AF ;convert pages to sectors. + LD L,A + LD H,0 + ADD HL,HL ;(HL)=number of sectors to write. + LD DE,TBASE ;and we start from here. +SAVE1: LD A,H ;done yet? + OR L + JP Z,SAVE2 + DEC HL ;nope, count this and compute the start + PUSH HL ;of the next 128 byte sector. + LD HL,128 + ADD HL,DE + PUSH HL ;save it and set the transfer address. + CALL DMASET + LD DE,FCB ;write out this sector now. + CALL WRTREC + POP DE ;reset (DE) to the start of the last sector. + POP HL ;restore sector count. + JP NZ,SAVE3 ;write error? + JP SAVE1 +; +; Get here after writing all of the file. +; +SAVE2: LD DE,FCB ;now close the file. + CALL CLOSE + INC A ;did it close ok? + JP NZ,SAVE4 +; +; Print out error message (no space). +; +SAVE3: LD BC,NOSPACE + CALL PLINE +SAVE4: CALL STDDMA ;reset the standard dma address. + JP GETBACK +NOSPACE:.TEXT "No space" + .DB 0 +; +;************************************************************** +;* +;* R E N A M E C O M M A N D +;* +;************************************************************** +; +RENAME: CALL CONVFST ;convert first file name. + JP NZ,SYNERR ;wild cards not allowed. + LD A,(CHGDRV) ;remember any change in drives specified. + PUSH AF + CALL DSELECT ;and select this drive. + CALL SRCHFCB ;is this file present? + JP NZ,RENAME6 ;yes, print error message. + LD HL,FCB ;yes, move this name into second slot. + LD DE,FCB+16 + LD B,16 + CALL HL2DE + LD HL,(INPOINT) ;get input pointer. + EX DE,HL + CALL NONBLANK ;get next non blank character. + CP '=' ;only allow an '=' or '_' seperator. + JP Z,RENAME1 + CP '_' + JP NZ,RENAME5 +RENAME1:EX DE,HL + INC HL ;ok, skip seperator. + LD (INPOINT),HL ;save input line pointer. + CALL CONVFST ;convert this second file name now. + JP NZ,RENAME5 ;again, no wild cards. + POP AF ;if a drive was specified, then it + LD B,A ;must be the same as before. + LD HL,CHGDRV + LD A,(HL) + OR A + JP Z,RENAME2 + CP B + LD (HL),B + JP NZ,RENAME5 ;they were different, error. +RENAME2:LD (HL),B ; reset as per the first file specification. + XOR A + LD (FCB),A ;clear the drive byte of the fcb. +RENAME3:CALL SRCHFCB ;and go look for second file. + JP Z,RENAME4 ;doesn't exist? + LD DE,FCB + CALL RENAM ;ok, rename the file. + JP GETBACK +; +; Process rename errors here. +; +RENAME4:CALL NONE ;file not there. + JP GETBACK +RENAME5:CALL RESETDR ;bad command format. + JP SYNERR +RENAME6:LD BC,EXISTS ;destination file already exists. + CALL PLINE + JP GETBACK +EXISTS: .TEXT "File exists" + .DB 0 +; +;************************************************************** +;* +;* U S E R C O M M A N D +;* +;************************************************************** +; +USER: CALL DECODE ;get numeric value following command. + CP 16 ;legal user number? + JP NC,SYNERR + LD E,A ;yes but is there anything else? + LD A,(FCB+1) + CP ' ' + JP Z,SYNERR ;yes, that is not allowed. + CALL GETSETUC ;ok, set user code. + JP GETBACK1 +; +;************************************************************** +;* +;* T R A N S I A N T P R O G R A M C O M M A N D +;* +;************************************************************** +; +UNKNOWN:CALL VERIFY ;check for valid system (why?). + LD A,(FCB+1) ;anything to execute? + CP ' ' + JP NZ,UNKWN1 + LD A,(CHGDRV) ;nope, only a drive change? + OR A + JP Z,GETBACK1 ;neither??? + DEC A + LD (CDRIVE),A ;ok, store new drive. + CALL MOVECD ;set (TDRIVE) also. + CALL DSKSEL ;and select this drive. + JP GETBACK1 ;then return. +; +; Here a file name was typed. Prepare to execute it. +; +UNKWN1: LD DE,FCB+9 ;an extension specified? + LD A,(DE) + CP ' ' + JP NZ,SYNERR ;yes, not allowed. +UNKWN2: PUSH DE + CALL DSELECT ;select specified drive. + POP DE + LD HL,COMFILE ;set the extension to 'COM'. + CALL MOVE3 + CALL OPENFCB ;and open this file. + JP Z,UNKWN9 ;not present? +; +; Load in the program. +; + LD HL,TBASE ;store the program starting here. +UNKWN3: PUSH HL + EX DE,HL + CALL DMASET ;set transfer address. + LD DE,FCB ;and read the next record. + CALL RDREC + JP NZ,UNKWN4 ;end of file or read error? + POP HL ;nope, bump pointer for next sector. + LD DE,128 + ADD HL,DE + LD DE,CBASE ;enough room for the whole file? + LD A,L + SUB E + LD A,H + SBC A,D + JP NC,UNKWN0 ;no, it can't fit. + JP UNKWN3 +; +; Get here after finished reading. +; +UNKWN4: POP HL + DEC A ;normal end of file? + JP NZ,UNKWN0 + CALL RESETDR ;yes, reset previous drive. + CALL CONVFST ;convert the first file name that follows + LD HL,CHGDRV ;command name. + PUSH HL + LD A,(HL) ;set drive code in default fcb. + LD (FCB),A + LD A,16 ;put second name 16 bytes later. + CALL CONVERT ;convert second file name. + POP HL + LD A,(HL) ;and set the drive for this second file. + LD (FCB+16),A + XOR A ;clear record byte in fcb. + LD (FCB+32),A + LD DE,TFCB ;move it into place at(005Ch). + LD HL,FCB + LD B,33 + CALL HL2DE + LD HL,INBUFF+2 ;now move the remainder of the input +UNKWN5: LD A,(HL) ;line down to (0080h). Look for a non blank. + OR A ;or a null. + JP Z,UNKWN6 + CP ' ' + JP Z,UNKWN6 + INC HL + JP UNKWN5 +; +; Do the line move now. It ends in a null byte. +; +UNKWN6: LD B,0 ;keep a character count. + LD DE,TBUFF+1 ;data gets put here. +UNKWN7: LD A,(HL) ;move it now. + LD (DE),A + OR A + JP Z,UNKWN8 + INC B + INC HL + INC DE + JP UNKWN7 +UNKWN8: LD A,B ;now store the character count. + LD (TBUFF),A + CALL CRLF ;clean up the screen. + CALL STDDMA ;set standard transfer address. + CALL SETCDRV ;reset current drive. + CALL TBASE ;and execute the program. +; +; Transiant programs return here (or reboot). +; + LD SP,BATCH ;set stack first off. + CALL MOVECD ;move current drive into place (TDRIVE). + CALL DSKSEL ;and reselect it. + JP CMMND1 ;back to comand mode. +; +; Get here if some error occured. +; +UNKWN9: CALL RESETDR ;inproper format. + JP SYNERR +UNKWN0: LD BC,BADLOAD ;read error or won't fit. + CALL PLINE + JP GETBACK +BADLOAD:.TEXT "Bad load" + .DB 0 +COMFILE:.TEXT "COM" ;command file extension. +; +; Get here to return to command level. We will reset the +; previous active drive and then either return to command +; level directly or print error message and then return. +; +GETBACK:CALL RESETDR ;reset previous drive. +GETBACK1: CALL CONVFST ;convert first name in (FCB). + LD A,(FCB+1) ;if this was just a drive change request, + SUB ' ' ;make sure it was valid. + LD HL,CHGDRV + OR (HL) + JP NZ,SYNERR + JP CMMND1 ;ok, return to command level. +; +; ccp stack area. +; + .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +CCPSTACK .EQU $ ;end of ccp stack area. +; +; Batch (or SUBMIT) processing information storage. +; +BATCH: .DB 0 ;batch mode flag (0=not active). +BATCHFCB: .DB 0, + .TEXT "$$$ SUB" + .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +; +; File control block setup by the CCP. +; +FCB: .DB 0 + .TEXT " " + .DB 0,0,0,0,0 + .TEXT " " + .DB 0,0,0,0,0 +RTNCODE:.DB 0 ;status returned from bdos call. +CDRIVE: .DB 0 ;currently active drive. +CHGDRV: .DB 0 ;change in drives flag (0=no change). +NBYTES: .DW 0 ;byte counter used by TYPE. +; +; Room for expansion? +; + .DB 0,0,0,0,0,0,0,0,0,0,0,0,0 +; +; Note that the following six bytes must match those at +; (PATTRN1) or cp/m will HALT. Why? +; +PATTRN2:.DB 0,22,0,0,0,0 ;(* serial number bytes *). +; +;************************************************************** +;* +;* B D O S E N T R Y +;* +;************************************************************** +; +FBASE: JP FBASE1 +; +; Bdos error table. +; +BADSCTR:.DW ERROR1 ;bad sector on read or write. +BADSLCT:.DW ERROR2 ;bad disk select. +RODISK: .DW ERROR3 ;disk is read only. +ROFILE: .DW ERROR4 ;file is read only. +; +; Entry into bdos. (DE) or (E) are the parameters passed. The +; function number desired is in register (C). +; +FBASE1: EX DE,HL ;save the (DE) parameters. + LD (PARAMS),HL + EX DE,HL + LD A,E ;and save register (E) in particular. + LD (EPARAM),A + LD HL,0 + LD (STATUS),HL ;clear return status. + ADD HL,SP + LD (USRSTACK),HL ;save users stack pointer. + LD SP,STKAREA ;and set our own. + XOR A ;clear auto select storage space. + LD (AUTOFLAG),A + LD (AUTO),A + LD HL,GOBACK ;set return address. + PUSH HL + LD A,C ;get function number. + CP NFUNCTS ;valid function number? + RET NC + LD C,E ;keep single register function here. + LD HL,FUNCTNS ;now look thru the function table. + LD E,A + LD D,0 ;(DE)=function number. + ADD HL,DE + ADD HL,DE ;(HL)=(start of table)+2*(function number). + LD E,(HL) + INC HL + LD D,(HL) ;now (DE)=address for this function. + LD HL,(PARAMS) ;retrieve parameters. + EX DE,HL ;now (DE) has the original parameters. + JP (HL) ;execute desired function. +; +; BDOS function jump table. +; +NFUNCTS .EQU 41 ;number of functions in followin table. +; +FUNCTNS:.DW WBOOT,GETCON,OUTCON,GETRDR,PUNCH,LIST,DIRCIO,GETIOB + .DW SETIOB,PRTSTR,RDBUFF,GETCSTS,GETVER,RSTDSK,SETDSK,OPENFIL + .DW CLOSEFIL,GETFST,GETNXT,DELFILE,READSEQ,WRTSEQ,FCREATE + .DW RENFILE,GETLOG,GETCRNT,PUTDMA,GETALOC,WRTPRTD,GETROV,SETATTR + .DW GETPARM,GETUSER,RDRANDOM,WTRANDOM,FILESIZE,SETRAN,LOGOFF,RTN + .DW RTN,WTSPECL +; +; Bdos error message section. +; +ERROR1: LD HL,BADSEC ;bad sector message. + CALL PRTERR ;print it and get a 1 char responce. + CP CNTRLC ;re-boot request (control-c)? + JP Z,0 ;yes. + RET ;no, return to retry i/o function. +; +ERROR2: LD HL,BADSEL ;bad drive selected. + JP ERROR5 +; +ERROR3: LD HL,DISKRO ;disk is read only. + JP ERROR5 +; +ERROR4: LD HL,FILERO ;file is read only. +; +ERROR5: CALL PRTERR + JP 0 ;always reboot on these errors. +; +BDOSERR:.TEXT "Bdos Err On " +BDOSDRV:.TEXT " : $" +BADSEC: .TEXT "Bad Sector$" +BADSEL: .TEXT "Select$" +FILERO: .TEXT "File " +DISKRO: .TEXT "R/O$" +; +; Print bdos error message. +; +PRTERR: PUSH HL ;save second message pointer. + CALL OUTCRLF ;send (cr)(lf). + LD A,(ACTIVE) ;get active drive. + ADD A,'A' ;make ascii. + LD (BDOSDRV),A ;and put in message. + LD BC,BDOSERR ;and print it. + CALL PRTMESG + POP BC ;print second message line now. + CALL PRTMESG +; +; Get an input character. We will check our 1 character +; buffer first. This may be set by the console status routine. +; +GETCHAR:LD HL,CHARBUF ;check character buffer. + LD A,(HL) ;anything present already? + LD (HL),0 ;...either case clear it. + OR A + RET NZ ;yes, use it. + JP CONIN ;nope, go get a character responce. +; +; Input and echo a character. +; +GETECHO:CALL GETCHAR ;input a character. + CALL CHKCHAR ;carriage control? + RET C ;no, a regular control char so don't echo. + PUSH AF ;ok, save character now. + LD C,A + CALL OUTCON ;and echo it. + POP AF ;get character and return. + RET +; +; Check character in (A). Set the zero flag on a carriage +; control character and the carry flag on any other control +; character. +; +CHKCHAR:CP CR ;check for carriage return, line feed, backspace, + RET Z ;or a tab. + CP LF + RET Z + CP TAB + RET Z + CP BS + RET Z + CP ' ' ;other control char? Set carry flag. + RET +; +; Check the console during output. Halt on a control-s, then +; reboot on a control-c. If anything else is ready, clear the +; zero flag and return (the calling routine may want to do +; something). +; +CKCONSOL: LD A,(CHARBUF) ;check buffer. + OR A ;if anything, just return without checking. + JP NZ,CKCON2 + CALL CONST ;nothing in buffer. Check console. + AND 01H ;look at bit 0. + RET Z ;return if nothing. + CALL CONIN ;ok, get it. + CP CNTRLS ;if not control-s, return with zero cleared. + JP NZ,CKCON1 + CALL CONIN ;halt processing until another char + CP CNTRLC ;is typed. Control-c? + JP Z,0 ;yes, reboot now. + XOR A ;no, just pretend nothing was ever ready. + RET +CKCON1: LD (CHARBUF),A ;save character in buffer for later processing. +CKCON2: LD A,1 ;set (A) to non zero to mean something is ready. + RET +; +; Output (C) to the screen. If the printer flip-flop flag +; is set, we will send character to printer also. The console +; will be checked in the process. +; +OUTCHAR:LD A,(OUTFLAG) ;check output flag. + OR A ;anything and we won't generate output. + JP NZ,OUTCHR1 + PUSH BC + CALL CKCONSOL ;check console (we don't care whats there). + POP BC + PUSH BC + CALL CONOUT ;output (C) to the screen. + POP BC + PUSH BC + LD A,(PRTFLAG) ;check printer flip-flop flag. + OR A + CALL NZ,LIST ;print it also if non-zero. + POP BC +OUTCHR1:LD A,C ;update cursors position. + LD HL,CURPOS + CP DEL ;rubouts don't do anything here. + RET Z + INC (HL) ;bump line pointer. + CP ' ' ;and return if a normal character. + RET NC + DEC (HL) ;restore and check for the start of the line. + LD A,(HL) + OR A + RET Z ;ingnore control characters at the start of the line. + LD A,C + CP BS ;is it a backspace? + JP NZ,OUTCHR2 + DEC (HL) ;yes, backup pointer. + RET +OUTCHR2:CP LF ;is it a line feed? + RET NZ ;ignore anything else. + LD (HL),0 ;reset pointer to start of line. + RET +; +; Output (A) to the screen. If it is a control character +; (other than carriage control), use ^x format. +; +SHOWIT: LD A,C + CALL CHKCHAR ;check character. + JP NC,OUTCON ;not a control, use normal output. + PUSH AF + LD C,'^' ;for a control character, preceed it with '^'. + CALL OUTCHAR + POP AF + OR '@' ;and then use the letter equivelant. + LD C,A +; +; Function to output (C) to the console device and expand tabs +; if necessary. +; +OUTCON: LD A,C + CP TAB ;is it a tab? + JP NZ,OUTCHAR ;use regular output. +OUTCON1:LD C,' ' ;yes it is, use spaces instead. + CALL OUTCHAR + LD A,(CURPOS) ;go until the cursor is at a multiple of 8 + + AND 07H ;position. + JP NZ,OUTCON1 + RET +; +; Echo a backspace character. Erase the prevoius character +; on the screen. +; +BACKUP: CALL BACKUP1 ;backup the screen 1 place. + LD C,' ' ;then blank that character. + CALL CONOUT +BACKUP1:LD C,BS ;then back space once more. + JP CONOUT +; +; Signal a deleted line. Print a '#' at the end and start +; over. +; +NEWLINE:LD C,'#' + CALL OUTCHAR ;print this. + CALL OUTCRLF ;start new line. +NEWLN1: LD A,(CURPOS) ;move the cursor to the starting position. + LD HL,STARTING + CP (HL) + RET NC ;there yet? + LD C,' ' + CALL OUTCHAR ;nope, keep going. + JP NEWLN1 +; +; Output a (cr) (lf) to the console device (screen). +; +OUTCRLF:LD C,CR + CALL OUTCHAR + LD C,LF + JP OUTCHAR +; +; Print message pointed to by (BC). It will end with a '$'. +; +PRTMESG:LD A,(BC) ;check for terminating character. + CP '$' + RET Z + INC BC + PUSH BC ;otherwise, bump pointer and print it. + LD C,A + CALL OUTCON + POP BC + JP PRTMESG +; +; Function to execute a buffered read. +; +RDBUFF: LD A,(CURPOS) ;use present location as starting one. + LD (STARTING),A + LD HL,(PARAMS) ;get the maximum buffer space. + LD C,(HL) + INC HL ;point to first available space. + PUSH HL ;and save. + LD B,0 ;keep a character count. +RDBUF1: PUSH BC + PUSH HL +RDBUF2: CALL GETCHAR ;get the next input character. + AND 7FH ;strip bit 7. + POP HL ;reset registers. + POP BC + CP CR ;en of the line? + JP Z,RDBUF17 + CP LF + JP Z,RDBUF17 + CP BS ;how about a backspace? + JP NZ,RDBUF3 + LD A,B ;yes, but ignore at the beginning of the line. + OR A + JP Z,RDBUF1 + DEC B ;ok, update counter. + LD A,(CURPOS) ;if we backspace to the start of the line, + LD (OUTFLAG),A ;treat as a cancel (control-x). + JP RDBUF10 +RDBUF3: CP DEL ;user typed a rubout? + JP NZ,RDBUF4 + LD A,B ;ignore at the start of the line. + OR A + JP Z,RDBUF1 + LD A,(HL) ;ok, echo the prevoius character. + DEC B ;and reset pointers (counters). + DEC HL + JP RDBUF15 +RDBUF4: CP CNTRLE ;physical end of line? + JP NZ,RDBUF5 + PUSH BC ;yes, do it. + PUSH HL + CALL OUTCRLF + XOR A ;and update starting position. + LD (STARTING),A + JP RDBUF2 +RDBUF5: CP CNTRLP ;control-p? + JP NZ,RDBUF6 + PUSH HL ;yes, flip the print flag filp-flop byte. + LD HL,PRTFLAG + LD A,1 ;PRTFLAG=1-PRTFLAG + SUB (HL) + LD (HL),A + POP HL + JP RDBUF1 +RDBUF6: CP CNTRLX ;control-x (cancel)? + JP NZ,RDBUF8 + POP HL +RDBUF7: LD A,(STARTING) ;yes, backup the cursor to here. + LD HL,CURPOS + CP (HL) + JP NC,RDBUFF ;done yet? + DEC (HL) ;no, decrement pointer and output back up one space. + CALL BACKUP + JP RDBUF7 +RDBUF8: CP CNTRLU ;cntrol-u (cancel line)? + JP NZ,RDBUF9 + CALL NEWLINE ;start a new line. + POP HL + JP RDBUFF +RDBUF9: CP CNTRLR ;control-r? + JP NZ,RDBUF14 +RDBUF10:PUSH BC ;yes, start a new line and retype the old one. + CALL NEWLINE + POP BC + POP HL + PUSH HL + PUSH BC +RDBUF11:LD A,B ;done whole line yet? + OR A + JP Z,RDBUF12 + INC HL ;nope, get next character. + LD C,(HL) + DEC B ;count it. + PUSH BC + PUSH HL + CALL SHOWIT ;and display it. + POP HL + POP BC + JP RDBUF11 +RDBUF12:PUSH HL ;done with line. If we were displaying + LD A,(OUTFLAG) ;then update cursor position. + OR A + JP Z,RDBUF2 + LD HL,CURPOS ;because this line is shorter, we must + SUB (HL) ;back up the cursor (not the screen however) + LD (OUTFLAG),A ;some number of positions. +RDBUF13:CALL BACKUP ;note that as long as (OUTFLAG) is non + LD HL,OUTFLAG ;zero, the screen will not be changed. + DEC (HL) + JP NZ,RDBUF13 + JP RDBUF2 ;now just get the next character. +; +; Just a normal character, put this in our buffer and echo. +; +RDBUF14:INC HL + LD (HL),A ;store character. + INC B ;and count it. +RDBUF15:PUSH BC + PUSH HL + LD C,A ;echo it now. + CALL SHOWIT + POP HL + POP BC + LD A,(HL) ;was it an abort request? + CP CNTRLC ;control-c abort? + LD A,B + JP NZ,RDBUF16 + CP 1 ;only if at start of line. + JP Z,0 +RDBUF16:CP C ;nope, have we filled the buffer? + JP C,RDBUF1 +RDBUF17:POP HL ;yes end the line and return. + LD (HL),B + LD C,CR + JP OUTCHAR ;output (cr) and return. +; +; Function to get a character from the console device. +; +GETCON: CALL GETECHO ;get and echo. + JP SETSTAT ;save status and return. +; +; Function to get a character from the tape reader device. +; +GETRDR: CALL READER ;get a character from reader, set status and return. + JP SETSTAT +; +; Function to perform direct console i/o. If (C) contains (FF) +; then this is an input request. If (C) contains (FE) then +; this is a status request. Otherwise we are to output (C). +; +DIRCIO: LD A,C ;test for (FF). + INC A + JP Z,DIRC1 + INC A ;test for (FE). + JP Z,CONST + JP CONOUT ;just output (C). +DIRC1: CALL CONST ;this is an input request. + OR A + JP Z,GOBACK1 ;not ready? Just return (directly). + CALL CONIN ;yes, get character. + JP SETSTAT ;set status and return. +; +; Function to return the i/o byte. +; +GETIOB: LD A,(IOBYTE) + JP SETSTAT +; +; Function to set the i/o byte. +; +SETIOB: LD HL,IOBYTE + LD (HL),C + RET +; +; Function to print the character string pointed to by (DE) +; on the console device. The string ends with a '$'. +; +PRTSTR: EX DE,HL + LD C,L + LD B,H ;now (BC) points to it. + JP PRTMESG +; +; Function to interigate the console device. +; +GETCSTS:CALL CKCONSOL +; +; Get here to set the status and return to the cleanup +; section. Then back to the user. +; +SETSTAT:LD (STATUS),A +RTN: RET +; +; Set the status to 1 (read or write error code). +; +IOERR1: LD A,1 + JP SETSTAT +; +OUTFLAG:.DB 0 ;output flag (non zero means no output). +STARTING: .DB 2 ;starting position for cursor. +CURPOS: .DB 0 ;cursor position (0=start of line). +PRTFLAG:.DB 0 ;printer flag (control-p toggle). List if non zero. +CHARBUF:.DB 0 ;single input character buffer. +; +; Stack area for BDOS calls. +; +USRSTACK: .DW 0 ;save users stack pointer here. +; + .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +STKAREA .EQU $ ;end of stack area. +; +USERNO: .DB 0 ;current user number. +ACTIVE: .DB 0 ;currently active drive. +PARAMS: .DW 0 ;save (DE) parameters here on entry. +STATUS: .DW 0 ;status returned from bdos function. +; +; Select error occured, jump to error routine. +; +SLCTERR:LD HL,BADSLCT +; +; Jump to (HL) indirectly. +; +JUMPHL: LD E,(HL) + INC HL + LD D,(HL) ;now (DE) contain the desired address. + EX DE,HL + JP (HL) +; +; Block move. (DE) to (HL), (C) bytes total. +; +DE2HL: INC C ;is count down to zero? +DE2HL1: DEC C + RET Z ;yes, we are done. + LD A,(DE) ;no, move one more byte. + LD (HL),A + INC DE + INC HL + JP DE2HL1 ;and repeat. +; +; Select the desired drive. +; +SELECT: LD A,(ACTIVE) ;get active disk. + LD C,A + CALL SELDSK ;select it. + LD A,H ;valid drive? + OR L ;valid drive? + RET Z ;return if not. +; +; Here, the BIOS returned the address of the parameter block +; in (HL). We will extract the necessary pointers and save them. +; + LD E,(HL) ;yes, get address of translation table into (DE). + INC HL + LD D,(HL) + INC HL + LD (SCRATCH1),HL ;save pointers to scratch areas. + INC HL + INC HL + LD (SCRATCH2),HL ;ditto. + INC HL + INC HL + LD (SCRATCH3),HL ;ditto. + INC HL + INC HL + EX DE,HL ;now save the translation table address. + LD (XLATE),HL + LD HL,DIRBUF ;put the next 8 bytes here. + LD C,8 ;they consist of the directory buffer + CALL DE2HL ;pointer, parameter block pointer, + LD HL,(DISKPB) ;check and allocation vectors. + EX DE,HL + LD HL,SECTORS ;move parameter block into our ram. + LD C,15 ;it is 15 bytes long. + CALL DE2HL + LD HL,(DSKSIZE) ;check disk size. + LD A,H ;more than 256 blocks on this? + LD HL,BIGDISK + LD (HL),0FFH ;set to samll. + OR A + JP Z,SELECT1 + LD (HL),0 ;wrong, set to large. +SELECT1:LD A,0FFH ;clear the zero flag. + OR A + RET +; +; Routine to home the disk track head and clear pointers. +; +HOMEDRV:CALL HOME ;home the head. + XOR A + LD HL,(SCRATCH2) ;set our track pointer also. + LD (HL),A + INC HL + LD (HL),A + LD HL,(SCRATCH3) ;and our sector pointer. + LD (HL),A + INC HL + LD (HL),A + RET +; +; Do the actual disk read and check the error return status. +; +DOREAD: CALL READ + JP IORET +; +; Do the actual disk write and handle any bios error. +; +DOWRITE:CALL WRITE +IORET: OR A + RET Z ;return unless an error occured. + LD HL,BADSCTR ;bad read/write on this sector. + JP JUMPHL +; +; Routine to select the track and sector that the desired +; block number falls in. +; +TRKSEC: LD HL,(FILEPOS) ;get position of last accessed file + LD C,2 ;in directory and compute sector #. + CALL SHIFTR ;sector #=file-position/4. + LD (BLKNMBR),HL ;save this as the block number of interest. + LD (CKSUMTBL),HL ;what's it doing here too? +; +; if the sector number has already been set (BLKNMBR), enter +; at this point. +; +TRKSEC1:LD HL,BLKNMBR + LD C,(HL) ;move sector number into (BC). + INC HL + LD B,(HL) + LD HL,(SCRATCH3) ;get current sector number and + LD E,(HL) ;move this into (DE). + INC HL + LD D,(HL) + LD HL,(SCRATCH2) ;get current track number. + LD A,(HL) ;and this into (HL). + INC HL + LD H,(HL) + LD L,A +TRKSEC2:LD A,C ;is desired sector before current one? + SUB E + LD A,B + SBC A,D + JP NC,TRKSEC3 + PUSH HL ;yes, decrement sectors by one track. + LD HL,(SECTORS) ;get sectors per track. + LD A,E + SUB L + LD E,A + LD A,D + SBC A,H + LD D,A ;now we have backed up one full track. + POP HL + DEC HL ;adjust track counter. + JP TRKSEC2 +TRKSEC3:PUSH HL ;desired sector is after current one. + LD HL,(SECTORS) ;get sectors per track. + ADD HL,DE ;bump sector pointer to next track. + JP C,TRKSEC4 + LD A,C ;is desired sector now before current one? + SUB L + LD A,B + SBC A,H + JP C,TRKSEC4 + EX DE,HL ;not yes, increment track counter + POP HL ;and continue until it is. + INC HL + JP TRKSEC3 +; +; here we have determined the track number that contains the +; desired sector. +; +TRKSEC4:POP HL ;get track number (HL). + PUSH BC + PUSH DE + PUSH HL + EX DE,HL + LD HL,(OFFSET) ;adjust for first track offset. + ADD HL,DE + LD B,H + LD C,L + CALL SETTRK ;select this track. + POP DE ;reset current track pointer. + LD HL,(SCRATCH2) + LD (HL),E + INC HL + LD (HL),D + POP DE + LD HL,(SCRATCH3) ;reset the first sector on this track. + LD (HL),E + INC HL + LD (HL),D + POP BC + LD A,C ;now subtract the desired one. + SUB E ;to make it relative (1-# sectors/track). + LD C,A + LD A,B + SBC A,D + LD B,A + LD HL,(XLATE) ;translate this sector according to this table. + EX DE,HL + CALL SECTRN ;let the bios translate it. + LD C,L + LD B,H + JP SETSEC ;and select it. +; +; Compute block number from record number (SAVNREC) and +; extent number (SAVEXT). +; +GETBLOCK: LD HL,BLKSHFT ;get logical to physical conversion. + LD C,(HL) ;note that this is base 2 log of ratio. + LD A,(SAVNREC) ;get record number. +GETBLK1:OR A ;compute (A)=(A)/2^BLKSHFT. + RRA + DEC C + JP NZ,GETBLK1 + LD B,A ;save result in (B). + LD A,8 + SUB (HL) + LD C,A ;compute (C)=8-BLKSHFT. + LD A,(SAVEXT) +GETBLK2:DEC C ;compute (A)=SAVEXT*2^(8-BLKSHFT). + JP Z,GETBLK3 + OR A + RLA + JP GETBLK2 +GETBLK3:ADD A,B + RET +; +; Routine to extract the (BC) block byte from the fcb pointed +; to by (PARAMS). If this is a big-disk, then these are 16 bit +; block numbers, else they are 8 bit numbers. +; Number is returned in (HL). +; +EXTBLK: LD HL,(PARAMS) ;get fcb address. + LD DE,16 ;block numbers start 16 bytes into fcb. + ADD HL,DE + ADD HL,BC + LD A,(BIGDISK) ;are we using a big-disk? + OR A + JP Z,EXTBLK1 + LD L,(HL) ;no, extract an 8 bit number from the fcb. + LD H,0 + RET +EXTBLK1:ADD HL,BC ;yes, extract a 16 bit number. + LD E,(HL) + INC HL + LD D,(HL) + EX DE,HL ;return in (HL). + RET +; +; Compute block number. +; +COMBLK: CALL GETBLOCK + LD C,A + LD B,0 + CALL EXTBLK + LD (BLKNMBR),HL + RET +; +; Check for a zero block number (unused). +; +CHKBLK: LD HL,(BLKNMBR) + LD A,L ;is it zero? + OR H + RET +; +; Adjust physical block (BLKNMBR) and convert to logical +; sector (LOGSECT). This is the starting sector of this block. +; The actual sector of interest is then added to this and the +; resulting sector number is stored back in (BLKNMBR). This +; will still have to be adjusted for the track number. +; +LOGICAL:LD A,(BLKSHFT) ;get log2(physical/logical sectors). + LD HL,(BLKNMBR) ;get physical sector desired. +LOGICL1:ADD HL,HL ;compute logical sector number. + DEC A ;note logical sectors are 128 bytes long. + JP NZ,LOGICL1 + LD (LOGSECT),HL ;save logical sector. + LD A,(BLKMASK) ;get block mask. + LD C,A + LD A,(SAVNREC) ;get next sector to access. + AND C ;extract the relative position within physical block. + OR L ;and add it too logical sector. + LD L,A + LD (BLKNMBR),HL ;and store. + RET +; +; Set (HL) to point to extent byte in fcb. +; +SETEXT: LD HL,(PARAMS) + LD DE,12 ;it is the twelth byte. + ADD HL,DE + RET +; +; Set (HL) to point to record count byte in fcb and (DE) to +; next record number byte. +; +SETHLDE:LD HL,(PARAMS) + LD DE,15 ;record count byte (#15). + ADD HL,DE + EX DE,HL + LD HL,17 ;next record number (#32). + ADD HL,DE + RET +; +; Save current file data from fcb. +; +STRDATA:CALL SETHLDE + LD A,(HL) ;get and store record count byte. + LD (SAVNREC),A + EX DE,HL + LD A,(HL) ;get and store next record number byte. + LD (SAVNXT),A + CALL SETEXT ;point to extent byte. + LD A,(EXTMASK) ;get extent mask. + AND (HL) + LD (SAVEXT),A ;and save extent here. + RET +; +; Set the next record to access. If (MODE) is set to 2, then +; the last record byte (SAVNREC) has the correct number to access. +; For sequential access, (MODE) will be equal to 1. +; +SETNREC:CALL SETHLDE + LD A,(MODE) ;get sequential flag (=1). + CP 2 ;a 2 indicates that no adder is needed. + JP NZ,STNREC1 + XOR A ;clear adder (random access?). +STNREC1:LD C,A + LD A,(SAVNREC) ;get last record number. + ADD A,C ;increment record count. + LD (HL),A ;and set fcb's next record byte. + EX DE,HL + LD A,(SAVNXT) ;get next record byte from storage. + LD (HL),A ;and put this into fcb as number of records used. + RET +; +; Shift (HL) right (C) bits. +; +SHIFTR: INC C +SHIFTR1:DEC C + RET Z + LD A,H + OR A + RRA + LD H,A + LD A,L + RRA + LD L,A + JP SHIFTR1 +; +; Compute the check-sum for the directory buffer. Return +; integer sum in (A). +; +CHECKSUM: LD C,128 ;length of buffer. + LD HL,(DIRBUF) ;get its location. + XOR A ;clear summation byte. +CHKSUM1:ADD A,(HL) ;and compute sum ignoring carries. + INC HL + DEC C + JP NZ,CHKSUM1 + RET +; +; Shift (HL) left (C) bits. +; +SHIFTL: INC C +SHIFTL1:DEC C + RET Z + ADD HL,HL ;shift left 1 bit. + JP SHIFTL1 +; +; Routine to set a bit in a 16 bit value contained in (BC). +; The bit set depends on the current drive selection. +; +SETBIT: PUSH BC ;save 16 bit word. + LD A,(ACTIVE) ;get active drive. + LD C,A + LD HL,1 + CALL SHIFTL ;shift bit 0 into place. + POP BC ;now 'or' this with the original word. + LD A,C + OR L + LD L,A ;low byte done, do high byte. + LD A,B + OR H + LD H,A + RET +; +; Extract the write protect status bit for the current drive. +; The result is returned in (A), bit 0. +; +GETWPRT:LD HL,(WRTPRT) ;get status bytes. + LD A,(ACTIVE) ;which drive is current? + LD C,A + CALL SHIFTR ;shift status such that bit 0 is the + LD A,L ;one of interest for this drive. + AND 01H ;and isolate it. + RET +; +; Function to write protect the current disk. +; +WRTPRTD:LD HL,WRTPRT ;point to status word. + LD C,(HL) ;set (BC) equal to the status. + INC HL + LD B,(HL) + CALL SETBIT ;and set this bit according to current drive. + LD (WRTPRT),HL ;then save. + LD HL,(DIRSIZE) ;now save directory size limit. + INC HL ;remember the last one. + EX DE,HL + LD HL,(SCRATCH1) ;and store it here. + LD (HL),E ;put low byte. + INC HL + LD (HL),D ;then high byte. + RET +; +; Check for a read only file. +; +CHKROFL:CALL FCB2HL ;set (HL) to file entry in directory buffer. +CKROF1: LD DE,9 ;look at bit 7 of the ninth byte. + ADD HL,DE + LD A,(HL) + RLA + RET NC ;return if ok. + LD HL,ROFILE ;else, print error message and terminate. + JP JUMPHL +; +; Check the write protect status of the active disk. +; +CHKWPRT:CALL GETWPRT + RET Z ;return if ok. + LD HL,RODISK ;else print message and terminate. + JP JUMPHL +; +; Routine to set (HL) pointing to the proper entry in the +; directory buffer. +; +FCB2HL: LD HL,(DIRBUF) ;get address of buffer. + LD A,(FCBPOS) ;relative position of file. +; +; Routine to add (A) to (HL). +; +ADDA2HL:ADD A,L + LD L,A + RET NC + INC H ;take care of any carry. + RET +; +; Routine to get the 's2' byte from the fcb supplied in +; the initial parameter specification. +; +GETS2: LD HL,(PARAMS) ;get address of fcb. + LD DE,14 ;relative position of 's2'. + ADD HL,DE + LD A,(HL) ;extract this byte. + RET +; +; Clear the 's2' byte in the fcb. +; +CLEARS2:CALL GETS2 ;this sets (HL) pointing to it. + LD (HL),0 ;now clear it. + RET +; +; Set bit 7 in the 's2' byte of the fcb. +; +SETS2B7:CALL GETS2 ;get the byte. + OR 80H ;and set bit 7. + LD (HL),A ;then store. + RET +; +; Compare (FILEPOS) with (SCRATCH1) and set flags based on +; the difference. This checks to see if there are more file +; names in the directory. We are at (FILEPOS) and there are +; (SCRATCH1) of them to check. +; +MOREFLS:LD HL,(FILEPOS) ;we are here. + EX DE,HL + LD HL,(SCRATCH1) ;and don't go past here. + LD A,E ;compute difference but don't keep. + SUB (HL) + INC HL + LD A,D + SBC A,(HL) ;set carry if no more names. + RET +; +; Call this routine to prevent (SCRATCH1) from being greater +; than (FILEPOS). +; +CHKNMBR:CALL MOREFLS ;SCRATCH1 too big? + RET C + INC DE ;yes, reset it to (FILEPOS). + LD (HL),D + DEC HL + LD (HL),E + RET +; +; Compute (HL)=(DE)-(HL) +; +SUBHL: LD A,E ;compute difference. + SUB L + LD L,A ;store low byte. + LD A,D + SBC A,H + LD H,A ;and then high byte. + RET +; +; Set the directory checksum byte. +; +SETDIR: LD C,0FFH +; +; Routine to set or compare the directory checksum byte. If +; (C)=0ffh, then this will set the checksum byte. Else the byte +; will be checked. If the check fails (the disk has been changed), +; then this disk will be write protected. +; +CHECKDIR: LD HL,(CKSUMTBL) + EX DE,HL + LD HL,(ALLOC1) + CALL SUBHL + RET NC ;ok if (CKSUMTBL) > (ALLOC1), so return. + PUSH BC + CALL CHECKSUM ;else compute checksum. + LD HL,(CHKVECT) ;get address of checksum table. + EX DE,HL + LD HL,(CKSUMTBL) + ADD HL,DE ;set (HL) to point to byte for this drive. + POP BC + INC C ;set or check ? + JP Z,CHKDIR1 + CP (HL) ;check them. + RET Z ;return if they are the same. + CALL MOREFLS ;not the same, do we care? + RET NC + CALL WRTPRTD ;yes, mark this as write protected. + RET +CHKDIR1:LD (HL),A ;just set the byte. + RET +; +; Do a write to the directory of the current disk. +; +DIRWRITE: CALL SETDIR ;set checksum byte. + CALL DIRDMA ;set directory dma address. + LD C,1 ;tell the bios to actually write. + CALL DOWRITE ;then do the write. + JP DEFDMA +; +; Read from the directory. +; +DIRREAD:CALL DIRDMA ;set the directory dma address. + CALL DOREAD ;and read it. +; +; Routine to set the dma address to the users choice. +; +DEFDMA: LD HL,USERDMA ;reset the default dma address and return. + JP DIRDMA1 +; +; Routine to set the dma address for directory work. +; +DIRDMA: LD HL,DIRBUF +; +; Set the dma address. On entry, (HL) points to +; word containing the desired dma address. +; +DIRDMA1:LD C,(HL) + INC HL + LD B,(HL) ;setup (BC) and go to the bios to set it. + JP SETDMA +; +; Move the directory buffer into user's dma space. +; +MOVEDIR:LD HL,(DIRBUF) ;buffer is located here, and + EX DE,HL + LD HL,(USERDMA) ; put it here. + LD C,128 ;this is its length. + JP DE2HL ;move it now and return. +; +; Check (FILEPOS) and set the zero flag if it equals 0ffffh. +; +CKFILPOS: LD HL,FILEPOS + LD A,(HL) + INC HL + CP (HL) ;are both bytes the same? + RET NZ + INC A ;yes, but are they each 0ffh? + RET +; +; Set location (FILEPOS) to 0ffffh. +; +STFILPOS: LD HL,0FFFFH + LD (FILEPOS),HL + RET +; +; Move on to the next file position within the current +; directory buffer. If no more exist, set pointer to 0ffffh +; and the calling routine will check for this. Enter with (C) +; equal to 0ffh to cause the checksum byte to be set, else we +; will check this disk and set write protect if checksums are +; not the same (applies only if another directory sector must +; be read). +; +NXENTRY:LD HL,(DIRSIZE) ;get directory entry size limit. + EX DE,HL + LD HL,(FILEPOS) ;get current count. + INC HL ;go on to the next one. + LD (FILEPOS),HL + CALL SUBHL ;(HL)=(DIRSIZE)-(FILEPOS) + JP NC,NXENT1 ;is there more room left? + JP STFILPOS ;no. Set this flag and return. +NXENT1: LD A,(FILEPOS) ;get file position within directory. + AND 03H ;only look within this sector (only 4 entries fit). + LD B,5 ;convert to relative position (32 bytes each). +NXENT2: ADD A,A ;note that this is not efficient code. + DEC B ;5 'ADD A's would be better. + JP NZ,NXENT2 + LD (FCBPOS),A ;save it as position of fcb. + OR A + RET NZ ;return if we are within buffer. + PUSH BC + CALL TRKSEC ;we need the next directory sector. + CALL DIRREAD + POP BC + JP CHECKDIR +; +; Routine to to get a bit from the disk space allocation +; map. It is returned in (A), bit position 0. On entry to here, +; set (BC) to the block number on the disk to check. +; On return, (D) will contain the original bit position for +; this block number and (HL) will point to the address for it. +; +CKBITMAP: LD A,C ;determine bit number of interest. + AND 07H ;compute (D)=(E)=(C and 7)+1. + INC A + LD E,A ;save particular bit number. + LD D,A +; +; compute (BC)=(BC)/8. +; + LD A,C + RRCA ;now shift right 3 bits. + RRCA + RRCA + AND 1FH ;and clear bits 7,6,5. + LD C,A + LD A,B + ADD A,A ;now shift (B) into bits 7,6,5. + ADD A,A + ADD A,A + ADD A,A + ADD A,A + OR C ;and add in (C). + LD C,A ;ok, (C) ha been completed. + LD A,B ;is there a better way of doing this? + RRCA + RRCA + RRCA + AND 1FH + LD B,A ;and now (B) is completed. +; +; use this as an offset into the disk space allocation +; table. +; + LD HL,(ALOCVECT) + ADD HL,BC + LD A,(HL) ;now get correct byte. +CKBMAP1:RLCA ;get correct bit into position 0. + DEC E + JP NZ,CKBMAP1 + RET +; +; Set or clear the bit map such that block number (BC) will be marked +; as used. On entry, if (E)=0 then this bit will be cleared, if it equals +; 1 then it will be set (don't use anyother values). +; +STBITMAP: PUSH DE + CALL CKBITMAP ;get the byte of interest. + AND 0FEH ;clear the affected bit. + POP BC + OR C ;and now set it acording to (C). +; +; entry to restore the original bit position and then store +; in table. (A) contains the value, (D) contains the bit +; position (1-8), and (HL) points to the address within the +; space allocation table for this byte. +; +STBMAP1:RRCA ;restore original bit position. + DEC D + JP NZ,STBMAP1 + LD (HL),A ;and stor byte in table. + RET +; +; Set/clear space used bits in allocation map for this file. +; On entry, (C)=1 to set the map and (C)=0 to clear it. +; +SETFILE:CALL FCB2HL ;get address of fcb + LD DE,16 + ADD HL,DE ;get to block number bytes. + PUSH BC + LD C,17 ;check all 17 bytes (max) of table. +SETFL1: POP DE + DEC C ;done all bytes yet? + RET Z + PUSH DE + LD A,(BIGDISK) ;check disk size for 16 bit block numbers. + OR A + JP Z,SETFL2 + PUSH BC ;only 8 bit numbers. set (BC) to this one. + PUSH HL + LD C,(HL) ;get low byte from table, always + LD B,0 ;set high byte to zero. + JP SETFL3 +SETFL2: DEC C ;for 16 bit block numbers, adjust counter. + PUSH BC + LD C,(HL) ;now get both the low and high bytes. + INC HL + LD B,(HL) + PUSH HL +SETFL3: LD A,C ;block used? + OR B + JP Z,SETFL4 + LD HL,(DSKSIZE) ;is this block number within the + LD A,L ;space on the disk? + SUB C + LD A,H + SBC A,B + CALL NC,STBITMAP ;yes, set the proper bit. +SETFL4: POP HL ;point to next block number in fcb. + INC HL + POP BC + JP SETFL1 +; +; Construct the space used allocation bit map for the active +; drive. If a file name starts with '$' and it is under the +; current user number, then (STATUS) is set to minus 1. Otherwise +; it is not set at all. +; +BITMAP: LD HL,(DSKSIZE) ;compute size of allocation table. + LD C,3 + CALL SHIFTR ;(HL)=(HL)/8. + INC HL ;at lease 1 byte. + LD B,H + LD C,L ;set (BC) to the allocation table length. +; +; Initialize the bitmap for this drive. Right now, the first +; two bytes are specified by the disk parameter block. However +; a patch could be entered here if it were necessary to setup +; this table in a special mannor. For example, the bios could +; determine locations of 'bad blocks' and set them as already +; 'used' in the map. +; + LD HL,(ALOCVECT) ;now zero out the table now. +BITMAP1:LD (HL),0 + INC HL + DEC BC + LD A,B + OR C + JP NZ,BITMAP1 + LD HL,(ALLOC0) ;get initial space used by directory. + EX DE,HL + LD HL,(ALOCVECT) ;and put this into map. + LD (HL),E + INC HL + LD (HL),D +; +; End of initialization portion. +; + CALL HOMEDRV ;now home the drive. + LD HL,(SCRATCH1) + LD (HL),3 ;force next directory request to read + INC HL ;in a sector. + LD (HL),0 + CALL STFILPOS ;clear initial file position also. +BITMAP2:LD C,0FFH ;read next file name in directory + CALL NXENTRY ;and set checksum byte. + CALL CKFILPOS ;is there another file? + RET Z + CALL FCB2HL ;yes, get its address. + LD A,0E5H + CP (HL) ;empty file entry? + JP Z,BITMAP2 + LD A,(USERNO) ;no, correct user number? + CP (HL) + JP NZ,BITMAP3 + INC HL + LD A,(HL) ;yes, does name start with a '$'? + SUB '$' + JP NZ,BITMAP3 + DEC A ;yes, set atatus to minus one. + LD (STATUS),A +BITMAP3:LD C,1 ;now set this file's space as used in bit map. + CALL SETFILE + CALL CHKNMBR ;keep (SCRATCH1) in bounds. + JP BITMAP2 +; +; Set the status (STATUS) and return. +; +STSTATUS: LD A,(FNDSTAT) + JP SETSTAT +; +; Check extents in (A) and (C). Set the zero flag if they +; are the same. The number of 16k chunks of disk space that +; the directory extent covers is expressad is (EXTMASK+1). +; No registers are modified. +; +SAMEXT: PUSH BC + PUSH AF + LD A,(EXTMASK) ;get extent mask and use it to + CPL ;to compare both extent numbers. + LD B,A ;save resulting mask here. + LD A,C ;mask first extent and save in (C). + AND B + LD C,A + POP AF ;now mask second extent and compare + AND B ;with the first one. + SUB C + AND 1FH ;(* only check buts 0-4 *) + POP BC ;the zero flag is set if they are the same. + RET ;restore (BC) and return. +; +; Search for the first occurence of a file name. On entry, +; register (C) should contain the number of bytes of the fcb +; that must match. +; +FINDFST:LD A,0FFH + LD (FNDSTAT),A + LD HL,COUNTER ;save character count. + LD (HL),C + LD HL,(PARAMS) ;get filename to match. + LD (SAVEFCB),HL ;and save. + CALL STFILPOS ;clear initial file position (set to 0ffffh). + CALL HOMEDRV ;home the drive. +; +; Entry to locate the next occurence of a filename within the +; directory. The disk is not expected to have been changed. If +; it was, then it will be write protected. +; +FINDNXT:LD C,0 ;write protect the disk if changed. + CALL NXENTRY ;get next filename entry in directory. + CALL CKFILPOS ;is file position = 0ffffh? + JP Z,FNDNXT6 ;yes, exit now then. + LD HL,(SAVEFCB) ;set (DE) pointing to filename to match. + EX DE,HL + LD A,(DE) + CP 0E5H ;empty directory entry? + JP Z,FNDNXT1 ;(* are we trying to reserect erased entries? *) + PUSH DE + CALL MOREFLS ;more files in directory? + POP DE + JP NC,FNDNXT6 ;no more. Exit now. +FNDNXT1:CALL FCB2HL ;get address of this fcb in directory. + LD A,(COUNTER) ;get number of bytes (characters) to check. + LD C,A + LD B,0 ;initialize byte position counter. +FNDNXT2:LD A,C ;are we done with the compare? + OR A + JP Z,FNDNXT5 + LD A,(DE) ;no, check next byte. + CP '?' ;don't care about this character? + JP Z,FNDNXT4 + LD A,B ;get bytes position in fcb. + CP 13 ;don't care about the thirteenth byte either. + JP Z,FNDNXT4 + CP 12 ;extent byte? + LD A,(DE) + JP Z,FNDNXT3 + SUB (HL) ;otherwise compare characters. + AND 7FH + JP NZ,FINDNXT ;not the same, check next entry. + JP FNDNXT4 ;so far so good, keep checking. +FNDNXT3:PUSH BC ;check the extent byte here. + LD C,(HL) + CALL SAMEXT + POP BC + JP NZ,FINDNXT ;not the same, look some more. +; +; So far the names compare. Bump pointers to the next byte +; and continue until all (C) characters have been checked. +; +FNDNXT4:INC DE ;bump pointers. + INC HL + INC B + DEC C ;adjust character counter. + JP FNDNXT2 +FNDNXT5:LD A,(FILEPOS) ;return the position of this entry. + AND 03H + LD (STATUS),A + LD HL,FNDSTAT + LD A,(HL) + RLA + RET NC + XOR A + LD (HL),A + RET +; +; Filename was not found. Set appropriate status. +; +FNDNXT6:CALL STFILPOS ;set (FILEPOS) to 0ffffh. + LD A,0FFH ;say not located. + JP SETSTAT +; +; Erase files from the directory. Only the first byte of the +; fcb will be affected. It is set to (E5). +; +ERAFILE:CALL CHKWPRT ;is disk write protected? + LD C,12 ;only compare file names. + CALL FINDFST ;get first file name. +ERAFIL1:CALL CKFILPOS ;any found? + RET Z ;nope, we must be done. + CALL CHKROFL ;is file read only? + CALL FCB2HL ;nope, get address of fcb and + LD (HL),0E5H ;set first byte to 'empty'. + LD C,0 ;clear the space from the bit map. + CALL SETFILE + CALL DIRWRITE ;now write the directory sector back out. + CALL FINDNXT ;find the next file name. + JP ERAFIL1 ;and repeat process. +; +; Look through the space allocation map (bit map) for the +; next available block. Start searching at block number (BC-1). +; The search procedure is to look for an empty block that is +; before the starting block. If not empty, look at a later +; block number. In this way, we return the closest empty block +; on either side of the 'target' block number. This will speed +; access on random devices. For serial devices, this should be +; changed to look in the forward direction first and then start +; at the front and search some more. +; +; On return, (DE)= block number that is empty and (HL) =0 +; if no empry block was found. +; +FNDSPACE: LD D,B ;set (DE) as the block that is checked. + LD E,C +; +; Look before target block. Registers (BC) are used as the lower +; pointer and (DE) as the upper pointer. +; +FNDSPA1:LD A,C ;is block 0 specified? + OR B + JP Z,FNDSPA2 + DEC BC ;nope, check previous block. + PUSH DE + PUSH BC + CALL CKBITMAP + RRA ;is this block empty? + JP NC,FNDSPA3 ;yes. use this. +; +; Note that the above logic gets the first block that it finds +; that is empty. Thus a file could be written 'backward' making +; it very slow to access. This could be changed to look for the +; first empty block and then continue until the start of this +; empty space is located and then used that starting block. +; This should help speed up access to some files especially on +; a well used disk with lots of fairly small 'holes'. +; + POP BC ;nope, check some more. + POP DE +; +; Now look after target block. +; +FNDSPA2:LD HL,(DSKSIZE) ;is block (DE) within disk limits? + LD A,E + SUB L + LD A,D + SBC A,H + JP NC,FNDSPA4 + INC DE ;yes, move on to next one. + PUSH BC + PUSH DE + LD B,D + LD C,E + CALL CKBITMAP ;check it. + RRA ;empty? + JP NC,FNDSPA3 + POP DE ;nope, continue searching. + POP BC + JP FNDSPA1 +; +; Empty block found. Set it as used and return with (HL) +; pointing to it (true?). +; +FNDSPA3:RLA ;reset byte. + INC A ;and set bit 0. + CALL STBMAP1 ;update bit map. + POP HL ;set return registers. + POP DE + RET +; +; Free block was not found. If (BC) is not zero, then we have +; not checked all of the disk space. +; +FNDSPA4:LD A,C + OR B + JP NZ,FNDSPA1 + LD HL,0 ;set 'not found' status. + RET +; +; Move a complete fcb entry into the directory and write it. +; +FCBSET: LD C,0 + LD E,32 ;length of each entry. +; +; Move (E) bytes from the fcb pointed to by (PARAMS) into +; fcb in directory starting at relative byte (C). This updated +; directory buffer is then written to the disk. +; +UPDATE: PUSH DE + LD B,0 ;set (BC) to relative byte position. + LD HL,(PARAMS) ;get address of fcb. + ADD HL,BC ;compute starting byte. + EX DE,HL + CALL FCB2HL ;get address of fcb to update in directory. + POP BC ;set (C) to number of bytes to change. + CALL DE2HL +UPDATE1:CALL TRKSEC ;determine the track and sector affected. + JP DIRWRITE ;then write this sector out. +; +; Routine to change the name of all files on the disk with a +; specified name. The fcb contains the current name as the +; first 12 characters and the new name 16 bytes into the fcb. +; +CHGNAMES: CALL CHKWPRT ;check for a write protected disk. + LD C,12 ;match first 12 bytes of fcb only. + CALL FINDFST ;get first name. + LD HL,(PARAMS) ;get address of fcb. + LD A,(HL) ;get user number. + LD DE,16 ;move over to desired name. + ADD HL,DE + LD (HL),A ;keep same user number. +CHGNAM1:CALL CKFILPOS ;any matching file found? + RET Z ;no, we must be done. + CALL CHKROFL ;check for read only file. + LD C,16 ;start 16 bytes into fcb. + LD E,12 ;and update the first 12 bytes of directory. + CALL UPDATE + CALL FINDNXT ;get te next file name. + JP CHGNAM1 ;and continue. +; +; Update a files attributes. The procedure is to search for +; every file with the same name as shown in fcb (ignoring bit 7) +; and then to update it (which includes bit 7). No other changes +; are made. +; +SAVEATTR: LD C,12 ;match first 12 bytes. + CALL FINDFST ;look for first filename. +SAVATR1:CALL CKFILPOS ;was one found? + RET Z ;nope, we must be done. + LD C,0 ;yes, update the first 12 bytes now. + LD E,12 + CALL UPDATE ;update filename and write directory. + CALL FINDNXT ;and get the next file. + JP SAVATR1 ;then continue until done. +; +; Open a file (name specified in fcb). +; +OPENIT: LD C,15 ;compare the first 15 bytes. + CALL FINDFST ;get the first one in directory. + CALL CKFILPOS ;any at all? + RET Z +OPENIT1:CALL SETEXT ;point to extent byte within users fcb. + LD A,(HL) ;and get it. + PUSH AF ;save it and address. + PUSH HL + CALL FCB2HL ;point to fcb in directory. + EX DE,HL + LD HL,(PARAMS) ;this is the users copy. + LD C,32 ;move it into users space. + PUSH DE + CALL DE2HL + CALL SETS2B7 ;set bit 7 in 's2' byte (unmodified). + POP DE ;now get the extent byte from this fcb. + LD HL,12 + ADD HL,DE + LD C,(HL) ;into (C). + LD HL,15 ;now get the record count byte into (B). + ADD HL,DE + LD B,(HL) + POP HL ;keep the same extent as the user had originally. + POP AF + LD (HL),A + LD A,C ;is it the same as in the directory fcb? + CP (HL) + LD A,B ;if yes, then use the same record count. + JP Z,OPENIT2 + LD A,0 ;if the user specified an extent greater than + JP C,OPENIT2 ;the one in the directory, then set record count to 0. + LD A,128 ;otherwise set to maximum. +OPENIT2:LD HL,(PARAMS) ;set record count in users fcb to (A). + LD DE,15 + ADD HL,DE ;compute relative position. + LD (HL),A ;and set the record count. + RET +; +; Move two bytes from (DE) to (HL) if (and only if) (HL) +; point to a zero value (16 bit). +; Return with zero flag set it (DE) was moved. Registers (DE) +; and (HL) are not changed. However (A) is. +; +MOVEWORD: LD A,(HL) ;check for a zero word. + INC HL + OR (HL) ;both bytes zero? + DEC HL + RET NZ ;nope, just return. + LD A,(DE) ;yes, move two bytes from (DE) into + LD (HL),A ;this zero space. + INC DE + INC HL + LD A,(DE) + LD (HL),A + DEC DE ;don't disturb these registers. + DEC HL + RET +; +; Get here to close a file specified by (fcb). +; +CLOSEIT:XOR A ;clear status and file position bytes. + LD (STATUS),A + LD (FILEPOS),A + LD (FILEPOS+1),A + CALL GETWPRT ;get write protect bit for this drive. + RET NZ ;just return if it is set. + CALL GETS2 ;else get the 's2' byte. + AND 80H ;and look at bit 7 (file unmodified?). + RET NZ ;just return if set. + LD C,15 ;else look up this file in directory. + CALL FINDFST + CALL CKFILPOS ;was it found? + RET Z ;just return if not. + LD BC,16 ;set (HL) pointing to records used section. + CALL FCB2HL + ADD HL,BC + EX DE,HL + LD HL,(PARAMS) ;do the same for users specified fcb. + ADD HL,BC + LD C,16 ;this many bytes are present in this extent. +CLOSEIT1: LD A,(BIGDISK) ;8 or 16 bit record numbers? + OR A + JP Z,CLOSEIT4 + LD A,(HL) ;just 8 bit. Get one from users fcb. + OR A + LD A,(DE) ;now get one from directory fcb. + JP NZ,CLOSEIT2 + LD (HL),A ;users byte was zero. Update from directory. +CLOSEIT2: OR A + JP NZ,CLOSEIT3 + LD A,(HL) ;directories byte was zero, update from users fcb. + LD (DE),A +CLOSEIT3: CP (HL) ;if neither one of these bytes were zero, + JP NZ,CLOSEIT7 ;then close error if they are not the same. + JP CLOSEIT5 ;ok so far, get to next byte in fcbs. +CLOSEIT4: CALL MOVEWORD ;update users fcb if it is zero. + EX DE,HL + CALL MOVEWORD ;update directories fcb if it is zero. + EX DE,HL + LD A,(DE) ;if these two values are no different, + CP (HL) ;then a close error occured. + JP NZ,CLOSEIT7 + INC DE ;check second byte. + INC HL + LD A,(DE) + CP (HL) + JP NZ,CLOSEIT7 + DEC C ;remember 16 bit values. +CLOSEIT5: INC DE ;bump to next item in table. + INC HL + DEC C ;there are 16 entries only. + JP NZ,CLOSEIT1 ;continue if more to do. + LD BC,0FFECH ;backup 20 places (extent byte). + ADD HL,BC + EX DE,HL + ADD HL,BC + LD A,(DE) + CP (HL) ;directory's extent already greater than the + JP C,CLOSEIT6 ;users extent? + LD (HL),A ;no, update directory extent. + LD BC,3 ;and update the record count byte in + ADD HL,BC ;directories fcb. + EX DE,HL + ADD HL,BC + LD A,(HL) ;get from user. + LD (DE),A ;and put in directory. +CLOSEIT6: LD A,0FFH ;set 'was open and is now closed' byte. + LD (CLOSEFLG),A + JP UPDATE1 ;update the directory now. +CLOSEIT7: LD HL,STATUS ;set return status and then return. + DEC (HL) + RET +; +; Routine to get the next empty space in the directory. It +; will then be cleared for use. +; +GETEMPTY: CALL CHKWPRT ;make sure disk is not write protected. + LD HL,(PARAMS) ;save current parameters (fcb). + PUSH HL + LD HL,EMPTYFCB ;use special one for empty space. + LD (PARAMS),HL + LD C,1 ;search for first empty spot in directory. + CALL FINDFST ;(* only check first byte *) + CALL CKFILPOS ;none? + POP HL + LD (PARAMS),HL ;restore original fcb address. + RET Z ;return if no more space. + EX DE,HL + LD HL,15 ;point to number of records for this file. + ADD HL,DE + LD C,17 ;and clear all of this space. + XOR A +GETMT1: LD (HL),A + INC HL + DEC C + JP NZ,GETMT1 + LD HL,13 ;clear the 's1' byte also. + ADD HL,DE + LD (HL),A + CALL CHKNMBR ;keep (SCRATCH1) within bounds. + CALL FCBSET ;write out this fcb entry to directory. + JP SETS2B7 ;set 's2' byte bit 7 (unmodified at present). +; +; Routine to close the current extent and open the next one +; for reading. +; +GETNEXT:XOR A + LD (CLOSEFLG),A ;clear close flag. + CALL CLOSEIT ;close this extent. + CALL CKFILPOS + RET Z ;not there??? + LD HL,(PARAMS) ;get extent byte. + LD BC,12 + ADD HL,BC + LD A,(HL) ;and increment it. + INC A + AND 1FH ;keep within range 0-31. + LD (HL),A + JP Z,GTNEXT1 ;overflow? + LD B,A ;mask extent byte. + LD A,(EXTMASK) + AND B + LD HL,CLOSEFLG ;check close flag (0ffh is ok). + AND (HL) + JP Z,GTNEXT2 ;if zero, we must read in next extent. + JP GTNEXT3 ;else, it is already in memory. +GTNEXT1:LD BC,2 ;Point to the 's2' byte. + ADD HL,BC + INC (HL) ;and bump it. + LD A,(HL) ;too many extents? + AND 0FH + JP Z,GTNEXT5 ;yes, set error code. +; +; Get here to open the next extent. +; +GTNEXT2:LD C,15 ;set to check first 15 bytes of fcb. + CALL FINDFST ;find the first one. + CALL CKFILPOS ;none available? + JP NZ,GTNEXT3 + LD A,(RDWRTFLG) ;no extent present. Can we open an empty one? + INC A ;0ffh means reading (so not possible). + JP Z,GTNEXT5 ;or an error. + CALL GETEMPTY ;we are writing, get an empty entry. + CALL CKFILPOS ;none? + JP Z,GTNEXT5 ;error if true. + JP GTNEXT4 ;else we are almost done. +GTNEXT3:CALL OPENIT1 ;open this extent. +GTNEXT4:CALL STRDATA ;move in updated data (rec #, extent #, etc.) + XOR A ;clear status and return. + JP SETSTAT +; +; Error in extending the file. Too many extents were needed +; or not enough space on the disk. +; +GTNEXT5:CALL IOERR1 ;set error code, clear bit 7 of 's2' + JP SETS2B7 ;so this is not written on a close. +; +; Read a sequential file. +; +RDSEQ: LD A,1 ;set sequential access mode. + LD (MODE),A +RDSEQ1: LD A,0FFH ;don't allow reading unwritten space. + LD (RDWRTFLG),A + CALL STRDATA ;put rec# and ext# into fcb. + LD A,(SAVNREC) ;get next record to read. + LD HL,SAVNXT ;get number of records in extent. + CP (HL) ;within this extent? + JP C,RDSEQ2 + CP 128 ;no. Is this extent fully used? + JP NZ,RDSEQ3 ;no. End-of-file. + CALL GETNEXT ;yes, open the next one. + XOR A ;reset next record to read. + LD (SAVNREC),A + LD A,(STATUS) ;check on open, successful? + OR A + JP NZ,RDSEQ3 ;no, error. +RDSEQ2: CALL COMBLK ;ok. compute block number to read. + CALL CHKBLK ;check it. Within bounds? + JP Z,RDSEQ3 ;no, error. + CALL LOGICAL ;convert (BLKNMBR) to logical sector (128 byte). + CALL TRKSEC1 ;set the track and sector for this block #. + CALL DOREAD ;and read it. + JP SETNREC ;and set the next record to be accessed. +; +; Read error occured. Set status and return. +; +RDSEQ3: JP IOERR1 +; +; Write the next sequential record. +; +WTSEQ: LD A,1 ;set sequential access mode. + LD (MODE),A +WTSEQ1: LD A,0 ;allow an addition empty extent to be opened. + LD (RDWRTFLG),A + CALL CHKWPRT ;check write protect status. + LD HL,(PARAMS) + CALL CKROF1 ;check for read only file, (HL) already set to fcb. + CALL STRDATA ;put updated data into fcb. + LD A,(SAVNREC) ;get record number to write. + CP 128 ;within range? + JP NC,IOERR1 ;no, error(?). + CALL COMBLK ;compute block number. + CALL CHKBLK ;check number. + LD C,0 ;is there one to write to? + JP NZ,WTSEQ6 ;yes, go do it. + CALL GETBLOCK ;get next block number within fcb to use. + LD (RELBLOCK),A ;and save. + LD BC,0 ;start looking for space from the start + OR A ;if none allocated as yet. + JP Z,WTSEQ2 + LD C,A ;extract previous block number from fcb + DEC BC ;so we can be closest to it. + CALL EXTBLK + LD B,H + LD C,L +WTSEQ2: CALL FNDSPACE ;find the next empty block nearest number (BC). + LD A,L ;check for a zero number. + OR H + JP NZ,WTSEQ3 + LD A,2 ;no more space? + JP SETSTAT +WTSEQ3: LD (BLKNMBR),HL ;save block number to access. + EX DE,HL ;put block number into (DE). + LD HL,(PARAMS) ;now we must update the fcb for this + LD BC,16 ;newly allocated block. + ADD HL,BC + LD A,(BIGDISK) ;8 or 16 bit block numbers? + OR A + LD A,(RELBLOCK) ;(* update this entry *) + JP Z,WTSEQ4 ;zero means 16 bit ones. + CALL ADDA2HL ;(HL)=(HL)+(A) + LD (HL),E ;store new block number. + JP WTSEQ5 +WTSEQ4: LD C,A ;compute spot in this 16 bit table. + LD B,0 + ADD HL,BC + ADD HL,BC + LD (HL),E ;stuff block number (DE) there. + INC HL + LD (HL),D +WTSEQ5: LD C,2 ;set (C) to indicate writing to un-used disk space. +WTSEQ6: LD A,(STATUS) ;are we ok so far? + OR A + RET NZ + PUSH BC ;yes, save write flag for bios (register C). + CALL LOGICAL ;convert (BLKNMBR) over to loical sectors. + LD A,(MODE) ;get access mode flag (1=sequential, + DEC A ;0=random, 2=special?). + DEC A + JP NZ,WTSEQ9 +; +; Special random i/o from function #40. Maybe for M/PM, but the +; current block, if it has not been written to, will be zeroed +; out and then written (reason?). +; + POP BC + PUSH BC + LD A,C ;get write status flag (2=writing unused space). + DEC A + DEC A + JP NZ,WTSEQ9 + PUSH HL + LD HL,(DIRBUF) ;zero out the directory buffer. + LD D,A ;note that (A) is zero here. +WTSEQ7: LD (HL),A + INC HL + INC D ;do 128 bytes. + JP P,WTSEQ7 + CALL DIRDMA ;tell the bios the dma address for directory access. + LD HL,(LOGSECT) ;get sector that starts current block. + LD C,2 ;set 'writing to unused space' flag. +WTSEQ8: LD (BLKNMBR),HL ;save sector to write. + PUSH BC + CALL TRKSEC1 ;determine its track and sector numbers. + POP BC + CALL DOWRITE ;now write out 128 bytes of zeros. + LD HL,(BLKNMBR) ;get sector number. + LD C,0 ;set normal write flag. + LD A,(BLKMASK) ;determine if we have written the entire + LD B,A ;physical block. + AND L + CP B + INC HL ;prepare for the next one. + JP NZ,WTSEQ8 ;continue until (BLKMASK+1) sectors written. + POP HL ;reset next sector number. + LD (BLKNMBR),HL + CALL DEFDMA ;and reset dma address. +; +; Normal disk write. Set the desired track and sector then +; do the actual write. +; +WTSEQ9: CALL TRKSEC1 ;determine track and sector for this write. + POP BC ;get write status flag. + PUSH BC + CALL DOWRITE ;and write this out. + POP BC + LD A,(SAVNREC) ;get number of records in file. + LD HL,SAVNXT ;get last record written. + CP (HL) + JP C,WTSEQ10 + LD (HL),A ;we have to update record count. + INC (HL) + LD C,2 +; +;* This area has been patched to correct disk update problem +;* when using blocking and de-blocking in the BIOS. +; +WTSEQ10:NOP ;was 'dcr c' + NOP ;was 'dcr c' + LD HL,0 ;was 'jnz wtseq99' +; +; * End of patch. +; + PUSH AF + CALL GETS2 ;set 'extent written to' flag. + AND 7FH ;(* clear bit 7 *) + LD (HL),A + POP AF ;get record count for this extent. +WTSEQ99:CP 127 ;is it full? + JP NZ,WTSEQ12 + LD A,(MODE) ;yes, are we in sequential mode? + CP 1 + JP NZ,WTSEQ12 + CALL SETNREC ;yes, set next record number. + CALL GETNEXT ;and get next empty space in directory. + LD HL,STATUS ;ok? + LD A,(HL) + OR A + JP NZ,WTSEQ11 + DEC A ;yes, set record count to -1. + LD (SAVNREC),A +WTSEQ11:LD (HL),0 ;clear status. +WTSEQ12:JP SETNREC ;set next record to access. +; +; For random i/o, set the fcb for the desired record number +; based on the 'r0,r1,r2' bytes. These bytes in the fcb are +; used as follows: +; +; fcb+35 fcb+34 fcb+33 +; | 'r-2' | 'r-1' | 'r-0' | +; |7 0 | 7 0 | 7 0| +; |0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0| +; | overflow | | extra | extent | record # | +; | ______________| |_extent|__number___|_____________| +; also 's2' +; +; On entry, register (C) contains 0ffh if this is a read +; and thus we can not access unwritten disk space. Otherwise, +; another extent will be opened (for writing) if required. +; +POSITION: XOR A ;set random i/o flag. + LD (MODE),A +; +; Special entry (function #40). M/PM ? +; +POSITN1:PUSH BC ;save read/write flag. + LD HL,(PARAMS) ;get address of fcb. + EX DE,HL + LD HL,33 ;now get byte 'r0'. + ADD HL,DE + LD A,(HL) + AND 7FH ;keep bits 0-6 for the record number to access. + PUSH AF + LD A,(HL) ;now get bit 7 of 'r0' and bits 0-3 of 'r1'. + RLA + INC HL + LD A,(HL) + RLA + AND 1FH ;and save this in bits 0-4 of (C). + LD C,A ;this is the extent byte. + LD A,(HL) ;now get the extra extent byte. + RRA + RRA + RRA + RRA + AND 0FH + LD B,A ;and save it in (B). + POP AF ;get record number back to (A). + INC HL ;check overflow byte 'r2'. + LD L,(HL) + INC L + DEC L + LD L,6 ;prepare for error. + JP NZ,POSITN5 ;out of disk space error. + LD HL,32 ;store record number into fcb. + ADD HL,DE + LD (HL),A + LD HL,12 ;and now check the extent byte. + ADD HL,DE + LD A,C + SUB (HL) ;same extent as before? + JP NZ,POSITN2 + LD HL,14 ;yes, check extra extent byte 's2' also. + ADD HL,DE + LD A,B + SUB (HL) + AND 7FH + JP Z,POSITN3 ;same, we are almost done then. +; +; Get here when another extent is required. +; +POSITN2:PUSH BC + PUSH DE + CALL CLOSEIT ;close current extent. + POP DE + POP BC + LD L,3 ;prepare for error. + LD A,(STATUS) + INC A + JP Z,POSITN4 ;close error. + LD HL,12 ;put desired extent into fcb now. + ADD HL,DE + LD (HL),C + LD HL,14 ;and store extra extent byte 's2'. + ADD HL,DE + LD (HL),B + CALL OPENIT ;try and get this extent. + LD A,(STATUS) ;was it there? + INC A + JP NZ,POSITN3 + POP BC ;no. can we create a new one (writing?). + PUSH BC + LD L,4 ;prepare for error. + INC C + JP Z,POSITN4 ;nope, reading unwritten space error. + CALL GETEMPTY ;yes we can, try to find space. + LD L,5 ;prepare for error. + LD A,(STATUS) + INC A + JP Z,POSITN4 ;out of space? +; +; Normal return location. Clear error code and return. +; +POSITN3:POP BC ;restore stack. + XOR A ;and clear error code byte. + JP SETSTAT +; +; Error. Set the 's2' byte to indicate this (why?). +; +POSITN4:PUSH HL + CALL GETS2 + LD (HL),0C0H + POP HL +; +; Return with error code (presently in L). +; +POSITN5:POP BC + LD A,L ;get error code. + LD (STATUS),A + JP SETS2B7 +; +; Read a random record. +; +READRAN:LD C,0FFH ;set 'read' status. + CALL POSITION ;position the file to proper record. + CALL Z,RDSEQ1 ;and read it as usual (if no errors). + RET +; +; Write to a random record. +; +WRITERAN: LD C,0 ;set 'writing' flag. + CALL POSITION ;position the file to proper record. + CALL Z,WTSEQ1 ;and write as usual (if no errors). + RET +; +; Compute the random record number. Enter with (HL) pointing +; to a fcb an (DE) contains a relative location of a record +; number. On exit, (C) contains the 'r0' byte, (B) the 'r1' +; byte, and (A) the 'r2' byte. +; +; On return, the zero flag is set if the record is within +; bounds. Otherwise, an overflow occured. +; +COMPRAND: EX DE,HL ;save fcb pointer in (DE). + ADD HL,DE ;compute relative position of record #. + LD C,(HL) ;get record number into (BC). + LD B,0 + LD HL,12 ;now get extent. + ADD HL,DE + LD A,(HL) ;compute (BC)=(record #)+(extent)*128. + RRCA ;move lower bit into bit 7. + AND 80H ;and ignore all other bits. + ADD A,C ;add to our record number. + LD C,A + LD A,0 ;take care of any carry. + ADC A,B + LD B,A + LD A,(HL) ;now get the upper bits of extent into + RRCA ;bit positions 0-3. + AND 0FH ;and ignore all others. + ADD A,B ;add this in to 'r1' byte. + LD B,A + LD HL,14 ;get the 's2' byte (extra extent). + ADD HL,DE + LD A,(HL) + ADD A,A ;and shift it left 4 bits (bits 4-7). + ADD A,A + ADD A,A + ADD A,A + PUSH AF ;save carry flag (bit 0 of flag byte). + ADD A,B ;now add extra extent into 'r1'. + LD B,A + PUSH AF ;and save carry (overflow byte 'r2'). + POP HL ;bit 0 of (L) is the overflow indicator. + LD A,L + POP HL ;and same for first carry flag. + OR L ;either one of these set? + AND 01H ;only check the carry flags. + RET +; +; Routine to setup the fcb (bytes 'r0', 'r1', 'r2') to +; reflect the last record used for a random (or other) file. +; This reads the directory and looks at all extents computing +; the largerst record number for each and keeping the maximum +; value only. Then 'r0', 'r1', and 'r2' will reflect this +; maximum record number. This is used to compute the space used +; by a random file. +; +RANSIZE:LD C,12 ;look thru directory for first entry with + CALL FINDFST ;this name. + LD HL,(PARAMS) ;zero out the 'r0, r1, r2' bytes. + LD DE,33 + ADD HL,DE + PUSH HL + LD (HL),D ;note that (D)=0. + INC HL + LD (HL),D + INC HL + LD (HL),D +RANSIZ1:CALL CKFILPOS ;is there an extent to process? + JP Z,RANSIZ3 ;no, we are done. + CALL FCB2HL ;set (HL) pointing to proper fcb in dir. + LD DE,15 ;point to last record in extent. + CALL COMPRAND ;and compute random parameters. + POP HL + PUSH HL ;now check these values against those + LD E,A ;already in fcb. + LD A,C ;the carry flag will be set if those + SUB (HL) ;in the fcb represent a larger size than + INC HL ;this extent does. + LD A,B + SBC A,(HL) + INC HL + LD A,E + SBC A,(HL) + JP C,RANSIZ2 + LD (HL),E ;we found a larger (in size) extent. + DEC HL ;stuff these values into fcb. + LD (HL),B + DEC HL + LD (HL),C +RANSIZ2:CALL FINDNXT ;now get the next extent. + JP RANSIZ1 ;continue til all done. +RANSIZ3:POP HL ;we are done, restore the stack and + RET ;return. +; +; Function to return the random record position of a given +; file which has been read in sequential mode up to now. +; +SETRAN: LD HL,(PARAMS) ;point to fcb. + LD DE,32 ;and to last used record. + CALL COMPRAND ;compute random position. + LD HL,33 ;now stuff these values into fcb. + ADD HL,DE + LD (HL),C ;move 'r0'. + INC HL + LD (HL),B ;and 'r1'. + INC HL + LD (HL),A ;and lastly 'r2'. + RET +; +; This routine select the drive specified in (ACTIVE) and +; update the login vector and bitmap table if this drive was +; not already active. +; +LOGINDRV: LD HL,(LOGIN) ;get the login vector. + LD A,(ACTIVE) ;get the default drive. + LD C,A + CALL SHIFTR ;position active bit for this drive + PUSH HL ;into bit 0. + EX DE,HL + CALL SELECT ;select this drive. + POP HL + CALL Z,SLCTERR ;valid drive? + LD A,L ;is this a newly activated drive? + RRA + RET C + LD HL,(LOGIN) ;yes, update the login vector. + LD C,L + LD B,H + CALL SETBIT + LD (LOGIN),HL ;and save. + JP BITMAP ;now update the bitmap. +; +; Function to set the active disk number. +; +SETDSK: LD A,(EPARAM) ;get parameter passed and see if this + LD HL,ACTIVE ;represents a change in drives. + CP (HL) + RET Z + LD (HL),A ;yes it does, log it in. + JP LOGINDRV +; +; This is the 'auto disk select' routine. The firsst byte +; of the fcb is examined for a drive specification. If non +; zero then the drive will be selected and loged in. +; +AUTOSEL:LD A,0FFH ;say 'auto-select activated'. + LD (AUTO),A + LD HL,(PARAMS) ;get drive specified. + LD A,(HL) + AND 1FH ;look at lower 5 bits. + DEC A ;adjust for (1=A, 2=B) etc. + LD (EPARAM),A ;and save for the select routine. + CP 1EH ;check for 'no change' condition. + JP NC,AUTOSL1 ;yes, don't change. + LD A,(ACTIVE) ;we must change, save currently active + LD (OLDDRV),A ;drive. + LD A,(HL) ;and save first byte of fcb also. + LD (AUTOFLAG),A ;this must be non-zero. + AND 0E0H ;whats this for (bits 6,7 are used for + LD (HL),A ;something)? + CALL SETDSK ;select and log in this drive. +AUTOSL1:LD A,(USERNO) ;move user number into fcb. + LD HL,(PARAMS) ;(* upper half of first byte *) + OR (HL) + LD (HL),A + RET ;and return (all done). +; +; Function to return the current cp/m version number. +; +GETVER: LD A,022H ;version 2.2 + JP SETSTAT +; +; Function to reset the disk system. +; +RSTDSK: LD HL,0 ;clear write protect status and log + LD (WRTPRT),HL ;in vector. + LD (LOGIN),HL + XOR A ;select drive 'A'. + LD (ACTIVE),A + LD HL,TBUFF ;setup default dma address. + LD (USERDMA),HL + CALL DEFDMA + JP LOGINDRV ;now log in drive 'A'. +; +; Function to open a specified file. +; +OPENFIL:CALL CLEARS2 ;clear 's2' byte. + CALL AUTOSEL ;select proper disk. + JP OPENIT ;and open the file. +; +; Function to close a specified file. +; +CLOSEFIL: CALL AUTOSEL ;select proper disk. + JP CLOSEIT ;and close the file. +; +; Function to return the first occurence of a specified file +; name. If the first byte of the fcb is '?' then the name will +; not be checked (get the first entry no matter what). +; +GETFST: LD C,0 ;prepare for special search. + EX DE,HL + LD A,(HL) ;is first byte a '?'? + CP '?' + JP Z,GETFST1 ;yes, just get very first entry (zero length match). + CALL SETEXT ;get the extension byte from fcb. + LD A,(HL) ;is it '?'? if yes, then we want + CP '?' ;an entry with a specific 's2' byte. + CALL NZ,CLEARS2 ;otherwise, look for a zero 's2' byte. + CALL AUTOSEL ;select proper drive. + LD C,15 ;compare bytes 0-14 in fcb (12&13 excluded). +GETFST1:CALL FINDFST ;find an entry and then move it into + JP MOVEDIR ;the users dma space. +; +; Function to return the next occurence of a file name. +; +GETNXT: LD HL,(SAVEFCB) ;restore pointers. note that no + LD (PARAMS),HL ;other dbos calls are allowed. + CALL AUTOSEL ;no error will be returned, but the + CALL FINDNXT ;results will be wrong. + JP MOVEDIR +; +; Function to delete a file by name. +; +DELFILE:CALL AUTOSEL ;select proper drive. + CALL ERAFILE ;erase the file. + JP STSTATUS ;set status and return. +; +; Function to execute a sequential read of the specified +; record number. +; +READSEQ:CALL AUTOSEL ;select proper drive then read. + JP RDSEQ +; +; Function to write the net sequential record. +; +WRTSEQ: CALL AUTOSEL ;select proper drive then write. + JP WTSEQ +; +; Create a file function. +; +FCREATE:CALL CLEARS2 ;clear the 's2' byte on all creates. + CALL AUTOSEL ;select proper drive and get the next + JP GETEMPTY ;empty directory space. +; +; Function to rename a file. +; +RENFILE:CALL AUTOSEL ;select proper drive and then switch + CALL CHGNAMES ;file names. + JP STSTATUS +; +; Function to return the login vector. +; +GETLOG: LD HL,(LOGIN) + JP GETPRM1 +; +; Function to return the current disk assignment. +; +GETCRNT:LD A,(ACTIVE) + JP SETSTAT +; +; Function to set the dma address. +; +PUTDMA: EX DE,HL + LD (USERDMA),HL ;save in our space and then get to + JP DEFDMA ;the bios with this also. +; +; Function to return the allocation vector. +; +GETALOC:LD HL,(ALOCVECT) + JP GETPRM1 +; +; Function to return the read-only status vector. +; +GETROV: LD HL,(WRTPRT) + JP GETPRM1 +; +; Function to set the file attributes (read-only, system). +; +SETATTR:CALL AUTOSEL ;select proper drive then save attributes. + CALL SAVEATTR + JP STSTATUS +; +; Function to return the address of the disk parameter block +; for the current drive. +; +GETPARM:LD HL,(DISKPB) +GETPRM1:LD (STATUS),HL + RET +; +; Function to get or set the user number. If (E) was (FF) +; then this is a request to return the current user number. +; Else set the user number from (E). +; +GETUSER:LD A,(EPARAM) ;get parameter. + CP 0FFH ;get user number? + JP NZ,SETUSER + LD A,(USERNO) ;yes, just do it. + JP SETSTAT +SETUSER:AND 1FH ;no, we should set it instead. keep low + LD (USERNO),A ;bits (0-4) only. + RET +; +; Function to read a random record from a file. +; +RDRANDOM: CALL AUTOSEL ;select proper drive and read. + JP READRAN +; +; Function to compute the file size for random files. +; +WTRANDOM: CALL AUTOSEL ;select proper drive and write. + JP WRITERAN +; +; Function to compute the size of a random file. +; +FILESIZE: CALL AUTOSEL ;select proper drive and check file length + JP RANSIZE +; +; Function #37. This allows a program to log off any drives. +; On entry, set (DE) to contain a word with bits set for those +; drives that are to be logged off. The log-in vector and the +; write protect vector will be updated. This must be a M/PM +; special function. +; +LOGOFF: LD HL,(PARAMS) ;get drives to log off. + LD A,L ;for each bit that is set, we want + CPL ;to clear that bit in (LOGIN) + LD E,A ;and (WRTPRT). + LD A,H + CPL + LD HL,(LOGIN) ;reset the login vector. + AND H + LD D,A + LD A,L + AND E + LD E,A + LD HL,(WRTPRT) + EX DE,HL + LD (LOGIN),HL ;and save. + LD A,L ;now do the write protect vector. + AND E + LD L,A + LD A,H + AND D + LD H,A + LD (WRTPRT),HL ;and save. all done. + RET +; +; Get here to return to the user. +; +GOBACK: LD A,(AUTO) ;was auto select activated? + OR A + JP Z,GOBACK1 + LD HL,(PARAMS) ;yes, but was a change made? + LD (HL),0 ;(* reset first byte of fcb *) + LD A,(AUTOFLAG) + OR A + JP Z,GOBACK1 + LD (HL),A ;yes, reset first byte properly. + LD A,(OLDDRV) ;and get the old drive and select it. + LD (EPARAM),A + CALL SETDSK +GOBACK1:LD HL,(USRSTACK) ;reset the users stack pointer. + LD SP,HL + LD HL,(STATUS) ;get return status. + LD A,L ;force version 1.4 compatability. + LD B,H + RET ;and go back to user. +; +; Function #40. This is a special entry to do random i/o. +; For the case where we are writing to unused disk space, this +; space will be zeroed out first. This must be a M/PM special +; purpose function, because why would any normal program even +; care about the previous contents of a sector about to be +; written over. +; +WTSPECL:CALL AUTOSEL ;select proper drive. + LD A,2 ;use special write mode. + LD (MODE),A + LD C,0 ;set write indicator. + CALL POSITN1 ;position the file. + CALL Z,WTSEQ1 ;and write (if no errors). + RET +; +;************************************************************** +;* +;* BDOS data storage pool. +;* +;************************************************************** +; +EMPTYFCB: .DB 0E5H ;empty directory segment indicator. +WRTPRT: .DW 0 ;write protect status for all 16 drives. +LOGIN: .DW 0 ;drive active word (1 bit per drive). +USERDMA:.DW 080H ;user's dma address (defaults to 80h). +; +; Scratch areas from parameter block. +; +SCRATCH1: .DW 0 ;relative position within dir segment for file (0-3). +SCRATCH2: .DW 0 ;last selected track number. +SCRATCH3: .DW 0 ;last selected sector number. +; +; Disk storage areas from parameter block. +; +DIRBUF: .DW 0 ;address of directory buffer to use. +DISKPB: .DW 0 ;contains address of disk parameter block. +CHKVECT:.DW 0 ;address of check vector. +ALOCVECT: .DW 0 ;address of allocation vector (bit map). +; +; Parameter block returned from the bios. +; +SECTORS:.DW 0 ;sectors per track from bios. +BLKSHFT:.DB 0 ;block shift. +BLKMASK:.DB 0 ;block mask. +EXTMASK:.DB 0 ;extent mask. +DSKSIZE:.DW 0 ;disk size from bios (number of blocks-1). +DIRSIZE:.DW 0 ;directory size. +ALLOC0: .DW 0 ;storage for first bytes of bit map (dir space used). +ALLOC1: .DW 0 +OFFSET: .DW 0 ;first usable track number. +XLATE: .DW 0 ;sector translation table address. +; +; +CLOSEFLG: .DB 0 ;close flag (=0ffh is extent written ok). +RDWRTFLG: .DB 0 ;read/write flag (0ffh=read, 0=write). +FNDSTAT:.DB 0 ;filename found status (0=found first entry). +MODE: .DB 0 ;I/o mode select (0=random, 1=sequential, 2=special random). +EPARAM: .DB 0 ;storage for register (E) on entry to bdos. +RELBLOCK: .DB 0 ;relative position within fcb of block number written. +COUNTER:.DB 0 ;byte counter for directory name searches. +SAVEFCB:.DW 0,0 ;save space for address of fcb (for directory searches). +BIGDISK:.DB 0 ;if =0 then disk is > 256 blocks long. +AUTO: .DB 0 ;if non-zero, then auto select activated. +OLDDRV: .DB 0 ;on auto select, storage for previous drive. +AUTOFLAG: .DB 0 ;if non-zero, then auto select changed drives. +SAVNXT: .DB 0 ;storage for next record number to access. +SAVEXT: .DB 0 ;storage for extent number of file. +SAVNREC:.DW 0 ;storage for number of records in file. +BLKNMBR:.DW 0 ;block number (physical sector) used within a file or logical sect +LOGSECT:.DW 0 ;starting logical (128 byte) sector of block (physical sector). +FCBPOS: .DB 0 ;relative position within buffer for fcb of file of interest. +FILEPOS:.DW 0 ;files position within directory (0 to max entries -1). +; +; Disk directory buffer checksum bytes. One for each of the +; 16 possible drives. +; +CKSUMTBL: .DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +; +; Extra space ? +; + .DB 0,0,0,0 +; +;************************************************************** +;* +;* B I O S J U M P T A B L E +;* +;************************************************************** +; +BOOT: JP 0 ;NOTE WE USE FAKE DESTINATIONS +WBOOT: JP 0 +CONST: JP 0 +CONIN: JP 0 +CONOUT: JP 0 +LIST: JP 0 +PUNCH: JP 0 +READER: JP 0 +HOME: JP 0 +SELDSK: JP 0 +SETTRK: JP 0 +SETSEC: JP 0 +SETDMA: JP 0 +READ: JP 0 +WRITE: JP 0 +PRSTAT: JP 0 +SECTRN: JP 0 +; +;* +;****************** E N D O F C P / M ***************** +;* + + .END diff --git a/Z80 CPM and bootloader (basmon)/source/download.asm b/Z80 CPM and bootloader (basmon)/source/download.asm new file mode 100644 index 0000000..d253e9f --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/download.asm @@ -0,0 +1,287 @@ +;================================================================================== +; Contents of this file are copyright Grant Searle +; HEX routine from Joel Owens. +; +; You have permission to use this for NON COMMERCIAL USE ONLY +; If you wish to use it elsewhere, please include an acknowledgement to myself. +; +; http://searle.hostei.com/grant/index.html +; +; eMail: home.micros01@btinternet.com +; +; If the above don't work, please perform an Internet search to see if I have +; updated the web page hosting service. +; +;================================================================================== + +TPA .EQU 100H +REBOOT .EQU 0H +BDOS .EQU 5H +CONIO .EQU 6 +CONINP .EQU 1 +CONOUT .EQU 2 +PSTRING .EQU 9 +MAKEF .EQU 22 +CLOSEF .EQU 16 +WRITES .EQU 21 +DELF .EQU 19 +SETUSR .EQU 32 + +CR .EQU 0DH +LF .EQU 0AH + +FCB .EQU 05CH +BUFF .EQU 080H + + .ORG TPA + + + LD A,0 + LD (buffPos),A + LD (checkSum),A + LD (byteCount),A + LD (printCount),A + LD HL,BUFF + LD (buffPtr),HL + + +WAITLT: CALL GETCHR + CP 'U' + JP Z,SETUSER + CP ':' + JR NZ,WAITLT + + + LD C,DELF + LD DE,FCB + CALL BDOS + + LD C,MAKEF + LD DE,FCB + CALL BDOS + +GETHEX: + CALL GETCHR + CP '>' + JR Z,CLOSE + LD B,A + PUSH BC + CALL GETCHR + POP BC + LD C,A + + CALL BCTOA + + LD B,A + LD A,(checkSum) + ADD A,B + LD (checkSum),A + LD A,(byteCount) + INC A + LD (byteCount),A + + LD A,B + + LD HL,(buffPtr) + + LD (HL),A + INC HL + LD (buffPtr),HL + + LD A,(buffPos) + INC A + LD (buffPos),A + CP 80H + + JR NZ,NOWRITE + + LD C,WRITES + LD DE,FCB + CALL BDOS + LD A,'.' + CALL PUTCHR + + ; New line every 8K (64 dots) + LD A,(printCount) + INC A + CP 64 + JR NZ,noCRLF + LD (printCount),A + LD A,CR + CALL PUTCHR + LD A,LF + CALL PUTCHR + LD A,0 +noCRLF: LD (printCount),A + + LD HL,BUFF + LD (buffPtr),HL + + LD A,0 + LD (buffPos),A +NOWRITE: + JR GETHEX + + +CLOSE: + + LD A,(buffPos) + CP 0 + JR Z,NOWRITE2 + + LD C,WRITES + LD DE,FCB + CALL BDOS + LD A,'.' + CALL PUTCHR + +NOWRITE2: + LD C,CLOSEF + LD DE,FCB + CALL BDOS + +; Byte count (lower 8 bits) + CALL GETCHR + LD B,A + PUSH BC + CALL GETCHR + POP BC + LD C,A + + CALL BCTOA + LD B,A + LD A,(byteCount) + SUB B + CP 0 + JR Z,byteCountOK + + LD A,CR + CALL PUTCHR + LD A,LF + CALL PUTCHR + + LD DE,countErrMess + LD C,PSTRING + CALL BDOS + + ; Sink remaining 2 bytes + CALL GETCHR + CALL GETCHR + + JR FINISH + +byteCountOK: + +; Checksum + CALL GETCHR + LD B,A + PUSH BC + CALL GETCHR + POP BC + LD C,A + + CALL BCTOA + LD B,A + LD A,(checkSum) + SUB B + CP 0 + JR Z,checksumOK + + LD A,CR + CALL PUTCHR + LD A,LF + CALL PUTCHR + + LD DE,chkErrMess + LD C,PSTRING + CALL BDOS + JR FINISH + +checksumOK: + LD A,CR + CALL PUTCHR + LD A,LF + CALL PUTCHR + + LD DE,OKMess + LD C,PSTRING + CALL BDOS + + + +FINISH: + LD C,SETUSR + LD E,0 + CALL BDOS + + JP REBOOT + + +SETUSER: + CALL GETCHR + CALL HEX2VAL + LD E,A + LD C,SETUSR + CALL BDOS + JP WAITLT + + +; Get a char into A +;GETCHR: LD C,CONINP +; CALL BDOS +; RET + +; Wait for a char into A (no echo) +GETCHR: + LD E,$FF + LD C,CONIO + CALL BDOS + CP 0 + JR Z,GETCHR + RET + +; Write A to output +PUTCHR: LD C,CONOUT + LD E,A + CALL BDOS + RET + + +;------------------------------------------------------------------------------ +; Convert ASCII characters in B C registers to a byte value in A +;------------------------------------------------------------------------------ +BCTOA LD A,B ; Move the hi order byte to A + SUB $30 ; Take it down from Ascii + CP $0A ; Are we in the 0-9 range here? + JR C,BCTOA1 ; If so, get the next nybble + SUB $07 ; But if A-F, take it down some more +BCTOA1 RLCA ; Rotate the nybble from low to high + RLCA ; One bit at a time + RLCA ; Until we + RLCA ; Get there with it + LD B,A ; Save the converted high nybble + LD A,C ; Now get the low order byte + SUB $30 ; Convert it down from Ascii + CP $0A ; 0-9 at this point? + JR C,BCTOA2 ; Good enough then, but + SUB $07 ; Take off 7 more if it's A-F +BCTOA2 ADD A,B ; Add in the high order nybble + RET + +; Change Hex in A to actual value in A +HEX2VAL SUB $30 + CP $0A + RET C + SUB $07 + RET + + +buffPos .DB 0H +buffPtr .DW 0000H +printCount .DB 0H +checkSum .DB 0H +byteCount .DB 0H +OKMess .BYTE "OK$" +chkErrMess .BYTE "======Checksum Error======$" +countErrMess .BYTE "======File Length Error======$" + .END diff --git a/Z80 CPM and bootloader (basmon)/source/form128.asm b/Z80 CPM and bootloader (basmon)/source/form128.asm new file mode 100644 index 0000000..70c8f65 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/form128.asm @@ -0,0 +1,220 @@ +;================================================================================== +; Contents of this file are copyright Grant Searle +; +; You have permission to use this for NON COMMERCIAL USE ONLY +; If you wish to use it elsewhere, please include an acknowledgement to myself. +; +; http://searle.hostei.com/grant/index.html +; +; eMail: home.micros01@btinternet.com +; +; If the above don't work, please perform an Internet search to see if I have +; updated the web page hosting service. +; +;================================================================================== + +numDrives .EQU 15 ; Not including A: + + +SD_DATA .EQU 088H +SD_CONTROL .EQU 089H +SD_STATUS .EQU 089H +SD_LBA0 .EQU 08AH +SD_LBA1 .EQU 08BH +SD_LBA2 .EQU 08CH + +LF .EQU 0AH ;line feed +FF .EQU 0CH ;form feed +CR .EQU 0DH ;carriage RETurn + +;==================================================================================== + + .ORG 5000H ; Format program origin. + + + CALL printInline + .TEXT "CP/M Formatter 2.0 by G. Searle 2013" + .DB CR,LF,0 + + LD A,'A' + LD (drvName),A + +; There are 512 directory entries per disk, 4 DIR entries per sector +; So 128 x 128 byte sectors are to be initialised +; The drive uses 512 byte sectors, so 32 x 512 byte sectors per disk +; require initialisation + +;Drive 0 (A:) is slightly different due to reserved track, so DIR sector starts at 32 + LD A,(drvName) + RST 08H ; Print drive letter + INC A + LD (drvName),A + + LD A,$20 + LD (secNo),A + +processSectorA: + + LD A,(secNo) + OUT (SD_LBA0),A + LD A,0 + OUT (SD_LBA1),A + LD A,0 + OUT (SD_LBA2),A + LD a,$E0 + + call writehst + + LD A,(secNo) + INC A + LD (secNo),A + CP $40 + JR NZ, processSectorA + + + +;Drive 1 onwards (B: etc) don't have reserved tracks, so sector starts at 0 + + LD DE,$0040 ; HL increment + LD HL,$0040 ; H = LBA2, L=LBA1, initialise for drive 1 (B:) + + LD B,numDrives + +processDirs: + + LD A,(drvName) + RST 08H ; Print drive letter + INC A + LD (drvName),A + + LD A,0 + LD (secNo),A + +processSector: + LD A,(secNo) + OUT (SD_LBA0),A + LD A,L + OUT (SD_LBA1),A + LD A,H + OUT (SD_LBA2),A + + call writehst + + LD A,(secNo) + INC A + LD (secNo),A + CP $20 + JR NZ, processSector + + ADD HL,DE + + DEC B + JR NZ,processDirs + + CALL printInline + .DB CR,LF + .TEXT "Formatting complete" + .DB CR,LF,0 + + RET + +;================================================================================================ +; Write physical sector to host +;================================================================================================ + +writehst: + PUSH AF + PUSH BC + PUSH HL + +wrWait1: IN A,(SD_STATUS) + CP 128 + JR NZ,wrWait1 + + ;CALL setLBAaddr + + LD A,$01 ; 01 = Write block + OUT (SD_CONTROL),A + + LD c,4 +wr4secs: + LD HL,dirData + LD b,128 +wrByte: +wrWait2: IN A,(SD_STATUS) + CP 160 ; Write buffer empty + JR NZ,wrWait2 + + ;LD A,'.' + ;RST 08H + + ; UPDATE S0urceror, inserted wait cycle between IN and OUT + ; to resolve unknown write issue in sd_controller.vhd in combination + ; with MISTer virtual SD interface sys/sd_card.sv + ; which results in hangs or write errors. + push bc + ld b,100 +_again: + djnz _again + pop bc + ; END UPDATE + + LD A,(HL) + OUT (SD_DATA),A + + INC HL + dec b + JR NZ, wrByte + + dec c + JR NZ,wr4secs + + POP HL + POP BC + POP AF + + ;XOR a + ;ld (erflag),a + RET + +;================================================================================================ +; Utilities +;================================================================================================ + +printInline: + EX (SP),HL ; PUSH HL and put RET ADDress into HL + PUSH AF + PUSH BC +nextILChar: LD A,(HL) + CP 0 + JR Z,endOfPrint + RST 08H + INC HL + JR nextILChar +endOfPrint: INC HL ; Get past "null" terminator + POP BC + POP AF + EX (SP),HL ; PUSH new RET ADDress on stack and restore HL + RET + + +secNo .db 0 +drvName .db 0 + + +; Directory data for 1 x 128 byte sector +dirData: + .DB $E5,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + + .DB $E5,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + + .DB $E5,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + + .DB $E5,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + + .END + \ No newline at end of file diff --git a/Z80 CPM and bootloader (basmon)/source/putsys.asm b/Z80 CPM and bootloader (basmon)/source/putsys.asm new file mode 100644 index 0000000..9bde989 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/putsys.asm @@ -0,0 +1,163 @@ +;================================================================================== +; Contents of this file are copyright Grant Searle +; +; You have permission to use this for NON COMMERCIAL USE ONLY +; If you wish to use it elsewhere, please include an acknowledgement to myself. +; +; http://searle.hostei.com/grant/index.html +; +; eMail: home.micros01@btinternet.com +; +; If the above don't work, please perform an Internet search to see if I have +; updated the web page hosting service. +; +;================================================================================== + +loadAddr .EQU 0D000h +numSecs .EQU 24 ; Number of 512 sectors to be loaded + +SD_DATA .EQU 088H +SD_CONTROL .EQU 089H +SD_STATUS .EQU 089H +SD_LBA0 .EQU 08AH +SD_LBA1 .EQU 08BH +SD_LBA2 .EQU 08CH + +LF .EQU 0AH ;line feed +FF .EQU 0CH ;form feed +CR .EQU 0DH ;carriage RETurn + +;================================================================================================ + + .ORG 5000H ; Loader origin. + + CALL printInline + .TEXT "CP/M System Transfer by G. Searle 2012-13" + .DB CR,LF,0 + + LD B,numSecs + + LD A,0 + LD (lba0),A + ld (lba1),A + ld (lba2),A + ld (lba3),A + LD HL,loadAddr + LD (dmaAddr),HL +processSectors: + + call writehst + + LD DE,0200H + LD HL,(dmaAddr) + ADD HL,DE + LD (dmaAddr),HL + LD A,(lba0) + INC A + LD (lba0),A + + djnz processSectors + + CALL printInline + .DB CR,LF + .TEXT "System transfer complete" + .DB CR,LF,0 + + RET + +; ========================================================================= +; Disk routines as used in CBIOS +; ========================================================================= +setLBAaddr: + LD A,(lba2) + OUT (SD_LBA2),A + LD A,(lba1) + OUT (SD_LBA1),A + LD A,(lba0) + OUT (SD_LBA0),A + ret + +;================================================================================================ +; Write physical sector to host +;================================================================================================ + +writehst: + PUSH AF + PUSH BC + PUSH HL + +wrWait1: IN A,(SD_STATUS) + CP 128 + JR NZ,wrWait1 + + CALL setLBAaddr + + LD A,$01 ; 01 = Write block + OUT (SD_CONTROL),A + + LD c,4 + ;LD HL,hstbuf +wr4secs: + LD b,128 +wrByte: + +wrWait2: IN A,(SD_STATUS) + CP 160 ; Write buffer empty + JR NZ,wrWait2 + + ; UPDATE S0urceror, inserted wait cycle between IN and OUT + ; to resolve unknown write issue in sd_controller.vhd in combination + ; with MISTer virtual SD interface sys/sd_card.sv + ; which results in hangs or write errors. + push bc + ld b,100 +_again: + djnz _again + pop bc + ; END UPDATE + + LD A,(HL) + OUT (SD_DATA),A + INC HL + dec b + JR NZ, wrByte + + dec c + JR NZ,wr4secs + + POP HL + POP BC + POP AF + + ;XOR a + ;ld (erflag),a + RET + + +;================================================================================================ +; Utilities +;================================================================================================ + +printInline: + EX (SP),HL ; PUSH HL and put RET ADDress into HL + PUSH AF + PUSH BC +nextILChar: LD A,(HL) + CP 0 + JR Z,endOfPrint + RST 08H + INC HL + JR nextILChar +endOfPrint: INC HL ; Get past "null" terminator + POP BC + POP AF + EX (SP),HL ; PUSH new RET ADDress on stack and restore HL + RET + +lba0 .DB 00h +lba1 .DB 00h +lba2 .DB 00h +lba3 .DB 00h +dmaAddr .dw 0 + + .END diff --git a/Z80 CPM and bootloader (basmon)/transientAppsPackage/CPM211FilesPkg.txt b/Z80 CPM and bootloader (basmon)/transientAppsPackage/CPM211FilesPkg.txt new file mode 100644 index 0000000..1a035ae --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/transientAppsPackage/CPM211FilesPkg.txt @@ -0,0 +1,27 @@ +A:DOWNLOAD LOAD.COM +U0 +:C3400220434F505952494748542028432920313937382C204449474954414C205245534541524348204552524F523A20242C204C4F4144204144445245535320244449534B205245414424494E564552544544204C4F41442041444452455353244449534B205752495445244C4F414420204144445245535320244552524F5220414444524553532024425954455320524541443A24494E56414C49442048455820444947495424434845434B2053554D204552524F5220244649525354204144445245535320244C41535420204144445245535320244259544553205245414420202020245245434F524453205752495454454E20244845580043414E4E4F54204F50454E20534F5552434524434F4D4E4F204D4F5245204449524543544F52592053504143452443414E4E4F5420434C4F53452046494C45242AE707F9C92100003922E70721650DF921000122160C210004220B0C015C00C51E2101E907CD220401F701C51E0401F207CD220401E907CD8A033A1A0CFEFFC2830201FB01CD6403010E02C51E03016500CD2204015C00CDCF03015C00CDFF03015C00CD8A033A1A0CFEFFC2B202011102CD6403C3C902CDE404015C00CD9D033A1A0CFEFFC2C902012902CD6403CDE002CD3B02C9210D0C712A0D0C2600EB0E02CD6607C90E0DCDD0020E0ACDD002C9210E0C713E09210E0CBED206033A0E0CC641D60A4FCDD002C30F033A0E0CC6304FCDD002C9210F0C713A0F0CE6F81F1F1F1F4FCDEB023A0F0CE60F4FCDEB02C921110C702B712A100C7C4FCD10032A100C7D4FCD1003C921130C702B712A120CEB0E09CD6607C921150C702B71CDE0022A140C444DCD4203C921190C702B71012901CD52032A180C444DCD4203013101CD42032A160C444DCD2B03CD3B02C9211C0C702B712A1B0CEB0E0FCD6907321A0CC9211E0C702B712A1D0CEB0E10CD6907321A0CC921200C702B712A1F0CEB0E11CD6907321A0CC91100000E12CD6907321A0CC921220C702B712A210CEB0E13CD6607C921240C702B712A230CEB0E14CD6907C921260C702B712A250CEB0E15CD6907C921280C702B712A270CEB0E16CD6907321A0CC9212A0C702B712A290CEB0E17CD6607C9212F0C732B702B712BD1C1702B71D53A2F0C3D322F0CFEFFCA58042A2B0CE52A2D0CC10A772A2B0C23222B0C2A2D0C23222D0CC33104C92A0B0C23220B0C11FF03CD9607DA72042A0B0C010A08097EC9210000220B0C11FF03210B0CCDB807DADA04C397041180002A0B0C19220B0CD27804C3DA0401E907CDDF0332300CFE00C2BA04018000C52A0B0C010A0809444D1E80CD2204C3D7043A300CFE01CAC804014101CD64032A0B0C010A0809361A21FF03220B0CC38704210000220B0C3A0A08C921000022360C22380C223A0C7D323C0D21000122340C223D0D210A08361ACD5904FE3ACA0D05C3020521320C3600CD3D0732310CFE00C22005C3A1053A310C113A0CCD7207EB2B732372CD3D07F5CD3D075FC148CD4C0722340C22160C3E0011360CCDAA07B5C253052A160C22360CCD3D0732330C3A310C3D32310CFEFFCA7605CD3D074FCDFD052A160C2322160CC3590511380C01160CCD9D07D289052A160C2B22380CCD2E0721320C86FE00CA9E0501A801CD5203CD8006C302052A160C22340C01340C113D0DCD9D07D2C2050E00CDFD052A160C2322160CC3A70501B901CD52032A360C444DCD2B0301C801CD52032A380C444DCD2B0301D701CD52032A3A0C444DCD2B0301E601CD52032A3C0D4DCD1003CDE002C9213F0D71013D0D11160CCD9D07D21306014B01CD640311FF002A3D0D19EB21160CCDB807D2700621400D36003E7F21400DBEDA58062A3D0D7D4F0600213C0C09E52A400D260001800009D11A772A3D0D23223D0D21400D34C22906213C0D34015C00CDEF03FE00CA6D06016101CD6403C313062A160C7D4F0600213C0C093A3F0D77C9016C01CD52032A340C444DCD2B03017B01CD52032A160C444DCD2B03018A01CD5203CDE60601160C11340CCD9D07D2DF062A340C7DE60FFE00C2BF06CDE606013D0D11340CCD9D07013C0C094ECD10032A340C2322340C0E20CDD002C3A506CDE002CD3B02C9CDE0022A340C444DCD2B030E3ACDD0020E20CDD002C9CD590432410DD6304F3E09B9DA11073A410DD630C93A410DD6414F3E05B9D22607019601CD5203CD80063A410DD641C60AC9CDFC0687878787F5CDFC06C148B1C9CD2E0732420D21320C86773A420DC921440D732B712A430D26000E08CD8D073A440DCD7F07C9C30000C30500C30500CD0500C9C9C9EB5F1600EB1A856F131A8C67C95F16007BB56F7AB467C95E2356EB290DC28D07C95F16007B956F7A9C67C969604E23461A916F131A9867C96F26001A956F131A9C67C95F16007B965F7A239E57EBC91A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A>0047 +A:DOWNLOAD PIP.COM +U0 +:C3CE04C90000C900001A00000000000028494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A53504143452928494E503A2F4F55543A535041434529202020434F505952494748542028432920313937392C204449474954414C2052455345415243482C2020504950205645525320312E3503010601002424242020202020535542000000203D2E3A2C3C3E0D5F5B5D494E504952445054525552315552325244524F55544C5054554C3150524E4C535450545055503155503250554E545459435254554331434F4E4E554C454F46004449534B2052454144204552524F52244449534B205752495445204552524F5224564552494659204552524F52244E4F542041204348415241435445522053494E4B245245414445522053544F5050494E470D0A244E4F5420412043484152414354455220534F555243452441424F525445442442414420504152414D4554455224494E56414C49442055534552204E554D424552245245434F524420544F4F204C4F4E4724494E56414C494420444947495424454E44204F462046494C452C2043544C2D5A3F24434845434B53554D204552524F5224434F5252454354204552524F522C20545950452052455455524E204F522043544C2D5A24494E56414C494420464F524D415424484558242424244E4F204449524543544F5259205350414345244E4F2046494C4524434F4D245354415254204E4F5420464F554E442451554954204E4F5420464F554E442443414E4E4F5420434C4F53452044455354494E4154494F4E2046494C452444455354494E4154494F4E20495320522F4F2C2044454C4554452028592F4E293F242A2A4E4F542044454C455445442A2A242424242424244E4F5420464F554E4424434F5059494E47202D2452455155495245532043502F4D20322E30204F52204E4557455220464F52204F5045524154494F4E2E24554E5245434F474E495A45442044455354494E4154494F4E2443414E4E4F5420575249544524494E56414C49442050495020464F524D41542443414E4E4F54205245414424494E56414C494420534550415241544F522431F21D018000C51E8001CC1ECD180A3ACC1ED600D6019F32A51ECD4C08EB3E20CD841DD2FD04014D04CD3908CD0000CD160932C01E1100000E19CD050032FC1D31F21DCD401A3AC01E32C11E216F1F36002B36002B360021A61E360123360021F31D36002336FE3AA51E1FD247050E2ACD1C08CD6F09CD2E08214E1F36FF3ACC1EFE00C25E052AFC1D4DCD5E08CD0000214B1E360021031E360021A41E36002B360001271ECD20123AA91EFE03C28105C324063AA91EFE04C2C3053A941F3D324B1ECD0C1D01061ECD20123AA91EFE02CAA405CD5C183AF51D1FD2B705015C00CDEE1CCD781BC3C00501271ECDEE1CCDB21AC3DB073AA91ED602C6FF9F21F51DB61FD2D605CD5C18CDA21CCD0C1D01061ECD20123AA91EFE04C20506CD881CCDC61C01271EC51E2101061ECD180ACDDF1CCDB21AC3DB073AA91EFE02C22406CD11123AA81EFE0DCA1B06C32406CD881CCDB21AC3DB07214E1F36FF01271ECD20123AA91ED6029F21F51DB61FD24306017704CDAF0921051E36003AA91EFE02C25E06CDA21CCD631821A81E36FFC37B063AA81ED6139F2FF53E0521A81E969F2FC148B11FD27B06019004CDAF093AA81E3C32A31EFE0FC28A06CDCF1501061ECD20123AA91ED601C6FF9FF53AA81ED63DC6FF9FC148B11FD2AE06019D04CDAF0921A71F36013AA71F1FD2BE073AC01E32C11E01061ECD201221041E36003AA91ED602D6019FF53AF51D2FC148A11FD2ED06CD881CCDBE1821A81E36FFC313073AA91ED603C6FF9FF53E0A21A81E969F2FF53E05969FC148A1C148B11FD2130701B004CDAF093A5E1F21041EB6773AA81E3C32A41E3AA81EFE13C23007CDCF15C37D073AA81EFE14C240070E1ACD450EC37D073AA81ED6059F21051EA61FD2530721571F36013AA31EFE0AC27A07215D1F36013A631FFE00C26D0721631F36083A5F1FFE00C27A07215F1F3601CD6C1ACD121901061ECD20123AA91ED601C6FF9FF53AA81ED62CC6FF9FF53AA81ED60DC6FF9FC148A1C148B11FD2B00701BC04CDAF093AA81ED60DC6FF9F32A71FC3B3063AA31EFE0FC2CE070E1ACD450ECDCF153AA31EFE00C2DB070E00CD31193AA51E32CC1EC31405FB7621F21D7121F207E52A3802E9C921FB07E52A3602E93A0901C93EFACDA61D3EFACDA61DC91100000E03CD0500C91100000E01CD0500C921AB1E713AAB1EE67F5F16000E02CD0500C90E0DCD1C080E0ACD1C08C921AD1E702B71CD2E082AAC1EEB0E09CD0500C91100000E0CCD0500C91100000E0DCD0500C921AF1E712AAF1E2600EB0E0ECD0500C921B11E702B712AB01EEB0E0FCD050032AE1EC921B31E702B712AB21EEB0E10CD050032AE1EC921B51E702B712AB41EEB0E11CD050032AE1EC91100000E12CD050032AE1EC921B71E702B712AB61EEB0E13CD0500C921B91E702B712AB81EEB0E14CD0500C921BB1E702B712ABA1EEB0E15CD0500C921BD1E702B712ABC1EEB0E16CD050032AE1EC921BF1E702B712ABE1EEB0E17CD0500C921C31E702B712AC21EEB0E1ECD0500C911FF000E20CD0500C921C41E712AC41E2600EB0E20CD0500C92AC01E4DCD1F09C92AC11E4DCD1F09C921C61E702B712AC51EEB0E21CD0500C921C81E702B712AC71EEB0E22CD0500C921CA1E702B712AC91EEB0E24CD0500C921CB1E368011CB1E0E0ACD0500C91100000E0BCD0500C9216B1F702B712A6A1FEB0E1ACD0500C93E0CD3013E08D301DB010707071FDAAA09C39E09DB03E67FC921711F702B71CD2F092A701F444DCD39080E3ACD1C080E20CD1C083A4D1F32721F3A4E1F21721FBEDAF80921CC1E3A721FBED2F1092A721F260001CD1E094ECD1C0821721F34C2D00921CC1E3600013A02CD94083AAE1EFEFFCA110A013A02CDB308CD2E08C30E05C921771F732B702B712BD1C1702B71D53A771F3D32771FFEFFCA4E0A2A731FE52A751FC10A772A731F2322731F2A751F2322751FC3270AC9210000229D1E2A031E4DCD5E08CD370921781F36003AFB1D21781FBEDABE0A2A9D1EEB2A011E19444DCD860901061ECDC30832791FFE00CAAD0A3A791FFE01CA970A019402CDAF092A9D1E229F1EEB2A011E19361A3AFB1D32781FC3B70A1180002A9D1E19229D1E21781F34C2640A210000229D1ECD2F09C90E0721A11ECD6A1D7D3D327C1FFEFFC2DB0AC921000022A11E2A4B1E4DCD5E0801271ECD5F09217A1F36003A7C1F217A1FBEDA310B2AA11E01CA1F09227D1F2A7D1F444DCD860901271ECDD308FE00CA200B01A402CDAF091180002AA11E1922A11E217A1F34C2F30A3A651F1FD2C90B21000022A11E018000CD8609217A1F36003A7C1F217A1FBEDAC00B01271ECD3F09D600D6019F327F1F2A481E2322481E217B1F36003A7B1FD6809F217F1FA61FD2A20B2A7B1F2600018000093A7B1F11A11EE5CD341D01CA1F09C10A96D6019F327F1F217B1F34C36D0B1180002AA11E1922A11E3A7F1F1FDAB90B01B502CDAF09217A1F34C2490B01271ECDD308327F1F21000022A11EC921801F713A801FFE20DAF40B21F31D343E0021531FBED2F40B3A531F21F31DBED2F40BC93A030032811F2AA31E4D060021DD0C09095E2356EBE901FF1D11A11ECD8E1DDA190CCDC80A2AA11E01CA1F093A801F772AA11E2322A11EC3050DC33D0CC33D0CC33D0CC33D0CC33D0C01C202CDAF09C3050D2A801F4DCDE607C3050D2103003680C3710CC3050D21030036C0C3710CC3050D2103003680C3710CC3050D2A801F2600EB0E05CD0500C3050D2103003610C3A00CC3050D2103003620C3A00CC3050D2103003630C3A00CC3050D2A801F2600EB0E04CD0500C3050D2103003600C3CF0CC3050D2103003601C3CF0CC3050D2103003603C3CF0CC3050D2A801F2600EB0E02CD0500C3050D0A0C2E0C310C340C370C3A0C3D0C460C500C5B0C660C710C7F0C8A0C950CA00CAE0CB90CC40CCF0C3A811F320300C921821F713A821FFE09CA220D2A821F4DCDD00BC36E0D3A631FFE00C2340D2A821F4DCDD00BC36E0D3AF31D32831F21631F3A831FBEDA510D21631F3A831F9632831FC33A0D21831F3A631F96773E0021831FBED26E0D21831F350E20CDD00BC3590D3A821FFE0DC27B0D21F31D3600C921841F713A841FD600D6019F216C1FA6771FD2990D0E20CD0C0DC3A20D3A841FC6304FCD0C0DC921851F713A851FE6F81F1F1F1F4FCD7C0D3A851FE60F4FCD7C0DC921861F36013A5D1FD601D6019F326C1F3A6F1F8627326F1F3A6E1FCE0027326E1F3A6D1FCE0027326D1F2A6D1F4DCDA30D2A6E1F4DCDA30D2A6F1F4DCDA30D3A5D1FFE01C2120E0E3ACD0C0D0E20CD0C0DC3170E0E09CD0C0DC92AA11E7DE67F32891F1180FFCD441D22871FCDC80A2A871F01CA1F09E52A891FEBCD180A2A891F260022A11EC9218A1F713A551F1FD2590E3A8A1FFE0CC2590EC93AA61E1FD2A90E3A8A1FFE0CCAA90E3A5F1F328B1FFE00CA980E3A8B1FFE01C2800E218B1F363C3AF41D3C32F41D218B1FBEDA980E21F41D36000E0CCD0C0D3E00215D1FBED2A40ECDBE0D21A61E36003A511F1FD2CC0E3A8A1FD613D6019FF53AA31ED600D6019FC148A11FD2CC0ECD180EC93A8A1FFE0CC2D90E21F41D36002A8A1F4DCD0C0D3A8A1FFE0AC2ED0E21A61E3601C9218C1F713A8C1FD6619F2FF53E7A218C1F969F2FC148A11FD2110F3A8C1FE65F328C1F3A8C1FC9218D1F713A8D1FD6419F2FF53E5A218D1F969F2FC148A11FD2380F3A8D1FF620328D1F3A8D1FC93AA41E3D4F3E05B9DA6D0F3A571F21511FB6F5CD7D09C148A11FD26D0FCD1308FE1AC2640F3E1AC901D702CD39083E13C921901F36013A0300328E1F2AA41E4D060021451009095E2356EBE901FD1D119D1ECD8E1DDA970FCD4F0A2A9D1EEB2A011E197E328F1F2A9D1E23229D1EC36D10CDF307328F1FC36D10CD9609328F1FC36D102103003604C3E00FC36D102103003608C3E00FC36D10210300360CC3E00FC36D101100000E03CD0500E67F328F1FC36D10C30810C30810C30810C30810C30810C30810C30810C3081001E902CDAF09C36D102103003600C33210C36D102103003601C33210C36D102103003603C33210C36D1021901F36001100000E01CD0500328F1FC36D10880FAD0FB60FBF0FCA0FD50FE00FF00FF30FF60FF90FFC0FFF0F02100510081011101C10271032103A8E1F3203003A541F1FD292103AA31E328E1F21A31E36132A8F1F4DCD450E3A8E1F32A31E3A901F1FD2DC103A041E1FD2B2103AA71E3C32A71ED600D6019F32901FC3BD103A8F1FD60AD6019F32901F3A901F1FD2DC10CD7D091FD2DC10CD1308FE1AC2D6103E1AC9010003CDAF093A691F1FD2EB103A8F1FE67F328F1F3A641F1FD2FA102A8F1F4DCDEE0EC93A5B1F1FD209112A8F1F4DCD150FC93A8F1FC93E0021FA1DBED228113AFA1D3D32FA1DFE01C225113E0AC93E1AC93E0021F81DBED2461121F81D352B4E060021CD1E097E32911F21F71D34C9CD3C0F32911FFE1AC254113E1AC93E0021621FBED27D112A621F4DCDAD111FD27A113A621F32F71D21621F36003AF91D3C32F81DC3A9113E0021601FBED2A5112A601F4DCDAD111FD29E1121601F360021FA1D36023E0DC93A911FC9C3A9113A911FC9C32811C921921F713AF91D21921F86774F060021CD1E097E32931FFE1AC2D9112A921F260001CD1E093A911F773E01C921911F3A931FBEC2EA1121F91D34C3EF1121F91D36003E00C93A4E1F3C324E1F21CC1EBEDA03123E0DC92A4E1F260001CD1E094ECDEE0EC9CDF21132A81EFE20C21F12C31112C921961F702B7121F51D360021A91E36002B362021AA1E36003AAA1EFE20D253123AAA1EFE0BC24D1221A81E3600CD6714C33812CD11123A4E1F324D1F2AA81E4DCD38141FD27012CDC11521A91E3601C921941F360021971F36003E1921971FBEDA95122A971F260001501F09360021971F34C27A1221F61D360021F81D360023360023360021AA1E36002AA81E4DCD38141FDADA123AAA1EFE08DABE12C93AA81EFE2AC2CE120E08CD8714C3D112CD6714CDF21132A81EC3AA123AA81EFE3AC2BF133A941FFE00CAEB12C93AAA1EFE01C22C130E01CDA114D6413C32941F4F3E1AB9D20613C9CD11122AA81E4DCD38141FD229133AA81EFE5BC21F13CDB114214E1F3521A91E3604C9C3B1133AAA1EFE03CA3513C921A11F36FF2336003E1421A21FBEDAB01321A01F36003AA01F3C32A01F4F3E03919F2FF53AA01F21A11F864F060021540209E52AA01F4DCDA114E196D6019FC148A11FD27E13C34B133AA01FFE04C2A11321A91E3603CDF211FE5BC29613CDB114214E1F353AA21F32A81EC93AA11FC60332A11F21A21F34C23D13C93AA81EFE5BC2BC13CDB114C334143AAA1EFE00C2C813C921AA1E36083AA81EFE2EC20214CDF21132A81E4FCD38141FDA02143AAA1EFE0BDAEC13C93AA81EFE2AC2FC130E0BCD8714C3FF13CD6714C3D5133AA81EFE5BC20D14CDB114214E1F3521A91E36023A941FFE00C225143AFC1D3C32941F2A951F36000120002A951F093600C9C3A512C9219A1F71219B1F36003E0A219B1FBEDA64142A9B1F2600014902093A9A1FBEC25D143E01C9219B1F34C241143E00C93AAA1E3C32AA1E4F06002A951F093AA81E773AA81EFE3FC2861421F51D3601C9219C1F7121A81E363F219C1F3AAA1EBED2A014CD6714C39014C9219D1F712A9D1F2600EB2A951F197EC921F61D36013AC01E32C11ECDF21132A81E3AA81ED60DD6019FF53AA81ED65DD6019FC148B11FDABA153AA81ED641329E1F4F3E19B9D203153AA81EFE20C2FA14CDF21132A81EC30015010803CDAF09C3B7153AA81ED653D6019FF53AA81ED651D6019FC148B11FD249153A4E1F3C329F1FCDF21132A81ED61AD6019FF53AA81ED60DD6019FC148B11FDA4015C32215CDF21132A81EC38D15CDF21132A81ED630329F1F4F3E09B9D26315219F1F3601C38D15CDF21132A81ED63032991F4F3E09B9DA8D152A9F1F2600CD4F1DE52A991F2600C109EB219F1F73C363152A9E1F260001501F093A9F1F773A9E1FFE06C2B7153E1F219F1FBED2B115011603CDAF093A9F1F32C11EC3C214CDF21132A81EC93AA81EFE5FC2CE1521A81E363DC921A31F36003E2721A31FBEDAE9150E00CD450E21A31F34C2D415C921A91F702B712AA81FE51E0301301ECD180AC921AD1F722B732B702B712AAC1F7EFE24CA37162AAC1F3E7FA62AAA1FF53E7FA6C148B9CA26163E00C92AAA1F2322AA1F2AAC1F2322AC1FC307163E01C9CD0D1132A81E3A041E1FD25216019D1E119F1ECD8E1D9FC93AA81ED61AD6019FC921AF1F3601219C1E3600CD3D1732B51FFE3ACA9916219C1E36003AB51FFE1AC29316014803CD3908CD1308FE1AC28E163E01C9219C1E3600CD2D17C3651621B51F3600CDBB1732B41FFE00C2C716CD3D1732B41FFE1ACABA16CD2D17C3A9163AAF1F1FD2C4163E01C93E02C9CDC41722B71FCDBB1732B61F3AB41FD600C6FF9F21AF1FA61FD2F01621B41F35CDBB1732B31FC3D316CDAC1721B51F86FE00CA0217015C03CD1217CD2D173AAF1F1FD20F173E00C93E02C921B11F702B713AAF1F1FD22C1721AF1F36002AB01F444DCD3908C93AAE1F1FD23C1721AE1F3600CD180EC93AAF1F1FD27A17CD0D1132B21FFE13C2571721AE1F3601C344172A9C1E2600014C1E093AB21F773A9C1E3C329C1EFE4FDA7617012A03CD12173AB21FC93E1AC9CD3D1732B91FD6304F3E09B9DA92173AB91FD630C93AB91FD6414F3E05B9D2A417013A03CD12173AB91FD641C60AC9CD7D1787878787F5CD7D17C148B1C9CDAC1721B51F8677C9CDBB174F060060690E08CD641DE5CDBB17E1CD561DC9CD5B1632BA1F4F3E01B9DA32183ABA1FD601D6019F21581FA61FDA1C1821BB1F36013A9C1E21BB1FBEDA1C183ABB1F3D4F0600214C1E094ECD450E21BB1F34C2FC170E0DCD450E0E0ACD450E3ABA1FFE01C22F18C9C3DA17CD2E082A9C1E2600014C1E093624014C1ECD3908016B03CD3908CD2E08CD1308FE1AC25818C9C3DA17C9018F03CDAF09C92A4B1E4DCD5E08119E0301301ECDFD1532051E01301EC51E0301A41FCD180A3A301EE67F32301E3A311EE67F32311E01A203CDEA1501271ECDB30801271ECDE3083AAE1EFEFFC2B21801A503CDAF0921471E360021000022A11EC921FFFF229F1ECD37092A031E4DCD5E0801061ECD6E08CD2F093A611F2FF53A101E07C148A11FD2EC1821AE1E36FF3AAE1EFEFFC2FA1801B803CDAF0921261E360011C003010F1ECDFD1532041E2AFD1D229D1EC93E0021621FBED2211901C403CDAF093E0021601FBED2301901D403CDAF09C921BC1F713ABC1F1FD245193A131E32341EC34A1921341E36002AA11E7DE67FFE00CA611921341E340E1ACD450EC34A19CD1219CDC80A2A4B1E4DCD5E0801271ECD81083AAE1EFEFFC2821901E303CDAF0901A41FCDEA1521331E360001271ECD6E083AAE1EFEFFCAE9193A301E071FD2E3193A661F1FDAD519010104CD3908CD13084FCDEE0EFE59CAD219012304CD3908CD2E08013304CDEA1501271ECDB308C9CD2E083A301EE67F32301E01271ECD060901271ECDB30801271EC51E1001371ECD180A013604CDEA1501271ECDF608C90E0721FF1DCD6A1D3EFFCD411D2BEB21FB1D73C921CA1F22011E01004011FF1DCD931DDA311A21807F22FF1DC33C1A2AFD1DEB2AFF1D1922FF1DCD021AC901CA1F110600CD931D0E01E5CD6E1D01CA1F0922011E1100FFE1CD441D0E01CD6E1D22FD1D22FF1DCD021AC93AA41ED600C6FF9F21511FA632BD1F1FD2821ACD161A3A581F21571FB61FD2931ACDDA17C3A41ACD3A161FDAA41A2AA81E4DCD450EC3931A3ABD1F1FD2B11ACD180ECD401AC9CD401A3A4F1F324D1FCD6318CDBE1821BE1F36012336003E1921BF1FBEDA291B2ABF1F260001501F097EFE00CA221B3ABF1FD606D6019FF53ABF1FD60ED6019FC148B1F53ABF1FD611D6019FC148B1F53ABF1FD615D6019FC148B1F53ABF1FD616D6019FC148B11FDA221B21BE1F360021BF1F34C2C91A3ABE1F1FD25F1BCD161ACD6A1B1FDA591BCD4F0ACD6A1B1FD24D1B2A9F1E22A11EC3531B2AFF1D22A11ECDC80AC3331BCD401AC3621BCD6C1A2ABE1F4DCD3119C901FFFF119F1ECD931DB5C6FF9FC921000022C01F22C41FCD37092A031E4DCD5E08018000CD8609015C00CD940821000022C21F3AAE1ED6FFC6FF9F01C01F11C21FF5CD8E1D9FC148A11FD2C41B2AC21F2322C21FCDA708C39D1BCD2F093AAE1EFEFFC2E51B3E0011C41FCD9B1DB5C2E11B013904CDAF09CD2E08C92AC21F2322C01F3AAE1EE60387878787875F160021800019E51E1001271ECD180A21271E360021331E360001271EC51E1001061ECD180A3A311E072F21611FB61FD2451C2AC41F2322C41F3E01CD7A1DB5C23F1C014304CD3908CD491CCDB21AC3811BC9CD2E0821C61F36013E0B21C61FBEDA871C2AC61F260001271E097E32C71FFE20CA801C3AC61FFE09C2791C0E2ECD1C082AC71F4DCD1C0821C61F34C2511CC93E0021941FBED29B1C3A941F3D32031EC3A11C3AFC1D32031EC93AF61D1FD2AC1CCD5C183E0021941FBED2BF1C3A941F3D324B1EC3C51C3AFC1D324B1EC921C01E3AC11EBECAD11CC921031E3A4B1EBEC2DE1CCD5C18C9CD11123AA81EFE0DCAED1CCD5C18C921C91F702B71CD881CCDDF1C01061EC52AC81F444D1E21CD180ACDC61CC901061ECD20123AA91ED601D6019FF53AA81ED63DD6019FC148A11FDA2D1DCD5C183A4E1F324F1FC9EB5F1600EB1A856F131A8C67C95F16007BA56F7AA467C95E2356EB29E52929C109C95F16007BB56F7AB467C95E2356EB290DC2641DC95E2356EB7CB71F677D1F6F0DC26E1DC95F16007B956F7A9C67C94F06007B916F7A9867C969604E23461A916F131A9867C96F26001A956F131A9C67C9060C480DC2A91D3DC2A81DC9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>00D9 +A:DOWNLOAD STAT.COM +U0 +:C33304202020436F707972696768742028632920313937392C204469676974616C2052657365617263683F3F3F3F3F3F3F3F3F3F3F3F000000434F4E3A5244523A50554E3A4C53543A4445563A56414C3A5553523A44534B3A5454593A4352543A4241543A5543313A5454593A5054523A5552313A5552323A5454593A5054503A5550313A5550323A5454593A4352543A4C50543A554C313A522F4F00522F57005359530044495200522F4F20522F572053595320444952202A2A2041626F72746564202A2A004163746976652055736572203A004163746976652046696C65733A002020202000204472697665204368617261637465726973746963730036353533363A20003132382042797465205265636F7264204361706163697479004B696C6F6279746520447269766520204361706163697479003332202042797465204469726563746F727920456E747269657300436865636B656420204469726563746F727920456E7472696573005265636F7264732F20457874656E74005265636F7264732F20426C6F636B00536563746F72732F20547261636B00526573657276656420547261636B7300206973200054656D7020522F4F204469736B3A20643A3D522F4F0053657420496E64696361746F723A20643A66696C656E616D652E7479702024522F4F2024522F5720245359532024444952004469736B2053746174757320203A2044534B3A20643A44534B3A00557365722053746174757320203A205553523A00496F627974652041737369676E3A00203D004261642044656C696D6974657200496E76616C69642041737369676E6D656E74004261642044656C696D69746572003A200042797465732052656D61696E696E67204F6E2000522F002C2053706163653A2000496E76616C69642046696C6520496E64696361746F72002A2A20546F6F204D616E792046696C6573202A2A0046696C65204E6F7420466F756E64002053697A652000205265637320204279746573202045787420416363003635353336002073657420746F2000522F4F20496E76616C6964204469736B2041737369676E6D656E740057726F6E672043502F4D2056657273696F6E2028526571756972657320322E30290021000039223215215415F9CDED04FE20D24F04011104CDD204C38B04215D1536013A5C00D600D6019FF53A5D00D620D6019FC148A11FD27204CD330DC38B043A5C00FE00CA8004CD0214C38B04CD870A2F1FD28B04CDBA0D2A3215F9C9212215712A22152600EB0E02CD4C14C90E0DCD90040E0ACD9004C90E20CD9004C9212415702B712A23157EFE00CAD1042A23154ECD90042A231523222315C3B704C9212615702B71CDA0042A2515444DCDB104C91100000E0BCD4F14C91100000E0CCD4F14C9212815712A28152600EB0E0ECD4C14C9212A15702B712A2915EB0E0FCD4F14322715C9212C15702B712A2B15EB0E11CD4F14322715C91100000E12CD4F14322715C91100000E19CD4F14C9212E15702B712A2D15EB0E1ACD4C14C91100000E1BCD5214C91100000E18CD5214C91100000E1CCD4C14C91100000E1DCD5214C9115C000E1ECD4C14C91100000E1FCD5214221E15C911FF000E20CD4F14C9212F15712A2F152600EB0E20CD4C14C9213115702B712A3015EB0E23CD4C14C9CD7E052A1E1523234E210100CDBD14118000CD9E14225415C9215615712A56154DCDF604CDB305C9215815702B710E03215715CDC314EB2A2015193E07115715E5CD7214234DE1CDB214C9215F15702B7121601536003E03216015BEDA36062A60152600EB2A5E1519E52A6015260001591509D11ABECA2F063E00C921601534C209063E01C92A5D152600018000097EFE20C24F06215D1534C3390621611536003A6115FE04D2E6062A5D152600018000097E3262154F3E01B9D27A062A62154DCDEB06C37F060E20CDEB063E01216215969F2FF57ED62CD6019FC148B1F57ED63AD6019FC148B1F57ED62AD6019FC148B1F57ED62ED6019FC148B1F57ED63ED6019FC148B1F57ED63CD6019FC148B1F57ED63DD6019FC148B11FD2DF062A5D152600018000093601C3E306215D1534C35406215D1534C9216315712A61152600015915093A63157721611534C9216715722B732B702B7121681536013E00116615CDEA14B5CA72072A6415EB2A6615CD7F14216915732A6415EBCD81142264155059210A00CD7F14EB2266153E00CDD314B5C6FF9F216815A623F57E93D6019FC148A11FD26107CDAB04C36F0721681536003A6915C6304FCD9004C31007C9216D15722B732B702B712A6C15115415E5CD5A14EBE17323722A6C15EB010004CDE214DAB6072A6C15EB010004CDE214EB2B7323722A6A154E2346032B712370C38C07C9216E1571210000226F152271157D3275156F26002273150105002A1E1509EB017315CDDD14DA0E083A6E151FD2F1072A7315444DCDDB053275153A75151FDA0108117115016F15CD73071101002A731519227315D2CE072A6F15C901B901CDD204C901C701CDD204CD8A054F0600110A00CD010701D501CDD20421761536003E1F217615BEDA51082A7615260001771509360060692B34C2360801CF29CD4105012A01CD19053A2715FEFFCA93083A2715E60387878787874F060021CF29097E327615FEE5CA8D083A7615E61F4F0600217715093601CD2C05C35D0821761536003E1F217615BEDAC2082A76152600017715097E1FD2BB082A76154D0600110A00CD010721761534C29808C901E301CDD204CD3805C6414FCD90040E3ACD900401E801CDB1042A1E1523234E210100CDBD142297150105002A1E15094E2346032A9715EBCDA0142299153E00CDD314B5D6019F219715F5CDF814B5C6FF9FC148A11FD2250901FF01CDD204C32D092A9915444DCDC009010702CDB1040E00CDB707444DCDC009012002CDB1040107002A1E15094E234603CDC009013902CDB104010B002A1E15095E2356EB2929444DCDC009015402CDB1040104002A1E15097E3C6F2600118000CD9E14444DCDC009016F02CDB1042A9715444DCDC009017F02CDB1042A1E154E2346CDC009018E02CDB104010D002A1E15094E2346CDC009019D02CDB104CDA004C9219C15702B71CDA0042A9B15444D111027CD01070E3ACD9004CDAB04C9CD5A05229D15219F1536003E00119D15CDEA14B5CA180A2A9D157D1FD2060A2A9F154DCDCC05CDC3080E01219D15CDC314EB2B7323722334C3E809C921A215732B702B7121A415360021A615360036013AA21521A615BEDA840A21A515360121A31536003E0321A315BEDA720A2AA4152600EB2AA01519E52AA315260001591509D11ABECA690A21A515360021A415342B34C2410A3AA5151FD27D0A3AA615C921A61534C22D0A3E00C921AA153600CD39061E08013901CD190A32A715FE00C2A80A3AAA15D600C6FF9FC921AA15343AA715FE05C2180B3A030032A91521A81536002B36003E0321A715BEDA150B3AA71587874F060021390109444DCD690C01AD02CDB1043AA915E603878721A815864F060021590109444DCD690C3AA815C61032A8153AA915E6FE1F1F32A915CDA00421A71534C2C20AC3460C3AA715FE06C2AE0B01B202CDD20401C802CDD20401FA02CDD204011503CDD204012903CDD20421A71536003E0321A715BEDAAB0BCDA0043AA71587874F060021390109444DCD690C013803CDB10421A81536003E0C21A815BEDAA40BC3850B3AA815C60432A815D26B0BC3A40B0E20CD90043AA7158787878721A815864F060021590109444DCD690CC3770B21A71534C2430BC3460C3AA715FE07C2BF0BCD19083E01C9C3460C3AA715FE08C2CD0BCDDD09C3460C3AA7153D32A7158787878732A815CD39063A5915FE3DCAEF0B013B03CDD2043E01C9CD39062AA815260001590109444D1E04CD190A3D32A815FEFFC2140C014903CDD2043E01C921A91536FC3AA7153D32A715FEFFCA380C3AA915070732A9153AA815878732A815C3190C3AA915210300A621A815B6320300CD39063A5915FE20C2540C3E01C93A5915FE2CCA650C015C03CDD2043E01C9C38C0AC921AC15702B712AAB157EFE3ACA890C2AAB154ECD90042AAB152322AB15C36F0C0E3ACD9004C921AE15702B7121102722B11521B01536003E0011B115CDEA14B5CAFC0C2AAD15EB2AB115CD7F147B32AF152AAD15EBCD811422AD155059210A00CD7F14EB22B1153E00CDD314B5D6019F21B015B62BF57E93C6FF9FC148B11FD2F90C21B01536013AAF15C6304FCD9004C3A00C0E6BCD9004CDA004C9CD5105222015CD3805C6414FCD9004016A03CDB104C90E01CDB707444DCD8F0CC9016D03CDD204CD050DCD1B0DC9CD5A0522B315CD6C0522B51521B71536003E0011B315CDEA14B5CAA50D2AB3157D1FD2860D2AB7154DCDCC05CD050D018103CDB1042AB5157D1FD2780D0E4FCD9004C37D0D0E57CD9004018403CDB104CD1B0D0E0121B315CDC314EB2B7323720E0121B515CDC314EB2B7323722334C3440DCDA004C93A5C00FE00CAB90D3A5C003D4FCDCC05C9CDB305CDA90D211D15360021CC2936FFCD6C131FD2E40D3ACC29FE00C2DA0DC93ACC293D32CC29C3F00D3A5D00FE20C2F00DCD260DC921000022B8157D325C00216800363F216A00363F015C00CD19053A2715FEFFCA43103A2715E6038787878787C6806F260022BA2921CB29360021000022BE293ACB292F01B81511BE29F5CDDD149FC148A11FD2980ECD5D1321C62936013E0B21C629BEDA8E0E2AC6292600EB2ABA2919E52AC6292600EB2ABC2919C10ABECA790E21C629360BC3840E3AC629D60BD6019F32CB293AC6293C32C629C24D0E2ABE292322BE29C32F0E3ACB291FD2A90E2ABE292B22BE29C3600F2AB81522BE292322B815CD5D1311000221B815CDF8149F1110002ABC2919EB210600F5CDF8149F2FC148B11FD2ED0E01A503CDD20421000022BE2921010022B815CD5D132ABE2901BA152909E52ABE29EBE173237221C62936003E0B21C629BEDA2E0F2AC6292600EB2ABA2919E52AC6292600EB2ABC2919C10A773AC6293C32C629C2030F2ABE2901BA1929093E00772336002ABE2901BA1D2909772336002ABE2901BA212909772336002ABE2901BA252909772336002ABE2901BA1929094E2346032ABE29C501BA192909C17123702ABE2901BA252909010F00E52ABA29097ED1CD6514010C00E52ABA2909010400E52A1E15097EE1A66F2600118000CD9E14C109E52ABE2901BA252909C171237021C72936010105002A1E15093EFFCDF514D2D20F21C729360221C62936103E1F21C629BEDA3D10C3F10F3AC72921C6298677D2D70FC33D102AC6292600EB2ABA29197E32C8293AC729FE02C21C102AC629260001010009EB2ABA29193AC829B632C8293AC829FE00CA3A102ABE2901BA212909E52ABE2901BA1D2909EBC1CD7307C3E30FCD2C05C30A0E3E0011B815CDEA14B5C2581001BA03CDD204C35C133ACC29FEFFC293123E0121B815CDF514D2641121010022C0293E0021C029CDF514D2641121000022C02921000022C4292AB8152B2BEB21C429CDF814DA61112AC42901BC1529095E2356EB22BE29CD5D132ABC2922BA292AC42901BA1529095E2356EB22BE29CD5D1321C62936013E0B21C629BEDA54112AC6292600EB2ABA29197E32C929E52AC6292600EB2ABC29197E32CA294FD11AB9D23B112AC42901BA1529095E2356EB22C2292AC42901BC152909E52AC42901BA152909E34E2346E17123702AC42901BC152909E52AC229EBE17323722AC0292322C02921C629360BC34A113ACA2921C929BED24A1121C629360B3AC6293C32C629C2C6101101002AC4291922C429D28810C371103A1D151FD2741101C903CDD204C37711CDA00401D003CDB10421000022C02901B81511C029CDDD14D28D122AC02901BA1529095E2356EB22BE29CD5D13CDA0042E10E52ABC29444D115C00E10A1203132DC2B011215C0036003A1D151FD2E911015C00CDA3053A7F00FE00CADB1101E603CDB104C3E6112A7D00444D111027CD0107CDAB042ABE2901BA2529094E2346111027CD0107CDAB042ABE2901BA2129094E2346111027CD01070E6BCD9004CDAB042ABE2901BA1929094E234611E803CD0107CDAB040E52CD90040E2FCD90040109002ABC29097E071FD249120E4FCD9004C34E120E57CD9004CDAB04CD3805C6414FCD90040E3ACD9004010A002ABC29097E0732C8291FD274120E28CD9004CDC0133AC8291FD283120E29CD90042AC0292322C029C38311CD260DC35C1321000022C02901B81511C029CDDD14D25C13CDE4041FD2B012CD1208C92AC02922BE29CD5D13CDA004CDC0132ACC294D060021171309095E2356EBE90109002ABC29093E80B62ABC290977C31F130109002ABC29093E7FA62ABC290977C31F13010A002ABC29093E80B62ABC290977C31F13010A002ABC29093E7FA62ABC290977C31F13CF12E112F31205132E10E52ABC29444D115C00E10A1203132DC22B13215C003600CD750501EC03CDB1043ACC2987874F060021990109444DCDB1042AC0292322C029C39912C92ABE292929292911CF291922BC29C93A6D00FE20C277133E00C92E04115915016E000A1203132DC27F133A5915D653D6019FF53A5A15D620D6019FC148A11FD2A713211D1536013EFEC91E0401A901CD190A32CC29FE00C2BD13018E03CDD2043E01C921CD2936013E0B21CD29BEDA01142ACD292600EB2ABC29193E7FA632CE29FE20CAF7133ACD29FE09C2F0130E2ECD90042ACE294DCD90043ACD293C32CD29C2C513C9CD3906CD39063A5915FE3DC22F14CD390601F503CDFE051FD22614CDA90DCD6305C32C1401F903CDD204C34814CDA90D1E08013901CD190AFE08C24514CDC308C34814CDBA0DC9C30000C30500C30500CD0500C9C9C969604E23461A816F131A8867C9EB5F1600EB1A856F131A8C67C9EB5F1600EB1AA56F131AA467C9444D2100003E10F529EB9729EB8D916F7C986713D29814091BF13DC28614C9444D2100003E1029EB29EBD2AD14093DC2A514C97E070DC2B314C95E2356EB290DC2BD14C95E2356EB7CB71F677D1F6F0DC2C714C95F16007B956F7A9C67C969604E23461A916F131A9867C96F26001A956F131A9C67C95F16007B965F7A239E57EBC91A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A>80DD +A:DOWNLOAD SUBMIT.COM +U0 +:C3DF0120636F7079726967687428632920313937372C206469676974616C207265736561726368200D0A244572726F72204F6E204C696E6520245355424E6F2027535542272046696C652050726573656E74244469736B205772697465204572726F7224436F6D6D616E6420427566666572204F766572666C6F7724436F6D6D616E6420546F6F204C6F6E6724506172616D65746572204572726F7224496E76616C696420436F6E74726F6C20436861726163746572244469726563746F72792046756C6C2443616E6E6F7420436C6F73652C20526561642F4F6E6C793F242100003922F00521930EF9CDCC02CD8A03CDFE04CD8705C921DD05702B712ADC05EB0E09CD8A05C921E005702B712ADF05EB0E0FCD8D0532DE05C921E205702B712AE105EB0E10CD8D0532DE05C921E405702B712AE305EB0E13CD8A05C921E605702B712AE505EB0E14CD8D05C921E805702B712AE705EB0E15CD8D05C921EA05702B712AE905EB0E16CD8D0532DE05C921EF05732B702B712BD1C1702B71D53AEF053D32EF05FEFFCAA6022AEB05E52AED05C10A772AEB052322EB052AED052322ED05C37F02C921F305702B71012801CDF701012B01CDF70101B605CDF7012AF205444DCDF7012AF005F9C9018100C51E7F01F405CD70022A8000260001F405093600013A01C51E03016500CD7002015C00CD07023ADE05FEFFC20303013D01CDA7022174063680C93E7F217406BED22503015C00CD3D02FE00CA20033E1AC921740636003A74063C3274063D4F0600218000097E327506FE0DC262033AB8053C32B8054F3E39B9D2620321B80536302B7E3C774F3E39B9D2620321B70536302B343A7506D661FE1AD274033A7506E65F3275063A7506C901BB05CD4D02FE00CA8903015301CDA702C9217606360021000022760E217C0E36013A7C0E1FD2800421780E3600CD0903327D0ED61AC6FF9FF53A7D0ED60DC6FF9FC148A11FD26B043A7D0EFE0ACA68043A7D0EFE24C23604CD0903327D0EFE24C2E6032A7D0E4DCDC404C333043A7D0ED630327D0E4F3E09B9D2FE03018D01CDA702C33304217A0E3600CDAD043A7D0EFE00CA2204217D0E35CD81041FD21C04C31204CDAD04C30604CD81041FD233042A790E4DCDC404C32204C368043A7D0EFE5EC26104CD0903D661327D0E4F3E19B9D25604019D01CDA702C35E043A7D0E3C4FCDC404C368042A7D0E4DCDC404C3A6033A7D0ED60DD6019F327C0E2A780E4DCDC404C39A03C92A7A0E260001F405097E32790ED620D6019FF53A790ED600D6019FC148B11FDAAA04217A0E343E01C93E00C92A7A0E260001F405097EFE20C2C304217A0E34C3AD04C9217B0E712A760E2322760E11FF07CD9905D2DE04016401CDA7022A760E017606093A7B0E773A780E3C32780E4F3E7DB9D2FD04017C01CDA702C901BB05CD2D0221DB05360001BB05CD5D023ADE05FEFFC21D0501B701CDA702CD7A05327E0EFE00CA65053A7E0E3280004F06002181000936002A7E0E26000182000936243E00217E0EBED25F05CD7A052A7E0E26000180000977217E0E35C34205CD7803C31D0501BB05CD1A023ADE05FEFFC2790501C601CDA702C92A760E2B22760E017606097EC9C30000C30500C30500CD0500C9C9C95F16007B956F7A9C67C90000000000000000000000000000000000000000000030303120240024242420202020205355420000001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A>00E1 +A:DOWNLOAD DDT.COM +U0 +:01BC0FC33D01434F505952494748542028432920313938302C204449474954414C205245534541524348202020202020444454205645525320322E3224310002C5C51130010E09CD0500C12107007E3D90571E00D521000278B1CA65010B7E121323C35801D1C1E56278B1CA87010B7BE607C27A01E37E23E36F7D176FD283011A841213C36901D12E00E90E10CD0500325F1EC921661E702B712A651EEB0E11CD0500325F1EC91100000E12CD0500325F1EC921681E702B712A671EEB0E13CD0500C9216A1E702B712A691EEB0E14CD0500C9216C1E702B712A6B1EEB0E15CD0500C9216E1E702B712A6D1EEB0E16CD0500325F1EC921701E702B712A6F1EEBC38306000000C34F03C324052A731EEB0E1ECD0500F579CD8F06F1C9FE20C8FE09C8FE2CC8FE0DC8FE7FCA2405C90E0DCD15000E0ACD1500C9CD8C06FE0DCA1805CD1C00CA39000E04217A063620230DC24C000E05217A0677CD8C06CD1C00CA6A00230DCA1805C358003A7A06FE20C9D630FE0AD8C6F9FE10D8C31805CD98063DC21805EB4E2346790504C9CD7D00C21805C9171717E638C917171717E630C9EB2A7A06EB7BBEC2AF00237ABEC82B2B2B0DC2A5000DC90604D5117A061ABEC2CA00231305C2BD00D1C92305C2CA0011F8FF19D1130DC2B7000DC9C5CD3900CA18050E08216006CDA000C218050D79C1C9C5CD3900CA18050E05217206CDB700C218050D79C1C9CDF100FE04CA1805C9CDF100FE03CA1805FE04C03DC9217A06117B060E021A7723130DC225011AFE20C21805772150060E08CDA000C218050D79CD9300C9CD1D01F5CD7D00F1F6C0C91A2A11007723221100C9CD8C06FE0DCA4005FE2ECA4005CD3C00CA18050E1121A605114505CDB700C27E01C350010E0A21CE05CDB700C29201CD5001CD8C00C351010E0621E605CDB700C2AA01CD5001CD7D00CD510178C351010E0121EA05CDB700C2C601CDDB00CD9300470E40CDDB00B1B0C351010E08210A06CDB700C2DC010D79CD9300470E80C3BE010E02211206CDB700C2F4010C0C0CCDDB00CD9300B1C351010E01211606CDB700C21002CDDB00CD9300F606CD5101CD8C00C351010E06212E06CDB700C2360279FE04DA2302C60547CD0701CD9900B0CD5101E6CFFE01C0C3A0010E01213206CDB700C25102CD8C00FE08D21805CD9300F6C7C351010E02213E06CDB700C271020DC265020EC1C367020EC5CD1001CD9900B1C351013A7A06FE4AC28102CD4501F602C38B02FE43C29602CD4501F604CD510179CD510178C35101FE52C21805CD1D01F6C0C351012A0E00D5EB2A0C007B957A9CD2B7022A1300F9C9D17E23220C00C93CE607FE06DAC802C603FE05DACF02C602C6414FC3150047E6F00F0F0F0FC69027CE40274FCD150078E60FC69027CE40274FC3150006044ECD15002305C2F5020E20C315007AE6380F0F0FC9CD0303874F214206094ECD1500234ECD15000E20CD1500C31500CD0303E606FE06C2BE020E53CD15000E50C31500CD2E002A0C007CCDD5027DCDD5020E20CD1500CD1500C9210000392213003A1000B7CA710321FFFF220E003CC271033C3210002A0C00C39703CD9E06C240052110007EB7CA830335CA40052A0C00CDA106CD2E000E20CD1500CD1500CD3B03CDA30257214505011100BECAFD04230DC2A1030E0ABECAE904230DC2AC030E06BECACE04230DC2B703E6C0FE40CAB404FE80CAA5047AE6C7D604CA96043DCA90043DCA7C047AE6C0CA4A047AE607CA3F04D602CA3404D602CA2904D603CA1A047AE608C20B057AE6074F3D21390609CDF302CD0303FE06C29F04213606CDF302C37103213206CDF302CD0303CDD502C371030E43CD1500CD0A03C3D9040E4ACD1500CD0A03C3D9040E52CD1500CD0A03C37103211A067AE607CA0B057AE60F3DCA6E04FE03DA6104D60587874F09CDF302CD2403C37103CDF302CD24030E2CCD1500C3D904211606CDF302CD0303CDBE020E2CCD1500C3F404211206C39904210E06CDF302CD0303CDBE02C371037AE6380F4F21EE0509CDF302C3C50421EA05CDF302CD0303CDBE020E2CCD15007AE607CDBE02C371037987874F21CE0509CDF302CDA302F5CDA30257F15FCD9506C371037987874F21A60509CDF302CDA302CD9206C371037987874F21620509CDF302C37103217606CDF3027ACD9206C37103CD2E000E3FCD15002A1300F921000039221300CD3803221100CD8906CD5A012A1100220C00C32B052A1300F9C900070F171F272F373F76C9E3E9EBF3F9FBC6CED3D6DBDEE6EEF6FE222A323AC3CD454920205350484C44492020584348475043484C5854484C52455420484C5420434D432053544320434D4120444141205241522052414C2052524320524C43204E4F5020435049204F52492058524920414E492053424920494E2020535549204F555420414349204144492043414C4C4A4D50204C444120535441204C484C4453484C444D4F562041444420414443205355422053424220414E4120585241204F524120434D5020494E5220444352204D5649204C58492053544158494E5820444144204C444158444358205253542050535720504F5020505553484E5A5A204E434320504F504550204D20422043204420452048204C204D20412042202020442020204820202053502020505357203F3F3D201E4D06002145C3A206C3AA06C3CF0DC3B60BC3DD0BC3C70BC3050CC32D0CC3900CC3660CC31F0CC9E3224A0FE3C300002A060022A80621A206220100210000220600AF324F0F210001220C00225D0F22870F22B90F21000131B70FE5210200E52B2B22B70FE5E5224D0F3EC33238002186062239003A5D00FE20CAFE06210000E5C3AD0931AF0FCD9309DA0D07218006220600CD150C3E2DCDC70BCDB60BCDDD0BFE0DCAFE06D641DAAB0BFE1AD2AB0B5F160021370719195E2356EBE97E07AB0BAB0BC607AB0B5C087008DA080409AB0BAB0B97075A09AB0BAB0BAB0BAB0B9C097A0AC30ABF0AAB0BAB0BE70AAB0BAB0BE5D5C5AF325B000E0F115C00CDA206C1D1E1C9CD9309D2AB0BCD900C3DC2AB0BCD660C220C00CD0900C3FE06CD9309D2AB0BCD900CCABB07CD660C220C003DCABB07CD660C220E003DC2AB0BAFC3BD073E0C321000CD0600C3FE06CD900CCAE507CD660CDAD507225D0FE67F3DCAE507CD660C3DC2AB0BC3F0072A5D0F7DE6F06F11BF0019225F0FCD150CCD1F0CC2FE062A5D0F22610FCD2E0CCDC50B7ECD050C23CD450CDA19087DE60FC20508225D0F2A610FEBCDC50B1ACD360C132A5D0F7D93C223087C92C223082A5D0FCD450CDAFE06C3F307CD900CFE03C2AB0BCD660CE5CD660CE5CD660CD1C1C97B917A98C9CD41087CB7C2AB0BCD5708DAFE067D0203C36408CD150CCD900CCD660CE5CD660CE5CD660C444DD1E1F3CAA108DA8F0822B90FE67F3DCAA108CDB2083DCAA1085950CDB20831AF0FD1C1F1E1F92AB90FE52AB70FFBC9F5C5214F0F7E34B7CACD08237E234623BBC2CD0878BAC2CD087E1223732372231A773EFF12C1F1C9CD900CFE02C2AB0BCD660CE5CD660CD1E5CD150C19CD2E0CCDC50BE1AF956F3E009C6719CD2E0CC3FE06AF327C00325C00CDDD0B0E09215D0077230DCAAB0BCDDD0BFE2ECA2609FE0DC213090DCA3009362023C326090E04FE2EC24B09216500CDDD0BFE0DCA4B0977230DCAAB0BC33A090DCA5509362023C34B093600C3FE06CD4108CD5708DAFE060A037723C35D092165007EE67FFE48C0237EE67FFE45C0237EE67FFE58C9EB2A870F7D937C9AEBC9CD8109D022870FC9E5210000CD8109E1C9CD900C210000CAAC093DC2AB0BCD660CE5CD6B07FEFFCAAB0BCD6A09CAE109E111000119E5115C000E14CDA206E1B7C2460A1180000E801A1377230DC2D309CD8B09C3C009CD740BFE1ACAAB0BDE3AC2E10957E1E5CD260A5FCD260AF5CD260AC14F097BB7C20C0A606922B90FC3460ACD260ACD260A77231DC20F0ACD260AF5CD8B09F1C2AB0BC3E109C5E5D5CD740BCD590C07070707E6F0F5CD740BCD590CC1B047D1825778E1C1C90E0CCDA206216F0A7EB7CA5A0ACDC70B23C34E0ACD150C2A870FCD2E0CCDC50B2AB90FCD2E0CC3FE060D0A4E4558542020504300CD900C3DC2AB0BCD660CCD150CE5CD2E0CCDC50BE17EE5CD050CCDC50BCDB60BCDDD0BE1FE0DCABB0AFE2ECAFE06E5CD930C3DC2AB0BCD660C7CB7C2AB0B7DE17723C3840AAFC3C50A3EFF324C0FCD900C210000CADE0A3DC2AB0BCD660C7DB4CAAB0B2B224D0FCD440DC38508CDDD0BFE0DC2F50ACD440DC3FE06010B0021B30DBECA080B23040DC2FB0AC3AB0BCDDD0BFE0DC2AB0BC5CD150CCD1A0DCDC50BCDB60BCD900CB7CAFE063DC2AB0BCD660CC178FE05D2590B7CB7C2AB0B7DFE02D2AB0BCDE30C67413EFECD530BA441677DCD530BB412C3FE0605C807C3530BC2690B7CB7C2AB0B7D21B40F77C3FE06E5CD010DD1732372C3FE06E5D5C53A5B00E67FCA940B16005F218000197EFE1ACAA60B215B0034B7C3A70B0E14115C00CDA206B7C2A60B325B00C37F0B37C1D1E1C9CD150C3E3FCDC70BC3FE060E0A11650FCDA20621670F22630FC93E20E5D5C55F0E02CDA206C1D1E1C9FE7FC8FE61D8E65FC9E521660F7EB73E0DCAF40B352A630F7E2322630FCDD40BE1C9FE0AD2000CC630C3C70BC637C3C70BF51F1F1F1FE60FCDF60BF1E60FC3F60B3E0DCDC70B3E0AC3C70BC5D5E50E0BCDA206E601E1D1C1C9EB7CCD050C7DC3050CFE7FD2400CFE20D2C70B3E2EC3C70BEB2A5F0F7D936F7C9AEBC9FE0DC8FE2CC8FE20C9D630FE0AD8C6F9FE10D8C3AB0BEB5E235623EBC9EB210000CD590C29292929B56FCDDD0BCD500CC2710CEBC973237223E521560F34E1C9CDDD0B21560F360023FE0DCAD50CFE2CC2AE0C3E8032560F110000C3B10CCD6D0CCD850CFE0DCAD50CCDDD0BCD6D0CCD850CFE0DCAD50CCDDD0BCD6D0CCD850CFE0DC2AB0B11560F1AFE81CAAB0B13B7070FC9E521C30D581600194E21B30F7EEBE1C9CDE30C0DCAFE0C1FC3F60CE601C9D60621BE0D5F1600195E16FF21BB0F19C9CD010D5E2356EBC97ECDC70B78FE05D22B0DCDF30CCDF60BC9F53E3DCDC70BF1C23D0D21B40F7ECD050CC9CD120DCD2E0CC921B30D0600CD150CC5E5CD1A0DE1C1042378FE0BD2660DFE05DA4C0DCDC50BC34C0DCDC50BCD850EF5D5C5CD9309D2860D2AB90F220C0021100036FFCD0600C3AF0D2B225F0F2AB90F7ECD050C23CD450CDAAF0DF5CDC50BF1B3CAAB0D5E2356EBCD2E0CC3AF0D7ECD050CC1D1F1C9435A4D4549414244485350F6F4FCFAFE0107080305210000224D0FC9F322B70FE12B22B90FF521020039F131B70FE5F5C5D52AB90F7EFEFFF5E5214F0F7E3600B7CA040E3D47235E2356237E1278C3F30DE1F1CA280E2322B90FEB21A8064E2346CD5708DA280ECDC80D2A4A0FEB3E82B737C38508FB2A4D0F7CB5CA4E0E2B224D0FCD1F0CC24E0E3A4C0FB7C2480ECD850EC38508CD440DC38508CDC80D3E2ACDC70B2AB90FCD9309D2620E220C00CD2E0C2AB70F225D0FC3FE06110D00212F0F7EA023BE23CA810E141DC2740E5A1600C92AB90F4623E5CD6E0E21490F73219C0E19195E2356EBE9B80EE00EB80EE00EBE0EF20E040F260F260F230F230F190F260F140FCDCE0EC2290FCDD90EC3290F3AA806BBC03AA906BAC9C1E15E235623E5C5C3C40E2AB50F5E2356C9CDCE0ECAED0EC1C53E02C32B0FD1D5C3290F78FEFFC2FC0EAFC32D0FE6385F1600C3290F2AB70FEBCDC40EC2290FC3BE0EC3290FD1D5C3290FCDD90EC1C53E02C32B0FD113D5D113D53E013C37E1C9FFC3C7C2FFCDC7C4FFC9C7C7FFE9C706C7C6CF01E722C7C0F7D303CD3908CD2E08CD1308FE1AC25918C9C3DB17C9018F03CDAF09C92A201D4DCD5E08119E0301E11DCDFD1532B61D01E11DC51E0301551FCD180A3AE11DE67F32E11D3AE21DE67F32E21D01A203CDEA1501D81DCDB30801D81DCDE3083A5F1EFEFFC2B31801A503CDAF0921F81D360021000000209000400008211092102112424800091002400010400808410200824248090920422101200822121110108842484924249242492442492084248410920910924849092082440424909084910848909084844424242048080408080004002084200842109204212444240488222492422490924408410821021011104108420808909249248490921248204201249092490924924808924908240891048112481124892120249249200000000000000000000000000000000000000000000000000000000000000000000000000000002492492484012481049208021010020492410921084100AAAAAAAAAAAAA0004092249249248922212492482449002492491120922221092490911002124124888092091090110208042000084884480090040090844102084122084920400000080442420891092000840024908411101092412224120090002424492492000892241248211121022120890892424822092112491120420902042090888810020010101104042424900100008110902108020842020044210880000004001009200824042104909242490904020204440401080412408911221080212490492424488910812200000004210081010200108882490110892449248492492410108104880555555524921000902408411012249090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>0020 +A:DOWNLOAD DISPLAY.COM +U0 +:C32101446973706C6179205665722E312E302C204F63742E2C33302C31393830243159082E21118807015C000A1203132DC22C01CD5F03018807CD97023A5B07FEFFC24E01010008CD4C03CD0D072A7A07444DCD8703CD6705CDC3063A7407FE0DC26D01CD6705C35901C385010E42CDEF061FD27901C334010E45CDEF061FD28501CD0D0721770736002101002284073A7407FE2DC2A0012177073601CD9F063A7407D6303278074F3E09B9DAE7012A78072600228407CD9F063A7407D6303278074F3E09B9DAE7012A8407292929E52A840729C109E52A78072600C109228407CD9F06C3BA013A7407FE4CC2FD012A77074D2A8407EBCD5004C34D023A7407FE50C237023E00118407CD5007B5CA2B021117002A8407CD2F072284072A77074D2A8407EBCD5004C334022A7A07227E07228607C34D023A7407FE44C24A022A8407444DCD9505C34D02C35302CD6705C35901011008CD4C03C35901FB761100000E01CD0A07C9215C07712A5C072600EB0E02CD0A07C9215D07712A5D072600EB0E05CD0A07C9215F07702B712A5E07EB0E0ACD0A07C9216107702B712A6007EB0E0FCD0A07325B07C9216307702B712A6207EB0E10CD0A07325B07C9216507702B712A6407EB0E11CD0A07D6FFC6FF9FC9216707702B712A6607EB0E13CD0A07C9216907702B712A6807EB0E14CD0A07325B07C9216B07702B712A6A07EB0E15CD0A07325B07C9216D07702B712A6C07EB0E16CD0A07C91100000E19CD0A07C9216E07712A6E072600EB0E0ECD0A07C9217007702B712A6F07EB0E1ACD0A07C90E0DCD67020E0ACD6702C9217207702B712A7107EB0E09CD0A07CD4103C92173073600215908227A07227E072280072A7A07228607219407360021A80736002A0600227C07C9212B08702B713A73071FDA4F042A2A08222C08117C07CD5307EB218000CD1007EB222E08215B0736003E00112E08CD5007B5C6FF9FF53A5B07D600D6019FC148A11FD2EE032A2C08444DCD3103018807CDE2021180002A2C0819222C082A2E082B222E08C3B0033A5B07FE00CAFB0321730736FF2A2C08228007018000CD31033A73071FD22F04010001112C08CD4807EB2B7323722A2C087EFE1ACA2F042A2C0823222C08C31C042A2C082B222C082A2C087EFE0ACA49042A2C082B222C08C336042A2C08228207C9213208722B732B713A3008FE00C29B043E00113108CD5007B5C6FF9F018207117E07F5CD43079FC148A11FD298042A7E077EFE0AC28E042A31082B2231082A7E0723227E07C36004C3ED042A3108232231083E00113108CD5007B5C6FF9F117A07017E07F5CD43079FC148A11FD2DA042A7E077EFE0AC2D0042A31082B2231082A7E072B227E07C3A204117A07017E07CD4307D2ED042A7E0723227E072A7E07228607C92134083600018207117E07CD4307D266052A7E077E323308FE0ACA5A053A3308FE09CA27052A33084DCD670221340834C350053A3408E6074F3E079132360821350836003A3608213508BEDA50050E20CD6702213408342334C238052A7E0723227E07C305052A7E0723227E070E0ACD6702C92A8607223808227E0721370836013E17213708BEDA8805CDF40421370834C275052A7E072286072A3808227E07C9213B08702B713E00113A08CD5007B5C2BC05017E07118007CD43072240082A7E07223E08C32B062A7A07223C083E00113A08CD5007B5CA19062117002242083E00114208CD5007B5CA0F062A3C087EFE0AC2F0052A42082B2242082A3C0823223C08118207CD5307D20C06210000224208210100223A08C3D4052A3A082B223A08C3C205013C08118007CD43072240082A3C08223E082A4008E52A3E08444D2A7A07EBE10A1203132B7CB5C23906017A07113E08CD4307EB23732372113E08017E07CD4307D26E06014008117E07CD4307EB2B732372C374062A7A07227E072A7E07228607014008118007CD4307EB2B732372014008118207CD4307EB2B7323722A8007444DCD8703C92A7507260001A907097E3274074F3E5AB9D2BB063A7407E6DF3274073A75073C327507C90E2ACD670201A907CD87020E0ACD67023AAA07327607FE00C2E606217407360DC3EE062175073602CD9F06C9214408712144083A740796D6019FF53A7607D601D6019FC148A1C9C30500C30000444D2100003E10F529EB9729EB8D916F7C986713D22907091BF13DC21707C9444D2100003E1029EB29EBD23E07093DC23607C969604E23461A916F131A9867C96F26001A956F131A9C67C96E06014008117E07CD4307EB2B732372C374062A7A07227E072A7E07228607014008118007CD4307EB2B732372014008118207CD4307EB2B7323722A8007444DCD8703C92A7507260001A907097E8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002046696C65206E6F7420666F756E642420496C6C6567616C20636F6D6D616E64241A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A>00E5 +A:DOWNLOAD DUMP.COM +U0 +:21000039221502315702CDC101FEFFC21B0111F301CD9C01C351013E80321302210000E5CDA201E1DA5101477DE60FC24401CD7201CD59010FDA51017CCD8F017DCD8F01233E20CD650178CD8F01C32301CD72012A1502F9C9E5D5C50E0BCD0500C1D1E1C9E5D5C50E025FCD0500C1D1E1C93E0DCD65013E0ACD6501C9E60FFE0AD28901C630C38B01C637CD6501C9F50F0F0F0FCD7D01F1CD7D01C90E09CD0500C93A1302FE80C2B301CDCE01B7CAB30137C95F16003C321302218000197EB7C9AF327C00115C000E0FCD0500C9E5D5C5115C000E14CD0500C1D1E1C946494C452044554D502056455253494F4E20312E34240D0A4E4F20494E5055542046494C452050524553454E54204F4E204449534B24EA21F5C5D5E5590E02CD0610E1D1C1F1C9FE20C8FE09C8FE2CC8FE0DC8FE7FCA3C05C90E0DCD15000E0ACD1500C9CD0907FE0DCA2A05CD2400CA41000E04218B063620230DC254000E05218B0677CD0907CD2400CA7200230DCA2A05C360003A8B06FE20C9D630FE0AD8C6F9FE10D8C32A05CD4100CA2A05110000010000218B06097EFE20CAB000CD78006B62292929295F160019EB0379FE04C29100424B7B0504C9CD8500C22A05C921050036C336C3210000220600C9171717E638C917171717E630C9EB2A8B06EB7BBEC2E700237ABEC82B2B2B0DC2DD000DC90604D5118B061ABEC20201231305C2F500>001A +A:DOWNLOAD ED.COM +U0 +:C3C00120434F505952494748542028432920313937392C204449474954414C205245534541524348204449534B204F52204449524543544F52592046554C4C2446494C45204558495354532C204552415345204954244E45572046494C45242A2A2046494C4520495320524541442F4F4E4C59202A2A242253595354454D222046494C45204E4F542041434345535349424C452442414B24242442414B2424242D28592F4E293F244E4F204D454D4F525924425245414B202224222041542024316D1A014D1D110600CDF219226D1A0E0ACDD7192BEB21381B737E3C4F060060690E08CDCD1922391B1100042A391B19116D1ACDFD19D2020201A801CD0A0CCD000001391B116D1ACDED192BEB2B7323720E0121391BCDD319EB2B73237201391B110600CDED19223B1B01391B113B1BCDED19225E1B2A6D1A014D1D0936002A6D1A2B226F1A0E01216F1ACDD319EB2373237221101D360021661B360021141C36013A5D00D620D6019FF53A6D00D620C6FF9FC148B11FD27D02CD2D0D3A5C0032641BFE00C29102CDDE0C32641BC39D023A641B3D32641B215C0036003A6C0032651BFE00C2B1023A641B32651BC3B8023A651B3D32651BCD450ECD550D214D1D360A21010022221D2A6F1A22241D21681B3600C31A03316D1A21061D3623C3F502316D1A21061D363FC3F502316D1A21061D363E316D1A21661B360001B201CD0A0C2A061D4DCDCB0B01BA01CDFA0B2A211D4DCDCB0BCDEF0B316D1A210D1D360121071D3600210C1D3600CDC6183A0C1C32081D0E45CDD5181FD26203CDBD1521651B3A641BBECA5C033A0400E6F0F53A651BE60FC148B1320400CD070DC3EE0A0E48CDD5181FD28603CDBD153A651B32211D3A641B32651B3A211D32641BC3BB02C3EE0A3A211DFE49C2AC05218A1B3A0C1C96D6019FF53A071DD600D6019FC148A1320C1D1FD2AE03CD58113A681B32691BCD03161FD290053A211DFE00CA8D053A211DD615D6019FF53A211DD618D6019FC148B1F53A211DD612D6019FC148B11FD22C04210000221C1D21201D3600237EFE12C20204CDEF0BCD4617C32904CDB712CD58143A211DFE15C21904CDEF0BCD5811C329043A691B21681BBED22904CD390BC31904C365053A211DFE08C2CA043A681B326A1B4F3E00B9D246040E20CD4C103E0121221DCD051A9FF53A691B216A1B969FC148A11FD2BC042A221D2B014D1D097EFE0ACABC04CDB21321661B360121681B3600210000221C1D21201D3600CD461721661B36003A681B326B1B21691BBED2A0043A691B326B1B3A6A1B32681B3A6B1B21681BBED2B604CD390BC3A6043A681B326A1B21211D36003A6A1B32681BC365053A211DFE7FC20A053E0111221DCDFA19B5C2E104C3F502CDB2132A221D014D1D097E32211D4FCDCB0B3A211DFE0AC202052A101C2B22101C21211D3600C365052A211D4DCD9B0B2F1FD224050E5ECD4C103A211DC6404FCD4C103A211DFE0CC23205CD9118C365053A071DFE00C262053A211DFE20DA4C053A681B3C32681BC362053A211DFE09C262053A681BE6074F3E089121681B8677CDD9153A211DFE0AC27005CD58113A211DFE0DC2850521211D360A0E0ACD4C10C38A0521211D3600C3BB03C3B4033A211DFE1ACA9B05CD91183A141C210C1DA61FD2A905CDEF0BC3EE0A0E4FCDFC181FD2B805C3BB023A211DFE52C2860621941A3601CD4712CD03161FD2E1053E0821941ABED2DB05C3D702CD1D17C3C80521211D36203A941AD601D6019F32061D1FD20E062E0811741A01961A0A1203132DC2FD0501951ACD3F0CC31D063E0821941ABEDA1D06CD1D17C30E06217F1A360021931A360001731ACD2C0C21941A36803A781BFEFFC2420621061D364FC3F502CD551232211DFE1ACA5306CDD915C3420621471D36003A061D1FD2830621361B3A471DBED283062A471D260001B61A097E32211D3A471D3C32471DCDD915C35F06C3EE0A0E51CDFC181FD29B06013D1BCD650CCD070DC3EE0ACD62183A211DFE2DC2AE06CDC61821201D36003A211DFE23C2BF06CD8712CDC618C3FC06CD3B191FD2DC06CD4A193A211DFE3AC2D90621211D364CCD7619C3FC063A211DFE3AC2FC06CDC618CD4A19CD76193A201DFE01C2FC062A1C1D23221C1DCD8E121FD2080721201D36003A211DFE42C2290721201D3E01967721010022261D2A6F1A22281DCD5214C3EE0A3A211DFE43C23A07CD6514CD5214C3EE0A3A211DFE44C24B07CD6514CD5814C3EE0A3A211DFE4BC25C07CDB712CD5814C3EE0A3A211DFE4CC26A07CD5E14C3EE0A3A211DFE50C29A07CD8E121FD2870721201D3601CDDA17CD4617C39707CDA2121FD29707CDEF17CD3A18C38707C3EE0A3A211DFE54C2A807CD4617C3EE0A3A211DFE55C2BE073A201DD601D6019F32101DC3EE0A3A211DFE56C2FC07CD8E121FD2EE0701221D11241DCDED19444DCDA9100E2FCDCB0B2A6F1A444DCDA910CDEF0BC3F9073A201DD601D6019F32141CC3EE0A3A211DFE0DC228083A081DD601D6019FF53A071DD600D6019FC148A11FD22508CD5E14CD6218CD4617C3EE0A3A201DD601D6019FF5CD8E12C148B11FD2EB0A3A211DFE41C2790821201D36012A221D22261D2A6F1A22281DCD5214CD8E121FD26108CD6E18CDA2121FD26E08CDC414C3610821201D3600CD5214C3E80A3A211DFE46C29408CDFC16CDA2121FD29108CD0B17C38408C3E80A3A211DFE4AC21A09CDFC16CD24163A041D32051DCD2416CDA2121FD21709CD0B173A031D3D32081D3A081D3C32081D21051DBED2DD082A081D2600019F1C097E32211DCDD915C3BC082A221D22491D2A051D4D2A041DEBCD6F162F1FD2F608C3D70221051D3A041D9611221DCDFA1922261D21201D3600CD52142A491D22221DC3AB08C3E80A3A211DD64DD6019FF53A071DD600D6019FC148A11FD27C0921091D36FF3E01111C1DCDFA19B5C24609CD9B12CD6511F53A091D3C32091D4F0600211F1C09C1487179FE0DCA6409C346093A091D32071D21091D3600E52A1C1DEBE123732372C3E80A3A211DFE4EC2DD09CDFC16CDA2121FD2DA092A031DEB0E00CD6F162F1FD2D709CDC40C1FD2A609C3F502CDE117CDB615CD6E1821201D360021010022261DCD5214CDE81721201D3601016F1A11241DCDED19DAD409C3D702C38E09C38709C3E80A3A211DFE53C2300ACDFC16CD2416CDA2121FD22D0ACD0B173A031D32081D11221DCDFA19EB2B73237221041D3A081DBED22A0A2A081D2600019F1C097E32211D3A081D3C32081DCDD915C3060AC3EB09C3E80A3A211DFE57C23E0ACD7615C3E80A3A211DFE58C2B30ACD5A0ECD8E121FD25C0ACD450E01951ACD650CC3B00A3A371B2F1FD2830ACD450E21371B360101951ACD650C01951ACD950C3A781BFEFFC2830ACD2D0DCDB7122A261D224B1D11281D014B1DCDED19DAB00A2A4B1D014D1D094ECD940F1101002A4B1D19224B1DD28C0AC3E80A3A211DFE5AC2DD0ACD8E121FD2CD0ACDF30AFE1AC2CD0AC3F502CDA2121FD2DA0ACD3A18C3CD0AC3E80A3A211DFE00CAE80AC3E202C3EE0AC3E202C32703FB761100000E01CD0500C921671B713A661B1FD2080BC92A671B2600EB0E02CD0500C9216C1B713A6C1BFE20DA240B21681B343A6C1BFE0AC2310B21681B36002A6C1B4DCDFC0AC93A681BFE00C2420BC90E08CD140B0E20CD140B0E08CD140B21681B3535C9216D1B713A6D1BD609D6019FF53A681BE6074F3E0791C148A1326E1B791FD27D0B216D1B3620216F1B36003A6E1B216F1BBEDA9A0B2A6D1B4DCD140B216F1B34C2820BC921701B713A701BFE20DAAA0B3E01C93A701BD60DD6019FF53A701BD60AD6019FC148B1F53A701BD609D6019FC148B1C921711B712A711B4DCD9B0B1FDAE70B0E5ECD570B3A711BC64032711B2A711B4DCD570BC90E0DCDCB0B0E0ACDCB0BC921731B702B712A721BEB0E09CD0500C921751B702B71CDEF0B2A741B444DCDFA0BC921771B702B712A761BEB0E0ACD0500C9217A1B702B712A791BEB0E0FCD050032781BC9217C1B702B712A7B1BEB0E10CD050032781BC9217E1B702B712A7D1BEB0E11CD050032781BC921801B702B712A7F1BEB0E13CD0500C921821B702B712A811BEB0E14CD0500C921841B702B712A831BEB0E15CD0500C921861B702B712A851BEB0E16CD050032781BC921881B702B712A871BEB0E17CD0500C921891B368001891BCD1C0CC91100000E0BCD05001FD2DB0C1100000E01CD05003E01C93E00C91100000E19CD0500C9210D1C712A0D1C2600EB0E0ECD0500C9210F1C702B712A0E1CEB0E1ACD0500C93A371B1FD2140D01951ACD650CCD0000C921161C702B712A151C444DCD0A0CCDEF0BCD070DC9013D1BCD3F0C012901CD180DC921181C702B712E03E52A171C444D11461BE10A1203132DC24C0DC92A391B22601B21000022621B2168003600216A003600217C0036002E21113D1B015C000A1203132DC2780D21651B3A641BBECAA50D2A651B4DCDE70C015C00CD520C3A781BFEFFCAA50D014001CD180D2A641B4DCDE70C015C00CD2C0C3A781BFEFFC2D70D015C00CD950C3A781BFEFFC2CB0DCD2D0D015601CD0A0CCDEF0BC3F90D3A6500071FD2EB0D015F01CD0A0CCDEF0BC3F90D3A6600071FD2F90D017701CD180D019401CD3A0D013D1BCD650C21651B3A641BBECA1C0E2A651B4DCDE70C013D1BCD650C019701CD3A0D013D1BCD650C013D1BCD950C215D1B36003A781BFEFFC23E0ECD2D0D21010022101CC921371B360021A11A360021B51A360021361B3600C92A641B4DCDE70C01B61ACDF70CC9CDD30E2A641B4DCDE70C21191C36003A381B21191CBEDACF0E2A601BEB2A3B1B19444DCDF70C015C00CD750C32781BFE00CABB0E3E0121781BBED2A80ECD2D0D2A601BEB2A3B1B19361A3A381B32191CC3C50E1180002A601B1922601B3A191C3C32191CC2770ECDD30EC921000022601BC901391B11601BCDED19DAE90ECD680E2A601BEB2A3B1B197E321A1CFE1ACA010F2A601B2322601B3A1A1CC92A651B4DCDE70C0E0721621BCDD3192BEB211C1C737BFEFFC2210FC9CD660F211B1C36003A1C1C211B1CBEDA620F2A621BEB2A5E1B19444DCDF70C013D1BCD850CFE00CA4E0FCD2D0D1180002A621B1922621B3A1B1C3C321B1CC2290FCD660FC921000022621BC9211D1C7101391B11621BCDED19DA800FCD050F2A621BEB2A5E1B193A1D1C772A621B2322621BC9211E1C713A361BFE80DAB60FCD5A0E01951ACD850CFE00CAB10FCD2D0D21361B36002A361B260001B61A093A1E1C773A361B3C32361BC9214A1B36002A621B7DE67FFE00CAEA0F3A4A1B3C324A1B0E1ACD6D0FC3D00FCD050F013D1BCD3F0C3A781BFEFFC2FE0FCD2D0D019A01CD3A0DCD3B102A641B4DCDE70C2E10113D1B015C000A1203132DC21610013D1BCDA80CCD3B10019D01CD3A0D2A651B4DCDE70C013D1BCDA80CC92E10114D1B013D1B0A1203132DC24310C9210E1D713A071DFE00CA5910C92A0E1D4DCDCB0BC921111D713A111DD6619F2FF53E7A21111D969F2FC148A1C921121D712A121D4DCD61101FD28E103A121DE65FC93A121DC921131D713A0F1D1FD2A5102A131D4DCD7910C93A131DC921151D702B7121102722181D21171D36003E0011181DCDFA19B5CA18112A141DEB2A181DCDAA197B32161D2A141DEB2A181DCDAA1922141D2A181DEB210A00CDAA19EB22181D3A161DD600C6FF9F21171DB61FD2101121171D36013A161DC6304FCDCB0BC315110E20CDCB0BC3BA10C9211B1D702B713A141C2F1FD22811C92A1A1D444DCDA9100E3ACDCB0B0E20CDCB0B3A0C1D1FD249110E20CDCB0BC34E110E2ACDCB0BC92A101C444DCD1911C93A071DFE00CA6111C9CD4F11C93E0021071DBED2BA11CDC40C1FD27811C3D70221071D3A091DBEDAA6113E00110A1DCDFA19B5CAA1112A0A1D2B220A1D3E00CDE319B5C2A111C3D70221091D36003A091D3C32091D3D4F0600211F1C094ECD9210C93A0C1D1FD2C911CDF30A4FCD9210C93A0D1D1FD21712210D1D36003A681BD600D6019F21141CA61FD20012016F1A11241DCDED19DAFA11010000CD1911C3FD11CD4F11C305120E2ACDCB0BCDB80C210C1C36000E0ACDCB0B21681B3600218A1B3A0C1C96D6019F320D1D1FD233122A0C1C2600018B1B09360D3A0C1C3C320C1C3D4F0600218B1B094ECD9210C92A641B4DCDE70C018000CDF70CC93A941AFE80DA7312CD471201731ACD750CFE00CA6E123E1AC921941A36003A941A3C32941A3D4F0600218000094ECD9210C921FFFF221C1DC93E00111C1DCDFA19B5D6019FC9210000221C1DC9CD8E122F1FD2B4122A1C1D2B221C1D3E01C93E00C921010022121C3A201DFE00C2DF122A1C1D23221C1D2A221D222A1D210000222E1D2B222C1DC3F1122A241D222A1D2A6F1A222E1D210100222C1D21331D36013A331D1FD27B13012E1D112A1DCDED19B5C6FF9F32321D2A2C1DEB2A2A1D1922301D014D1D09F57ED60AC6FF9FC148A11FD233132A301D222A1DC3FD122A121C2B22121C2A1C1D2B221C1D3E00CDE319B5C6FF9F32331D3A321D2F1FD26B1321331D3600012C1D112A1DCDED19EB2B732372C378133A331D1FD278132A301D222A1DC3F6123A201DFE00C293132A2A1D22261D2A221D2B22281DC3A1132A241D2322261D2A2A1D2322281DC92A221D2322221DC92A241D2322241DC92A221D2B22221DC92A241D2B22241DC92A101C2322101CC921341D71114D1D2A221D19E52A241D19E53A201DFE01C212142A281D791FDAF11322241DE1E1C919444DE1D17D917C98D24314237EFE0AC20D14E52A101C2322101CE11213C3F6132A261D19444DE1D17993789AD243141B1AFE0AC23114E52A101C2B22101CE1F53A341D1FD23F14F1772BC31A14F1C31A14D511B3E21922241DE11922221DC9C90E01CDCA13C90E00CDCA13C9CDB712CD5214C93A201DFE00C297142A241D22281D11221D011C1DCDED19D2881421010022261DC39414011C1D11221DCDED1922261DC3C3142A221D22261D01241D116D1ACDED19111C1DCDFD19DAB8142A6F1A22281DC3C3142A1C1DEB2A241D1922281DC901241D11221DCDED19DAD314C3ED02CDDA0E4FCD041532361DFE1AC2E614CD9B12C92A221D014D1D093A361D77CDA2133A361DFE0AC20015CDC213C9C3C414C921371D713A101D1FD217152A371D4DCD9210C93A371DC9016F1A11241DCDED19DA2B15CD9B12C9CDAA132A241D014D1D097E32381D4FCD6D0F3A381DFE0AC24915CDC213C9C31B15C9CD8712CDA2121FD2751501241D116F1ACDED1911711ACDFD19DA6F15CD9B12C37215CD1B15C35015C921201D360021010022261D2A241D22281DCD5214CD8E121FD29415CD4D15CDA2121FD2A115CD1B15C3941501281D11241DCDED19D2B51521201D3601CD5214C9CD8712CD7615C9CDB615CDDA0E32211DFE1ACAD5152A211D4DCD6D0FC3C015CDCB0FC901241D11221DCDED19B5C2E915C3ED022A221D014D1D093A211D77CDA2133A211DFE0AC20216CDC213C9CD651132211DD61AD6019FF53A211DD60DD6019FF53A0C1D2FC148A1C148B12FC9CD03161FD251163A211DFE0CC2401621211D360DCD521621211D360A3A211DFE00C24B16C3E202CD5216C32416C92A041D2600019F1C093A211D773A041D3C32041DFE64DA6E16C3ED02C9213A1D732B712A241D223B1D213E1D36003A3E1D2F113B1D016F1AF5CDED199FC148A11FD2E7162A3B1D2322281D223B1D3A391D323D1D2A3D1D2600019F1C09E52A281D014D1D09D11A96D6019F213A1DF53A3D1D96D6019F323E1D2FC148A11FD2E4163A3D1D3C323D1D2A281D2322281DC3A616C380163A3E1D1FD2F8162A281D2B22281DCD52143A3E1DC921041D3600CD24163A041D32031DC92A031DEB0E00CD6F162F1FD21C17C3D702C92A211D4DCD7910F53A941A3C32941A3D4F060021731A09C14871C92A121CEB2A101C19444DCD1911C9CDB712210C1D36013A201DFE01C2651721000022121C2A221D223F1DC36B172A261D223F1D2A3F1D2B014D1D097E32411DD60AD6019FF53A681BD600C6FF9FC148A11FD28F17CDEF0B2A261D223F1D11281D013F1DCDED19DAD9173A411DFE0AC2BD17CD38172A121C2322121CCDC40C1FD2BD17C3D7022A3F1D014D1D097E32411D4FCDCB0B1101002A3F1D19223F1DD29517C9211700221C1DC92A1C1D221E1DC92A1E1D221C1DC9CDE117CDDA17CD5E143A201D32421D21201D3601CDDA17CD46173A421D32201D016F1A11281DCDED19B5D6019FF53E0111261DCDFA19B5D6019FC148B11FD23618CD9B12C33918CDE817C921431D36003E1321431DBEDA6118CDC40C1FD25218C3F5023EFACD111A3A431D3C32431DC23F18C921201D3601210100221C1DC9CD8712CDA2121FD2901801711A11221DCDED19DA8A18CD9B12C38D18CDC414C37118C921211D360DCDD91521211D360ACDD915C9210F1D36012A211D4DCD611032441D2A211D4DCD921032211D3A441D2F21101DB62B77C9210F1D3600CD651132211DCDA218C921451D7121451D3A211D96D6019FF53A8A1BD601D6019FC148A1F53A071DD600D6019FC148A1C921461D712A461D4DCDD5181FD23819CDEF0B2A461D4DCDFC0A11A0010E09CD0500CDF30A4FCD791032461DCDEF0B3A461DFE59CA3519C31A033E01C93E00C93A211DD63032481D4F3E09919F2FC9210000221C1DCD3B191FD275192A1C1D292929E52A1C1D29C109E52A481D2600C109221C1DCDC618C35019C911101C011C1DCDED19D2981921201D360101101C111C1DCDED19EB2B732372C3A91921201D3600011C1D11101CCDED19221C1DC9444D2100003E10F529EB9729EB8D916F7C986713D2C319091BF13DC2B119C95E2356EB290DC2CD19C95E2356EB7CB71F677D1F6F0DC2D719C95F16007B956F7A9C67C969604E23461A916F131A9867C96F26001A956F131A9C67C95F16007B965F7A239E57EBC9060C480DC2141A3DC2131AC900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020204C4942000000000000000000000000000000000000000000000058242424242424244C49420000001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A>0073 +A:DOWNLOAD ASM.COM +U0 +:3100022A060022CD01C3000220434F5059524947485428432920313937382C204449474954414C2052455345415243482000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F02000000000000000F020000000000000000000000000000000000000000000000000000000000000000000000000000000000000C3E00CC3A10DC3CA0DC3340EC3AA0EC3DE0EC3BC0CC3000FC32F0FC34C10C3390F000000000000000000000000000000000000000000000000000000000000000041534D00000000000000000000000000000000000000000000000000000000000050524E00000000000000000000000000000000000000000000000000000000000048455800000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000213402BEC8775F0E0ECD0500C9237EFE20CAB80CDE41C93A3402C97ECDDE0E7E23FE0DC2BC0C3E0ACDDE0EC9115C0006091AFE3FCABB0D77231305C2D20CC921A00FCDBC0CC33F0D0E0FCD0500FEFFC021B90FCDBC0CC300000E10CD0500FEFFC0212910CDBC0CC300000E13C305000E16CD0500FEFFC021D00FCDBC0CC300003A3502CDA10CC93A3602FE19C8FE17C93A3602CDA10CC93A3702CDA10CC93A5C00FE20CABB0D0E19CD0500323402216400CDAE0C323502CDAE0C323702CDAE0C323602213802CDCD0CCD280DCA830D215902E5E5CDCD0CCD310DD1CD0B0DD1CD100D3A3702FE19CA9E0D217A02E5E5CDCD0CCD380DD1CD0B0DD1CD100DC30011210004229B02AF324402325802322302CD210D113802CDE90CC921E30FCDBC0CC300007ABCC07BBDC9C5D5E52A9B02110004CDC40DC2190ECD210D210000229B020608219D02C5E50E14113802CD0500E1C1B70E80C20D0E1180000E801A7713230DC2FE0D05C2E70DC3190EFE03D22B0E361A230DC2120E119D022A9B02E523229B02E1197EE1D1C1C921FA0FCDBC0CC30000C5473A3602FE19CA510EFE1778C24A0ECDDE0EC3510ED5E5CD530EE1D1C1C92A9D06EB219F061977EB23229D06EB210003CDC40DC0CD310D210000229D06219F0611590206067EFE1AC8C5D50E801180007E1223130DC2850ED1D5E50E15CD0500E1D1C1B7C2A10E05C8C37A0E211110CDBC0CC3770FC5D5E5CDB40EE1D1C1C92A9F09EB21A1091977EB23229F09EB210003CDC40DC0CD380D210000229F0921A109117A020606C37A0EC5D5E50E025FCD0500E1D1C1C94FCD340E3A0C01FE20C83A3602FE17C879CDDE0EC93A8401210C01B7CA150F477ECDEB0E23783DC3060F3284013E0DCDEB0E3E0ACDEB0E210C013E783620233DC2270FC947210C017EFE20C070C9CD280DCA4F0F2A9D067DB4CA4F0F3E1ACD340EC33F0F3A3702FE19CA770F3A2302B7C4B8102AD001222102CDB8102A9F097DB4CA770F3E1ACDAA0EC3670FCD280DCA860FCD310D115902CDFA0C3A3702FE19CA970FCD380D117A02CDFA0C213C10CDBC0CC3000043502F4D20415353454D424C4552202D2056455220322E300D4E4F20534F555243452046494C452050524553454E540D4E4F204449524543544F52592053504143450D534F555243452046494C45204E414D45204552524F520D534F555243452046494C452052454144204552524F520D4F55545055542046494C45205752495445204552524F520D43414E4E4F5420434C4F53452046494C45530D454E44204F4620415353454D424C590DC5473A3702FE1978CA9810D5F52123027EB7CA8410FE10DA6C10CDB810C384102AD001EB2A21024F0600097BBDC281107ABCCA8A10CDB8102AD0012221022123025E34160021240219F177D1C1C9F50F0F0F0FE60FCDAF10F1F5E60FCDAF10F18257C9C69027CE4027C3AA0E3E3ACDAA0E2123025EAF57772A21027BCD9A107CCD9A107DCD9A10AFCD9A107BB7CAE8102124027E23CD9A101DC2DF10AF92CD9A103E0DCDAA0E3E0ACDAA0EC90000000000000000C34013C33211C3C011000000CD0602F5FE0DCA3011FE0ACA30113A8401FE78D230115F16003C328401210C0119F177C9F1C9CD4911320A113284013E0A320911CD15023E10328401C9AF328801320B11C92188017EFE40DA5F113600CD1E135E16003423193A0A1177C97EFE24C0AF77C93A0A11D630FE0A17E601C9CD7111C03A0A11D641FE0617E601C93A0A11D641FE1A17E601C9CD8B11C0CD7111C93A0A11FE61D8FE7BD0E65F320A11C9CD0C11320A11C32D13C9FE0DC8FE1AC8FE21C9AF328501CD49113A0A11FE09CAF411FE3BCAE111FE2AC2ED113A0911FE0AC2ED11CDAD11CDB711CAFA11C3E111F620FE20C2FA11CDAD11C3C711CD8B11CA05123E01C33912CD7111CA10123E02C339123A0A11FE27C22112AF320A113E03C33912FE0AC237123ACF01B7C41502210C0136203E103284013E043285013A0A11320911B7C45111CDAD113A8501FE04C8FE03C49E11210A113A8501FE01C26C12CD6A11CA3C12CD9611C8C33C12FE02C20213CD6A11CA3C12CD7C11C23C123A0A11FE4FCA8A12FE51C28F123E08C39612FE48C2A0123E10320B11AF320A11C3BB123A0911FE42C2AD123E02C3B412FE443E0AC2B81221880135320B112100002286012188014E237E23FE41D2D212D630C3D412D637E5C54F210B11BED4181306007E2A8601EB210000B7CAF7121FD2F11219EB29EBC3E81209228601C1E10DC2C612C93A0A11FE0DCA1E13FE27C23C12CDAD11FE27C0C33C12F53E56C32413F53E4FC32413C5E5CD1802E1C1F1C9F53A8501FE03C49E11F1C90000000000000000C3A015C35C14C39E14C39814C3EB14C36015C37215C38D15C396150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215B130680AF7723772305C2621421000022D601C921880146AF238605C27614E67F325B14C9472AD60123237EE6F0B077C92AD60123237EE60F3CC92AD6017DB4C9CD71142188017EFE11DAAC143610215B145E1600215B1319195E23666B22D601CD9814C8CD8E14218801BEC2E1144723EB2AD6012323231ABEC2E114132305C2D514C92AD6015E2356EBC3BB142188015E16002ACB0122D6011911050019EB2ACD017B957A9CEBD2411522CB012AD601EB215B144E0600215B1309094E2346722B73EB7123701188011AFE11DA2F153E10473D237723131A7705C23315AF23772377C9214A15CD1202C31E0253594D424F4C205441424C45204F564552464C4F570D17171717E6F0472AD60123237EE60FB077C92AD60123237E1F1F1F1FE60FC9CD8E142AD6015F160019232323C9E5CD7F15D1732372C9CD7F155E2356EBC90000C36018C38317C31018C415D415E6158216AE16BD161009340B03BD16DD16EF1657176D170D28292A2B2C2D2F4142434445484C4D444244494453445745494946494E4F525350414349414443414444414449414E41414E44414E49434D41434D43434D50435049444141444144444352444358454E44455155484C54494E52494E584A4D504C44414C58494D4F444D4F564D56494E4F504E4F544F52414F52474F52494F5554504F5050535752414C524152524554524C4352524352535453424253424953455453484C534852535441535443535542535549584F5258524158524943414C4C454E444D4C4441584C484C445043484C5055534853484C445350484C53544158584348475854484C454E4449464D4143524F5449544C450F0A0C140D1E005005460E0A0646015010071000100110021003100410051006110113F31102110313FB110821DB0A2810061ACE1D881D801AC61DA009321AE6132F133F1DB81AFE132715091E051F0B1104110713761E041F0317C31C3A14010250184019061300083C1DB0110A1AF621D316C110061317131F13C91307130F20C71D981ADE110B035004501C3213371D901AD60B281DA81AEE17CD11061B0A1C2A13E916C51C2213F91B0213EB13E311051109110C4E5A5A204E434320504F504550204D201EFF040E00AF78811FBBCAC4175FE5D5C5E5424816002100001905C29C17D1191189011ABE1323C2B6170DC2A617C1D1E17BC9C1D1E1DAC0174BC3881743C38817AF3CC93A89010117C2FE4AC806C4FE43C80113C0FE52C93A8801FE04D20D18FE03CAF217FE02C20D18218B013620010800117317218A011ABE13C205181A23BEC813040DC2F8170CC9AF3CC93A88014F3D5F1600D5FE05D25A1821B515194621A91519195623666A51CD8317C24518D121BA1519195E23566F260029197E2346C9D1CDC717C0C5CDDB1778C1C0B7171717B04779BFC9D1AF3CC90000C3A01BC3191AC36E19C33819000000000000000000000000000000000000000000000000000000000000000000000000000000EB2192187EFE10DAA218CD851B36007E34344F060021811809732372C9F52191187EFE0ADABF183600CD851B5E160034F1216D1819772177181970C92192187EB7C2DE18CD851B210000C935354E0600218118094E236669C9CDCF18EBCDCF18C96F260029110119195E23666BE98919921999199F19AB19BF19C619D019D919E019EC19F819851BCDEC187AB7C227197BFE11D8CD851B3E10C9AF956F3E009C67C9CDEC18EB226B19216D193611010000C5AF7B175F7A175735E1C83E00CE002944852A6B19954F789C47C5D2641909E3216D193FC34619000000444D210000AF781F47791F4FDA8219B0C8C3831919EB29EBC37319CDEC18CD6E19C3011ACD3519EBC3011ACD3519C3011ACD1B19B7CA011A293DC3A219CD1B19B7CA011AF5AF7C1F677D1F6FF13DC3AE19CDEC1819C3011ACDEC18EBCD2D19C3C219CDCF18CD2D19C3011ACDCF1823C3D319CDEC187AA4677BA56FC3011ACDEC187AB4677BB56FC3011ACDEC187AAC677BAD6FC393183A8501FE04C03A8901FE0DC8FE3BC8FE2CC8FE21C9AF3291183292183D326C1821000022C901CD041AC25D1A2191187EB7CA481A355F1D1600216D18197ECDF418C3301A3A9218FE02C4851B3A0C01FE20C02A811822C901C93A0C01FE20C27F1B3A8501FE03C2891A3A8801B7CC851BFE03D4851B16002189015E233DCA851A56EBC3711BFE02C2941A2A8601C3711BCDA615C2311BFE10D2261BFE0C4F3A6C18C2B51AB7CC851B3EFF326C1879C3031BB7C20E1BC53A9118B7CADE1A5F1D1600217718197EB8DADE1A21911873216D18197ECDF418C1C3B91AC179FE0DC2031B2191187EB7CAFC1A3D775F1600216D18197EFE0CCAFF1ACD851BAFC3081BCDB0183EFF326C18C37F1B79FE05CA7F1BFE06C21E1B3C4FC3B91AFE08C4851BC3B91AFE11CC851B682600C3711B3A8501FE04C2501B3A8901FE24CA4A1BCD851B210000C3711B2AD201C3711BCD4613CD4913C2641B3E50CD1802CD4C13C36E1BCD5213E6073E55CC1802CD58133A6C18B7CC851BAF326C18CD9318CD0611C32A1AE53E45CD1802E1C900000000000000000000000000000000000000AF32CF01CD4313CD0311CD030221000022EB2022D00122D20122ED20CD06113A8501FE02CABC1BFE04C2DD1B3A8901FE2AC2311FCD0020C27C1FC3521FFE01C27C1FCDA615CA301CCD4613CD4913C2FE1BCD4C133ACF01B7C4D720C30C1CCD5213FE06C20C1CCDE320C3521F2AEB207DB4C4DD202AD60122EB20CD06113A8501FE04C2BF1B3A8901FE3AC2BF1BC3BC1BFE11C2D71D5816001B21431C19195E23666BE95B1CA91CC01CDE1C151D181D1E1D401D871D8D1DA71DCE1DCD0A20CD06113A8501FE03C28C1C3A88013DCA8C1C47040421890105CA861CC54623E5CD4820E1C1C3761CCD0611C39B1CCD63182AC9017CB7C4D12045CD4820CDF91FCDBA1EFE2CCA5E1CC3311FCD0A20CDA620CDD11EEB2AD2011922D20122D001C3311FCD0A20CDD11EE545CD4820E144CD4820CDF91FCDBA1EFE2CCAC31CC3311FCD0A20CDA6203A0C01FE20C2311FCDD11E3A0C01FE20C2FA1C22ED203E20320C01CD06113A8501FE04C27C1F3A8901FE0AC27C1FC38B1FC3D11DCDE320C3D11DCD0020CA7C1F2AD201E5CDD11E22D201CD0A20CDA920211201363DE122D201C3311FCD0A20CDD11E3A0C01FE20C2311F7D1FDA311FCD06113A8501FE04C26E1D3A8901FE1A3E42CC1802CA8B1FC3531DFE01C2531DCDA615C2531DFE11C2531D78FE05C2531DC3D11DCDE320C3311FCDD11E3A0C01FE20C2311F22D20122D001CD0A20CDA620C3311FCD0020CA7C1FCD5213FE05C4DD203E05CD4F13CDD11EE5CD0020E1CD551321000022EB20C3311FCDE320CD0611C3311FD613FE21D27C1F5F160021EB1D19195E23666BE9091E121E1E1E241E381E411E501E601E691E781E811E881E8F1E9E1EA51ECD4820CD0611C3B11ECDFC1ECD171FCD111FC3B11ECDFC1EC3B11ECDF21EFE38CA311EE608C4BD2079E630B0C3AE1ECD4820CD111FC3B11ECDF21EB047CD171FCDE71EB0C3AE1ECDF21EB0CD4720CD171FCD0B1FC3B11ECD4820CD0B1FC3B11ECDF21EE628C4BD2079E610B0C3AE1ECD4820CD111FC3B11ECDE71EB0C3AE1ECDF21EB0C3AE1ECDF21EE608C4BD2079E630B0C3AE1ECDF21EB0C3AE1ECD4820CD0B1FC3B11ECD4720CD0A20CDF91FC3311F3A8501FE04C4D1203A8901FE2CC8FE3BC8FE0DC4D120C9C5CD0611CD63182AC901C1C9CDD11E7CB7C4C7207DC9CDDD1EFE08D4C720E607C9CDE71E171717E6384FC9CDF21EE608C4BD2079E630B0C34720CDDD1EC34720CDD11EC37420F5C53A8501FE04C2291F3A8901FE2CCA2E1F3E43CD1802C1F1C9CD0A203A8501FE04C27C1F3A8901FE0DC24A1FCD0611C3BC1BFE3BC2721FCD0A20CD06113A8501FE04C2521F3A8901FE0ACABC1BFE1ACA8B1FFE21CABC1BC3521FFE21CABC1BFE1ACA8B1F3E53CD1802C3521F7B956F7A9C67C921CF017E34B7CAA71BCD0611CDA620211101360D210D01CD12022ACB01EB2AD401CD841FE52ACD01EB2AD401CD841F5C1600E1CD6918EBCDA92021110111D61F1AB7CAE41F772313C3CB1F482055534520464143544F520D00210E01CD12022AED2022D001C31E027ABCC07BBDC92AD00122D201C92AEB2022D601CD4913C9CD0020C821000022EB203ACF01B7C23120CD5213F5E607C4DD20F1F601CD4F132AD201CD5513C9CD5213E607CCD720CD5813EB2AD201CDF31FC4D720C9473ACF01B778CA6C20C5CD1B023A0D01FE202AD201CCA9203AEF20FE10C1D26C2078CD96202AD0012322D001C9E545CD4820E144C34820C630FE3AD8C607C9CD7E2021EF205E160034210C011977C9F51F1F1F1FE60FCD8620F1E60FC386202AD201EB21EF20E536017AD5CD9620D17BCD9620E134C9F5C53E52CD1802C1F1C9F5E53E56CD1802E1F1C9F53E44C3E620F53E50C3E620F53E4CC3E620F53E4ECD1802F1C9000000000000000000000000000000000000000000>0059 diff --git a/Z80 CPM and bootloader (basmon)/windowsApp/COMDLG32.OCX b/Z80 CPM and bootloader (basmon)/windowsApp/COMDLG32.OCX new file mode 100644 index 0000000000000000000000000000000000000000..84022fb57663a201bd9037f7d1a6ec34a1ad9eea GIT binary patch literal 152848 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 literal 0 HcmV?d00001 diff --git a/Z80 CPM and bootloader (basmon)/windowsApp/FilePackage.exe b/Z80 CPM and bootloader (basmon)/windowsApp/FilePackage.exe new file mode 100644 index 0000000000000000000000000000000000000000..2642a7a79f4d907721d7331668994520b87f00c1 GIT binary patch literal 28672 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 literal 0 HcmV?d00001 diff --git a/build_id.v b/build_id.v index eb65496..2481b81 100644 --- a/build_id.v +++ b/build_id.v @@ -1 +1 @@ -`define BUILD_DATE "201121" \ No newline at end of file +`define BUILD_DATE "201221" \ No newline at end of file From 2eb56fa2dbaa157c203c6decf86c92deda3c3b19 Mon Sep 17 00:00:00 2001 From: S0urceror Date: Wed, 23 Dec 2020 21:01:37 +0100 Subject: [PATCH 5/6] lower wait time --- MultiComp.qws | Bin 619 -> 619 bytes .../hexFiles/CBIOS128.HEX | 2 +- .../hexFiles/FORM128.HEX | 2 +- .../hexFiles/PUTSYS.HEX | 2 +- .../source/CBIOS128.LST | 2 +- .../source/FORM128.LST | 2 +- .../source/PUTSYS.LST | 2 +- .../source/cbios128.asm | 2 +- .../source/form128.asm | 2 +- .../source/putsys.asm | 2 +- build_id.v | 2 +- 11 files changed, 10 insertions(+), 10 deletions(-) diff --git a/MultiComp.qws b/MultiComp.qws index 1c47226591c5b967f436d8f62c97e891a49f1bf0..98ebfc3a2b6bc1a6ebf884dc355d965532a28fde 100644 GIT binary patch delta 67 zcmaFO@|tDBTsFo93=B+G6BkvW3|Nnmm23BK`=*IVnjMBP5)@`5+7yu>z KfiQ@}!~g&ZkrvYc diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/CBIOS128.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/CBIOS128.HEX index 9d70d90..6cefd8c 100644 --- a/Z80 CPM and bootloader (basmon)/hexFiles/CBIOS128.HEX +++ b/Z80 CPM and bootloader (basmon)/hexFiles/CBIOS128.HEX @@ -50,7 +50,7 @@ :18EA9800DB89FE8020FACD2BEA3E00D3890E0421D8FB0680DB89FEE020 :18EAB00020FADB8877230520F30D20EEE1C1F1AF32D2FBC9F5C5E5DB80 :18EAC80089FE8020FACD2BEA3E01D3890E0421D8FB0680DB89FEA020EA -:18EAE000FAC5066410FEC17ED388230520ED0D20E8E1C1F1AF32D2FBC2 +:18EAE000FAC5063210FEC17ED388230520ED0D20E8E1C1F1AF32D2FBF4 :15EAF800C9E3F5C57EFE0028074FCD96E82318F423C1F1E3C9AE :04FB9D000000000064 :15FDD8003E01D338F1FE0128043E0118023E00320300C300E63B diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/FORM128.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/FORM128.HEX index 0c20384..e9198f5 100644 --- a/Z80 CPM and bootloader (basmon)/hexFiles/FORM128.HEX +++ b/Z80 CPM and bootloader (basmon)/hexFiles/FORM128.HEX @@ -6,7 +6,7 @@ :185078008CCDA7503AE6503C32E650FE2020E7190520D6CDD5500D0A7A :18509000466F726D617474696E6720636F6D706C6574650D0A00C9F59F :1850A800C5E5DB89FE8020FA3E01D3890E0421E8500680DB89FEA0209C -:1850C000FAC5066410FEC17ED388230520ED0D20E5E1C1F1C9E3F5C5C7 +:1850C000FAC5063210FEC17ED388230520ED0D20E5E1C1F1C9E3F5C5F9 :1850D8007EFE002804CF2318F723C1F1E3C90000E520202020202020D1 :1850F00020202020000000000000000000000000000000000000000028 :18510800E520202020202020202020200000000000000000000000004A diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/PUTSYS.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/PUTSYS.HEX index d98532d..5edbe37 100644 --- a/Z80 CPM and bootloader (basmon)/hexFiles/PUTSYS.HEX +++ b/Z80 CPM and bootloader (basmon)/hexFiles/PUTSYS.HEX @@ -5,6 +5,6 @@ :1850600053797374656D207472616E7366657220636F6D706C657465B5 :185078000D0A00C93ACD50D38C3ACC50D38B3ACB50D38AC9F5C5E5DBE1 :1850900089FE8020FACD7C503E01D3890E040680DB89FEA020FAC50634 -:1850A8006410FEC17ED388230520ED0D20E8E1C1F1C9E3F5C57EFE0025 +:1850A8003210FEC17ED388230520ED0D20E8E1C1F1C9E3F5C57EFE0057 :1150C0002804CF2318F723C1F1E3C900000000000031 :00000001FF diff --git a/Z80 CPM and bootloader (basmon)/source/CBIOS128.LST b/Z80 CPM and bootloader (basmon)/source/CBIOS128.LST index b3c6cd7..250e562 100644 --- a/Z80 CPM and bootloader (basmon)/source/CBIOS128.LST +++ b/Z80 CPM and bootloader (basmon)/source/CBIOS128.LST @@ -803,7 +803,7 @@ 0784 EAE1 ; with MISTer virtual SD interface sys/sd_card.sv 0785 EAE1 ; which results in hangs or write errors. 0786 EAE1 C5 push bc -0787 EAE2 06 64 ld b,100 +0787 EAE2 06 32 ld b,50 0788 EAE4 _again: 0789 EAE4 10 FE djnz _again 0790 EAE6 C1 pop bc diff --git a/Z80 CPM and bootloader (basmon)/source/FORM128.LST b/Z80 CPM and bootloader (basmon)/source/FORM128.LST index fe9ca64..6e1d005 100644 --- a/Z80 CPM and bootloader (basmon)/source/FORM128.LST +++ b/Z80 CPM and bootloader (basmon)/source/FORM128.LST @@ -155,7 +155,7 @@ 0153 50C1 ; with MISTer virtual SD interface sys/sd_card.sv 0154 50C1 ; which results in hangs or write errors. 0155 50C1 C5 push bc -0156 50C2 06 64 ld b,100 +0156 50C2 06 32 ld b,50 0157 50C4 _again: 0158 50C4 10 FE djnz _again 0159 50C6 C1 pop bc diff --git a/Z80 CPM and bootloader (basmon)/source/PUTSYS.LST b/Z80 CPM and bootloader (basmon)/source/PUTSYS.LST index b1100a3..8f755bc 100644 --- a/Z80 CPM and bootloader (basmon)/source/PUTSYS.LST +++ b/Z80 CPM and bootloader (basmon)/source/PUTSYS.LST @@ -112,7 +112,7 @@ 0110 50A6 ; with MISTer virtual SD interface sys/sd_card.sv 0111 50A6 ; which results in hangs or write errors. 0112 50A6 C5 push bc -0113 50A7 06 64 ld b,100 +0113 50A7 06 32 ld b,50 0114 50A9 _again: 0115 50A9 10 FE djnz _again 0116 50AB C1 pop bc diff --git a/Z80 CPM and bootloader (basmon)/source/cbios128.asm b/Z80 CPM and bootloader (basmon)/source/cbios128.asm index 6c60444..7110247 100644 --- a/Z80 CPM and bootloader (basmon)/source/cbios128.asm +++ b/Z80 CPM and bootloader (basmon)/source/cbios128.asm @@ -784,7 +784,7 @@ wrWait2: IN A,(SD_STATUS) ; with MISTer virtual SD interface sys/sd_card.sv ; which results in hangs or write errors. push bc - ld b,100 + ld b,50 _again: djnz _again pop bc diff --git a/Z80 CPM and bootloader (basmon)/source/form128.asm b/Z80 CPM and bootloader (basmon)/source/form128.asm index 70c8f65..e564db2 100644 --- a/Z80 CPM and bootloader (basmon)/source/form128.asm +++ b/Z80 CPM and bootloader (basmon)/source/form128.asm @@ -153,7 +153,7 @@ wrWait2: IN A,(SD_STATUS) ; with MISTer virtual SD interface sys/sd_card.sv ; which results in hangs or write errors. push bc - ld b,100 + ld b,50 _again: djnz _again pop bc diff --git a/Z80 CPM and bootloader (basmon)/source/putsys.asm b/Z80 CPM and bootloader (basmon)/source/putsys.asm index 9bde989..97bc332 100644 --- a/Z80 CPM and bootloader (basmon)/source/putsys.asm +++ b/Z80 CPM and bootloader (basmon)/source/putsys.asm @@ -110,7 +110,7 @@ wrWait2: IN A,(SD_STATUS) ; with MISTer virtual SD interface sys/sd_card.sv ; which results in hangs or write errors. push bc - ld b,100 + ld b,50 _again: djnz _again pop bc diff --git a/build_id.v b/build_id.v index 2481b81..63a992b 100644 --- a/build_id.v +++ b/build_id.v @@ -1 +1 @@ -`define BUILD_DATE "201221" \ No newline at end of file +`define BUILD_DATE "201223" \ No newline at end of file From 3521a480dea725b41117ea31682288c64ba72683 Mon Sep 17 00:00:00 2001 From: S0urceror Date: Tue, 29 Dec 2020 12:05:06 +0100 Subject: [PATCH 6/6] Updated SD to support writes on virtual SDcard --- Components/SDCARD/sd_controller.vhd | 682 ++++++++++-------- Components/USB/ch376s.v | 75 +- Components/USB/spi_master_simple.v | 66 +- MicrocomputerZ80CPM.vhd | 197 +++-- MultiComp.qws | Bin 619 -> 619 bytes MultiComp.sv | 46 +- .../hexFiles/CH376S.HEX | 10 +- .../source/CH376S.LST | 96 +++ .../source/{ch376s_test.asm => ch376s.asm} | 26 +- build_id.v | 2 +- 10 files changed, 683 insertions(+), 517 deletions(-) create mode 100644 Z80 CPM and bootloader (basmon)/source/CH376S.LST rename Z80 CPM and bootloader (basmon)/source/{ch376s_test.asm => ch376s.asm} (80%) diff --git a/Components/SDCARD/sd_controller.vhd b/Components/SDCARD/sd_controller.vhd index 1aae375..7b9d18d 100644 --- a/Components/SDCARD/sd_controller.vhd +++ b/Components/SDCARD/sd_controller.vhd @@ -18,19 +18,92 @@ -- -- Grant Searle -- eMail address available on my main web page link above. +-- Minor changes by foofoobedoo@gmail.com +-- Additional functionality to provide SDHC support and 25 MHz SPI-clock by Rienk Koolstra. +-- +-- This design uses the SPI interface and supports "standard capacity" (SDSC) and +-- "high capacity" (SDHC) cards. --- updated by Rienk Koolstra to accept SDHC cards. Note: this implementation does not slow down the --- interface during the init phase. The standard requires a maximum clock of 400 KHz during this --- phase, to allow for "older" cards (read MMC) I have found this slowdown to be unnecessary for --- all cards I tested. I am clocking this interface at 50 MHz (25 MHz SPI clock) with solid --- results, YMMV! - +-- Address Register +-- 0 SDDATA read/write data +-- 1 SDSTATUS read +-- 1 SDCONTROL write +-- 2 SDLBA0 write-only +-- 3 SDLBA1 write-only +-- 4 SDLBA2 write-only (only bits 6:0 are valid) +-- +-- For both SDSC and SDHC (high capacity) cards, the block size is 512bytes (9-bit value) and the +-- SDLBA registers select the block number. SDLBA2 is most significant, SDLBA0 is least significant. +-- +-- For SDSC, the read/write address parameter is a 512-byte aligned byte address. ie, it has 9 low +-- address bits explicitly set to 0. 23 of the 24 programmable address bits select the 512-byte block. +-- This gives an address capacity of 2^23 * 512 = 4GB .. BUT maximum SDSC capacity is 2GByte. +-- +-- The SDLBA registers are used like this: +-- +-- 31 30 29 28.27 26 25 24.23 22 21 20.19 18 17 16.15 14 13 12.11 10 09 08.07 06 05 04.03 02 01 00 +--+------- SDLBA2 -----+------- SDLBA1 --------+------- SDLBA0 --------+ 0 0 0 0 0 0 0 0 0 +-- +-- For SDHC cards, the read/write address parameter is the ordinal number of 512-byte block ie, the +-- 9 low address bits are implicity 0. The 24 programmable address bits select the 512-byte block. +-- This gives an address capacity of 2^24 * 512 = 8GByte. SDHC can be upto 32GByte but this design +-- can only access the low 8GByte (could add SDLBA3 to get the extra address lines if required). +-- +-- The SDLBA registers are used like this: +-- +-- 31 30 29 28.27 26 25 24.23 22 21 20.19 18 17 16.15 14 13 12.11 10 09 08.07 06 05 04.03 02 01 00 +-- 0 0 0 0 0 0 0 0+---------- SDLBA2 -----+------- SDLBA1 --------+------- SDLBA0 --------+ +-- +-- The end result of all this is that the addressing looks the same for SDSC and SDHC cards. +-- +-- SDSTATUS (RO) +-- b7 Write Data Byte can be accepted +-- b6 Read Data Byte available +-- b5 Block Busy +-- b4 Init Busy +-- b3 Unused. Read 0 +-- b2 Unused. Read 0 +-- b1 Unused. Read 0 +-- b0 Unused. Read 0 +-- +-- SDCONTROL (WO) +-- b7:0 0x00 Read block +-- 0x01 Write block +-- +-- +-- To read a 512-byte block from the SDCARD: +-- Wait until SDSTATUS=0x80 (ensures previous cmd has completed) +-- Write SDLBA0, SDLBA1 SDLBA2 to select block index to read from +-- Write 0 to SDCONTROL to issue read command +-- Loop 512 times: +-- Wait until SDSTATUS=0xE0 (read byte ready, block busy) +-- Read byte from SDDATA +-- +-- To write a 512-byte block to the SDCARD: +-- Wait until SDSTATUS=0x80 (ensures previous cmd has completed) +-- Write SDLBA0, SDLBA1 SDLBA2 to select block index to write to +-- Write 1 to SDCONTROL to issue write command +-- Loop 512 times: +-- Wait until SDSTATUS=0xA0 (block busy) +-- Write byte to SDDATA +-- +-- At HW level each data transfer is 515 bytes: a start byte, 512 data bytes, +-- 2 CRC bytes. CRC need not be valid in SPI mode, *except* for CMD0. +-- +-- SDCARD specification can be downloaded from +-- https://www.sdcard.org/downloads/pls/ +-- All you need is the "Part 1 Physical Layer Simplified Specification" library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; +use ieee.std_logic_unsigned.all; entity sd_controller is +generic ( + constant CLKEDGE_DIVIDER : integer := 100 -- 50MHz / 100 gives edges at 500kHz ie output + -- or sdSCLK of 250kHz to be used during init phase +); port ( sdCS : out std_logic; sdMOSI : out std_logic; @@ -42,7 +115,7 @@ port ( dataIn : in std_logic_vector(7 downto 0); dataOut : out std_logic_vector(7 downto 0); regAddr : in std_logic_vector(2 downto 0); - clk : in std_logic; -- twice the spi clk; + clk : in std_logic; driveLED : out std_logic := '1' ); @@ -53,20 +126,19 @@ type states is ( rst, init, cmd0, - regreq, + cmd8, cmd55, acmd41, poll_cmd, cmd58, cardsel, - stby, -- wait for read or write pulse + idle, -- wait for read or write pulse read_block_cmd, read_block_wait, read_block_data, send_cmd, send_regreq, receive_ocr_wait, - receive_ocr, receive_byte_wait, receive_byte, write_block_cmd, @@ -77,16 +149,19 @@ type states is ( ); --- one start byte, plus 512 bytes of data, plus two FF end bytes (CRC) +-- one start byte, plus 512 bytes of data, plus two ff end bytes (crc) constant write_data_size : integer := 515; signal state, return_state : states; signal sclk_sig : std_logic := '0'; signal cmd_out : std_logic_vector(55 downto 0); -signal recv_data : std_logic_vector(7 downto 0); -signal ocr_data : std_logic_vector(39 downto 0); +-- at different times holds 8-bit data, 8-bit R1 response or 40-bit R7 response +signal recv_data : std_logic_vector(39 downto 0); +signal clkCount : std_logic_vector(5 downto 0); +signal clkEn : std_logic; +signal HighSpeed : std_logic := '0'; -- flag to switch to 25 MHz operation and back signal status : std_logic_vector(7 downto 0) := x"00"; signal block_read : std_logic := '0'; @@ -107,35 +182,32 @@ signal host_read_flag : std_logic := '0'; signal sd_write_flag : std_logic := '0'; signal host_write_flag : std_logic := '0'; -signal init_busy : std_logic := '0'; +signal init_busy : std_logic := '1'; signal block_busy : std_logic := '0'; signal address: std_logic_vector(31 downto 0) :=x"00000000"; signal led_on_count : integer range 0 to 200; - -- reg 000 - read/write data - - -- reg 001 - read status - -- bit 7 = block written - -- bit 6 = block read - -- bit 5 = block busy - -- bit 4 = init busy - - -- reg 001 - write control - -- 0 - block_read - -- 1 - block_write - - -- reg 002 - LBA0 - -- reg 003 - LBA1 - -- reg 004 - LBA2 - begin - process(n_wr) + clock_enable: process(clk) begin - -- SDSC byte address 0..8 (first 9 bits) always zero because each sector is 512 bytes + if rising_edge(clk) then + if clkCount < (CLKEDGE_DIVIDER - 1) then + clkCount <= clkCount + 1; + else + clkCount <= (others=>'0'); + end if; + end if; + end process; + + clkEn <= '1' when ( clkCount = 0 ) or ( HighSpeed = '1' ) else '0'; + + wr_adrs_reg: process(n_wr) + begin + -- sdsc address 0..8 (first 9 bits) always zero because each sector is 512 bytes if rising_edge(n_wr) then - if sdhc = '0' then -- SDSC card + if sdhc = '0' then -- SDSC card if regAddr = "010" then address(16 downto 9) <= dataIn; elsif regAddr = "011" then @@ -143,12 +215,12 @@ begin elsif regAddr = "100" then address(31 downto 25) <= dataIn(6 downto 0); end if; - else -- SDHC card - -- SDHC block address. starts at bit 0 + else -- SDHC card + -- SDHC address is the 512 bytes block address. starts at bit 0 if regAddr = "010" then - address(7 downto 0) <= dataIn; -- 128 k + address(7 downto 0) <= dataIn; -- 128 k elsif regAddr = "011" then - address(15 downto 8) <= dataIn; -- 32 M + address(15 downto 8) <= dataIn; -- 32 M elsif regAddr = "100" then address(23 downto 16) <= dataIn; -- addresses upto 8 G end if; @@ -156,12 +228,13 @@ begin end if; end process; - dataOut <= - dout when regAddr = "000" - else status when regAddr = "001" - else "00000000"; + -- output data is MUXed externally based on CS so only need to + -- drive 0 by default if dataOut is being ORed externally + dataOut <= dout when regAddr = "000" else + status when regAddr = "001" else + x"00"; - process(n_wr) + wr_dat_reg: process(n_wr) begin if rising_edge(n_wr) then if (regAddr = "000") and (sd_write_flag = host_write_flag) then @@ -171,7 +244,7 @@ begin end if; end process; - process(n_rd) + rd_dat_reg: process(n_rd) begin if rising_edge(n_rd) then if (regAddr = "000") and (sd_read_flag /= host_read_flag) then @@ -180,33 +253,22 @@ begin end if; end process; - process(n_wr, block_start_ack,init_busy) + wr_cmd_reg: process(n_wr, block_start_ack,init_busy) begin - if init_busy='1' then - block_read <= '0'; - elsif block_start_ack='1' then + if init_busy='1' or block_start_ack='1' then block_read <= '0'; + block_write <= '0'; elsif rising_edge(n_wr) then if regAddr = "001" and dataIn = "00000000" then block_read <= '1'; end if; - end if; - end process; - - process(n_wr, block_start_ack,init_busy) - begin - if init_busy='1' then - block_write <= '0'; - elsif block_start_ack='1' then - block_write <= '0'; - elsif rising_edge(n_wr) then if regAddr = "001" and dataIn = "00000001" then block_write <= '1'; end if; end if; end process; - process(clk,n_reset) + fsm: process(clk, clkEn, n_reset) variable byte_counter : integer range 0 to write_data_size; variable bit_counter : integer range 0 to 160; begin @@ -214,281 +276,271 @@ begin state <= rst; sclk_sig <= '0'; sdCS <= '1'; - elsif rising_edge(clk) then + HighSpeed <= '0'; + elsif rising_edge(clk) and clkEn = '1' then case state is - when rst => - sd_read_flag <= host_read_flag; - sd_write_flag <= host_write_flag; - sclk_sig <= '0'; - cmd_out <= (others => '1'); - byte_counter := 0; - cmd_mode <= '1'; -- 0=data, 1=command - response_mode <= '1'; -- 0=data, 1=command - bit_counter := 160; - sdCS <= '1'; - state <= init; + when rst => +-- HighSpeed <= '0'; + sd_read_flag <= host_read_flag; + sd_write_flag <= host_write_flag; + sclk_sig <= '0'; + cmd_out <= (others => '1'); + byte_counter := 0; + cmd_mode <= '1'; -- 0=data, 1=command + response_mode <= '1'; -- 0=data, 1=command + bit_counter := 160; + sdCS <= '1'; + state <= init; + init_busy <= '1'; + block_start_ack <= '0'; - when init => -- cs=1, send 80 clocks, cs=0 - init_busy <= '1'; - if (bit_counter = 0) then - sdCS <= '0'; - state <= cmd0; - else - bit_counter := bit_counter - 1; - sclk_sig <= not sclk_sig; - end if; - - when cmd0 => - cmd_out <= x"ff400000000095"; -- GO_IDLE_STATE here, Select SPI - bit_counter := 55; - return_state <= regreq; - state <= send_cmd; - - when regreq => - cmd_out <= x"ff48000001aa87"; -- SEND_IF_COND, VHS=0001 (bit 16-19) - bit_counter := 55; - return_state <= cmd55; - state <= send_regreq; - - when cmd55 => - cmd_out <= x"ff770000000001"; -- APP_CMD - bit_counter := 55; - return_state <= acmd41; - state <= send_cmd; - - when acmd41 => - cmd_out <= x"ff694000000077"; -- SD_SEND_OP_COND, HCS=1 (bit 30) - bit_counter := 55; - return_state <= poll_cmd; - state <= send_cmd; - - when poll_cmd => - if (recv_data(0) = '0') then - state <= cmd58; - else - state <= cmd55; - end if; - - when cmd58 => - cmd_out <= x"ff7a00000000fd"; -- READ_OCR - bit_counter := 55; - return_state <= cardsel; - state <= send_regreq; - - when cardsel => - if (ocr_data(31) = '0' ) then -- power up not completed - state <= cmd58; -- repeat command - else - if (ocr_data(30) = '1' ) then -- CCS bit - sdhc <= '1'; - else - sdhc <= '0'; - end if; - state <= stby; - end if; - - when stby => - sd_read_flag <= host_read_flag; - sd_write_flag <= host_write_flag; - sclk_sig <= '0'; - cmd_out <= (others => '1'); - data_sig <= (others => '1'); - byte_counter := 0; - cmd_mode <= '1'; -- 0=data, 1=command - response_mode <= '1'; -- 0=data, 1=command - - block_busy <= '0'; - init_busy <= '0'; - dout <= (others => '0'); - - if (block_read = '1') then - state <= read_block_cmd; - block_start_ack <= '1'; - elsif (block_write='1') then - state <= write_block_cmd; - block_start_ack <= '1'; - else - state <= stby; - end if; - - when read_block_cmd => - block_busy <= '1'; - block_start_ack <= '0'; - cmd_out <= x"ff" & x"51" & address & x"ff"; - bit_counter := 55; - return_state <= read_block_wait; - state <= send_cmd; - - -- wait until data token read (= 11111110) - when read_block_wait => - if (sclk_sig='0' and sdMISO='0') then - state <= receive_byte; - byte_counter := 513; -- data plus crc - bit_counter := 8; -- ??????????????????????????????? - return_state <= read_block_data; - end if; - sclk_sig <= not sclk_sig; - - when read_block_data => - if (byte_counter = 1) then -- crc byte 1 - ignore - byte_counter := byte_counter - 1; - return_state <= read_block_data; - bit_counter := 7; - state <= receive_byte; - elsif (byte_counter = 0) then -- crc byte 2 - ignore - bit_counter := 7; - return_state <= stby; - state <= receive_byte; - elsif (sd_read_flag /= host_read_flag) then - state <= read_block_data; -- stay here until previous byte read - else - byte_counter := byte_counter - 1; - return_state <= read_block_data; - bit_counter := 7; - state <= receive_byte; - end if; - - when send_cmd => - if (sclk_sig = '1') then -- sending command - if (bit_counter = 0) then -- command sent - state <= receive_byte_wait; - else - bit_counter := bit_counter - 1; - cmd_out <= cmd_out(54 downto 0) & '1'; - end if; - end if; - sclk_sig <= not sclk_sig; - - when send_regreq => - if (sclk_sig = '1') then -- sending command - if (bit_counter = 0) then -- command sent - state <= receive_ocr_wait; - else - bit_counter := bit_counter - 1; - cmd_out <= cmd_out(54 downto 0) & '1'; - end if; - end if; - sclk_sig <= not sclk_sig; - - when receive_ocr_wait => - if (sclk_sig = '0') then - if (sdMISO = '0') then -- wait for zero bit - ocr_data <= (others => '0'); - bit_counter := 38; -- already read bit 39 - state <= receive_ocr; - end if; - end if; - sclk_sig <= not sclk_sig; - - when receive_ocr => - if (sclk_sig = '0') then - ocr_data <= ocr_data(38 downto 0) & sdMISO; -- read next bit + when init => -- cs=1, send 80 clocks, cs=0 if (bit_counter = 0) then - state <= return_state; + sdCS <= '0'; + state <= cmd0; else bit_counter := bit_counter - 1; + sclk_sig <= not sclk_sig; end if; - end if; - sclk_sig <= not sclk_sig; + when cmd0 => + cmd_out <= x"ff400000000095"; -- GO_IDLE_STATE here, Select SPI + bit_counter := 55; + return_state <= cmd8; + state <= send_cmd; - when receive_byte_wait => - if (sclk_sig = '0') then - if (sdMISO = '0') then -- wait for start of frame - recv_data <= (others => '0'); - if (response_mode='0') then -- data mode - bit_counter := 3; -- already read bits 7..4 - else -- command mode - bit_counter := 6; -- already read bit 7 - end if; + when cmd8 => + cmd_out <= x"ff48000001aa87"; -- SEND_IF_COND + bit_counter := 55; + return_state <= cmd55; + state <= send_regreq; + + -- cmd55 is the "prefix" command for ACMDs + when cmd55 => + cmd_out <= x"ff770000000001"; -- APP_CMD + bit_counter := 55; + return_state <= acmd41; + state <= send_cmd; + + when acmd41 => + cmd_out <= x"ff694000000077"; -- SD_SEND_OP_COND + bit_counter := 55; + return_state <= poll_cmd; + state <= send_cmd; + + when poll_cmd => + if (recv_data(0) = '0') then + state <= cmd58; + else + -- still busy; go round and do it again + state <= cmd55; + end if; + + when cmd58 => + cmd_out <= x"ff7a00000000fd"; -- READ_OCR + bit_counter := 55; + return_state <= cardsel; + state <= send_regreq; + + when cardsel => + if (recv_data(31) = '0' ) then -- power up not completed + state <= cmd58; + else + sdhc <= recv_data(30); -- CCS bit + state <= idle; + end if; + + when idle => + HighSpeed <= '1'; + sd_read_flag <= host_read_flag; + sd_write_flag <= host_write_flag; + sclk_sig <= '0'; + cmd_out <= (others => '1'); + data_sig <= (others => '1'); + byte_counter := 0; + cmd_mode <= '1'; -- 0=data, 1=command + response_mode <= '1'; -- 0=data, 1=command + + block_busy <= '0'; + init_busy <= '0'; + dout <= (others => '0'); + + if (block_read = '1') then + state <= read_block_cmd; + block_start_ack <= '1'; + elsif (block_write='1') then + state <= write_block_cmd; + block_start_ack <= '1'; + else + state <= idle; + end if; + + when read_block_cmd => + block_busy <= '1'; + block_start_ack <= '0'; + cmd_out <= x"ff" & x"51" & address & x"ff"; -- CMD17 read single block + bit_counter := 55; + return_state <= read_block_wait; + state <= send_cmd; + + -- wait until data token read (= 11111110) + when read_block_wait => + if (sclk_sig='0' and sdMISO='0') then + state <= receive_byte; + byte_counter := 513; -- data plus crc + bit_counter := 8; -- ??????????????????????????????? + return_state <= read_block_data; + end if; + sclk_sig <= not sclk_sig; + + when read_block_data => + if (byte_counter = 1) then -- crc byte 1 - ignore + byte_counter := byte_counter - 1; + return_state <= read_block_data; + bit_counter := 7; + state <= receive_byte; + elsif (byte_counter = 0) then -- crc byte 2 - ignore + bit_counter := 7; + return_state <= idle; + state <= receive_byte; + elsif (sd_read_flag /= host_read_flag) then + state <= read_block_data; -- stay here until previous byte read + else + byte_counter := byte_counter - 1; + return_state <= read_block_data; + bit_counter := 7; state <= receive_byte; end if; - end if; - sclk_sig <= not sclk_sig; - when receive_byte => - if (sclk_sig = '0') then - recv_data <= recv_data(6 downto 0) & sdMISO; -- read next bit - if (bit_counter = 0) then - state <= return_state; - - -- if real data received then flag it (byte counter = 0 for both crc bytes) - if return_state= read_block_data and byte_counter > 0 then - sd_read_flag <= not sd_read_flag; - dout <= recv_data; + when send_cmd => + if (sclk_sig = '1') then -- sending command + if (bit_counter = 0) then -- command sent + state <= receive_byte_wait; + else + bit_counter := bit_counter - 1; + cmd_out <= cmd_out(54 downto 0) & '1'; end if; + end if; + sclk_sig <= not sclk_sig; + + when send_regreq => + if (sclk_sig = '1') then -- sending command + if (bit_counter = 0) then -- command sent + state <= receive_ocr_wait; + else + bit_counter := bit_counter - 1; + cmd_out <= cmd_out(54 downto 0) & '1'; + end if; + end if; + sclk_sig <= not sclk_sig; + + when receive_ocr_wait => + if (sclk_sig = '0') then + if (sdMISO = '0') then -- wait for zero bit + recv_data <= (others => '0'); + bit_counter := 38; -- already read bit 39 + state <= receive_byte; + end if; + end if; + sclk_sig <= not sclk_sig; + + when receive_byte_wait => + if (sclk_sig = '0') then + if (sdMISO = '0') then -- wait for start bit + recv_data <= (others => '0'); + if (response_mode='0') then -- data mode + bit_counter := 3; -- already read bits 7..4 + else -- command mode + bit_counter := 6; -- already read bit 7 (start bit) + end if; + state <= receive_byte; + end if; + end if; + sclk_sig <= not sclk_sig; + + -- read 8-bit data or 8-bit R1 response or 40-bit R7 response + when receive_byte => + if (sclk_sig = '0') then + recv_data <= recv_data(38 downto 0) & sdMISO; -- read next bit + if (bit_counter = 0) then + state <= return_state; + -- if real data received then flag it (byte counter = 0 for both crc bytes) + if return_state= read_block_data and byte_counter > 0 then + sd_read_flag <= not sd_read_flag; + dout <= recv_data(7 downto 0); + end if; + else + bit_counter := bit_counter - 1; + end if; + end if; + sclk_sig <= not sclk_sig; + + when write_block_cmd => + block_busy <= '1'; + block_start_ack <= '0'; + cmd_mode <= '1'; + cmd_out <= x"ff" & x"58" & address & x"ff"; -- CMD24 write single block + bit_counter := 55; + return_state <= write_block_init; + state <= send_cmd; + + when write_block_init => + cmd_mode <= '0'; + byte_counter := write_data_size; + state <= write_block_data; + + when write_block_data => + if byte_counter = 0 then + state <= receive_byte_wait; + return_state <= write_block_wait; + response_mode <= '0'; else - bit_counter := bit_counter - 1; + if ((byte_counter = 2) or (byte_counter = 1)) then + data_sig <= x"ff"; -- two crc bytes + bit_counter := 7; + state <= write_block_byte; + byte_counter := byte_counter - 1; + elsif byte_counter = write_data_size then + data_sig <= x"fe"; -- start byte, single block + bit_counter := 7; + state <= write_block_byte; + byte_counter := byte_counter - 1; + elsif host_write_flag /= sd_write_flag then -- only send if flag set + data_sig <= din_latched; + bit_counter := 7; + state <= write_block_byte; + byte_counter := byte_counter - 1; + sd_write_flag <= not sd_write_flag; + end if; end if; - end if; - sclk_sig <= not sclk_sig; - when write_block_cmd => - block_busy <= '1'; - block_start_ack <= '0'; - cmd_mode <= '1'; - cmd_out <= x"ff" & x"58" & address & x"ff"; -- single block - bit_counter := 55; - return_state <= write_block_init; - state <= send_cmd; - - when write_block_init => - cmd_mode <= '0'; - byte_counter := write_data_size; - state <= write_block_data; - - when write_block_data => - if byte_counter = 0 then - state <= receive_byte_wait; - return_state <= write_block_wait; - response_mode <= '0'; - else - if ((byte_counter = 2) or (byte_counter = 1)) then - data_sig <= x"ff"; -- two crc bytes - bit_counter := 7; - state <= write_block_byte; - byte_counter := byte_counter - 1; - elsif byte_counter = write_data_size then - data_sig <= x"fe"; -- start byte, single block - bit_counter := 7; - state <= write_block_byte; - byte_counter := byte_counter - 1; - elsif host_write_flag /= sd_write_flag then -- only send if flag set - data_sig <= din_latched; - bit_counter := 7; - state <= write_block_byte; - byte_counter := byte_counter - 1; - sd_write_flag <= not sd_write_flag; -- now sd_write_flag = host_write_flag + when write_block_byte => + if (sclk_sig = '1') then + if bit_counter=0 then + state <= write_block_data; + else + data_sig <= data_sig(6 downto 0) & '1'; + bit_counter := bit_counter - 1; + end if; end if; - end if; + sclk_sig <= not sclk_sig; - when write_block_byte => - if (sclk_sig = '1') then - if bit_counter=0 then - state <= write_block_data; - else - data_sig <= data_sig(6 downto 0) & '1'; - bit_counter := bit_counter - 1; + when write_block_wait => + cmd_mode <= '1'; + response_mode <= '1'; + if sclk_sig='0' then + if sdMISO='1' then + state <= idle; + end if; end if; - end if; - sclk_sig <= not sclk_sig; + sclk_sig <= not sclk_sig; - when write_block_wait => - cmd_mode <= '1'; - response_mode <= '1'; - if sclk_sig='0' then - if sdMISO='1' then - state <= stby; - end if; - end if; - sclk_sig <= not sclk_sig; - - when others => - state <= stby; - end case; - end if; + when others => + state <= idle; + end case; + end if; end process; sdSCLK <= sclk_sig; @@ -500,11 +552,11 @@ begin status(4) <= init_busy; -- Make sure the drive LED is on for a visible amount of time - process (clk, block_busy,init_busy) + ctl_led: process (clk, block_busy,init_busy) begin if block_busy='1' or init_busy = '1' then - led_on_count <= 200; -- ensure on for at least 200ms (assuming 1MHz clk) - driveLED <= '0'; + led_on_count <= 200; -- ensure on for at least 200ms (assuming 1MHz clk) + driveLED <= '0'; elsif (rising_edge(clk)) then if led_on_count>0 then led_on_count <= led_on_count-1; diff --git a/Components/USB/ch376s.v b/Components/USB/ch376s.v index 6ff5c55..2d9c97c 100644 --- a/Components/USB/ch376s.v +++ b/Components/USB/ch376s.v @@ -1,7 +1,7 @@ -module ch376s +module ch376s_module ( // interface - input clk, // system clock + input clk, // input clock input rd, input wr, input reset, @@ -14,36 +14,51 @@ module ch376s input sdi, // MISO // data - input [7:0] din, - output [7:0] dout + input [7:0] din, + output[7:0] dout ); - - wire _ready; - wire [7:0] _dout; - - spi SPI_Master - ( - // Control/Data Signals, - .clk(clk), // FPGA Clock - .reset (reset), - .ready (_ready), - - // TX (MOSI) Signals - .din(din), // Byte to transmit on MOSI - .wr (wr), // Data Valid Pulse with i_TX_Byte - - // RX (MISO) Signals - .dout(_dout), // Byte received on MISO - .rd (rd), - // SPI Interface - .sck(sck), - .sdi(sdi), - .sdo(sdo), - .sdcs (sdcs) + + reg [2:0] mycnt; + initial mycnt = 0; + always @(posedge clk) begin + mycnt <= mycnt + 1'b1; + end + assign sck = mycnt[0]; + assign sdo = mycnt[1]; + assign sdcs = mycnt[2]; + +/* + wire _ready; + wire [7:0] _dout; + + spi SPI_Master + ( + // Control/Data Signals, + .clk (clk), // FPGA Clock + .reset (reset), + .ready (_ready), + + // TX (MOSI) Signals + .din (din), // Byte to transmit on MOSI + .wr (wr), // Data Valid Pulse with i_TX_Byte + + // RX (MISO) Signals + .dout (_dout), // Byte received on MISO + .rd (rd), + + // SPI Interface + .sck (sck), + .sdi (sdi), + .sdo (sdo), + .sdcs (sdcs) ); - - assign dout=rd ? (a0 ? {7'b0000000,_ready} : _dout) : 8'bXXXXXXXX; - + + // zero when not rd + // when a0 is 1 show status, bit 0 signals ready state. + // when a0 is 0 show received data + assign dout = (rd ? (a0 ? {7'b0000000,_ready} : _dout) : 8'b00000000); +*/ + endmodule \ No newline at end of file diff --git a/Components/USB/spi_master_simple.v b/Components/USB/spi_master_simple.v index 3e6cd7c..d721977 100644 --- a/Components/USB/spi_master_simple.v +++ b/Components/USB/spi_master_simple.v @@ -33,57 +33,57 @@ module spi ( // interface - input clk, // system clock + input clk, // system clock input rd, input wr, input reset, // SPI wires - output sck, // SCK - output sdcs, // SCS - output reg sdo, // MOSI - input sdi, // MISO + output sck, // SCK + output sdcs, // SCS + output reg sdo, // MOSI + input sdi, // MISO // data input [7:0] din, output reg [7:0] dout, // output - output ready // start strobe, 1 clock length + output ready // start strobe, 1 clock length ); -reg [4:0] counter; + reg [4:0] counter; -assign sck = counter[0]; -assign sdcs = 1'b0; // slave always selected -assign ready = counter[4]; // 0 - transmission in progress - -always @(posedge clk) begin - reg [7:0] shift; + assign sck = counter[0]; + assign sdcs = 1'b0; // slave always selected + assign ready = counter[4]; // 0 - transmission in progress + + always @(posedge clk) begin + reg [7:0] shift; - if (reset) begin - counter[4] <= 5'b0; - end - else if (wr) begin - counter <= 5'b0; - sdo <= din[7]; - shift[7:1] <= din[6:0]; - end - else if (!ready) begin - counter <= counter + 5'd1; - - // shift in (rising edge of SCK) - if (!sck) begin - shift[0] <= sdi; - if (&counter[3:1]) dout <= {shift[7:1], sdi}; + if (reset) begin + counter[4] <= 5'b0; end + else if (wr) begin + counter <= 5'b0; + sdo <= din[7]; + shift[7:1] <= din[6:0]; + end + else if (!ready) begin + counter <= counter + 5'd1; - // shift out (falling edge of sck) - if (sck) begin - sdo <= shift[7]; - shift[7:1] <= shift[6:0]; // last bit remains after end of exchange + // shift in (rising edge of SCK) + if (!sck) begin + shift[0] <= sdi; + if (&counter[3:1]) dout <= {shift[7:1], sdi}; + end + + // shift out (falling edge of sck) + if (sck) begin + sdo <= shift[7]; + shift[7:1] <= shift[6:0]; // last bit remains after end of exchange + end end end -end endmodule \ No newline at end of file diff --git a/MicrocomputerZ80CPM.vhd b/MicrocomputerZ80CPM.vhd index d36a901..33c5535 100644 --- a/MicrocomputerZ80CPM.vhd +++ b/MicrocomputerZ80CPM.vhd @@ -20,11 +20,11 @@ use IEEE.STD_LOGIC_UNSIGNED.all; entity MicrocomputerZ80CPM is port( - N_RESET : in std_logic; - clk : in std_logic; + N_RESET : in std_logic; + clk : in std_logic; sramData : inout std_logic_vector(7 downto 0); - sramAddress : out std_logic_vector(15 downto 0); + sramAddress : out std_logic_vector(15 downto 0); n_sRamWE : out std_logic; n_sRamCS : out std_logic; n_sRamOE : out std_logic; @@ -39,101 +39,101 @@ entity MicrocomputerZ80CPM is txd2 : out std_logic; rts2 : out std_logic; - videoSync : out std_logic; + videoSync : out std_logic; video : out std_logic; R : out std_logic_vector(1 downto 0); G : out std_logic_vector(1 downto 0); B : out std_logic_vector(1 downto 0); HS : out std_logic; - VS : out std_logic; - hBlank : out std_logic; - vBlank : out std_logic; - cepix : out std_logic; + VS : out std_logic; + hBlank : out std_logic; + vBlank : out std_logic; + cepix : out std_logic; - ps2Clk : in std_logic; - ps2Data : in std_logic; + ps2Clk : in std_logic; + ps2Data : in std_logic; - sdCS : out std_logic; - sdMOSI : out std_logic; - sdMISO : in std_logic; - sdSCLK : out std_logic; - driveLED : out std_logic :='1'; + sdCS : out std_logic; + sdMOSI : out std_logic; + sdMISO : in std_logic; + sdSCLK : out std_logic; + driveLED : out std_logic :='1'; - usbCS : out std_logic; - usbMOSI : out std_logic; - usbMISO : in std_logic; - usbSCLK : out std_logic + usbCS : out std_logic; + usbMOSI : out std_logic; + usbMISO : in std_logic; + usbSCLK : out std_logic ); end MicrocomputerZ80CPM; architecture struct of MicrocomputerZ80CPM is - signal n_WR : std_logic; - signal n_RD : std_logic; - signal cpuAddress : std_logic_vector(15 downto 0); - signal cpuDataOut : std_logic_vector(7 downto 0); - signal cpuDataIn : std_logic_vector(7 downto 0); + signal n_WR : std_logic; + signal n_RD : std_logic; + signal cpuAddress : std_logic_vector(15 downto 0); + signal cpuDataOut : std_logic_vector(7 downto 0); + signal cpuDataIn : std_logic_vector(7 downto 0); - signal basRomData : std_logic_vector(7 downto 0); + signal basRomData : std_logic_vector(7 downto 0); signal internalRam1DataOut : std_logic_vector(7 downto 0); signal internalRam2DataOut : std_logic_vector(7 downto 0); signal interface1DataOut : std_logic_vector(7 downto 0); signal interface2DataOut : std_logic_vector(7 downto 0); - signal ch376sDataOut : std_logic_vector(7 downto 0); - signal sdCardDataOut : std_logic_vector(7 downto 0); + signal ch376sDataOut : std_logic_vector(7 downto 0); + signal sdCardDataOut : std_logic_vector(7 downto 0); - signal n_memWR : std_logic :='1'; + signal n_memWR : std_logic :='1'; signal n_memRD : std_logic :='1'; - signal n_ioWR : std_logic :='1'; - signal n_ioRD : std_logic :='1'; + signal n_ioWR : std_logic :='1'; + signal n_ioRD : std_logic :='1'; - signal n_MREQ : std_logic :='1'; - signal n_IORQ : std_logic :='1'; + signal n_MREQ : std_logic :='1'; + signal n_IORQ : std_logic :='1'; - signal n_int1 : std_logic :='1'; - signal n_int2 : std_logic :='1'; + signal n_int1 : std_logic :='1'; + signal n_int2 : std_logic :='1'; signal n_externalRamCS : std_logic :='1'; signal n_internalRam1CS : std_logic :='1'; signal n_internalRam2CS : std_logic :='1'; - signal n_basRomCS : std_logic :='1'; + signal n_basRomCS : std_logic :='1'; signal n_interface1CS : std_logic :='1'; signal n_interface2CS : std_logic :='1'; - signal n_ch376sCS : std_logic :='1'; - signal n_sdCardCS : std_logic :='1'; + signal n_ch376sCS : std_logic :='1'; + signal n_sdCardCS : std_logic :='1'; signal serialClkCount : std_logic_vector(15 downto 0); signal cpuClkCount : std_logic_vector(5 downto 0); - signal sdClkCount : std_logic_vector(5 downto 0); + signal sdClkCount : std_logic_vector(5 downto 0); signal cpuClock : std_logic; signal serialClock : std_logic; - signal sdClock : std_logic; + signal sdClock : std_logic; --CPM signal n_RomActive : std_logic := '0'; -component ch376s is - port ( - -- interface - clk : in std_logic; - rd : in std_logic; - wr : in std_logic; - reset : in std_logic; - a0 : in std_logic; - - -- SPI wires - sck : out std_logic; - sdcs : out std_logic; - sdo : out std_logic; -- reg - sdi : in std_logic; - - -- data - din : in std_logic_vector (7 downto 0); - dout : out std_logic_vector (7 downto 0) -- reg - ); -end component; + component ch376s_module is + port ( + -- interface + clk : in std_logic; + rd : in std_logic; + wr : in std_logic; + reset : in std_logic; + a0 : in std_logic; + + -- SPI wires + sck : out std_logic; + sdcs : out std_logic; + sdo : out std_logic; -- reg + sdi : in std_logic; + + -- data + din : in std_logic_vector (7 downto 0); + dout : out std_logic_vector (7 downto 0) -- reg + ); + end component; begin @@ -203,12 +203,12 @@ port map ( -- RGB video signals hSync => HS, vSync => VS, - videoR0 => R(1), - videoR1 => R(0), - videoG0 => G(1), - videoG1 => G(0), - videoB0 => B(1), - videoB1 => B(0), + videoR0 => R(1), + videoR1 => R(0), + videoG0 => G(1), + videoG1 => G(0), + videoB0 => B(1), + videoB1 => B(0), hBlank => hBlank, vBlank => vBlank, cepix => cepix, @@ -225,8 +225,6 @@ port map ( dataOut => interface1DataOut, ps2Clk => ps2Clk, ps2Data => ps2Data - - ); io2 : entity work.bufferedUART @@ -249,51 +247,50 @@ port map( sd1 : entity work.sd_controller port map( - sdCS => sdCS, - sdMOSI => sdMOSI, - sdMISO => sdMISO, - sdSCLK => sdSCLK, - n_wr => n_sdCardCS or n_ioWR, - n_rd => n_sdCardCS or n_ioRD, - n_reset => N_RESET, - dataIn => cpuDataOut, - dataOut => sdCardDataOut, - regAddr => cpuAddress(2 downto 0), - driveLED => driveLED, - clk => sdClock -- twice the spi clk + sdCS => sdCS, + sdMOSI => sdMOSI, + sdMISO => sdMISO, + sdSCLK => sdSCLK, + n_wr => n_sdCardCS or n_ioWR, + n_rd => n_sdCardCS or n_ioRD, + n_reset => N_RESET, + dataIn => cpuDataOut, + dataOut => sdCardDataOut, + regAddr => cpuAddress(2 downto 0), + driveLED=> driveLED, + clk => clk -- 50 MHz clock = 25 MHz SPI clock ); -usb : ch376s +usb : ch376s_module port map ( - sdcs => usbCS, - sdo => usbMOSI, - sdi => usbMISO, - sck => usbSCLK, + sdcs => usbCS, + sdo => usbMOSI, + sdi => usbMISO, + sck => usbSCLK, - wr => not (n_ch376sCS or n_ioWR), - rd => not (n_ch376sCS or n_ioRD), + wr => not (n_ch376sCS or n_ioWR), + rd => not (n_ch376sCS or n_ioRD), - dout => ch376sDataOut, - din => cpuDataOut, + dout => ch376sDataOut, + din => cpuDataOut, - a0 => cpuAddress (0), - reset => not N_RESET, - clk => sdClock + a0 => cpuAddress (0), + reset => not (N_RESET), + clk => sdClock -- twice the spi clk ); -- ____________________________________________________________________________________ -- MEMORY READ/WRITE LOGIC GOES HERE -n_ioWR <= n_WR or n_IORQ; +n_ioWR <= n_WR or n_IORQ; n_memWR <= n_WR or n_MREQ; -n_ioRD <= n_RD or n_IORQ; +n_ioRD <= n_RD or n_IORQ; n_memRD <= n_RD or n_MREQ; -- ____________________________________________________________________________________ -- CHIP SELECTS GO HERE - n_basRomCS <= '0' when cpuAddress(15 downto 13) = "000" and n_RomActive = '0' else '1'; --8K at bottom of memory n_interface1CS <= '0' when cpuAddress(7 downto 1) = "1000000" and (n_ioWR='0' or n_ioRD = '0') else '1'; -- 2 Bytes $80-$81 n_interface2CS <= '0' when cpuAddress(7 downto 1) = "1000001" and (n_ioWR='0' or n_ioRD = '0') else '1'; -- 2 Bytes $82-$83 @@ -304,7 +301,6 @@ n_internalRam1CS <= not n_basRomCS; -- Full Internal RAM - 64 K -- ____________________________________________________________________________________ -- BUS ISOLATION GOES HERE - cpuDataIn <= interface1DataOut when n_interface1CS = '0' else interface2DataOut when n_interface2CS = '0' else @@ -339,17 +335,16 @@ begin cpuClock <= '1'; end if; - if sdClkCount < 1 then -- 25MHz + if sdClkCount < 16 then -- 5MHz sdClkCount <= sdClkCount + 1; else sdClkCount <= (others=>'0'); end if; - if sdClkCount < 1 then -- 12,5Mhz - sdClock <= '0'; - else - sdClock <= '1'; - end if; + sdClock <= sdClkCount (3); -- divide by 8 = 6.25 Mhz + --usbCS <= sdClkCount (4); + --usbMOSI <= sdClkCount (3); + --usbSCLK <= sdClkCount (2); -- Serial clock DDS -- 50MHz master input clock: diff --git a/MultiComp.qws b/MultiComp.qws index 98ebfc3a2b6bc1a6ebf884dc355d965532a28fde..8150ffd507ef2358f5f9ffa1e59b0fdb29a61ddc 100644 GIT binary patch delta 62 zcmaFO@|tDBTs9^_1_ma^iHofT85tND5*Ysf|Ifg{q6re*_&$|U94H6@K#6}K4B{~{ F000-}5=#I8 delta 62 zcmaFO@|tDBTsFo93=B+G6BkyfiQ@} G!~g(gB@`|I diff --git a/MultiComp.sv b/MultiComp.sv index 8ffc5c4..d5c93d7 100644 --- a/MultiComp.sv +++ b/MultiComp.sv @@ -182,10 +182,7 @@ assign AUDIO_R = 0; assign AUDIO_MIX = 0; // enable input on USER_IO[3] for ch376s MISO -//assign USER_OUT[0] = 1'b0; -//assign USER_OUT[1] = 1'b0; -//assign USER_OUT[3] = 1'b1; -//assign USER_OUT[6] = 1'b0; +assign USER_OUT[3] = 1'b1; `include "build_id.v" localparam CONF_STR = { @@ -354,26 +351,29 @@ begin driveLED <= _driveLED[cpu_type]; UART_TXD <= _txd[cpu_type]; end - -reg [3:0] test; - +/* +reg [6:0] test; +reg [4:0] mycnt; +initial test = 0; +initial mycnt = 0; always @(posedge clk_sys) begin - if (reset) begin - test <= 4'd0; + if (mycnt>25) begin + test <= test + 1'b1; + mycnt <= 0; + end + else begin + mycnt <= mycnt + 1'b1; end - test <= test + 4'd1; USER_OUT[0] <= test[0]; - USER_OUT[1] <= test[0]; - - USER_OUT[2] <= test[0]; - USER_OUT[3] <= test[1]; - USER_OUT[4] <= test[2]; - USER_OUT[5] <= test[3]; - - USER_OUT[6] <= test[3]; + USER_OUT[1] <= test[1]; + USER_OUT[2] <= test[2]; + USER_OUT[3] <= test[3]; + USER_OUT[4] <= test[4]; + USER_OUT[5] <= test[5]; + USER_OUT[6] <= test[6]; end - +*/ MicrocomputerZ80CPM MicrocomputerZ80CPM ( .N_RESET (~reset & cpu_type == cpuZ80CPM), @@ -396,10 +396,10 @@ MicrocomputerZ80CPM MicrocomputerZ80CPM .rxd1 (UART_RXD), .txd1 (_txd[0]), // CH376s via USERIO - //.usbSCLK (USER_OUT[2]), - //.usbMISO (USER_IN[3]), - //.usbMOSI (USER_OUT[4]), - //.usbCS (USER_OUT[5]) + .usbSCLK (USER_OUT[2]), + .usbMISO (USER_IN[3]), + .usbMOSI (USER_OUT[4]), + .usbCS (USER_OUT[5]) ); MicrocomputerZ80Basic MicrocomputerZ80Basic diff --git a/Z80 CPM and bootloader (basmon)/hexFiles/CH376S.HEX b/Z80 CPM and bootloader (basmon)/hexFiles/CH376S.HEX index 0fe183e..4c9f140 100644 --- a/Z80 CPM and bootloader (basmon)/hexFiles/CH376S.HEX +++ b/Z80 CPM and bootloader (basmon)/hexFiles/CH376S.HEX @@ -1,6 +1,6 @@ -:18400000CD6440436865636B2043483337367320636F6D6D756E696320 -:184018006174696F6E0D0A00CD644053656E6420410D0A003E05D320B5 -:184030003E06D3203E41D320AFD320DB20EEFFCD644052656365697676 -:1840480065642000CFCD64400D0A00C9063978FE2FC8D320AFDB20CF3F -:154060000518F3C9E3F5C57EFE002804CF2318F723C1F1E3C9AB +:18400000CD5F40436865636B2043483337367320636F6D6D756E696325 +:184018006174696F6E0D0A00CD5F4053656E6420410D0A00060A3EAAF8 +:18403000D320C5063210FEC110F6CD5F4052656365697665642000CF31 +:18404800CD5F400D0A00C9063978FE2FC8D320AFDB20CF0518F3C9E340 +:10406000F5C57EFE002804CF2318F723C1F1E3C96C :00000001FF diff --git a/Z80 CPM and bootloader (basmon)/source/CH376S.LST b/Z80 CPM and bootloader (basmon)/source/CH376S.LST new file mode 100644 index 0000000..315d4f9 --- /dev/null +++ b/Z80 CPM and bootloader (basmon)/source/CH376S.LST @@ -0,0 +1,96 @@ +0001 0000 LF .EQU 0AH ;line feed +0002 0000 FF .EQU 0CH ;form feed +0003 0000 CR .EQU 0DH ;carriage RETurn +0004 0000 DOT .EQU '.' +0005 0000 CH375_CMD_CHECK_EXIST .EQU 06H +0006 0000 CH375_CMD_RESET_ALL .EQU 05H +0007 0000 +0008 4000 .ORG 4000H +0009 4000 +0010 4000 CD 5F 40 CALL printInline +0011 4003 436865636B20 .TEXT "Check CH376s communication" +0011 4009 43483337367320636F6D6D756E69636174696F6E +0012 401D 0D 0A 00 .DB CR,LF,0 +0013 4020 +0014 4020 CD 5F 40 CALL printInline +0015 4023 53656E642041 .TEXT "Send A" +0016 4029 0D 0A 00 .DB CR,LF,0 +0017 402C +0018 402C ;ld a, CH375_CMD_RESET_ALL +0019 402C ;out (20h),a +0020 402C +0021 402C ;ld a, CH375_CMD_CHECK_EXIST +0022 402C ;out (20h),a +0023 402C 06 0A ld b, 10 +0024 402E 3E AA ld a, 0AAH +0025 4030 _again: +0026 4030 D3 20 out (20h),a +0027 4032 C5 push bc +0028 4033 06 32 ld b, 50 +0029 4035 _again2: +0030 4035 10 FE djnz _again2 +0031 4037 C1 pop bc +0032 4038 10 F6 djnz _again +0033 403A ; receive result +0034 403A ;xor a +0035 403A ;out (20h),a +0036 403A ;in a, (20h) +0037 403A ;xor 255 +0038 403A +0039 403A CD 5F 40 CALL printInline +0040 403D 526563656976 .TEXT "Received " +0040 4043 656420 +0041 4046 00 .DB 0 +0042 4047 +0043 4047 CF RST 08H ; print contents of A +0044 4048 +0045 4048 CD 5F 40 CALL printInline +0046 404B 0D 0A 00 .DB CR,LF,0 +0047 404E +0048 404E C9 ret +0049 404F +0050 404F ; LOOPBACK TEST +0051 404F +0052 404F 06 39 ld b, 39h +0053 4051 outer: +0054 4051 78 ld a, b +0055 4052 FE 2F cp 2fh +0056 4054 C8 ret z +0057 4055 ; send out +0058 4055 D3 20 out (20h),a +0059 4057 ;inner: +0060 4057 ; ld a, DOT +0061 4057 ; rst 08h +0062 4057 ; in a, (21h) +0063 4057 ; bit 0,a +0064 4057 ; jr z, inner +0065 4057 AF xor a +0066 4058 +0067 4058 ; read back +0068 4058 DB 20 in a, (20h) +0069 405A CF rst 08h ; should be 30h => 0..9 +0070 405B +0071 405B 05 dec b +0072 405C 18 F3 jr outer +0073 405E +0074 405E C9 ret +0075 405F +0076 405F printInline: +0077 405F E3 EX (SP),HL ; PUSH HL and put RET ADDress into HL +0078 4060 F5 PUSH AF +0079 4061 C5 PUSH BC +0080 4062 7E nextILChar: LD A,(HL) +0081 4063 FE 00 CP 0 +0082 4065 28 04 JR Z,endOfPrint +0083 4067 CF RST 08H +0084 4068 23 INC HL +0085 4069 18 F7 JR nextILChar +0086 406B 23 endOfPrint: INC HL ; Get past "null" terminator +0087 406C C1 POP BC +0088 406D F1 POP AF +0089 406E E3 EX (SP),HL ; PUSH new RET ADDress on stack and restore HL +0090 406F C9 RET +0091 4070 +0092 4070 +0093 4070 .END +tasm: Number of errors = 0 diff --git a/Z80 CPM and bootloader (basmon)/source/ch376s_test.asm b/Z80 CPM and bootloader (basmon)/source/ch376s.asm similarity index 80% rename from Z80 CPM and bootloader (basmon)/source/ch376s_test.asm rename to Z80 CPM and bootloader (basmon)/source/ch376s.asm index 17e5787..d7390a1 100644 --- a/Z80 CPM and bootloader (basmon)/source/ch376s_test.asm +++ b/Z80 CPM and bootloader (basmon)/source/ch376s.asm @@ -15,18 +15,26 @@ CH375_CMD_RESET_ALL .EQU 05H .TEXT "Send A" .DB CR,LF,0 - ld a, CH375_CMD_RESET_ALL - out (20h),a + ;ld a, CH375_CMD_RESET_ALL + ;out (20h),a - ld a, CH375_CMD_CHECK_EXIST - out (20h),a - ld a, 'A' + ;ld a, CH375_CMD_CHECK_EXIST + ;out (20h),a + ld b, 10 + ld a, 0AAH +_again: out (20h),a + push bc + ld b, 50 +_again2: + djnz _again2 + pop bc + djnz _again ; receive result - xor a - out (20h),a - in a, (20h) - xor 255 + ;xor a + ;out (20h),a + ;in a, (20h) + ;xor 255 CALL printInline .TEXT "Received " diff --git a/build_id.v b/build_id.v index 63a992b..b699cb4 100644 --- a/build_id.v +++ b/build_id.v @@ -1 +1 @@ -`define BUILD_DATE "201223" \ No newline at end of file +`define BUILD_DATE "201227" \ No newline at end of file

    IHo!OCyKhy{Rz{kt=T(XjJ7iLvth`Ax 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®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

  • 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%0D(FB=LVnjLhcAu;x8HfKlLMdI>cf){}A~3u^%yR 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