Example #1
0
unsigned short stackPop16 (void){
    unsigned short value = 0;
    
    //reading is done this way to support correct timing
    unsigned short temp1 = readMemory8(registers.SP);
    unsigned short temp2 = readMemory8(registers.SP + 1) << 8;
    value =  temp1 | temp2;
    registers.SP += 2;
    return value;
}
Example #2
0
/*
 * Expected timing (fresh DMA):
 *  M = 0: write to $FF46 happens
 *  M = 1: nothing (OAM still accessible)
 *  M = 2: new DMA starts, OAM reads will return $FF

 * Expected timing (restarted DMA):
 *  M = 0: write to $FF46 happens. Previous DMA is running (OAM *not* accessible)
 *  M = 1: previous DMA is running (OAM *not* accessible)
 *  M = 2: new DMA starts, OAM reads will return $FF
 */
void updateDMA (){

    if (dmastate.start){
        //directMemoryAccess(dmastate.address);
        dmastate.running = TRUE;
        dmastate.start = FALSE;
        dmastate.timer = 0;
        //dmastate.timer = 640;
    }
    
    if (dmastate.prepare){
        dmastate.start = TRUE;
        dmastate.prepare = FALSE;
    }

    if (dmastate.running){
        
        gpu_reading = 1;
        memory[0xFE00 + dmastate.timer] = readMemory8(dmastate.address + dmastate.timer);
        gpu_reading = 0;
        
        dmastate.timer += 1;

        if (dmastate.timer > 160){
            dmastate.running = FALSE;
            dmastate.timer = 0;
        }
    }

}
Example #3
0
unsigned long MemoryForCpu::read8_se(unsigned long addr)
{
	unsigned char c;

	if(port->read8(addr, &c))
		return signExtend8(c);
	if(ifont->read8(addr, &c))
		return signExtend8(c);
	if(rommmp->read8(addr, &c))
		return signExtend8(c);

	return signExtend8(readMemory8(addr));
}
Example #4
0
unsigned char MemoryForCpu::read8_0e(unsigned long addr)
{
	unsigned char c;

	if(port->read8(addr, &c))
		return c;
	if(ifont->read8(addr, &c))
		return c;
	if(rommmp->read8(addr, &c))
		return c;


	return readMemory8(addr);
}
Example #5
0
/**
 * readMemory16 - read 2 bytes from memory
 *
 * @address	the position to read from
 */
unsigned short readMemory16(unsigned short address)
{
    return (readMemory8(address) | (readMemory8(address + 1) << 8));
}