Rev 1004 | Details | Compare with Previous | Last modification | View Log
Rev | Author | Line No. | Line |
---|---|---|---|
1004 | dimkam | 1 | MODULE Uart |
2 | UART_DATA_REG = #c6 |
||
3 | UART_STAT_REG = #c7 |
||
4 | UART_BYTE_RECIVED = #80 |
||
5 | UART_BYTE_SENDING = #40 |
||
6 | SCANDBLCTRL_REG = #0B |
||
7 | ZXUNO_ADDR = #FC3B |
||
8 | ZXUNO_REG = #FD3B |
||
9 | |||
10 | |||
11 | ; Enable UART |
||
12 | ; Cleaning all flags by reading UART regs |
||
13 | ; Wastes AF and BC |
||
14 | init: |
||
15 | ld bc, ZXUNO_ADDR : ld a, UART_STAT_REG : out (c), a |
||
16 | ld bc, ZXUNO_REG : in A, (c) |
||
17 | ld bc, ZXUNO_ADDR : ld a, UART_DATA_REG : out (c), a |
||
18 | ld bc, ZXUNO_REG : in A, (c) |
||
19 | ld b, #ff |
||
20 | .loop |
||
21 | push bc |
||
22 | call uartRead |
||
23 | pop bc |
||
24 | djnz .loop |
||
25 | ret |
||
26 | |||
27 | read: |
||
28 | call uartRead |
||
1346 | alone | 29 | jr nc, read |
1004 | dimkam | 30 | ret |
31 | |||
32 | ; Write single byte to UART |
||
33 | ; A - byte to write |
||
34 | ; BC will be wasted |
||
35 | write: |
||
36 | push af |
||
37 | ld bc, ZXUNO_ADDR : ld a, UART_STAT_REG : out (c), a |
||
38 | ld bc, ZXUNO_REG : in A, (c) : and UART_BYTE_RECIVED |
||
39 | jr nz, .is_recvF |
||
40 | .checkSent |
||
41 | ld bc, ZXUNO_REG : in A, (c) : and UART_BYTE_SENDING |
||
42 | jr nz, .checkSent |
||
43 | |||
44 | ld bc, ZXUNO_ADDR : ld a, UART_DATA_REG : out (c), a |
||
45 | |||
46 | ld bc, ZXUNO_REG : pop af : out (c), a |
||
47 | ret |
||
48 | .is_recvF |
||
49 | push af : push hl |
||
50 | ld hl, is_recv : ld a, 1 : ld (hl), a |
||
51 | |||
52 | pop hl : pop af |
||
53 | jr .checkSent |
||
54 | |||
55 | ; Read byte from UART |
||
56 | ; A: byte |
||
57 | ; B: |
||
58 | ; 1 - Was read |
||
59 | ; 0 - Nothing to read |
||
60 | uartRead: |
||
61 | ld a, (poked_byte) : and 1 : jr nz, .retBuff |
||
62 | |||
63 | ld a, (is_recv) : and 1 : jr nz, recvRet |
||
64 | |||
65 | ld bc, ZXUNO_ADDR : ld a, UART_STAT_REG : out (c), a |
||
66 | ld bc, ZXUNO_REG : in a, (c) : and UART_BYTE_RECIVED |
||
67 | jr nz, retReadByte |
||
68 | |||
69 | or a |
||
70 | ret |
||
71 | .retBuff |
||
72 | ld a, 0 : ld (poked_byte), a : ld a, (byte_buff) |
||
73 | scf |
||
74 | ret |
||
75 | |||
76 | retReadByte: |
||
77 | xor a : ld (poked_byte), a : ld (is_recv), a |
||
78 | |||
79 | ld bc, ZXUNO_ADDR : ld a, UART_DATA_REG : out (c), a |
||
80 | ld bc, ZXUNO_REG : in a, (c) |
||
81 | |||
82 | scf |
||
83 | ret |
||
84 | |||
85 | recvRet: |
||
86 | ld bc, ZXUNO_ADDR : ld a, UART_DATA_REG : out (c),a |
||
87 | |||
88 | ld bc, ZXUNO_REG : in a, (c) |
||
89 | ld hl, is_recv : ld (hl), 0 |
||
90 | ld hl, poked_byte : ld (hl), 0 |
||
91 | |||
92 | scf |
||
93 | ret |
||
94 | |||
95 | poked_byte defb 0 |
||
96 | byte_buff defb 0 |
||
97 | is_recv defb 0 |
||
98 | |||
99 | ENDMODULE |