/* Copyright Motorola, Inc. 1997 ALL RIGHTS RESERVED You are hereby granted a copyright license to use, modify, and distribute the SOFTWARE so long as this entire notice is retained without alteration in any modified and/or redistributed versions, and that such modified versions are clearly identified as such. No licenses are granted by implication, estoppel or otherwise under any patents or trademarks of Motorola, Inc. The SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH REGARD TO THE SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) AND ANY ACCOMPANYING WRITTEN MATERIALS. To the maximum extent permitted by applicable law, IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE. Motorola assumes no responsibility for the maintenance and support of the SOFTWARE. */ /* history.c * * Function: Consolidate all the Version information, * all the change information for the (m)dink32 system * all the errata information * and all the future enhancements/bug fixes * into this one file. * * There are six sections to this file: ========== Section: constants ================= ========== Section: Customer impacting reqirements =========== ========== Section: Version changes =========== ========== Section: Errata ===================== ========== Section: Future enhancements ======== ========== Section: Proposed bug fixes ========= */ /* History * mo 1/18/99: Original code: * mo 8/19/99: Many releases and many changes. * mo 8/31/99: List of R12 fixes and enhancements, not all will be done * mo 11/27/99: List of R12.1 fixes and enhancements, not all will be done */ /*================ Section: constants ======================*/ #define RELEASE_ON #ifdef RELEASE_ON /* This is a release build */ /* * For Release builds: * 1. create a #define RELEASE_ON line in front of the #ifdef RELEASE_ON * 2. specify the dink and mdink Verison * 3. and the Revision number, and the Release date */ const char dink_version[]="12"; const char dink_revision[]="1"; const char mdink_version[]="12"; const char mdink_revision[]="1"; const char release_date[]="September 5, 2000"; const char build_date[]=" "; #else /* This is not a release build it is an interim build */ /* * For non Release builds, use the default parameters * and do not make any changes to these constants */ const char dink_version[]="XX"; const char dink_revision[]="XX"; const char mdink_version[]="XX"; const char mdink_revision[]="XX"; const char build_date[]="Built on " __DATE__" " __TIME__; const char release_date[]="Interim Release"; #endif /* RELEASE_ON */ /* this constant is not currently used static char cvs_id_file_c[] = "@@(#) $Id:"; */ /*======== Section: Customer impacting requirements ===========*/ /* These attributes of DINK32 must not change * Some customers have programs that interface with DINK32 and * use the existing interfaces. Changing of these interfaces will * have significant impact on these customers * * Do not change these interfaces without customer contact * All the details of each of these commands are at the end of this file * * prompt DINK32...> where the ... can be any value, sa DINK32_750> * sb -k * md * mm * dl -k * mf * mv * ms * rd * rm * tr * go * bp * */ /*================ Section: Version changes ======================*/ /***************************************************************************** * Release: Version 12 Revision 0.1 August 30, 2000 * Changes since the last Release * Special release to enable linux in PMC ROM * * * 1. Reorganized all the demo directories into one highlevel directory, * demos and added makefile_gcc * 2. User spr registers are now initialized during bootup. No need to * perform a 'go' command to initialize register table. * 3. Added a return path through the exception handler for user code * to safely return to DINK. The routine is called user_return and is * sort of a dummy exception vector that allows the exception handler * to take care of all context switching between DINK and USER code. * 4. Added "dev epic ISRCnt" to "dev epic" command list. This command * allows the user to connect a downloaded Interrupt Service Routine * to an epic interrupt vector. * 5. PMC ROM support. * 6. Add memSpeed (memory bus speed) and processor_type (type of processor * MPC603, etc) to the dink_transfer_table. * 7. dl now suppors a binary download facility. * 8. Support for the MPC755 I/D bats 4:7 * 9. New commands, id and me. * ***************************************************************************** * Release: Version 12 Revision 0.0 November 30, 1999 * Changes since the last Release * * * 1. Implement a dink transfer table to dynamically assign * dink functions such as printf, dinkloop, getchar, in a table * so that it is no longer necessary to statically determine the * function address and change them in demo or dhrystones or any * user program. * 2. Configuration (enviroment variables) are saved in NVRAM * for yk/sp, saved in RAM for excimer. New * command, env, manipulates these configurations. * Also implements multiple command aliases, however, da and ra are * still available. * 3. New command, tau, display and/or calibate the Thermal Assist Unit. * 4. Faster download and no need to set character delays on the serial * line, implemented by turning on the duart FIFO. * 5. Turn on both banks of memory in the YellowKnife and Sandpoint, * now 32Megabytes is available on dink32 startup. * 6. Improved printf format facilities, including floating point. * 7. Most commands can now be placed into quiet mode, and verbose * mode can be used with the -v command. * Default is verbose on both, same as always, with or without ENV. * The '-e' mode expands fields and can be made default with * env RDMODE=e. Only Excimer requires the setup, and * RDMODE can be 'Q' (quiet), 'E' (expand fields), or anything else. * on excimer it can be set up with these commands: * | env -c | env rdmode=0 | * 8. The dl command can be placed in silent mode with the "-q". * 9. rd or rm can use these aliases for the memory register, * northbridge, nb, mpc106, mpc107, or mpc8240. * 10. Fixed command termination character, 'x', so it will not restart * if unexpected. * 11. Fixed problems with double prompts printed on startup with DCACHE. * 12. Implement a new makefile, makefile_gcc, and conform the dink code * to build with the gcc PowerPC eabi compatible compiler. * 13. Implemented flash programming for PCI-hosted boot ROM on * YK/SP platforms. The command 'fl -h' transfers 512k from a * specified memory location to the flash. ***************************************************************************** * Release: Version 11 Revision 0.3 June 9, 1999 * This version was not released created for customer presentation * Changes since the last Release * * * 1. Added share memory between host and agent targets using the * Address Translation Unit (ATU). * ***************************************************************************** * Release: Version 11 Revision 0.2 June 1, 1999 * Changes since the last Release * * * 1. Fixed invalid cacheing on 603. 603 does not reset the cache * invalidate bits in hardware, so added the facility in software. * 2. Detects MPC107. * 3. About command now reports board and processor identification. * 4. Improved the help facility. * 5. Added makefiles for the PC, makefile_pc in every directory. * *Details: * except2.s detects MPC107 and vectors to mpc107.s * sets L2 correctly for PMC750 (1M, diff, etc) * EUMBBAR init moved from BATs to * kahlua.s/mpc107.s * added real-time access to decrementer, pvr * * mpc107.s New initialization file. * * added capabilities database "mach_info" to allow * commands to tailor self to environment and not * just based on board-type, since Sandpoint doesn't * necessarily imply I2C, for in the case of the PPMC60X. * * pmc.c new file contains: * par_fu -- flash update for PMCs * par_rtc -- RTC I/O for motherboards. * par_dm -- device I/O for motherboards. * IDProcessor -- id's processor type/speed * * dink_printf added uppercase option (that is, %08X works). * * mem_tb.c mm prompts only with memory size requested. * tm uses memory engine so devices can be tested. * * yk.c removed Tom Davidson stuff that was included but not * accessible (no command table entries). Should * only have been in be.c anyway. * * main.c uses mach_info * does not call kahlua slave init unless in map B * * command_tb removed unneeded TD commands * added dm, fu, rtc commands. * NUM_CMD uses sizeof, no need to count * * config.h Added new board IDs for Sandpoint+PMCs (SP_8240, SP_107) * Undefined BB_BE; was on by default. * * help.c Changed main help to show commands based on * board type. * Uses an array & flags instead of duplicate text. * Added missing entries. * Help printers return void. * All entries use one PRINT and merged text -- * this saves 69Kbytes. * Changed suggestions about using * location 0x50100. * * par_tb.c about now shows board and processor identification. * mdm_parser_get_addresses (and all callers) * now allow specifying alignment option. * * pciLib.c "PPR" skips over IDSEL 12 on PMC boards. * * i2c1.c I2C read shows data as hex and ascii, not hex. * * rts_tb.c added alignment option to get_mdm_parser_addresses * ***************************************************************************** * Release: Version 11 Revision 0.1 This version was not released. * Changes since the last Release * * DINK * 1. Change the location of Stack pointer load/save. DINK code now * occupies through 0x0080000. USER CODE MUST NOW START TO EARLIER * THAN 0x0090000! * 2. Fixed vector alignment. * 3. Fixed VSCR register implementation issue. * 4. Fixed access issue for registers VRSAVE,RSCR,FPSCR,RTCU, RTCL & RPA. * 5. Fixed HID1 display for 603e, 604e. * 6. Fixed breakpoint/exception problem broken in rev10.7 for 603e. * 7. Fixed location of exception vectors after EH1200, they were wrong. * 8. Fixed flushhead in except2.s to work correctly. * ***************************************************************************** ***************************************************************************** * Release: Version 11 Revision 0 March 31, 1999 * Changes since the last Release * * DINK * 1. Add AltiVec support for the MAX! processor. * 2. Added vector registers to register list. * 3. Add assembler and disassembler code for new mnemonics. * 4. Implement the fl -sp and -up sector protect/unprotect commands. ***************************************************************************** * Release: Version 10 Revision 7 March 10, 1999 * Changes since the last Release * * DINK * 1. Add 1999 to copyright dates. * 2. Add timeout to flash_write_to_memory, so an unfinished * write to flash won't last for ever, it will timeout and * issue an error message. * 3. Add test all flash write for protected sector and if protected * issue an error and refuse the write. * 4. Disable transpar,tm from excimer. * 5. Set DCFA bit from 0 to 1 for MAX chips only * 6. Added functionality for all non-AltiVec MAX! registers. ***************************************************************************** ****************************************************************************** * Release: Version 10 Revision 6 1/25/99 * Changes since the last Release * * DINK * 1. Implement the history.c file and allow the about command to * use constants for Version, Revision, and Release. * 2. Implement the fl -dsi, fl -se, and fl -k commands. * 3. Auto detect flash between Board Rev 2 and 3. * 4. Remove the fw -e command from DINK32. * ***************************************************************************** * * Release: Version 10 Revision 5 11/24/98 * Changes since the last Release * * 1. changed default reset address to be -xfff0 for standalone dink * 2. Fix bugs in trace command * ***************************************************************************** * Release: Version 10 Revision 4 11/11/98 * Changes since the last Release * * 1. recapture 10.3 LED post routine in MDINK * 2. Add BMC_BASE_HIGH for kahlua to reach the high config registers * 3. Added memory test feature during POR. * 4. Corrected ending address for kahlua X4 configuartion * 5. Added basic Kahlua support * ***************************************************************************** * Release: Version 10 Revision 3 no date * Changes since the last Release * * 1. This was never released * ***************************************************************************** * Release: Version 10 Revision 2 09/10/98 * Changes since the last Release * * 1. This release was the same as Version 10 Revision 1. * ***************************************************************************** * * Release: Version 10 Revision 1 09/10/98 * Changes since the last Release * * 1. Enable ICACHE and DCACHE * ***************************************************************************** * Release: Version 9 Revision 5 08/05/98 * Changes since the last Release * * 1. Implement flash commands, fw -e and basic flash erase and write * support. * 2. split dink into two types, mdink - minimal dink and dink. * 3. Implement support for excimer. * ***************************************************************************** * * Release: Version 9 Revision 4 05/22/98 * Changes since the last Release * * 1. Implement L2 Backside Code. * 2. Turned on DCACHE and ICACHE as default at boot time. * 3. Added Yellowknife X4 boot code (Map A & B) * ***************************************************************************** * Release: Prior to Version 9 Revision 4 (Approx: 10/10/97) * * 1. Merged CHRP and PREP * 2. Added W_ACCESS (Word access) H_ACCESS, and B_ACCESS * 3. One version of dink works with all processors, 601, 603, * 604, and ARTHUR. */ /*================ Section: Errata ======================*/ /*=========== Download problems with dink prior to R12============ *=========== This is fixed in R12 =============================== *1. turn on fifo for fast download: * excimer mm 40500000 = 03000000 set dec delay = 0 * yellowknife dink 11.0.2 mm -b fe0003fa = 03 * later than 11.0.2, the change is already in the code. * prior to 11.0.2, mm -b doesn't work so have to change a word * mm fe0003f8 will print the current value vvxxyyzz * type in vvxx and zz as they are and change yy to 03 * for example mm fe0003f8 * 12345678 * type in 12340378 *=========== Memmory problems with dink prior to R12============ *=========== This is fixed in R12 =============================== * 2. turn on second memory bank * dink defaults to enabling one bank of memory for 16mb * This sequence will enable the other bank of memory for 16mb * So two banks of 16mb gives a total of 32mb of memory * * set these values in the mpc106/107 * 80 = 30201000 * 84 = 70605040 * 90 = 3f2f1f0f * 94 = 7f6f5f4f * a0 = 03 * 88 = 8c = 98 = 9c = 0 (or leave as set) * * One can use this instruction sequence. * DINK32_ARTHUR >>rd mpc106 * * DINK32_ARTHUR >>rm mpc106 80 * ADDR. VALUE DESCRIPTION * ===== ===== =========== * 0x80 0x???????? Memory starting address-upper * * new value ? 30201000 * DINK32_ARTHUR >>rm mpc106 84 * ADDR. VALUE DESCRIPTION * ===== ===== =========== * 0x84 0x???????? Memory starting address-lower * * new value ? 70605040 * DINK32_ARTHUR >>rm mpc106 90 * ADDR. VALUE DESCRIPTION * ===== ===== =========== * 0x90 0x???????? Memory ending address-upper * * new value ? 3f2f1f0f * DINK32_ARTHUR >>rm mpc106 94 * ADDR. VALUE DESCRIPTION * ===== ===== =========== * 0x94 0x???????? Memory ending address-lower * * new value ? 7f6f5f4f * * DINK32_ARTHUR >>rm mpc106 a0 * ADDR. VALUE DESCRIPTION * ===== ===== =========== * 0x80 0x?? Memory bank enable * * new value ? 03 * DINK32_ARTHUR >>mi * Memory settings: * ROM Speed: 465 ns (31 clocks) * SDRAM Bank 0: Enabled * Range: [00000000 -> 00ffffff] 16 MBytes * Speed: 2/1/1/1 * SDRAM Bank 1: Enabled * Range: [01000000 -> 01ffffff] 16 MBytes * Speed: 2/1/1/1 */ /* ***************************************************************************** * Problems with the mdink code * * 1. mdink somehow corrupts itself so that it can not successfully * jump to dink at ffc00000, it just hangs. * The problem was found by a customer, hotline number 7292. ***************************************************************************** * Problems and enhancement identified for R12.1 with the dink code * * Dink32 R12.1 items. 1. New dink command to dynamically turn the ICACHE and/or DCACHE on or off for dink32 (not the go target). dinkcache (dc) on|off. 2. Modify breakpoints so that you can hit a breakpoint and then continue through the breakpoint. The current method makes it difficult to breakpoint in loops. You set a breakpoint at an address, then you hit the breakpoint. Now if you want to continue until you hit the breakpoint again, you have to clear the breakpoint, trace one step, and set it again. An example of a better breakpoint is given in the simulator. If you just hit a breakpoint, and you type "go" or "tr", the simulator temporarily ignores the breakpoint so you can step over it and keep going. This makes breakpoints a lot less cumbersome to use. example of problem to fix: Try running the cache code and setting breakpoints here and there. About 1/2 of the time the machine just hangs when one does a go. 3. The "go" and "tr" commands should use the current user instruction address as the default argument. If I want to step line by line through code I keep having to type the address over and over. The tr command needs to check the instruction it's about to execute to see if it's a mtmsr. If it is, DINK needs to look at the instruction and see if it's going to turn off the trace bit. If it is, DINK should modify the instruction (and icbi/isync the corresponding i cache block). This will enable tracing through a mtmsr instruction. 4. Correct documentation and help command for command arguments. The way dink displays arguments for commands is misleading. Typically, arguments that are enclosed in brackets are *optional*. Take this for example. Help for the "tr" command says it's invoked like this: "tr [
|+]" This implies that all the arguments are optional. But that's not how tr is implemented - you have to give it an argument. This is true for many other commands as well. Argument lists should look like this: (here's the output for chmod on unix) Usage: chmod [-fR] file ... chmod [-fR] file ... where is a comma-separated list of [ugoa]{+|-|=}[rwxXlstugo] 5. Configuration area in ROM (requires ROM writes -YK and existing excimer- that can be reprogrammed from DINK or MDINK to change configuration parameters. Note this already exists on YK/SP using nvram. Possible implementation Create a configuration sector that resides in flash sector 18 (or some other one). Sector 0 and 1 is dink, sector 15 is mdink. Possibly sector 2 would work if it is not used for dink code. When dink starts, it can read the configuration file and set its parameters such as baud rate. (From Bob France) Create a new command, possibly, config, co, to display and change the configuration sector. 6. Chuck would like to substitute his 64 bit timing routines for Ray's TBU and TBL routines. 7. Rewrite the I/O subsystem. 8. Implement the fl -se -n command so that we can erase sector 15 and dl -fl -o fff00000 mdink32.src and test it This requires revisiting the erase protected sector code and finding out how to apply the 12 volts without burning up the the board. 9. From ticket 4203 HID2 not implemented for Kahlua Gary's suggestion for as 90000 mfspr r3,1011 ; hid2 does not work because assembly is broke, i.e. if it doesn't understand the value, it silently substitutes zero. - implement mfspr/mtspr hid2 - implement mfspr/mtspr any decimal or hex constant s.a. mfspr r3,1009 this means implement accepting any decimal or hex constant for any as or ds command that currently substitutes 0 for an unrecongnized value. 10. Write a dinkle DINK little endian version based on current cvs dink32. 11. Fix disassembler - disassemble constant '0' as "0x" wrong: lis r3,0x correct: lis r3,0 - (error introduced since July 28, 1999) dissassemble a word of zeros displays as HHHHHHH correct: 0x00090000 0x00000000 WORD 0x00000000 incorrect disassebly as shown below - only the first line is wrong DINK32_MAX >>ds 90000+ 0x00090000 0x00000000 HHHHHHHH 0x00090004 0x7c6002a6 mfspr r03, 0 0x00090008 0x460080d1 WORD 0x460080d1 0x0009000c 0x00000000 HHHHHHHH 0x00090010 0x00000001 WORD 0x00000001 0x00090014 0x3da0000a lis r13, 0xa 0x00090018 0x39ad5390 addi r13, r13, 0x5390 12. - implement a new command that will specify the beginning and end of stack and specify the location available for downloads. - implement a real "sp" in r1 for the user 13. Either fix or document that the tr (and possibly breakpointing, I think) command trashes the user's SRR0 & SRR1 registers. So one can't trace through code that modifies these registers - DINK changes them on you. This sometimes makes debug using DINK difficult. 14. Review our caching model and make changes as needed. specifically, when user get an exception and we return to dink loop, are we flushing the caches correctly with the dcbf command. 15. Enable and autosize L2 backside cache when available in dink startup. 16. Fix bp command to allow trace after breakpoint. 17. Enhance the breakpoint remove breakpoint command to accept addresses as well as breakpoin number bp -d "breakpoint address". This will probably be impossible to implement with the single flag "-d" and attempt to descriminate address from bp number, unless we just assume that bp numbers are always less than 100 and we never use a bp address less than 100. Easier to implement with a new flag "-da" for delete address and change old "-d" to "-dn". bp -dn "breakpoint number" bp -da "breakpoint address" 18. Fix the sb -[h|k] on excimer to return the correct baud rate instead of 0. 19. rd after breakpoint: From Becky Gill. I set a breakpoint, run some code, hit the breakpoint, and look at hid0. Dink's giving me a bogus value (all 0's!), which I know can't be true or the following code would take an exception. Also, when I'm tracing through code, the hid0 value dink shows doesn't seem to reliably get updated. 20. Bug in dl -k, if s0 record is too long, dink get's confused and hangs. 21. Really an enhancement needed. The 755 has 8 Bats each for I and d-side. Previous parts only had 4. While DINK magically seems to be able to correctly encode these int he mtdbatu and mtdbatl instructions, it doesn't know how to decode them for disassembly. Probably the same for iBATs. shoudl be a simple addition. If you do "mtspr 536,r4" you get an erroneous opcode translation. The SPR is way off. It just can't seem to do the SPRs correctly. Shoudl be corrected. 22. dissasembler bug: Note the assembly is correct, the disassembly is getting the wrong jump address DINK32_MAX >>as 90000 0x00090000 0xffffffff fnmadd. f31, f31, f31, f31 bc 4,14,-14 DINK32_MAX >>ds 90000 0x00090000 0x4094ffec bge CR05, 0x8ffec ^^^^^^^^ correct ^^^^^ correct DINK32_MAX >>as 90004 0x00090004 0xffffffff fnmadd. f31, f31, f31, f31 bne cr3,-14 DINK32_MAX >>ds 90004 0x00090004 0x408effec bne CR03, 0x8fff0 ^^^^^^^^ correct ^^^^^ incorrect 23. rm/rd for floating point registers have a problem Verified on a 603. DINK32_MAX >>rm f fpr00 = 0x0000000000000000 : ? fpr01 = 0x0000000000000000 : ? fpr02 = 0x1000000000000000 : ? 1000000000000000 fpr03 = 0x2000000000000000 : ? 2000000000000000 fpr04 = 0x4000000000000000 : ? 4000000000000000 fpr05 = 0x8000000000000000 : ? 8000000000000000 fpr06 = 0x1000000000000000 : ? 100000000000000 fpr07 = 0x2000000000000000 : ? 200000000000000 fpr08 = 0x4000000000000000 : ? 400000000000000 fpr09 = 0x8000000000000000 : ? 800000000000000 fpr10 = 0x0000000000000000 : ? 10000000000000 fpr11 = 0x0000000000000000 : ? 20000000000000 fpr12 = 0x0000000000000000 : ? 40000000000000 fpr13 = 0x0000000000000000 : ? 80000000000000 fpr14 = 0x0000000000000000 : ? 1 fpr15 = 0x0000000000000000 : ? 2 fpr16 = 0x0000000000000000 : ? 4 fpr17 = 0x0000000000000000 : ? 8 fpr18 = 0x0000000000000000 : ? x DINK32_MAX >>rd f fpr00: 0x0000000000000000 fpr01: 0x0000000000000000 fpr02: 0x1000000000000000 fpr03: 0x2000000000000000 fpr04: 0x4000000000000000 fpr05: 0x8000000000000000 fpr06: 0x1000000000000000 fpr07: 0x2000000000000000 fpr08: 0x4000000000000000 fpr09: 0x8000000000000000 fpr10: 0x1000000000000000 fpr11: 0x2000000000000000 fpr12: 0x4000000000000000 fpr13: 0x8000000000000000 fpr14: 0x0000000000000001 fpr15: 0x0000000000000002 fpr16: 0x0000000000000004 fpr17: 0x0000000000000008 fpr18: 0x0000000000000000 fpr19: 0x0000000000000000 fpr20: 0x0000000000000000 fpr21: 0x0000000000000000 fpr22: 0x0000000000000000 fpr23: 0x0000000000000000 fpr24: 0x0000000000000000 fpr25: 0x0000000000000000 fpr26: 0x0000000000000000 fpr27: 0x0000000000000000 fpr28: 0x0000000000000000 fpr29: 0x0000000000000000 fpr30: 0x0000000000000000 fpr31: 0x0000000000000000 so registers 6-9 didn't take the correct values. However, it seems to be somehow dependent upon the values entered in right above it. If I do this: DINK32_MAX >>rd f fpr00: 0x0000000000000000 fpr01: 0x0000000000000000 fpr02: 0x1000000000000000 fpr03: 0x2000000000000000 fpr04: 0x4000000000000000 fpr05: 0x8000000000000000 fpr06: 0x1000000000000000 fpr07: 0x2000000000000000 fpr08: 0x4000000000000000 fpr09: 0x8000000000000000 fpr10: 0x0000000000000000 fpr11: 0x0000000000000000 fpr12: 0x0000000000000000 fpr13: 0x0000000000000000 fpr14: 0x0000000000000000 fpr15: 0x0000000000000000 fpr16: 0x0000000000000000 fpr17: 0x0000000000000000 fpr18: 0x0000000000000000 fpr19: 0x0000000000000000 fpr20: 0x0000000000000000 fpr21: 0x0000000000000000 fpr22: 0x0000000000000000 fpr23: 0x0000000000000000 fpr24: 0x0000000000000000 fpr25: 0x0000000000000000 fpr26: 0x0000000000000000 fpr27: 0x0000000000000000 fpr28: 0x0000000000000000 fpr29: 0x0000000000000000 fpr30: 0x0000000000000000 fpr31: 0x0000000000000000 DINK32_MAX >>rm f fpr00 = 0x0000000000000000 : ? fpr01 = 0x0000000000000000 : ? fpr02 = 0x1000000000000000 : ? fpr03 = 0x2000000000000000 : ? fpr04 = 0x4000000000000000 : ? fpr05 = 0x8000000000000000 : ? fpr06 = 0x1000000000000000 : ? 100000000000000 fpr07 = 0x2000000000000000 : ? 200000000000000 fpr08 = 0x4000000000000000 : ? 400000000000000 fpr09 = 0x8000000000000000 : ? 800000000000000 fpr10 = 0x0000000000000000 : ? x then I get this: DINK32_MAX >>rd f fpr00: 0x0000000000000000 fpr01: 0x0000000000000000 fpr02: 0x1000000000000000 fpr03: 0x2000000000000000 fpr04: 0x4000000000000000 fpr05: 0x8000000000000000 fpr06: 0x0100000000000000 fpr07: 0x0200000000000000 fpr08: 0x0400000000000000 fpr09: 0x0800000000000000 fpr10: 0x0000000000000000 fpr11: 0x0000000000000000 fpr12: 0x0000000000000000 fpr13: 0x0000000000000000 fpr14: 0x0000000000000000 fpr15: 0x0000000000000000 fpr16: 0x0000000000000000 fpr17: 0x0000000000000000 fpr18: 0x0000000000000000 fpr19: 0x0000000000000000 fpr20: 0x0000000000000000 fpr21: 0x0000000000000000 fpr22: 0x0000000000000000 fpr23: 0x0000000000000000 fpr24: 0x0000000000000000 fpr25: 0x0000000000000000 fpr26: 0x0000000000000000 fpr27: 0x0000000000000000 fpr28: 0x0000000000000000 fpr29: 0x0000000000000000 fpr30: 0x0000000000000000 fpr31: 0x0000000000000000 which is correct. So there is some bizarre relationship between how these things are entered into DINK and what is altered. Dink32 R13 and beyond items. 1. Build a TCP/IP stack and an ethernet driver for YK/SP, no hardware support for excimer. */ /*=== Section: Customer impacting requirement detail explaination ===== *======================================================================= * prompt DINK32...> where the ... can be any value, sa DINK32_750> * sb -k * Dinkserv expects that the target can communicate at 57,600bps, * although this can be changed with the startup baudrate option. * On Solaris hosts, the default communication speed is 38,400bps. * md * send: md , wait for a DINK prompt. read in the 8-character * (4-byte) memory value. Dinkserv looks for the 4-byte value on the * first response line at column (18 + 9*((&0xf)>>2)) * send: md - wait for two DINK prompts * Dinkserv reads only up to 0x60 bytes in any one exchange, in an * attempt to avoid any prompt other than a DINK prompt. Dinkserv * depends upon the line number and column number of the hex * does not rely on the ASCII portion of the response or on the * displayed addresses. The data starts at column 18, with a space * every 8 characters. * mm * send: mm {-b|-h|-w} , wait for the exact string "? ", * send: , wait for a DINK prompt * Dinkserv works around two DINK32 bugs: * 1. Sometimes DINK32 requests another value instead of * reverting to the DINK prompt. In this case, we transmit * an "x" and wait for a prompt. * 2. DINK32 doesn't like writing halfword (-h) values to non-4 byte * aligned addresses, so in that case DINKSERV writes one byte * at a time. * dl -k * Send: dl -k, Wait for: Port, Send "garbage" S0 record since it's * ignored by dinkserv, Transmit S records and periodically read in * the twirling baton characters that DINK32 responds with. * Send "garbage" S7 record to terminate download. The contents * of the S7 record are not important. * Wait for a DINK prompt and verify that the download worked correctly * by looking for the string "Complete" in the second to last line. * DINK32 responds with 4 characters for every S record line * and Dinkserv depends on the number of characters, but * not the specific characters. * mf * Send: mf , Wait for a DINK prompt * Where is a 4-byte aligned start address, is * the final 4-byte aligned address and is the * 4-byte value to be stored. * mv * Send: mv , Wait for a DINK prompt * Where is a 4-byte aligned start address, is * the final 4-byte aligned address of the source and * is the 4-byte address of the destination. * ms * Send: ms , Wait for a DINK prompt * Dinkserv sends the response to this command directly to the user. * Dinkserv itself does not depend on the details of the response * to this command, as long as it terminates with a DINK prompt. * rd * Send: rd , wait for a DINK prompt * read in the 8-character register value. (16 characters for fp regs) * For integer registers, r0..r31, and floating-point * registers f0..f31, we read the register requested and we * also read the other register printed out. (i.e. reading * r1 causes the values of r0 AND r1 to be printed. We read * and cache both values.) * Dinkserv depends on the position of the hex value in the * response lines. Dinkserv does NOT use the binary * representation that is printed for certain special-purpose * registers such as the msr. Dinkserv just looks at the * hex representation. * Dinkserv depends on the following register names. * r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 * r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 * f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 * f16 f17 f18 f19 f20 f21 f22 f23 f24 f25 f26 f27 f28 f29 f30 f31 * pc cr lr ctr xer dsisr dar dec srr0 srr1 sprg0 sprg1 sprg2 * sprg3 pvr sdr1 ear tbl tbu ibat0u ibat0l ibat1u ibat1l ibat2u * ibat2l ibat3u ibat3l dbat0u dbat0l dbat1u dbat1l dbat2u dbat2l * dbat3u dbat3l hid0 hid1 msr dmiss dcmp hash1 hash2 imiss icmp * sr0 sr1 sr2 sr3 sr4 sr5 sr6 sr7 sr8 sr9 sr10 sr11 sr12 sr13 * sr14 sr15 * rm * Send: rm , wait for the exact string "? " * Send: , wait for a DINK prompt * tr * Send: tr , wait for a DINK prompt * go * Send: go * bp * Send: bp * wait for a DINK prompt * After setting any breakpoint, Dinkserv invalidates its internal * "breakpoint index" array, since it cannot know where in the * array the breakpoint that was just set was placed. DINK32 * does not maintain the breakpoint list in any order that can * be relied upon. * Dinkserv clears a breakpoint with the following exchange, * if the breakpoint index number is known. * send: bp -d * wait for a DINK prompt * If Dinkserv does not know what the corresponding to * the desired address is, it performs the following exchange. * Send: bp * wait for a DINK prompt * It then scans the response lines, assuming one breakpoint per * line. It calls sscanf with the format string " %*d. %x" * and updates the breakpoint index array accordingly. * After deleting a breakpoint, Dinkserv depends on the DINK32 * behavior that keeps all other breakpoints in the same * relative order in the breakpoint table. */