Pristine Ack-5.5
[Ack-5.5.git] / mach / z8000 / libmon / libmon_s.a
1 eÿmon.s\0\0\0\0\0\0\0\0\0\0\0\0\0\ 2\ 2¤\ 1\0\0Ã\ 5.define mon
2 .sect .text
3 .sect .rom
4 .sect .data
5 .sect .bss
6 .sect .text
7
8 mon:
9         popl    saveret, *RR14
10         pop     R0, *RR14       ! iocode
11         cp      R0, $1          ! exit
12         jr      NE, read
13         inc     R15, $2
14         sc      $0
15 read:   cp      R0, $3          ! read
16         jr      NE, write
17         pop     R0, *RR14       ! dummy;  all input from stdin
18         pop     R1, *RR14       ! ptr to buffer
19         pop     R2, *RR14       ! nr of bytes to be read
20         ld      R3, R1
21         cp      R2, $0
22         jr      EQ, 6f
23 1:      sc      $2              ! read character into RL0
24         cpb     RL0, $004       ! \^D
25         jr      EQ, 6f
26         cpb     RL0, $015       ! \cr
27         jr      NE, 2f
28         ldb     RL0, $012
29 2:      sc      $4              ! echo
30         cpb     RL0, $010       ! \^H
31         jr      NE, 3f
32         cp      R1, R3
33         jr      EQ, 5f
34         dec     R1
35         jr      5f
36 3:      cpb     RL0, $0100      ! \@
37         jr      NE, 4f
38         ld      R1, R3
39         ldb     RL0, $012
40         sc      $4
41         jr      5f
42 4:      ldb     0(R1), RL0
43         inc     R1
44         cpb     RL0, $012       ! \nl
45         jr      EQ, 6f
46 5:      djnz    R2, 1b
47 6:      sub     R1, R3          ! nr of bytes read
48         push    *RR14, R1
49         push    *RR14, $0
50         jr      retu
51 write:  cp      R0, $4          ! write
52         jr      NE, open
53         pop     R0, *RR14       ! dummy;  all output to stdout
54         pop     R1, *RR14       ! ptr to buffer
55         pop     R2, *RR14       ! nr of bytes to be written
56         ld      R3, R2
57         cp      R2, $0
58         jr      EQ, 8f
59 9:      ld      R0, $5000       ! counter to delay printing a little
60 7:      djnz    R0, 7b
61         ldb     RL0, 0(R1)
62         sc      $4
63         inc     R1
64         djnz    R2, 9b
65 8:      sub     R3, R2          ! nr of bytes written
66         push    *RR14, R3
67         push    *RR14, $0
68         jr      retu
69 open:   cp      R0, $5          ! open
70         jr      close
71         jr      NE, close
72         ld      *RR14, $0
73         ld      2(R15), $0
74         jr      retu
75 close:  cp      R0, $6          ! close
76         jr      NE, ioctl
77         ld      *RR14, $0
78         jr      retu
79 ioctl:  cp      R0, $54         ! ioctl
80         jr      NE, err
81         inc     R15, $4
82         ld      *RR14, $0
83 retu:   ldl     RR2, saveret
84         jp      *RR2
85 err:    push    *RR14, saveret
86         push    *RR14, $EBADMON
87         calr    trp
88         ret
89 \0