I managed to get the AE Parallel Pro working:

First step was to trace out the board:

[Linked Image from i.imgur.com]

c080 read gets status:
d0 : sw1
d1 : sw2
d2 : sw3
d3: sw4
d4: perror
d5 : busy
d6: buffer status (if bufferpro is attached)
d7: ack status

c080 write data to printer
c082 write command to bufferpro

c087 write sets bank (d0-d3 = bank bits a11-a13) (only a11,a12 used)
c088 write unknown


It seems to pass the self test and print graphics.


[Linked Image from i.imgur.com]
[Linked Image from i.imgur.com]

Code

DEFINE_DEVICE_TYPE(A2BUS_PARALLELPRO, a2bus_parallelpro_device, "parallelpro", "AE Parallel Pro")

#define PARALLELPRO_ROM_REGION  "parallelpro_rom"
#define PARALLELPRO_CENTRONICS_TAG "parallelpro_ctx"

ROM_START( parallelpro )
	ROM_REGION(0x002000, PARALLELPRO_ROM_REGION, 0)
	ROM_LOAD( "applied_engineering_parallel_pro_27c64.bin",0x000000, 0x002000, CRC(c116bf91) SHA1(cb233ff9511056083397dde033e9601ca2008a81))
ROM_END

static INPUT_PORTS_START( parallelpro )
	PORT_DIPNAME( 0x0f, 0x0f, "Printer Type ID (SW1-4)" )
	PORT_DIPSETTING(    0x0f, "Epson" )
	PORT_DIPSETTING(    0x0e, "IBM" )
	PORT_DIPSETTING(    0x0d, "NEC 8023A" )
	PORT_DIPSETTING(    0x0c, "C.Itoh" )
	PORT_DIPSETTING(    0x0b, "Toshiba" )
	PORT_DIPSETTING(    0x0a, "Okidata" )
	PORT_DIPSETTING(    0x09, "Okimate" )
	PORT_DIPSETTING(    0x08, "Apple DMP" )
	PORT_DIPSETTING(    0x00, "Unused" )
INPUT_PORTS_END



uint8_t a2bus_parallelpro_device::read_cnxx(uint8_t offset)
{
   return m_rom[offset + 0x1800 + (0x100 * slotno())];
}

/*-------------------------------------------------
    read_c0nx - called for reads from this card's c0nx space
-------------------------------------------------*/

uint8_t a2bus_parallelpro_device::read_c0nx(uint8_t offset)
{
switch(offset){
case 0: return (m_ack == 0 ? 0x0 : 0x80) |
				0x40 |
				((m_busy ==0 ? 0x00 : 0x01) << 5) |
				((m_perror==0 ? 0x00 : 0x01) << 4) |
				((m_dsw1->read()&0x0f)^0x0f);
default: return 0;
}
}

uint8_t a2bus_parallelpro_device::read_c800(uint16_t offset)
{   
return m_rom[offset+(0x800)*m_rombank];
}

/*-------------------------------------------------
    write_c0nx - called for writes to this card's c0nx space
-------------------------------------------------*/

void a2bus_parallelpro_device::write_c0nx(uint8_t offset, uint8_t data)
{
switch(offset){
case 0: 
	m_ctx_data_out->write(data);
	m_ack = 0x80;
	start_strobe();
	break;  
case 7: 
	m_rombank = data & 0x0f;
	break;

}
}


Code
hexdump -C parallel_pro_27c64.bin  | grep [7f]f0
000007f0  ff ff ff ff ff ff ff ff  ff ff ff ff 8f 7b 00 ff  |.............{..|
00000ff0  ff ff ff ff ff ff ff ff  ff ff ff ff bb 3d 01 ff  |.............=..|
000017f0  ff ff ff ff ff ff ff ff  ff ff ff ff b4 58 02 ff  |.............X..|
00001ff0  ff ff ff ff ff ff ff ff  ff ff ff ff c8 03 ae 12  |................|
Reading cffe gets you the current bank so you can come back to it.
I think the two bytes preceding are checksum bytes, and the ae in the last bank refers to the company and 12 refers to the version maybe.


Interestingly, the cnxx code uses hardcoded addresses:

comparing the code for different slots:

Code
s=0x1900 o = 0x100 for i=0,0x100-1 do if a:byte(s+1+i) ~= a:byte(s+1+i+o) then io.write(string.format("%x",s+i).." ") for n=0,6 do io.write(string.format("%x",a:byte(s+1+i+n*0x100)).."   ")end print() end end
1913 c1   c2   c3   c4   c5   c6   c7   
1919 c1   c2   c3   c4   c5   c6   c7   
1924 c1   c2   c3   c4   c5   c6   c7   
192a c1   c2   c3   c4   c5   c6   c7   
1936 c1   c2   c3   c4   c5   c6   c7   
194b c1   c2   c3   c4   c5   c6   c7   
1951 c1   c2   c3   c4   c5   c6   c7   
1958 97   a7   b7   c7   d7   e7   f7   (c087 + slot * 0x10)
195e 97   a7   b7   c7   d7   e7   f7   
1965 c1   c2   c3   c4   c5   c6   c7   
196f c1   c2   c3   c4   c5   c6   c7   
1975 97   a7   b7   c7   d7   e7   f7   
1984 97   a7   b7   c7   d7   e7   f7   
1987 c1   c2   c3   c4   c5   c6   c7   
1989 10   20   30   40   50   60   70   
1995 97   a7   b7   c7   d7   e7   f7   
19ab c1   c2   c3   c4   c5   c6   c7   
19b0 97   a7   b7   c7   d7   e7   f7   
19c0 c1   c2   c3   c4   c5   c6   c7   
19c9 c1   c2   c3   c4   c5   c6   c7   
19fc 61   1d   d8   94   50   c   c8       (checksum bytes)
19fd 5b   22   e8   af   76   3d   3