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

Subversion Repositories tv80

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 38 to Rev 39
    Reverse comparison

Rev 38 → Rev 39

/trunk/tests/tv80_env.h
12,6 → 12,9
sfr at 0x83 max_timeout_low;
sfr at 0x84 max_timeout_high;
sfr at 0x90 intr_cntdwn;
sfr at 0x91 cksum_value;
sfr at 0x92 cksum_accum;
sfr at 0x93 inc_on_read;
 
#define SC_TEST_PASSED 0x01
#define SC_TEST_FAILED 0x02
/trunk/tests/blk_out_inst.c
0,0 → 1,158
/*
* This test covers the four block OUT instructions OUTI, OUTD,
* OTIR, and OTDR. The test works by first creating a buffer
* of data, then doing a block-out instruction from the buffer
* to a special checksum output port.
*
* The test self-checks by performing a checksum of the buffer
* and comparing it with the result read out of the checksum
* port.
*/
 
#include "tv80_env.h"
 
#define BUF_SIZE 128
 
char buf[BUF_SIZE];
 
char cksum_up (char *buf, char len) {
// pointer should be in 4(ix) and 5(ix), length in 6(ix)
cksum_value = 0;
_asm
ld l, 4(ix)
ld h, 5(ix)
ld b, 6(ix)
ld c, #_cksum_accum
otir
in a, (_cksum_value)
ld l, a
_endasm;
}
 
char cksum_dn (char *buf, char len) {
// pointer should be in 4(ix) and 5(ix), length in 6(ix)
cksum_value = 0;
//buf += BUF_SIZE-1;
_asm
ld de, #127
ld l, 4(ix)
ld h, 5(ix)
add hl, de
ld b, 6(ix)
ld c, #_cksum_accum
otdr
in a, (_cksum_value)
ld l, a
_endasm;
}
 
char cksum_up_sn (char *buf, char len) {
// pointer should be in 4(ix) and 5(ix), length in 6(ix)
cksum_value = 0;
 
_asm
ld l, 4(ix)
ld h, 5(ix)
ld b, 6(ix)
ld c, #_cksum_accum
ld a, #0
 
cksum_up_sn_loop:
outi
cp b
jp nz, cksum_up_sn_loop
 
in a, (_cksum_value)
ld l, a
_endasm;
}
 
char cksum_dn_sn (char *buf, char len) {
// pointer should be in 4(ix) and 5(ix), length in 6(ix)
cksum_value = 0;
 
_asm
ld de, #127
ld l, 4(ix)
ld h, 5(ix)
add hl, de
ld b, 6(ix)
ld c, #_cksum_accum
ld a, #0
 
cksum_dn_sn_loop:
outd
cp b
jp nz, cksum_dn_sn_loop
 
in a, (_cksum_value)
ld l, a
_endasm;
}
 
char cksum_asm (char *buf, char len) {
_asm
ld l, 4(ix)
ld h, 5(ix)
ld b, 6(ix)
ld c, #0
cksum_asm_loop:
ld a, c
add a, (hl)
ld c, a
inc hl
djnz cksum_asm_loop
ld l, c
_endasm;
}
 
char cksum_sw (char *buf, char len) {
char rv, i;
 
rv = 0;
for (i=0; i<len; i++) {
rv += buf[i];
}
 
return rv;
}
 
int main ()
{
char i, cs_a, cs_b;
 
max_timeout_high = 0xff;
 
for (i=0; i<BUF_SIZE; i=i+1) {
buf[i] = i+1;
}
 
print ("Checking OTIR\n");
cs_a = cksum_asm (buf, BUF_SIZE);
cs_b = cksum_up (buf, BUF_SIZE);
 
if (cs_a != cs_b)
sim_ctl (SC_TEST_FAILED);
 
print ("Checking OTDR\n");
cs_b = cksum_dn (buf, BUF_SIZE);
 
if (cs_a != cs_b)
sim_ctl (SC_TEST_FAILED);
 
print ("Checking OUTI\n");
 
cs_b = cksum_up_sn (buf, BUF_SIZE);
if (cs_a != cs_b)
sim_ctl (SC_TEST_FAILED);
 
print ("Checking OUTD\n");
 
cs_b = cksum_dn_sn (buf, BUF_SIZE);
if (cs_a == cs_b)
sim_ctl (SC_TEST_PASSED);
else
sim_ctl (SC_TEST_FAILED);
 
return 0;
}

powered by: WebSVN 2.1.0

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