HX3 Remote Application
- 1 HX3 Remote
- 2 Update Procedure (short form)
- 3 Update Procedure (detailed)
- 4 Parameter Tweaking
- 5 Advanced
- 5.1 Re-entering lost licences
- 5.2 Updating a corrupted or old AVR Controller Firmware
- 5.3 Re-Programming by ISP
- 5.4 Updating a corrupted FPGA Sound Engine
- 5.5 Updating all ScanCores
- 5.6 Updating a single ScanCore
- 5.7 Updating a TG tapering file
- 5.8 Updating Horn FIR coeffs
- 5.9 Updating Reverb DSP
- 5.10 Making Your Own HX3 Remote
HX3 Remote for Windows application (named HX3_remote.exe in Github LATEST and BETA directories) is a convenient way to update or maintain your HX3 board or expander. You will need an HX3 Expander equipped with USB port, an USB adaptor cable FTDI TTL232R 5V, or any USB to serial converter based on FTDI FT232R chipset. Note: USB-Serial adaptors of other makes will not work with HX3 Remote!
Most parameter remote functions require HX3 firmware 3.51 and up (as they rely on the new MenuPanel parameter order), but you may also use it for updating older firmwares and FPGA configurations (some additional steps apply).
For beginners, we recommend the simple to use HX3 Update Application.
- Important: Before connecting HX3 Expander with built-in USB Interface to your Windows PC, install driver package from Github DRIVERS zip archive and execute installer CDM 2.08.xxx.exe (as admin)!
- Some PCs will need the ftd2xx.dll and libusb0.dll (provided), depending on Windows installation. Do not use FTDI drivers 2.10 or later for HX3 Expander with USB (see above)!
- Click on firmware ZIP from Github LATEST or BETA directory you want to download. File download will start by clicking "View Raw" in next window.
- Unzip ZIP file to your local harddisk. Use only files and executables in this folder!
- Unplug your FTDI or USB cable from computer again. It is advisable to plug in FTDI cable to HX3 pin header first, then USB plug of cable to computer, then start HX3 Remote. Always quit HX3 Remote before unplugging the FTDI or USB cable.
Connect to HX3 Mainboard
- If your organ has rocker or tab switches connected to PL7 or PL11, switch all to OFF or better remove cables from PL7 and PL11.
- Be sure that jumpers JP7, JP8 and JP5 are removed as for normal operation.
- Connect header of FTDI USB adaptor cable to your HX3 board as shown in picture. The "+5V" pin of FTDI pin header (leading to red wire of FTDI cable) on older HX3 mk2 boards should be cut off, otherwise USB power will supply the board which may lead to problems as voltage is too weak.
- Power up HX3 board. Plug in FTDI cable to your Windows PC.
- Start HX3_remote.exe by double click. The application is completely self-contained and does not need any installation, but it requires to have the avrdude.exe tool (and maybe the DLLs noted above) in the same folder.
- HX3_remote may complain that HX3_factory_defaults.hx3 could not be found. Click Open to load; it is located in the \LATEST folder. HX3 Remote will remember the file last used.
- Click on Device button. A dialog window appears whichs asks to select the FTDI USB cable from the FTDI devices it found; normally, it should be named "TTL232R", "FT232R USB UART" or similar, and only one is shown. Select it and click OK. Now HX3 should respond to the Console window at bottom and show startup info. All buttons will be enabled if everything is OK.
- Make sure it has assigned a COM Port number other than 0 for AVR update (shown right to Device button); should be in the range 1 to 31.
- Move mouse over some items; the bottom hint line will show help info.
If the console window at bottom shows "-9999" or "Timeout" messages, the connection to HX3 could not be established, maybe due to a corrupted firmware. You may update it anyway, see below. Due to some quirks in the FTDI driver, after Windows Sleep mode it may be necessary to remove and reconnect the FTDI cable from your PC before you start HX3 Remote.
Note: Remove jumpers JP7 and JP8 which may still sit on your board from factory programming. These jumpers are only required for updating the reverb DSP. On older HX3 mk2 boards, also set jumper JP6 to STEREO position (opposite to MONO) as audio routing will be selected by AudioJacks parameter resp. MenuPanel in newer firmware.
Connect to HX3 Expander with USB
- Power up HX3 Expander. Insert a standard mini USB cable to HX3 Expander and plug in to your PC.
- Continue with "Start HX3_remote.exe" as above.
Update Procedure (short form)
- Download newest HX3_firmw_xxx ZIP, unzip to new folder on local hard disk. Do not start HX3 Remote from ZIP window! Use only files/applications contained.
- Plug in USB and power supply cable, start HX3 Remote and connect.
- If your HX3 already has Licences installed, check boxes Auto Restore Licences and Use previous HX3 board info.
- Click Update FW and select appropriate HEX file (for example "xxx_std" for HX3 board installations, "xxx_expander" for MIDI expander module). Do not use Preset24.hex, which is for Preset24 board controller (DIY) only!
- Procedure takes about one minute, AVRdude progress shown in separate command window.
- WHen finished, new AVR Version should be displayed.
- Click Update FPGA and select new FPGA_xxxxxx.bit file. This also uploads all scan cores and TG taper_level files.
- Set appropiate scan core and options near Finalize button.
- Otherwise, enter your new Licence numbers in Advanced page and click Send Licences.
- Click Finalize. This transfers licences and also creates a factory reset record on HX3 board.
- Check serials/licences, user and FW information and indicators near licence fields are both light green, showing "OK". Done.
Update Procedure (detailed)
HX3 boards might be updated by customer; you should be familiar with HX3 Remote, though. Updates are available on a regular basis. Anyway, if you are happy with your current configuration, there is no need for any update. The HX3 system consists of five parts:
- the AVR controller firmware, which handles menus, buttons, pots and drawbars connected to HX3 and all MIDI controller events
- the FPGA configuration, the intrinsic HX3 sound engine with tonewheel generator, amps and rotary cabinet simulation
- eight Scan Cores, which scan attached keybeds or MIDI input
- the DSP reverb program for the Spin FV-1 DSP
- four TG/tapering files for 4 different capacitor sets
All parts may be updated independently, although we recommend that you update both AVR and FPGA to maintain integrity. Older FPGA configurations may not work with newer firmware and vice versa. From HX3 Remote 3.7 and up, all eight Scan Cores are updated with FPGA automatically. There is no need to update the DSP reverb unless the board is for OEM customers or the DSP memory has been replaced.
The AVR controller firmware also contains default settings and presets. Caution: Your own presets will be overwritten if not saved and restored by HX3 Remote Export/Import functions. New HX3 Remote 3.71 has some check boxes to save/restore your settings automatically. In any case, write down your Licence numbers as shown by HX3 Remote's "HX3 Board Info" panel before attempting any update.
Updating the AVR Controller Firmware
All HX3 boards are equipped with a so-called bootloader. The bootloader is a little program that runs for some seconds when you turn the HX3 on or insert and remove the reset jumper. It's main function is to wait for the AVRdude tool (installed along with firmware ZIP) on your computer to send it a new firmware for the HX3, which it then writes to the internal flash memory. This is important, because normally you need a special device (ISP programmer) to program the AVR controller. The bootloader is what enables you to update the HX3 firmware using just the USB cable. This requires the tool AVRdude.exe and its AVRdude.conf file to be present in the same folder as the HX3_remote.exe itself.
- Make sure checkboxes Auto Restore Licences, Use previous HX3 board info and Send Licences are checked, otherwise you have to re-enter your licence numbers manually.
- Click Update FW button.
- HX3_remote asks you to select the appropriate .HEX file to program on HX3. Do not use any file with "_boot_" in their names as these are intended for direct ISP programming by OEMs. Do not use Preset24.hex, which is for Preset24 board controller (DIY) only. Please use only the file appropriate for your product (mk2 or mk3). HX3 mk4 board uses mk3 files also. Here is a list of versions available:
- HX3mkX_std.hex Standard version, mainboard with button presets or Preset16
- HX3mkX_expander.hex MIDI expander box version
- HX3mkX_latching.hex Organ with latching presets on Preset12
- HX3mkX_preset24.hex Organ with presets on external Preset24
- HX3mkX_single.hex Compact organ with button presets or Preset16, single manual drawbar assignment
- HX3mkX_single_bv.hex Compact organ with Preset16, single manual drawbar assignment, button vibrato on Panel16
- HX3mk3_xb2.hex HX3 Retrofit Kit for XB2 (mk3 only)
- Every .HEX file is accompanied by a .EEP file with same name which must be present also.
- HX3 Remote sets the HX3 in bootload mode and calls AVRdude with appropriate parameters to flash the new firmware.
- A Windows Command screen appears and runs AVRdude, issuing some nerdy messages.
- When finished (takes a minute or so), HX3 Remote tries to re-sync with HX3 and shows new firmware version info.
- When finished with all tweaks and settings, click "Finalize". This transfers licences and also creates a factory reset record on HX3 board.
As the firmware update overwrites the non-volatile EEPROM parameters, all presets as well as user info and licence numbers, it is time now to re-enter these if you did not check the "Auto Restore (Licence)" box. You may recall them from saved file (see below). This may not work if restoring params from a much older version. After update is completed, please check that you have...
- set the appropriate Scan Core
- enabled/disabled Tone/Amp Volume pots
- set ButtonMask Pins according to your tab layout (buttons or switches)
- green "LEDs" near Licence numbers lit up
Also make sure the FPGA configuration matches to AVR firmware. If not, "FPGA config too old" will be shown in message window.
Updating the FPGA Sound Engine
FPGA configuration and firmware may be updated indepently. Anyway, new FPGA releases may require an update of firmware also and vice versa, as they rely on some features which may not be present in older versions. If in doubt, always update FPGA after every AVR controller update. The FPGA update also installs all Scan Cores (from HX3 Remote 3.7 and up). It will not alter your licences, presets and default settings.
- Click on Update FPGA
- A file dialog appears to select the FPGA configuration (a file called fpga_DDMMYYYY.bit with DDMMYYYY as creation date/version).
- Please note that the Scan Cores (files named HX_xxx.DAT) must be present in the same folder as the selected FPGA configuration, otherwise they will be skipped. At least the "HX_MIDI.DAT" should be present for the HX3 Expander.
- Update takes approx. 2 minutes. When done, check the serial number and FPGA version issued.
- If an "##### Error: Xmodem Out of sync at Packet xxx" error occurred in message window, repeat Update FPGA procedure.
- When successful, HX3 should issue a message like this in the HX3 Response/Messages panel:
#0:254=3.71 [HX3 by CM 09/2010, SingleDrawBars] #0:3=571482132 [$22102014] #0:9910=0 [FPGA: #22102014 OK] #0:9952=16560635 [SERIAL #] #0:9950=15219018 [ORGAN #] #0:9951=4977219 [LESL #] #0:9990=0 [OWNER: Your Name] #0:9900=1 [SCAN: MIDI Rcv Rev #11 OK]
Now you're done! Usually, there is no need to update Scan Cores or DSP reverb program, so disregard the "Update Scan" and "Update DSP" buttons.
Important: HX3 Remote versions below 3.7 do not update the Scan Cores along with FPGA configuration automatically, so they must be installed also. See "Advanced" section for details (bottom of page).
Editing Organ Parameters
- Select the Organ Defaults tab page.
- Clicking Read Params will update the selected table with parameters read from your HX3.
- You may save the tables and all owner/serial number info to a file by selecting "Save Param File as..." from menu to a different file, so you may create a set of different sounding organs.
- To change a parameter, select it in the table by mouse or arrow keys (click on value). You may either type a new number or use the control in the middle to change. Depending on type of parameter, the control may be a slider (as shown), a drop-down menu or a ON/OFF button.
- All changes are temporarily. To make them permanent (power-on default), check the EEPROM Write box while editing or click Write Params (will take a moment to complete) when finished.
Editing Rotary Parameters
Works as "Editing Organ Parameters" above, but changes defaults for rotary simulation. These parameters are delicate and improper values may lead to distorted or unwanted results, especially for those above #610.
Params are mostly intended for development purposes, but I left them in for people eager enough to try out.
- 607 Level Input is input level to the whole simulation. If rotor volume is not adequate, adjust with #608 Level Rotor. As implemented biquad filters for throb eddects have some extent peaks, values above 180 or so may cause hard distortions. The horn filter is a 512-pole finite impulse response filter with loadable coefficients, see at bottom. This is rocket science.
Rotary sim for horn consist of 3 imaginary (exactly 4 if you consider 2nd stereo channel) acoustic beams with adjustable phase offset. Main beam is what the horn would emit in open field. Near/Cab is a near field reflection from an imaginary wall, also considering reflections inside the cabinet which have 4 times the rotary frequency (think of the corners). A far reflection is added with some additional delay and more "space".
Rotor beam only consists of 2 "weak" beams as low frequencies spread widely. All modulation signals are generated by a 4-phase LFO for horn and 2-phase LFO for rotor. Phase relationships, modulation levels and initial delays are adjustable for each. Some parameters would affect others, so if adjusted not properly, "jumps" in phase and modulation may occur.
There are some band pass filters for throb effects with adjustable Q (peak) and frequency, as well as the crossover filter and allpass phase shifter behaviour. Just leave them alone.
Editing MIDI Custom CCs
Firmware versions 3.53 and up provide a custom MIDI CC set, selectable by MenuPanel or HX3 Remote's "Organ Defaults". It works like a MIDI learning function, but more convenient by a special translation table. A MIDI CC number received will be translated to a HX3 parameter change with automatic scaling to the parameter range (i.e. a MIDI CC value of 0..127 will be scaled to 0..5 for the vibrato knob setting).
- Connect your HX3 to HX3 Remote as above.
- Connect masterkeyboard to HX3 module.
- Select the MIDI Custom CC page.
- Press or actuate a MIDI controller on your masterkeyboard.
- HX3 Remote will show the raw MIDI data received and jumps to appropriate CC entry in the CC list.
- Select according HX3 function in radio button list to the right.
- Repeat for other controllers and buttons.
- Select menu "File/Export MIDI CC data" to save configuration to local volume.
- To make your CC setup permanent (power-on default), check the EEPROM Write box while editing or click Write Params (will take a moment to complete) when finished.
You may also select MIDI CC number and HX3 function manually:
- Click on number/white field in "MIDI CC translated to HX3" column.
- Select appropriate HX3 function in radio button list to the right.
- Repeat for other controllers and buttons.
A received MIDI CC value (data byte) of >64 (i.e. 127 for digital controllers) switches the button ON, a value of <63 (i.e. 0 for digital controllers) switches the button OFF. The complete list of HX3 parameters can be found in the HX3 mk3 syntax table.
Note: The MIDI Custom CC translation routine in HX3 firmware works for standard MIDI continuous controllers on upper manual channel only. For Doepfer d3C and similar controllers, the NI B4 setting is a better choice. There are some keyboards on the market (Roland, Viscount, Hammond) that use quite weird drawbar encoding schemes. RPN/NRPN parameter changes, SysEx messages as well as special encodings will not work with Custom CCs. Use the specialised Hammond CC sets instead if using a Hammond XK or SK series. There are no plans to support the NRPN/SysEx madness.
- Select the Upper or Lower table tab and the preset you want to edit with the drop-down menu (upper left corner of tab page). Note: "Live 0" is the power-on setting on HX3 without drawbars connected, like HX3 expander module.
- Adjust your preset with sliders and checkboxes at bottom of tab page. All changes are to be heard immediately.
- All changes are temporarily (volatile). To make them permanent (power-on default), check the EEPROM Write box while editing or click Write Params (will take a moment to complete) when finished.
- You may also read the HX3 presets by clicking Read Params before editing. This will read all upper or lower presets, not only the preset shown in the tab page.
- Current presets may be saved to or restored from your personal parameter file also (see "Creating your personal settings file" section below).
Setting User Info and Licences
- Enter your name in the beige User Name field. It should not contain special letters other than ASCII (sorry, Umlaute not allowed).
- If you already have an Organ or Rotary key, they should be displayed in the Licence fields. Invalid keys will be shown, but will not work (indicators right to the licence fields will be dark).
- Old licence numbers from FPGA versions below 01052014 will not work. You may obtain new licence keys from KeyboardPartner as an upgrade (free until June 2014 - send an email with your new serial number after FPGA update regarding "BETA/LATEST").
- If you got new licence numbers, type them in carefully and click Send Licences which will activate the functions if correct and also set the new user name.
- Your personal setting including user name, licences and all parameters should be saved to a personal parameter file (use file menu, "Save Setup File as..."). HX3 Remote will remember your personal settings file when starting the application again and open it automatically. Current file path is diplayed in HX3 Remote's window top.
- Update of FPGA, controller firmware and ScanCores work indepently of Licence entries.
Creating your personal settings file
The table to the left shows values found in the param file opened. You may want to read the current values of your HX3 instead:
- Select the table page to be read from HX3 and click Read Params. This will update only the page displayed.
- For each page (Organ Defaults, Leslie Defaults, MIDI Custom CC, Upper and Lower Presets) repeat the steps.
- Click on Refresh Info to read the user name and licence numbers present on your HX3.
- Your personal setting including user name, licences and all parameters should be saved to a personal parameter file (use file menu, "Save Param File as...").
- HX3 Remote will remember your personal settings file when starting the application and open it automatically. Current file path is diplayed in HX3 Remote's window top.
Restoring HX3 with your personal settings file
After updating the AVR controller firmware, the HX3 is set to factory defaults and presets, licence info erased.
- Open your personal parameter file (use file menu, "Open Param File..."). All tables, user name and licence numbers will be read from this file and displayed.
- To restore licence info, click on Send Licences (takes a few seconds).
- To restore one of the tables, select it, check Store changes to EEPROM box and click Write Params. Only the table displayed will be sent, so it is possible to restore the Organ Defaults or the Lower Presets separately, for example.
Re-entering lost licences
If organ and rotary licence have been lost during faulty update, they may be re-entered anytime.
- Go to Advanced page.
- Enter User Name and your licence numbers in "Create new HX3 Board Licences" fields. If you even lost your documented licences, new numbers can be obtained for free from KeyboardPartner, regarding "LICENCE LOST". Please attach your name, invoice number and HX3 serial number (displayed after firmware update).
- Click Send Licences.
- Check or uncheck No Drawbars and Tone/Amp Vol Pot Enable boxes as required.
- Click Finalize button.
Updating a corrupted or old AVR Controller Firmware
The HX3 bootloader is compatible with Arduino and Atmel STK500v1. On firmware versions 3.52 and up, the bootloader may be invoked by serial command "9980=0" (which is done by HX3 Remote automatically). Firmware versions up to 3.51 had no provision to enter the bootloader without inserting a jumper for hardware reset as described in the wiki page Firmware-_und_FPGA-Update.
- Click Update AVR and select the firmware .HEX file.
- HX3 Remote will show a message to instruct you when to insert and pull the reset jumper (see picture above for location).
- If the AVRdude command window shows an "out of sync" message, you may have removed the reset jumper too late or too early when clicking "OK". Try again.
In rare cases, HX3 may respond to nothing at all, just the bootloader flashes the red LED on board a few times. This might happen if AVRdude tool is interrupted or cable removed while programming, or a faulty or wrong firmware was installed. Only in this case, download the HX3_avr_repair ZIP file, extract to your local hard disk and follow instructions in README.
When finished, update FW to appropriate version with HX3 Remote. If yellow LED is on or flickers, there is no need to update FPGA as long as the FPGA version returned is #25042015 or newer. Enter your licences in "Advanced" page and click on "Send Licences". "OK" indicators in board info section must be light green. Click "Finalize".
Re-Programming by ISP
The bootloader is protected against accidental overwriting by special fuses. Anyway, the complete AVR controller may be re-programmed by an external ISP programmer for AVR chips. In github repo FOR_OEM you will find a sample batch for reporgramming HX3 with the DIAMEX PROG-S ISP programmer from Reichelt. This installs standard firmware 3.71 and also re-installs bootloader if damaged.
Updating a corrupted FPGA Sound Engine
The FPGA and ScanCores could not be updated as described before if the FPGA configuration on HX3 is corrupted (will show "0000000" or "FFFFFFFF" as FPGA version, also indicated by flash verify errors in message window, yellow LED on HX3 board stays off). HX3 will fall into a test mode in this case, indicated by blinking panel button LEDs and a message on MenuPanel (if present). HX3 Remote will regard this case and tell you when to insert and remove the CONF_DIS jumper. When inserted, it prevents the FPGA from blocking the flash programming.
- Only in this case you must insert the CONF_DIS jumper on your HX3 board as requested by HX3 Remote.
- Make sure HX3 responds to "Refresh Info" button. It may show random or invalid serial FPGA Version numbers. If there is no response ("-9999" timeout message), click Reset HX3 button and try again. In rare cases, it may be necessary to quit HX3 Remote, unplug the FTDI cable, power-off HX3 and start all over.
- Click Update FPGA. A file dialog will appear to select the FPGA configuration (normally "main_midi.bit"). Please note that the Scan Cores (files named "HX_xxx.DAT") must be present in the same folder as the selected FPGA configuration, otherwise they will be skipped. At least the "HX_MIDI.DAT" should be present for the HX3 Expander.
- After update (will take about 2 min.), remove the CONF_DIS jumper and click Reset HX3.
- When done, check the serial number and FPGA version issued.
Updating all ScanCores
ScanCores are routines for a small embedded processor in the FPGA which drive the attached scan boards or accept MIDI input. Note: ScanCores could only be updated if the FPGA configuration is OK (check Serial# and FPGA Version).
- Select Advanced settings page.
- Select Update ALL in drop-down menu near Update Scan button.
- Click on Update ScanCore. A file dialog will appear to select one of the ScanCores (like "HX_XXX.DAT") - this is just to define the folder where the ScanCores are located. Please note that the ScanCores to be updated must be present in the same folder as the selected one, otherwise they will be skipped. At least the "HX_MIDI.DAT" should be present for the HX3 Expander.
Updating a single ScanCore
ScanCores are programs executed by a small embedded processor in FPGA, called PicoBlaze. I use Mediatronix pBlazeIDE to assemble. You may adapt a ScanCore to your own key scanning electronics. Sample sources for Fatar and MIDI scan cores are in our Github repo.
- Select Advanced settings page.
- Select the ScanCore to be updated by drop-down menu ScanCore #.
- Click on Update Scan.
- A file dialog will appear to select one of the ScanCores (like "HX_XXX.DAT"). Normally, it should match the one you selected in the drop-down menu ScanCore #, i.e. if you selected "FatarScan" you should open the HX_FATAR.DAT ScanCore file. However, it is possible to overwrite a ScanCore # with a different one (for experts only!).
Updating a TG tapering file
All 4 generator tapering files taper_levels1.dat ("1955") to taper_levels4.dat ("Recapped") are uploaded to HX3 automatically by FPGA update. However, you may want to upload a single custom-made generator levels scheme. Custom tone generator level files may be created by hx3_tapering.exe application and uploaded to your HX3 (experts only!):
- Create your own taper_levels.dat file with hx3_tapering.exe and save.
- Select Advanced settings page.
- Click one of the Update TG buttons, depending on TG level set you want to replace
- Try out new scheme (restart of HX3 may be necessary)
- If distortions occur, repeat with reduced output scaling in hx3_tapering.exe
- If volume too low, repeat with increased output scaling in hx3_tapering.exe
Updating Horn FIR coeffs
The rotary simulation's horn filter is a 512-pole FIR filter. Coeffizients are stored in file "fir_coeff.dat" as consecutive 16-Bit integer values which is uploaded to HX3 automatically by FPGA update. You may upload your own coeff file:
- Select Advanced settings page.
- Click Update FIR button and select your own coeff.dat file.
- Try out new filter (restart of HX3 may be necessary).
Updating Reverb DSP
The Reverb DSP is pre-programmed by factory and should not be touched normally. If corrupted, proceed as follows:
- Connect to power supply, USB cable and establish connection as above.
- Have 2 jumpers handy to be installed on JP7/JP8 when HX3 Remote requests.
- Select Advanced settings page.
- Click Update DSP button and select dsp_rev.bin file.
- When upload is complete, HX3 Remote requests to insert and remove JP7/JP8.
- If message window shows "#0:9960=10 [UPLOAD DF TO DSP ................]" the DSP update is OK. If "#######" is displayed instead of dots, JP7/JP8 are missing or interrupted.
- Remove jumpers and click "Finalize".
Anyway, you may create your own DSP programs with SpinASM from Spin Semiconductor. Sources are available in our Github repo. Spin Semi has a comprehensive documentation on DSP effects. The DSP programs are uploaded to a separate I2C EEPROM near Spin FV-1 DSP as a compilation of 3 different reverb programs. FV-1 pot inputs are controlled by 3-output PWM generator in FPGA.
Making Your Own HX3 Remote
HX3 Remote is written in Object Pascal (Delphi Release 2005). You might be a better Delphi programmer than me, so feel free to improve the application (and tell others!). Sources are provided in our Github repo (fork it to your own release). Suggestions for improvements are welcome.