]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/ng_assembly/emulator/translation/Freescale_translation.ma
98d182310e10c78a78759d9c486ed807d2b81305
[helm.git] / matita / matita / contribs / ng_assembly / emulator / translation / Freescale_translation.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/translation/translation_base.ma".
24
25 (* ******************************************************* *)
26 (* TRADUZIONE MCU+PSEUDO+MODALITA'+ARGOMENTI → ESADECIMALE *)
27 (* ******************************************************* *)
28
29 (* introduzione di un tipo dipendente (dalla modalita') per gli argomenti *)
30 ninductive Freescale_MA_check : Freescale_instr_mode → Type ≝
31   maINH              : Freescale_MA_check MODE_INH
32 | maINHA             : Freescale_MA_check MODE_INHA
33 | maINHX             : Freescale_MA_check MODE_INHX
34 | maINHH             : Freescale_MA_check MODE_INHH
35 | maINHX0ADD         : Freescale_MA_check MODE_INHX0ADD
36 | maINHX1ADD         : byte8 → Freescale_MA_check MODE_INHX1ADD
37 | maINHX2ADD         : word16 → Freescale_MA_check MODE_INHX2ADD
38 | maIMM1             : byte8  → Freescale_MA_check MODE_IMM1
39 | maIMM1EXT          : byte8  → Freescale_MA_check MODE_IMM1EXT
40 | maIMM2             : word16 → Freescale_MA_check MODE_IMM2
41 | maDIR1             : byte8  → Freescale_MA_check MODE_DIR1
42 | maDIR2             : word16 → Freescale_MA_check MODE_DIR2
43 | maIX0              : Freescale_MA_check MODE_IX0
44 | maIX1              : byte8  → Freescale_MA_check MODE_IX1
45 | maIX2              : word16 → Freescale_MA_check MODE_IX2
46 | maSP1              : byte8  → Freescale_MA_check MODE_SP1
47 | maSP2              : word16 → Freescale_MA_check MODE_SP2
48 | maDIR1_to_DIR1     : byte8 → byte8 → Freescale_MA_check MODE_DIR1_to_DIR1
49 | maIMM1_to_DIR1     : byte8 → byte8 → Freescale_MA_check MODE_IMM1_to_DIR1
50 | maIX0p_to_DIR1     : byte8 → Freescale_MA_check MODE_IX0p_to_DIR1
51 | maDIR1_to_IX0p     : byte8 → Freescale_MA_check MODE_DIR1_to_IX0p
52 | maINHA_and_IMM1    : byte8 → Freescale_MA_check MODE_INHA_and_IMM1
53 | maINHX_and_IMM1    : byte8 → Freescale_MA_check MODE_INHX_and_IMM1
54 | maIMM1_and_IMM1    : byte8 → byte8 → Freescale_MA_check MODE_IMM1_and_IMM1
55 | maDIR1_and_IMM1    : byte8 → byte8 → Freescale_MA_check MODE_DIR1_and_IMM1
56 | maIX0_and_IMM1     : byte8 → Freescale_MA_check MODE_IX0_and_IMM1
57 | maIX0p_and_IMM1    : byte8 → Freescale_MA_check MODE_IX0p_and_IMM1
58 | maIX1_and_IMM1     : byte8 → byte8 → Freescale_MA_check MODE_IX1_and_IMM1
59 | maIX1p_and_IMM1    : byte8 → byte8 → Freescale_MA_check MODE_IX1p_and_IMM1
60 | maSP1_and_IMM1     : byte8 → byte8 → Freescale_MA_check MODE_SP1_and_IMM1
61 | maDIRn             : ∀n.byte8 → Freescale_MA_check (MODE_DIRn n)
62 | maDIRn_and_IMM1    : ∀n.byte8 → byte8 → Freescale_MA_check (MODE_DIRn_and_IMM1 n)
63 | maTNY              : ∀e.Freescale_MA_check (MODE_TNY e)
64 | maSRT              : ∀t.Freescale_MA_check (MODE_SRT t)
65 .
66
67 (* picker: trasforma l'argomento necessario in input a bytes_of_pseudo_instr_mode_param:
68    MA_check i → list (t_byte8 m) *)
69 ndefinition Freescale_args_picker ≝
70 λm.λi:Freescale_instr_mode.λargs:Freescale_MA_check i.
71  match args with
72   (* inherent: legale se nessun operando *) 
73   [ maINH    ⇒ nil ? 
74   | maINHA   ⇒ nil ? 
75   | maINHX   ⇒ nil ? 
76   | maINHH   ⇒ nil ?
77   (* inherent address: legale se nessun operando/1 byte/1 word *)
78   | maINHX0ADD ⇒ nil ?
79   | maINHX1ADD b ⇒ [ TByte m b ]
80   | maINHX2ADD w ⇒ [ TByte m (cnH ? w); TByte m (cnL ? w) ] 
81   (* _0/1/2: legale se nessun operando/1 byte/1 word *)
82   | maIMM1 b ⇒ [ TByte m b ]
83   | maIMM1EXT b ⇒ [ TByte m b ]
84   | maIMM2 w ⇒ [ TByte m (cnH ? w); TByte m (cnL ? w) ]
85   | maDIR1 b ⇒ [ TByte m b ]
86   | maDIR2 w ⇒ [ TByte m (cnH ? w); TByte m (cnL ? w) ]
87   | maIX0    ⇒ nil ?
88   | maIX1 b  ⇒ [ TByte m b ]
89   | maIX2 w  ⇒ [ TByte m (cnH ? w); TByte m (cnL ? w) ]
90   | maSP1 b  ⇒ [ TByte m b ]
91   | maSP2 w  ⇒ [ TByte m (cnH ? w); TByte m (cnL ? w) ]
92   (* movimento: legale se 2 operandi byte *)
93   | maDIR1_to_DIR1 b1 b2  ⇒ [ TByte m b1 ; TByte m b2 ]
94   | maIMM1_to_DIR1 b1 b2  ⇒ [ TByte m b1 ; TByte m b2 ]
95   | maIX0p_to_DIR1 b      ⇒ [ TByte m b]
96   | maDIR1_to_IX0p b      ⇒ [ TByte m b]
97   (* cbeq/dbnz: legale se 1/2 operandi byte *)
98   | maINHA_and_IMM1 b     ⇒ [ TByte m b]
99   | maINHX_and_IMM1 b     ⇒ [ TByte m b]
100   | maIMM1_and_IMM1 b1 b2 ⇒ [ TByte m b1 ; TByte m b2 ]
101   | maDIR1_and_IMM1 b1 b2 ⇒ [ TByte m b1 ; TByte m b2 ]
102   | maIX0_and_IMM1  b     ⇒ [ TByte m b]
103   | maIX0p_and_IMM1 b     ⇒ [ TByte m b]
104   | maIX1_and_IMM1  b1 b2 ⇒ [ TByte m b1 ; TByte m b2 ]
105   | maIX1p_and_IMM1 b1 b2 ⇒ [ TByte m b1 ; TByte m b2 ]
106   | maSP1_and_IMM1  b1 b2 ⇒ [ TByte m b1 ; TByte m b2 ]
107   (* DIRn: legale se 1 operando byte *)
108   | maDIRn _ b ⇒ [ TByte m b]
109   (* DIRn_and_IMM1: legale se 2 operandi byte *)
110   | maDIRn_and_IMM1 _ b1 b2 ⇒ [ TByte m b1 ; TByte m b2 ]
111   (* TNY: legale se nessun operando *)
112   | maTNY _ ⇒ nil ?
113   (* SRT: legale se nessun operando *)
114   | maSRT _ ⇒ nil ?
115   ].