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

Subversion Repositories tv80

[/] [tv80/] [trunk/] [tests/] [bintr.c] - Diff between revs 84 and 89

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 84 Rev 89
Line 13... Line 13...
 */
 */
 
 
unsigned char foo;
unsigned char foo;
volatile unsigned char test_pass;
volatile unsigned char test_pass;
static unsigned char triggers;
static unsigned char triggers;
 
int phase;
 
char done;
 
char nmi_trig;
 
 
 
void nmi_isr (void)
 
{
 
  nmi_trig++;
 
 
 
  switch (phase) {
 
    // nmi test
 
  case 1 :
 
    if (nmi_trig > 5) {
 
      phase += 1;
 
      nmi_trig = 0;
 
      //intr_cntdwn = 255;
 
      //intr_cntdwn = 0;
 
      intr_cntdwn = 32;
 
      nmi_cntdwn = 0;
 
    } else
 
      nmi_cntdwn = 32;
 
    break;
 
 
 
    // just trigger once, and disable interrupt
 
  case 3 :
 
    nmi_cntdwn = 0;
 
    nmi_trig_opcode = 0; // pop AF opcode
 
    break;
 
  }
 
}
 
 
void isr (void)
void isr (void)
{
{
 
  int i;
  triggers++;
  triggers++;
 
 
 
  switch (phase) {
 
    // int test
 
  case 0 :
  if (triggers > 5) {
  if (triggers > 5) {
    test_pass = 1;
      phase += 1;
    intr_cntdwn = 255;
      triggers = 0;
    intr_cntdwn = 0;
    intr_cntdwn = 0;
  } else
      nmi_cntdwn = 64;
 
    } else {
    intr_cntdwn = 32;
    intr_cntdwn = 32;
 
 
 
    }
 
    break;
 
 
 
 
 
    // int / nmi interaction
 
    // in this phase set up interrupt call
 
    // which will be interrupted by an nmi
 
  case 2 :
 
    phase += 1;
 
    triggers = 0;
 
    nmi_trig = 0;
 
    intr_cntdwn = 20;
 
    nmi_trig_opcode = 0xF1; // pop AF opcode
 
 
 
    break;
 
 
 
    // wait for a while while servicing interrupt
 
    // nmi should interrupt us and increment nmi_trig
 
    // if test pass is true when we are done then exit
 
  case 3 :
 
    intr_cntdwn = 0;
 
    if (nmi_trig == 1)
 
      test_pass = 1;
 
    break;
 
 
 
  }
}
}
 
 
int main ()
int main ()
{
{
  int i;
  int i;
  unsigned char check;
  unsigned char check;
 
 
  test_pass = 0;
  test_pass = 0;
  triggers = 0;
  triggers = 0;
 
  nmi_trig = 0;
 
 
 
  phase = 0;
 
 
  // start interrupt countdown
  // start interrupt countdown
  intr_cntdwn = 64;
  intr_cntdwn = 64;
 
  set_timeout (50000);
 
 
  for (i=0; i<200; i++)
  for (i=0; i<1024; i++) {
 
    if (test_pass)
 
      break;
    check = sim_ctl_port;
    check = sim_ctl_port;
 
  }
 
 
  if (test_pass)
  if (test_pass)
    sim_ctl (SC_TEST_PASSED);
    sim_ctl (SC_TEST_PASSED);
  else
  else
    sim_ctl (SC_TEST_FAILED);
    sim_ctl (SC_TEST_FAILED);

powered by: WebSVN 2.1.0

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