]> matita.cs.unibo.it Git - helm.git/blob - helm/software/matita/contribs/ng_assembly2/emulator/model/HC05_model.ma
mod change (-x)
[helm.git] / helm / software / matita / contribs / ng_assembly2 / emulator / model / HC05_model.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 "emulator/status/status.ma".
24
25 (* *********************************** *)
26 (* IMPOSTAZIONI SPECIFICHE DEI MODELLI *)
27 (* *********************************** *)
28
29 (* modelli di HC05 *)
30 ninductive HC05_model : Type ≝
31   MC68HC05J5A: HC05_model
32   (*..*).
33
34 (* memoria degli HC05 *)
35 ndefinition memory_type_of_FamilyHC05 ≝
36 λm:HC05_model.match m with
37  [ MC68HC05J5A ⇒
38   [
39 (* tutto mappato nel segmento 0 *)
40 (* 0x0080-0x00FF *)   quadruple … o0 〈〈x0,x0〉:〈x8,x0〉〉 〈〈x0,x0〉:〈x8,x0〉〉 MEM_READ_WRITE (* 128B RAM+STACK *)
41 (* 0x0300-0x0CFF *) ; quadruple … o0 〈〈x0,x3〉:〈x0,x0〉〉 〈〈x0,xA〉:〈x0,x0〉〉 MEM_READ_ONLY  (* 2560B USER ROM *)
42 (* 0x0E00-0x0FFF *) ; quadruple … o0 〈〈x0,xE〉:〈x0,x0〉〉 〈〈x0,x2〉:〈x0,x0〉〉 MEM_READ_ONLY  (* 512B INTERNAL ROM *) ]
43  (* etc.. *)
44  ].
45
46 (* parametrizzati i non deterministici rispetto a tutti i valori casuali
47    che verranno dati dall'esterno di tipo byte8 (ndby1-2) e bool (ndbo1-5).
48    l'ACCENSIONE e' totalmente equivalente ad un reset causato da calo di tensione
49    (reset V-low), la memoria ed il check possono essere passati *)
50 ndefinition start_of_model_HC05 ≝
51 λmcu:HC05_model.λt:memory_impl.
52 λmem:aux_mem_type t.λchk:aux_chk_type t.
53 λndby1,ndby2:byte8.λirqfl,ndbo1,ndbo2,ndbo3,ndbo4,ndbo5:bool.
54  let build ≝ λspm,spf,pcm:word16.
55   mk_any_status HC05 t
56    (mk_alu_HC05
57     (* acc_low: ? *) ndby1
58     (* indx_low: ? *) ndby2 
59     (* sp: reset *) (orc ? (andc ? 〈〈x0,x0〉:〈xF,xF〉〉 spm) spf)
60     (* spm *) spm
61     (* spf *) spf
62     (* pc: reset+fetch *) (andc ? (mk_word16 (mem_read_abs t mem o0 (andc ? 〈〈xF,xF〉:〈xF,xE〉〉 pcm)) 
63                                              (mem_read_abs t mem o0 (andc ? 〈〈xF,xF〉:〈xF,xF〉〉 pcm))) pcm)
64     (* pcm *) pcm
65     (* H: ? *) ndbo1
66     (* I: reset *) true
67     (* N: ? *) ndbo2
68     (* Z: ? *) ndbo3
69     (* C: ? *) ndbo4
70     (* IRQ: ? *) irqfl)
71     (* mem *) mem
72     (* chk *) chk
73     (* clk: reset *) (None ?) in
74  match mcu with
75   [ MC68HC05J5A ⇒ build 〈〈x0,x0〉:〈x3,xF〉〉 〈〈x0,x0〉:〈xC,x0〉〉 〈〈x0,xF〉:〈xF,xF〉〉
76     (*..*)
77   ].
78
79 (* cio' che non viene resettato mantiene il valore precedente: nella documentazione
80    viene riportato come "unaffected"/"indeterminate"/"unpredictable"
81    il soft RESET e' diverso da un calo di tensione e la ram non variera' *)
82 ndefinition reset_of_model_HC05 ≝
83 λt:memory_impl.λs:any_status HC05 t.
84  (mk_any_status HC05 t
85   (mk_alu_HC05
86    (* acc_low: inv. *) (acc_low_reg_HC05 (alu ? t s))
87    (* indx_low: inv. *) (indX_low_reg_HC05 (alu ? t s))
88    (* sp: reset *) (orc ? (andc ? 〈〈x0,x0〉:〈xF,xF〉〉 (sp_mask_HC05 (alu ? t s)))
89                           (sp_fix_HC05 (alu ? t s)))
90    (* spm: inv. *) (sp_mask_HC05 (alu ? t s))
91    (* spf: inv. *) (sp_fix_HC05 (alu ? t s))
92    (* pc: reset+fetch *) (andc ? (mk_word16 (mem_read_abs t (mem_desc ? t s) o0 (andc ? 〈〈xF,xF〉:〈xF,xE〉〉 (pc_mask_HC05 (alu ? t s))))
93                                             (mem_read_abs t (mem_desc ? t s) o0 (andc ? 〈〈xF,xF〉:〈xF,xF〉〉 (pc_mask_HC05 (alu ? t s)))))
94                                  (pc_mask_HC05 (alu ? t s)))
95    (* pcm: inv. *) (pc_mask_HC05 (alu ? t s))
96    (* H: inv. *) (h_flag_HC05 (alu ? t s))
97    (* I: reset *) true
98    (* N: inv. *) (n_flag_HC05 (alu ? t s))
99    (* Z: inv. *) (z_flag_HC05 (alu ? t s))
100    (* C: inv. *) (c_flag_HC05 (alu ? t s))
101    (* IRQ: inv *) (irq_flag_HC05 (alu ? t s)))
102    (* mem: inv. *) (mem_desc ? t s)
103    (* chk: inv. *) (chk_desc ? t s)
104    (* clk: reset *) (None ?)).