X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=src%2Fopcode2c.pl;h=9fcca458a5d8e0ef9182033fdc248179296ea3ed;hb=fc3c2b3dbd1b840445dc5bd9f2d3e99ac68837e6;hp=98483a70dbdb56faca6519dc01fe67c7c1dea703;hpb=4c305c73f8110d03b99cec045b3c5741867fd46b;p=emu8051.git diff --git a/src/opcode2c.pl b/src/opcode2c.pl index 98483a7..9fcca45 100755 --- a/src/opcode2c.pl +++ b/src/opcode2c.pl @@ -1,29 +1,84 @@ #!/usr/bin/perl - +# +# Copyright (C) 1999 Jonathan St-André +# Copyright (C) 1999 Hugo Villeneuve +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. open INST_DEF, ">instructions_8051.h" or die "Error creating : $!\n"; open INST_IMP, ">instructions_8051.c" or die "Error creating : $!\n"; open OPCODELST, "opcodes.lst" or die "Error opening : $!\n"; open DISASM_H, ">disasm.h" or die "Error creating : $!\n"; -print INST_IMP "/* instructions_8051.c */\n\n\n"; -print INST_IMP "/* Do not modify this file directly, as it was created by opcode2c.pl\n"; -print INST_IMP " * Any modifications made directly to this file will be lost. */\n\n\n"; +# Header for instructions_8051.c +print INST_IMP "/*\n"; +print INST_IMP " * instructions_8051.c\n"; +print INST_IMP " *\n"; +print INST_IMP " * Do not modify this file directly, as it was created by opcode2c.pl\n"; +print INST_IMP " * Any modifications made directly to this file will be lost.\n"; +print INST_IMP " *\n"; +print INST_IMP " * Copyright (C) 1999 Jonathan St-André\n"; +print INST_IMP " * Copyright (C) 1999 Hugo Villeneuve \n"; +print INST_IMP " *\n"; +print INST_IMP " * This program is free software; you can redistribute it and/or modify\n"; +print INST_IMP " * it under the terms of the GNU General Public License as published by\n"; +print INST_IMP " * the Free Software Foundation; either version 2 of the License, or\n"; +print INST_IMP " * (at your option) any later version.\n"; +print INST_IMP " *\n"; +print INST_IMP " * This program is distributed in the hope that it will be useful,\n"; +print INST_IMP " * but WITHOUT ANY WARRANTY; without even the implied warranty of\n"; +print INST_IMP " * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"; +print INST_IMP " * GNU General Public License for more details.\n"; +print INST_IMP " *\n"; +print INST_IMP " * You should have received a copy of the GNU General Public License\n"; +print INST_IMP " * along with this program; if not, write to the Free Software\n"; +print INST_IMP " * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n"; +print INST_IMP "*/\n\n"; print INST_IMP "/* Define only here, for not having extern scope on local variables. */\n"; print INST_IMP "#define INSTRUCTIONS_8051_M 1\n\n\n"; print INST_IMP "#include \"reg8051.h\"\n"; print INST_IMP "#include \"cpu8051.h\"\n"; print INST_IMP "#include \"memory.h\"\n"; print INST_IMP "#include \"instructions_8051.h\"\n\n\n"; -print INST_IMP "extern int ActivePriority;\n"; -print INST_IMP "extern unsigned int PC;\n\n\n"; -print DISASM_H "/* disasm.h */\n\n\n"; -print DISASM_H "/* Do not modify this file directly, as it was created by opcode2c.pl\n"; -print DISASM_H " * Any modifications made directly to this file will be lost. */\n\n\n"; +# Header for disasm.h +print DISASM_H "/*\n"; +print DISASM_H " * disasm.h\n"; +print DISASM_H " *\n"; +print DISASM_H " * Do not modify this file directly, as it was created by opcode2c.pl\n"; +print DISASM_H " * Any modifications made directly to this file will be lost.\n"; +print DISASM_H " *\n"; +print DISASM_H " * Copyright (C) 1999 Jonathan St-André\n"; +print DISASM_H " * Copyright (C) 1999 Hugo Villeneuve \n"; +print DISASM_H " *\n"; +print DISASM_H " * This program is free software; you can redistribute it and/or modify\n"; +print DISASM_H " * it under the terms of the GNU General Public License as published by\n"; +print DISASM_H " * the Free Software Foundation; either version 2 of the License, or\n"; +print DISASM_H " * (at your option) any later version.\n"; +print DISASM_H " *\n"; +print DISASM_H " * This program is distributed in the hope that it will be useful,\n"; +print DISASM_H " * but WITHOUT ANY WARRANTY; without even the implied warranty of\n"; +print DISASM_H " * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"; +print DISASM_H " * GNU General Public License for more details.\n"; +print DISASM_H " *\n"; +print DISASM_H " * You should have received a copy of the GNU General Public License\n"; +print DISASM_H " * along with this program; if not, write to the Free Software\n"; +print DISASM_H " * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n"; +print DISASM_H "*/\n\n"; print DISASM_H "#ifndef DISASM_H\n"; -print DISASM_H "#define DISASM_H 1\n\n\n"; - +print DISASM_H "#define DISASM_H 1\n\n"; $nbinst=0; $nbaddr=0; @@ -81,9 +136,12 @@ while($ligne=) { $instnumb++; } # ------------------------------------------------------------------------------ -print DISASM_H "// For all 256 opcodes, the value in this table gives the instruction type\n"; -print DISASM_H "// ex.: MOV, INC, CLR, CPL,...\n"; -print DISASM_H "// To know what is the instruction type, use the number as an offset in the InstTextTbl[]\n"; +print DISASM_H "/*\n"; +print DISASM_H " * For all 256 opcodes, the value in this table gives the instruction type\n"; +print DISASM_H " * ex.: MOV, INC, CLR, CPL,...\n"; +print DISASM_H " * To know what is the instruction type, use\n"; +print DISASM_H " * the number as an offset in the InstTextTbl[]\n"; +print DISASM_H " */\n"; print DISASM_H "static int InstTypesTbl[] = {\n"; for($i=0;$i<256;$i++) { print DISASM_H " $insttype[$i]"; @@ -91,9 +149,9 @@ for($i=0;$i<256;$i++) { if (($i+1) % 16 == 0) { print DISASM_H "\n"; } } print DISASM_H "};\n"; -print DISASM_H "\n\n"; +print DISASM_H "\n"; # ------------------------------------------------------------------------------ -print DISASM_H "// Size(in bytes) of each instruction (offset in table is instruction opcode)\n"; +print DISASM_H "/* Size(in bytes) of each instruction (offset in table is instruction opcode) */\n"; print DISASM_H "static int InstSizesTbl[] = {\n"; for($i=0;$i<256;$i++) { print DISASM_H " $nbbytes[$i]"; @@ -101,9 +159,9 @@ for($i=0;$i<256;$i++) { if (($i+1) % 16 == 0) { print DISASM_H "\n"; } } print DISASM_H "};\n"; -print DISASM_H "\n\n"; +print DISASM_H "\n"; # ------------------------------------------------------------------------------ -print DISASM_H "// List of instructions types referenced by InstTypesTbl[]\n"; +print DISASM_H "/* List of instructions types referenced by InstTypesTbl[] */\n"; $nbelement=@insttext; print DISASM_H "\#define InstTextTblLength $nbelement\n"; $elementnb=0; @@ -114,14 +172,16 @@ foreach $instruc (@insttext) { print DISASM_H "\n"; } print DISASM_H "};\n"; -print DISASM_H "\n\n"; +print DISASM_H "\n"; # ------------------------------------------------------------------------------ -print DISASM_H "// Table describing all arguments types of an instruction\n"; -print DISASM_H "// The table is indexed InstArgTbl[ opcode * 4]\n"; -print DISASM_H "// InstArgTbl[opcode*4 + 1] gives the number of arguments the instruction has\n"; -print DISASM_H "// InstArgTbl[opcode*4 + i] for i=1,2 and 3 give the type of each argument\n"; -print DISASM_H "// for most instructions, the 3rd argument isn't used\n"; -print DISASM_H "// the argument type is referecing to ArgsTextTbl[]\n"; +print DISASM_H "/*\n"; +print DISASM_H " * Table describing all arguments types of an instruction\n"; +print DISASM_H " * The table is indexed InstArgTbl[ opcode * 4]\n"; +print DISASM_H " * InstArgTbl[opcode*4 + 1] gives the number of arguments the instruction has\n"; +print DISASM_H " * InstArgTbl[opcode*4 + i] for i=1,2 and 3 give the type of each argument\n"; +print DISASM_H " * for most instructions, the 3rd argument isn't used\n"; +print DISASM_H " * the argument type is referecing to ArgsTextTbl[]\n"; +print DISASM_H " */\n"; print DISASM_H "\#define InstArgTblLength 256\n"; print DISASM_H "static int InstArgTbl[] = {\n"; for($i=0;$i<1024;$i++) { @@ -130,10 +190,12 @@ for($i=0;$i<1024;$i++) { if (($i+1) % 16 == 0) { print DISASM_H "\n"; } } print DISASM_H "};\n"; -print DISASM_H "\n\n"; +print DISASM_H "\n"; # ------------------------------------------------------------------------------ -print DISASM_H "// List all types of arguments available to instructions\n"; -print DISASM_H "// Referenced by InstArgsTbl[]\n"; +print DISASM_H "/*\n"; +print DISASM_H " * List all types of arguments available to instructions\n"; +print DISASM_H " * Referenced by InstArgsTbl[]\n"; +print DISASM_H " */\n"; $nbelement=@argstypes; print DISASM_H "\#define ArgsTextTblLength $nbelement\n"; $elementnb=0; @@ -144,7 +206,7 @@ foreach $args (@argstypes) { print DISASM_H "\n"; } print DISASM_H "};\n"; -print DISASM_H "\n\n"; +print DISASM_H "\n"; # ------------------------------------------------------------------------------ for ($i=0 ; $i< 256; $i++) { @@ -152,16 +214,16 @@ for ($i=0 ; $i< 256; $i++) { print INST_IMP " * Instruction \"$a_instruction[$i]\" takes $a_cycles[$i] cycle(s) and $a_bytes[$i] byte(s).\n"; print INST_IMP " ","*"x76,"/\n"; print INST_IMP "int\n"; - print INST_IMP "cpu8051_OP_$a_opcodehex[$i]( void )\n"; + print INST_IMP "cpu8051_OP_$a_opcodehex[$i](void)\n"; # TEST hugo new... # print INST_DEF "int OP_$a_opcodehex[$i]( );\n"; print INST_IMP "{\n"; if( $i == 0x85 ) { # Cas particulier pour MOV direct,direct -> src et dest sont inverses dans la memoire - print INST_IMP " unsigned char srcaddr = memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP " unsigned char srcaddr = memory_read8( PGM_MEM_ID, cpu8051.pc++ );\n"; print INST_IMP " unsigned char source = cpu8051_ReadD( srcaddr );\n"; - print INST_IMP " unsigned char destaddr = memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP " unsigned char destaddr = memory_read8( PGM_MEM_ID, cpu8051.pc++ );\n"; print INST_IMP " unsigned char destination = cpu8051_ReadD( destaddr );\n"; print INST_IMP " destination = source;\n"; print INST_IMP " cpu8051_WriteD( destaddr, destination );\n"; @@ -170,17 +232,17 @@ for ($i=0 ; $i< 256; $i++) { if ($instargs[$i*4] > 0) { $op_destination=$instargs[$i*4+1]; if ($op_destination == 0) { # addr11 - print INST_IMP " unsigned int addr11 = ( ( memory_read8( PGM_MEM_ID, PC - 1 ) << 3 ) & 0xF00 ) + memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP " unsigned int addr11 = ( ( memory_read8( PGM_MEM_ID, cpu8051.pc - 1 ) << 3 ) & 0xF00 ) + memory_read8( PGM_MEM_ID, cpu8051.pc++ );\n"; } if ($op_destination == 1) { # addr16 - print INST_IMP "unsigned int addr16 = ( memory_read8( PGM_MEM_ID, PC++ ) << 8 );\n"; - print INST_IMP "addr16 += memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned int addr16 = ( memory_read8( PGM_MEM_ID, cpu8051.pc++ ) << 8 );\n"; + print INST_IMP "addr16 += memory_read8( PGM_MEM_ID, cpu8051.pc++ );\n"; } if ($op_destination == 2) { # A print INST_IMP "unsigned char destination = cpu8051_ReadD( _ACC_ );\n"; } if ($op_destination == 3) { # direct - print INST_IMP "unsigned char destaddr = memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned char destaddr = memory_read8( PGM_MEM_ID, cpu8051.pc++ );\n"; print INST_IMP "unsigned char destination = cpu8051_ReadD( destaddr );\n"; } if ($op_destination == 4) { # @R0 @@ -215,15 +277,15 @@ for ($i=0 ; $i< 256; $i++) { print INST_IMP "unsigned char destination = cpu8051_ReadD( BANKPSW + _R7_ );\n"; } if ($op_destination == 14) { # bitaddr - print INST_IMP "unsigned char destination, dstbitaddr = memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned char destination, dstbitaddr = memory_read8( PGM_MEM_ID, cpu8051.pc++ );\n"; print INST_IMP "destination = cpu8051_ReadB( dstbitaddr );\n"; } if ($op_destination == 15) { # reladdr - print INST_IMP "PC++;\n"; - print INST_IMP "unsigned int destination = ( ( memory_read8( PGM_MEM_ID, PC - 1 ) + PC ) & 0xFF ) + ( PC & 0xFF00 );\n"; + print INST_IMP "cpu8051.pc++;\n"; + print INST_IMP "unsigned int destination = ( ( memory_read8( PGM_MEM_ID, cpu8051.pc - 1 ) + cpu8051.pc ) & 0xFF ) + ( cpu8051.pc & 0xFF00 );\n"; } if ($op_destination == 16) { # #data - print INST_IMP "unsigned char destination = memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned char destination = memory_read8( PGM_MEM_ID, cpu8051.pc++ );\n"; } if ($op_destination == 17) { # C print INST_IMP "unsigned char destination = ( cpu8051_ReadD( _PSW_ ) >> 7 );\n"; @@ -240,11 +302,11 @@ for ($i=0 ; $i< 256; $i++) { print INST_IMP "unsigned int destination = ( cpu8051_ReadD( _DPTRHIGH_ ) << 8 ) + cpu8051_ReadD( _DPTRLOW_ );\n"; } if ($op_destination == 22) { # #data16 - print INST_IMP "unsigned char destination = ( memory_read8( PGM_MEM_ID, PC++ ) << 8 );\n"; - print INST_IMP "destination += memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned char destination = ( memory_read8( PGM_MEM_ID, (cpu8051.pc)++ ) << 8 );\n"; + print INST_IMP "destination += memory_read8( PGM_MEM_ID, (cpu8051.pc)++ );\n"; } if ($op_destination == 23) { # /bitaddr - print INST_IMP "unsigned char destination, dstbitaddr = memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned char destination, dstbitaddr = memory_read8( PGM_MEM_ID, (cpu8051.pc)++ );\n"; print INST_IMP "destination = ( cpu8051_ReadB( dstbitaddr ) ^ 1 );\n"; } if ($op_destination == 24) { # @DPTR @@ -255,17 +317,17 @@ for ($i=0 ; $i< 256; $i++) { if ($instargs[$i*4] > 1) { $op_source=$instargs[$i*4+2]; if ($op_source == 0) { # addr11 - print INST_IMP "unsigned int addr11 = ( ( memory_read8( PGM_MEM_ID, PC - 1 ) << 3 ) & 0xF00 ) + memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned int addr11 = ( ( memory_read8( PGM_MEM_ID, cpu8051.pc - 1 ) << 3 ) & 0xF00 ) + memory_read8( PGM_MEM_ID, (cpu8051.pc)++ );\n"; } if ($op_source == 1) { # addr16 - print INST_IMP "unsigned int addr16 = ( memory_read8( PGM_MEM_ID, PC++ ) << 8 );\n"; - print INST_IMP "addr16 += memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned int addr16 = ( memory_read8( PGM_MEM_ID, (cpu8051.pc)++ ) << 8 );\n"; + print INST_IMP "addr16 += memory_read8( PGM_MEM_ID, (cpu8051.pc)++ );\n"; } if ($op_source == 2) { # A print INST_IMP "unsigned char source = cpu8051_ReadD( _ACC_ );\n"; } if ($op_source == 3) { # direct - print INST_IMP "unsigned char srcaddr = memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned char srcaddr = memory_read8( PGM_MEM_ID, (cpu8051.pc)++ );\n"; print INST_IMP "unsigned char source = cpu8051_ReadD( srcaddr );\n"; } if ($op_source == 4) { # @R0 @@ -300,15 +362,15 @@ for ($i=0 ; $i< 256; $i++) { } if ($op_source == 14) { # bitaddr - print INST_IMP "unsigned char source, srcbitaddr = memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned char source, srcbitaddr = memory_read8( PGM_MEM_ID, (cpu8051.pc)++ );\n"; print INST_IMP "source = cpu8051_ReadB( srcbitaddr );\n"; } if ($op_source == 15) { # reladdr - print INST_IMP "PC++;\n"; - print INST_IMP "unsigned int source = ( ( memory_read8( PGM_MEM_ID, PC - 1 ) + PC ) & 0xFF ) + ( PC & 0xFF00 );\n"; + print INST_IMP "(cpu8051.pc)++;\n"; + print INST_IMP "unsigned int source = ( ( memory_read8( PGM_MEM_ID, cpu8051.pc - 1 ) + cpu8051.pc ) & 0xFF ) + ( cpu8051.pc & 0xFF00 );\n"; } if ($op_source == 16) { # #data - print INST_IMP "unsigned char source = memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned char source = memory_read8( PGM_MEM_ID, (cpu8051.pc)++ );\n"; } if ($op_source == 17) { # C print INST_IMP "unsigned char source = ( cpu8051_ReadD( _PSW_ ) >> 7 );\n"; @@ -317,17 +379,17 @@ for ($i=0 ; $i< 256; $i++) { print INST_IMP "unsigned char source = memory_read8( PGM_MEM_ID, cpu8051_ReadD( _ACC_ ) + cpu8051_ReadD( _DPTRLOW_ ) + ( cpu8051_ReadD( _DPTRHIGH_ ) << 8 ) );\n"; } if ($op_source == 19) { # @A+PC - print INST_IMP "unsigned char source = memory_read8( PGM_MEM_ID, cpu8051_ReadD( _ACC_ ) + ( ++PC ) );\n"; + print INST_IMP "unsigned char source = memory_read8( PGM_MEM_ID, cpu8051_ReadD( _ACC_ ) + ( ++cpu8051.pc ) );\n"; } if ($op_source == 21) { # DPTR print INST_IMP "unsigned int source = ( cpu8051_ReadD( _DPTRHIGH_ ) << 8 ) + cpu8051_ReadD( _DPTRLOW_ );\n"; } if ($op_source == 22) { # #data16 - print INST_IMP "unsigned char source = ( memory_read8( PGM_MEM_ID, PC++ ) << 8 );\n"; - print INST_IMP "source += memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned char source = ( memory_read8( PGM_MEM_ID, (cpu8051.pc)++ ) << 8 );\n"; + print INST_IMP "source += memory_read8( PGM_MEM_ID, (cpu8051.pc)++ );\n"; } if ($op_source == 23) { # /bitaddr - print INST_IMP "unsigned char source, srcbitaddr = memory_read8( PGM_MEM_ID, PC++ );\n"; + print INST_IMP "unsigned char source, srcbitaddr = memory_read8( PGM_MEM_ID, (cpu8051.pc)++ );\n"; print INST_IMP "source = ( cpu8051_ReadB( srcbitaddr ) ^ 1 );\n"; } if ($op_source == 24) { # @DPTR @@ -351,22 +413,22 @@ for ($i=0 ; $i< 256; $i++) { # JBC if ($insttype[$i] == 5) { - print INST_IMP "if ( destination == 1 ) { PC = source; destination = 0; }\n"; + print INST_IMP "if ( destination == 1 ) { cpu8051.pc = source; destination = 0; }\n"; } # ACALL if ($insttype[$i] == 6) { print INST_IMP "unsigned char SP = cpu8051_ReadD( _SP_ );\n"; - print INST_IMP "cpu8051_WriteI( ++SP, ( PC & 0x00FF ) );\n"; - print INST_IMP "cpu8051_WriteI( ++SP, ( PC >> 8 ) );\n"; + print INST_IMP "cpu8051_WriteI( ++SP, ( cpu8051.pc & 0x00FF ) );\n"; + print INST_IMP "cpu8051_WriteI( ++SP, ( cpu8051.pc >> 8 ) );\n"; print INST_IMP "cpu8051_WriteD( _SP_, SP );\n"; } # LCALL if ($insttype[$i] == 7) { print INST_IMP "unsigned char SP = cpu8051_ReadD( _SP_ );\n"; - print INST_IMP "cpu8051_WriteI( ++SP, ( PC & 0x00FF ) );\n"; - print INST_IMP "cpu8051_WriteI( ++SP, ( PC >> 8 ) );\n"; + print INST_IMP "cpu8051_WriteI( ++SP, ( cpu8051.pc & 0x00FF ) );\n"; + print INST_IMP "cpu8051_WriteI( ++SP, ( cpu8051.pc >> 8 ) );\n"; print INST_IMP "cpu8051_WriteD( _SP_, SP );\n"; } @@ -384,14 +446,14 @@ for ($i=0 ; $i< 256; $i++) { # JB if ($insttype[$i] == 10) { - print INST_IMP "if ( destination == 1 ) { PC = source; }\n"; + print INST_IMP "if ( destination == 1 ) { cpu8051.pc = source; }\n"; } # RET if ($insttype[$i] == 11) { print INST_IMP "unsigned char SP = cpu8051_ReadD( _SP_ );\n"; - print INST_IMP "PC = ( cpu8051_ReadI( SP-- ) << 8 );\n"; - print INST_IMP "PC += cpu8051_ReadI ( SP-- );\n"; + print INST_IMP "cpu8051.pc = ( cpu8051_ReadI( SP-- ) << 8 );\n"; + print INST_IMP "cpu8051.pc += cpu8051_ReadI ( SP-- );\n"; print INST_IMP "cpu8051_WriteD( _SP_, SP );\n"; } @@ -413,15 +475,15 @@ for ($i=0 ; $i< 256; $i++) { # JNB if ($insttype[$i] == 14) { - print INST_IMP "if ( destination == 0 ) { PC = source; }\n"; + print INST_IMP "if ( destination == 0 ) { cpu8051.pc = source; }\n"; } # RETI if ($insttype[$i] == 15) { - print INST_IMP "ActivePriority = -1;\n"; + print INST_IMP "cpu8051.active_priority = -1;\n"; print INST_IMP "unsigned char SP = cpu8051_ReadD( _SP_ );\n"; - print INST_IMP "PC = ( cpu8051_ReadI( SP-- ) << 8 );\n"; - print INST_IMP "PC += cpu8051_ReadI( SP-- );\n"; + print INST_IMP "cpu8051.pc = ( cpu8051_ReadI( SP-- ) << 8 );\n"; + print INST_IMP "cpu8051.pc += cpu8051_ReadI( SP-- );\n"; } # RLC @@ -445,7 +507,7 @@ for ($i=0 ; $i< 256; $i++) { # JC if ($insttype[$i] == 18) { - print INST_IMP "if ( cpu8051_ReadD( _PSW_ ) > 0x7F) { PC = destination; }\n"; + print INST_IMP "if ( cpu8051_ReadD( _PSW_ ) > 0x7F) { cpu8051.pc = destination; }\n"; } # ORL @@ -461,7 +523,7 @@ for ($i=0 ; $i< 256; $i++) { # JNC if ($insttype[$i] == 20) { - print INST_IMP "if ( cpu8051_ReadD( _PSW_ ) < 0x80 ) { PC = destination; }\n"; + print INST_IMP "if ( cpu8051_ReadD( _PSW_ ) < 0x80 ) { cpu8051.pc = destination; }\n"; } # ANL @@ -477,7 +539,7 @@ for ($i=0 ; $i< 256; $i++) { # JZ if ($insttype[$i] == 22) { - print INST_IMP "if ( cpu8051_ReadD( _ACC_ ) == 0 ) { PC = destination; }\n"; + print INST_IMP "if ( cpu8051_ReadD( _ACC_ ) == 0 ) { cpu8051.pc = destination; }\n"; } # XRL @@ -487,12 +549,12 @@ for ($i=0 ; $i< 256; $i++) { # JNZ if ($insttype[$i] == 24) { - print INST_IMP "if ( cpu8051_ReadD( _ACC_ ) != 0 ) { PC = destination; }\n"; + print INST_IMP "if ( cpu8051_ReadD( _ACC_ ) != 0 ) { cpu8051.pc = destination; }\n"; } # JMP if ($insttype[$i] == 25) { - print INST_IMP "PC = destination;\n"; + print INST_IMP "cpu8051.pc = destination;\n"; } # MOV @@ -502,7 +564,7 @@ for ($i=0 ; $i< 256; $i++) { # SJMP if ($insttype[$i] == 27) { - print INST_IMP "PC = destination;\n"; + print INST_IMP "cpu8051.pc = destination;\n"; } # MOVC @@ -547,10 +609,10 @@ for ($i=0 ; $i< 256; $i++) { # CJNE if ($insttype[$i] == 34) { - print INST_IMP "unsigned int reladdr = ( ( memory_read8( PGM_MEM_ID, PC ) + ( ( PC + 1 ) & 0x00FF ) ) & 0x00FF ) + ( ( PC + 1 ) & 0xFF00 );\n"; + print INST_IMP "unsigned int reladdr = ( ( memory_read8( PGM_MEM_ID, cpu8051.pc ) + ( ( cpu8051.pc + 1 ) & 0x00FF ) ) & 0x00FF ) + ( ( cpu8051.pc + 1 ) & 0xFF00 );\n"; print INST_IMP "cpu8051_WriteD( _PSW_, ( cpu8051_ReadD( _PSW_ ) & 0x7F ) );\n"; print INST_IMP "if ( destination < source ) cpu8051_WriteD( _PSW_, ( cpu8051_ReadD( _PSW_ ) | 0x80 ) );\n"; - print INST_IMP "if ( destination != source ) PC = reladdr;\n"; + print INST_IMP "if ( destination != source ) cpu8051.pc = reladdr;\n"; } # PUSH @@ -604,7 +666,7 @@ for ($i=0 ; $i< 256; $i++) { # DJNZ if ($insttype[$i] == 42) { print INST_IMP "destination--;\n"; - print INST_IMP "if ( destination != 0 ) PC = source;\n"; + print INST_IMP "if ( destination != 0 ) cpu8051.pc = source;\n"; } # XCHD @@ -628,10 +690,10 @@ for ($i=0 ; $i< 256; $i++) { if ($instargs[$i*4] > 0) { $op_destination=$instargs[$i*4+1]; if ($op_destination == 0) { # addr11 - print INST_IMP "PC = ( PC & 0xF800 ) | addr11;\n"; + print INST_IMP "cpu8051.pc = ( cpu8051.pc & 0xF800 ) | addr11;\n"; } if ($op_destination == 1) { # addr16 - print INST_IMP "PC = addr16;\n"; + print INST_IMP "cpu8051.pc = addr16;\n"; } if ($op_destination == 2) { # A print INST_IMP "cpu8051_WriteD( _ACC_, destination );\n"; @@ -692,10 +754,10 @@ for ($i=0 ; $i< 256; $i++) { if ($instargs[$i*4] > 1) { $op_source=$instargs[$i*4+2]; if ($op_source == 0) { # addr11 - print INST_IMP "PC = ( PC & 0xF800 ) | addr11;\n"; + print INST_IMP "cpu8051.pc = ( cpu8051.pc & 0xF800 ) | addr11;\n"; } if ($op_source == 1) { # addr16 - print INST_IMP "PC = addr16;\n"; + print INST_IMP "cpu8051.pc = addr16;\n"; } if ($op_source == 2) { # A print INST_IMP "cpu8051_WriteD( _ACC_, source );\n"; @@ -759,17 +821,38 @@ for ($i=0 ; $i< 256; $i++) { # ------------------------------------------------------------------------------ +# Header for instructions_8051.h +print INST_DEF "/*\n"; +print INST_DEF " * instructions_8051.h\n"; +print INST_DEF " *\n"; +print INST_DEF " * Do not modify this file directly, as it was created by opcode2c.pl\n"; +print INST_DEF " * Any modifications made directly to this file will be lost.\n"; +print INST_DEF " *\n"; +print INST_DEF " * Copyright (C) 1999 Jonathan St-André\n"; +print INST_DEF " * Copyright (C) 1999 Hugo Villeneuve \n"; +print INST_DEF " *\n"; +print INST_DEF " * This program is free software; you can redistribute it and/or modify\n"; +print INST_DEF " * it under the terms of the GNU General Public License as published by\n"; +print INST_DEF " * the Free Software Foundation; either version 2 of the License, or\n"; +print INST_DEF " * (at your option) any later version.\n"; +print INST_DEF " *\n"; +print INST_DEF " * This program is distributed in the hope that it will be useful,\n"; +print INST_DEF " * but WITHOUT ANY WARRANTY; without even the implied warranty of\n"; +print INST_DEF " * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"; +print INST_DEF " * GNU General Public License for more details.\n"; +print INST_DEF " *\n"; +print INST_DEF " * You should have received a copy of the GNU General Public License\n"; +print INST_DEF " * along with this program; if not, write to the Free Software\n"; +print INST_DEF " * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n"; +print INST_DEF "*/\n\n"; -print INST_DEF "/* instructions_8051.h */\n\n\n"; -print INST_DEF "/* Do not modify this file directly, as it was created by opcode2c.pl\n"; -print INST_DEF " * Any modifications made directly to this file will be lost. */\n\n\n"; print INST_DEF "#ifndef INSTRUCTIONS_8051_H\n"; print INST_DEF "#define INSTRUCTIONS_8051_H 1\n\n\n"; -print INST_DEF "#define BANKPSW ( cpu8051_ReadD( _PSW_ ) & 0x18 )\n\n"; -print INST_DEF "typedef int (*OPCODE_FP)( void );\n\n\n"; +print INST_DEF "#define BANKPSW (cpu8051_ReadD(_PSW_) & 0x18)\n\n"; +print INST_DEF "typedef int (*OPCODE_FP)(void);\n\n\n"; for( $i=0; $i<256; $i++ ) { print INST_DEF "int\n"; - print INST_DEF "cpu8051_OP_$a_opcodehex[$i]( void );\n\n"; + print INST_DEF "cpu8051_OP_$a_opcodehex[$i](void);\n\n"; } print INST_DEF "\n"; print INST_DEF "/* Exported variables. */\n"; @@ -792,16 +875,9 @@ print INST_DEF "#endif\n\n\n"; print INST_DEF "#endif /* INSTRUCTIONS_8051_H */\n"; - - - - - -print DISASM_H "\n\n#endif /* DISASM_H */\n"; +print DISASM_H "#endif /* DISASM_H */\n"; close DISASM_H; close OPCODELST; close INST_DEF; close INST_IMP; - -