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 HC08_model : Type ≝
31 MC68HC08AB16A: HC08_model
34 (* memoria degli HC08 *)
35 ndefinition memory_type_of_FamilyHC08 ≝
36 λm:HC08_model.match m with
39 (* tutto mappato nel segmento 0 *)
40 (* 0x0050-0x024F *) quadruple … o0 〈〈x0,x0〉:〈x5,x0〉〉 〈〈x0,x2〉:〈x0,x0〉〉 MEM_READ_WRITE (* 512B RAM *)
41 (* 0x0800-0x09FF *) ; quadruple … o0 〈〈x0,x8〉:〈x0,x0〉〉 〈〈x0,x2〉:〈x0,x0〉〉 MEM_READ_ONLY (* 512B EEPROM *)
42 (* 0xBE00-0xFDFF *) ; quadruple … o0 〈〈xB,xE〉:〈x0,x0〉〉 〈〈x4,x0〉:〈x0,x0〉〉 MEM_READ_ONLY (* 16384B ROM *)
43 (* 0xFE20-0xFF52 *) ; quadruple … o0 〈〈xF,xE〉:〈x2,x0〉〉 〈〈x0,x1〉:〈x3,x3〉〉 MEM_READ_ONLY (* 307B ROM *)
44 (* 0xFFD0-0xFFFF *) ; quadruple … o0 〈〈xF,xF〉:〈xD,x0〉〉 〈〈x0,x0〉:〈x3,x0〉〉 MEM_READ_ONLY (* 48B ROM *) ]
48 (* parametrizzati i non deterministici rispetto a tutti i valori casuali
49 che verranno dati dall'esterno di tipo byte8 (ndby1-2) e bool (ndbo1-5).
50 l'ACCENSIONE e' totalmente equivalente ad un reset causato da calo di tensione
51 (reset V-low), la memoria ed il check possono essere passati *)
52 ndefinition start_of_model_HC08 ≝
53 λmcu:HC08_model.λt:memory_impl.
54 λmem:aux_mem_type t.λchk:aux_chk_type t.
55 λndby1,ndby2:byte8.λirqfl,ndbo1,ndbo2,ndbo3,ndbo4,ndbo5:bool.
58 (* acc_low: ? *) ndby1
59 (* indw_low: ? *) ndby2
60 (* indx_high: reset *) 〈x0,x0〉
61 (* sp: reset *) 〈〈x0,x0〉:〈xF,xF〉〉
62 (* pc: reset+fetch *) (mk_word16 (mem_read_abs t mem o0 〈〈xF,xF〉:〈xF,xE〉〉)
63 (mem_read_abs t mem o0 〈〈xF,xF〉:〈xF,xF〉〉))
73 (* clk: reset *) (None ?).
75 (* cio' che non viene resettato mantiene il valore precedente: nella documentazione
76 viene riportato come "unaffected"/"indeterminate"/"unpredictable"
77 il soft RESET e' diverso da un calo di tensione e la ram non variera' *)
78 ndefinition reset_of_model_HC08 ≝
79 λt:memory_impl.λs:any_status HC08 t.
82 (* acc_low: inv. *) (acc_low_reg_HC08 (alu ? t s))
83 (* indx_low: inv. *) (indX_low_reg_HC08 (alu ? t s))
84 (* indx_high: reset *) 〈x0,x0〉
85 (* sp: reset *) 〈〈x0,x0〉:〈xF,xF〉〉
86 (* pc: reset+fetch *) (mk_word16 (mem_read_abs t (mem_desc ? t s) o0 〈〈xF,xF〉:〈xF,xE〉〉)
87 (mem_read_abs t (mem_desc ? t s) o0 〈〈xF,xF〉:〈xF,xE〉〉))
88 (* V: inv. *) (v_flag_HC08 (alu ? t s))
89 (* H: inv. *) (h_flag_HC08 (alu ? t s))
91 (* N: inv. *) (n_flag_HC08 (alu ? t s))
92 (* Z: inv. *) (z_flag_HC08 (alu ? t s))
93 (* C: inv. *) (c_flag_HC08 (alu ? t s))
94 (* IRQ: inv *) (irq_flag_HC08 (alu ? t s)))
95 (* mem: inv. *) (mem_desc ? t s)
96 (* chk: inv. *) (chk_desc ? t s)
97 (* clk: reset *) (None ?)).