/* ....[@@@..[@@@..............[@.................. MUD++ is a written from ....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and ....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++. ....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing ....[@......[@..[@@@@@..[@@@@@.................. development project. All ................................................ contributions are welcome. ....Copyright(C).1995.Melvin.Smith.............. Enjoy. ------------------------------------------------------------------------------ Melvin Smith (aka Fusion) msmith@hom.net MUD++ development mailing list mudpp@van.ml.org ------------------------------------------------------------------------------ asmparser.h */ #ifndef _ASMPARSER_H #define _ASMPARSER_H #include "string.h" #include "io.h" #include "llist.h" #include "array.h" #include "asmobjfile.h" class AsmParser; struct _parser_table { char * name; u8 opcode; bool (AsmParser::*mnem2code) (memorycell); int (AsmParser::*code2mnem) (const memorycell*, String & str); // in-memory debugging stuff to be added }; typedef struct { String name; u16 adress; Array< int > to_resolve; } label; class AsmParser { protected: StaticInput * inf; Output * outf; AsmObjFile * obj; LList< label > labels; Array< String > locals; Array< int > shortjumps; int args_count; int vars_count; int funstart; char funname[256]; bool infun; u16 getLabel(char * name, int adress); void setLabel(char * name, int adress); int readConstant(); void readVariable(); int lookupLocal( const char * txt ); u8 parseConditions(const char *); void setAbsoluteJump( int point, int to ); void clearLabels(); bool read_jump(memorycell cell); bool read_cond_jump(memorycell cell); bool read_cond_local_var_jump(memorycell cell); bool read_local_var(memorycell cell); bool read_local_var_int(memorycell cell); bool read_local_var_float(memorycell cell); bool read_local_var_constant(memorycell cell); bool read_fun_call(memorycell cell); bool read_interface_call(memorycell cell); bool read_unknown_call(memorycell cell); bool read_const(memorycell cell); bool read_static(memorycell cell); bool read_u8(memorycell cell); bool read_u16(memorycell cell); bool read_s16(memorycell cell); bool read_s32(memorycell cell); bool read_float(memorycell cell); bool read_ilookupswitch( memorycell cell ); bool read_slookupswitch( memorycell cell ); bool read_itableswitch( memorycell cell ); bool read_field( memorycell cell ); bool read_classname( memorycell cell ); bool paramless(memorycell cell); public: AsmParser() : inf(0), outf(0), obj(0), funstart(0), infun(false) {} int parse(StaticInput & inf, Output & outf); static struct _parser_table parser_table[]; }; const char * lookupOpcodeName( u8 opc ); #endif