Ejemplo n.º 1
0
bool Cpc1475::Chk_Adr(UINT32 *d,UINT32 data)
{

    if (                 (*d<=0x1FFF) )	return(0);	// ROM area(0000-1fff)
    if ( (*d>=0x2000) && (*d<=0x27FF) )	return(0);

    if ( (*d>=0x2800) && (*d<=0x2B7B) ) { pLCDC->SetDirtyBuf(*d-0x2800);pLCDC->updated = true;return(1);			/* LCDC (0200x) */	}
	if ( (*d>=0x2800) && (*d<=0x33FF) ) return(1);
    if ( (*d>=0x3400) && (*d<=0x35FF) )	{ RomBank = data &0x07; return(1); }
    if ( (*d>=0x3C00) && (*d<=0x3DFF) )
    {
//		AddLog(LOG_MASTER,"Write Slot Register %04X=%02X",*d,mem[*d]);

//        RamBank = (data == 0x04 ? 0 : 1);
//        qWarning()<<"Rambank:"<<RamBank<< " ("<<data<<")";
        return(1);
    }
    if ( (*d>=0x3E00) && (*d<=0x3FFF) )
    {
        BYTE KStrobe=0;

        switch (data & 0x0F)
        {
            case 0x00: KStrobe=0x00;	break;
            case 0x01: KStrobe=0x01;	break;
            case 0x02: KStrobe=0x02;	break;
            case 0x03: KStrobe=0x04;	break;
            case 0x04: KStrobe=0x08;	break;
            case 0x05: KStrobe=0x10;	break;
            case 0x06: KStrobe=0x20;	break;
            case 0x07: KStrobe=0x40;	break;
            case 0x08: KStrobe=0x80;	break;
            case 0x09: KStrobe=0x00;	break;
            case 0x0A: KStrobe=0x00;	break;
            case 0x0B: KStrobe=0x00;	break;
            case 0x0C: KStrobe=0x00;	break;
            case 0x0D: KStrobe=0x00;	break;
            case 0x0E: KStrobe=0x00;	break;
            case 0x0F: KStrobe=0x7F;	break;
        }

        pKEYB->Set_KS( KStrobe );

        return(1);
    }

    if ( (*d>=0x2800) && (*d<=0x3FFF) )	return(1);

    if ( (*d>=0x4000) && (*d<=0x7FFF) )	{ *d += 0xC000 + ( RomBank * 0x4000 );	return(0); }


	if ( (*d>=0x8000) && (*d<=0xFFFF) )
    {
        UINT32 _addr = *d &0x7FFF;
        //        qWarning()<<(RamBank ? "S2:" : "S1:");
        writeBus(RamBank ? busS2 : busS1 ,&_addr,data);
	}

    return(0);
}
Ejemplo n.º 2
0
bool Cpc1360::Chk_Adr(UINT32 *d,UINT32 data)
{
    if (                 (*d<=0x1FFF) )	{ return(0); }	// ROM area(0000-1fff)
	if ( (*d>=0x2000) && (*d<=0x27FF) )	{ return(0); }
//    if ( (*d>=0x2800) && (*d<=0x33FF) ) { pLCDC->SetDirtyBuf(*d-0x2800); return(1);			/* LCDC (0200x) */	}
    if ( ( (*d>=0x2800) && (*d<=0x287C) ) ||
         ( (*d>=0x2A00) && (*d<=0x2A7C) ) ||
         ( (*d>=0x2C00) && (*d<=0x2C7C) ) ||
         ( (*d>=0x2E00) && (*d<=0x2E7C) ) ||
         ( (*d>=0x3000) && (*d<=0x307C) ))	{
        if (mem[*d] != data) {
            pLCDC->updated = true;
            pLCDC->SetDirtyBuf(*d-0x2800);
        }
        return(1);
    }
    if ( (*d>=0x3400) && (*d<=0x35FF) )	{ RomBank = data &0x07;	return(1); }
	if ( (*d>=0x3E00) && (*d<=0x3FFF) )
	{
        BYTE KStrobe=0;

		switch (data & 0x0F)
		{
            case 0x00: KStrobe=0x00;	break;
            case 0x01: KStrobe=0x01;	break;
            case 0x02: KStrobe=0x02;	break;
            case 0x03: KStrobe=0x04;	break;
            case 0x04: KStrobe=0x08;	break;
            case 0x05: KStrobe=0x10;	break;
            case 0x06: KStrobe=0x20;	break;
            case 0x07: KStrobe=0x40;	break;
            case 0x08: KStrobe=0x80;	break;
            case 0x09: KStrobe=0x00;	break;
            case 0x0A: KStrobe=0x00;	break;
            case 0x0B: KStrobe=0x00;	break;
            case 0x0C: KStrobe=0x00;	break;
            case 0x0D: KStrobe=0x00;	break;
            case 0x0E: KStrobe=0x00;	break;
            case 0x0F: KStrobe=0x7F;	break;
		}

        pKEYB->Set_KS( KStrobe );

		return(1);
	}
	if ( (*d>=0x2800) && (*d<=0x3FFF) )	return(1);
	if ( (*d>=0x4000) && (*d<=0x7FFF) )	{ *d += 0xC000 + ( RomBank * 0x4000 );	return(0); }

	if ( (*d>=0x8000) && (*d<=0xFFFF) )
	{
        UINT32 _addr = *d &0x7FFF;
//        qWarning()<<(RamBank ? "S2:" : "S1:");
        writeBus(RamBank ? busS2 : busS1 ,&_addr,data);
		
	}

	return(0);
}
Ejemplo n.º 3
0
/*
 * Checks if we have an incoming request. If so, handles it.
 * Returns 0 if no request was waiting. Returns 1 if request was handled.
 */
byte checkBus()
{
    byte data=0;

    /* No request - no action. */
    if(IN_REQ == 0)
        return 0;

    /* Data is coming in */
    if(IN_RW == RW_WRITE)
    {
        /* Read data */
        data = readBus();

        /* Acknowledge read */
        LAT_AKN = 1;
        TRIS_AKN = TRIS_OUT;

        /* Wait for Request to drop */
        /* Need a timeout here to detect Master's fault */
        while(IN_REQ);

        /* Drop Akn */
        TRIS_AKN = TRIS_IN;

        processData(data);
    } else
    {
        /* Master requests a byte */

        /* Is there data left in the buffer? */
        if(txPtr >= TXBUF_LEN)
        {
            /* Error Condition! We have nothing to write */
        }

        data = txBuf[txPtr++];

        /* Put data on the bus */
        writeBus(data);

        /* Acknowledge write */
        LAT_AKN = 1;
        TRIS_AKN = TRIS_OUT;

        /* Wait for Request to drop */
        /* Need a timeout here to detect Master's fault */
        while(IN_REQ);

        /* Release bus first */
        freeBus();

        /* Finally, release Akn */
        TRIS_AKN = TRIS_IN;
    }
    return 1;
}
Ejemplo n.º 4
0
void GwfStreamWriter::writeObject(SCgObject *object)
{
    Q_ASSERT(isWritingStarted);

    switch (object->type())
    {
    case SCgNode::Type:
        writeNode(object);
        break;
    case SCgPair::Type:
        writePair(object);
        break;
    case SCgBus::Type:
        writeBus(object);
        break;
    case SCgContour::Type:
        writeContour(object);
        break;
    }
}
Ejemplo n.º 5
0
/* Returns BUS_ERROR or BUS_FAILURE on error */
int busWriteByte(byte data, byte req)
{
    long timeout=0;

    /* Set RW to write */
    LAT_RW = RW_WRITE;

    /* Put the data on the bus */
    writeBus(data);

    /* Raise Req */
    setReq(req, 1);

    /* Wait for AKN to go high */
    /* Need timeout to detect Slave fault */
    while(IN_AKN == 0)
    {
        if(timeout++ == BUS_TIMEOUT)
        {
            setReq(req, 0);
            freeBus();
            return BUS_ERROR;
        }
    }

    /* Release bus */
    freeBus();

    /* Drop Req */
    setReq(req, 0);

    /* Wait for Slave to release bus */
    timeout=0;
    while(IN_AKN == 1)
    {
        if(timeout++ == BUS_TIMEOUT)
            return BUS_FAILURE;     /* We're totally screwed */
    }

    return 0;
}
Ejemplo n.º 6
0
void ILI9325i2c_16::writeCom(byte com) {

  clearBit(RS);
  writeBus(0x00, com);

}
Ejemplo n.º 7
0
void ILI9325i2c_16::writeData(byte vh, byte vl) {

  setBit(RS);
  writeBus(vh, vl);

}