* device/lib/Makefile.in: remove abspath for PORTDIR, introduced in
[fw/sdcc] / src / z80 / mappings.i
index 987d4e6077d99ee0ce95dfdc376cb5bad614bacc..43d29afbb726fe089754411a2395c5ca127c33c1 100644 (file)
@@ -3,9 +3,11 @@ static const ASM_MAPPING _asxxxx_gb_mapping[] = {
     { "area", ".area _%s" },
     { "areacode", ".area _%s" },
     { "areadata", ".area _%s" },
+    { "areahome", ".area _%s" },
     { "functionlabeldef", "%s:" },
     { "*hl", "(hl)" },
     { "di", "di" },
+    { "ei", "ei" },
     { "ldahli", "ld a,(hl+)" },
     { "ldahlsp", "lda hl,%d(sp)" },
     { "ldaspsp", "lda sp,%d(sp)" },
@@ -14,18 +16,42 @@ static const ASM_MAPPING _asxxxx_gb_mapping[] = {
     { "enter", "" },
     { "enterx", 
       "lda sp,-%d(sp)" },
+    { "enterxl",
+                "ld hl,#-%d\n"
+                "\tadd\thl,sp\n"
+                "\tld\tsp,hl"
+    },
     { "leave", ""
     },
     { "leavex", "lda sp,%d(sp)"
     },
+    { "leavexl",
+                "ld hl,#%d\n"
+                "\tadd\thl,sp\n"
+                "\tld\tsp,hl"
+    },
     { "pusha", 
       "push af\n"
       "\tpush bc\n"
       "\tpush de\n"
       "\tpush hl"
     },
+    { "popa", 
+      "pop hl\n"
+      "\tpop de\n"
+      "\tpop bc\n"
+      "\tpop af"
+    },
     { "adjustsp", "lda sp,-%d(sp)" },
     { "fileprelude", "" },
+    { "profileenter",
+                "ld a,#3\n"
+                "\trst\t0x08"
+    },
+    { "profileexit",
+                "ld a,#4\n"
+                "\trst\t0x08"
+    },
     { NULL, NULL }
 };
 
@@ -34,10 +60,12 @@ static const ASM_MAPPING _asxxxx_z80_mapping[] = {
     { "area", ".area _%s" },
     { "areacode", ".area _%s" },
     { "areadata", ".area _%s" },
-    { "*ixx", "%d(ix)" },
-    { "*iyx", "%d(iy)" },
+    { "areahome", ".area _%s" },
+    { "*ixx", "%d (ix)" },
+    { "*iyx", "%d (iy)" },
     { "*hl", "(hl)" },
     { "di", "di" },
+    { "ei", "ei" },
     { "ldahli", 
                "ld a,(hl)\n"
                "\tinc\thl" },
@@ -60,26 +88,44 @@ static const ASM_MAPPING _asxxxx_z80_mapping[] = {
                "\tadd\tix,sp\n"
                "\tld\thl,#-%d\n"
                "\tadd\thl,sp\n"
-               "\tld\tsp,hl" },
+               "\tld\tsp,hl" 
+        },
     { "leave", 
-               "pop\tix\n"
+               "pop\tix"
     },
     { "leavex", 
                "ld sp,ix\n"
-               "\tpop\tix\n"
+               "\tpop\tix"
     },
     { "pusha", 
                "push af\n"
                "\tpush\tbc\n"
                "\tpush\tde\n"
-               "\tpush\thl"
+               "\tpush\thl\n"
+               "\tpush\tiy"
+    },
+    { "popa",
+               "pop iy\n"
+               "\tpop\thl\n"
+               "\tpop\tde\n"
+               "\tpop\tbc\n"
+               "\tpop\taf"
     },
     { "adjustsp", "lda sp,-%d(sp)" },
+    { "profileenter",
+                "ld a,#3\n"
+                "\trst\t0x08"
+    },
+    { "profileexit",
+                "ld a,#4\n"
+                "\trst\t0x08"
+    },
     { NULL, NULL }
 };
 
 static const ASM_MAPPING _rgbds_mapping[] = {
     { "global", "GLOBAL %s" },
+    { "extern", "GLOBAL %s" },
     { "slabeldef", "%s:" },
     { "labeldef", "%s:" },
     { "tlabeldef", ".l%05d:" },
@@ -89,8 +135,7 @@ static const ASM_MAPPING _rgbds_mapping[] = {
       "\t; We have to define these here as sdcc dosnt make them global by default\n"
       "\tGLOBAL __mulschar\n"
       "\tGLOBAL __muluchar\n"
-      "\tGLOBAL __mulsint\n"
-      "\tGLOBAL __muluint\n"
+      "\tGLOBAL __mulint\n"
       "\tGLOBAL __divschar\n"
       "\tGLOBAL __divuchar\n"
       "\tGLOBAL __divsint\n"
@@ -99,7 +144,7 @@ static const ASM_MAPPING _rgbds_mapping[] = {
       "\tGLOBAL __moduchar\n"
       "\tGLOBAL __modsint\n"
       "\tGLOBAL __moduint\n"
-      "\tGLOBAL __mulslong\n"  
+      "\tGLOBAL __mullong\n"  
       "\tGLOBAL __modslong\n"  
       "\tGLOBAL __divslong\n"  
       "\tGLOBAL banked_call\n"
@@ -113,9 +158,10 @@ static const ASM_MAPPING _rgbds_mapping[] = {
     { "functionlabeldef", "%s:" },
     { "zero", "$00" },
     { "one", "$01" },
-    { "area", "SECTION \"%s_%F_%I\",%C" },
-    { "areacode", "SECTION \"CODE\",%C" },
-    { "areadata", "SECTION \"DATA\",BSS" },
+    { "area", "SECTION \"%s\",CODE" },
+    { "areadata", "SECTION \"%F_%s\",BSS" },
+    { "areacode", "SECTION \"%F_CODE\",%s" }, 
+    { "areahome", "SECTION \"%F_HOME\",HOME" },
     { "ascii", "DB \"%s\"" },
     { "ds", "DS %d" },
     { "db", "DB" },
@@ -142,7 +188,14 @@ static const ASM_MAPPING _rgbds_gb_mapping[] = {
       "\tpush de\n"
       "\tpush hl"
     },
+    { "popa", 
+      "pop hl\n"
+      "\tpop de\n"
+      "\tpop bc\n"
+      "\tpop af"
+    },
     { "di", "di" },
+    { "ei", "ei" },
     { "adjustsp", "add sp,-%d" },
     { "enter", "" },
     { "enterx", "add sp,-%d"
@@ -162,6 +215,7 @@ static const ASM_MAPPING _rgbds_gb_mapping[] = {
 
 static const ASM_MAPPING _isas_mapping[] = {
     { "global", "GLOBAL %s" },
+    { "extern", "GLOBAL %s" },
     { "slabeldef", "%s:" },
     { "labeldef", "%s:" },
     { "tlabeldef", "?l%05d:" },
@@ -173,11 +227,10 @@ static const ASM_MAPPING _isas_mapping[] = {
       "\tCAPSOFF      ; Case sensitive\n"
       "\tISDMG        ; Gameboy mode\n"
       "_CODE\tGROUP\n"
-      "\t; We have to define these here as sdcc dosnt make them global by default\n"
+      "\t; We have to define these here as sdcc doesnt make them global by default\n"
       "\tGLOBAL __mulschar\n"
       "\tGLOBAL __muluchar\n"
-      "\tGLOBAL __mulsint\n"
-      "\tGLOBAL __muluint\n"
+      "\tGLOBAL __mulint\n"
       "\tGLOBAL __divschar\n"
       "\tGLOBAL __divuchar\n"
       "\tGLOBAL __divsint\n"
@@ -200,6 +253,7 @@ static const ASM_MAPPING _isas_mapping[] = {
     { "area", "%s\tGROUP" },
     { "areacode", "_CODE\tGROUP" },
     { "areadata", "_DATA\tGROUP" },
+    { "areahome", "_CODE\tGROUP" },
     { "ascii", "DB \"%s\"" },
     { "ds", "DS %d" },
     { "db", "DB" },
@@ -226,7 +280,14 @@ static const ASM_MAPPING _isas_gb_mapping[] = {
       "\tpush de\n"
       "\tpush hl"
     },
+    { "popa", 
+      "pop hl\n"
+      "\tpop de\n"
+      "\tpop bc\n"
+      "\tpop af"
+    },
     { "di", "di" },
+    { "ei", "ei" },
     { "adjustsp", "add sp,-%d" },
     { "enter", "" },
     { "enterx", "add sp,-%d"
@@ -243,6 +304,125 @@ static const ASM_MAPPING _isas_gb_mapping[] = {
     { NULL, NULL }
 };
 
+static const ASM_MAPPING _z80asm_mapping[] = {
+    { "global", "XDEF %s" },
+    { "extern", "XREF %s" },
+    { "slabeldef", "\n.%s" },
+    { "labeldef", "\n.%s" },
+    { "tlabeldef", "\n.l%N%05d" },
+    { "tlabel", "l%N%05d" },
+    { "fileprelude", 
+        "; Generated using the z80asm/z88 tokens.\n"
+        "\tXREF __muluchar_rrx_s\n"
+        "\tXREF __mulschar_rrx_s\n"
+        "\tXREF __mulint_rrx_s\n"
+        "\tXREF __mullong_rrx_s\n"
+        "\tXREF __divuchar_rrx_s\n"
+        "\tXREF __divschar_rrx_s\n"
+        "\tXREF __divsint_rrx_s\n"
+        "\tXREF __divuint_rrx_s\n"
+        "\tXREF __divulong_rrx_s\n"
+        "\tXREF __divslong_rrx_s\n"
+        "\tXREF __rrulong_rrx_s\n"
+        "\tXREF __rrslong_rrx_s\n"
+        "\tXREF __rlulong_rrx_s\n"
+        "\tXREF __rlslong_rrx_s\n"
+    },
+    { "functionheader", 
+      "; ---------------------------------\n"
+      "; Function %s\n"
+      "; ---------------------------------"
+    },
+    { "functionlabeldef", ".%s" },
+    { "zero", "$00" },
+    { "one", "$01" },
+    { "ascii", "DEFM \"%s\"" },
+    { "ds", "DEFS %d" },
+    { "db", "DEFB" },
+    { "dbs", "DEFB %s" },
+    { "dw", "DEFW" },
+    { "dws", "DEFB %s" },
+    { "immed", "" },
+    { "constbyte", "$%02X" },
+    { "constword", "$%04X" },
+    { "immedword", "$%04X" },
+    { "immedbyte", "$%02X" },
+    { "hashedstr", "%s" },
+    { "lsbimmeds", "%s & $FF" },
+    { "msbimmeds", "%s / 256" },
+
+    { "bankimmeds", "BANK(%s)" },
+    { "module", "MODULE %s" },
+    { "area", "; Area  %s" },
+    { "areadata", "; Aread BSS" },
+    { "areacode", "; Area CODE" }, 
+    { "areahome", "; Area HOME" },
+    { NULL, NULL }
+};
+
+static const ASM_MAPPING _z80asm_z80_mapping[] = {
+    { "*ixx", "(ix%+d)" },
+    { "*iyx", "(iy%+d)" },
+    { "*hl", "(hl)" },
+    { "di", "di" },
+    { "ei", "ei" },
+    { "ldahli", 
+               "ld a,(hl)\n"
+               "\tinc\thl" },
+    { "ldahlsp", 
+               "ld hl,%d\n"
+               "\tadd\thl,sp" },
+    { "ldaspsp", 
+               "ld hl,%d\n"
+               "\tadd\thl,sp\n"
+               "\tld\tsp,hl" },
+    { "*pair", "(%s)" },
+    { "shortjp", "jp" },
+    { "enter", 
+               "push\tix\n"
+               "\tld\tix,0\n"
+               "\tadd\tix,sp" },
+    { "enterx", 
+               "push\tix\n"
+               "\tld\tix,0\n"
+               "\tadd\tix,sp\n"
+               "\tld\thl,-%d\n"
+               "\tadd\thl,sp\n"
+               "\tld\tsp,hl" 
+        },
+    { "leave", 
+               "pop\tix"
+    },
+    { "leavex", 
+               "ld sp,ix\n"
+               "\tpop\tix"
+    },
+    { "pusha", 
+               "push af\n"
+               "\tpush\tbc\n"
+               "\tpush\tde\n"
+               "\tpush\thl\n"
+               "\tpush\tiy"
+    },
+    { "popa", 
+               "pop\tiy\n"
+               "\tpop\thl\n"
+               "\tpop\tde\n"
+               "\tpop\tbc\n"
+               "\tpop\taf"
+    },
+    { "adjustsp", "lda sp,(sp%+d)" },
+    { "profileenter",
+                "ld a,3\n"
+                "\trst\t$08"
+    },
+    { "profileexit",
+                "ld a,4\n"
+                "\trst\t$08"
+    },
+    { NULL, NULL }
+};
+
 static const ASM_MAPPINGS _isas = {
     NULL,
     _isas_mapping
@@ -272,3 +452,13 @@ const ASM_MAPPINGS _asxxxx_z80 = {
     &asm_asxxxx_mapping,
     _asxxxx_z80_mapping
 };
+
+static const ASM_MAPPINGS _z80asm = {
+    NULL,
+    _z80asm_mapping
+};
+
+const ASM_MAPPINGS _z80asm_z80 = {
+    &_z80asm,
+    _z80asm_z80_mapping
+};