221 lines
4.9 KiB
NASM
221 lines
4.9 KiB
NASM
;--------------------------------------------------------
|
|
; File Created by SDCC : free open source ISO C Compiler
|
|
; Version 4.5.0 #15242 (Linux)
|
|
;--------------------------------------------------------
|
|
.module main
|
|
|
|
.optsdcc -mz80 sdcccall(1)
|
|
;--------------------------------------------------------
|
|
; Public variables in this module
|
|
;--------------------------------------------------------
|
|
.globl _main
|
|
.globl _delay_ms
|
|
.globl _io_in
|
|
.globl _io_out
|
|
;--------------------------------------------------------
|
|
; special function registers
|
|
;--------------------------------------------------------
|
|
;--------------------------------------------------------
|
|
; ram data
|
|
;--------------------------------------------------------
|
|
.area _DATA
|
|
;--------------------------------------------------------
|
|
; ram data
|
|
;--------------------------------------------------------
|
|
.area _INITIALIZED
|
|
;--------------------------------------------------------
|
|
; 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
|
|
;main.c:19: static void acia_init(void)
|
|
; ---------------------------------
|
|
; Function acia_init
|
|
; ---------------------------------
|
|
_acia_init:
|
|
;main.c:21: io_out(ACIA_CTRL_STATUS, ACIA_CMD_MASTER_RESET);
|
|
ld l, #0x03
|
|
ld a, #0x20
|
|
call _io_out
|
|
;main.c:22: io_out(ACIA_CTRL_STATUS, ACIA_CMD_8N1_DIV16);
|
|
ld l, #0x15
|
|
ld a, #0x20
|
|
;main.c:23: }
|
|
jp _io_out
|
|
;main.c:25: static uint8_t acia_status(void)
|
|
; ---------------------------------
|
|
; Function acia_status
|
|
; ---------------------------------
|
|
_acia_status:
|
|
;main.c:27: return io_in(ACIA_CTRL_STATUS);
|
|
ld a, #0x20
|
|
;main.c:28: }
|
|
jp _io_in
|
|
;main.c:30: static void acia_putc(uint8_t value)
|
|
; ---------------------------------
|
|
; Function acia_putc
|
|
; ---------------------------------
|
|
_acia_putc:
|
|
ld l, a
|
|
;main.c:32: while ((acia_status() & ACIA_STATUS_TDRE) == 0) {
|
|
00101$:
|
|
push hl
|
|
call _acia_status
|
|
pop hl
|
|
bit 1, a
|
|
jr Z, 00101$
|
|
;main.c:34: io_out(ACIA_DATA, value);
|
|
ld a, #0x21
|
|
;main.c:35: }
|
|
jp _io_out
|
|
;main.c:37: static uint8_t acia_getc_nonblocking(uint8_t *value)
|
|
; ---------------------------------
|
|
; Function acia_getc_nonblocking
|
|
; ---------------------------------
|
|
_acia_getc_nonblocking:
|
|
;main.c:39: if ((acia_status() & ACIA_STATUS_RDRF) == 0) {
|
|
push hl
|
|
call _acia_status
|
|
pop hl
|
|
rrca
|
|
jr C, 00102$
|
|
;main.c:40: return 0;
|
|
xor a, a
|
|
ret
|
|
00102$:
|
|
;main.c:43: *value = io_in(ACIA_DATA);
|
|
push hl
|
|
ld a, #0x21
|
|
call _io_in
|
|
pop hl
|
|
ld (hl), a
|
|
;main.c:44: return 1;
|
|
ld a, #0x01
|
|
;main.c:45: }
|
|
ret
|
|
;main.c:47: static void acia_puts(const char *text)
|
|
; ---------------------------------
|
|
; Function acia_puts
|
|
; ---------------------------------
|
|
_acia_puts:
|
|
;main.c:49: while (*text) {
|
|
00101$:
|
|
ld a, (hl)
|
|
or a, a
|
|
ret Z
|
|
;main.c:50: acia_putc((uint8_t)*text++);
|
|
inc hl
|
|
push hl
|
|
call _acia_putc
|
|
pop hl
|
|
;main.c:52: }
|
|
jr 00101$
|
|
;main.c:54: void main(void)
|
|
; ---------------------------------
|
|
; Function main
|
|
; ---------------------------------
|
|
_main::
|
|
push af
|
|
;main.c:57: uint8_t ch = 0;
|
|
ld iy, #0
|
|
add iy, sp
|
|
ld 0 (iy), #0x00
|
|
;main.c:59: io_out(PIO_A_CTRL, 0x0F);
|
|
ld l, #0x0f
|
|
ld a, #0x42
|
|
call _io_out
|
|
;main.c:60: io_out(PIO_A_DATA, 0x00);
|
|
ld l, #0x00
|
|
ld a, #0x40
|
|
call _io_out
|
|
;main.c:62: acia_init();
|
|
call _acia_init
|
|
;main.c:63: acia_puts("ACIA 6850 test ready\r\n");
|
|
ld hl, #___str_0
|
|
call _acia_puts
|
|
ld iy, #1
|
|
add iy, sp
|
|
ld 0 (iy), #0x00
|
|
00106$:
|
|
;main.c:66: uint8_t status = acia_status();
|
|
call _acia_status
|
|
;main.c:68: if (acia_getc_nonblocking(&ch)) {
|
|
ld hl, #0
|
|
add hl, sp
|
|
call _acia_getc_nonblocking
|
|
or a, a
|
|
jr Z, 00104$
|
|
;main.c:69: io_out(PIO_A_DATA, ch);
|
|
ld iy, #0
|
|
add iy, sp
|
|
ld l, 0 (iy)
|
|
ld a, #0x40
|
|
call _io_out
|
|
;main.c:70: acia_putc(ch);
|
|
ld hl, #0
|
|
add hl, sp
|
|
ld a, (hl)
|
|
call _acia_putc
|
|
;main.c:71: if (ch == '\r') {
|
|
ld hl, #0
|
|
add hl, sp
|
|
ld a, (hl)
|
|
sub a, #0x0d
|
|
jr NZ, 00102$
|
|
;main.c:72: acia_putc('\n');
|
|
ld a, #0x0a
|
|
call _acia_putc
|
|
00102$:
|
|
;main.c:74: delay_ms(50);
|
|
ld hl, #0x0032
|
|
call _delay_ms
|
|
00104$:
|
|
;main.c:77: acia_putc((uint8_t)('0' + (cnt & 0x07)));
|
|
ld hl, #1
|
|
add hl, sp
|
|
ld a, (hl)
|
|
and a, #0x07
|
|
add a, #0x30
|
|
call _acia_putc
|
|
;main.c:78: acia_puts("\r\n");
|
|
ld hl, #___str_1
|
|
call _acia_puts
|
|
;main.c:79: cnt++;
|
|
ld iy, #1
|
|
add iy, sp
|
|
inc 0 (iy)
|
|
;main.c:80: delay_ms(250);
|
|
ld hl, #0x00fa
|
|
call _delay_ms
|
|
jr 00106$
|
|
;main.c:82: }
|
|
pop af
|
|
ret
|
|
___str_0:
|
|
.ascii "ACIA 6850 test ready"
|
|
.db 0x0d
|
|
.db 0x0a
|
|
.db 0x00
|
|
___str_1:
|
|
.db 0x0d
|
|
.db 0x0a
|
|
.db 0x00
|
|
.area _CODE
|
|
.area _INITIALIZER
|
|
.area _CABS (ABS)
|