home *** CD-ROM | disk | FTP | other *** search
- ;+
- ; Serial Input routine for the 6809
- ; I/O port configured for Radio Shack color computer
- ;-
- bitime = 0x176 ;Time constant for 1200 baud bit interval
- halfbit = 0x29 ; 1/2 bit time for center bit sync
- IPORT = 0xFF22 ; Color computer i/o port address
- IMASK = 1 ; Bit position of input bit in port
- ;
- ;+
- ; input call to receive a character
- ;-
- serinp:
- .byte 0x1A,0x50 ;orcc 50, kill interrupts
- bsr inwait ;get character
- clr b
- .byte 0x1E,0x89 ;Exg B,A
- rts ;exit, character in b
- ;
- ;+
- ; inwait waits for an input character to start and
- ; receives it.
- ;-
- inwait:
- mov IPORT,a
- and $IMASK,a ; Get the bit out
- beq inwait ; wait on line = 0
- ;
- serget:
- .byte 0x34,0x34 ;PSHS X,Y,B
- .byte 0x10,0x8E,0,8 ;LDY #8 = bitcounter
- .byte 0x8E
- .word halfbit ;LDX bitime /2
- clr a ; clear receive register
- ;+
- ; sync up on the start bit transition
- ;-
- sync:
- mov IPORT,b ;get port value
- and $IMASK,b ;Test bit value
- bne sync ;wait on start bit = 1
- start:
- .byte 0x30,0x1F ;LEAX -1,X
- beq assemble ;one half bit time has expired
- mov IPORT,b
- and $IMASK,b
- beq start ;count down the start bit
- mov $-1,a ; Glitch on start,return error
- .byte 0x35,0x34 ;PULS X,Y,B
- rts ;error exit
- assemble:
- .byte 0x8E
- .word bitime ; set one bit time wait
- assemb1:
- .byte 0x30,0x1F ; LEAX -1,x ,dec bit timer
- bne assemb1
- mov IPORT,b
- and $IMASK,b
- beq assemb2
- or $0x80,a ; or in the bit
- assemb2:
- .byte 0x31,0x3F ;LEAY -1,Y decr. bit count
- beq seriox ; exit if done
- lsr a ; move the bit down for the next pass
- bra assemble
- seriox:
- .byte 0x35,0x34 ;PULS X,Y,B
- rts ; character in A
- ter in A
- cracter