#include "common.h"
#include "cpu8051.h"
+#include "reg8051.h"
#include "hexfile.h"
#include "memory.h"
#include "options.h"
memory_write8(INT_MEM_ID, address, value);
}
+void
+memory_sfr_write_dptr(u_int16_t value)
+{
+ memory_write8(INT_MEM_ID, _DPTRHIGH_, value >> 8);
+ memory_write8(INT_MEM_ID, _DPTRLOW_, (uint8_t) value);
+}
+
u_int8_t
memory_read8(enum mem_id_t id, unsigned long address)
{
return memory_read8(INT_MEM_ID, address);
}
+u_int16_t
+memory_sfr_read_dptr(void)
+{
+ return (memory_read8(INT_MEM_ID, _DPTRHIGH_) << 8) +
+ memory_read8(INT_MEM_ID, _DPTRLOW_);
+}
+
/* Dump memory */
void
DumpMem(char *Address, char *Asize, int memory_id)
print INST_IMP "unsigned char destination = ( cpu8051_ReadD( _PSW_ ) >> 7 );\n";
}
if ($op_destination == 18) { # @A+DPTR
- print INST_IMP "unsigned int destination = cpu8051_ReadD( _ACC_ ) + cpu8051_ReadD( _DPTRLOW_ ) + ( cpu8051_ReadD( _DPTRHIGH_ ) << 8 );\n";
+ print INST_IMP "unsigned int destination = cpu8051_ReadD( _ACC_ ) + memory_sfr_read_dptr();\n";
}
# Mis en commentaire car donnait un warning (destination et source unused variables...)
# if ($op_destination == 20) { # AB
# print INST_IMP "unsigned char source = cpu8051_ReadD( _B_ );\n";
# }
if ($op_destination == 21) { # DPTR
- print INST_IMP "unsigned int destination = ( cpu8051_ReadD( _DPTRHIGH_ ) << 8 ) + cpu8051_ReadD( _DPTRLOW_ );\n";
+ print INST_IMP "unsigned int destination = memory_sfr_read_dptr();\n";
}
if ($op_destination == 22) { # #data16
print INST_IMP "unsigned char destination = ( memory_read8( PGM_MEM_ID, (cpu8051.pc)++ ) << 8 );\n";
print INST_IMP "destination = ( cpu8051_ReadB( dstbitaddr ) ^ 1 );\n";
}
if ($op_destination == 24) { # @DPTR
- print INST_IMP "unsigned char destination = cpu8051_ReadI( ( cpu8051_ReadD( _DPTRHIGH_ ) << 8 ) + cpu8051_ReadD( _DPTRLOW_) );\n";
+ print INST_IMP "unsigned char destination = cpu8051_ReadI(memory_sfr_read_dptr());\n";
}
}
print INST_IMP "unsigned char source = ( cpu8051_ReadD( _PSW_ ) >> 7 );\n";
}
if ($op_source == 18) { # @A+DPTR
- print INST_IMP "unsigned char source = memory_read8( PGM_MEM_ID, cpu8051_ReadD( _ACC_ ) + cpu8051_ReadD( _DPTRLOW_ ) + ( cpu8051_ReadD( _DPTRHIGH_ ) << 8 ) );\n";
+ print INST_IMP "unsigned char source = memory_read8( PGM_MEM_ID, cpu8051_ReadD( _ACC_ ) + memory_sfr_read_dptr());\n";
}
if ($op_source == 19) { # @A+PC
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";
+ print INST_IMP "unsigned int source = memory_sfr_read_dptr();\n";
}
if ($op_source == 22) { # #data16
print INST_IMP "unsigned char source = ( memory_read8( PGM_MEM_ID, (cpu8051.pc)++ ) << 8 );\n";
print INST_IMP "source = ( cpu8051_ReadB( srcbitaddr ) ^ 1 );\n";
}
if ($op_source == 24) { # @DPTR
- print INST_IMP "unsigned char source = cpu8051_ReadI( ( cpu8051_ReadD( _DPTRHIGH_ ) << 8 ) + cpu8051_ReadD( _DPTRLOW_) );\n";
+ print INST_IMP "unsigned char source = cpu8051_ReadI(memory_sfr_read_dptr());\n";
}
}
print INST_IMP "cpu8051_WriteD( _PSW_, ( ( cpu8051_ReadD( _PSW_ ) & 0x7F) | ( destination << 7 ) ) );\n";
}
if ($op_destination == 21) { # DPTR
- print INST_IMP "cpu8051_WriteD( _DPTRHIGH_, ( destination >> 8 ) );\n";
- print INST_IMP "cpu8051_WriteD( _DPTRLOW_, ( destination & 0xFF ) );\n";
+ print INST_IMP "memory_sfr_write_dptr(destination);\n";
}
if ($op_destination == 23) { # /bitaddr
print INST_IMP "cpu8051_WriteB( dstbitaddr, destination );\n";
}
if ($op_destination == 24) { # @DPTR
- print INST_IMP "cpu8051_WriteI( ( cpu8051_ReadD( _DPTRHIGH_ ) << 8 ) + cpu8051_ReadD( _DPTRLOW_ ), destination );\n";
+ print INST_IMP "cpu8051_WriteI(memory_sfr_read_dptr(), destination);\n";
}
}
print INST_IMP "cpu8051_WriteD( _PSW_, ( ( cpu8051_ReadD( _PSW_ ) & 0x7F) | ( source << 7 ) ) );\n";
}
if ($op_source == 21) { # DPTR
- print INST_IMP "cpu8051_WriteD( _DPTRHIGH_, ( source >> 8 ) );\n";
- print INST_IMP "cpu8051_WriteD( _DPTRLOW_, ( source & 0xFF ) );\n";
+ print INST_IMP "memory_sfr_write_dptr(source);\n";
}
if ($op_source == 23) { # /bitaddr
print INST_IMP "cpu8051_WriteB( srcbitaddr, source );\n";
}
if ($op_source == 24) { # @DPTR
- print INST_IMP "cpu8051_WriteI( ( cpu8051_ReadD( _DPTRHIGH_ ) << 8 ) + cpu8051_ReadD( _DPTRLOW_ ), source );\n";
+ print INST_IMP "cpu8051_WriteI(memory_sfr_read_dptr(), source);\n";
}
}
}