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

Subversion Repositories tv80

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /tv80/trunk/tests
    from Rev 84 to Rev 89
    Reverse comparison

Rev 84 → Rev 89

/bintr_crt0.asm
2,6 → 2,7
.module bintr_crt0
.globl _main
.globl _isr
.globl _nmi_isr
 
.area _HEADER (ABS)
;; Reset vector
22,10 → 23,18
reti
.org 0x38
di
push af
call _isr
pop af
ei
reti
.org 0x66
push af
call _nmi_isr
pop af
retn
.org 0x100
init:
;; Stack at the top of memory.
/tv80_env.h
38,6 → 38,8
sfr at 0x92 cksum_accum;
sfr at 0x93 inc_on_read;
sfr at 0x94 randval;
sfr at 0x95 nmi_cntdwn;
sfr at 0xA0 nmi_trig_opcode;
 
#define SC_TEST_PASSED 0x01
#define SC_TEST_FAILED 0x02
/bintr.c
15,17 → 15,78
unsigned char foo;
volatile unsigned char test_pass;
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)
{
int i;
triggers++;
 
if (triggers > 5) {
test_pass = 1;
intr_cntdwn = 255;
switch (phase) {
// int test
case 0 :
if (triggers > 5) {
phase += 1;
triggers = 0;
intr_cntdwn = 0;
nmi_cntdwn = 64;
} else {
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;
} else
intr_cntdwn = 32;
if (nmi_trig == 1)
test_pass = 1;
break;
}
}
 
int main ()
35,12 → 96,19
 
test_pass = 0;
triggers = 0;
nmi_trig = 0;
 
phase = 0;
 
// start interrupt countdown
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;
}
 
if (test_pass)
sim_ctl (SC_TEST_PASSED);
/Makefile
15,12 → 15,14
 
%.ihx : %.c
$(CC) $^
rm -f $*.asm
 
%.o : %.asm
$(AS) -o $*.o $^
$(AS) -l -o $*.o $^
 
%.ihx : %.o
$(LD) $(LINK_OPTIONS) $(AS_LINK_OPTIONS) -i $* $^ -e
#$(LD) $(LINK_OPTIONS) $(AS_LINK_OPTIONS) -i $* $^ -e
$(CC) $^ --no-std-crt0 bintr_crt0.o
 
bintr.ihx : bintr.c bintr_crt0.o
$(CC) --no-std-crt0 bintr.c bintr_crt0.o

powered by: WebSVN 2.1.0

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