|
|
1.1 root 1: | @(#)probe.s 1.1 86/02/03 Copyr 1983 Sun Micro
2:
3: | Copyright (c) 1983 by Sun Microsystems, Inc.
4:
5: |
6: | probe.s
7: |
8: | Determine if an interface is present on the bus.
9: |
10:
11: |
12: | peek(addr)
13: |
14: | Temporarily re-routes Bus Errors, and then tries to
15: | read a short from the specified address. If a Bus Error occurs,
16: | we return -1; otherwise, we return the unsigned short that we read.
17: |
18:
19: .text
20: .globl _peek
21: _peek:
22: movl a7@(4),a0 | Get address to probe
23: movc vbr,a1 | get vbr
24: movl a1@(8),d1 | save bus error handler
25: movl #BEhand,a1@(8) | set up our own handler
26: movl sp,a1 | save current stack pointer
27: movl a0,d0
28: btst #0,d0 | See if odd address
29: bne BEhand | Yes, the probe fails.
30: moveq #0,d0 | Clear top half
31: movw a0@,d0 | Read a shortword.
32: PAexit:
33: movc vbr,a1 | get vbr
34: movl d1,a1@(8) | restore bus error handler
35: rts
36: BEhand:
37: movl a1,sp | Restore stack after bus error
38: moveq #-1,d0 | Set result of -1, indicating fault.
39: bra PAexit
40:
41: |
42: | pokec(a,c)
43: |
44: | This routine is the same, but uses a store instead of a read, due to
45: | stupid I/O devices which do not respond to reads.
46: |
47: | if (pokec (charpointer, bytevalue)) itfailed;
48: |
49:
50: .globl _pokec
51: _pokec:
52: movl a7@(4),a0 | Get address to probe
53: movc vbr,a1 | get vbr
54: movl a1@(8),d1 | save bus error handler
55: movl #BEhand,a1@(8) | set up our own handler
56: movl sp,a1 | save current stack pointer
57: movb a7@(11),a0@ | Write a byte
58: | A fault in the movb will vector us to BEhand above.
59: moveq #0,d0 | It worked; return 0 as result.
60: bra PAexit | restores bus error handler and returns - above
61:
62: |
63: | poke(a,c)
64: |
65: | if (poke(pointer, value)) itfailed;
66: |
67:
68: .globl _poke
69: _poke:
70: movl a7@(4),a0 | Get address to probe
71: movc vbr,a1 | get vbr
72: movl a1@(8),d1 | save bus error handler
73: movl #BEhand,a1@(8) | set up our own handler
74: movl sp,a1 | save current stack pointer
75: movw a7@(10),a0@ | Write a word
76: | A fault in the movb will vector us to BEhand above.
77: moveq #0,d0 | It worked; return 0 as result.
78: bra PAexit | restores bus error handler and returns - above
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.