Привет!!! Помогите разобраться, ато я запутался с указателями. Разбираю исходник, не пойму что там делается. return (uint32) (*(uint16 *)(cpu.mem_page[address >>12] + (address & 10))); #else #ifdef TARGET_CPU_PPC return __lhbrx(cpu.mem_page[address >> 12], address & NES6502_10); Где там преобразование типа, как понять эту сроку с казателями и что это такое __lhbrx?
lhbrx (Load Half Byte-Reverse Indexed) Instruction Вот те еще в помощь по этой функции: http://www.nersc.gov/vendor_docs/ibm/asm/lhbrx.htm
попробую своими словами return (uint32) (*(uint16 *)(cpu.mem_page[address >>12] + (address & 10))); cpu.mem_page[address >>12] + (address & 10) - тут вычисляется адрес. Берется значение из массива cpu.mem_page № (address >>12) и к нему прибавляется (address & 10) (uint16 *) значит - воспринимать этот адрес как указатель на uint16. "*" перед этими скобками означает, что нужно значение по указателю ну а (uint32) - это преобразование (ака явное приведение, вопрос к гуру по сям) к типу uint32. т.е. возвращается значение типа uint32 преобразованное из значения uint16, которое находится по адресу, вычисленному как сумма значения из массива cpu.mem_page номер (address >>12) и (address & 10)
ajak Указатель -- это адрес памяти. В твоем случае, значение двух байт, находящихся по адресу 'cpu.mem_page[address >>12] + (address & 10)' извелекается, беззнаково расширяется до четырех байт и возвращается в вызывющую ф-ию.