chiark / gitweb /
harness A B C D E, H L Z
authorian <ian>
Mon, 2 May 2005 17:11:02 +0000 (17:11 +0000)
committerian <ian>
Mon, 2 May 2005 17:11:02 +0000 (17:11 +0000)
iwjpictest/harness.asm

index 1d0bf6cb77e47d306b498a53e283c44e68f75a06..da865b1df7714ff5b9b7c769938f8acfbcf95f2d 100644 (file)
 ;   @         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)
@@ -115,14 +121,20 @@ command_loop
 
 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
 
@@ -148,11 +160,19 @@ check_last set minvalue
        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
@@ -215,6 +235,64 @@ command_address_confirm
        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