FreeCalypso > hg > freecalypso-tools
annotate doc/Calypso-chip-versions @ 465:003e48f8ebe1
rvinterf/etmsync/fsnew.c: cast 0 to (char *) for execl sentinel
I generally don't use NULL and use plain 0 instead, based on a "NULL
considered harmful" discussion on the classiccmp mailing list many aeons
ago (I couldn't find it, and I reason that it must have been 2005 or
earlier), but a recent complaint by a packager sent me searching, and I
found this:
https://ewontfix.com/11/
While I don't give a @#$% about "modern" systems and code-nazi tools,
I realized that passing a plain 0 as a pointer sentinel in execl is wrong
because it will break on systems where pointers are longer than the plain
int type. Again, I don't give a @#$% about the abomination of x86_64 and
the like, but if anyone ever manages to port my code to something like a
PDP-11 (16-bit int, 32-bit long and pointers), then passing a plain 0
as a function argument where a pointer is expected most definitely won't
work: if the most natural stack slot and SP alignment unit is 16 bits,
fitting an int, with longs and pointers taking up two such slots, then
the call stack will be totally wrong with a plain 0 passed for a pointer.
Casting the 0 to (char *) ought to be the most kosher solution for the
most retro systems possible.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 11 Feb 2019 00:00:19 +0000 |
parents | a449ae0a1cec |
children |
rev | line source |
---|---|
446
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 There have been many different versions of the Calypso silicon made over the |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 years, including hardware differences, at least 3 ARM boot ROM versions and at |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 least 3 DSP ROM versions. New target utility calversion (to be run via fc-iram) |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 helps identify unknown Calypso chip versions: it reports the ARM boot ROM |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 version, the DSP ROM version and the values read from the few documented ID |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 registers. |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 In order to be able to use our calversion utility to identify an unknown Calypso |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 variant, the Calypso device under examination needs to satisfy the following |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 two requirements: |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 * The boot ROM needs to be enabled by nIBOOT pin strapping on the board, in |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 order to be able to get in with fc-iram; |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 * The Calypso chip version to be identified needs to be Calypso C05 rev B or |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 later, containing ARM boot ROM version 0200 or 0300. This limitation exists |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 because our target-utils framework on which calversion is based depends on being |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 booted by a known Calypso boot ROM version in order to figure out which UART it |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 should use for communication. If anyone encounters a device with a Calypso C05 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 rev A chip in it, you will need to somehow read out its boot ROM, send us that |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 boot ROM dump, and we will extend our UART detection logic in target-utils to |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 support that ancient boot ROM version which is currently unknown to us. |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 If you have a Calypso boot ROM version which is not currently supported by our |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 target-utils, how can you read it out? The simplest way (assuming that nIBOOT |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 is strapped low on the board to enable the boot ROM) would be to edit |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 target-utils/libcommon/uartsel.c in your local copy, hard-code whichever UART |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 you are using in the uart_select_init() function, removing the boot ROM |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 version-dependent autodetection code, rebuild calversion and loadagent with |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 this hack, and use the modified loadagent with fc-loadtool to dump the ROM. |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 Alternatively, if the boot ROM is disabled with nIBOOT strapped high, you may |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 be able to read it out via JTAG, or perhaps via fc-memdump if the device |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 already runs some compatible firmware. |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 Back to our calversion utility, if you have a Calypso device with a not-quite- |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 known chip version in it and you are able to get in with fc-loadtool, you can |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 run calversion on it as follows: |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 fc-iram /dev/ttyXXX /opt/freecalypso/target-bin/calversion.srec |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 You should get output that looks like this: |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 Calypso version ID program running |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 Loaded via boot ROM v0300, UART 0 (MODEM) at baud rate #0 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 CLKTCXO input autodetected to be 26 MHz |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 Device ID code: 0xB496 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 Device version code: 0x0000 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 ARM ID code: 0xFFF3 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 cDSP ID code: 0x0128 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 Releasing DSP core from reset |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 Waiting for DSP bootloader READY status |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 Loading NDB parameters |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 Loading PARAM area |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 Booting DSP main code |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 DSP reports version 0x3606 0x0000 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 You should be able to see which of the two supported boot ROM versions (0200 or |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 0300) your Calypso chip has, which UART was used to load the code, whether your |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 board uses a 13 MHz or a 26 MHz clock (this is a board-level property, not a |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 property of the Calypso chip), what values are reported in the device ID |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 registers, and the last bit which takes the most work to obtain - the DSP ROM |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 version. |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 The boot ROM version and the CLKTCXO input frequency are also reported when you |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 run fc-loadtool, and the device ID registers can be trivially read with the r16 |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 command once you are in loadtool, but getting the DSP ROM version requires |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 putting the DSP through its messy boot process, which is why a special program |
a449ae0a1cec
better documentation for calversion
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 had to be written for the task. |