]> matita.cs.unibo.it Git - helm.git/blob - helm/software/matita/contribs/ng_assembly/emulator/status/HC08_status.ma
(no commit message)
[helm.git] / helm / software / matita / contribs / ng_assembly / emulator / status / HC08_status.ma
1 (**************************************************************************)
2 (*       ___                                                              *)
3 (*      ||M||                                                             *)
4 (*      ||A||       A project by Andrea Asperti                           *)
5 (*      ||T||                                                             *)
6 (*      ||I||       Developers:                                           *)
7 (*      ||T||         The HELM team.                                      *)
8 (*      ||A||         http://helm.cs.unibo.it                             *)
9 (*      \   /                                                             *)
10 (*       \ /        This file is distributed under the terms of the       *)
11 (*        v         GNU General Public License Version 2                  *)
12 (*                                                                        *)
13 (**************************************************************************)
14
15 (* ********************************************************************** *)
16 (*                          Progetto FreeScale                            *)
17 (*                                                                        *)
18 (*   Sviluppato da: Ing. Cosimo Oliboni, oliboni@cs.unibo.it              *)
19 (*   Sviluppo: 2008-2010                                                  *)
20 (*                                                                        *)
21 (* ********************************************************************** *)
22
23 include "num/word16.ma".
24
25 (* *********************************** *)
26 (* STATUS INTERNO DEL PROCESSORE (ALU) *)
27 (* *********************************** *)
28
29 (* ALU dell'HC08/HCS08 *) 
30 nrecord alu_HC08: Type ≝
31  {
32  (* A: registo accumulatore *)
33  acc_low_reg_HC08 : byte8;
34  (* X: registro indice parte bassa *)
35  indX_low_reg_HC08 : byte8;
36  (* H: registro indice parte alta *)
37  indX_high_reg_HC08 : byte8;
38  (* SP: registo stack pointer *)
39  sp_reg_HC08 : word16;
40  (* PC: registro program counter *)
41  pc_reg_HC08 : word16;
42  
43  (* V: flag overflow *)
44  v_flag_HC08 : bool;
45  (* H: flag semi-carry (somma nibble basso) *)
46  h_flag_HC08 : bool;
47  (* I: flag mascheramento degli interrupt mascherabili: 1=mascherati *)
48  i_flag_HC08 : bool;
49  (* N: flag segno/negativita' *)
50  n_flag_HC08 : bool;
51  (* Z: flag zero *)
52  z_flag_HC08 : bool;
53  (* C: flag carry *)
54  c_flag_HC08 : bool;
55  
56  (* IRQ: flag che simula il pin esterno IRQ *)
57  irq_flag_HC08 : bool
58  }.
59
60 notation "{hvbox('A_Reg' ≝ acclow ; break 'X_Reg' ≝ indxlow ; break 'H_Reg' ≝ indxhigh ; break 'Sp_Reg' ≝ sp ; break 'Pc_Reg' ≝ pc ; break 'V_Flag' ≝ vfl ; break 'H_Flag' ≝ hfl ; break 'I_Flag' ≝ ifl ; break 'N_Flag' ≝ nfl ; break 'Z_Flag' ≝ zfl ; break 'C_Flag' ≝ cfl ; break 'IRQ_Flag' ≝ irqfl)}"
61  non associative with precedence 80 for
62  @{ 'mk_alu_HC08 $acclow $indxlow $indxhigh $sp $pc $vfl $hfl $ifl $nfl $zfl $cfl $irqfl }.
63 interpretation "mk_alu_HC08" 'mk_alu_HC08 acclow indxlow indxhigh sp pc vfl hfl ifl nfl zfl cfl irqfl =
64  (mk_alu_HC08 acclow indxlow indxhigh sp pc vfl hfl ifl nfl zfl cfl irqfl).
65
66 (* ***************** *)
67 (* CONFRONTO FRA ALU *)
68 (* ***************** *)
69
70 (* confronto registro per registro dell'HC08 *)
71 ndefinition eq_HC08_alu ≝
72 λalu1,alu2:alu_HC08.
73  (eq_b8 (acc_low_reg_HC08 alu1) (acc_low_reg_HC08 alu2)) ⊗
74  (eq_b8 (indX_low_reg_HC08 alu1) (indX_low_reg_HC08 alu2)) ⊗
75  (eq_b8 (indX_high_reg_HC08 alu1) (indX_high_reg_HC08 alu2)) ⊗
76  (eq_w16 (sp_reg_HC08 alu1) (sp_reg_HC08 alu2)) ⊗
77  (eq_w16 (pc_reg_HC08 alu1) (pc_reg_HC08 alu2)) ⊗
78  (eq_bool (v_flag_HC08 alu1) (v_flag_HC08 alu2)) ⊗
79  (eq_bool (h_flag_HC08 alu1) (h_flag_HC08 alu2)) ⊗
80  (eq_bool (i_flag_HC08 alu1) (i_flag_HC08 alu2)) ⊗
81  (eq_bool (n_flag_HC08 alu1) (n_flag_HC08 alu2)) ⊗
82  (eq_bool (z_flag_HC08 alu1) (z_flag_HC08 alu2)) ⊗
83  (eq_bool (c_flag_HC08 alu1) (c_flag_HC08 alu2)) ⊗
84  (eq_bool (irq_flag_HC08 alu1) (irq_flag_HC08 alu2)).