Search
lxdream.org :: lxdream/src/tools/gendec.h
lxdream 0.9.1
released Jun 29
Download Now
filename src/tools/gendec.h
changeset 359:c588dce7ebde
next420:e6f43dec3cf0
author nkeynes
date Thu Aug 23 12:33:27 2007 +0000 (15 years ago)
permissions -rw-r--r--
last change Commit decoder generator
Translator work in progress
Fix mac.l, mac.w in emu core
view annotate diff log raw
     1 /**
     2  * $Id: gendec.h,v 1.1 2007-08-23 12:33:27 nkeynes Exp $
     3  *
     4  * mem is responsible for creating and maintaining the overall system memory
     5  * map, as visible from the SH4 processor. (Note the ARM has a different map)
     6  *
     7  * Copyright (c) 2005 Nathan Keynes.
     8  *
     9  * This program is free software; you can redistribute it and/or modify
    10  * it under the terms of the GNU General Public License as published by
    11  * the Free Software Foundation; either version 2 of the License, or
    12  * (at your option) any later version.
    13  *
    14  * This program is distributed in the hope that it will be useful,
    15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    17  * GNU General Public License for more details.
    18  */
    20 #ifndef gendec_H
    21 #define gendec_H
    23 #include <stdint.h>
    25 #ifdef __cplusplus
    26 extern "C" {
    27 #endif
    29 #define MAX_OPERAND_NAME 8
    30 #define MAX_OPERANDS 4
    31 #define MAX_OPERATION_FORMAT 64
    32 #define MAX_RULES 512
    34 #define USE_NONE 0
    35 #define USE_READ 1
    36 #define USE_WRITE 2
    37 #define USE_READWRITE 3
    39 struct operand {
    40     int bit_count;
    41     int bit_shift;
    42     int left_shift;
    43     int is_signed;
    44     int use_mode;
    45     char name[MAX_OPERAND_NAME+1];
    46 };
    48 struct rule {
    49     uint32_t bits;
    50     uint32_t mask;
    51     int bit_count;
    52     int operand_count;
    53     int flags_use_mode;
    54     struct operand operands[MAX_OPERANDS];
    55     char format[MAX_OPERATION_FORMAT+1];
    56 };
    58 struct ruleset {
    59     uint32_t rule_count;
    60     struct rule *rules[MAX_RULES];
    61 };
    63 struct ruleset *parse_ruleset_file( FILE *f );
    64     void dump_ruleset( struct ruleset *rules, FILE *f );
    66 struct action {
    67     char operand_names[MAX_OPERANDS][MAX_OPERAND_NAME+1];
    68     char *body;
    69 };
    71 struct actionset {
    72     char *pretext;
    73     char *posttext;
    74     char *actions[MAX_RULES];
    75 };
    77 struct actionset *parse_action_file( struct ruleset *rules, FILE *f );
    79 int generate_decoder( struct ruleset *rules, struct actionset *actions, FILE *f );
    81 #ifdef __cplusplus
    82 }
    83 #endif
    84 #endif
.