The PIC18F8493 belongs to the LCD family documented in DS39896 — the same data sheet as the PIC18F8393, which is the 8 KB member of the group. The 8493 carries 16 KB of flash (8,192 single-word instructions), 768 bytes of SRAM, a 12-bit A/D converter with twelve channels running at up to 50K samples per second, and an integrated LCD driver capable of 192 pixels arranged as 48 segments by 4 commons. It is a metering part: handheld meters, thermostats, power and water metering.
Reading the Memory Map
Flash occupies byte addresses 0x000000 to 0x003FFF, and the code protection bits divide it into four blocks of 4 KB, CP0 through CP3. A full dump is 1,024 Intel HEX records at 16 bytes. Configuration registers live at 0x300000 and above and the device ID at 0x3FFFFE answers even when every CP bit is set — reading a protected block returns zeros, not an error, and how the copy protection gate works explains why.
The erased value on PIC18 flash reads 0xFFFF. Anything reading 0x0000 is either a protected block or an address beyond the array, and since 0x0000 is a legal NOP instruction, a hole padded with it disassembles as if it were code. The array size on the data sheet, not the read value, decides what is real.
The Missing EEPROM
The parameter table lists data EEPROM as zero bytes. For a metering product this is the single most important line on the page, because calibration on such devices — the offset and gain trim for a 12-bit converter, the LCD segment map, the meter constant, the serial number written at final test — is exactly the kind of data that usually lives in EEPROM.
On the 8493 it has to live somewhere else: a flash page the firmware writes at production, or an external serial device on the board. The flash page is part of the array and a complete dump carries it. recognising it afterwards takes chip extraction analysis: a cluster of 12-bit trim-shaped constants is visible by shape even without symbols, and a contiguous segment table is easy to spot once you know the LCD layout. Anyone promising EEPROM recovery on this device is describing a different chip.
Twelve Bits Change the Verification
A 10-bit converter tolerates rough work; a 12-bit one does not. One part in 4,096 means the trim constants matter, and a dump that reproduced code but lost the calibration page will boot a rebuilt unit that measures visibly wrong while behaving otherwise normally. That failure mode is specific to this family, and it is why the report should confirm the trim page was found, not just that the array matched between two reads.
The same discipline applies to the LCD map. A display that lights with wrong segments is a segment-table problem, not a code problem, and it will survive every byte-level comparison you run.
One Footprint, Four Variants
The DS39896 family comes in four members. The 6393 and 6493 are 64-pin parts driving 128 LCD pixels with 50 I/O; the 8393 and 8493 are the 80-pin versions driving 192 pixels with 66 I/O. Within each package the flash size — 8 KB or 16 KB — is the other axis. Everything else, down to the 12-bit converter and the 22 interrupt sources, is identical across the family.
That regularity helps in both directions. A dump that disassembles cleanly but looks short for the marked part may simply belong to a smaller sibling, because the boards share footprints and get repaired across the boundary. And a recovered segment table built for 128 pixels will not light the outer segments of a 192-pixel panel, which is how a 6393 image on an 8493 board announces itself. The ID read at 0x3FFFFE resolves the question in one instruction, on a locked part, without touching the die.
The LCD bias and the drive timing are configured in the config and control registers rather than in code, so they belong in the delivery alongside the config words — a rebuilt unit with the right code and the wrong bias level shows a display with ghosting or missing contrast that no amount of code comparison will explain.
What to Check Before Sending
Three things decide whether the job is worth starting. Whether the board still powers and lights its display, since a live device protects options that a dead one loses. Whether you have a second unit, working or not, whose flash page could supply the parameters if the first one lost them. And whether the marking really reads 8493 — the same package carries the 8410, which has a 10-bit converter, no LCD, and different silicon entirely. When in doubt, the ID at 0x3FFFFE settles it.
Reading the program memory describes the two-pass read and comparison that a verified image requires. Send the marking photograph and one line about what the display should show when the board works — our services page lists what a delivered image contains, and contact us if you are unsure which variant you are holding.