ZDS II - ZNEO(TM) 5.2.0 (Build 15071301) ============================================================================== Thank you for purchasing this development kit for the ZiLOG ZNEO(TM) microcontroller family. The following features are provided in this release: - ZNEO(TM) language tools including C compiler, assembler, linker/locator, librarian, and disassembler - ZNEO(TM) cycle-accurate Instruction Set Simulator - ZNEO(TM) in-circuit debugger and programmer with USB Smart Cable and Ethernet Smart Cable support The technical documentation supplied on this CD-ROM is available in PDF format. This format requires that Acrobat Reader or equivalent be installed on the host machine. Acrobat Reader is available on this CD-ROM and is available free on the Adobe website at www.adobe.com. In the event of a component problem, please complete the Problem Report Form and submit it with your request. The form is located on the CD and in the installation directory of your hard drive. Our staff will use the information to diagnose or log the problem. Contact Information -------------------------------------------------------------------------- ZiLOG Inc. Web Site: http://www.zilog.com Technical Support Channel: http://support.zilog.com (old site) http://www.zilog.com/index.php?option=com_product&task=tech_support&Itemid=88 Table of Contents -------------------------------------------------------------------------- A. CHANGES FROM PREVIOUS RELEASE B. COMPATIBILITY C. SYSTEM REQUIREMENTS D. APPLICATION AND OTHER OS ISSUES E. PRECAUTIONS AND LIMITATIONS F. CLOSED CHANGE REQUESTS G. OPEN CHANGE REQUESTS A. CHANGES FROM PREVIOUS RELEASE ============================================================================== (In 5.2.0) - A new C header file has been added. This new header makes it easier to write C code that manipulates bits and other fields in SFRs by defining symbolic names for all these fields. The syntax and examples for using this new file are given in the Online Help. - The C standard Library has been expanded by adding many new functions which are specific to the ZNEO memory map. These functions are variants of those Standard Library functions that take pointer parameters. In the new variants, pointers into each of the ZNEO memory spaces are supported so that users do not have to make their own modifications to the library. More information is given inthe Online Help. - MaxBranch option is added in the project settings -> assembler page - In the Workspace window, the dependency files of a source file is now hierachically displayed after the source file. - The edit fields are replaced with list views in the following project settings pages: o Assembler->"defines: and "includes directories" o Linker->"Address space", and "Additional Objects and Libraries" - Register address is shown in the SFR window when hovering on a Register. - Symbol window now displays symbols in sortable column. (In 5.0.3) - The assembler more strictly enforces correct syntax and usage for the condition codes such as LT, GE, etc. - The assembler has been updated to check more carefully that values computed in an expression will fit into the assembly code operand in which they are used. - Some issues with local labels inside a macro not always being handled correctly in the macro expansion have been corrected. - Some errors that occur when showing absolute addresses in a listing file have been changed to warnings. - The names STRUCT and UNION are now treated as reserved keywords in assembly code. - Several improvements have been made to make compiler listing files more readable. The handling of macro expansions and include files have been enhanced. - The compiler is now better able to deal with long or complex path names in searching for files to be included in the project. - Longer command lines, which may be generated by the inclusion of many files with lengthy path names, are now supported in the build process. - The tracking of error locations to the correct line and column numbers in compiler error messages has been improved. - The interaction of the placement and ALIGN features in compiled code has been made consistent. - The prototypes of several C Standard Library functions used in dynamic memory allocation have been changed to conform to the standard by using arguments of type size_t instead of int. - Unnecessary compiler error messages related to certain enum type declarations have been removed. - A compiler issue in which the offset applied to a statically declared struct could be computed incorrectly has been corrected. (In 5.0.2) - Two important Assembler Change requests have been fixed. - The compiler, IDE, linker, simulator, and librarian tools are absolutely unchanged from 5.0.1 except for the new overall build date and version number. (In 5.0.1) - Three important Assembler Change Requests have been fixed. Only one of these, CR 13204, represents a problem in 5.0.0 that was previously working correctly. - The compiler, IDE, linker, simulator, and librarian tools are absolutely unchanged from 5.0.0 except for new build dates and the new version number. (In 5.0.0) - Added Intelligent Editor support that allows you to read and write code faster, navigate intelligently, and identify and correct mistakes. - Added color configuration per syntax style - Added printing capability for the following windows: output, disassembly, callstack, symbol, memory and register. To print the window content, click on the content of the window and press CTRL+P or right mouse-click on the window and select "print". - Added Window 7 support. Please refer to the USBsmartcable driver installation procedure described in the "USB driver installation.txt" located in \device drivers\USB - Assembly structures and unions are now fully supported; see the ZDS II User Manual or Online Help, in the Directives section, for more details. - Added clearer messages when a build fails. - The allocation of used and unused memory is now printed in both the build output window and hex file after a successful build, in both decimal and hex formats. - NUMLOCK display is no longer supported due to the variety of keyboard mappings. - Added save disassembly contents to a text file on right-click on disassembly window (CR 12493). - Numerous Change Requests have been addressed. Refer to the Closed Change Requests section for more details. (In 4.12.0) - Added support for Z16FMC Motor Control Series. The following devices are added: Z16FMC28xx, Z16FMC64xx, Z16FMC32xx. B. COMPATIBILITY ============================================================================== Devices -------------------------------------------------------------------------- Z16FMC Series: Z16FMC28xx, Z16FMC64xx, Z16FMC32xx Z16F Series : Z16F2810xx, Z16F2811xx, Z16F3211xx, Z16F6411xx Please refer to the Project > Settings > General > CPU selection for the latest supported devices. External Flash Devices -------------------------------------------------------------------------- Micron: MT28F008B3xx-xxB, MT28F008B3xx-xxT AMD: AM29LV160BB, AM29LV160BT, AM29LV008BB, AM29LV008BT, AM29LV081B ST Micro: M29W008AB, M29W008AT, M29W008EB, M29W008ET Atmel: AT49BV162A, AT49BV162AT Intel: TE28F800B3BA, TE28F800B3TA SST: SST39XX080 In-Circuit Debuggers/Programmers -------------------------------------------------------------------------- USB Smart Cable, firmware version 1.4 or later (except ver 1.8): ~ ZDS Debug Tool selection: USBSmartCable ~ Supports target frequencies from 10KHz to 20MHz ~ Supports target voltages from 2.7V to 3.6V ~ Requires 2mA from the target Opto-Isolated USB Smart Cable, version 1.3 or later (except ver 1.8): ~ ZDS Debug Tool selection: USBSmartCable ~ Supports target frequencies from 32KHz to 20MHz ~ Supports target voltages from 2.7V to 3.6V ~ Requires 2mA from the target Ethernet Smart Cable, version 1.0 or later: ~ ZDS Debug Tool selection: EthernetSmartCable ~ Supports target frequencies from 32KHz to 20MHz ~ Supports target voltages from 2.7V to 3.6V ~ Requires 2mA from the target USB device drivers and installation instructions can be found in one of the following locations: \device drivers\USB\x32\ \Device Drivers\USB\x32\ The firmware and upgrade instructions can be found in the following directory: \bin\firmware\ Please visit ZiLOG's website for latest versions. http://www.zilog.com/software/zds2.asp C. SYSTEM REQUIREMENTS ============================================================================== Supported Operating Systems -------------------------------------------------------------------------- Windows 8 /32 and 64-bit Windows 7 /32 and 64-bit Windows Vista 32 and 64-bit USB Smart Cable -------------------------------------------------------------------------- Hi-Speed USB (Fully compatible with Original USB) Root (direct) or self-powered hub connection *The USB Smart Cable is a high power USB device Ethernet Smart Cable -------------------------------------------------------------------------- Ethernet 10Base-T compatible connection D. APPLICATION AND OTHER OS ISSUES ============================================================================== 1. Apply the latest Windows updates to the host system when appropriate. 2. ZDS II will terminate an active target connection when the host goes into Stand by or Hibernate. 3. Some systems with one or more other USB devices connected may not boot properly after connecting the USB Smart Cable. WORKAROUND: Connect the USB Smart Cable after the system has started. E. PRECAUTIONS AND LIMITATIONS ============================================================================== Debugger & Programmer -------------------------------------------------------------------------- 1. Editing and building code while in Debug mode requires that the current debug session to end. Restart the debugger, after completing the build, to debug the new code. 2. The Watch Dog Timer (WDT) must be disabled while debugging the target. The WDT will cause the processor to perform a reset and the debug mode will not be enabled upon reset. Therefore the debugger will lose control of the processor. 3. The debugger does not support ZNEO's instruction execution trace feature. 4. The debugger does not support arrays with more then 6 dimensions. 5. When "No" is selected in response to the warning/prompt that flash options bits will be overwritten and whether to continue, the IDE shows a progress bar as though it continues to write to flash. In actuality, the flash is not written. 6. When debugging a program that changes the system clock and enters STOP mode, add at least a 300 msec delay between the system clock change and the STOP instruction execution otherwise the debugger may not be able to retain the target connection. 7. ZDS opens a UDP port to search for Ethernet Smart Cables and should be allowed to do so through an active firewall that stands between ZDS and the Ethernet Smart Cable. The firewall may be disabled or configured to grant ZDS the right to open a local UDP port. The local port number is assigned by the host and the foreign port number is 3000. 8. The USB and Ethernet Smart Cables will hold the reset line low if it detects a target power loss. 9. Stepping over a POPF instruction in the debugger will result in unusual behavior due to the assembler workaround described below in "Compiler, Assembler, Linker/Locator, & Librarian Precautions & Limitations, #2". When the step is initiated, the Disassembly window will be opened with the PC indicator pointing to an IRET2 instruction (the 2nd instruction of that assembler workaround). Perform a step in the Disassembly window to advance the PC indicator to the next assembly statement, then resume stepping in the source code window. 10. Selecting "Watchdog" as a clock source and 0.010000MHz frequency from ZDS>Project Settings>Debugger>Target>Setup will take time before it will stop when you hit "Stop Debugging". 11. It is recommended to use other terminal software other than Hyperterm when using Vista such as TeraTerm. 12. There is a bug in the ZNEO DMA register read back logic. The DMQxREQSEL registers can be written, but they do not read back correctly. 13. USB Smart Cable Firmware 1.8 is not compatible with ZNEO devices. 14. When the External Flash [ ] Automatically Detect Device is selected under Project > Settings > Debugger > Target Setup > Configure Flash the IDE will flash a warning as shown: "[Warning] Could not determine external flash selection" This is not a problem and could be ignored. Normal debug session is not affected. 15. Please see OPEN CHANGE REQUESTs below section for additional info. Compiler, Assembler, Linker/Locator, & Librarian -------------------------------------------------------------------------- 1. The list file is generated with 52 lines per page if Show Absolute Addresses in Assembly Listings is selected. 2. The POPF instruction is being translated to an alternative, equivalent but considerably longer set of instructions by the assembler. This is a temporary workaround for ZNEO silicon erratum #4 (see UP0087, Product Update: Errata for ZNEO Z16F Series). The POPF instruction is currently translated to the following equivalent: PUSH #NextInst IRET2 NextInst: Here, IRET2 is an alternative version of the IRET instruction which is required in this context to avoid problems with chained interrupt handling. 3. Please see OPEN CHANGE REQUESTs below section for additional info. F. CLOSED CHANGE REQUESTS ============================================================================== IDE -------------------------------------------------------------------------- (Fixed in 5.2.0) CR 13400 Negative 16-bit value is not properly displayed in the watch window. CR 13393 Hovering on a recently modified constand macro doesn't display the updated value. (Right-mouse click to update intellisense database). CR 13282 Flag if the same firmware version is selected on firmware upgrade. CR 8669 add column headers to symbol windows and ability to sort the column on a header click. CR 6946 Ability to branching offsett(12,16,24,32) in the assembler (Fixed in 5.0.0) CR 13168 IDE crashed when source contains extended ASCII characters CR 13143 Editor autocompletion does not support pointer type CR 12493 No feature to save disassembly contents to a file CR 10324 bit fields was not displayed properly in the watch window CR 9350 "Delete config" script command does not work properly CR 6315 In all downloads to memory, display checksum of the downloaded file and successful/failure message CR 5516 No shortcut key for find in files. Assembler -------------------------------------------------------------------------- (Fixed in 5.2.0) CR 13394 Equates that use '$' are not handled correctly by optimizations that change instruction size. CR 13368 Assembler STRUCT feature shows incorrect addresses in relist file, though actual code generated is correct. CR 13363 Vector Table machinery wrongly picks up IRQ routines defined in libraries. CR 13249 Several problems with assembler correctly enforcing the restricted scope of local and anonymous labels. CR 13201 Need a way to disable the warning message "Unsupported initialization of ERAM." CR 13059 Assembler should not allow relocatable data in a directive that reserves space, such as BLKB. CR 11704 Assembler gives internal error for deeply nested (more than six levels) STRUCT TAG definitions. CR 11063 Assembler internal error when a struct name is used in EQU statements. CR 7767 Assembler reports an error if a label is declared both XDEF and XREF in the same module. CR 6075 Syntax error reported when a comment line is terminated by a CR only instead of the required newline. CR 4258 Mapfile and debug line information are corrupted when both absolute and relocatable segments are in use. CR 1397 If an included file has an undefined symbol and you click on the error message, the display jumps to a location in the wrong source code file. (Fixed in 5.0.3) CR 13396 Use of the current PC via the $ symbol in an IF directive may be incorrect due to later optimization of some instructions. CR 13395 Symbols defined using the $ symbol may have incorrect values due to later optimization of some instructions. CR 13279 Provide ways to control or suppress specific assembler warning messages in the build output. CR 13240 CONDLIST directive does not interact correctly with NOLIST directive in assembler listing files. CR 13199 ZNeo instructions that use the soff6(FP) instruction format require that the offset be defined before being used in such an instruction. (Fixed in 5.0.2) CR 13213 Assembler incorrectly sets sign bit in 17-bit signed immediate offset operands if the offset is a difference of two RAM addresses. Seen especially using a label defined via $. CR 13210 Using anonymous ($) label to define other labels in assembly code produces incorrect range errors and addresses. (Fixed in 5.0.1) CR 13204 Assembler fails to adjust PC properly when optimizing zero-offset LD instructions. CR 13203 LOW and HIGH operators give bad opcode when operand is label instead of constant or equate. CR 13198 ZNEO instructions with soff6(FP) syntax do not handle struct labels as offset. (Fixed in 5.0.0) CR 13180 Assembler STRUCT/ENDSTRUCT directive should arrange that structure size is a multiple of the alignment requirement. CR 13178 ZNeo assembler could optimize instructions that use a signed offset of 0. CR 13177 Assembler struct feature improperly allows a label to be defined as both an equate and a struct size. CR 13176 Over-aggressive assembler optimization for LEA with PC- relative address mode and large offset gives wrong code. CR 13175 Assembler gets the sign extension bit wrong on LD Rd,#simm17 when simm17 is defined by an equate. CR 13174 Assembler can produce bad code for sequences of DB directives using quoted strings to initialize data. CR 13085 Assembler puts "Label undefined, assumed XREF" warning on wrong line of source code. CR 13054 Use of a symbol defined by an ENDSTRUCT directive prior to the definition caused the symbol to be treated as undefined. CR 13052 Use of the IFSAME or IFNOSAME directives inside the false branch of another IF directive terminated the containing IF. CR 13046 Using the GLOBALS or XDEF directive on STRUCT labels causes a fatal linker error. CR 13040 An XDEF'ed EQU-defined symbol causes an error if it in turn depends on an XREF symbol defined in another module. CR 12996 The assembler dies with an internal error, rather than a useful error message, upon finding an undefined symbol (e.g. a typo). CR 12993 Anonymous symbols in absolute segments are improperly treated by applying relocation information. CR 12323 The assembler dies with an internal error, rather than a useful error message, if a symbol is defined and later mistakenly declared EXTERN in the same file. CR 12106 The assembler fails to give an error when the $ directive is used in an empty segment. CR 11797 Internal error when DB is used to initialize a very specific sequence of bytes using numerical values & single quotes. CR 11354 Internal error when project has large number of include files, some of which are empty. CR 10526 Debugger behaving improperly, related to not handling line information properly in assembler. CR 10486 Syntax error is reported if a label starts in the first column and is immediately followed by a semicolon. CR 9606 Tokens are taken as labels despite neither starting in column 1 nor being followed by a colon. CR 9592 Assembler should give an appropriate warning message if data directive tries to initialize data in RAM-like address space. CR 9527 Problems with DJNZ to an external label in ZNEO assembler. CR 8728 Assembler fails to give an error if same symbol is declared EXTERN twice with conflicting space labels. CR 5771 Assembler should indicate that a relist is being performed. CR 5579 Assembler does not accept DF directive if the floating-point constant begins with a decimal point. CR 3743 STRUCT, TAG, and related directives aren't fully supported. Compiler -------------------------------------------------------------------------- (Fixed in 5.2.0) CR 13371 Bad code generated when computing a macro parameter that is used repeatedly inside the macro. CR 13366 Implementation of the compiler ALIGN directive does not allow variables to be initialized properly. CR 13359 Backend internal error on attempt to call an absolute address. CR 13242 Some bit-field manipulating code gives a P3 internal error when built, depending on the size of the bit-field's declared type. CR 10516 Code generated for accessing array members doesn't always use the most efficient instruction forms available. CR 8630 Internal error when applying the exclusive-or assignment operator to a bitfield member. CR 8466 Backend internal error on recursive structure references. CR 8393 Read of a volatile peripheral control register optimized out when the value read is not used later in the function. CR 7726 Preprocessor doesn't handle ternary operator as part of constant expression. (Fixed in 5.0.3) CR 13327 Improve processing of embedded asm lines in compiler to reduce likelihood of registers used by asm lines coliding with those used in compiler-generated code. CR 13294 Support new #pragmas asm and endasm to allow easier embedding of blocks of assembly code inside C programs. CR 13279 Provide ways to control or suppress specific compiler warning messages in the build output. CR 13232 Lack of reentrancy in printf and related standard library files sometimes produces garbage output from UART. CR 12510 An ambiguity is present in certain C statements in which the sizeof() operator is applied to an array of objects that are defined using a typedef name. CR 4018 Functions declared to be interrupt handlers are improperly allowed to take arguments and to be called directly from other functions. (Fixed in 5.0.0) CR 13189 Compiler does not handlle very long source lines (over 5000 characters) created by trailing backslashes. CR 13185 Compiler generates bad code when trying to convert an address to floating point in a calculation. CR 13184 Windows error message "p3 has encountered a problem" for certain cases of forward references in include files. CR 13181 Front end gets internal error on source code containing a combination of an incomplete struct definition and an improper array declaration. CR 13179 Optimizer "global optimizations disabled" message is reported on the wrong function. CR 13173 Compiler may give internal error when trying to simplify some very specific algebraic identities. CR 13161 Compiler can't handle maximal negative integer as a case value. CR 13128 For one specific combination of compiler settings, compiler may improperly reverse the order of increment and compare operations on a struct member of an array element. CR 13048 The optimizer may incorrectly move a variable outside of a loop if its initialized value is used only on the first pass through the loop. CR 13044 Compiler mistakenly prints an internal debug message during user builds, if a particular optimization is used. CR 13035 Some pointer arithmetic operations on signed 32-bit pointers are improperly optimized away. CR 13026 The compiler improperly may change the number of consecutive accesses to volatile variables, or the order of accesses to different volatile variables. CR 12998 The compiler doesn't accept the (strictly speaking illegal, but now common) use of const-qualified variables as array dimensions. CR 12985 Concatenation of 3 strings fails if the middle one contains only a single character. CR 12963 The compiler may incorrectly generate an indirect operand when it should be a literal value, for bitwise operations on volatile variables that are not grouped with parentheses. CR 12590 Concatenated strings containing newlines are not handled properly. CR 12578 If a function argument is pre-incremented, the compiler skips the function call. CR 12569 Use of sizeof() inside complex expressions can generate incorrect code unless all constants are moved to the beginning of the expression. CR 12527 Internal error when user tries to increment the address of a structure member. CR 12449 Problem when initializing an array of rom long variables with pointer values. CR 12413 Compiler reports fatal "range error" when trying to compile an extremely huge switch-case statement. CR 12377 The pragma noglobalopt is not functioning properly. CR 12376 The pragma noopt is not functioning properly. CR 12373 No warning is given if not all paths through a function return a value. CR 12249 Problem when initializing a global long variable with a pointer value. CR 11948 Overoptimization wrongly removing code due to erroneous copy propagation algorithm. CR 11475 Compiler gives internal error, rather than useful error message, when asked to initialize an array member with an expression involving non-integer arguments to the << operator. CR 11364 For the following statement: *gptr() = 0x12; Function gptr is called twice. CR 11272 Compiler error message for complex while() condition involving pre-incremented pointer. CR 11057 P1 internal error when an enum definition comes after at least one function definition has already occurred. CR 11022 P2 internal error when explicitly comparing the address of a struct member to 0, as in "if (&str->member == 0)". CR 10756 P2 internal error for a particular combination of case and printf statements. CR 10075 Compiler improperly optimizes out read of the volatile variable i in this code: if (i){} -- ONLY when the body between the {} braces is blank. CR 10063 Overly aggressive optimization due to optimizer not recognizing that volatile variables may be updated in function calls. CR 9997 Compiler hangs when compiling a switch-case for which the default case is an empty while(1) loop. CR 9961 Overly aggressive optimization removing an instance of dereferencing a volatile pointer. CR 9919 Struct members with same name but different scope not being accessed correctly. CR 9871 P2 internal error results when there are multiple named aliases of pointer variables used in a context that expects an address. CR 9654 The .lis file should be placed in the Intermediate Files Directory rather than the associated source file's directory. CR 9445 Request: Add #warning directive, which will continue build and link as opposed to #error. CR 8560 Internal error on some expressions involving bitwise operations on bitfield members, depending on their declared type. CR 8089 The compiler fails to report an error when a newline is present inside a character constant. CR 8078 Compiler gives the wrong error message if an array is declared with a zero or negative dimension. CR 8068 Compiler gets internal error when a void function is used as part of an expression, e.g. i = 5 + foo(); if foo() is void. CR 3899 Compiler should issue a warning when it sees an extern with no storage class to define the expected type. Linker -------------------------------------------------------------------------- (Fixed in 5.2.0) CR 13377 When padding bytes with 0xFF, omit padding address ranges that aren't included in the Linker > Address Spaces listing. (Fixed in 5.0.0) CR 13101 The linker needs to indicate via a clearer message that a build has failed. CR 13019 Request to lift the existing limit on ALIGN value to < 64K. CR 12606 User requests that information about the usage of ROM and RAM be output in the build window at compile time. CR 12011 Linker must give correct error messages for XREF assembly symbols that are never resolved, while allowing all legal uses of XREF and XDEF. CR 9928 CHANGE option in linker confuses RELIST option in assembler. CR 9754 When both the relist and CHANGE directives are used, wrong absolute addresses may be shown for _TEXT sections. CR 6760 The linker gives no error message when a call address is out of range. Run-Time Library -------------------------------------------------------------------------- (Fixed in 5.2.0) CR 13298 Create new header files that define symbolic names for the bits and other fields inside Special Function Registers. CR 13253 Sprintf can miscount number of characters placed in buffer, when adjusting field widths of numerical data. CR 13103 RTL needs to support variants of standard library functions that take pointer arguments into different memory spaces. (Fixed in 5.0.0) CR 13073 Printf and related functions seem to treat ints as 16 bits instead of 32. CR 13001 At user request, errno has been moved from the standard startup into the standard C library. CR 9462 Move coefficients used in some trig functions from RAM to ROM, as RAM space may be limited. CR 9270 Sprintf formatting is showing the wrong number of digits past the decimal point for some values. CR 8624 Sscanf returns an incorrect value if asked to read a single null-terminated digit. G. OPEN CHANGE REQUESTS ============================================================================== IDE -------------------------------------------------------------------------- CR12113 The file editor windows freezes while scrolling and shows scrambled text. This is when using special code characters (above ascii code 127), like the micro symbol (asc(230) or µ) and the degrees symbol (asc(248) or °) CR12215 When printing text using the simulated Uart Output window, buffer will overflow when printing more than 32K lines. This will crash the ZDS and will terminate. CR 7918 During the loading of large projects (those with a large number of files and/or file dependencies), the ZDS user interface may become non-responsive. CR 7687 Including square brackets in the Find in Files search string (i.e. "[find this]" or "[find this"), the search results are incorrect. CR 5519 External dependencies generation/display ignores project preprocessor defines. CR 5517 Unable to watch large EQU symbols on the watch window. CR 4431 IDE will not provide a warning that the hex code file is larger than the project device size when using Load from File on the code memory window. CR 3711 Hex files that use \r as a line ender are not supported. CR 3210 Local watch window does not display negative values CR 1650 After single-stepping through a function call, the program counter indicator returns to the calling line instead of the next executable line. CR 1397 Double-clicking on the error sometimes places the cursor in the incorrect location.