Compare commits

...

6 Commits
v2.1.0 ... main

Author SHA1 Message Date
Tashtari
656b008b34
add FUNDING.yml with ko-fi 2024-05-28 09:33:33 -06:00
Tashtari
5f4013fb9d
expand PCBs and Products section, include software 2024-04-04 04:50:30 -06:00
Tashtari
0a0c0c9350
add PCBs and Products section to README 2024-04-04 04:18:36 -06:00
lampmerchant
0e15b7d230 20240110 2024-01-10 07:05:38 -07:00
lampmerchant
16178a16ef 20231202 2023-12-02 09:03:42 -07:00
lampmerchant
c7f052f49a 20231112 2023-11-12 06:17:16 -07:00
3 changed files with 85 additions and 29 deletions

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
ko_fi: tashtari

View File

@ -32,6 +32,47 @@ Also, "single-chip" doesn't include the separate and necessary driver/receiver c
Building the firmware requires Microchip MPASM, which is included with their development environment, MPLAB. Note that you **must** use MPLAB X version 5.35 or earlier or MPLAB 8 as later versions of MPLAB X have removed MPASM.
## PCBs and Products
### End User Hardware
* [AirTalk](https://68kmla.org/bb/index.php?threads/introducing-and-interest-check-airtalk-wireless-plug-and-play-localtalk-dongles.39661/) by [cheesestraws](https://68kmla.org/bb/index.php?members/cheesestraws.19339/)
* Plug-and-play WiFi-LocalTalk dongle
* [Buy](https://airtalk.shop/product/airtalk-complete/) from [airtalk.shop](https://airtalk.shop/)
### Serial Adapters
* TashTalkHat by [bdurbrow](https://68kmla.org/bb/index.php?members/bdurbrow.6275/)
* Raspberry Pi hat using v1.x firmware
* Pending release
* [Forum post](https://68kmla.org/bb/index.php?threads/tashtalk-single-chip-localtalk-interface.38955/page-4#post-422138)
* TashTalk 2 Hat by [Tashtari](https://github.com/lampmerchant)
* Raspberry Pi hat using v2.x firmware
* [Files](https://github.com/lampmerchant/tashtalk/tree/main/tashtalk2-rpihat)
* See latest release in this repository for gerbers
* Buy [fully assembled](https://ko-fi.com/s/4d01fa5b8a) or as kit with [regular](https://ko-fi.com/s/60b561a0e3) or [stackable](https://ko-fi.com/s/64219426b8) header from [Tashtari](https://ko-fi.com/tashtari)
* USB2LT by [twelvetone12](https://68kmla.org/bb/index.php?members/twelvetone12.23810/)
* USB serial adapter using v2.x firmware
* Pending release
* [Forum thread](https://68kmla.org/bb/index.php?threads/usb2lt-tashtalk-usb-to-localtalk.45282/)
### Software
* tashtalkd by [Tashtari](https://github.com/lampmerchant)
* Simple LocalTalk (via TashTalk) to LToUDP bridge
* [Files](https://github.com/lampmerchant/tashtalk/tree/main/tashtalkd)
* MultiTalk by [sfiera](https://github.com/sfiera/)
* Bridge between EtherTalk and LocalTalk (via LToUDP and TashTalk)
* [Project page](https://github.com/sfiera/multitalk/)
* TashRouter by [Tashtari](https://github.com/lampmerchant)
* Full-fledged AppleTalk router supporting EtherTalk and LocalTalk (via LToUDP and TashTalk)
* [Project page](https://github.com/lampmerchant/tashrouter/)
### Yours?
File a PR or an issue to add to these lists!
## Version Comparison
**AirTalk users: do not upgrade your TashTalk PIC to v2.x, it will stop working because of the change in pinout.**
@ -55,13 +96,3 @@ This change was made in order to enable applications where it is desirable to di
the RS-422 driver - pulling RA3/!MCLR low will hold the PIC in reset, tristating its outputs. Using RS-422 interface ICs such as
the SN65HVD series, RA5 can be connected to both the receiver output and the driver input while RA4/Driver Enable is connected to
both the (active low) receiver enable and the (active high) driver enable.
## Projects Using It
* [TashTalkHat](https://68kmla.org/bb/index.php?threads/tashtalk-single-chip-localtalk-interface.38955/page-4#post-422138)
by bdurbrow - hat for Raspberry Pi
* [AirTalk](https://68kmla.org/bb/index.php?threads/introducing-and-interest-check-airtalk-wireless-plug-and-play-localtalk-dongles.39661/)
by cheesestraws - wireless plug-and-play LocalTalk dongle
* [TashTalk 2 Hat](https://github.com/lampmerchant/tashtalk/tree/main/tashtalk2-rpihat) - hat for Raspberry Pi using v2.x firmware
* Yours? =)

View File

@ -160,6 +160,13 @@ CHKCRC equ 6 ;Set if receiver should check CRC and signal bad CRCs
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 ;;;
@ -203,20 +210,24 @@ Init
movlw B'11110000'
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
movlw B'00100000'
movwf IOCAN
movwf IOCAP
banksel RCSTA ;UART async mode, 1 MHz
movlw B'01001000'
banksel RCSTA ;UART async mode, 1 MHz, but receiver not
movlw B'01001000' ; enabled just yet
movwf BAUDCON
clrf SPBRGH
movlw 7
movwf SPBRGL
movlw B'00100110'
movwf TXSTA
movlw B'10010000'
movlw B'10000000'
movwf RCSTA
banksel OPTION_REG ;Timer0 uses instruction clock
@ -242,12 +253,26 @@ Init
movlw B'00101010'
movwf TRISA
clrf UR_LEN ;Set up UART receiver queue (0x2000-0x207F),
movlw 0x20 ; for which FSRs are push (FSR0) and pop (FSR1)
movwf FSR0H ; pointers
movlw 0x20 ;Set FSRs to point permanently to linear memory
movwf FSR0H
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
movlw B'00100000' ; subsystem on
@ -255,11 +280,8 @@ Init
movlw B'11001000'
movwf INTCON
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 RCSTA ;Enable receiver now that interrupt is on
bsf RCSTA,CREN
bra PrepForNextFrame
@ -465,8 +487,8 @@ PrepForNextFrame
lslf DEF_HIST,F ; logs to make space for what happens this time
movf GBACKOFF,W ;Copy the global backoff mask into the local
movwf LBACKOFF ; backoff mask
movlw 33 ;Set attempts counter to 32 (plus one since we
movwf ATTEMPTS ; immediately decrement it)
movlw 32 ;Set attempts counter to 32
movwf ATTEMPTS ; "
bra AwaitCommand ;We're set for the next frame, wait for it
;entered with BSR = 2
@ -1831,10 +1853,12 @@ InFErr
OutLostClock
EmpLostClock
FinishUp
movlb 0 ;Deactivate Timer2 and clear its interrupt flag
bcf T2CON,TMR2ON ; so anything that was waiting for it knows
bcf PIR1,TMR2IF ; that a receive event happened while waiting
clrf LR_CCRC1 ;Clear receiver CRC registers to ones since we
movlb 0 ;If the frame regs changed, deactivate Timer2
btfss FLAGS,LR_FRM ; and clear its interrupt flag so anything that
bra Finish2 ; was waiting for it knows that a frame was
bcf T2CON,TMR2ON ; received while waiting
bcf PIR1,TMR2IF ; "
Finish2 clrf LR_CCRC1 ;Clear receiver CRC registers to ones since we
decf LR_CCRC1,F ; don't have time to do this when we jump into
clrf LR_CCRC2 ; the receiver
decf LR_CCRC2,F ; "