Changeset 821 for src/ASM/Interpret.ma


Ignore:
Timestamp:
May 23, 2011, 3:23:17 PM (9 years ago)
Author:
mulligan
Message:

changes to introduce pseudostatus

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ASM/Interpret.ma

    r820 r821  
    158158include alias "ASM/BitVectorTrie.ma".
    159159
    160 definition execute_1_preinstruction: ∀A: Type[0]. (A → Byte) → preinstruction A → Status → Status
    161   λA: Type[0].
     160definition execute_1_preinstruction: ∀A, M: Type[0]. (A → Byte) → preinstruction A → PreStatus M → PreStatus M
     161  λA, M: Type[0].
    162162  λaddr_of: A → Byte.
    163163  λinstr: preinstruction A.
    164   λs: Status.
     164  λs: PreStatus M.
    165165  match instr with
    166166        [ ADD addr1 addr2 ⇒
    167             let 〈result, flags〉 ≝ add_8_with_carry (get_arg_8 s false addr1)
    168                                                    (get_arg_8 s false addr2) false in
     167            let 〈result, flags〉 ≝ add_8_with_carry (get_arg_8 ? s false addr1)
     168                                                   (get_arg_8 ? s false addr2) false in
    169169            let cy_flag ≝ get_index' ? O  ? flags in
    170170            let ac_flag ≝ get_index' ? 1 ? flags in
    171171            let ov_flag ≝ get_index' ? 2 ? flags in
    172             let s ≝ set_arg_8 s ACC_A result in
    173               set_flags s cy_flag (Some Bit ac_flag) ov_flag
     172            let s ≝ set_arg_8 ? s ACC_A result in
     173              set_flags ? s cy_flag (Some Bit ac_flag) ov_flag
    174174        | ADDC addr1 addr2 ⇒
    175             let old_cy_flag ≝ get_cy_flag s in
    176             let 〈result, flags〉 ≝ add_8_with_carry (get_arg_8 s false addr1)
    177                                                    (get_arg_8 s false addr2) old_cy_flag in
     175            let old_cy_flag ≝ get_cy_flag ? s in
     176            let 〈result, flags〉 ≝ add_8_with_carry (get_arg_8 ? s false addr1)
     177                                                   (get_arg_8 ? s false addr2) old_cy_flag in
    178178            let cy_flag ≝ get_index' ? O ? flags in
    179179            let ac_flag ≝ get_index' ? 1 ? flags in
    180180            let ov_flag ≝ get_index' ? 2 ? flags in
    181             let s ≝ set_arg_8 s ACC_A result in
    182               set_flags s cy_flag (Some Bit ac_flag) ov_flag
     181            let s ≝ set_arg_8 ? s ACC_A result in
     182              set_flags ? s cy_flag (Some Bit ac_flag) ov_flag
    183183        | SUBB addr1 addr2 ⇒
    184             let old_cy_flag ≝ get_cy_flag s in
    185             let 〈result, flags〉 ≝ sub_8_with_carry (get_arg_8 s false addr1)
    186                                                    (get_arg_8 s false addr2) old_cy_flag in
     184            let old_cy_flag ≝ get_cy_flag ? s in
     185            let 〈result, flags〉 ≝ sub_8_with_carry (get_arg_8 ? s false addr1)
     186                                                   (get_arg_8 ? s false addr2) old_cy_flag in
    187187            let cy_flag ≝ get_index' ? O ? flags in
    188188            let ac_flag ≝ get_index' ? 1 ? flags in
    189189            let ov_flag ≝ get_index' ? 2 ? flags in
    190             let s ≝ set_arg_8 s ACC_A result in
    191               set_flags s cy_flag (Some Bit ac_flag) ov_flag
     190            let s ≝ set_arg_8 ? s ACC_A result in
     191              set_flags ? s cy_flag (Some Bit ac_flag) ov_flag
    192192        | ANL addr ⇒
    193193          match addr with
     
    196196                [ inl l' ⇒
    197197                  let 〈addr1, addr2〉 ≝ l' in
    198                   let and_val ≝ conjunction_bv ? (get_arg_8 s true addr1) (get_arg_8 s true addr2) in
    199                     set_arg_8 s addr1 and_val
     198                  let and_val ≝ conjunction_bv ? (get_arg_8 ? s true addr1) (get_arg_8 ? s true addr2) in
     199                    set_arg_8 ? s addr1 and_val
    200200                | inr r ⇒
    201201                  let 〈addr1, addr2〉 ≝ r in
    202                   let and_val ≝ conjunction_bv ? (get_arg_8 s true addr1) (get_arg_8 s true addr2) in
    203                     set_arg_8 s addr1 and_val
     202                  let and_val ≝ conjunction_bv ? (get_arg_8 ? s true addr1) (get_arg_8 ? s true addr2) in
     203                    set_arg_8 ? s addr1 and_val
    204204                ]
    205205            | inr r ⇒
    206206              let 〈addr1, addr2〉 ≝ r in
    207               let and_val ≝ (get_cy_flag s) ∧ (get_arg_1 s addr2 true) in
    208                 set_flags s and_val (None ?) (get_ov_flag s)
     207              let and_val ≝ (get_cy_flag ? s) ∧ (get_arg_1 ? s addr2 true) in
     208                set_flags ? s and_val (None ?) (get_ov_flag ? s)
    209209            ]
    210210        | ORL addr ⇒
     
    214214                [ inl l' ⇒
    215215                  let 〈addr1, addr2〉 ≝ l' in
    216                   let or_val ≝ inclusive_disjunction_bv ? (get_arg_8 s true addr1) (get_arg_8 s true addr2) in
    217                     set_arg_8 s addr1 or_val
     216                  let or_val ≝ inclusive_disjunction_bv ? (get_arg_8 ? s true addr1) (get_arg_8 ? s true addr2) in
     217                    set_arg_8 ? s addr1 or_val
    218218                | inr r ⇒
    219219                  let 〈addr1, addr2〉 ≝ r in
    220                   let or_val ≝ inclusive_disjunction_bv ? (get_arg_8 s true addr1) (get_arg_8 s true addr2) in
    221                     set_arg_8 s addr1 or_val
     220                  let or_val ≝ inclusive_disjunction_bv ? (get_arg_8 ? s true addr1) (get_arg_8 ? s true addr2) in
     221                    set_arg_8 ? s addr1 or_val
    222222                ]
    223223            | inr r ⇒
    224224              let 〈addr1, addr2〉 ≝ r in
    225               let or_val ≝ (get_cy_flag s) ∨ (get_arg_1 s addr2 true) in
    226                 set_flags s or_val (None ?) (get_ov_flag s)
     225              let or_val ≝ (get_cy_flag ? s) ∨ (get_arg_1 ? s addr2 true) in
     226                set_flags ? s or_val (None ?) (get_ov_flag ? s)
    227227            ]
    228228        | XRL addr ⇒
     
    230230            [ inl l' ⇒
    231231              let 〈addr1, addr2〉 ≝ l' in
    232               let xor_val ≝ exclusive_disjunction_bv ? (get_arg_8 s true addr1) (get_arg_8 s true addr2) in
    233                 set_arg_8 s addr1 xor_val
     232              let xor_val ≝ exclusive_disjunction_bv ? (get_arg_8 ? s true addr1) (get_arg_8 ? s true addr2) in
     233                set_arg_8 ? s addr1 xor_val
    234234            | inr r ⇒
    235235              let 〈addr1, addr2〉 ≝ r in
    236               let xor_val ≝ exclusive_disjunction_bv ? (get_arg_8 s true addr1) (get_arg_8 s true addr2) in
    237                 set_arg_8 s addr1 xor_val
     236              let xor_val ≝ exclusive_disjunction_bv ? (get_arg_8 ? s true addr1) (get_arg_8 ? s true addr2) in
     237                set_arg_8 ? s addr1 xor_val
    238238            ]
    239239        | INC addr ⇒
     
    244244                                                           dptr ]] x) → ? with
    245245              [ ACC_A ⇒ λacc_a: True.
    246                 let 〈 carry, result 〉 ≝ half_add ? (get_arg_8 s true ACC_A) (bitvector_of_nat 8 1) in
    247                   set_arg_8 s ACC_A result
     246                let 〈 carry, result 〉 ≝ half_add ? (get_arg_8 ? s true ACC_A) (bitvector_of_nat 8 1) in
     247                  set_arg_8 ? s ACC_A result
    248248              | REGISTER r ⇒ λregister: True.
    249                 let 〈 carry, result 〉 ≝ half_add ? (get_arg_8 s true (REGISTER r)) (bitvector_of_nat 8 1) in
    250                   set_arg_8 s (REGISTER r) result
     249                let 〈 carry, result 〉 ≝ half_add ? (get_arg_8 ? s true (REGISTER r)) (bitvector_of_nat 8 1) in
     250                  set_arg_8 ? s (REGISTER r) result
    251251              | DIRECT d ⇒ λdirect: True.
    252                 let 〈 carry, result 〉 ≝ half_add ? (get_arg_8 s true (DIRECT d)) (bitvector_of_nat 8 1) in
    253                   set_arg_8 s (DIRECT d) result
     252                let 〈 carry, result 〉 ≝ half_add ? (get_arg_8 ? s true (DIRECT d)) (bitvector_of_nat 8 1) in
     253                  set_arg_8 ? s (DIRECT d) result
    254254              | INDIRECT i ⇒ λindirect: True.
    255                 let 〈 carry, result 〉 ≝ half_add ? (get_arg_8 s true (INDIRECT i)) (bitvector_of_nat 8 1) in
    256                   set_arg_8 s (INDIRECT i) result
     255                let 〈 carry, result 〉 ≝ half_add ? (get_arg_8 ? s true (INDIRECT i)) (bitvector_of_nat 8 1) in
     256                  set_arg_8 ? s (INDIRECT i) result
    257257              | DPTR ⇒ λdptr: True.
    258                 let 〈 carry, bl 〉 ≝ half_add ? (get_8051_sfr s SFR_DPL) (bitvector_of_nat 8 1) in
    259                 let 〈 carry, bu 〉 ≝ full_add ? (get_8051_sfr s SFR_DPH) (zero 8) carry in
    260                 let s ≝ set_8051_sfr s SFR_DPL bl in
    261                   set_8051_sfr s SFR_DPH bu
     258                let 〈 carry, bl 〉 ≝ half_add ? (get_8051_sfr ? s SFR_DPL) (bitvector_of_nat 8 1) in
     259                let 〈 carry, bu 〉 ≝ full_add ? (get_8051_sfr ? s SFR_DPH) (zero 8) carry in
     260                let s ≝ set_8051_sfr ? s SFR_DPL bl in
     261                  set_8051_sfr ? s SFR_DPH bu
    262262              | _ ⇒ λother: False. ⊥
    263263              ] (subaddressing_modein … addr)
    264264        | DEC addr ⇒
    265            let 〈 result, flags 〉 ≝ sub_8_with_carry (get_arg_8 s true addr) (bitvector_of_nat 8 1) false in
    266              set_arg_8 s addr result
     265           let 〈 result, flags 〉 ≝ sub_8_with_carry (get_arg_8 ? s true addr) (bitvector_of_nat 8 1) false in
     266             set_arg_8 ? s addr result
    267267        | MUL addr1 addr2 ⇒
    268            let acc_a_nat ≝ nat_of_bitvector 8 (get_8051_sfr s SFR_ACC_A) in
    269            let acc_b_nat ≝ nat_of_bitvector 8 (get_8051_sfr s SFR_ACC_B) in
     268           let acc_a_nat ≝ nat_of_bitvector 8 (get_8051_sfr ? s SFR_ACC_A) in
     269           let acc_b_nat ≝ nat_of_bitvector 8 (get_8051_sfr ? s SFR_ACC_B) in
    270270           let product ≝ acc_a_nat * acc_b_nat in
    271271           let ov_flag ≝ product ≥ 256 in
    272272           let low ≝ bitvector_of_nat 8 (product mod 256) in
    273273           let high ≝ bitvector_of_nat 8 (product ÷ 256) in
    274            let s ≝ set_8051_sfr s SFR_ACC_A low in
    275              set_8051_sfr s SFR_ACC_B high
     274           let s ≝ set_8051_sfr ? s SFR_ACC_A low in
     275             set_8051_sfr ? s SFR_ACC_B high
    276276        | DIV addr1 addr2 ⇒
    277            let acc_a_nat ≝ nat_of_bitvector 8 (get_8051_sfr s SFR_ACC_A) in
    278            let acc_b_nat ≝ nat_of_bitvector 8 (get_8051_sfr s SFR_ACC_B) in
     277           let acc_a_nat ≝ nat_of_bitvector 8 (get_8051_sfr ? s SFR_ACC_A) in
     278           let acc_b_nat ≝ nat_of_bitvector 8 (get_8051_sfr ? s SFR_ACC_B) in
    279279             match acc_b_nat with
    280                [ O ⇒ set_flags s false (None Bit) true
     280               [ O ⇒ set_flags ? s false (None Bit) true
    281281               | S o ⇒
    282282                 let q ≝ bitvector_of_nat 8 (acc_a_nat ÷ (S o)) in
    283283                 let r ≝ bitvector_of_nat 8 (acc_a_nat mod 256) in
    284                  let s ≝ set_8051_sfr s SFR_ACC_A q in
    285                  let s ≝ set_8051_sfr s SFR_ACC_B r in
    286                    set_flags s false (None Bit) false
     284                 let s ≝ set_8051_sfr ? s SFR_ACC_A q in
     285                 let s ≝ set_8051_sfr ? s SFR_ACC_B r in
     286                   set_flags ? s false (None Bit) false
    287287               ]
    288288        | DA addr ⇒
    289             let 〈 acc_nu, acc_nl 〉 ≝ split ? 4 4 (get_8051_sfr s SFR_ACC_A) in
    290               if (gtb (nat_of_bitvector ? acc_nl) 9) ∨ (get_ac_flag s) then
    291                 let 〈result, flags〉 ≝ add_8_with_carry (get_8051_sfr s SFR_ACC_A) (bitvector_of_nat 8 6) false in
     289            let 〈 acc_nu, acc_nl 〉 ≝ split ? 4 4 (get_8051_sfr ? s SFR_ACC_A) in
     290              if (gtb (nat_of_bitvector ? acc_nl) 9) ∨ (get_ac_flag ? s) then
     291                let 〈result, flags〉 ≝ add_8_with_carry (get_8051_sfr ? s SFR_ACC_A) (bitvector_of_nat 8 6) false in
    292292                let cy_flag ≝ get_index' ? O ? flags in
    293293                let 〈acc_nu', acc_nl'〉 ≝ split ? 4 4 result in
     
    295295                    let 〈 carry, nu 〉 ≝ half_add ? acc_nu' (bitvector_of_nat 4 6) in
    296296                    let new_acc ≝ nu @@ acc_nl' in
    297                     let s ≝ set_8051_sfr s SFR_ACC_A new_acc in
    298                       set_flags s cy_flag (Some ? (get_ac_flag s)) (get_ov_flag s)
     297                    let s ≝ set_8051_sfr ? s SFR_ACC_A new_acc in
     298                      set_flags ? s cy_flag (Some ? (get_ac_flag ? s)) (get_ov_flag ? s)
    299299                  else
    300300                    s
     
    303303        | CLR addr ⇒
    304304          match addr return λx. bool_to_Prop (is_in … [[ acc_a; carry; bit_addr ]] x) → ? with
    305             [ ACC_A ⇒ λacc_a: True. set_arg_8 s ACC_A (zero 8)
    306             | CARRY ⇒ λcarry: True. set_arg_1 s CARRY false
    307             | BIT_ADDR b ⇒ λbit_addr: True. set_arg_1 s (BIT_ADDR b) false
     305            [ ACC_A ⇒ λacc_a: True. set_arg_8 ? s ACC_A (zero 8)
     306            | CARRY ⇒ λcarry: True. set_arg_1 ? s CARRY false
     307            | BIT_ADDR b ⇒ λbit_addr: True. set_arg_1 ? s (BIT_ADDR b) false
    308308            | _ ⇒ λother: False. ⊥
    309309            ] (subaddressing_modein … addr)
     
    311311          match addr return λx. bool_to_Prop (is_in … [[ acc_a; carry; bit_addr ]] x) → ? with
    312312            [ ACC_A ⇒ λacc_a: True.
    313                 let old_acc ≝ get_8051_sfr s SFR_ACC_A in
     313                let old_acc ≝ get_8051_sfr ? s SFR_ACC_A in
    314314                let new_acc ≝ negation_bv ? old_acc in
    315                   set_8051_sfr s SFR_ACC_A new_acc
     315                  set_8051_sfr ? s SFR_ACC_A new_acc
    316316            | CARRY ⇒ λcarry: True.
    317                 let old_cy_flag ≝ get_arg_1 s CARRY true in
     317                let old_cy_flag ≝ get_arg_1 ? s CARRY true in
    318318                let new_cy_flag ≝ ¬old_cy_flag in
    319                   set_arg_1 s CARRY new_cy_flag
     319                  set_arg_1 ? s CARRY new_cy_flag
    320320            | BIT_ADDR b ⇒ λbit_addr: True.
    321                 let old_bit ≝ get_arg_1 s (BIT_ADDR b) true in
     321                let old_bit ≝ get_arg_1 ? s (BIT_ADDR b) true in
    322322                let new_bit ≝ ¬old_bit in
    323                   set_arg_1 s (BIT_ADDR b) new_bit
     323                  set_arg_1 ? s (BIT_ADDR b) new_bit
    324324            | _ ⇒ λother: False. ?
    325325            ] (subaddressing_modein … addr)
    326         | SETB b ⇒ set_arg_1 s b false
     326        | SETB b ⇒ set_arg_1 ? s b false
    327327        | RL _ ⇒ (* DPM: always ACC_A *)
    328             let old_acc ≝ get_8051_sfr s SFR_ACC_A in
     328            let old_acc ≝ get_8051_sfr ? s SFR_ACC_A in
    329329            let new_acc ≝ rotate_left … 1 old_acc in
    330               set_8051_sfr s SFR_ACC_A new_acc
     330              set_8051_sfr ? s SFR_ACC_A new_acc
    331331        | RR _ ⇒ (* DPM: always ACC_A *)
    332             let old_acc ≝ get_8051_sfr s SFR_ACC_A in
     332            let old_acc ≝ get_8051_sfr ? s SFR_ACC_A in
    333333            let new_acc ≝ rotate_right … 1 old_acc in
    334               set_8051_sfr s SFR_ACC_A new_acc
     334              set_8051_sfr ? s SFR_ACC_A new_acc
    335335        | RLC _ ⇒ (* DPM: always ACC_A *)
    336             let old_cy_flag ≝ get_cy_flag s in
    337             let old_acc ≝ get_8051_sfr s SFR_ACC_A in
     336            let old_cy_flag ≝ get_cy_flag ? s in
     337            let old_acc ≝ get_8051_sfr ? s SFR_ACC_A in
    338338            let new_cy_flag ≝ get_index' ? O ? old_acc in
    339339            let new_acc ≝ shift_left … 1 old_acc old_cy_flag in
    340             let s ≝ set_arg_1 s CARRY new_cy_flag in
    341               set_8051_sfr s SFR_ACC_A new_acc
     340            let s ≝ set_arg_1 ? s CARRY new_cy_flag in
     341              set_8051_sfr ? s SFR_ACC_A new_acc
    342342        | RRC _ ⇒ (* DPM: always ACC_A *)
    343             let old_cy_flag ≝ get_cy_flag s in
    344             let old_acc ≝ get_8051_sfr s SFR_ACC_A in
     343            let old_cy_flag ≝ get_cy_flag ? s in
     344            let old_acc ≝ get_8051_sfr ? s SFR_ACC_A in
    345345            let new_cy_flag ≝ get_index' ? 7 ? old_acc in
    346346            let new_acc ≝ shift_right … 1 old_acc old_cy_flag in
    347             let s ≝ set_arg_1 s CARRY new_cy_flag in
    348               set_8051_sfr s SFR_ACC_A new_acc
     347            let s ≝ set_arg_1 ? s CARRY new_cy_flag in
     348              set_8051_sfr ? s SFR_ACC_A new_acc
    349349        | SWAP _ ⇒ (* DPM: always ACC_A *)
    350             let old_acc ≝ get_8051_sfr s SFR_ACC_A in
     350            let old_acc ≝ get_8051_sfr ? s SFR_ACC_A in
    351351            let 〈nu,nl〉 ≝ split ? 4 4 old_acc in
    352352            let new_acc ≝ nl @@ nu in
    353               set_8051_sfr s SFR_ACC_A new_acc
     353              set_8051_sfr ? s SFR_ACC_A new_acc
    354354        | PUSH addr ⇒
    355355            match addr return λx. bool_to_Prop (is_in … [[ direct ]] x) → ? with
    356356              [ DIRECT d ⇒ λdirect: True.
    357                 let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) in
    358                 let s ≝ set_8051_sfr s SFR_SP new_sp in
    359                   write_at_stack_pointer s d
     357                let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) in
     358                let s ≝ set_8051_sfr ? s SFR_SP new_sp in
     359                  write_at_stack_pointer ? s d
    360360              | _ ⇒ λother: False. ⊥
    361361              ] (subaddressing_modein … addr)
    362362        | POP addr ⇒
    363             let contents ≝ read_at_stack_pointer s in
    364             let 〈new_sp, flags〉 ≝ sub_8_with_carry (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) false in
    365             let s ≝ set_8051_sfr s SFR_SP new_sp in
    366               set_arg_8 s addr contents
     363            let contents ≝ read_at_stack_pointer ? s in
     364            let 〈new_sp, flags〉 ≝ sub_8_with_carry (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) false in
     365            let s ≝ set_8051_sfr ? s SFR_SP new_sp in
     366              set_arg_8 ? s addr contents
    367367        | XCH addr1 addr2 ⇒
    368             let old_addr ≝ get_arg_8 s false addr2 in
    369             let old_acc ≝ get_8051_sfr s SFR_ACC_A in
    370             let s ≝ set_8051_sfr s SFR_ACC_A old_addr in
    371               set_arg_8 s addr2 old_acc
     368            let old_addr ≝ get_arg_8 ? s false addr2 in
     369            let old_acc ≝ get_8051_sfr ? s SFR_ACC_A in
     370            let s ≝ set_8051_sfr ? s SFR_ACC_A old_addr in
     371              set_arg_8 ? s addr2 old_acc
    372372        | XCHD addr1 addr2 ⇒
    373             let 〈acc_nu, acc_nl〉 ≝ split … 4 4 (get_8051_sfr s SFR_ACC_A) in
    374             let 〈arg_nu, arg_nl〉 ≝ split … 4 4 (get_arg_8 s false addr2) in
     373            let 〈acc_nu, acc_nl〉 ≝ split … 4 4 (get_8051_sfr ? s SFR_ACC_A) in
     374            let 〈arg_nu, arg_nl〉 ≝ split … 4 4 (get_arg_8 ? s false addr2) in
    375375            let new_acc ≝ acc_nu @@ arg_nl in
    376376            let new_arg ≝ arg_nu @@ acc_nl in
    377             let s ≝ set_8051_sfr s SFR_ACC_A new_acc in
    378               set_arg_8 s addr2 new_arg
     377            let s ≝ set_8051_sfr ? s SFR_ACC_A new_acc in
     378              set_arg_8 ? s addr2 new_arg
    379379        | RET ⇒
    380             let high_bits ≝ read_at_stack_pointer s in
    381             let 〈new_sp, flags〉 ≝ sub_8_with_carry (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) false in
    382             let s ≝ set_8051_sfr s SFR_SP new_sp in
    383             let low_bits ≝ read_at_stack_pointer s in
    384             let 〈new_sp, flags〉 ≝ sub_8_with_carry (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) false in
    385             let s ≝ set_8051_sfr s SFR_SP new_sp in
     380            let high_bits ≝ read_at_stack_pointer ? s in
     381            let 〈new_sp, flags〉 ≝ sub_8_with_carry (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) false in
     382            let s ≝ set_8051_sfr ? s SFR_SP new_sp in
     383            let low_bits ≝ read_at_stack_pointer ? s in
     384            let 〈new_sp, flags〉 ≝ sub_8_with_carry (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) false in
     385            let s ≝ set_8051_sfr ? s SFR_SP new_sp in
    386386            let new_pc ≝ high_bits @@ low_bits in
    387               set_program_counter s new_pc
     387              set_program_counter ? s new_pc
    388388        | RETI ⇒
    389             let high_bits ≝ read_at_stack_pointer s in
    390             let 〈new_sp, flags〉 ≝ sub_8_with_carry (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) false in
    391             let s ≝ set_8051_sfr s SFR_SP new_sp in
    392             let low_bits ≝ read_at_stack_pointer s in
    393             let 〈new_sp, flags〉 ≝ sub_8_with_carry (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) false in
    394             let s ≝ set_8051_sfr s SFR_SP new_sp in
     389            let high_bits ≝ read_at_stack_pointer ? s in
     390            let 〈new_sp, flags〉 ≝ sub_8_with_carry (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) false in
     391            let s ≝ set_8051_sfr ? s SFR_SP new_sp in
     392            let low_bits ≝ read_at_stack_pointer ? s in
     393            let 〈new_sp, flags〉 ≝ sub_8_with_carry (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) false in
     394            let s ≝ set_8051_sfr ? s SFR_SP new_sp in
    395395            let new_pc ≝ high_bits @@ low_bits in
    396               set_program_counter s new_pc
     396              set_program_counter ? s new_pc
    397397        | MOVX addr ⇒
    398398          (* DPM: only copies --- doesn't affect I/O *)
     
    400400            [ inl l ⇒
    401401              let 〈addr1, addr2〉 ≝ l in
    402                 set_arg_8 s addr1 (get_arg_8 s false addr2)
     402                set_arg_8 ? s addr1 (get_arg_8 ? s false addr2)
    403403            | inr r ⇒
    404404              let 〈addr1, addr2〉 ≝ r in
    405                 set_arg_8 s addr1 (get_arg_8 s false addr2)
     405                set_arg_8 ? s addr1 (get_arg_8 ? s false addr2)
    406406            ]
    407407        | MOV addr ⇒
     
    417417                            [ inl l'''' ⇒
    418418                              let 〈addr1, addr2〉 ≝ l'''' in
    419                                 set_arg_8 s addr1 (get_arg_8 s false addr2)
     419                                set_arg_8 ? s addr1 (get_arg_8 ? s false addr2)
    420420                            | inr r'''' ⇒
    421421                              let 〈addr1, addr2〉 ≝ r'''' in
    422                                 set_arg_8 s addr1 (get_arg_8 s false addr2)
     422                                set_arg_8 ? s addr1 (get_arg_8 ? s false addr2)
    423423                            ]
    424424                        | inr r''' ⇒
    425425                          let 〈addr1, addr2〉 ≝ r''' in
    426                             set_arg_8 s addr1 (get_arg_8 s false addr2)
     426                            set_arg_8 ? s addr1 (get_arg_8 ? s false addr2)
    427427                        ]
    428428                    | inr r'' ⇒
    429429                      let 〈addr1, addr2〉 ≝ r'' in
    430                         set_arg_16 s (get_arg_16 s addr2) addr1
     430                        set_arg_16 ? s (get_arg_16 ? s addr2) addr1
    431431                    ]
    432432                | inr r ⇒
    433433                  let 〈addr1, addr2〉 ≝ r in
    434                     set_arg_1 s addr1 (get_arg_1 s addr2 false)
     434                    set_arg_1 ? s addr1 (get_arg_1 ? s addr2 false)
    435435                ]
    436436            | inr r ⇒
    437437              let 〈addr1, addr2〉 ≝ r in
    438                 set_arg_1 s addr1 (get_arg_1 s addr2 false)
     438                set_arg_1 ? s addr1 (get_arg_1 ? s addr2 false)
    439439            ]
    440440          | JC addr ⇒
    441441              let r ≝ addr_of addr in
    442                   if get_cy_flag s then
    443                     let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) (sign_extension r) in
    444                       set_program_counter s new_pc
     442                  if get_cy_flag ? s then
     443                    let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) (sign_extension r) in
     444                      set_program_counter ? s new_pc
    445445                  else
    446446                    s
    447447            | JNC addr ⇒
    448448              let r ≝ addr_of addr in
    449                   if ¬(get_cy_flag s) then
    450                     let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) (sign_extension r) in
    451                       set_program_counter s new_pc
     449                  if ¬(get_cy_flag ? s) then
     450                    let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) (sign_extension r) in
     451                      set_program_counter ? s new_pc
    452452                  else
    453453                    s
    454454            | JB addr1 addr2 ⇒
    455455              let r ≝ addr_of addr2 in
    456                   if get_arg_1 s addr1 false then
    457                     let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) (sign_extension r) in
    458                       set_program_counter s new_pc
     456                  if get_arg_1 ? s addr1 false then
     457                    let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) (sign_extension r) in
     458                      set_program_counter ? s new_pc
    459459                  else
    460460                    s
    461461            | JNB addr1 addr2 ⇒
    462462              let r ≝ addr_of addr2 in
    463                   if ¬(get_arg_1 s addr1 false) then
    464                     let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) (sign_extension r) in
    465                       set_program_counter s new_pc
     463                  if ¬(get_arg_1 ? s addr1 false) then
     464                    let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) (sign_extension r) in
     465                      set_program_counter ? s new_pc
    466466                  else
    467467                    s
    468468            | JBC addr1 addr2 ⇒
    469469              let r ≝ addr_of addr2 in
    470                   let s ≝ set_arg_1 s addr1 false in
    471                     if get_arg_1 s addr1 false then
    472                       let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) (sign_extension r) in
    473                         set_program_counter s new_pc
     470                  let s ≝ set_arg_1 ? s addr1 false in
     471                    if get_arg_1 ? s addr1 false then
     472                      let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) (sign_extension r) in
     473                        set_program_counter ? s new_pc
    474474                    else
    475475                      s
    476476            | JZ addr ⇒
    477477              let r ≝ addr_of addr in
    478                     if eq_bv ? (get_8051_sfr s SFR_ACC_A) (zero 8) then
    479                       let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) (sign_extension r) in
    480                         set_program_counter s new_pc
     478                    if eq_bv ? (get_8051_sfr ? s SFR_ACC_A) (zero 8) then
     479                      let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) (sign_extension r) in
     480                        set_program_counter ? s new_pc
    481481                    else
    482482                      s
    483483            | JNZ addr ⇒
    484484              let r ≝ addr_of addr in
    485                     if ¬(eq_bv ? (get_8051_sfr s SFR_ACC_A) (zero 8)) then
    486                       let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) (sign_extension r) in
    487                         set_program_counter s new_pc
     485                    if ¬(eq_bv ? (get_8051_sfr ? s SFR_ACC_A) (zero 8)) then
     486                      let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) (sign_extension r) in
     487                        set_program_counter ? s new_pc
    488488                    else
    489489                      s
     
    493493                    [ inl l ⇒
    494494                        let 〈addr1, addr2〉 ≝ l in
    495                         let new_cy ≝ ltb (nat_of_bitvector ? (get_arg_8 s false addr1))
    496                                                  (nat_of_bitvector ? (get_arg_8 s false addr2)) in
    497                           if ¬(eq_bv ? (get_arg_8 s false addr1) (get_arg_8 s false addr2)) then
    498                             let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) (sign_extension r) in
    499                             let s ≝ set_program_counter s new_pc in
    500                               set_flags s new_cy (None ?) (get_ov_flag s)
     495                        let new_cy ≝ ltb (nat_of_bitvector ? (get_arg_8 ? s false addr1))
     496                                                 (nat_of_bitvector ? (get_arg_8 ? s false addr2)) in
     497                          if ¬(eq_bv ? (get_arg_8 ? s false addr1) (get_arg_8 ? s false addr2)) then
     498                            let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) (sign_extension r) in
     499                            let s ≝ set_program_counter ? s new_pc in
     500                              set_flags ? s new_cy (None ?) (get_ov_flag ? s)
    501501                          else
    502                             (set_flags s new_cy (None ?) (get_ov_flag s))
     502                            (set_flags ? s new_cy (None ?) (get_ov_flag ? s))
    503503                    | inr r' ⇒
    504504                        let 〈addr1, addr2〉 ≝ r' in
    505                         let new_cy ≝ ltb (nat_of_bitvector ? (get_arg_8 s false addr1))
    506                                                  (nat_of_bitvector ? (get_arg_8 s false addr2)) in
    507                           if ¬(eq_bv ? (get_arg_8 s false addr1) (get_arg_8 s false addr2)) then
    508                             let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) (sign_extension r) in
    509                             let s ≝ set_program_counter s new_pc in
    510                               set_flags s new_cy (None ?) (get_ov_flag s)
     505                        let new_cy ≝ ltb (nat_of_bitvector ? (get_arg_8 ? s false addr1))
     506                                                 (nat_of_bitvector ? (get_arg_8 ? s false addr2)) in
     507                          if ¬(eq_bv ? (get_arg_8 ? s false addr1) (get_arg_8 ? s false addr2)) then
     508                            let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) (sign_extension r) in
     509                            let s ≝ set_program_counter ? s new_pc in
     510                              set_flags ? s new_cy (None ?) (get_ov_flag ? s)
    511511                          else
    512                             (set_flags s new_cy (None ?) (get_ov_flag s))
     512                            (set_flags ? s new_cy (None ?) (get_ov_flag ? s))
    513513                    ]
    514514            | DJNZ addr1 addr2 ⇒
    515515              let r ≝ addr_of addr2 in
    516               let 〈result, flags〉 ≝ sub_8_with_carry (get_arg_8 s true addr1) (bitvector_of_nat 8 1) false in
    517               let s ≝ set_arg_8 s addr1 result in
     516              let 〈result, flags〉 ≝ sub_8_with_carry (get_arg_8 ? s true addr1) (bitvector_of_nat 8 1) false in
     517              let s ≝ set_arg_8 ? s addr1 result in
    518518                if ¬(eq_bv ? result (zero 8)) then
    519                   let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) (sign_extension r) in
    520                     set_program_counter s new_pc
     519                  let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) (sign_extension r) in
     520                    set_program_counter ? s new_pc
    521521                else
    522522                  s
     
    541541definition execute_1: Status → Status ≝
    542542  λs: Status.
    543     let 〈instr_pc, ticks〉 ≝ fetch (code_memory s) (program_counter s) in
     543    let 〈instr_pc, ticks〉 ≝ fetch (code_memory ? s) (program_counter ? s) in
    544544    let 〈instr, pc〉 ≝ 〈fst … instr_pc, snd … instr_pc〉 in
    545     let s ≝ set_clock s (clock s + ticks) in
    546     let s ≝ set_program_counter s pc in
     545    let s ≝ set_clock ? s (clock ? s + ticks) in
     546    let s ≝ set_program_counter ? s pc in
    547547    let s ≝
    548548      match instr with
    549       [ RealInstruction instr ⇒ execute_1_preinstruction [[ relative ]]
     549      [ RealInstruction instr ⇒ execute_1_preinstruction [[ relative ]] ?
    550550        (λx.
    551551        match x return λs. bool_to_Prop (is_in ? [[ relative ]] s) → ? with
     
    556556          match addr return λx. bool_to_Prop (is_in … [[ addr11 ]] x) → ? with
    557557            [ ADDR11 a ⇒ λaddr11: True.
    558               let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) in
    559               let s ≝ set_8051_sfr s SFR_SP new_sp in
    560               let 〈pc_bu, pc_bl〉 ≝ split ? 8 8 (program_counter s) in
    561               let s ≝ write_at_stack_pointer s pc_bl in
    562               let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) in
    563               let s ≝ set_8051_sfr s SFR_SP new_sp in
    564               let s ≝ write_at_stack_pointer s pc_bu in
     558              let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) in
     559              let s ≝ set_8051_sfr ? s SFR_SP new_sp in
     560              let 〈pc_bu, pc_bl〉 ≝ split ? 8 8 (program_counter ? s) in
     561              let s ≝ write_at_stack_pointer ? s pc_bl in
     562              let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) in
     563              let s ≝ set_8051_sfr ? s SFR_SP new_sp in
     564              let s ≝ write_at_stack_pointer ? s pc_bu in
    565565              let 〈thr, eig〉 ≝ split ? 3 8 a in
    566566              let 〈fiv, thr'〉 ≝ split ? 5 3 pc_bu in
    567567              let new_addr ≝ (fiv @@ thr) @@ pc_bl in
    568                 set_program_counter s new_addr
     568                set_program_counter ? s new_addr
    569569            | _ ⇒ λother: False. ⊥
    570570            ] (subaddressing_modein … addr)
     
    572572          match addr return λx. bool_to_Prop (is_in … [[ addr16 ]] x) → ? with
    573573            [ ADDR16 a ⇒ λaddr16: True.
    574               let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) in
    575               let s ≝ set_8051_sfr s SFR_SP new_sp in
    576               let 〈pc_bu, pc_bl〉 ≝ split ? 8 8 (program_counter s) in
    577               let s ≝ write_at_stack_pointer s pc_bl in
    578               let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) in
    579               let s ≝ set_8051_sfr s SFR_SP new_sp in
    580               let s ≝ write_at_stack_pointer s pc_bu in
    581                 set_program_counter s a
     574              let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) in
     575              let s ≝ set_8051_sfr ? s SFR_SP new_sp in
     576              let 〈pc_bu, pc_bl〉 ≝ split ? 8 8 (program_counter ? s) in
     577              let s ≝ write_at_stack_pointer ? s pc_bl in
     578              let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) in
     579              let s ≝ set_8051_sfr ? s SFR_SP new_sp in
     580              let s ≝ write_at_stack_pointer ? s pc_bu in
     581                set_program_counter ? s a
    582582            | _ ⇒ λother: False. ⊥
    583583            ] (subaddressing_modein … addr)
     
    585585          match addr2 return λx. bool_to_Prop (is_in … [[ acc_dptr; acc_pc ]] x) → ? with
    586586            [ ACC_DPTR ⇒ λacc_dptr: True.
    587               let big_acc ≝ (zero 8) @@ (get_8051_sfr s SFR_ACC_A) in
    588               let dptr ≝ (get_8051_sfr s SFR_DPH) @@ (get_8051_sfr s SFR_DPL) in
     587              let big_acc ≝ (zero 8) @@ (get_8051_sfr ? s SFR_ACC_A) in
     588              let dptr ≝ (get_8051_sfr ? s SFR_DPH) @@ (get_8051_sfr ? s SFR_DPL) in
    589589              let 〈carry, new_addr〉 ≝ half_add ? dptr big_acc in
    590               let result ≝ lookup ? ? new_addr (code_memory s) (zero ?) in
    591                 set_8051_sfr s SFR_ACC_A result
     590              let result ≝ lookup ? ? new_addr (code_memory ? s) (zero ?) in
     591                set_8051_sfr ? s SFR_ACC_A result
    592592            | ACC_PC ⇒ λacc_pc: True.
    593               let big_acc ≝ (zero 8) @@ (get_8051_sfr s SFR_ACC_A) in
    594               let 〈carry,inc_pc〉 ≝ half_add ? (program_counter s) (bitvector_of_nat 16 1) in
     593              let big_acc ≝ (zero 8) @@ (get_8051_sfr ? s SFR_ACC_A) in
     594              let 〈carry,inc_pc〉 ≝ half_add ? (program_counter ? s) (bitvector_of_nat 16 1) in
    595595              (* DPM: Under specified: does the carry from PC incrementation affect the *)
    596596              (*      addition of the PC with the DPTR? At the moment, no.              *)
    597               let s ≝ set_program_counter s inc_pc in
     597              let s ≝ set_program_counter ? s inc_pc in
    598598              let 〈carry, new_addr〉 ≝ half_add ? inc_pc big_acc in
    599               let result ≝ lookup ? ? new_addr (code_memory s) (zero ?) in
    600                 set_8051_sfr s SFR_ACC_A result
     599              let result ≝ lookup ? ? new_addr (code_memory ? s) (zero ?) in
     600                set_8051_sfr ? s SFR_ACC_A result
    601601            | _ ⇒ λother: False. ⊥
    602602            ] (subaddressing_modein … addr2)
    603603        | JMP _ ⇒ (* DPM: always indirect_dptr *)
    604           let dptr ≝ (get_8051_sfr s SFR_DPH) @@ (get_8051_sfr s SFR_DPL) in
    605           let big_acc ≝ (zero 8) @@ (get_8051_sfr s SFR_ACC_A) in
     604          let dptr ≝ (get_8051_sfr ? s SFR_DPH) @@ (get_8051_sfr ? s SFR_DPL) in
     605          let big_acc ≝ (zero 8) @@ (get_8051_sfr ? s SFR_ACC_A) in
    606606          let 〈carry, jmp_addr〉 ≝ half_add ? big_acc dptr in
    607           let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) jmp_addr in
    608             set_program_counter s new_pc
     607          let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) jmp_addr in
     608            set_program_counter ? s new_pc
    609609        | LJMP addr ⇒
    610610          match addr return λx. bool_to_Prop (is_in … [[ addr16 ]] x) → ? with
    611611            [ ADDR16 a ⇒ λaddr16: True.
    612                 set_program_counter s a
     612                set_program_counter ? s a
    613613            | _ ⇒ λother: False. ⊥
    614614            ] (subaddressing_modein … addr)
     
    616616          match addr return λx. bool_to_Prop (is_in … [[ relative ]] x) → ? with
    617617            [ RELATIVE r ⇒ λrelative: True.
    618                 let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) (sign_extension r) in
    619                   set_program_counter s new_pc
     618                let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) (sign_extension r) in
     619                  set_program_counter ? s new_pc
    620620            | _ ⇒ λother: False. ⊥
    621621            ] (subaddressing_modein … addr)
     
    623623          match addr return λx. bool_to_Prop (is_in … [[ addr11 ]] x) → ? with
    624624            [ ADDR11 a ⇒ λaddr11: True.
    625               let 〈pc_bu, pc_bl〉 ≝ split ? 8 8 (program_counter s) in
     625              let 〈pc_bu, pc_bl〉 ≝ split ? 8 8 (program_counter ? s) in
    626626              let 〈nu, nl〉 ≝ split ? 4 4 pc_bu in
    627627              let bit ≝ get_index' ? O ? nl in
    628628              let 〈relevant1, relevant2〉 ≝ split ? 3 8 a in
    629629              let new_addr ≝ (nu @@ (bit ::: relevant1)) @@ relevant2 in
    630               let 〈carry, new_pc〉 ≝ half_add ? (program_counter s) new_addr in
    631                 set_program_counter s new_pc
     630              let 〈carry, new_pc〉 ≝ half_add ? (program_counter ? s) new_addr in
     631                set_program_counter ? s new_pc
    632632            | _ ⇒ λother: False. ⊥
    633633            ] (subaddressing_modein … addr)
     
    652652
    653653axiom fetch_pseudo_instruction:
    654   ∀p: list labelled_instruction.
     654  ∀ps: PseudoStatus.
    655655  ∀pc: Word.
    656656    (pseudo_instruction × Word) × nat.
     
    659659axiom address_of_word_labels: Identifier → Word.
    660660
    661 definition execute_1_pseudo_instruction: pseudo_assembly_program → Status → Status ≝
    662   λp.
     661definition execute_1_pseudo_instruction: PseudoStatus → PseudoStatus ≝
    663662  λs.
    664   let 〈instr_pc, ticks〉 ≝ fetch_pseudo_instruction (\snd p) (program_counter s) in
     663  let 〈instr_pc, ticks〉 ≝ fetch_pseudo_instruction s (program_counter ? s) in
    665664  let 〈instr, pc〉 ≝ 〈fst … instr_pc, snd … instr_pc〉 in
    666   let s ≝ set_clock s (clock s + ticks) in
    667   let s ≝ set_program_counter s pc in
     665  let s ≝ set_clock ? s (clock ? s + ticks) in
     666  let s ≝ set_program_counter ? s pc in
    668667  let s ≝
    669668    match instr with
    670     [ Instruction instr ⇒ execute_1_preinstruction ? address_of_labels instr s
     669    [ Instruction instr ⇒ execute_1_preinstruction address_of_labels instr s
    671670    | Comment cmt ⇒ s
    672671    | Cost cst ⇒ s
    673     | Jmp jmp ⇒ set_program_counter s (address_of_word_labels jmp)
     672    | Jmp jmp ⇒ set_program_counter ? s (address_of_word_labels jmp)
    674673    | Call call ⇒
    675674      let a ≝ address_of_word_labels call in
    676       let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) in
    677       let s ≝ set_8051_sfr s SFR_SP new_sp in
    678       let 〈pc_bu, pc_bl〉 ≝ split ? 8 8 (program_counter s) in
    679       let s ≝ write_at_stack_pointer s pc_bl in
    680       let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr s SFR_SP) (bitvector_of_nat 8 1) in
    681       let s ≝ set_8051_sfr s SFR_SP new_sp in
    682       let s ≝ write_at_stack_pointer s pc_bu in
    683         set_program_counter s a
    684     | Mov dptr ident ⇒ set_arg_16 s (get_arg_16 s (DATA16 (address_of_word_labels ident))) dptr
     675      let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) in
     676      let s ≝ set_8051_sfr ? s SFR_SP new_sp in
     677      let 〈pc_bu, pc_bl〉 ≝ split ? 8 8 (program_counter ? s) in
     678      let s ≝ write_at_stack_pointer ? s pc_bl in
     679      let 〈carry, new_sp〉 ≝ half_add ? (get_8051_sfr ? s SFR_SP) (bitvector_of_nat 8 1) in
     680      let s ≝ set_8051_sfr ? s SFR_SP new_sp in
     681      let s ≝ write_at_stack_pointer ? s pc_bu in
     682        set_program_counter ? s a
     683    | Mov dptr ident ⇒ set_arg_16 ? s (get_arg_16 ? s (DATA16 (address_of_word_labels ident))) dptr
    685684    ]
    686685  in
     
    696695    ].
    697696
    698 let rec execute_pseudo_instruction (n: nat) (p: pseudo_assembly_program) (s: Status) on n: Status ≝
     697let rec execute_pseudo_instruction (n: nat) (s: PseudoStatus) on n: PseudoStatus ≝
    699698  match n with
    700699    [ O ⇒ s
    701     | S o ⇒ execute_pseudo_instruction o p (execute_1_pseudo_instruction p s)
     700    | S o ⇒ execute_pseudo_instruction o (execute_1_pseudo_instruction s)
    702701    ].
Note: See TracChangeset for help on using the changeset viewer.