+ .ELSE ; if I2C_TERMINAL
+
+ FORTHWORD "TERM2SD\34"
+ CALL #WAITCHAREND ; wait I2C_Master (re)START RX
+ BIC #WAKE_UP,&TERM_IFG ; clear UCSTTIFG before next test
+ mDOCOL
+ .word DELDQ ; DEL file if already exist
+ .word lit,2 ; -- open_type
+ .word HERE,COUNT ; -- open_type addr cnt
+ .word PARENOPEN ; reopen same filepath but as write
+ .word $+2 ;
+; ----------------------------------;
+ CALL #RXON ;
+ BIC #WAKE_UP,&TERM_IFG ; clear UCSTTIFG before next test
+; ----------------------------------;
+T2S_ClearBuffer
+; ----------------------------------;
+ MOV #0,W ;1 reset W = BufferPtr
+; ----------------------------------;
+T2S_FillBufferLoop ; move by slices of 512 bytes from TERMINAL input to file on SD_CARD via SD_BUF
+; ----------------------------------;
+ BIT #RX_TERM,&TERM_IFG ;3 new char in TERMRXBUF ?
+ JZ T2S_FillBufferLoop ;2 no
+ MOV.B &TERM_RXBUF,X ;3
+ CMP.B #4,X ;1 EOT sent by TERATERM ?
+ JZ T2S_End_Of_File ;2 yes
+ MOV.B X,SD_BUF(W) ;3
+ ADD #1,W ;1
+ CMP.B #0Ah,X ;2 Char LF ?
+ JNZ T2S_Q_BufferFull ;2 no
+; ----------------------------------;
+T2S_GetNewLine ; after LF sent, I2C_Master automaticaly (re)STARTs in RX mode
+; ----------------------------------;
+ CALL #WAITCHAREND ; wait I2C_Master (re)START RX
+ BIC #WAKE_UP,&TERM_IFG ; clear UCSTTIFG before next test
+ ASMtoFORTH
+ .word LIT,0Ah,EMIT ; use Y reg
+ .word $+2 ;
+ CALL #RXON ; tells I2C_Master to(re)START in TX mode and waits I2C_Master TX (re)STARTed, use Y register
+ BIC #WAKE_UP,&TERM_IFG ; clear UCSTTIFG before next test
+; ----------------------------------;
+T2S_Q_BufferFull ;
+; ----------------------------------;
+ CMP #BytsPerSec,W ;2 buffer full ?
+ JNC T2S_FillBufferLoop ;2 no 21 cycles char loop
+; ----------------------------------;
+T2S_WriteFile ;2 yes
+; ----------------------------------;
+ CALL #Write_File ;4 TSWXY write all the buffer
+ JMP T2S_ClearBuffer ;2
+; ----------------------------------;
+T2S_End_Of_File ;
+; ----------------------------------;
+ MOV @RSP+,IP ; before CloseHandleT
+ MOV W,&BufferPtr ;3
+ CALL #CloseHandleT ;4
+T2S_End_Of_EOT_Line ;
+ BIT #RX_TERM,&TERM_IFG ;3 new char in TERMRXBUF ?
+ JZ T2S_End_Of_EOT_Line ;2 no
+ MOV.B &TERM_RXBUF,X ;3
+ CMP.B #0Ah,X ;2 Char LF ?
+ JNZ T2S_End_Of_EOT_Line ;
+ CALL #WAITCHAREND ; wait I2C_Master (re)START RX
+ BIC #WAKE_UP,&TERM_IFG ; clear UCSTTIFG before next test...
+ MOV @IP+,PC ; ... i.e. ready for return to SLEEP via RXON.
+; ----------------------------------;
+
+ .ENDIF