Just for giggles, I wanted to see if the self test updated in real time. While it's waiting for a Y/N to print a test pattern, it updates the messages in real time.

Also it updates the graphics printer selection bits display, so if you change the printer from the dip switch control panel you can see the bits change.


[Linked Image from i.imgur.com]


Code
for i=1,#a do c = a:byte(i) c=c&0x7f  if c<32 then c=32 end if (i-1)%0x40 ==0 then print() io.write(string.format("%4x",i-1)..": ")  end io.write(string.char(c)) end print()

 5c0: }N(L0M` AE PARALLEL PRO SELF TEST ROM VERSION 1.2 CHECKSUM  GOOD
 600:  BAD   GRAPHICS PRINTER:    WAITING FOR ACKNOWLEDGE  BUFFER ATTA
 640: CHED  PRINTER BUSY  OUT OF PAPER  PRINT TEST PATTERN? (Y/N)    T
 680: EST BUFFER OPTION? (Y/N)  TEST PATTERN PRINTED    H)  0 }NhJ Ps`
 6c0: .x  H) H` H)qH` %(I  (0 f)%)I   J )%(i( (Ix` VJ0 9 OH9 OH`9 O '.


Quick and dirty code to toggle the values at 5 second intervals:
Code
uint8_t a2bus_parallelpro_device::read_c0nx(uint8_t offset)
{
switch(offset){
case 0: return (m_ack == 0 ? 0x0 : 0x80) |
				( (((int) (machine().time().as_double() / 5.0)) % 2) == 0 ? (1 << 7) : 0) |  // waiting for acknowledge
				( (((int) (machine().time().as_double() / 5.0)) % 2) == 0 ? 0 : (1 << 6) ) |  //  (buffer attached bit)
				((m_busy ==0 ? 0x00 : 0x01) << 5) |
				( (((int) (machine().time().as_double() / 5.0)) % 2) == 0 ? (1 << 4) : 0) |   // paper out bit
				((m_dsw1->read()&0x0f)^0x0f);
default: return 0;
}
return 0;
}