summaryrefslogtreecommitdiff
path: root/software/ttx_crx/ttx_crx.asm
diff options
context:
space:
mode:
Diffstat (limited to 'software/ttx_crx/ttx_crx.asm')
-rw-r--r--software/ttx_crx/ttx_crx.asm453
1 files changed, 12 insertions, 441 deletions
diff --git a/software/ttx_crx/ttx_crx.asm b/software/ttx_crx/ttx_crx.asm
index c80535d..066379f 100644
--- a/software/ttx_crx/ttx_crx.asm
+++ b/software/ttx_crx/ttx_crx.asm
@@ -63,8 +63,8 @@ CLK_1HZ EQU 0
IHU_SDI EQU 1
CRX_INT EQU 3
IHU_SCK EQU 4
-CRX_SDA EQU 6
-CRX_SCL EQU 7
+I2C_SDA EQU 6
+I2C_SCL EQU 7
;; variables
@@ -91,6 +91,9 @@ CSPACE EQU DASH
WSPACE EQU H'0074'
TUNE EQU H'0075'
+I2C_BYTE EQU H'0077'
+I2C_BIT_CNT EQU H'0078'
+
NVSTATE EQU H'007A'
BEACONCNTH EQU H'007B'
BEACONCNTL EQU H'007C'
@@ -121,179 +124,16 @@ interrupt_end
;; -------------------------------------
;; TABLES
-
- ;; Morse Codes: 0=dot, 1=dash
-getcw
- addwf PCL,f
- nop
- retlw b'00010000' ; !
- retlw b'01001000' ; "
- retlw b'00000000' ; #
- retlw b'00010010' ; $
- retlw b'00000000' ; %
- retlw b'01000000' ; &
- retlw b'01111000' ; '
- retlw b'10110000' ; (
- retlw b'10110100' ; )
- retlw b'00000000' ; *
- retlw b'01010000' ; +
- retlw b'11001100' ; ,
- retlw b'10000100' ; -
- retlw b'01010100' ; .
- retlw b'10010000' ; /
- retlw b'11111000' ; 0
- retlw b'01111000' ; 1
- retlw b'00111000' ; 2
- retlw b'00011000' ; 3
- retlw b'00001000' ; 4
- retlw b'00000000' ; 5
- retlw b'10000000' ; 6
- retlw b'11000000' ; 7
- retlw b'11100000' ; 8
- retlw b'11110000' ; 9
- retlw b'11100000' ; :
- retlw b'10101000' ; ;
- retlw b'00010100' ; <
- retlw b'10001000' ; =
- retlw b'10001010' ; >
- retlw b'00110000' ; ?
- retlw b'01000000' ; @
- retlw b'01000000' ; A
- retlw b'10000000' ; B
- retlw b'10100000' ; C
- retlw b'10000000' ; D
- retlw b'00000000' ; E
- retlw b'00100000' ; F
- retlw b'11000000' ; G
- retlw b'00000000' ; H
- retlw b'00000000' ; I
- retlw b'01110000' ; J
- retlw b'10100000' ; K
- retlw b'01000000' ; L
- retlw b'11000000' ; M
- retlw b'10000000' ; N
- retlw b'11100000' ; O
- retlw b'01100000' ; P
- retlw b'11010000' ; Q
- retlw b'01000000' ; R
- retlw b'00000000' ; S
- retlw b'10000000' ; T
- retlw b'00100000' ; U
- retlw b'00010000' ; V
- retlw b'01100000' ; W
- retlw b'10010000' ; X
- retlw b'10110000' ; Y
- retlw b'11000000' ; Z
+ include "tables.inc"
- ;; Morse Code Length
-getcwlen
- addwf PCL,f
- nop
- retlw .5 ; !
- retlw .6 ; "
- retlw .0 ; #
- retlw .7 ; $
- retlw .0 ; %
- retlw .5 ; &
- retlw .6 ; '
- retlw .5 ; (
- retlw .6 ; )
- retlw .0 ; *
- retlw .5 ; +
- retlw .6 ; ,
- retlw .6 ; -
- retlw .6 ; .
- retlw .5 ; /
- retlw .5 ; 0
- retlw .5 ; 1
- retlw .5 ; 2
- retlw .5 ; 3
- retlw .5 ; 4
- retlw .5 ; 5
- retlw .5 ; 6
- retlw .5 ; 7
- retlw .5 ; 8
- retlw .5 ; 9
- retlw .6 ; :
- retlw .6 ; ;
- retlw .6 ; <
- retlw .5 ; =
- retlw .7 ; >
- retlw .6 ; ?
- retlw .6 ; @
- retlw .2 ; A
- retlw .4 ; B
- retlw .4 ; C
- retlw .3 ; D
- retlw .1 ; E
- retlw .4 ; F
- retlw .3 ; G
- retlw .4 ; H
- retlw .2 ; I
- retlw .4 ; J
- retlw .3 ; K
- retlw .4 ; L
- retlw .2 ; M
- retlw .2 ; N
- retlw .3 ; O
- retlw .4 ; P
- retlw .4 ; Q
- retlw .3 ; R
- retlw .3 ; S
- retlw .1 ; T
- retlw .3 ; U
- retlw .4 ; V
- retlw .3 ; W
- retlw .4 ; X
- retlw .4 ; Y
- retlw .4 ; Z
+ ;; -------------------------------------
+ ;; SUBROUTINES
- ;; Base32 Code
-base32
- addwf PCL,f
- retlw 'A'
- retlw 'B'
- retlw 'C'
- retlw 'D'
- retlw 'E'
- retlw 'F'
- retlw 'G'
- retlw 'H'
- retlw 'I'
- retlw 'J'
- retlw 'K'
- retlw 'L'
- retlw 'M'
- retlw 'N'
- retlw 'O'
- retlw 'P'
- retlw 'Q'
- retlw 'R'
- retlw 'S'
- retlw 'T'
- retlw 'U'
- retlw 'V'
- retlw 'W'
- retlw 'X'
- retlw 'Y'
- retlw 'Z'
- retlw '2'
- retlw '3'
- retlw '4'
- retlw '5'
- retlw '6'
- retlw '7'
+ ;; -------------------------------------
+ include "ttx.inc"
- ;; fixed strings
-callsign
- addwf PCL,f
- nop
- retlw 'R'
- retlw 'U'
- retlw 'M'
- retlw '6'
- retlw 'E'
- retlw 'O'
+ ;; -------------------------------------
+ include "i2c.inc"
;; -------------------------------------
;; INIT
@@ -348,275 +188,6 @@ init
movlw TUNE_DEF
movwf TUNE
- goto main
-
- ;; -------------------------------------
- ;; SUBROUTINES
-
- ;; -------------------------------------
-dottime
- movwf TMR0
- bcf INTCON,T0IF
-dot_inner
- btfss INTCON,T0IF
- goto dot_inner
- clrwdt
- return
-
- ;; -------------------------------------
-send_char
- movwf CHAR
- movlw 'Z' + 1
- subwf CHAR,w
- btfsc STATUS,C
- return
- movlw ' '
- subwf CHAR,f
- btfss STATUS,C
- return
- btfsc STATUS,Z
- return
-
- movf CHAR,w
- call getcw
- movwf ELEMENT
- movf CHAR,w
- call getcwlen
- movwf ELECNT
- movf ELECNT,f
- btfsc STATUS,Z
- return
- movf CHAR,w
- xorwf PARITY,f
-
-char_next_element
- bsf PORTA,CW_OUT
- btfss ELEMENT,7
- movf DOT,w
- btfsc ELEMENT,7
- movf DASH,w
- call dottime
- bcf PORTA,CW_OUT
-
- rlf ELEMENT,f
-
- decfsz ELECNT,f
- goto char_espace
- return
-
-char_espace
- movf ESPACE,w
- call dottime
- goto char_next_element
-
- ;; -------------------------------------
-send_callsign
- movlw .6
- movwf CHARCNT
-
-callsign_next_char
- call callsign
- call send_char
- decfsz CHARCNT,f
- goto callsign_cspace
- return
-
-callsign_cspace
- movf CSPACE,w
- call dottime
- movf CHARCNT,w
- goto callsign_next_char
-
- ;; -------------------------------------
-send_base32
- movwf PENTLECNT
-
-case0
- rrf INDF0,w
- movwf PENTLE0
- rrf PENTLE0,f
- rrf PENTLE0,w
- andlw b'00011111'
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case1
- return
-
-case1
- movf CSPACE,w
- call dottime
- rlf INDF0,w
- movwf PENTLE0
- rlf PENTLE0,w
- andlw b'00011100'
- movwf PENTLE0
- incf FSR0L,f
- swapf INDF0,w
- movwf PENTLE1
- rrf PENTLE1,f
- rrf PENTLE1,w
- andlw b'00000011'
- iorwf PENTLE0,w
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case2
- return
-
-case2
- movf CSPACE,w
- call dottime
- rrf INDF0,w
- andlw b'00011111'
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case3
- return
-
-case3
- movf CSPACE,w
- call dottime
- swapf INDF0,w
- andlw b'00010000'
- movwf PENTLE0
- incf FSR0L,f
- swapf INDF0,w
- andlw b'00001111'
- iorwf PENTLE0,w
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case4
- return
-
-case4
- movf CSPACE,w
- call dottime
- rlf INDF0,w
- andlw b'00011110'
- movwf PENTLE0
- incf FSR0L,f
- btfsc INDF0,7
- bsf PENTLE0,0
- movf PENTLE0,w
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case5
- return
-
-case5
- movf CSPACE,w
- call dottime
- rrf INDF0,w
- movwf PENTLE0
- rrf PENTLE0,w
- andlw b'00011111'
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case6
- return
-
-case6
- movf CSPACE,w
- call dottime
- swapf INDF0,w
- movwf PENTLE0
- rrf PENTLE0,w
- andlw b'00011000'
- movwf PENTLE0
- incf FSR0L,f
- swapf INDF0,w
- movwf PENTLE1
- rrf PENTLE1,w
- andlw b'00000111'
- iorwf PENTLE0,w
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto case7
- return
-
-case7
- movf CSPACE,w
- call dottime
- movf INDF0,w
- andlw b'00011111'
- call base32
- call send_char
- decfsz PENTLECNT,f
- goto caseend
- return
-
-caseend
- movf CSPACE,w
- call dottime
- incf FSR0L,f
- goto case0
-
- ;; -------------------------------------
-send_cnt
- rlf BEACONCNTL,w
- movwf TMP2
- rlf BEACONCNTH,w
- movwf TMP1
- movlw TMP1
- movwf FSR0L
- clrf FSR0H
- movlw .3
- call send_base32
- return
-
- ;; -------------------------------------
-send_parity
- movf PARITY,w
- btfsc PARITY,5
- xorlw b'00000001'
- andlw b'00011111'
- call base32
- call send_char
-
- movf WSPACE,w
- call dottime
- return
-
- ;; -------------------------------------
-send_beacon
- bsf PORTA,CW_ENABLE
- movf TUNE,w
- call dottime
- clrf PARITY
-
- movlw START_CHAR
- call send_char
-
- movf WSPACE,w
- call dottime
-
- call send_callsign
-
- movf WSPACE,w
- call dottime
-
- call send_cnt
-
- movf WSPACE,w
- call dottime
-
- call send_parity
-
- incfsz BEACONCNTL,f
- goto beacon_end
- incf BEACONCNTH,f
- ;; TODO write new cnt value to EEPROM
-
-beacon_end
- bcf PORTA,CW_ENABLE
- return
-
;; -------------------------------------
;; MAINLOOP
main