Blame |
Last modification |
View Log
| Download
| RSS feed
MODULE uart_init
PUBLIC uart_init
#include "sysdefs.asm"
RSEG CODE
uart_init: ;e=divisor
di
push bc
ld bc,0x55FE ;╨░╨┤╤А╨╡╤Б 8952
in a,(c) ;╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ╤А╨╡╨╢╨╕╨╝ ╨║╨╛╨╝╨░╨╜╨┤╤Л
ld b,0xC3 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╨║╨╛╤А╨╛╤Б╤В╤М ╨┐╨╛╤А╤В╨░
in a,(c) ;╨▓╤Л╨┐╨╛╨╗╨╜╨╕╤В╤М ╨║╨╛╨╝╨░╨╜╨┤╤Г
ld b,e ;╨┐╨░╤А╨░╨╝╨╡╤В╤А - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╨║╨╛╤А╨╛╤Б╤В╤М ╨┐╨╛╤А╤В╨░ 19200(6) 38400(3) 115200(1) 57600(2) 9600(12) 14400(8)
in a,(c) ;╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╨┐╨░╤А╨░╨╝╨╡╤В╤А
pop bc
ei
ret
ENDMOD
MODULE uart_write
PUBLIC uart_write
#include "sysdefs.asm"
RSEG CODE
uart_write: ;e=byte to send
di
push bc
readytx:
ld bc,0x55FE ;╨░╨┤╤А╨╡╤Б 8952
in a,(c) ;╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ╤А╨╡╨╢╨╕╨╝ ╨║╨╛╨╝╨░╨╜╨┤╤Л
ld b,0x42 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╨┐╤А╨╛╤З╨╡╤Б╤В╤М ╤Б╤В╨░╤В╤Г╤Б
in a,(c)
bit 6,a ;╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л - TX
jp z,readytx ; ╨▓╨╡╤А╨╜╤Г╤В╤М╤Б╤П ╨╡╤Б╨╗╨╕ ╨▒╨░╨╣╤В╨░ ╨╜╨╡╤В
ld bc,0x55FE ;╨░╨┤╤А╨╡╤Б 8952
in a,(c) ;╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ╤А╨╡╨╢╨╕╨╝ ╨║╨╛╨╝╨░╨╜╨┤╤Л
ld b,0x03 ;╨╖╨░╨┐╨╕╤Б╤М
in a,(c)
ld b,e ;╨С╨Р╨Щ╨в ╨┤╨╗╤П ╨┐╨╡╤А╨╡╤Б╤Л╨╗╨║╨╕
in a,(c) ; ->
pop bc
ei
ret
ENDMOD
MODULE uart_flashrts
PUBLIC uart_flashrts
#include "sysdefs.asm"
RSEG CODE
uart_flashrts:
push bc
ld bc,0x55FE ;╨░╨┤╤А╨╡╤Б 8952
in a,(c) ;╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ╤А╨╡╨╢╨╕╨╝ ╨║╨╛╨╝╨░╨╜╨┤╤Л
ld b,0x43 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╤В╨░╤В╤Г╤Б
IN a,(c)
ld b,0x03 ;╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л - ╤Г╨▒╤А╨░╤В╤М RTS (START)
in a, (c)
pop bc
push bc
ld bc,0x55FE ;╨░╨┤╤А╨╡╤Б 8952
in a,(c) ;╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ╤А╨╡╨╢╨╕╨╝ ╨║╨╛╨╝╨░╨╜╨┤╤Л
ld b,0x43 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╤В╨░╤В╤Г╤Б
in a,(c)
ld b,0x00 ;╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М RTS (STOP)
in a,(c)
pop bc
ret
ENDMOD
MODULE uart_startrts
PUBLIC uart_startrts
#include "sysdefs.asm"
RSEG CODE
uart_startrts:
push bc
ld bc,0x55FE ;╨░╨┤╤А╨╡╤Б 8952
in a,(c) ;╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ╤А╨╡╨╢╨╕╨╝ ╨║╨╛╨╝╨░╨╜╨┤╤Л
ld b,0x43 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╤В╨░╤В╤Г╤Б
IN a,(c)
ld b,0x03 ;╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л - ╤Г╨▒╤А╨░╤В╤М RTS (START)
in a, (c)
pop bc
ret
ENDMOD
MODULE uart_stoprts
PUBLIC uart_stoprts
#include "sysdefs.asm"
RSEG CODE
uart_stoprts:
push bc
ld bc,0x55FE ;╨░╨┤╤А╨╡╤Б 8952
in a,(c) ;╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ╤А╨╡╨╢╨╕╨╝ ╨║╨╛╨╝╨░╨╜╨┤╤Л
ld b,0x43 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╤В╨░╤В╤Г╤Б
in a,(c)
ld b,0x00 ;╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М RTS (STOP)
in a,(c)
pop bc
ret
ENDMOD
MODULE uart_read
PUBLIC uart_read
#include "sysdefs.asm"
RSEG CODE
uart_read: ;out e = byte
di
push bc
read2:
ld bc,0x55FE ;╨░╨┤╤А╨╡╤Б 8952
in a,(c) ;╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ╤А╨╡╨╢╨╕╨╝ ╨║╨╛╨╝╨░╨╜╨┤╤Л
ld b,0xC2 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤З╤В╨╡╨╜╨╕╨╡ ╤Б╤З╨╡╤В╤З╨╕╨║╨░ ╨▒╤Г╤Д╨╡╤А╨░ ╨┐╤А╨╕╨╡╨╝╨░
in a,(c) ;╨Я╨╛╨╗╤Г╤З╨╕╨╗╨╕ ╤З╨╕╤Б╨╗╨╛ ╨▒╨░╨╣╤В ╨▓ ╨▒╤Г╤Д╨╡╤А╨╡
or a
jp nz,togetb ; ╨Т ╨▒╤Г╤Д╨╡╤А╨╡ ╨╡╤Б╤В╤М ╨▒╨░╨╣╤В
jp read2 ; ╨Р ╤В╨╡╨┐╨╡╤А╤М ╨╡╤Б╤В╤М?
togetb:
ld bc,0x55FE ;╨░╨┤╤А╨╡╤Б 8952
in a,(c) ;╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ╤А╨╡╨╢╨╕╨╝ ╨║╨╛╨╝╨░╨╜╨┤╤Л
ld b,0x02 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤З╤В╨╡╨╜╨╕╨╡
in a,(c) ;╨Я╨╛╨╗╤Г╤З╨░╨╡╨╝ ╨▒╨░╨╣╤В ╨▓ ╨Р
ld e,a
pop bc
ei
ret
ENDMOD
MODULE uart_queue
PUBLIC uart_queue
#include "sysdefs.asm"
RSEG CODE
uart_queue: ;out e = queue
push bc
ld bc,0x55FE ;╨░╨┤╤А╨╡╤Б 8952
in a,(c) ;╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ╤А╨╡╨╢╨╕╨╝ ╨║╨╛╨╝╨░╨╜╨┤╤Л
ld b,0xC2 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤З╤В╨╡╨╜╨╕╨╡ ╤Б╤З╨╡╤В╤З╨╕╨║╨░ ╨▒╤Г╤Д╨╡╤А╨░ ╨┐╤А╨╕╨╡╨╝╨░
in a,(c) ;╨Я╨╛╨╗╤Г╤З╨╕╨╗╨╕ ╤З╨╕╤Б╨╗╨╛ ╨▒╨░╨╣╤В ╨▓ ╨▒╤Г╤Д╨╡╤А╨╡
ld e,a
pop bc
ret
ENDMOD
MODULE uart_delay10k
PUBLIC uart_delay10k
#include "sysdefs.asm"
RSEG CODE
uart_delay10k:
di
push de
ld e, 0xFA
loop2:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
dec e
jr nz,loop2
pop de
ei
ret
ENDMOD
END