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