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; |
} |