mirror of
https://github.com/lampmerchant/tashtalk.git
synced 2024-06-12 14:29:29 +00:00
20231202
This commit is contained in:
parent
c7f052f49a
commit
16178a16ef
|
@ -160,6 +160,13 @@ CHKCRC equ 6 ;Set if receiver should check CRC and signal bad CRCs
|
||||||
|
|
||||||
endc
|
endc
|
||||||
|
|
||||||
|
;Linear Memory:
|
||||||
|
;0x2000-0x207F - UART receiver queue
|
||||||
|
;0x2080-0x209F - Node ID bitmap
|
||||||
|
;0x20A0-0x20AE - Bank 2 registers
|
||||||
|
;0x20AF-0x20EA - Unused
|
||||||
|
;0x20EB-0x20EF - Upper end of bank 2 registers
|
||||||
|
|
||||||
|
|
||||||
;;; Vectors ;;;
|
;;; Vectors ;;;
|
||||||
|
|
||||||
|
@ -203,20 +210,24 @@ Init
|
||||||
movlw B'11110000'
|
movlw B'11110000'
|
||||||
movwf OSCCON
|
movwf OSCCON
|
||||||
|
|
||||||
|
banksel OSCSTAT ;Spin until PLL is ready and instruction clock
|
||||||
|
btfss OSCSTAT,PLLR ; gears up to 8 MHz
|
||||||
|
bra $-1
|
||||||
|
|
||||||
banksel IOCAN ;RA5 sets IOCAN[IOCAF5] on pos/neg edge
|
banksel IOCAN ;RA5 sets IOCAN[IOCAF5] on pos/neg edge
|
||||||
movlw B'00100000'
|
movlw B'00100000'
|
||||||
movwf IOCAN
|
movwf IOCAN
|
||||||
movwf IOCAP
|
movwf IOCAP
|
||||||
|
|
||||||
banksel RCSTA ;UART async mode, 1 MHz
|
banksel RCSTA ;UART async mode, 1 MHz, but receiver not
|
||||||
movlw B'01001000'
|
movlw B'01001000' ; enabled just yet
|
||||||
movwf BAUDCON
|
movwf BAUDCON
|
||||||
clrf SPBRGH
|
clrf SPBRGH
|
||||||
movlw 7
|
movlw 7
|
||||||
movwf SPBRGL
|
movwf SPBRGL
|
||||||
movlw B'00100110'
|
movlw B'00100110'
|
||||||
movwf TXSTA
|
movwf TXSTA
|
||||||
movlw B'10010000'
|
movlw B'10000000'
|
||||||
movwf RCSTA
|
movwf RCSTA
|
||||||
|
|
||||||
banksel OPTION_REG ;Timer0 uses instruction clock
|
banksel OPTION_REG ;Timer0 uses instruction clock
|
||||||
|
@ -242,12 +253,26 @@ Init
|
||||||
movlw B'00101010'
|
movlw B'00101010'
|
||||||
movwf TRISA
|
movwf TRISA
|
||||||
|
|
||||||
clrf UR_LEN ;Set up UART receiver queue (0x2000-0x207F),
|
movlw 0x20 ;Set FSRs to point permanently to linear memory
|
||||||
movlw 0x20 ; for which FSRs are push (FSR0) and pop (FSR1)
|
movwf FSR0H
|
||||||
movwf FSR0H ; pointers
|
|
||||||
movwf FSR1H
|
movwf FSR1H
|
||||||
clrf FSR0L
|
|
||||||
clrf FSR1L
|
movlw 0x80 ;Zero out node ID bitmap (0x2080-0x209F) so we
|
||||||
|
movwf FSR1L ; don't respond to random IDs before the host
|
||||||
|
movlw 0 ; gets a chance to initialize us
|
||||||
|
ZeroNID movwi FSR1++
|
||||||
|
btfss FSR1L,5
|
||||||
|
bra ZeroNID
|
||||||
|
|
||||||
|
clrf UR_LEN ;Set up UART receiver queue (0x2000-0x207F),
|
||||||
|
clrf FSR0L ; for which FSRs are push (FSR0) and pop (FSR1)
|
||||||
|
clrf FSR1L ; pointers
|
||||||
|
|
||||||
|
clrf FEATURES ;All optional features off to start
|
||||||
|
clrf LR_CCRC1 ;Receiver CRC registers cleared to ones to
|
||||||
|
decf LR_CCRC1,F ; start, we don't have time to do this when we
|
||||||
|
clrf LR_CCRC2 ; jump into the code
|
||||||
|
decf LR_CCRC2,F
|
||||||
|
|
||||||
banksel PIE1 ;UART Rx and IOC interrupts on, interrupt
|
banksel PIE1 ;UART Rx and IOC interrupts on, interrupt
|
||||||
movlw B'00100000' ; subsystem on
|
movlw B'00100000' ; subsystem on
|
||||||
|
@ -255,11 +280,8 @@ Init
|
||||||
movlw B'11001000'
|
movlw B'11001000'
|
||||||
movwf INTCON
|
movwf INTCON
|
||||||
|
|
||||||
clrf FEATURES ;All optional features off to start
|
banksel RCSTA ;Enable receiver now that interrupt is on
|
||||||
clrf LR_CCRC1 ;Receiver CRC registers cleared to ones to
|
bsf RCSTA,CREN
|
||||||
decf LR_CCRC1,F ; start, we don't have time to do this when we
|
|
||||||
clrf LR_CCRC2 ; jump into the code
|
|
||||||
decf LR_CCRC2,F
|
|
||||||
|
|
||||||
bra PrepForNextFrame
|
bra PrepForNextFrame
|
||||||
|
|
||||||
|
@ -1352,7 +1374,7 @@ SendPoL DNOP ;32-33
|
||||||
movlw B'00101010' ;33 Get ready to tristate LT pin
|
movlw B'00101010' ;33 Get ready to tristate LT pin
|
||||||
tris 5 ;34 Tristate LT pin
|
tris 5 ;34 Tristate LT pin
|
||||||
bcf LATA,4 ;00 Switch transceiver to receive mode
|
bcf LATA,4 ;00 Switch transceiver to receive mode
|
||||||
bra SendPoW ;01-02 Go wait for the line to return to idle
|
bra SendPoW ;Go wait for the line to return to idle
|
||||||
SendPoZ nop ;34
|
SendPoZ nop ;34
|
||||||
bcf LATA,5 ;00 Drive bus to 0
|
bcf LATA,5 ;00 Drive bus to 0
|
||||||
call SendDoUartSvc ;01-02 (03-14) Service the UART receiver
|
call SendDoUartSvc ;01-02 (03-14) Service the UART receiver
|
||||||
|
@ -1360,10 +1382,14 @@ SendPoZ nop ;34
|
||||||
movlw B'00101010' ;33 Get ready to tristate LT pin
|
movlw B'00101010' ;33 Get ready to tristate LT pin
|
||||||
tris 5 ;34 Tristate LT pin
|
tris 5 ;34 Tristate LT pin
|
||||||
bcf LATA,4 ;00 Switch transceiver to receive mode
|
bcf LATA,4 ;00 Switch transceiver to receive mode
|
||||||
DNOP ;01-02
|
SendPoW call SendDoUartSvc ;Service the UART receiver while we wait for
|
||||||
SendPoW call SendDoUartSvc ;03-04 (05-16) Service the UART receiver while
|
movlb 0 ; the LocalTalk bus to go high/idle again for
|
||||||
call SendDoUartSvc ;17-18 (19-30) we wait for the LocalTalk bus
|
btfss PORTA,5 ; two consecutive reads, this protects us
|
||||||
call SendDoUartSvc ;31-32 (33-44) to go high/idle again
|
bra SendPoW ; against interpreting the not-idle line as a
|
||||||
|
call SendDoUartSvc ; frame and preventing ourselves from sending
|
||||||
|
movlb 0 ; any data
|
||||||
|
btfss PORTA,5 ; "
|
||||||
|
bra SendPoW ; "
|
||||||
return ;End transmission
|
return ;End transmission
|
||||||
|
|
||||||
SendByteStuff
|
SendByteStuff
|
||||||
|
|
Loading…
Reference in New Issue
Block a user