Login

Subversion Repositories NedoOS

Rev

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