1*3d8817e4Smiod /* pyramid.opcode.h -- gdb initial attempt. 2*3d8817e4Smiod 3*3d8817e4Smiod Copyright 2001 Free Software Foundation, Inc. 4*3d8817e4Smiod 5*3d8817e4Smiod This program is free software; you can redistribute it and/or modify 6*3d8817e4Smiod it under the terms of the GNU General Public License as published by 7*3d8817e4Smiod the Free Software Foundation; either version 2, or (at your option) 8*3d8817e4Smiod any later version. 9*3d8817e4Smiod 10*3d8817e4Smiod This program is distributed in the hope that it will be useful, 11*3d8817e4Smiod but WITHOUT ANY WARRANTY; without even the implied warranty of 12*3d8817e4Smiod MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*3d8817e4Smiod GNU General Public License for more details. 14*3d8817e4Smiod 15*3d8817e4Smiod You should have received a copy of the GNU General Public License 16*3d8817e4Smiod along with this program; if not, write to the Free Software 17*3d8817e4Smiod Foundation, Inc., 51 Franklin Street - Fifth Floor, 18*3d8817e4Smiod Boston, MA 02110-1301, USA. */ 19*3d8817e4Smiod 20*3d8817e4Smiod /* pyramid opcode table: wot to do with this 21*3d8817e4Smiod particular opcode */ 22*3d8817e4Smiod 23*3d8817e4Smiod struct pyr_datum 24*3d8817e4Smiod { 25*3d8817e4Smiod char nargs; 26*3d8817e4Smiod char * args; /* how to compile said opcode */ 27*3d8817e4Smiod unsigned long mask; /* Bit vector: which operand modes are valid 28*3d8817e4Smiod for this opcode */ 29*3d8817e4Smiod unsigned char code; /* op-code (always 6(?) bits */ 30*3d8817e4Smiod }; 31*3d8817e4Smiod 32*3d8817e4Smiod typedef struct pyr_insn_format 33*3d8817e4Smiod { 34*3d8817e4Smiod unsigned int mode :4; 35*3d8817e4Smiod unsigned int operator :8; 36*3d8817e4Smiod unsigned int index_scale :2; 37*3d8817e4Smiod unsigned int index_reg :6; 38*3d8817e4Smiod unsigned int operand_1 :6; 39*3d8817e4Smiod unsigned int operand_2:6; 40*3d8817e4Smiod } pyr_insn_format; 41*3d8817e4Smiod 42*3d8817e4Smiod 43*3d8817e4Smiod /* We store four bytes of opcode for all opcodes. 44*3d8817e4Smiod Pyramid is sufficiently RISCy that: 45*3d8817e4Smiod - insns are always an integral number of words; 46*3d8817e4Smiod - the length of any insn can be told from the first word of 47*3d8817e4Smiod the insn. (ie, if there are zero, one, or two words of 48*3d8817e4Smiod immediate operand/offset). 49*3d8817e4Smiod 50*3d8817e4Smiod 51*3d8817e4Smiod The args component is a string containing two characters for each 52*3d8817e4Smiod operand of the instruction. The first specifies the kind of operand; 53*3d8817e4Smiod the second, the place it is stored. */ 54*3d8817e4Smiod 55*3d8817e4Smiod /* Kinds of operands: 56*3d8817e4Smiod mask assembler syntax description 57*3d8817e4Smiod 0x0001: movw Rn,Rn register to register 58*3d8817e4Smiod 0x0002: movw K,Rn quick immediate to register 59*3d8817e4Smiod 0x0004: movw I,Rn long immediate to register 60*3d8817e4Smiod 0x0008: movw (Rn),Rn register indirect to register 61*3d8817e4Smiod movw (Rn)[x],Rn register indirect to register 62*3d8817e4Smiod 0x0010: movw I(Rn),Rn offset register indirect to register 63*3d8817e4Smiod movw I(Rn)[x],Rn offset register indirect, indexed, to register 64*3d8817e4Smiod 65*3d8817e4Smiod 0x0020: movw Rn,(Rn) register to register indirect 66*3d8817e4Smiod 0x0040: movw K,(Rn) quick immediate to register indirect 67*3d8817e4Smiod 0x0080: movw I,(Rn) long immediate to register indirect 68*3d8817e4Smiod 0x0100: movw (Rn),(Rn) register indirect to-register indirect 69*3d8817e4Smiod 0x0100: movw (Rn),(Rn) register indirect to-register indirect 70*3d8817e4Smiod 0x0200: movw I(Rn),(Rn) register indirect+offset to register indirect 71*3d8817e4Smiod 0x0200: movw I(Rn),(Rn) register indirect+offset to register indirect 72*3d8817e4Smiod 73*3d8817e4Smiod 0x0400: movw Rn,I(Rn) register to register indirect+offset 74*3d8817e4Smiod 0x0800: movw K,I(Rn) quick immediate to register indirect+offset 75*3d8817e4Smiod 0x1000: movw I,I(Rn) long immediate to register indirect+offset 76*3d8817e4Smiod 0x1000: movw (Rn),I(Rn) register indirect to-register indirect+offset 77*3d8817e4Smiod 0x1000: movw I(Rn),I(Rn) register indirect+offset to register indirect 78*3d8817e4Smiod +offset 79*3d8817e4Smiod 0x0000: (irregular) ??? 80*3d8817e4Smiod 81*3d8817e4Smiod 82*3d8817e4Smiod Each insn has a four-bit field encoding the type(s) of its operands. 83*3d8817e4Smiod */ 84*3d8817e4Smiod 85*3d8817e4Smiod /* Some common combinations 86*3d8817e4Smiod */ 87*3d8817e4Smiod 88*3d8817e4Smiod /* the first 5,(0x1|0x2|0x4|0x8|0x10) ie (1|2|4|8|16), ie ( 32 -1)*/ 89*3d8817e4Smiod #define GEN_TO_REG (31) 90*3d8817e4Smiod 91*3d8817e4Smiod #define UNKNOWN ((unsigned long)-1) 92*3d8817e4Smiod #define ANY (GEN_TO_REG | (GEN_TO_REG << 5) | (GEN_TO_REG << 15)) 93*3d8817e4Smiod 94*3d8817e4Smiod #define CONVERT (1|8|0x10|0x20|0x200) 95*3d8817e4Smiod 96*3d8817e4Smiod #define K_TO_REG (2) 97*3d8817e4Smiod #define I_TO_REG (4) 98*3d8817e4Smiod #define NOTK_TO_REG (GEN_TO_REG & ~K_TO_REG) 99*3d8817e4Smiod #define NOTI_TO_REG (GEN_TO_REG & ~I_TO_REG) 100*3d8817e4Smiod 101*3d8817e4Smiod /* The assembler requires that this array be sorted as follows: 102*3d8817e4Smiod all instances of the same mnemonic must be consecutive. 103*3d8817e4Smiod All instances of the same mnemonic with the same number of operands 104*3d8817e4Smiod must be consecutive. 105*3d8817e4Smiod */ 106*3d8817e4Smiod 107*3d8817e4Smiod struct pyr_opcode /* pyr opcode text */ 108*3d8817e4Smiod { 109*3d8817e4Smiod char * name; /* opcode name: lowercase string [key] */ 110*3d8817e4Smiod struct pyr_datum datum; /* rest of opcode table [datum] */ 111*3d8817e4Smiod }; 112*3d8817e4Smiod 113*3d8817e4Smiod #define pyr_how args 114*3d8817e4Smiod #define pyr_nargs nargs 115*3d8817e4Smiod #define pyr_mask mask 116*3d8817e4Smiod #define pyr_name name 117*3d8817e4Smiod 118*3d8817e4Smiod struct pyr_opcode pyr_opcodes[] = 119*3d8817e4Smiod { 120*3d8817e4Smiod {"movb", { 2, "", UNKNOWN, 0x11}, }, 121*3d8817e4Smiod {"movh", { 2, "", UNKNOWN, 0x12} }, 122*3d8817e4Smiod {"movw", { 2, "", ANY, 0x10} }, 123*3d8817e4Smiod {"movl", { 2, "", ANY, 0x13} }, 124*3d8817e4Smiod {"mnegw", { 2, "", (0x1|0x8|0x10), 0x14} }, 125*3d8817e4Smiod {"mnegf", { 2, "", 0x1, 0x15} }, 126*3d8817e4Smiod {"mnegd", { 2, "", 0x1, 0x16} }, 127*3d8817e4Smiod {"mcomw", { 2, "", (0x1|0x8|0x10), 0x17} }, 128*3d8817e4Smiod {"mabsw", { 2, "", (0x1|0x8|0x10), 0x18} }, 129*3d8817e4Smiod {"mabsf", { 2, "", 0x1, 0x19} }, 130*3d8817e4Smiod {"mabsd", { 2, "", 0x1, 0x1a} }, 131*3d8817e4Smiod {"mtstw", { 2, "", (0x1|0x8|0x10), 0x1c} }, 132*3d8817e4Smiod {"mtstf", { 2, "", 0x1, 0x1d} }, 133*3d8817e4Smiod {"mtstd", { 2, "", 0x1, 0x1e} }, 134*3d8817e4Smiod {"mova", { 2, "", 0x8|0x10, 0x1f} }, 135*3d8817e4Smiod {"movzbw", { 2, "", (0x1|0x8|0x10), 0x20} }, 136*3d8817e4Smiod {"movzhw", { 2, "", (0x1|0x8|0x10), 0x21} }, 137*3d8817e4Smiod /* 2 insns out of order here */ 138*3d8817e4Smiod {"movbl", { 2, "", 1, 0x4f} }, 139*3d8817e4Smiod {"filbl", { 2, "", 1, 0x4e} }, 140*3d8817e4Smiod 141*3d8817e4Smiod {"cvtbw", { 2, "", CONVERT, 0x22} }, 142*3d8817e4Smiod {"cvthw", { 2, "", CONVERT, 0x23} }, 143*3d8817e4Smiod {"cvtwb", { 2, "", CONVERT, 0x24} }, 144*3d8817e4Smiod {"cvtwh", { 2, "", CONVERT, 0x25} }, 145*3d8817e4Smiod {"cvtwf", { 2, "", CONVERT, 0x26} }, 146*3d8817e4Smiod {"cvtwd", { 2, "", CONVERT, 0x27} }, 147*3d8817e4Smiod {"cvtfw", { 2, "", CONVERT, 0x28} }, 148*3d8817e4Smiod {"cvtfd", { 2, "", CONVERT, 0x29} }, 149*3d8817e4Smiod {"cvtdw", { 2, "", CONVERT, 0x2a} }, 150*3d8817e4Smiod {"cvtdf", { 2, "", CONVERT, 0x2b} }, 151*3d8817e4Smiod 152*3d8817e4Smiod {"addw", { 2, "", GEN_TO_REG, 0x40} }, 153*3d8817e4Smiod {"addwc", { 2, "", GEN_TO_REG, 0x41} }, 154*3d8817e4Smiod {"subw", { 2, "", GEN_TO_REG, 0x42} }, 155*3d8817e4Smiod {"subwb", { 2, "", GEN_TO_REG, 0x43} }, 156*3d8817e4Smiod {"rsubw", { 2, "", GEN_TO_REG, 0x44} }, 157*3d8817e4Smiod {"mulw", { 2, "", GEN_TO_REG, 0x45} }, 158*3d8817e4Smiod {"emul", { 2, "", GEN_TO_REG, 0x47} }, 159*3d8817e4Smiod {"umulw", { 2, "", GEN_TO_REG, 0x46} }, 160*3d8817e4Smiod {"divw", { 2, "", GEN_TO_REG, 0x48} }, 161*3d8817e4Smiod {"ediv", { 2, "", GEN_TO_REG, 0x4a} }, 162*3d8817e4Smiod {"rdivw", { 2, "", GEN_TO_REG, 0x4b} }, 163*3d8817e4Smiod {"udivw", { 2, "", GEN_TO_REG, 0x49} }, 164*3d8817e4Smiod {"modw", { 2, "", GEN_TO_REG, 0x4c} }, 165*3d8817e4Smiod {"umodw", { 2, "", GEN_TO_REG, 0x4d} }, 166*3d8817e4Smiod 167*3d8817e4Smiod 168*3d8817e4Smiod {"addf", { 2, "", 1, 0x50} }, 169*3d8817e4Smiod {"addd", { 2, "", 1, 0x51} }, 170*3d8817e4Smiod {"subf", { 2, "", 1, 0x52} }, 171*3d8817e4Smiod {"subd", { 2, "", 1, 0x53} }, 172*3d8817e4Smiod {"mulf", { 2, "", 1, 0x56} }, 173*3d8817e4Smiod {"muld", { 2, "", 1, 0x57} }, 174*3d8817e4Smiod {"divf", { 2, "", 1, 0x58} }, 175*3d8817e4Smiod {"divd", { 2, "", 1, 0x59} }, 176*3d8817e4Smiod 177*3d8817e4Smiod 178*3d8817e4Smiod {"cmpb", { 2, "", UNKNOWN, 0x61} }, 179*3d8817e4Smiod {"cmph", { 2, "", UNKNOWN, 0x62} }, 180*3d8817e4Smiod {"cmpw", { 2, "", UNKNOWN, 0x60} }, 181*3d8817e4Smiod {"ucmpb", { 2, "", UNKNOWN, 0x66} }, 182*3d8817e4Smiod /* WHY no "ucmph"??? */ 183*3d8817e4Smiod {"ucmpw", { 2, "", UNKNOWN, 0x65} }, 184*3d8817e4Smiod {"xchw", { 2, "", UNKNOWN, 0x0f} }, 185*3d8817e4Smiod 186*3d8817e4Smiod 187*3d8817e4Smiod {"andw", { 2, "", GEN_TO_REG, 0x30} }, 188*3d8817e4Smiod {"orw", { 2, "", GEN_TO_REG, 0x31} }, 189*3d8817e4Smiod {"xorw", { 2, "", GEN_TO_REG, 0x32} }, 190*3d8817e4Smiod {"bicw", { 2, "", GEN_TO_REG, 0x33} }, 191*3d8817e4Smiod {"lshlw", { 2, "", GEN_TO_REG, 0x38} }, 192*3d8817e4Smiod {"ashlw", { 2, "", GEN_TO_REG, 0x3a} }, 193*3d8817e4Smiod {"ashll", { 2, "", GEN_TO_REG, 0x3c} }, 194*3d8817e4Smiod {"ashrw", { 2, "", GEN_TO_REG, 0x3b} }, 195*3d8817e4Smiod {"ashrl", { 2, "", GEN_TO_REG, 0x3d} }, 196*3d8817e4Smiod {"rotlw", { 2, "", GEN_TO_REG, 0x3e} }, 197*3d8817e4Smiod {"rotrw", { 2, "", GEN_TO_REG, 0x3f} }, 198*3d8817e4Smiod 199*3d8817e4Smiod /* push and pop insns are "going away next release". */ 200*3d8817e4Smiod {"pushw", { 2, "", GEN_TO_REG, 0x0c} }, 201*3d8817e4Smiod {"popw", { 2, "", (0x1|0x8|0x10), 0x0d} }, 202*3d8817e4Smiod {"pusha", { 2, "", (0x8|0x10), 0x0e} }, 203*3d8817e4Smiod 204*3d8817e4Smiod {"bitsw", { 2, "", UNKNOWN, 0x35} }, 205*3d8817e4Smiod {"bitcw", { 2, "", UNKNOWN, 0x36} }, 206*3d8817e4Smiod /* some kind of ibra/dbra insns??*/ 207*3d8817e4Smiod {"icmpw", { 2, "", UNKNOWN, 0x67} }, 208*3d8817e4Smiod {"dcmpw", { 2, "", (1|4|0x20|0x80|0x400|0x1000), 0x69} },/*FIXME*/ 209*3d8817e4Smiod {"acmpw", { 2, "", 1, 0x6b} }, 210*3d8817e4Smiod 211*3d8817e4Smiod /* Call is written as a 1-op insn, but is always (dis)assembled as a 2-op 212*3d8817e4Smiod insn with a 2nd op of tr14. The assembler will have to grok this. */ 213*3d8817e4Smiod {"call", { 2, "", GEN_TO_REG, 0x04} }, 214*3d8817e4Smiod {"call", { 1, "", GEN_TO_REG, 0x04} }, 215*3d8817e4Smiod 216*3d8817e4Smiod {"callk", { 1, "", UNKNOWN, 0x06} },/* system call?*/ 217*3d8817e4Smiod /* Ret is usually written as a 0-op insn, but gets disassembled as a 218*3d8817e4Smiod 1-op insn. The operand is always tr15. */ 219*3d8817e4Smiod {"ret", { 0, "", UNKNOWN, 0x09} }, 220*3d8817e4Smiod {"ret", { 1, "", UNKNOWN, 0x09} }, 221*3d8817e4Smiod {"adsf", { 2, "", (1|2|4), 0x08} }, 222*3d8817e4Smiod {"retd", { 2, "", UNKNOWN, 0x0a} }, 223*3d8817e4Smiod {"btc", { 2, "", UNKNOWN, 0x01} }, 224*3d8817e4Smiod {"bfc", { 2, "", UNKNOWN, 0x02} }, 225*3d8817e4Smiod /* Careful: halt is 0x00000000. Jump must have some other (mode?)bit set?? */ 226*3d8817e4Smiod {"jump", { 1, "", UNKNOWN, 0x00} }, 227*3d8817e4Smiod {"btp", { 2, "", UNKNOWN, 0xf00} }, 228*3d8817e4Smiod /* read control-stack pointer is another 1-or-2 operand insn. */ 229*3d8817e4Smiod {"rcsp", { 2, "", UNKNOWN, 0x01f} }, 230*3d8817e4Smiod {"rcsp", { 1, "", UNKNOWN, 0x01f} } 231*3d8817e4Smiod }; 232*3d8817e4Smiod 233*3d8817e4Smiod /* end: pyramid.opcode.h */ 234*3d8817e4Smiod /* One day I will have to take the time to find out what operands 235*3d8817e4Smiod are valid for these insns, and guess at what they mean. 236*3d8817e4Smiod 237*3d8817e4Smiod I can't imagine what the "I???" insns (iglob, etc) do. 238*3d8817e4Smiod 239*3d8817e4Smiod the arithmetic-sounding insns ending in "p" sound awfully like BCD 240*3d8817e4Smiod arithmetic insns: 241*3d8817e4Smiod dshlp -> Decimal SHift Left Packed 242*3d8817e4Smiod dshrp -> Decimal SHift Right Packed 243*3d8817e4Smiod and cvtlp would be convert long to packed. 244*3d8817e4Smiod I have no idea how the operands are interpreted; but having them be 245*3d8817e4Smiod a long register with (address, length) of an in-memory packed BCD operand 246*3d8817e4Smiod would not be surprising. 247*3d8817e4Smiod They are unlikely to be a packed bcd string: 64 bits of long give 248*3d8817e4Smiod is only 15 digits+sign, which isn't enough for COBOL. 249*3d8817e4Smiod */ 250*3d8817e4Smiod #if 0 251*3d8817e4Smiod {"wcsp", { 2, "", UNKNOWN, 0x00} }, /*write csp?*/ 252*3d8817e4Smiod /* The OSx Operating System Porting Guide claims SSL does things 253*3d8817e4Smiod with tr12 (a register reserved to it) to do with static block-structure 254*3d8817e4Smiod references. SSL=Set Static Link? It's "Going away next release". */ 255*3d8817e4Smiod {"ssl", { 2, "", UNKNOWN, 0x00} }, 256*3d8817e4Smiod {"ccmps", { 2, "", UNKNOWN, 0x00} }, 257*3d8817e4Smiod {"lcd", { 2, "", UNKNOWN, 0x00} }, 258*3d8817e4Smiod {"uemul", { 2, "", UNKNOWN, 0x00} }, /*unsigned emul*/ 259*3d8817e4Smiod {"srf", { 2, "", UNKNOWN, 0x00} }, /*Gidget time???*/ 260*3d8817e4Smiod {"mnegp", { 2, "", UNKNOWN, 0x00} }, /move-neg phys?*/ 261*3d8817e4Smiod {"ldp", { 2, "", UNKNOWN, 0x00} }, /*load phys?*/ 262*3d8817e4Smiod {"ldti", { 2, "", UNKNOWN, 0x00} }, 263*3d8817e4Smiod {"ldb", { 2, "", UNKNOWN, 0x00} }, 264*3d8817e4Smiod {"stp", { 2, "", UNKNOWN, 0x00} }, 265*3d8817e4Smiod {"stti", { 2, "", UNKNOWN, 0x00} }, 266*3d8817e4Smiod {"stb", { 2, "", UNKNOWN, 0x00} }, 267*3d8817e4Smiod {"stu", { 2, "", UNKNOWN, 0x00} }, 268*3d8817e4Smiod {"addp", { 2, "", UNKNOWN, 0x00} }, 269*3d8817e4Smiod {"subp", { 2, "", UNKNOWN, 0x00} }, 270*3d8817e4Smiod {"mulp", { 2, "", UNKNOWN, 0x00} }, 271*3d8817e4Smiod {"divp", { 2, "", UNKNOWN, 0x00} }, 272*3d8817e4Smiod {"dshlp", { 2, "", UNKNOWN, 0x00} }, /* dec shl packed? */ 273*3d8817e4Smiod {"dshrp", { 2, "", UNKNOWN, 0x00} }, /* dec shr packed? */ 274*3d8817e4Smiod {"movs", { 2, "", UNKNOWN, 0x00} }, /*move (string?)?*/ 275*3d8817e4Smiod {"cmpp", { 2, "", UNKNOWN, 0x00} }, /* cmp phys?*/ 276*3d8817e4Smiod {"cmps", { 2, "", UNKNOWN, 0x00} }, /* cmp (string?)?*/ 277*3d8817e4Smiod {"cvtlp", { 2, "", UNKNOWN, 0x00} }, /* cvt long to p??*/ 278*3d8817e4Smiod {"cvtpl", { 2, "", UNKNOWN, 0x00} }, /* cvt p to l??*/ 279*3d8817e4Smiod {"dintr", { 2, "", UNKNOWN, 0x00} }, /* ?? intr ?*/ 280*3d8817e4Smiod {"rphysw", { 2, "", UNKNOWN, 0x00} }, /* read phys word?*/ 281*3d8817e4Smiod {"wphysw", { 2, "", UNKNOWN, 0x00} }, /* write phys word?*/ 282*3d8817e4Smiod {"cmovs", { 2, "", UNKNOWN, 0x00} }, 283*3d8817e4Smiod {"rsubw", { 2, "", UNKNOWN, 0x00} }, 284*3d8817e4Smiod {"bicpsw", { 2, "", UNKNOWN, 0x00} }, /* clr bit in psw? */ 285*3d8817e4Smiod {"bispsw", { 2, "", UNKNOWN, 0x00} }, /* set bit in psw? */ 286*3d8817e4Smiod {"eio", { 2, "", UNKNOWN, 0x00} }, /* ?? ?io ? */ 287*3d8817e4Smiod {"callp", { 2, "", UNKNOWN, 0x00} }, /* call phys?*/ 288*3d8817e4Smiod {"callr", { 2, "", UNKNOWN, 0x00} }, 289*3d8817e4Smiod {"lpcxt", { 2, "", UNKNOWN, 0x00} }, /*load proc context*/ 290*3d8817e4Smiod {"rei", { 2, "", UNKNOWN, 0x00} }, /*ret from intrpt*/ 291*3d8817e4Smiod {"rport", { 2, "", UNKNOWN, 0x00} }, /*read-port?*/ 292*3d8817e4Smiod {"rtod", { 2, "", UNKNOWN, 0x00} }, /*read-time-of-day?*/ 293*3d8817e4Smiod {"ssi", { 2, "", UNKNOWN, 0x00} }, 294*3d8817e4Smiod {"vtpa", { 2, "", UNKNOWN, 0x00} }, /*virt-to-phys-addr?*/ 295*3d8817e4Smiod {"wicl", { 2, "", UNKNOWN, 0x00} }, /* write icl ? */ 296*3d8817e4Smiod {"wport", { 2, "", UNKNOWN, 0x00} }, /*write-port?*/ 297*3d8817e4Smiod {"wtod", { 2, "", UNKNOWN, 0x00} }, /*write-time-of-day?*/ 298*3d8817e4Smiod {"flic", { 2, "", UNKNOWN, 0x00} }, 299*3d8817e4Smiod {"iglob", { 2, "", UNKNOWN, 0x00} }, /* I global? */ 300*3d8817e4Smiod {"iphys", { 2, "", UNKNOWN, 0x00} }, /* I physical? */ 301*3d8817e4Smiod {"ipid", { 2, "", UNKNOWN, 0x00} }, /* I pid? */ 302*3d8817e4Smiod {"ivect", { 2, "", UNKNOWN, 0x00} }, /* I vector? */ 303*3d8817e4Smiod {"lamst", { 2, "", UNKNOWN, 0x00} }, 304*3d8817e4Smiod {"tio", { 2, "", UNKNOWN, 0x00} }, 305*3d8817e4Smiod #endif 306