OpenCores
URL https://opencores.org/ocsvn/tv80/tv80/trunk

Subversion Repositories tv80

[/] [tv80/] [trunk/] [tests/] [blk_mem_inst.c] - Rev 100

Go to most recent revision | Compare with Previous | Blame | View Log

/*
 * This test covers the four block move instructions LDI,
 * LDIR, LDD, and LDDR.
 *
 * The test creates a buffer full of random data, copies
 * the buffer using one of the move instructions, then
 * checks the target buffer to make sure it contains the
 * same data as the source buffer.
 */
 
#include "tv80_env.h"
 
#define BUF_SIZE 128
 
char bufa[BUF_SIZE];
char bufb[BUF_SIZE];
 
void rand_buf (char *buf) {
  int i;
 
  for (i=0; i<BUF_SIZE; i++) {
    buf[i] = randval;
  }
}
 
char test_ldi () {
  int  i;
  char rv;
 
  rand_buf (bufa);
 
  _asm
    ld  de, #_bufb
    ld  hl, #_bufa
    ld  bc, #128
 
test_ldi_loop:
    ldi 
    ld  a, #0x00
    cp  c
    jp  nz, test_ldi_loop
    cp  b
    jp  nz, test_ldi_loop
 
  _endasm;
 
  rv = 1;
  for (i=0; i<BUF_SIZE; i++) {
    if (bufa[i] != bufb[i]) rv = 0;
  }
 
  return rv;
}
 
char test_ldir () {
  int  i;
  char rv;
 
  rand_buf (bufa);
 
  _asm
    ld  de, #_bufb
    ld  hl, #_bufa
    ld  bc, #128
 
    ldir 
 
  _endasm;
 
  rv = 1;
  for (i=0; i<BUF_SIZE; i++) {
    if (bufa[i] != bufb[i]) rv = 0;
  }
 
  return rv;
}
 
char test_ldd () {
  int  i;
  char rv;
 
  rand_buf (bufa);
 
  _asm
    ld  hl, #_bufb
    ld  bc, #127
    add hl, bc
    ex  de, hl
    ld  hl, #_bufa
    add hl, bc
    inc bc
 
test_ldd_loop:
    ldd
    ld  a, #0x00
    cp  c
    jp  nz, test_ldd_loop
    cp  b
    jp  nz, test_ldd_loop
 
  _endasm;
 
  rv = 1;
  for (i=0; i<BUF_SIZE; i++) {
    if (bufa[i] != bufb[i]) rv = 0;
  }
 
  return rv;
}
 
char test_lddr () {
  int  i;
  char rv;
 
  rand_buf (bufa);
 
  _asm
    ld  hl, #_bufb
    ld  bc, #127
    add hl, bc
    ex  de, hl
    ld  hl, #_bufa
    add hl, bc
    inc bc
 
    lddr
 
  _endasm;
 
  rv = 1;
  for (i=0; i<BUF_SIZE; i++) {
    if (bufa[i] != bufb[i]) rv = 0;
  }
 
  return rv;
}
 
int main ()
{
  if (BUF_SIZE > 255)
    set_timeout (0xffff);
  else
    timeout_port = 0;
 
  // initialize source buffer
  print ("Checking LDI\n");
  if (!test_ldi())
    sim_ctl (SC_TEST_FAILED);
 
  print ("Checking LDIR\n");
  if (!test_ldir())
    sim_ctl (SC_TEST_FAILED);
 
  print ("Checking LDD\n");
  if (!test_ldd())
    sim_ctl (SC_TEST_FAILED);
 
  print ("Checking LDDR\n");
  if (!test_lddr())
    sim_ctl (SC_TEST_FAILED);
  else
    sim_ctl (SC_TEST_PASSED);
 
  return 0;
}
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.