Responding to my own post -- sheesh.

Okay. Each .pac file has a 7-byte header:
struct pac_header {
unsigned char firmware_name_h;
unsigned char firmware_name_l;
unsigned char firmware_version;
unsigned char firmware_base_h;
unsigned char firmware_base_l;
unsigned char firmware_size_h;
unsigned char firmware_size_l;
};
That yields the following headers for the .pac files:
firmware.pac: name=0x3950 version=7 baseaddr=0x0ffd size=0x22b0
boot5.pac: name=0x0000 version=0 baseaddr=0x000 size=0x02e0
boot.pac: name=0x0000 version=0 baseaddr=0x000 size=0x02a8
Not much to look at, perhaps, but the sizes agree with the filesizes, at least.
I haven't been able to make any headway as far as interpreting the rest of the files. I think i've been staring at hex too long ...
Also, it looks like the device is pushing out these pac files through /dev/ttyS1, which makes no sense at all to me

Ben