summaryrefslogtreecommitdiffstats
path: root/sw/z80/drivers/build/usart.asm
diff options
context:
space:
mode:
Diffstat (limited to 'sw/z80/drivers/build/usart.asm')
-rw-r--r--sw/z80/drivers/build/usart.asm440
1 files changed, 0 insertions, 440 deletions
diff --git a/sw/z80/drivers/build/usart.asm b/sw/z80/drivers/build/usart.asm
deleted file mode 100644
index fb65d62..0000000
--- a/sw/z80/drivers/build/usart.asm
+++ /dev/null
@@ -1,440 +0,0 @@
-;--------------------------------------------------------
-; File Created by SDCC : free open source ANSI-C Compiler
-; Version 3.6.0 #9615 (Linux)
-;--------------------------------------------------------
- .module usart
- .optsdcc -mz80
-
-;--------------------------------------------------------
-; Public variables in this module
-;--------------------------------------------------------
- .globl _usart_word_length
- .globl _usart_set_baudrate
- .globl _usart_set_parity
- .globl _usart_set_stop_bits
- .globl _usart_set_autoflow
- .globl _usart_init
- .globl _usart_transmit
- .globl _usart_receive
- .globl _usart_write
- .globl _usart_read
-;--------------------------------------------------------
-; special function registers
-;--------------------------------------------------------
-;--------------------------------------------------------
-; ram data
-;--------------------------------------------------------
- .area _DATA
-;--------------------------------------------------------
-; ram data
-;--------------------------------------------------------
- .area _INITIALIZED
-__usart:
- .ds 2
-;--------------------------------------------------------
-; absolute external ram data
-;--------------------------------------------------------
- .area _DABS (ABS)
-;--------------------------------------------------------
-; global & static initialisations
-;--------------------------------------------------------
- .area _HOME
- .area _GSINIT
- .area _GSFINAL
- .area _GSINIT
-;--------------------------------------------------------
-; Home
-;--------------------------------------------------------
- .area _HOME
- .area _HOME
-;--------------------------------------------------------
-; code
-;--------------------------------------------------------
- .area _CODE
-;usart.c:5: void usart_set_baudrate(uint16_t baudrate)
-; ---------------------------------
-; Function usart_set_baudrate
-; ---------------------------------
-_usart_set_baudrate::
- push ix
- ld ix,#0
- add ix,sp
-;usart.c:8: _usart->LCR.divisor_latch_access = 1;
- ld hl,(__usart)
- ld bc,#0x0004
- add hl,bc
- ld a,(hl)
- or a,#0x80
- ld (hl),a
-;usart.c:9: _usart->buffer = 0x00FF & baudrate; // LSBs
- ld hl,(__usart)
- ld c,4 (ix)
- ld (hl),c
-;usart.c:10: memcpy(&_usart->IER, &(baudrate >>8), 1);
- ld de,(__usart)
- inc de
- ld l,5 (ix)
- ld h,#0x00
- ld a, (hl)
- ld (de), a
-;usart.c:12: _usart->LCR.divisor_latch_access = 0;
- ld hl,(__usart)
- ld bc,#0x0004
- add hl,bc
- ld a,(hl)
- and a,#0x7f
- ld (hl),a
- pop ix
- ret
-;usart.c:15: void usart_set_parity(int mode)
-; ---------------------------------
-; Function usart_set_parity
-; ---------------------------------
-_usart_set_parity::
-;usart.c:18: _usart->LCR.even_parity = 1;
- ld hl,(__usart)
- ld bc,#0x0004
- add hl,bc
-;usart.c:17: if (mode == USART_PARITY_EVEN) {
- ld iy,#2
- add iy,sp
- ld a,0 (iy)
- dec a
- jr NZ,00104$
- ld a,1 (iy)
- or a, a
- jr NZ,00104$
-;usart.c:18: _usart->LCR.even_parity = 1;
- ld a,(hl)
- or a,#0x10
- ld (hl),a
- jr 00105$
-00104$:
-;usart.c:20: else if (mode == USART_PARITY_ODD) {
- ld iy,#2
- add iy,sp
- ld a,0 (iy)
- sub a, #0x02
- jr NZ,00105$
- ld a,1 (iy)
- or a, a
- jr NZ,00105$
-;usart.c:21: _usart->LCR.even_parity = 0;
- ld a,(hl)
- and a,#0xef
- ld (hl),a
-00105$:
-;usart.c:24: _usart->LCR.parity = (mode == USART_PARITY_NONE) ? 0 : 1;
- ld hl,(__usart)
- ld bc,#0x0004
- add hl,bc
- ld iy,#2
- add iy,sp
- ld a,0 (iy)
- rlca
- rlca
- rlca
- and a,#0xf8
- and a,#0x08
- ld c,a
- ld a,(hl)
- and a,#0xf7
- or a,c
- ld (hl),a
- ret
-;usart.c:27: void usart_set_stop_bits(int count)
-; ---------------------------------
-; Function usart_set_stop_bits
-; ---------------------------------
-_usart_set_stop_bits::
-;usart.c:29: _usart->LCR.stop_bits = (count == USART_STOP_BITS_1) ? 0 : 1;
- ld bc,(__usart)
- inc bc
- inc bc
- inc bc
- inc bc
- ld iy,#2
- add iy,sp
- ld a,0 (iy)
- sub a, #0x0a
- jr NZ,00103$
- ld a,1 (iy)
- or a, a
- jr NZ,00103$
- ld a,#0x01
- jr 00104$
-00103$:
- xor a,a
-00104$:
- xor a, #0x01
- add a, a
- add a, a
- and a,#0x04
- ld l,a
- ld a,(bc)
- and a,#0xfb
- or a,l
- ld (bc),a
- ret
-;usart.c:32: void usart_word_length(int length)
-; ---------------------------------
-; Function usart_word_length
-; ---------------------------------
-_usart_word_length::
-;usart.c:34: _usart->LCR.word_length = length;
- ld hl,(__usart)
- ld bc,#0x0004
- add hl,bc
- ld iy,#2
- add iy,sp
- ld a,0 (iy)
- and a,#0x03
- ld c,a
- ld a,(hl)
- and a,#0xfc
- or a,c
- ld (hl),a
- ret
-;usart.c:37: void usart_set_autoflow(int mode)
-; ---------------------------------
-; Function usart_set_autoflow
-; ---------------------------------
-_usart_set_autoflow::
-;usart.c:39: _usart->MCR.autoflow = (mode == USART_AUTOFLOW_OFF) ? 0 : 1;
- ld hl,(__usart)
- ld bc,#0x000c
- add hl,bc
- ld iy,#2
- add iy,sp
- ld a,0 (iy)
- and a,#0x01
- ld c,a
- ld a,(hl)
- and a,#0xfe
- or a,c
- ld (hl),a
-;usart.c:40: _usart->MCR.data_terminal_ready = (mode == USART_AUTOFLOW_ALL);
- ld hl,(__usart)
- ld bc,#0x0005
- add hl,bc
- ld a,0 (iy)
- sub a, #0x03
- jr NZ,00103$
- ld a,1 (iy)
- or a, a
- jr NZ,00103$
- ld a,#0x01
- jr 00104$
-00103$:
- xor a,a
-00104$:
- and a,#0x01
- ld c,a
- ld a,(hl)
- and a,#0xfe
- or a,c
- ld (hl),a
- ret
-;usart.c:43: inline void usart_init(uint16_t baudrate, int parity, int stop_bits)
-; ---------------------------------
-; Function usart_init
-; ---------------------------------
-_usart_init::
-;usart.c:45: usart_set_baudrate(baudrate);
- pop bc
- pop hl
- push hl
- push bc
- push hl
- call _usart_set_baudrate
- pop af
-;usart.c:46: usart_set_parity(parity);
- ld hl, #4
- add hl, sp
- ld c, (hl)
- inc hl
- ld b, (hl)
- push bc
- call _usart_set_parity
- pop af
-;usart.c:47: usart_set_stop_bits(stop_bits);
- ld hl, #6
- add hl, sp
- ld c, (hl)
- inc hl
- ld b, (hl)
- push bc
- call _usart_set_stop_bits
-;usart.c:48: usart_set_autoflow(USART_AUTOFLOW_OFF);
- ld hl, #0x0000
- ex (sp),hl
- call _usart_set_autoflow
- pop af
- ret
-;usart.c:51: void usart_transmit(uint8_t data)
-; ---------------------------------
-; Function usart_transmit
-; ---------------------------------
-_usart_transmit::
-;usart.c:53: _usart->buffer = data;
- ld hl,(__usart)
- ld iy,#2
- add iy,sp
- ld a,0 (iy)
- ld (hl),a
-;usart.c:54: while (_usart->LSR.transmitter_holder_empty == 0); // wait
-00101$:
- ld hl,(__usart)
- ld bc,#0x000d
- add hl,bc
- ld a,(hl)
- rlca
- rlca
- rlca
- jr NC,00101$
- ret
-;usart.c:57: uint8_t usart_receive()
-; ---------------------------------
-; Function usart_receive
-; ---------------------------------
-_usart_receive::
-;usart.c:59: return _usart->buffer;
- ld hl,(__usart)
- ld l,(hl)
- ret
-;usart.c:62: int usart_write(uint8_t *data, size_t size)
-; ---------------------------------
-; Function usart_write
-; ---------------------------------
-_usart_write::
- push ix
- ld ix,#0
- add ix,sp
- push af
-;usart.c:64: uint8_t *dp = data;
- ld a,4 (ix)
- ld -2 (ix),a
- ld a,5 (ix)
- ld -1 (ix),a
-;usart.c:66: while (size--) {
- ld c,6 (ix)
- ld b,7 (ix)
-00104$:
- ld e, c
- ld d, b
- dec bc
- ld a,d
- or a,e
- jr Z,00106$
-;usart.c:67: _usart->buffer = *(dp++);
- ld de,(__usart)
- pop hl
- push hl
- ld a,(hl)
- inc -2 (ix)
- jr NZ,00126$
- inc -1 (ix)
-00126$:
- ld (de),a
-;usart.c:68: while (_usart->LSR.transmitter_empty);
-00101$:
- ld hl,(__usart)
- ld de,#0x000d
- add hl,de
- ld a,(hl)
- rlca
- rlca
- jr NC,00104$
- jr 00101$
-00106$:
-;usart.c:72: return size;
- ld l, c
- ld h, b
- ld sp, ix
- pop ix
- ret
-;usart.c:75: int usart_read(uint8_t *buffer, size_t count)
-; ---------------------------------
-; Function usart_read
-; ---------------------------------
-_usart_read::
- push ix
- ld ix,#0
- add ix,sp
- ld hl,#-6
- add hl,sp
- ld sp,hl
-;usart.c:77: uint8_t *bp = buffer;
- ld a,4 (ix)
- ld -4 (ix),a
- ld a,5 (ix)
- ld -3 (ix),a
-;usart.c:80: while (count--) {
- ld c,6 (ix)
- ld b,7 (ix)
- ld hl,#0x0000
- ex (sp), hl
-00105$:
- ld e, c
- ld d, b
- dec bc
- ld a,d
- or a,e
- jr Z,00107$
-;usart.c:81: *(bp++) = _usart->buffer;
- ld hl,(__usart)
- ld e,(hl)
- ld l,-4 (ix)
- ld h,-3 (ix)
- ld (hl),e
- inc -4 (ix)
- jr NZ,00123$
- inc -3 (ix)
-00123$:
- ld de,(__usart)
-;usart.c:83: if (_usart->LSR.framing_error || _usart->LSR.parity_error) {
- ld hl,#0x000d
- add hl,de
- ld -2 (ix),l
- ld -1 (ix),h
- ld l,-2 (ix)
- ld h,-1 (ix)
- ld a,(hl)
- rrca
- rrca
- rrca
- and a,#0x01
- jr NZ,00101$
- ld l,-2 (ix)
- ld h,-1 (ix)
- ld a,(hl)
- rrca
- rrca
- and a,#0x01
- jr Z,00102$
-00101$:
-;usart.c:84: bp--; // delete last byte (?)
- ld l,-4 (ix)
- ld h,-3 (ix)
- dec hl
- ld -4 (ix),l
- ld -3 (ix),h
- jr 00105$
-00102$:
-;usart.c:86: read_count++;
- inc -6 (ix)
- jr NZ,00105$
- inc -5 (ix)
- jr 00105$
-00107$:
-;usart.c:90: return read_count;
- pop hl
- push hl
- ld sp, ix
- pop ix
- ret
- .area _CODE
- .area _INITIALIZER
-__xinit___usart:
- .dw #0x4000
- .area _CABS (ABS)