|
|
1.1 root 1: /* Centronix parallel (printer) port */
2:
3: /* base addresses */
4:
5: #define Lpt1 0x3bc
6: #define Lpt2 0x378
7: #define Lpt3 0x278
8:
9: /* offsets, and bits in the registers */
10:
11: #define Qdlr 0x0 /* data latch register */
12:
13: #define Qpsr 0x1 /* printer status register */
14: #define Fbusy 0x80
15: #define Fintbar 0x40
16:
17: #define Qpcr 0x2 /* printer control register */
18: #define Fie 0x10
19: #define Fsi 0x08
20: #define Finitbar 0x04
21: #define Faf 0x02
22: #define Fstrobe 0x01
23:
24: /*
25: * read next data byte
26: *
27: * outb(dev+Qpcr, Finitbar|Faf|Fsi|Fstrobe);
28: * data = (inb(dev+Qpsr)&0xf8)<<2;
29: * outb(dev+Qpcr, Finitbar|Faf|Fsi);
30: * data |= inb(dev+Qpsr)>>3;
31: */
32: TEXT Irdnext(SB),$0
33:
34: MOVL dev+0(FP),DX /* points to base address */
35: MOVL $(Finitbar|Faf|Fsi|Fstrobe),AX
36: ADDL $Qpcr,DX /* points to control register */
37: OUTB
38: OUTB /* have to wait, sorry */
39: SUBL $1,DX /* points to status register */
40: INB
41: MOVL AX,CX
42: MOVL $(Finitbar|Faf|Fsi),AX
43: ADDL $1,DX /* points to control register */
44: OUTB
45: OUTB
46: ANDL $0xf8,CX
47: SHLL $2,CX
48: SUBL $1,DX /* points to status register */
49: INB
50: SARL $3,AX
51: ORL CX,AX
52: RET
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.