Skip to content

Commit

Permalink
#312: implement dma.wr5
Browse files Browse the repository at this point in the history
  • Loading branch information
pauloscustodio committed Mar 14, 2018
1 parent ad89bd7 commit 569a59a
Show file tree
Hide file tree
Showing 7 changed files with 30,353 additions and 30,250 deletions.
21 changes: 21 additions & 0 deletions src/z80asm/directives.c
Original file line number Diff line number Diff line change
Expand Up @@ -655,6 +655,27 @@ static void asm_DMA_command_1(int cmd, UT_array *exprs)
}
break;

case 5:
/*
dma.wr5 n
or 0x82 into n
n: bits 7..6 must be 10, bits 2..0 must be 010 else error "base register byte is illegal"
If bit 3 of n is set then warning "dma does not support ready signals"
*/
if (((N & 0xC7) | 0x82) != 0x82) {
error_base_register_illegal(N);
return;
}
N |= 0x82;

if (N & 0x08)
warn_dma_ready_signal_unsupported();

// add command byte
add_opcode(N & 0xFF);

break;

default:
assert(0);
}
Expand Down
37 changes: 23 additions & 14 deletions src/z80asm/error_func.c
Original file line number Diff line number Diff line change
Expand Up @@ -429,48 +429,57 @@ void error_port_A_timing(void)

STR_DELETE(msg);
}
void error_port_B_timing(void)
void warn_dma_unsupported_features(void)
{
STR_DEFINE(msg, STR_SIZE);

str_append_sprintf( msg, "port B timing is illegal" );
do_error( ErrError, str_data(msg) );
str_append_sprintf( msg, "DMA does not support some features" );
do_error( ErrWarn, str_data(msg) );

STR_DELETE(msg);
}
void warn_dma_half_cycle_timing(void)
void error_dma_unsupported_interrupts(void)
{
STR_DEFINE(msg, STR_SIZE);

str_append_sprintf( msg, "DMA does not support half cycle timing" );
do_error( ErrWarn, str_data(msg) );
str_append_sprintf( msg, "DMA does not support interrupts" );
do_error( ErrError, str_data(msg) );

STR_DELETE(msg);
}
void warn_dma_unsupported_features(void)
void error_dma_illegal_mode(void)
{
STR_DEFINE(msg, STR_SIZE);

str_append_sprintf( msg, "DMA does not support some features" );
do_error( ErrWarn, str_data(msg) );
str_append_sprintf( msg, "DMA mode is illegal" );
do_error( ErrError, str_data(msg) );

STR_DELETE(msg);
}
void error_dma_unsupported_interrupts(void)
void error_port_B_timing(void)
{
STR_DEFINE(msg, STR_SIZE);

str_append_sprintf( msg, "DMA does not support interrupts" );
str_append_sprintf( msg, "port B timing is illegal" );
do_error( ErrError, str_data(msg) );

STR_DELETE(msg);
}
void error_dma_illegal_mode(void)
void warn_dma_half_cycle_timing(void)
{
STR_DEFINE(msg, STR_SIZE);

str_append_sprintf( msg, "DMA mode is illegal" );
do_error( ErrError, str_data(msg) );
str_append_sprintf( msg, "DMA does not support half cycle timing" );
do_error( ErrWarn, str_data(msg) );

STR_DELETE(msg);
}
void warn_dma_ready_signal_unsupported(void)
{
STR_DEFINE(msg, STR_SIZE);

str_append_sprintf( msg, "DMA does not support ready signals" );
do_error( ErrWarn, str_data(msg) );

STR_DELETE(msg);
}
Expand Down
5 changes: 3 additions & 2 deletions src/z80asm/error_func.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,10 @@ extern void error_base_register_illegal(long value);
extern void error_missing_arguments(void);
extern void error_extra_arguments(void);
extern void error_port_A_timing(void);
extern void error_port_B_timing(void);
extern void warn_dma_half_cycle_timing(void);
extern void warn_dma_unsupported_features(void);
extern void error_dma_unsupported_interrupts(void);
extern void error_dma_illegal_mode(void);
extern void error_port_B_timing(void);
extern void warn_dma_half_cycle_timing(void);
extern void warn_dma_ready_signal_unsupported(void);
extern void error_cmd_failed(char *cmd);
Loading

0 comments on commit 569a59a

Please sign in to comment.