|
|
1.1 ! root 1: /* pi7300.h header for the ATT7300's parallel interface */ ! 2: ! 3: /* The pi is ready to use with no special initialization. Basically ! 4: it has only one mode of operation, so there is nothing to specify. ! 5: After writing a data byte to PI_DATA, the LP_STROBE bit must be toggled ! 6: from high to low and back to high to "strobe the data to the printer", ! 7: i.e., this high-low-high signal is passed out through the port (on pin 1) ! 8: to the printer and tells it that a byte is ready for printing. ! 9: Then the printer acknowledges acceptance of the byte by toggling ! 10: the Acknowledge signal from high to low and back to high, on pin 10. ! 11: Although undocumented in the register description, this signal can ! 12: be seen in bit 9 of the GSR (found by reading the circuit diagram, ! 13: sheet 6, unit 24D, the latch for the GSR). More importantly for us, ! 14: the low->high transition causes an interrupt, autovectored, level 2. ! 15: The interrupt is acknowledged to the hardware by writing to data reg. ! 16: (It doesn't have to be the "next byte", since the printer will ignore ! 17: data written to the port if there is no strobe signal.) */ ! 18: ! 19: /* the 8-bit data port, output only-- */ ! 20: #define PI_DATA ((volatile unsigned char *)0x4f0000) ! 21: /* Note: MCR is also used for clock interrupt control--should have package ! 22: controlling updates to it like we have for the console control reg */ ! 23: #define MCR ((volatile unsigned short *)0x4a0000) ! 24: /* one bit in MCR for lp--data strobe */ ! 25: #define LP_STROBE (1<<13) ! 26: /* status register--input-only bits */ ! 27: #define PI_STATUS ((volatile unsigned short *)0x470000) ! 28: /* bits in status reg--not needed to do the basic output operation, ! 29: but needed for features such as stopping when the paper runs out */ ! 30: /* from pin 11 of the interface: 1 if busy (printing, set offline, or in error ! 31: condition)-- */ ! 32: #define LP_BUSY (1<<7) ! 33: /* from pin 13 of the interface, 1 if printer online, but may be 1 all the ! 34: time, so not terribly useful--use LP_BUSY or LP_ERROR instead */ ! 35: #define LP_SELECT (1<<6) ! 36: /* from pin 12 of the interface: 1 if the printer is out of paper */ ! 37: #define LP_PAPEREND (1<<5) ! 38: /* from pin 32 of the interface: 0 if the printer is out of paper, offline, ! 39: or in error state */ ! 40: #define LP_ERROR (1<<4) ! 41: /* The rest of the bits relate to other devices */ ! 42: ! 43: /* The PI interrupts using autovector for level 2 */ ! 44: /* (is this the right type spec??) */ ! 45: #define PI_INTVEC_ADDR ((int (**)())(0x68)) ! 46:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.