MediaWiki API result
This is the HTML representation of the JSON format. HTML is good for debugging, but is unsuitable for application use.
Specify the format parameter to change the output format. To see the non-HTML representation of the JSON format, set format=json.
See the complete documentation, or the API help for more information.
{ "batchcomplete": "", "warnings": { "main": { "*": "Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes." }, "revisions": { "*": "Because \"rvslots\" was not specified, a legacy format has been used for the output. This format is deprecated, and in the future the new format will always be used." } }, "query": { "pages": { "20": { "pageid": 20, "ns": 0, "title": "Reverse Engineering Information", "revisions": [ { "contentformat": "text/x-wiki", "contentmodel": "wikitext", "*": "= Purpose of this section =\n\n=Helpful links=\nhttps://www.infineon.com/dgdl/tc_v131_instructionset_v138.pdf?fileId=db3a304412b407950112b409b6dd0352\n\nhttps://www.infineon.com/dgdl/Infineon-SAK-TC1796-256F150E%20BE-DS-v01_00-EN.pdf?fileId=5546d46249a28d750149a34e1f28045d\n\nhttps://www.infineon.com/dgdl/TriCore_EABI_v2_3.pdf?fileId=db3a304412b407950112b40f8d7a142b\n\n=Quick Reference=\n==Memory address lookup==\nRegisters a0, a1, a8, and a9 are used as offsets when the code needs to reference different memory locations.\nThere's a table in the ECU that sets up those offsets at boot:\n\n<pre>\n0000:808835CC movh.a a0, #0xD002\n0000:808835D0 lea a0, [a0]-0x8000\n0000:808835D4 movh.a a1, #0xA081\n0000:808835D8 lea a1, [a1]-0x8000\n0000:808835DC movh.a a8, #0x8005\n0000:808835E0 lea a8, [a8]-0x7800\n0000:808835E4 movh.a a9, #0xD001\n0000:808835E8 lea a9, [a9]-0x4000\n</pre>\n\nWhat that means, is that at any point in the code, these registers always have the following values:\n<pre>\na0: 0xD0018000\na1: 0xA0808000\na8: 0x80048800\na9: 0xD000C000\n</pre>\n\n18.10:\n<pre>\na0: 0xD0018000\na1: 0x80828000\na8: 0x80028800\na9: 0xD000C000\n</pre>\n\nA quick example of how this is implemented in code:\n<pre>\n8019044a c9 00 de c9 ld.h d0,[a0]-0x60e2\n</pre>\n\nThis takes the value of a0 (0xD0018000), subtracts 0x60e2 (=0xD0011F1E), and pulls the value of that memory address into d0. In the case of one common software version, that's:\n\n<pre>\n /begin MEASUREMENT tia_cha_up\n \"Air Temperature upstream the Charger\"\n SWORD\n _CNV_A_R_CHRG_LINEA_171_CM\n 1\n 100.\n -48.\n 335.994140625\n DISPLAY_IDENTIFIER TIA_CHA_UP\n ECU_ADDRESS 0xd0011f1e\n FORMAT \"%7.3\"\n /begin IF_DATA ETK\n KP_BLOB\n 0xd0011f1e\n INTERN\n 2\n RASTER 30\n /end IF_DATA\n /end MEASUREMENT\n</pre>\n\n== Table address lookup ==\nTable lookup in the calibration isn't as straightforward. \nOccasionally you'll see reference in code to something like \"0x8083DF8C\". 0x8------- is the same as 0xA-------. So \"0x8083DF8C\" in the ASM is actually reference to 0xA083DF8C" } ] } } } }