#include "Flash.h"
#include "IOReadWrite.h"
#include "m28w160ect.h"

void Flash_Create(void)
{
}

void Flash_Destroy(void)
{
}

enum { RESET=0xff };

static int programError(int status)
{
    IOWrite(CommandRegister, RESET);

    if (status & VppErrorBit)
        return FlashVppError;
    else if (status & ProgramErrorBit)
        return FlashProgramError;
    else if (status & BlockProtectionErrorBit)
        return FlashProgramProtectedBlockError;
    else
        return FlashUnknownProgramError;
}

int Flash_Program(IOAddress offset, IOData data)
{
    IOData status = 0;

    IOWrite(CommandRegister, ProgramCommand);
    IOWrite(offset, data);

    while ((status & ReadyBit) == 0)
        status = IORead(StatusRegister);

    if (status != ReadyBit)
        return programError(status);

    if (data != IORead(offset))
        return FlashReadBackError;

    return FlashSuccess;
}


