; @ confirm addresses and bitmask print R, ",", S, "&", B
; ~ confirm flags and high nybble print "`", F, "'", T
;
+; predefined addresses and operations
+; A B C D E set setting address to PORTx S := 0xf80-0xf84
+; H L Z set TRIS and LAT rel.to PORT modify *(S+0x09), *(S+0x92)
+; according to B according to B, and print op
+; NB address addition no carry
+;
; byte operations
; SPC read and display print *R
; RET, NL set whole byte printset "S", (*S := E)
check_last set 0
checkequal macro value, label
+ local check_ifnot
add_lw check_last-value
- bra_z label
+ bra_nz check_ifnot
+ bra label
+check_ifnot
check_last set value
endm
checkatleast macro minvalue, label ; if it takes, W gets char-minvalue
add_lw check_last-minvalue
- bra_nn label
+ local check_ifnot
+ bra_n check_ifnot
+ bra label
+check_ifnot
check_last set minvalue
endm
checkequal '-', command_bitwise_and_not
checkequal '^', command_bitwise_xor
+ ; TRIS/LAT operations
+ checkequal 'H', command_trislat_h
+ checkequal 'L', command_trislat_l
+ checkequal 'Z', command_trislat_z
+
+ checkatleast 'E'+1, command_ifnot_portaddr
+ checkatleast 'A', command_portaddr
+command_ifnot_portaddr
+
checkatleast 'f'+1, command_wrong
checkatleast 'a', command_letterhexdigit
checkatleast '9'+1, command_wrong
checkatleast '0', command_digit
-
command_wrong
mov_lw '?'
rcall serial_write_char
rcall confirm_bitmask
bra command_endswitch
+command_portaddr
+ add_lw PORTA
+ mov_wf s
+ set_f sh
+ mov_fw original_op
+ rcall serial_write_char
+ bra command_address_confirm
+
+;--------------------
+; trislat commands
+
+command_trislat_h
+ rcall trislat_setup_indf2_lat
+ ior_wff INDF2
+command_trislat_nz
+ rcall trislat_setup_indf2_tris
+ com_w
+ and_wff INDF2
+command_trislat_echo
+ mov_fw original_op
+ rcall serial_write_char
+ bra command_endswitch
+
+command_trislat_z
+ rcall trislat_setup_indf2_tris
+ ior_wff INDF2
+ bra command_trislat_echo
+
+command_trislat_l
+ rcall trislat_setup_indf2_lat
+ com_w
+ and_wff INDF2
+ bra command_trislat_nz
+
+;----------
+trislat_setup_indf2_lat
+; W undefined B
+; INDF2* undefined relevant LAT
+ mov_lw 0x09
+ bra trislat_setup_indf2_any
+
+;----------
+trislat_setup_indf2_tris
+; W undefined B
+; INDF2* undefined relevant TRIS
+ mov_lw 0x12
+ bra trislat_setup_indf2_any
+
+;----------
+trislat_setup_indf2_any
+; W REG-PORT B
+; INDF2* undefined relevant REG
+ add_wfw s
+ mov_wf FSR2L
+ set_f FSR2H
+ mov_fw b
+ return
+
;----------
confirm_address
; prints R, ",", S