1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 (* ********************************************************************** *)
16 (* Progetto FreeScale *)
18 (* Sviluppato da: Ing. Cosimo Oliboni, oliboni@cs.unibo.it *)
19 (* Sviluppo: 2008-2010 *)
21 (* ********************************************************************** *)
23 include "emulator/status/status.ma".
25 (* *********************************** *)
26 (* IMPOSTAZIONI SPECIFICHE DEI MODELLI *)
27 (* *********************************** *)
30 ninductive HC05_model : Type ≝
31 MC68HC05J5A: HC05_model
34 (* memoria degli HC05 *)
35 ndefinition memory_type_of_FamilyHC05 ≝
36 λm:HC05_model.match m with
38 [ (* astraggo molto *)
39 (* 0x0000-0x001F,0x0FF0: sarebbe memory mapped IO *)
40 (* 0x0080-0x00FF *) triple … 〈〈〈x0,x0〉:〈x0,x0〉〉.〈〈x0,x0〉:〈x8,x0〉〉〉 〈〈x0,x0〉:〈x8,x0〉〉 MEM_READ_WRITE (* 128B RAM+STACK *)
41 (* 0x0300-0x0CFF *) ; triple … 〈〈〈x0,x0〉:〈x0,x0〉〉.〈〈x0,x3〉:〈x0,x0〉〉〉 〈〈x0,xA〉:〈x0,x0〉〉 MEM_READ_ONLY (* 2560B USER ROM *)
42 (* 0x0E00-0x0FFF *) ; triple … 〈〈〈x0,x0〉:〈x0,x0〉〉.〈〈x0,xE〉:〈x0,x0〉〉〉 〈〈x0,x2〉:〈x0,x0〉〉 MEM_READ_ONLY (* 512B INTERNAL ROM *) ]
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.
57 (* acc_low: ? *) ndby1
58 (* indx_low: ? *) ndby2
59 (* sp: reset *) (or_w16 (and_w16 〈〈x0,x0〉:〈xF,xF〉〉 spm) spf)
62 (* pc: reset+fetch *) (and_w16 (mk_word16 (mem_read_abs t mem 〈〈〈x0,x0〉:〈x0,x0〉〉.(and_w16 〈〈xF,xF〉:〈xF,xE〉〉 pcm)〉)
63 (mem_read_abs t mem 〈〈〈x0,x0〉:〈x0,x0〉〉.(and_w16 〈〈xF,xF〉:〈xF,xF〉〉 pcm)〉)) pcm)
73 (* clk: reset *) (None ?) in
75 [ MC68HC05J5A ⇒ build 〈〈x0,x0〉:〈x3,xF〉〉 〈〈x0,x0〉:〈xC,x0〉〉 〈〈x0,xF〉:〈xF,xF〉〉
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.
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 *) (or_w16 (and_w16 〈〈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 *) (and_w16 (mk_word16 (mem_read_abs t (mem_desc ? t s) 〈〈〈x0,x0〉:〈x0,x0〉〉.(and_w16 〈〈xF,xF〉:〈xF,xE〉〉 (pc_mask_HC05 (alu ? t s)))〉)
93 (mem_read_abs t (mem_desc ? t s) 〈〈〈x0,x0〉:〈x0,x0〉〉.(and_w16 〈〈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))
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 ?)).