public override byte Read(int channel, ref byte abyte)
{
switch (chan_mode[channel])
{
case ChannelMode.CHMOD_COMMAND:
// TODO
//abyte = *error_ptr++;
//if (--error_len != 0)
// return (byte)C64StatusCode.ST_OK;
//else
//{
// set_error(ErrorCode1541.ERR_OK);
// return (byte)C64StatusCode.ST_EOF;
//}
case ChannelMode.CHMOD_FILE:
// Read next block if necessary
if (chan_buf[channel][0] != 0 && buf_len[channel] == 0)
{
if (!read_sector(chan_buf[channel][0], chan_buf[channel][1], chan_buf[channel]))
return (byte)C64StatusCode.ST_READ_TIMEOUT;
//buf_ptr[channel] = chan_buf[channel] + 2;
bufIndex[channel] = 2;
// Determine block length
buf_len[channel] = chan_buf[channel][0] != 0 ? 254 : (byte)chan_buf[channel][1] - 1;
}
if (buf_len[channel] > 0)
{
//abyte = *buf_ptr[channel]++;
abyte = chan_buf[channel][bufIndex[channel]];
bufIndex[channel] += 1;
//if (--buf_len[channel] == 0 && chan_buf[channel][0] == 0)
// return (byte)C64StatusCode.ST_EOF;
//else
// return (byte)C64StatusCode.ST_OK;
buf_len[channel] -= 1;
if (buf_len[channel] == 0 && chan_buf[channel][0] == 0)
return (byte)C64StatusCode.ST_EOF;
else
return (byte)C64StatusCode.ST_OK;
}
else
return (byte)C64StatusCode.ST_READ_TIMEOUT;
case ChannelMode.CHMOD_DIRECTORY:
case ChannelMode.CHMOD_DIRECT:
if (buf_len[channel] > 0)
{
//abyte = *buf_ptr[channel]++;
//if (--buf_len[channel] != 0)
// return (byte)C64StatusCode.ST_OK;
//else
// return (byte)C64StatusCode.ST_EOF;
abyte = chan_buf[channel][bufIndex[channel]];
bufIndex[channel] += 1;
buf_len[channel] -= 1;
if (buf_len[channel] != 0)
return (byte)C64StatusCode.ST_OK;
else
return (byte)C64StatusCode.ST_EOF;
}
else
return (byte)C64StatusCode.ST_READ_TIMEOUT;
}
return (byte)C64StatusCode.ST_READ_TIMEOUT;
//// TEMP!
//return (byte)1;
}