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

Subversion Repositories t48

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /t48/tags/rel_0_4_beta/sw
    from Rev 254 to Rev 292
    Reverse comparison

Rev 254 → Rev 292

/run_regression.pl
0,0 → 1,136
#!/usr/bin/perl -w
#
# ############################################################################
#
# run_regression.pl
#
# $Id: run_regression.pl,v 1.8 2004-09-12 00:30:53 arniml Exp $
#
# Copyright (c) 2004, Arnim Laeuger (arniml@opencores.org)
#
# All rights reserved
#
# ############################################################################
#
# Purpose:
# ========
#
# Runs regression suite over all testcells found in $VERIF_DIR.
#
# run_regression.pl [-d]
# -d : Perform a dump compare on each test with the i8039 simulator.
#
# The testcells are identified by searching for the .asm file(s).
# Each testcell is built by calling the central Makefile.cell.
# The resulting hex-file is then copied to $SIM_DIR where the VHDL simulator
# is started.
#
 
 
use strict;
 
use Getopt::Std;
 
 
sub print_usage {
print <<EOU;
Runs regression tests in \$VERIF_DIR.
Usage:
run_regression.pl [-d]
-d : Perform a dump compare on each test with the i8039 simulator.
EOU
}
 
 
my %options;
my (@asm_files, $asm_file);
my (%cells, $cell, $cell_dir, $tag);
my $pwd;
my $dump_compare = 0;
my $dump_compare_cell = 0;
 
 
##############################################################################
# Commands to call the different VHDL simulators.
#
# GHDL
my $ghdl_simulator = './tb_behav_c0 --assert-level=error';
my $ghdl_simulator_vcd = $ghdl_simulator.' --vcd=temp.vcd';
#
# Choose simulator:
my $vhdl_simulator = $ghdl_simulator;
my $vhdl_simulator_vcd = $ghdl_simulator_vcd;
#
##############################################################################
 
 
# process command line options
if (!getopts('d', \%options)) {
print_usage();
exit(1);
}
 
if (exists($options{'d'})) {
$dump_compare = 1;
}
 
$pwd = `pwd`;
chomp($pwd);
 
 
@asm_files = `find \$VERIF_DIR/black_box -name '*.asm'`;
push(@asm_files, `find \$VERIF_DIR/white_box -name '*.asm'`);
 
 
foreach $asm_file (@asm_files) {
chomp($asm_file);
# strip off assembler file names
$asm_file =~ s/\/[^\/]+\.asm//;
# strip off verification directory
$asm_file =~ s/$ENV{'VERIF_DIR'}\///;
$cells{$asm_file} = 1;
}
 
while (($cell, $tag) = each(%cells)) {
$cell_dir = "$ENV{'VERIF_DIR'}/$cell";
 
if (chdir($cell_dir)) {
print("Processing $cell\n");
 
$dump_compare_cell = -e 'no_dump_compare' ? 0 : $dump_compare;
 
system('sh', '-c', 'rm -f $SIM_DIR/t48_rom.hex');
system('sh', '-c', 'make -f $VERIF_DIR/include/Makefile.cell clean');
system('sh', '-c', 'make -f $VERIF_DIR/include/Makefile.cell simu clean');
if ($? == 0) {
chdir($ENV{'SIM_DIR'});
system('sh', '-c', 'ls -l t48_rom.hex');
system('sh', '-c', $dump_compare_cell > 0 ? $vhdl_simulator_vcd : $vhdl_simulator);
 
if ($dump_compare_cell) {
system('sh', '-c', 'rm -f dump sim.dump vhdl.dump');
system('sh', '-c',
'vcd2vec.pl -s ../../sw/dump_compare.signals < temp.vcd | vec2dump.pl > vhdl.dump');
system('sh', '-c', 'i8039 -f t48_rom.hex -x t48_ext_rom.hex -d > dump');
system('sh', '-c', 'egrep \':.+\|\' dump | sed -e \'s/[^|]*. *//\' > sim.dump');
system('sh', '-c', 'diff -b -q sim.dump vhdl.dump');
print("Dump Compare: ");
if ($? == 0) {
print("PASS\n");
} else {
print("FAIL\n");
}
system('sh', '-c', 'rm -f dump sim.dump vhdl.dump temp.vcd');
} elsif ($dump_compare) {
print("Dump Compare: Excluded\n");
}
 
} else {
print("Error: Cannot make cell $cell!\n");
}
} else {
print("Error: Cannot change to directory $cell_dir!\n");
}
}
 
chdir($pwd);
run_regression.pl Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: verif/white_box/psen_rd_wr_timing/test.asm =================================================================== --- verif/white_box/psen_rd_wr_timing/test.asm (nonexistent) +++ verif/white_box/psen_rd_wr_timing/test.asm (revision 292) @@ -0,0 +1,59 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-09-12 00:28:58 arniml Exp $ + ;; + ;; Test overlap of PSEN and RD/WR. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + + ;; access external memory + mov r0, #0FFH + mov a, #001H + movx @r0, a + + ;; jump to external Program Memory + jmp extern_rom + +pass: PASS + +fail: FAIL + + + ORG 0800H +extern_rom: + ;; write to external memory + mov r0, #010H + mov a, #0A5H + movx @r0, a + cpl a + mov r1, a + inc r0 + movx @r0, a + + ;; read back data + movx a, @r0 + cpl a + add a, r1 + cpl a + jz read_next + jmp fail + +read_next: + mov a, r1 + cpl a + mov r1, a + dec r0 + movx a, @r0 + cpl a + add a, r1 + cpl a + jz read_ok + jmp fail + +read_ok: + jmp pass Index: verif/white_box/p1_port_reg_conflict/no_dump_compare =================================================================== --- verif/white_box/p1_port_reg_conflict/no_dump_compare (nonexistent) +++ verif/white_box/p1_port_reg_conflict/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +External ports not modelled in detail in i8039 emulator. Index: verif/white_box/p1_port_reg_conflict/test.asm =================================================================== --- verif/white_box/p1_port_reg_conflict/test.asm (nonexistent) +++ verif/white_box/p1_port_reg_conflict/test.asm (revision 292) @@ -0,0 +1,119 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1 2004-05-17 14:34:41 arniml Exp $ + ;; + ;; Test P1 conflict for reading port or output register. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + + ;; access testbench peripherals + mov r0, #0FFH + mov a, #002H + movx @r0, a + + ;; check functionality of P1 testbench peripheral + in a, p1 + inc a + jnz fail + + mov r0, #000H + ;; extern write 00H to P1 + clr a + movx @r0, a + in a, p1 + jnz fail + ;; extern write 0AAH to P1 + mov a, #0AAH + movx @r0, a + clr a + in a, p1 + add a, #056H + jnz fail + ;; extern write 055H to P1 + mov a, #055H + movx @r0, a + clr a + in a, p1 + add a, #0ABH + jnz fail + + ;; reset extern P1 to 0FFH + dec a + movx @r0, a + + ;; + ;; Start of real test + ;; + + ;; Test ORL + + ;; set internal P1 to 0AAH + mov a, #0AAH + outl p1, a + in a, p1 + add a, #056H + jnz fail + + ;; extern write 055H to P1 + mov a, #055H + movx @r0, a + + in a, p1 + jnz fail + + ;; set internal P1 to 0ABH, setting P1[0] to 1 + orl P1, #001H + in a, p1 + dec a + jnz fail + + ;; reset extern P1 to 0FFH + dec a + movx @r0, a + + ;; compare P1 vs. 0ABH + in a, p1 + cpl a + add a, #0ABH + cpl a + jnz fail + + ;; reset intern P1 to 0FFH + dec a + outl p1, a + + ;; set internal P1 to 055H + mov a, #055H + outl p1, a + clr a + in a, p1 + add a, #0ABH + jnz fail + + ;; external write 0AAH to P1 + mov a, #0AAH + movx @r0, a + + ;; set internal P1 to 054H + anl P1, #0FEH + + ;; reset extern P1 to 0FFH + mov a, #0FFH + movx @r0, a + + ;; compare P1 vs. 054H + in a, p1 + cpl a + add a, #054H + cpl a + jnz fail + + +pass: PASS + +fail: FAIL Index: verif/white_box/p2_port_reg_conflict/no_dump_compare =================================================================== --- verif/white_box/p2_port_reg_conflict/no_dump_compare (nonexistent) +++ verif/white_box/p2_port_reg_conflict/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +External ports not modelled in detail for i8039 emulator. Index: verif/white_box/p2_port_reg_conflict/test.asm =================================================================== --- verif/white_box/p2_port_reg_conflict/test.asm (nonexistent) +++ verif/white_box/p2_port_reg_conflict/test.asm (revision 292) @@ -0,0 +1,119 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1 2004-05-17 13:47:32 arniml Exp $ + ;; + ;; Test P2 conflict for reading port or output register. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + + ;; access testbench peripherals + mov r0, #0FFH + mov a, #002H + movx @r0, a + + ;; check functionality of P2 testbench peripheral + in a, p2 + inc a + jnz fail + + mov r0, #001H + ;; extern write 00H to P2 + clr a + movx @r0, a + in a, p2 + jnz fail + ;; extern write 0AAH to P2 + mov a, #0AAH + movx @r0, a + clr a + in a, p2 + add a, #056H + jnz fail + ;; extern write 055H to P2 + mov a, #055H + movx @r0, a + clr a + in a, p2 + add a, #0ABH + jnz fail + + ;; reset extern P2 to 0FFH + dec a + movx @r0, a + + ;; + ;; Start of real test + ;; + + ;; Test ORL + + ;; set internal P2 to 0AAH + mov a, #0AAH + outl p2, a + in a, p2 + add a, #056H + jnz fail + + ;; extern write 055H to P2 + mov a, #055H + movx @r0, a + + in a, p2 + jnz fail + + ;; set internal P2 to 0ABH, setting P2[0] to 1 + orl P2, #001H + in a, p2 + dec a + jnz fail + + ;; reset extern P2 to 0FFH + dec a + movx @r0, a + + ;; compare P2 vs. 0ABH + in a, p2 + cpl a + add a, #0ABH + cpl a + jnz fail + + ;; reset intern P2 to 0FFH + dec a + outl p2, a + + ;; set internal P2 to 055H + mov a, #055H + outl p2, a + clr a + in a, p2 + add a, #0ABH + jnz fail + + ;; external write 0AAH to P2 + mov a, #0AAH + movx @r0, a + + ;; set internal P2 to 054H + anl P2, #0FEH + + ;; reset extern P2 to 0FFH + mov a, #0FFH + movx @r0, a + + ;; compare P2 vs. 054H + in a, p2 + cpl a + add a, #054H + cpl a + jnz fail + + +pass: PASS + +fail: FAIL Index: verif/black_box/cnt/int/no_dump_compare =================================================================== --- verif/black_box/cnt/int/no_dump_compare (nonexistent) +++ verif/black_box/cnt/int/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +Modelling accuracy of interrupts is not sufficient for 1:1 dump compare. Index: verif/black_box/cnt/int/test.asm =================================================================== --- verif/black_box/cnt/int/test.asm (nonexistent) +++ verif/black_box/cnt/int/test.asm (revision 292) @@ -0,0 +1,113 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1 2004-05-16 16:25:14 arniml Exp $ + ;; + ;; Test Counter Interrupt. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + jmp start + nop + jmp fail + jmp fail + jmp counter_int + jmp fail + + ;; Start of test +start: mov a, #0FEH + mov t, a + + mov r0, #000H + + strt cnt + en tcnti + + jtf fail + + ;; apply falling edge on T1 -> T = 0FFH + anl P1, #0FDH + call check_cnt_idle + mov a, t + inc a + jnz fail + ;; apply rising edge on T1 + orl P1, #002H + call check_cnt_idle + mov a, t + inc a + jnz fail + + ;; apply falling edge on T1 -> T = 000H + anl P1, #0FDH + jtf goon + jmp fail +goon: mov a, r0 + inc a + jnz fail + mov r0, a + jtf fail + ;; apply rising edge on T1 + orl P1, #002H + call check_cnt_idle + + ;; apply falling edge on T1 -> T = 001H + anl P1, #0FDH + call check_cnt_idle + mov a, t + dec a + jnz fail + ;; apply rising edge on T1 + orl P1, #002H + call check_cnt_idle + mov a, t + dec a + jnz fail + + ;; apply falling edge on T1 -> T = 002H + anl P1, #0FDH + call check_cnt_idle + mov a, t + dec a + dec a + jnz fail + ;; apply rising edge on T1 + orl P1, #002H + call check_cnt_idle + mov a, t + dec a + dec a + jnz fail + + ;; disable interrupt and trigger overflow + dis tcnti + mov a, #0FFH + mov t, a + call check_cnt_idle + + ;; apply falling edge on T1 -> T = 000H + anl P1, #0FDH + jtf goon2 + jmp fail +goon2: mov a, r0 + jnz fail + mov a, t + jnz fail + + +pass: PASS + +fail: FAIL + + +check_cnt_idle: + jtf fail + mov a, r0 + jnz fail + ret + + +counter_int: + mov r0, #0FFH + retr Index: verif/black_box/cnt/cnt/test.asm =================================================================== --- verif/black_box/cnt/cnt/test.asm (nonexistent) +++ verif/black_box/cnt/cnt/test.asm (revision 292) @@ -0,0 +1,82 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-05-16 16:25:46 arniml Exp $ + ;; + ;; Test Counter. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #0FEH + mov t, a + + strt cnt + jtf fail + + ;; apply falling edge on T1 + anl P1, #0FDH + jtf fail + mov a, t + cpl a + add a, #0FFH + cpl a + jnz fail + + ;; apply rising edge on T1 + orl P1, #002H + jtf fail + + ;; apply falling edge on T1 + anl P1, #0FDH + jtf goon + jmp fail +goon: jtf fail + mov a, t + jnz fail + + ;; apply rising edge on T1 + orl P1, #002H + jtf fail + + ;; apply falling edge on T1 + anl P1, #0FDH + jtf fail + mov a, t + dec a + jnz fail + + ;; check inactivity of counter + stop tcnt + mov a, #0FFH + mov t, a + + ;; apply rising edge on T1 + orl P1, #002H + jtf fail + ;; apply falling edge on T1 + anl P1, #0FDH + jtf fail + ;; apply rising edge on T1 + orl P1, #002H + jtf fail + ;; apply falling edge on T1 + anl P1, #0FDH + jtf fail + + strt cnt + ;; apply rising edge on T1 + orl P1, #002H + jtf fail + ;; apply falling edge on T1 + anl P1, #0FDH + jtf goon2 + jmp fail + +goon2: + +pass: PASS + +fail: FAIL Index: verif/black_box/ins/no_dump_compare =================================================================== --- verif/black_box/ins/no_dump_compare (nonexistent) +++ verif/black_box/ins/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +External ports not modelled in detail in i8039 emulator. Index: verif/black_box/ins/test.asm =================================================================== --- verif/black_box/ins/test.asm (nonexistent) +++ verif/black_box/ins/test.asm (revision 292) @@ -0,0 +1,31 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test INS A, BUS. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #055H + outl bus, a + + clr a + ins a, bus + add a, #0ABH + jnz fail + + mov a, #0AAH + outl bus, a + + clr a + ins a, bus + add a, #056H + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/int/simple_int_retr/no_dump_compare =================================================================== --- verif/black_box/int/simple_int_retr/no_dump_compare (nonexistent) +++ verif/black_box/int/simple_int_retr/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +Modelling accuracy of interrupts is not sufficient for 1:1 dump compare. Index: verif/black_box/int/simple_int_retr/test.asm =================================================================== --- verif/black_box/int/simple_int_retr/test.asm (nonexistent) +++ verif/black_box/int/simple_int_retr/test.asm (revision 292) @@ -0,0 +1,48 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test simple interrupt/RETR requences. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jmp start_user + + + ORG 3 + cpl f1 + cpl f0 + mov r1, #060H +int_loop: + djnz r1, int_loop + jf1 int_goon + jmp fail +int_goon: + dis i + retr + + + ORG 020H +start_user: + mov r0, #080H + en i + nop +loop1: djnz r0, loop1 + jf0 fail + jf1 goon1 + jmp fail + +goon1: mov r0, #080H + cpl f1 + en i +loop2: djnz r0, loop2 + jf0 fail + jf1 pass + +fail: FAIL + +pass: PASS Index: verif/black_box/int/jni/no_dump_compare =================================================================== --- verif/black_box/int/jni/no_dump_compare (nonexistent) +++ verif/black_box/int/jni/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +Modelling accuracy of interrupts is not sufficient for 1:1 dump compare. Index: verif/black_box/int/jni/test.asm =================================================================== --- verif/black_box/int/jni/test.asm (nonexistent) +++ verif/black_box/int/jni/test.asm (revision 292) @@ -0,0 +1,21 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test JNI. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jni fail + + mov r0, #000H +poll: jni pass + djnz r0, poll + +fail: FAIL + +pass: PASS Index: verif/black_box/int/simple_jump_to/test.asm =================================================================== --- verif/black_box/int/simple_jump_to/test.asm (nonexistent) +++ verif/black_box/int/simple_jump_to/test.asm (revision 292) @@ -0,0 +1,28 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test a simple jump to interrupt. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jmp start_user + + + ORG 3 + jmp pass + + + ORG 010H +start_user: + en i + mov r0, #080H +loop: djnz r0, loop + +fail: FAIL + +pass: PASS Index: verif/black_box/orl/bus/no_dump_compare =================================================================== --- verif/black_box/orl/bus/no_dump_compare (nonexistent) +++ verif/black_box/orl/bus/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +External ports not modelled in detail in i8039 emulator. Index: verif/black_box/orl/bus/test.asm =================================================================== --- verif/black_box/orl/bus/test.asm (nonexistent) +++ verif/black_box/orl/bus/test.asm (revision 292) @@ -0,0 +1,29 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test ORL BUS, data. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #000H + outl bus, a + + cpl a + ins a, bus + jnz fail + + orl bus, #0AAH + jnz fail + + ins a, bus + add a, #056H + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/orl/pp/test.asm =================================================================== --- verif/black_box/orl/pp/test.asm (nonexistent) +++ verif/black_box/orl/pp/test.asm (revision 292) @@ -0,0 +1,40 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test ORL Pp, data. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #000H + outl p1, a + outl p2, a + + cpl a + in a, p1 + jnz fail + + cpl a + in a, p2 + jnz fail + + orl P1, #0AAH + jnz fail + orl P2, #055H + jnz fail + + in a, p1 + add a, #056H + jnz fail + + in a, p2 + add a, #0ABH + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/orl/rr/test.asm =================================================================== --- verif/black_box/orl/rr/test.asm (nonexistent) +++ verif/black_box/orl/rr/test.asm (revision 292) @@ -0,0 +1,149 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test ORL A, Rr with RB0 and RB1. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + + ;; fill RB0 + call fill + + ;; check RB0 + call check + + ;; fill RB1 + sel rb1 + call fill + sel rb0 + + ;; clear RB0 + call clr_rb0 + + ;; check RB1 + sel rb1 + call check + + ;; check RB0 for all 0 + mov r0, #000H + mov r1, #008H +chk0_loop: + mov a, @r0 + jnz fail + inc r0 + djnz r1, chk0_loop + +pass: PASS + +fail: FAIL + + + ORG 0300H + +fill: mov a, #0FEH + mov r0, a + mov a, #0FDH + mov r1, a + mov a, #0FBH + mov r2, a + mov a, #0F7H + mov r3, a + mov a, #0EFH + mov r4, a + mov a, #0DFH + mov r5, a + mov a, #0BFH + mov r6, a + mov a, #07FH + mov r7, a + ret + +clr_rb0: + mov r0, #007H + clr a +clr_loop: + mov @r0, a + djnz r0, clr_loop + ret + +check: mov a, #(1 << 0) + orl a, r0 + cpl a + jnz fail_p3 + clr a + orl a, r0 + add a, #(~(0FFH - (1 << 0)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 1) + orl a, r1 + cpl a + jnz fail_p3 + clr a + orl a, r1 + add a, #(~(0FFH - (1 << 1)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 2) + orl a, r2 + cpl a + jnz fail_p3 + clr a + orl a, r2 + add a, #(~(0FFH - (1 << 2)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 3) + orl a, r3 + cpl a + jnz fail_p3 + clr a + orl a, r3 + add a, #(~(0FFH - (1 << 3)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 4) + orl a, r4 + cpl a + jnz fail_p3 + clr a + orl a, r4 + add a, #(~(0FFH - (1 << 4)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 5) + orl a, r5 + cpl a + jnz fail_p3 + clr a + orl a, r5 + add a, #(~(0FFH - (1 << 5)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 6) + orl a, r6 + cpl a + jnz fail_p3 + clr a + orl a, r6 + add a, #(~(0FFH - (1 << 6)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 7) + orl a, r7 + cpl a + jnz fail_p3 + clr a + orl a, r7 + add a, #(~(0FFH - (1 << 7)) + 1) & 0FFH + jnz fail_p3 + + ret + +fail_p3: + FAIL Index: verif/black_box/orl/a_data/test.asm =================================================================== --- verif/black_box/orl/a_data/test.asm (nonexistent) +++ verif/black_box/orl/a_data/test.asm (revision 292) @@ -0,0 +1,32 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test ORL A, data. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + clr a + orl a, #0FFH + jz fail + orl a, #0FFH + jz fail + + clr a + orl a, #055H + add a, #0ABH + jnz fail + + clr a + orl a, #023H + orl a, #088H + add a, #055H + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/orl/ind_rr/test.asm =================================================================== --- verif/black_box/orl/ind_rr/test.asm (nonexistent) +++ verif/black_box/orl/ind_rr/test.asm (revision 292) @@ -0,0 +1,92 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test ORL A, @ Rr. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + +testR0R1 MACRO pos + inc r0 + inc r1 + mov a, #(1 << pos) + orl a, @r0 + cpl a + jnz fail + clr a + orl a, @r0 + add a, #(~(0FFH - (1 << pos)) + 1) & 0FFH + jnz fail + mov a, #(1 << pos) + orl a, @r1 + cpl a + jnz fail + clr a + orl a, @r1 + add a, #(~(0FFH - (1 << pos)) + 1) & 0FFH + jnz fail + ENDM + + ORG 0 + + ;; Start of test + mov r0, #010H + mov r1, #020H + mov a, #0FEH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FDH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FBH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0F7H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0EFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0DFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0BFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #07FH + mov @r0, a + mov @r1, a + + jmp goon + + ORG 256 + ;; +goon: mov r0, #00FH + mov r1, #01FH + testR0R1 0 + testR0R1 1 + testR0R1 2 + testR0R1 3 + testR0R1 4 + testR0R1 5 + testR0R1 6 + testR0R1 7 + +pass: PASS + +fail: FAIL Index: verif/black_box/rb/int/no_dump_compare =================================================================== --- verif/black_box/rb/int/no_dump_compare (nonexistent) +++ verif/black_box/rb/int/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +Modelling accuracy of interrupts is not sufficient for 1:1 dump compare. Index: verif/black_box/rb/int/test.asm =================================================================== --- verif/black_box/rb/int/test.asm (nonexistent) +++ verif/black_box/rb/int/test.asm (revision 292) @@ -0,0 +1,228 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-04-15 22:01:51 arniml Exp $ + ;; + ;; Test interrupts in conjunction with RB-switching. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + jmp start + nop + jmp interrupt + jmp fail + jmp fail + jmp fail + + + ;; Start of test +start: + ;; fill RB0 + clr a + call fill + + ;; fill RB1 + sel rb1 + mov a, #010H + call fill + sel rb0 + + ;; set up interrupt + clr f1 + ;; sync on next interrupt + call sync_on_int + + mov r0, #000H + en i +loop1: jf1 goon1 + djnz r0, loop1 + jmp fail + +goon1: + dis i + clr f1 + + ;; check BS implicitely + ;; r0 must not be zero + mov a, r0 + jz fail + + ;; check RB1 + sel rb1 + call check_0 + + ;; check RB0 + sel rb0 + call check_rb0 + +pass: PASS + +fail: FAIL + + + ORG 0200H +interrupt: + sel rb1 + mov r0, a + + call check_rb1 + + clr a + mov r1, a + mov r2, a + mov r3, a + mov r4, a + mov r5, a + mov r6, a + mov r7, a + xch a, r0 + + cpl f1 + + retr + + + ORG 0300H + +fill: add a, #0B0H + mov r0, a + inc a + mov r1, a + inc a + mov r2, a + inc a + mov r3, a + inc a + mov r4, a + inc a + mov r5, a + inc a + mov r6, a + inc a + mov r7, a + ret + +check_0: + mov a, r0 + jnz fail_p3 + mov a, r1 + jnz fail_p3 + mov a, r2 + jnz fail_p3 + mov a, r3 + jnz fail_p3 + mov a, r4 + jnz fail_p3 + mov a, r5 + jnz fail_p3 + mov a, r6 + jnz fail_p3 + mov a, r7 + jnz fail_p3 + ret + + ;; synchronize on interrupt + ;; use r7 for timeout detection +sync_on_int: + mov a, r7 ; save r7 + mov r7, #000H +wait_int1: + jni sync_on_int2 + djnz r7, wait_int1 + jmp fail_p3 + +sync_on_int2: + mov r7, #000H +wait_int2: + jni still_int + mov r7, a ; restore r7 + call clr_int + retr +still_int: + djnz r7, wait_int2 + jmp fail_p3 + +clr_int: + ;; clear latched interrupt request with RETR! + retr + +check_rb1: + mov a, #(~0C1H & 0FFH) + add a, r1 + cpl a + jnz fail_p3 + + mov a, #(~0C2H & 0FFH) + add a, r2 + cpl a + jnz fail_p3 + + mov a, #(~0C3H & 0FFH) + add a, r3 + cpl a + jnz fail_p3 + + mov a, #(~0C4H & 0FFH) + add a, r4 + cpl a + jnz fail_p3 + + mov a, #(~0C5H & 0FFH) + add a, r5 + cpl a + jnz fail_p3 + + mov a, #(~0C6H & 0FFH) + add a, r6 + cpl a + jnz fail_p3 + + mov a, #(~0C7H & 0FFH) + add a, r7 + cpl a + jnz fail_p3 + + ret + +check_rb0: + mov a, #(~0B1H & 0FFH) + add a, r1 + cpl a + jnz fail_p3 + + mov a, #(~0B2H & 0FFH) + add a, r2 + cpl a + jnz fail_p3 + + mov a, #(~0B3H & 0FFH) + add a, r3 + cpl a + jnz fail_p3 + + mov a, #(~0B4H & 0FFH) + add a, r4 + cpl a + jnz fail_p3 + + mov a, #(~0B5H & 0FFH) + add a, r5 + cpl a + jnz fail_p3 + + mov a, #(~0B6H & 0FFH) + add a, r6 + cpl a + jnz fail_p3 + + mov a, #(~0B7H & 0FFH) + add a, r7 + cpl a + jnz fail_p3 + + ret + +fail_p3: + FAIL Index: verif/black_box/rb/misc/test.asm =================================================================== --- verif/black_box/rb/misc/test.asm (nonexistent) +++ verif/black_box/rb/misc/test.asm (revision 292) @@ -0,0 +1,142 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test several operations in conjunction with RB-switching. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + + ;; fill data memory with 0 + clr a + mov r0, a +fill_loop: + mov @r0, a + djnz r0, fill_loop + + ;; set up both register banks with indirect writes + mov r0, #01FH + mov r1, #008H +fill_rb1_loop: + mov a, r0 + mov @r0, a + dec r0 + djnz r1, fill_rb1_loop + + mov r0, #007H +fill_rb0_loop: + mov a, r0 + mov @r0, a + djnz r0, fill_rb0_loop + mov a, r0 + mov @r0, a + + ;; check RB0 + call check_rb0 + + ;; check RB1 + sel rb1 + call check_rb1 + + ;; check RB0 again + sel rb0 + call check_rb0 + + ;; check memory between RB0 and RB1 for 0 + mov r0, #00EH ; check 14 bytes + mov r1, #00AH ; starting from address A +chk_loop1: + mov a, @r1 + jnz fail + inc r1 + djnz r0, chk_loop1 + + ;; check memory above RB1 for 0 + mov r0, #0100H - 0020H ; check 256-32 bytes + mov r1, #020H ; starting from address 20H +chk_loop2: + mov a, @r1 + jnz fail + inc r1 + djnz r0, chk_loop2 + + ;; now use RB1 to indirect address register 0-7 + mov r1, #001H ; restore r1 + mov r0, #000H ; restore r0, set trap + sel rb1 + mov r0, #007H +ind_chk_loop: + mov a, @r0 + cpl a + add a, r0 + cpl a + jnz fail + djnz r0, ind_chk_loop + + +pass: PASS + +fail: FAIL + + + + ORG 0300H +check_rb0: + mov a, r0 + jnz fail_p3 + mov a,r1 + add a, #0FFH + jnz fail_p3 + mov a,r2 + add a, #0FEH + jnz fail_p3 + mov a,r3 + add a, #0FDH + jnz fail_p3 + mov a,r4 + add a, #0FCH + jnz fail_p3 + mov a,r5 + add a, #0FBH + jnz fail_p3 + mov a,r6 + add a, #0FAH + jnz fail_p3 + mov a,r7 + add a, #0F9H + jnz fail_p3 + ret + +check_rb1: + mov a, r0 + add a, #0E8H + jnz fail_p3 + mov a,r1 + add a, #0E7H + jnz fail_p3 + mov a,r2 + add a, #0E6H + jnz fail_p3 + mov a,r3 + add a, #0E5H + jnz fail_p3 + mov a,r4 + add a, #0E4H + jnz fail_p3 + mov a,r5 + add a, #0E3H + jnz fail_p3 + mov a,r6 + add a, #0E2H + jnz fail_p3 + mov a,r7 + add a, #0E1H + jnz fail_p3 + ret + +fail_p3: + FAIL Index: verif/black_box/expander/no_dump_compare =================================================================== --- verif/black_box/expander/no_dump_compare (nonexistent) +++ verif/black_box/expander/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +External ports not modelled in detail for i8039 emulator. Index: verif/black_box/expander/test.asm =================================================================== --- verif/black_box/expander/test.asm (nonexistent) +++ verif/black_box/expander/test.asm (revision 292) @@ -0,0 +1,88 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1 2004-05-01 11:56:57 arniml Exp $ + ;; + ;; Test Expander port functionality. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #00AH + movd p4, a + mov a, #005H + movd p5, a + mov a, #00BH + movd p6, a + mov a, #000H + movd p7, a + + ;; check P4 + movd a, p4 + orl a, #0F5H + inc a + ;jnz fail + mov a, #0F5H + orld p4, a + movd a, p4 + inc a + ;jnz fail + mov a, #0FEH + anld p4, a + movd a, p4 + add a, #0F2H + ;jnz fail + + ;; check P5 + movd a, p5 + orl a, #0FAH + inc a + ;jnz fail + mov a, #0FAH + orld p5, a + movd a, p5 + inc a + ;jnz fail + mov a, #0FDH + anld p5, a + movd a, p5 + add a, #0F3H + ;jnz fail + + ;; check P6 + movd a, p6 + orl a, #0F4H + inc a + ;jnz fail + mov a, #0F4H + orld p6, a + movd a, p6 + inc a + ;jnz fail + mov a, #0F8H + anld p6, a + movd a, p6 + add a, #0F8H + ;jnz fail + + ;; check P7 + movd a, p7 + orl a, #0FFH + inc a + ;jnz fail + mov a, #0FFH + orld p7, a + movd a, p7 + inc a + ;jnz fail + mov a, #0F7H + anld p7, a + movd a, p7 + add a, #0F9H + ;jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/outl/bus/no_dump_compare =================================================================== --- verif/black_box/outl/bus/no_dump_compare (nonexistent) +++ verif/black_box/outl/bus/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +External ports not modelled in detail in i8039 emulator. Index: verif/black_box/outl/bus/test.asm =================================================================== --- verif/black_box/outl/bus/test.asm (nonexistent) +++ verif/black_box/outl/bus/test.asm (revision 292) @@ -0,0 +1,20 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test OUTL BUS, A + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #055H + outl bus, a + cpl a + outl bus, a + +pass: PASS + +fail: FAIL Index: verif/black_box/outl/pp/test.asm =================================================================== --- verif/black_box/outl/pp/test.asm (nonexistent) +++ verif/black_box/outl/pp/test.asm (revision 292) @@ -0,0 +1,20 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test OUTL Pp, A + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #055H + outl p1, a + mov a, #0AAH + outl p2, a + +pass: PASS + +fail: FAIL Index: verif/black_box/tim/int/no_dump_compare =================================================================== --- verif/black_box/tim/int/no_dump_compare (nonexistent) +++ verif/black_box/tim/int/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +Modelling accuracy of interrupts is not sufficient for 1:1 dump compare. Index: verif/black_box/tim/int/test.asm =================================================================== --- verif/black_box/tim/int/test.asm (nonexistent) +++ verif/black_box/tim/int/test.asm (revision 292) @@ -0,0 +1,41 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test Timer Interrupt. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + jmp start + nop + jmp fail + jmp fail + jmp timer_int + jmp fail + + ;; Start of test +start: mov a, #0F8H + mov t, a + clr a + mov r0, a + mov r1, a + + en tcnti + jtf fail + + strt t + +loop: mov a, r0 + jnz pass + djnz r1, loop + +fail: FAIL + +pass: PASS + + +timer_int: + mov r0, #0FFH + retr Index: verif/black_box/tim/t/test.asm =================================================================== --- verif/black_box/tim/t/test.asm (nonexistent) +++ verif/black_box/tim/t/test.asm (revision 292) @@ -0,0 +1,110 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test Timer. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #0F8H + mov t, a + + strt t + jtf fail + + mov r0, #000H +poll1: jtf goon1 + djnz r0, poll1 + jmp fail + +goon1: mov a, t + jnz fail + mov r0, #000H +poll2: mov a, t + add a, #0FBH + jz goon2 + djnz r0, poll2 + +goon2: stop tcnt + clr a + mov t, a + strt t + + mov a, t + jnz fail + + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + + mov a, t + dec a + jnz fail + + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + + mov a, t + dec a + dec a + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/movx/no_dump_compare =================================================================== --- verif/black_box/movx/no_dump_compare (nonexistent) +++ verif/black_box/movx/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +External RAM is not modelled in i8039 emulator. Index: verif/black_box/movx/test.asm =================================================================== --- verif/black_box/movx/test.asm (nonexistent) +++ verif/black_box/movx/test.asm (revision 292) @@ -0,0 +1,60 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-05-17 14:42:09 arniml Exp $ + ;; + ;; Test MOVX A, @ Rr for RB0. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov r0, #0FEH +fill_loop1: + mov a, r0 + movx @r0, a + djnz r0, fill_loop1 + + ;; check memory + mov a, r0 + jnz fail + mov r0, #0FEH + mov r1, #002H +check_loop1: + clr a + movx a, @r1 + add a, r0 + jnz fail + inc r1 + dec r0 + mov a, r0 + dec a + jnz check_loop1 + + + + mov r1, #0FEH + mov a, #002H +fill_loop2: + movx @r1, a + inc a + djnz r1, fill_loop2 + + ;; check memory + mov a, r1 + jnz fail + mov r0, #0FEH +check_loop2: + clr a + movx a, @r0 + add a, r0 + jnz fail + dec r0 + mov a, r0 + dec a + jnz check_loop2 + +pass: PASS + +fail: FAIL Index: verif/black_box/anl/bus/no_dump_compare =================================================================== --- verif/black_box/anl/bus/no_dump_compare (nonexistent) +++ verif/black_box/anl/bus/no_dump_compare (revision 292) @@ -0,0 +1,2 @@ +Reason why this cell is exluded from dump compare: +External ports not modelled in detail in i8039 emulator. Index: verif/black_box/anl/bus/test.asm =================================================================== --- verif/black_box/anl/bus/test.asm (nonexistent) +++ verif/black_box/anl/bus/test.asm (revision 292) @@ -0,0 +1,30 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test ANL BUS, data. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #0FFH + outl bus, a + + clr a + ins a, bus + inc a + jnz fail + + anl bus, #0AAH + jnz fail + + ins a, bus + add a, #056H + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/anl/pp/test.asm =================================================================== --- verif/black_box/anl/pp/test.asm (nonexistent) +++ verif/black_box/anl/pp/test.asm (revision 292) @@ -0,0 +1,41 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test ANL Pp, data. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #0FFH + outl p1, a + outl p2, a + + clr a + in a, p1 + inc a + jnz fail + + in a, p2 + inc a + jnz fail + + anl P1, #0AAH + jnz fail + anl P2, #055H + jnz fail + + in a, p1 + add a, #056H + jnz fail + + in a, p2 + add a, #0ABH + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/anl/rr/test.asm =================================================================== --- verif/black_box/anl/rr/test.asm (nonexistent) +++ verif/black_box/anl/rr/test.asm (revision 292) @@ -0,0 +1,140 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test ANL A, Rr for RB0 and RB1. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + + ;; fill RB0 + call fill + + ;; check RB0 + call check + + ;; fill RB1 + sel rb1 + call fill + sel rb0 + + ;; clear RB0 + call clr_rb0 + + ;; check RB1 + sel rb1 + call check + + ;; check RB0 for all 0 + mov r0, #000H + mov r1, #008H +chk0_loop: + mov a, @r0 + jnz fail + inc r0 + djnz r1, chk0_loop + +pass: PASS + +fail: FAIL + + + ORG 0300H + +fill: mov a, #0FEH + mov r0, a + mov a, #0FDH + mov r1, a + mov a, #0FBH + mov r2, a + mov a, #0F7H + mov r3, a + mov a, #0EFH + mov r4, a + mov a, #0DFH + mov r5, a + mov a, #0BFH + mov r6, a + mov a, #07FH + mov r7, a + ret + +clr_rb0: + mov r0, #007H + clr a +clr_loop: + mov @r0, a + djnz r0, clr_loop + ret + +check: mov a, #(1 << 0) + anl a, r0 + jnz fail_p3 + mov a, #0FFH + anl a, r0 + add a, #(~(0FFH - (1 << 0)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 1) + anl a, r1 + jnz fail_p3 + mov a, #0FFH + anl a, r1 + add a, #(~(0FFH - (1 << 1)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 2) + anl a, r2 + jnz fail_p3 + mov a, #0FFH + anl a, r2 + add a, #(~(0FFH - (1 << 2)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 3) + anl a, r3 + jnz fail_p3 + mov a, #0FFH + anl a, r3 + add a, #(~(0FFH - (1 << 3)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 4) + anl a, r4 + jnz fail_p3 + mov a, #0FFH + anl a, r4 + add a, #(~(0FFH - (1 << 4)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 5) + anl a, r5 + jnz fail_p3 + mov a, #0FFH + anl a, r5 + add a, #(~(0FFH - (1 << 5)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 6) + anl a, r6 + jnz fail_p3 + mov a, #0FFH + anl a, r6 + add a, #(~(0FFH - (1 << 6)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 7) + anl a, r7 + jnz fail_p3 + mov a, #0FFH + anl a, r7 + add a, #(~(0FFH - (1 << 7)) + 1) & 0FFH + jnz fail_p3 + ret + + +fail_p3: FAIL Index: verif/black_box/anl/a_data/test.asm =================================================================== --- verif/black_box/anl/a_data/test.asm (nonexistent) +++ verif/black_box/anl/a_data/test.asm (revision 292) @@ -0,0 +1,32 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test ANL A, data. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #0FFH + anl a, #000H + jnz fail + anl a, #000H + jnz fail + + mov a, #0FFH + anl a, #055H + add a, #0ABH + jnz fail + + mov a, #0FFH + anl a, #0B6H + anl a, #023H + add a, #0DEH + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/anl/ind_rr/test.asm =================================================================== --- verif/black_box/anl/ind_rr/test.asm (nonexistent) +++ verif/black_box/anl/ind_rr/test.asm (revision 292) @@ -0,0 +1,90 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test ANL A, @ Rr. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + +testR0R1 MACRO pos + inc r0 + inc r1 + mov a, #(1 << pos) + anl a, @r0 + jnz fail + mov a, #0FFH + anl a, @r0 + add a, #(~(0FFH - (1 << pos)) + 1) & 0FFH + jnz fail + mov a, #(1 << pos) + anl a, @r1 + jnz fail + mov a, #0FFH + anl a, @r1 + add a, #(~(0FFH - (1 << pos)) + 1) & 0FFH + jnz fail + ENDM + + ORG 0 + + ;; Start of test + mov r0, #010H + mov r1, #020H + mov a, #0FEH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FDH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FBH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0F7H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0EFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0DFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0BFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #07FH + mov @r0, a + mov @r1, a + + jmp goon + + ORG 256 + ;; +goon: mov r0, #00FH + mov r1, #01FH + testR0R1 0 + testR0R1 1 + testR0R1 2 + testR0R1 3 + testR0R1 4 + testR0R1 5 + testR0R1 6 + testR0R1 7 + +pass: PASS + +fail: FAIL Index: verif/black_box/mb/int/test.asm =================================================================== --- verif/black_box/mb/int/test.asm (nonexistent) +++ verif/black_box/mb/int/test.asm (revision 292) @@ -0,0 +1,62 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.4 2004-07-03 14:35:11 arniml Exp $ + ;; + ;; Test Program Memory bank selector with interrupts. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + jmp start + ORG 3 + jmp interrupt & 07FFH + + ORG 7 + jmp fail + + ;; Start of test +start: + sel mb1 + mov r0, #000H + en i +poll: jf1 goon1 + djnz r0, poll + jmp fail +goon1: + + call test_mb1 & 07FFH + +pass: PASS + +fail: FAIL + + ORG 0232H + jmp fail +interrupt: + call trick_mb + cpl f1 + retr + + ORG 0250H +trick_mb: + ret + + ORG 0260H + jmp fail + + + ORG 0A32H + jmp fail_hi + jmp fail_hi + jmp fail_hi + + ORG 0A50H + jmp fail_hi + + ORG 0A60H +test_mb1: + ret + +fail_hi: + FAIL Index: verif/black_box/mb/call_jmp/test.asm =================================================================== --- verif/black_box/mb/call_jmp/test.asm (nonexistent) +++ verif/black_box/mb/call_jmp/test.asm (revision 292) @@ -0,0 +1,125 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test Program Memory bank selector with CALL and JMP. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + sel mb1 + call call1 & 07FFH + sel mb1 + jmp jmp1 & 07FFH + ;; trap + nop + jmp fail + nop + jmp fail + ;; +jmp2: sel mb1 + call call3 & 07FFH + sel mb1 + jmp jmp3 & 07FFH + ;; trap + nop + jmp fail + nop + jmp fail + ;; +jmp4: sel mb1 + call call5 & 07FFH + sel mb1 + jmp jmp5 & 07FFH + ;; trap + nop + jmp fail + nop + jmp fail +jmp6: + +pass: PASS + +fail: FAIL + + ORG 0100H + + ;; trap + jmp fail + ;; +call2: sel mb1 + ret + ;; trap + jmp fail + ;; +call4: sel mb0 + ret + ;; trap + jmp fail + ;; +call6: sel mb1 + ret + + + + ORG 0800H + + ;; trap + nop + jmp fail_hi + nop + jmp fail_hi + ;; +jmp1: sel mb0 + call call2 | 0800H + sel mb0 + jmp jmp2 | 0800H + ;; trap + nop + jmp fail_hi + nop + jmp fail_hi + ;; +jmp3: sel mb0 + call call4 | 0800H + sel mb0 + jmp jmp4 | 0800H + ;; trap + nop + jmp fail_hi + nop + jmp fail_hi + ;; +jmp5: sel mb0 + call call6 | 0800H + sel mb0 + jmp jmp6 | 0800H + ;; trap + nop + jmp fail_hi + nop + jmp fail_hi + + +fail_hi: + FAIL + + + ORG 0900H +call1: sel mb0 + ret + ;; trap + jmp fail_hi + ;; +call3: sel mb1 + ret + ;; trap + jmp fail_hi + ;; +call5: sel mb0 + ret + ;; trap + jmp fail_hi Index: verif/black_box/da/test.asm =================================================================== --- verif/black_box/da/test.asm (nonexistent) +++ verif/black_box/da/test.asm (revision 292) @@ -0,0 +1,171 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-04-07 22:09:35 arniml Exp $ + ;; + ;; Test DA A. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov r7, #000H + + ;; testcase from "Single Component MCS-48 System" + mov a, #09BH + da a + jnc fail + mov r0, a + mov a, psw + jb6 fail + mov a, r0 + cpl a + add a, #001H + cpl a + jnz fail + + ;; a value that should not be changed + ;; upper nibble: no overflow + ;; lower nibble: no overflow + mov a, #037H + add a, r7 ; clear C and AC + da a + jc fail + mov r0, a + mov a, psw + jb6 fail + mov a, r0 + cpl a + add a, #037H + cpl a + jnz fail + + ;; upper nibble: no overflow + ;; lower nibble: overflow + mov a, #04AH + add a, r7 ; clear C and AC + da a + jc fail + mov r0, a + mov a, psw + jb6 fail + mov a, r0 + cpl a + add a, #050H + cpl a + jnz fail + + ;; upper nibble: overflow + ;; lower nibble: no overflow + mov a, #0C1H + add a, r7 ; clear C and AC + da a + jnc fail + mov r0, a + mov a, psw + jb6 fail + mov a, r0 + cpl a + add a, #021H + cpl a + jnz fail + + ;; upper nibble: overflow + ;; lower nibble: overflow + mov a, #0DEH + add a, r7 ; clear C and AC + da a + jnc fail + mov r0, a + mov a, psw + jb6 fail + mov a, r0 + cpl a + add a, #044H + cpl a + jnz fail + + + ;; ****************************************************************** + ;; Next round with Auxiliary Carry + ;; ****************************************************************** + + add a, r7 ; clear C and AC + ;; upper nibble: no overflow + ;; lower nibble: no overflow + mov a, #029H ; add two BCD numbers + add a, #019H ; result: 042H, but should be 48 BCD + jc fail + mov r0, a + mov a, psw + jb6 goon1 + jmp fail +goon1: mov a, r0 + da a + jc fail + cpl a + add a, #048H + cpl a + jnz fail + + add a, r7 ; clear C and AC + ;; upper nibble: overflow + ;; lower nibble: no overflow + mov a, #067H ; add two BCD numbers + add a, #059H ; result: 0C0H, but should be 126 BCD + jc fail + mov r0, a + mov a, psw + jb6 goon2 + jmp fail +goon2: mov a, r0 + clr c ; clear Carry, make set Carry by da testable + da a + jnc fail + cpl a + add a, #026H + cpl a + jnz fail + + add a, r7 ; clear C and AC + ;; upper nibble: no overflow + ;; lower nibble: overflow + mov a, #01FH ; this is not a BCD number! + add a, #033H ; reault: 052H, reveals 58 BCD + jc fail + mov r0, a + mov a, psw + jb6 goon3 + jmp fail +goon3: mov a, r0 + da a + jc fail + cpl a + add a, #058H + cpl a + jnz fail + + add a, r7 ; clear C and AC + ;; upper nibble: overflow + ;; lower nibble: overflow + mov a, #0EEH ; this is not a BCD number! + add a, #0C5H ; result: 1B3H. reveals 119 BCD + jnc fail + mov r0, a + mov a, psw + jb6 goon4 + jmp fail +goon4: mov a, r0 + clr c ; clear Carry, make set Carry by da testable + da a + jnc fail + cpl a + add a, #019H + cpl a + jnz fail + + +pass: PASS + +fail: FAIL Index: verif/black_box/xchd/test.asm =================================================================== --- verif/black_box/xchd/test.asm (nonexistent) +++ verif/black_box/xchd/test.asm (revision 292) @@ -0,0 +1,121 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-04-06 18:12:57 arniml Exp $ + ;; + ;; Test XCHD A, @ Rr. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + +testR0R1 MACRO pos + inc r0 + inc r1 + mov a, @r0 + cpl a + add a, #((~((pos+7) # 8) << 4) & 0F0H) | (pos & 00FH) + cpl a + jnz fail + mov a, @r1 + cpl a + add a, #((~((pos+7) # 8) << 4) & 0F0H) | (pos & 00FH) + cpl a + jnz fail + ENDM + + ORG 0 + + ;; Start of test + mov r0, #010H + mov r1, #020H + mov a, #0F0H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0E1H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0D2H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0C3H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0B4H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0A5H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #096H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #087H + mov @r0, a + mov @r1, a + + dec r0 + xchd a, @r0 + dec r0 + xchd a, @r0 + dec r0 + xchd a, @r0 + dec r0 + xchd a, @r0 + dec r0 + xchd a, @r0 + dec r0 + xchd a, @r0 + dec r0 + xchd a, @r0 + mov r0, #017H + xchd a, @r0 + + mov a, @r1 + dec r1 + xchd a, @r1 + dec r1 + xchd a, @r1 + dec r1 + xchd a, @r1 + dec r1 + xchd a, @r1 + dec r1 + xchd a, @r1 + dec r1 + xchd a, @r1 + dec r1 + xchd a, @r1 + mov r1, #027H + xchd a, @r1 + + jmp goon + + ORG 256 + ;; +goon: mov r0, #00FH + mov r1, #01FH + testR0R1 1 + testR0R1 2 + testR0R1 3 + testR0R1 4 + testR0R1 5 + testR0R1 6 + testR0R1 7 + testR0R1 0 + +pass: PASS + +fail: FAIL Index: verif/black_box/xch/ind_rr/test.asm =================================================================== --- verif/black_box/xch/ind_rr/test.asm (nonexistent) +++ verif/black_box/xch/ind_rr/test.asm (revision 292) @@ -0,0 +1,121 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-04-04 13:28:33 arniml Exp $ + ;; + ;; Test XCH A, @ Rr. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + +testR0R1 MACRO pos + inc r0 + inc r1 + mov a, @r0 + cpl a + add a, #~(1 << pos) & 0FFH + cpl a + jnz fail + mov a, @r1 + cpl a + add a, #~(1 << pos) & 0FFH + cpl a + jnz fail + ENDM + + ORG 0 + + ;; Start of test + mov r0, #010H + mov r1, #020H + mov a, #0FEH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FDH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FBH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0F7H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0EFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0DFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0BFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #07FH + mov @r0, a + mov @r1, a + + dec r0 + xch a, @r0 + dec r0 + xch a, @r0 + dec r0 + xch a, @r0 + dec r0 + xch a, @r0 + dec r0 + xch a, @r0 + dec r0 + xch a, @r0 + dec r0 + xch a, @r0 + mov r0, #017H + xch a, @r0 + + mov a, @r1 + dec r1 + xch a, @r1 + dec r1 + xch a, @r1 + dec r1 + xch a, @r1 + dec r1 + xch a, @r1 + dec r1 + xch a, @r1 + dec r1 + xch a, @r1 + dec r1 + xch a, @r1 + mov r1, #027H + xch a, @r1 + + jmp goon + + ORG 256 + ;; +goon: mov r0, #00FH + mov r1, #01FH + testR0R1 1 + testR0R1 2 + testR0R1 3 + testR0R1 4 + testR0R1 5 + testR0R1 6 + testR0R1 7 + testR0R1 0 + +pass: PASS + +fail: FAIL Index: verif/black_box/xch/rr/test.asm =================================================================== --- verif/black_box/xch/rr/test.asm (nonexistent) +++ verif/black_box/xch/rr/test.asm (revision 292) @@ -0,0 +1,119 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test XCH A, Rr for RB0 and RB1. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + + ;; fill RB0 + call fill + + ;; check RB0 + call check + + ;; fill RB1 + sel rb1 + call fill + sel rb0 + + ;; clear RB0 + call clr_rb0 + + ;; check RB1 + sel rb1 + call check + + ;; check RB0 for all 0 + mov r0, #000H + mov r1, #008H +chk0_loop: + mov a, @r0 + jnz fail + inc r0 + djnz r1, chk0_loop + +pass: PASS + +fail: FAIL + + + ORG 0300H + +fill: mov a, #0FEH + mov r0, a + mov a, #0FDH + mov r1, a + mov a, #0FBH + mov r2, a + mov a, #0F7H + mov r3, a + mov a, #0EFH + mov r4, a + mov a, #0DFH + mov r5, a + mov a, #0BFH + mov r6, a + mov a, #07FH + mov r7, a + ret + +clr_rb0: + mov r0, #007H + clr a +clr_loop: + mov @r0, a + djnz r0, clr_loop + ret + +check: mov a, r7 + xch a, r6 + xch a, r5 + xch a, r4 + xch a, r3 + xch a, r2 + xch a, r1 + xch a, r0 + xch a, r7 + + mov a, r0 + add a, #(~(0FFH - (1 << 1)) + 1) & 0FFH + jnz fail_p3 + + mov a, r1 + add a, #(~(0FFH - (1 << 2)) + 1) & 0FFH + jnz fail_p3 + + mov a, r2 + add a, #(~(0FFH - (1 << 3)) + 1) & 0FFH + jnz fail_p3 + + mov a, r3 + add a, #(~(0FFH - (1 << 4)) + 1) & 0FFH + jnz fail_p3 + + mov a, r4 + add a, #(~(0FFH - (1 << 5)) + 1) & 0FFH + jnz fail_p3 + + mov a, r5 + add a, #(~(0FFH - (1 << 6)) + 1) & 0FFH + jnz fail_p3 + + mov a, r6 + add a, #(~(0FFH - (1 << 7)) + 1) & 0FFH + jnz fail_p3 + + mov a, r7 + add a, #(~(0FFH - (1 << 0)) + 1) & 0FFH + jnz fail_p3 + + ret + +fail_p3: + FAIL Index: verif/black_box/psw/test.asm =================================================================== --- verif/black_box/psw/test.asm (nonexistent) +++ verif/black_box/psw/test.asm (revision 292) @@ -0,0 +1,61 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-03-29 20:09:50 arniml Exp $ + ;; + ;; Test several commands related to PSW. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, psw + anl a, #0F7H + jnz fail + + dec a + mov psw, a + mov a, psw + inc a + jnz fail + + mov psw, a + mov a, psw + anl a, #0F7H + jnz fail + + cpl f0 + jf0 ok_1 + jmp fail +ok_1: mov a, psw + anl a, #~040H ; mask AC, tested separately with DA + add a, #(~028H + 1) & 0FFH + jnz fail + + clr f0 + jnc fail + mov a, psw + anl a, #~040H ; mask AC, tested separately with DA + add a, #(~088H + 1) & 0FFH + jnz fail + + clr c + jc fail + sel rb1 + mov a, psw + anl a, #~040H ; mask AC, tested separately with DA + add a, #(~018H + 1) & 0FFH + jnz fail + + cpl c + jc fail + sel rb0 + mov a, psw + anl a, #~040H ; mask AC, tested separately with DA + add a, #(~08H + 1) & 0FFH + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/call/simple/test.asm =================================================================== --- verif/black_box/call/simple/test.asm (nonexistent) +++ verif/black_box/call/simple/test.asm (revision 292) @@ -0,0 +1,62 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-03-29 20:09:47 arniml Exp $ + ;; + ;; Test CALL addr with simple program. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, psw + + clr c +call1: call goon1 + + jmp fail + + ORG 039FH + +goon1: mov a, psw + anl a, #~040H ; mask AC, tested separately with DA + add a, #~009H + 1 + jnz fail + +call2: call goon2 + + jmp fail + +goon2: clr c + mov a, psw + anl a, #~040H ; mask AC, tested separately with DA + add a, #~00AH + 1 + jnz fail + + ;; check stack contents + mov r0, #008H + mov a, @r0 + add a, #(~(call1+2 & 0FFH) + 1) & 0FFH + jnz fail + + inc r0 + mov a, @r0 + anl a, #~040H ; mask AC, tested separately with DA + add a, #(~((call1+2) >> 8) + 1) & 0FFH + jnz fail + + inc r0 + mov a, @r0 + add a, #(~(call2+2 & 0FFH) + 1) & 0FFH + jnz fail + + inc r0 + mov a, @r0 + anl a, #~040H ; mask AC, tested separately with DA + add a, #(~((call2+2) >> 8 | 080H) + 1) & 0FFH + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/call/call_ret/test.asm =================================================================== --- verif/black_box/call/call_ret/test.asm (nonexistent) +++ verif/black_box/call/call_ret/test.asm (revision 292) @@ -0,0 +1,104 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test CALL + RET(R) with simple program. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov r0, #008H + call recursive + +call1: call sub1 + jc fail + jf0 fail + jf1 ok_1 + jmp fail +ok_1: + ;; check stack contents + mov r0, #008H + mov a, @r0 + add a, #(~(call1+2 & 0FFH) + 1) & 0FFH + jnz fail + + inc r0 + mov a, @r0 + add a, #(~((call1+2) >> 8) + 1) & 0FFH + jnz fail + + inc r0 + mov a, @r0 + add a, #(~(call2+2 & 0FFH) + 1) & 0FFH + jnz fail + + inc r0 + mov a, @r0 + add a, #(~((call2+2) >> 8 | 0A0H) + 1) & 0FFH + jnz fail + + + clr c + clr f0 + clr f1 + call sub3 + jc fail + jf0 fail + +pass: PASS + +fail: FAIL + + + + ORG 0156H +recursive: + dec r0 + mov a, r0 + jz rec_end + call recursive +rec_end: + ret + + + ORG 0245H + +sub1: cpl f0 + cpl f1 + cpl c +call2: call sub2 + jf0 sub1_1 + jmp fail2 +sub1_1: jnc fail2 + retr + +sub2: jf0 sub2_1 + jmp fail2 +sub2_1: clr f0 + jnc fail2 + clr c + retr + +fail2: FAIL + + + ORG 0311H + +sub3: cpl f0 + cpl c + call sub4 + jf0 fail3 + jc fail3 + ret + +sub4: jf0 sub4_1 + jmp fail3 +sub4_1: clr f0 + jnc fail3 + clr c + ret + +fail3: FAIL Index: verif/black_box/jnz/test.asm =================================================================== --- verif/black_box/jnz/test.asm (nonexistent) +++ verif/black_box/jnz/test.asm (revision 292) @@ -0,0 +1,49 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-03-26 22:37:12 arniml Exp $ + ;; + ;; Test JNZ instruction. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #000H + jnz fail + + mov a, #001H + jnz ok_01 + jmp fail + +ok_01: mov a, #002H + jnz ok_02 + jmp fail + +ok_02: mov a, #004H + jnz ok_04 + jmp fail + +ok_04: mov a, #008H + jnz ok_08 + jmp fail + +ok_08: mov a, #010H + jnz ok_10 + jmp fail + +ok_10: mov a, #020H + jnz ok_20 + jmp fail + +ok_20: mov a, #040H + jnz ok_40 + jmp fail + +ok_40: mov a, #080H + jnz pass + +fail: FAIL + +pass: PASS Index: verif/black_box/jz/test.asm =================================================================== --- verif/black_box/jz/test.asm (nonexistent) +++ verif/black_box/jz/test.asm (revision 292) @@ -0,0 +1,43 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-03-26 22:34:14 arniml Exp $ + ;; + ;; Test JZ instruction. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #000H + jz ok_0 + jmp fail + +ok_0: mov a, #001H + jz fail + + mov a, #002H + jz fail + + mov a, #004H + jz fail + + mov a, #008H + jz fail + + mov a, #010H + jz fail + + mov a, #020H + jz fail + + mov a, #040H + jz fail + + mov a, #080H + jz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/mov/a_rr/data_00/test.asm =================================================================== --- verif/black_box/mov/a_rr/data_00/test.asm (nonexistent) +++ verif/black_box/mov/a_rr/data_00/test.asm (revision 292) @@ -0,0 +1,63 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-03-26 22:35:51 arniml Exp $ + ;; + ;; Test MOV A, Rr for RB0 with 0x00. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #055H + mov r0, #000H + mov r1, #0FFH + mov r2, #0FFH + mov r3, #0FFH + mov r4, #0FFH + mov r5, #0FFH + mov r6, #0FFH + mov r7, #0FFH + + mov a, r0 + jnz fail + + mov r1, #000H + mov r0, #0FFH + mov a, r1 + jnz fail + + mov r2, #000H + mov r1, #0FFH + mov a, r2 + jnz fail + + mov r3, #000H + mov r2, #0FFH + mov a, r3 + jnz fail + + mov r4, #000H + mov r3, #0FFH + mov a, r4 + jnz fail + + mov r5, #000H + mov r4, #0FFH + mov a, r5 + jnz fail + + mov r6, #000H + mov r5, #0FFH + mov a, r6 + jnz fail + + mov r7, #000H + mov r6, #0FFH + mov a, r7 + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/mov/a_rr/data_num/test.asm =================================================================== --- verif/black_box/mov/a_rr/data_num/test.asm (nonexistent) +++ verif/black_box/mov/a_rr/data_num/test.asm (revision 292) @@ -0,0 +1,50 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-03-26 22:37:27 arniml Exp $ + ;; + ;; Test MOV A, Rr for RB0 with 2*r. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #000H + mov r0, #0FEH + mov r1, #0FDH + mov r2, #0FBH + mov r3, #0F7H + mov r4, #0EFH + mov r5, #0DFH + mov r6, #0BFH + mov r7, #07FH + + mov a, r0 + jz fail + jb0 fail + + mov a, r1 + jb1 fail + + mov a, r2 + jb2 fail + + mov a, r3 + jb3 fail + + mov a, r4 + jb4 fail + + mov a, r5 + jb5 fail + + mov a, r6 + jb6 fail + + mov a, r7 + jb7 fail + +pass: PASS + +fail: FAIL Index: verif/black_box/mov/mov_rr_a/data_00/test.asm =================================================================== --- verif/black_box/mov/mov_rr_a/data_00/test.asm (nonexistent) +++ verif/black_box/mov/mov_rr_a/data_00/test.asm (revision 292) @@ -0,0 +1,78 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-03-26 22:37:39 arniml Exp $ + ;; + ;; Test MOV Rr, A for RB0 with 0x00. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #00H + mov r0, a + mov a, #0FFH + mov r1, a + mov r2, a + mov r3, a + mov r4, a + mov r5, a + mov r6, a + mov r7, a + + mov a, r0 + jnz fail + + mov a, #000H + mov r1, a + mov a, #0FFH + mov r0, a + mov a, r1 + jnz fail + + mov a, #000H + mov r2, a + mov a, #0FFH + mov r1, a + mov a, r2 + jnz fail + + mov a, #000H + mov r3, a + mov a, #0FFH + mov r2, a + mov a, r3 + jnz fail + + mov a, #000H + mov r4, a + mov a, #0FFH + mov r3, a + mov a, r4 + jnz fail + + mov a, #000H + mov r5, a + mov a, #0FFH + mov r4, a + mov a, r5 + jnz fail + + mov a, #000H + mov r6, a + mov a, #0FFH + mov r5, a + mov a, r6 + jnz fail + + mov a, #000H + mov r7, a + mov a, #0FFH + mov r6, a + mov a, r7 + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/mov/mov_rr_a/data_num/test.asm =================================================================== --- verif/black_box/mov/mov_rr_a/data_num/test.asm (nonexistent) +++ verif/black_box/mov/mov_rr_a/data_num/test.asm (revision 292) @@ -0,0 +1,59 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-03-26 22:37:46 arniml Exp $ + ;; + ;; Test MOV Rr, A for RB0 with 2*r. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #0FEH + mov r0, a + mov a, #0FDH + mov r1, a + mov a, #0FBH + mov r2, a + mov a, #0F7H + mov r3, a + mov a, #0EFH + mov r4, a + mov a, #0DFH + mov r5, a + mov a, #0BFH + mov r6, a + mov a, #07FH + mov r7, a + + mov a, #000H + + mov a, r0 + jz fail + jb0 fail + + mov a, r1 + jb1 fail + + mov a, r2 + jb2 fail + + mov a, r3 + jb3 fail + + mov a, r4 + jb4 fail + + mov a, r5 + jb5 fail + + mov a, r6 + jb6 fail + + mov a, r7 + jb7 fail + +pass: PASS + +fail: FAIL Index: verif/black_box/mov/ind_rr/test.asm =================================================================== --- verif/black_box/mov/ind_rr/test.asm (nonexistent) +++ verif/black_box/mov/ind_rr/test.asm (revision 292) @@ -0,0 +1,185 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:16 arniml Exp $ + ;; + ;; Test MOV @ Rr for RB0. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov r0, #0FFH +fill_loop: + mov a, r0 + mov @r0, a + djnz r0, fill_loop + + ;; check memory + mov a, r0 + jnz fail + mov r0, #0FFH +check_loop1: + mov a, @r1 + add a, r0 + jnz fail + dec r0 + inc r1 + mov a, r1 + jnz check_loop1 + jmp test_2 + +fail: FAIL + + ;; + ALIGN 256 + ;; + +test_2: ;; test MOV @ Rr, data + mov r0, #0C0H + mov r1, #0E0H + mov @r0, #000H + mov @r1, #020H + + inc r0 + inc r1 + mov @r0, #001H + mov @r1, #021H + inc r0 + inc r1 + mov @r0, #002H + mov @r1, #022H + inc r0 + inc r1 + mov @r0, #003H + mov @r1, #023H + inc r0 + inc r1 + mov @r0, #004H + mov @r1, #024H + inc r0 + inc r1 + mov @r0, #005H + mov @r1, #025H + inc r0 + inc r1 + mov @r0, #006H + mov @r1, #026H + inc r0 + inc r1 + mov @r0, #007H + mov @r1, #027H + inc r0 + inc r1 + mov @r0, #008H + mov @r1, #028H + inc r0 + inc r1 + mov @r0, #009H + mov @r1, #029H + inc r0 + inc r1 + mov @r0, #00AH + mov @r1, #02AH + inc r0 + inc r1 + mov @r0, #00BH + mov @r1, #02BH + inc r0 + inc r1 + mov @r0, #00CH + mov @r1, #02CH + inc r0 + inc r1 + mov @r0, #00DH + mov @r1, #02DH + inc r0 + inc r1 + mov @r0, #00EH + mov @r1, #02EH + inc r0 + inc r1 + mov @r0, #00FH + mov @r1, #02FH + ;; + inc r0 + inc r1 + mov @r0, #010H + mov @r1, #030H + inc r0 + inc r1 + mov @r0, #011H + mov @r1, #031H + inc r0 + inc r1 + mov @r0, #012H + mov @r1, #032H + inc r0 + inc r1 + mov @r0, #013H + mov @r1, #033H + inc r0 + inc r1 + mov @r0, #014H + mov @r1, #034H + inc r0 + inc r1 + mov @r0, #015H + mov @r1, #035H + inc r0 + inc r1 + mov @r0, #016H + mov @r1, #036H + inc r0 + inc r1 + mov @r0, #017H + mov @r1, #037H + inc r0 + inc r1 + mov @r0, #018H + mov @r1, #038H + inc r0 + inc r1 + mov @r0, #019H + mov @r1, #039H + inc r0 + inc r1 + mov @r0, #01AH + mov @r1, #03AH + inc r0 + inc r1 + mov @r0, #01BH + mov @r1, #03BH + inc r0 + inc r1 + mov @r0, #01CH + mov @r1, #03CH + inc r0 + inc r1 + mov @r0, #01DH + mov @r1, #03DH + inc r0 + inc r1 + mov @r0, #01EH + mov @r1, #03EH + inc r0 + inc r1 + mov @r0, #01FH + mov @r1, #03FH + + mov r0, #0FFH + mov r1, #11000001B +check_loop2: + mov a, @r0 + add a, r1 + jnz fail2 + inc r1 + dec r0 + mov a, #01000000B + add a, r0 + jnz check_loop2 + +pass2: PASS + +fail2: FAIL Index: verif/black_box/addc/ind_rr/test.asm =================================================================== --- verif/black_box/addc/ind_rr/test.asm (nonexistent) +++ verif/black_box/addc/ind_rr/test.asm (revision 292) @@ -0,0 +1,99 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.2 2004-03-26 22:33:30 arniml Exp $ + ;; + ;; Test ADDC A, @ Rr. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + +testADDC MACRO val + jmp goon + ALIGN 040H +goon: inc r0 + inc r1 + mov a, #val + addc a, @r0 + jnz fail + jnc fail + mov a, #val + addc a, @r0 + dec a + jnz fail + jnc fail + clr c + ;; + mov a, #val + addc a, @r1 + jnz fail + jnc fail + mov a, #val + addc a, @r1 + dec a + jnz fail + jnc fail + clr c + jmp pass + ;; +fail: FAIL +pass: + ENDM + + ORG 0 + + ;; Start of test + mov r0, #010H + mov r1, #020H + mov a, #0FEH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FDH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FBH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0F7H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0EFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0DFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0BFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #07FH + mov @r0, a + mov @r1, a + + ;; + mov r0, #00FH + mov r1, #01FH + + testADDC 002H + testADDC 003H + testADDC 005H + testADDC 009H + testADDC 011H + testADDC 021H + testADDC 041H + testADDC 081H + +pass: PASS Index: verif/black_box/addc/rr/test.asm =================================================================== --- verif/black_box/addc/rr/test.asm (nonexistent) +++ verif/black_box/addc/rr/test.asm (revision 292) @@ -0,0 +1,98 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test ADDC A, Rr with carry, RB0 and RB1. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + +testADDC MACRO val,reg + mov a, #val + addc a, reg + jnz fail_p3 + jnc fail_p3 + mov a, #val + addc a, reg + jz fail_p3 + jnc fail_p3 + dec a + jnz fail_p3 + clr c + jc fail_p3 + ENDM + + ORG 0 + + ;; Start of test + ;; fill RB0 + call fill + + ;; check RB0 + call check + + ;; fill RB1 + sel rb1 + call fill + sel rb0 + + ;; clear RB0 + call clr + + ;; check RB1 + sel rb1 + call check + + ;; check RB0 for all 0 + mov r0, #000H + mov r1, #008H +chk0_loop: + mov a, @r0 + jnz fail + inc r0 + djnz r1, chk0_loop + +pass: PASS + +fail: FAIL + + + ORG 0300H + +fill: mov a, #0FEH + mov r0, a + mov a, #0FDH + mov r1, a + mov a, #0FBH + mov r2, a + mov a, #0F7H + mov r3, a + mov a, #0EFH + mov r4, a + mov a, #0DFH + mov r5, a + mov a, #0BFH + mov r6, a + mov a, #07FH + mov r7, a + ret + +check: testADDC 002H, r0 + testADDC 003H, r1 + testADDC 005H, r2 + testADDC 009H, r3 + testADDC 011H, r4 + testADDC 021H, r5 + testADDC 041H, r6 + testADDC 081H, r7 + ret + +clr: mov r0, #007H + clr a +clr_loop: + mov @r0, a + djnz r0, clr_loop + ret + +fail_p3: + FAIL Index: verif/black_box/addc/a_data/test.asm =================================================================== --- verif/black_box/addc/a_data/test.asm (nonexistent) +++ verif/black_box/addc/a_data/test.asm (revision 292) @@ -0,0 +1,30 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test ADDC A, data. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jc fail + mov a, #000H + + addc a, #055H + jc fail + addc a, #0ABH + jnz fail + jnc fail + + addc a, #000H + jc fail + addc a, #0FFH + jnz fail + jnc fail + +pass: PASS + +fail: FAIL Index: verif/black_box/clr/a/test.asm =================================================================== --- verif/black_box/clr/a/test.asm (nonexistent) +++ verif/black_box/clr/a/test.asm (revision 292) @@ -0,0 +1,33 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test CLR A. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #0FFH + jz fail + clr a + jnz fail + + inc a + jb0 ok_1 + jmp fail + +ok_1: add a, #0FFH + jnz fail + + add a, #010H + clr a + dec a + add a, #001H + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/clr/c/test.asm =================================================================== --- verif/black_box/clr/c/test.asm (nonexistent) +++ verif/black_box/clr/c/test.asm (revision 292) @@ -0,0 +1,29 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test CLR C. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jc fail + cpl c + jnc fail + clr c + jc fail + clr c + jc fail + + mov a, #0FFH + add a, #001H + jnc fail + clr c + jc fail + +pass: PASS + +fail: FAIL Index: verif/black_box/clr/f0/test.asm =================================================================== --- verif/black_box/clr/f0/test.asm (nonexistent) +++ verif/black_box/clr/f0/test.asm (revision 292) @@ -0,0 +1,23 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test CLR F0. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jf0 fail + cpl f0 + jf0 ok_1 + jmp fail + +ok_1: clr f0 + jf0 fail + +pass: PASS + +fail: FAIL Index: verif/black_box/clr/f1/test.asm =================================================================== --- verif/black_box/clr/f1/test.asm (nonexistent) +++ verif/black_box/clr/f1/test.asm (revision 292) @@ -0,0 +1,23 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test CLR F1. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jf1 fail + cpl f1 + jf1 ok_1 + jmp fail + +ok_1: clr f1 + jf1 fail + +pass: PASS + +fail: FAIL Index: verif/black_box/dec/a/test.asm =================================================================== --- verif/black_box/dec/a/test.asm (nonexistent) +++ verif/black_box/dec/a/test.asm (revision 292) @@ -0,0 +1,32 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test DEC A. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #001H + dec a + jnz fail + + dec a + jb0 ok_0 + jmp fail + +ok_0: inc a + jnz fail + + mov a, #10100101B + dec a + add a, #01011101B + dec a + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/dec/rr/test.asm =================================================================== --- verif/black_box/dec/rr/test.asm (nonexistent) +++ verif/black_box/dec/rr/test.asm (revision 292) @@ -0,0 +1,244 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test DECC Rr for RB0 and RB1. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + + ;; fill RB0 + call fill + + ;; check RB0 + call check + + ;; fill RB1 + sel rb1 + call fill + sel rb0 + + ;; clear RB0 + call clr_rb0 + + ;; check RB1 + sel rb1 + call check + + ;; check RB0 for all 0 + mov r0, #000H + mov r1, #008H +chk0_loop: + mov a, @r0 + jnz fail + inc r0 + djnz r1, chk0_loop + +pass: PASS + +fail: FAIL + + + ORG 0300H + +fill: mov a, #000H + mov r0, a + mov r1, a + mov r2, a + mov r3, a + mov r4, a + mov r5, a + mov r6, a + mov r7, a + ret + +clr_rb0: + mov r0, #007H + clr a +clr_loop: + mov @r0, a + djnz r0, clr_loop + ret + +check: mov a, #0FFH + dec r0 + jz fail_p3 + mov a, r0 + jz fail_p3 + ;; + mov a, r1 + jnz fail_p3 + mov a, r2 + jnz fail_p3 + mov a, r3 + jnz fail_p3 + mov a, r4 + jnz fail_p3 + mov a, r5 + jnz fail_p3 + mov a, r6 + jnz fail_p3 + mov a, r7 + jnz fail_p3 + + mov a, #0FFH + dec r1 + jz fail_p3 + mov a, r1 + jz fail_p3 + ;; + mov a, r0 + jz fail_p3 + ;; + mov a, r2 + jnz fail_p3 + mov a, r3 + jnz fail_p3 + mov a, r4 + jnz fail_p3 + mov a, r5 + jnz fail_p3 + mov a, r6 + jnz fail_p3 + mov a, r7 + jnz fail_p3 + + mov a, #0FFH + dec r2 + jz fail_p3 + mov a, r2 + jz fail_p3 + ;; + mov a, r0 + jz fail_p3 + mov a, r1 + jz fail_p3 + ;; + mov a, r3 + jnz fail_p3 + mov a, r4 + jnz fail_p3 + mov a, r5 + jnz fail_p3 + mov a, r6 + jnz fail_p3 + mov a, r7 + jnz fail_p3 + + mov a, #0FFH + dec r3 + jz fail_p3 + mov a, r3 + jz fail_p3 + ;; + mov a, r0 + jz fail_p3 + mov a, r1 + jz fail_p3 + mov a, r2 + jz fail_p3 + ;; + mov a, r4 + jnz fail_p3 + mov a, r5 + jnz fail_p3 + mov a, r6 + jnz fail_p3 + mov a, r7 + jnz fail_p3 + + mov a, #0FFH + dec r4 + jz fail_p3 + mov a, r4 + jz fail_p3 + ;; + mov a, r0 + jz fail_p3 + mov a, r1 + jz fail_p3 + mov a, r2 + jz fail_p3 + mov a, r3 + jz fail_p3 + ;; + mov a, r5 + jnz fail_p3 + mov a, r6 + jnz fail_p3 + mov a, r7 + jnz fail_p3 + + mov a, #0FFH + dec r5 + jz fail_p3 + mov a, r5 + jz fail_p3 + ;; + mov a, r0 + jz fail_p3 + mov a, r1 + jz fail_p3 + mov a, r2 + jz fail_p3 + mov a, r3 + jz fail_p3 + mov a, r4 + jz fail_p3 + ;; + mov a, r6 + jnz fail_p3 + mov a, r7 + jnz fail_p3 + + mov a, #0FFH + dec r6 + jz fail_p3 + mov a, r6 + jz fail_p3 + ;; + mov a, r0 + jz fail_p3 + mov a, r1 + jz fail_p3 + mov a, r2 + jz fail_p3 + mov a, r3 + jz fail_p3 + mov a, r4 + jz fail_p3 + mov a, r5 + jz fail_p3 + ;; + mov a, r7 + jnz fail_p3 + + mov a, #0FFH + inc r7 + jz fail_p3 + mov a, r7 + jz fail_p3 + ;; + mov a, r0 + jz fail_p3 + mov a, r1 + jz fail_p3 + mov a, r2 + jz fail_p3 + mov a, r3 + jz fail_p3 + mov a, r4 + jz fail_p3 + mov a, r5 + jz fail_p3 + mov a, r6 + jz fail_p3 + ret + + +fail_p3: + FAIL Index: verif/black_box/jc/test.asm =================================================================== --- verif/black_box/jc/test.asm (nonexistent) +++ verif/black_box/jc/test.asm (revision 292) @@ -0,0 +1,20 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test JC instruction. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jc fail + mov a, #0FFH + add a, #001H + jc pass + +fail: FAIL + +pass: PASS Index: verif/black_box/rc/test.asm =================================================================== --- verif/black_box/rc/test.asm (nonexistent) +++ verif/black_box/rc/test.asm (revision 292) @@ -0,0 +1,107 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test RR(C) A. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #080H + + rr a + jb7 fail + jb6 ok1_1 + jmp fail + +ok1_1: rr a + jb6 fail + jb5 ok1_2 + jmp fail + +ok1_2: rr a + jb5 fail + jb4 ok1_3 + jmp fail + +ok1_3: rr a + jb4 fail + jb3 ok1_4 + jmp fail + +ok1_4: rr a + jb3 fail + jb2 ok1_5 + jmp fail + +ok1_5: rr a + jb2 fail + jb1 ok1_6 + jmp fail + +ok1_6: rr a + jb1 fail + jb0 ok1_7 + jmp fail + +ok1_7: rr a + jb0 fail + jb7 ok2 + jmp fail + + +ok2: mov a, #07FH + cpl c + + rrc a + jb7 ok2_1 + jmp fail +ok2_1: jb6 fail + + rrc a + jb6 ok2_2 + jmp fail +ok2_2: jb5 fail + + rrc a + jb5 ok2_3 + jmp fail +ok2_3: jb4 fail + + rrc a + jb4 ok2_4 + jmp fail +ok2_4: jb3 fail + + rrc a + jb3 ok2_5 + jmp fail +ok2_5: jb2 fail + + rrc a + jb2 ok2_6 + jmp fail +ok2_6: jb1 fail + + rrc a + jb1 ok2_7 + jmp fail +ok2_7: jb0 fail + jnc fail + + rrc a + jb0 ok2_8 + jmp fail +ok2_8: jc fail + + rrc a + jc ok2_9 + jmp fail +ok2_9: jb7 fail + +pass: PASS + +fail: FAIL Index: verif/black_box/xrl/rr/test.asm =================================================================== --- verif/black_box/xrl/rr/test.asm (nonexistent) +++ verif/black_box/xrl/rr/test.asm (revision 292) @@ -0,0 +1,157 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test XRL A, Rr for RB0 and RB1 + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + + ;; fill RB0 + call fill + + ;; check RB0 + call check + + ;; fill RB1 + sel rb1 + call fill + sel rb0 + + ;; clear RB0 + call clr_rb0 + + ;; check RB1 + sel rb1 + call check + + ;; check RB0 for all 0 + mov r0, #000H + mov r1, #008H +chk0_loop: + mov a, @r0 + jnz fail + inc r0 + djnz r1, chk0_loop + +pass: PASS + +fail: FAIL + + + ORG 0300H + +fill: mov a, #0FEH + mov r0, a + mov a, #0FDH + mov r1, a + mov a, #0FBH + mov r2, a + mov a, #0F7H + mov r3, a + mov a, #0EFH + mov r4, a + mov a, #0DFH + mov r5, a + mov a, #0BFH + mov r6, a + mov a, #07FH + mov r7, a + ret + +clr_rb0: + mov r0, #007H + clr a +clr_loop: + mov @r0, a + djnz r0, clr_loop + ret + +check: mov a, #(1 << 0) + xrl a, r0 + cpl a + jnz fail_p3 + dec a + xrl a, r0 + cpl a + add a, #(~(0FFH - (1 << 0)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 1) + xrl a, r1 + cpl a + jnz fail_p3 + dec a + xrl a, r1 + cpl a + add a, #(~(0FFH - (1 << 1)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 2) + xrl a, r2 + cpl a + jnz fail_p3 + dec a + xrl a, r2 + cpl a + add a, #(~(0FFH - (1 << 2)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 3) + xrl a, r3 + cpl a + jnz fail_p3 + dec a + xrl a, r3 + cpl a + add a, #(~(0FFH - (1 << 3)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 4) + xrl a, r4 + cpl a + jnz fail_p3 + dec a + xrl a, r4 + cpl a + add a, #(~(0FFH - (1 << 4)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 5) + xrl a, r5 + cpl a + jnz fail_p3 + dec a + xrl a, r5 + cpl a + add a, #(~(0FFH - (1 << 5)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 6) + xrl a, r6 + cpl a + jnz fail_p3 + dec a + xrl a, r6 + cpl a + add a, #(~(0FFH - (1 << 6)) + 1) & 0FFH + jnz fail_p3 + + mov a, #(1 << 7) + xrl a, r7 + cpl a + jnz fail_p3 + dec a + xrl a, r7 + cpl a + add a, #(~(0FFH - (1 << 7)) + 1) & 0FFH + jnz fail_p3 + + ret + +fail_p3: + FAIL Index: verif/black_box/xrl/a_data/test.asm =================================================================== --- verif/black_box/xrl/a_data/test.asm (nonexistent) +++ verif/black_box/xrl/a_data/test.asm (revision 292) @@ -0,0 +1,32 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test XRL A, data. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + clr a + xrl a, #0FFH + jz fail + xrl a, #0FFH + jnz fail + + clr a + xrl a, #055H + add a, #0ABH + jnz fail + + clr a + xrl a, #023H + xrl a, #0A9H + add a, #076H + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/xrl/ind_rr/test.asm =================================================================== --- verif/black_box/xrl/ind_rr/test.asm (nonexistent) +++ verif/black_box/xrl/ind_rr/test.asm (revision 292) @@ -0,0 +1,92 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test XRL A, @ Rr. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + +testR0R1 MACRO pos + inc r0 + inc r1 + mov a, #(1 << pos) + cpl a + xrl a, @r0 + jnz fail + clr a + xrl a, @r0 + add a, #(~(0FFH - (1 << pos)) + 1) & 0FFH + jnz fail + mov a, #(1 << pos) + cpl a + xrl a, @r1 + jnz fail + clr a + xrl a, @r1 + add a, #(~(0FFH - (1 << pos)) + 1) & 0FFH + jnz fail + ENDM + + ORG 0 + + ;; Start of test + mov r0, #010H + mov r1, #020H + mov a, #0FEH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FDH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FBH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0F7H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0EFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0DFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0BFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #07FH + mov @r0, a + mov @r1, a + + jmp goon + + ORG 256 + ;; +goon: mov r0, #00FH + mov r1, #01FH + testR0R1 0 + testR0R1 1 + testR0R1 2 + testR0R1 3 + testR0R1 4 + testR0R1 5 + testR0R1 6 + testR0R1 7 + +pass: PASS + +fail: FAIL Index: verif/black_box/rl/test.asm =================================================================== --- verif/black_box/rl/test.asm (nonexistent) +++ verif/black_box/rl/test.asm (revision 292) @@ -0,0 +1,108 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test RL(C) A. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #001H + + rl a + jb0 fail + jb1 ok1_1 + jmp fail + +ok1_1: rl a + jb1 fail + jb2 ok1_2 + jmp fail + +ok1_2: rl a + jb2 fail + jb3 ok1_3 + jmp fail + +ok1_3: rl a + jb3 fail + jb4 ok1_4 + jmp fail + +ok1_4: rl a + jb4 fail + jb5 ok1_5 + jmp fail + +ok1_5: rl a + jb5 fail + jb6 ok1_6 + jmp fail + +ok1_6: rl a + jb6 fail + jb7 ok1_7 + jmp fail + +ok1_7: rl a + jb7 fail + jb0 ok2 + jmp fail + + +ok2: mov a, #0FEH + cpl c + + rlc a + jb0 ok2_1 + jmp fail +ok2_1: jb1 fail + + rlc a + jb1 ok2_2 + jmp fail +ok2_2: jb2 fail + + rlc a + jb2 ok2_3 + jmp fail +ok2_3: jb3 fail + + rlc a + jb3 ok2_4 + jmp fail +ok2_4: jb4 fail + + rlc a + jb4 ok2_5 + jmp fail +ok2_5: jb5 fail + + rlc a + jb5 ok2_6 + jmp fail +ok2_6: jb6 fail + + rlc a + jb6 ok2_7 + jmp fail +ok2_7: jb7 fail + jnc fail + + rlc a + jb7 ok2_8 + jmp fail +ok2_8: jc fail + + rlc a + jc ok2_9 + jmp fail +ok2_9: jb0 fail + + +pass: PASS + +fail: FAIL Index: verif/black_box/movp/test.asm =================================================================== --- verif/black_box/movp/test.asm (nonexistent) +++ verif/black_box/movp/test.asm (revision 292) @@ -0,0 +1,67 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test MOVP A, @ A and MOVP3 A, @ A. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + +table MACRO data + DB data & 0FFH + ENDM + + ORG 0 + + ;; Start of test + mov r1, #008H + +loop: mov a, r1 + dec a + call fetch_table1 + mov r0, a + + mov a, r1 + dec a + call fetch_table3 + + add a, r0 + cpl a + jnz fail + + djnz r1, loop + + +pass: PASS + +fail: FAIL + + + ORG 0100H + + db 0AFH + db 033H + db 0C0H + db 012H + db 055H + db 061H + db 02BH + db 0F4H +fetch_table1: + movp a, @a + ret +fetch_table3: + movp3 a, @a + ret + + + ORG 0300H + + db 050H + db 0CCH + db 03FH + db 0EDH + db 0AAH + db 09EH + db 0D4H + db 00BH Index: verif/black_box/jmp/test.asm =================================================================== --- verif/black_box/jmp/test.asm (nonexistent) +++ verif/black_box/jmp/test.asm (revision 292) @@ -0,0 +1,11 @@ + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jmp pass + FAIL + +pass: PASS Index: verif/black_box/add/rr/test.asm =================================================================== --- verif/black_box/add/rr/test.asm (nonexistent) +++ verif/black_box/add/rr/test.asm (revision 292) @@ -0,0 +1,106 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:16 arniml Exp $ + ;; + ;; Test ADD A, Rr without carry, RB0 and RB1. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + ;; fill RB0 + call fill + + ;; check RB0 + sel rb0 + call check + + ;; fill RB1 + sel rb1 + call fill + sel rb0 + + ;; clear RB0 + mov r0, #007H + clr a +clr_loop: + mov @r0, a + djnz r0, clr_loop + + ;; check RB1 + sel rb1 + call check + + ;; check RB0 for all 0 + mov r0, #000H + mov r1, #008H +chk0_loop: + mov a, @r0 + jnz fail + inc r0 + djnz r1, chk0_loop + +pass: PASS + +fail: FAIL + + + ORG 0300H +fill: mov a, #0FEH + mov r0, a + mov a, #0FDH + mov r1, a + mov a, #0FBH + mov r2, a + mov a, #0F7H + mov r3, a + mov a, #0EFH + mov r4, a + mov a, #0DFH + mov r5, a + mov a, #0BFH + mov r6, a + mov a, #07FH + mov r7, a + ret + + +check: mov a, #002H + add a, r0 + jnz fail_p3 + + mov a, #003H + add a, r1 + jnz fail_p3 + + mov a, #005H + add a, r2 + jnz fail_p3 + + mov a, #009H + add a, r3 + jnz fail_p3 + + mov a, #011H + add a, r4 + jnz fail_p3 + + mov a, #021H + add a, r5 + jnz fail_p3 + + mov a, #041H + add a, r6 + jnz fail_p3 + + mov a, #081H + add a, r7 + jnz fail_p3 + + ret + + +fail_p3: + FAIL Index: verif/black_box/add/a_data/test.asm =================================================================== --- verif/black_box/add/a_data/test.asm (nonexistent) +++ verif/black_box/add/a_data/test.asm (revision 292) @@ -0,0 +1,82 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:16 arniml Exp $ + ;; + ;; Test ADD A, data without carry. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #000H + + add a, #055H + jz fail + ;; exact check for 055H + jb0 ok_1 + jmp fail + +ok_1: jb1 fail + + jb2 ok_2 + jmp fail + +ok_2: jb3 fail + + jb4 ok_4 + jmp fail + +ok_4: jb5 fail + + jb6 ok_6 + jmp fail + +ok_6: jb7 fail + + add a, #0AAH + jz fail + add a, #001H + jnz fail + + add a, #011111110B + jb0 fail + + add a, #011111111B + jb1 fail + jb0 ko_1 + jmp fail + +ko_1: add a, #011111110B + jb2 fail + jb1 ko_2 + jmp fail + +ko_2: add a, #011111100B + jb3 fail + jb2 ko_3 + jmp fail + +ko_3: add a, #011111000B + jb4 fail + jb3 ko_4 + jmp fail + +ko_4: add a, #011110000B + jb5 fail + jb4 ko_5 + jmp fail + +ko_5: add a, #011100000B + jb6 fail + jb5 ko_6 + jmp fail + +ko_6: add a, #011000000B + jb7 fail + jb6 pass + +fail: FAIL + +pass: PASS Index: verif/black_box/add/ind_rr/test.asm =================================================================== --- verif/black_box/add/ind_rr/test.asm (nonexistent) +++ verif/black_box/add/ind_rr/test.asm (revision 292) @@ -0,0 +1,129 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:16 arniml Exp $ + ;; + ;; Test ADD A, @ Rr without carry. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov r0, #010H + mov r1, #020H + mov a, #0FEH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FDH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0FBH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0F7H + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0EFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0DFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #0BFH + mov @r0, a + mov @r1, a + inc r0 + inc r1 + mov a, #07FH + mov @r0, a + mov @r1, a + + ;; + mov r0, #010H + mov r1, #020H + mov a, #002H + add a, @r0 + jnz fail + mov a, #002H + add a, @r1 + jnz fail + + inc r0 + inc r1 + mov a, #003H + add a, @r0 + jnz fail + mov a, #003H + add a, @r1 + jnz fail + + inc r0 + inc r1 + mov a, #005H + add a, @r0 + jnz fail + mov a, #005H + add a, @r1 + jnz fail + + inc r0 + inc r1 + mov a, #009H + add a, @r0 + jnz fail + mov a, #009H + add a, @r1 + jnz fail + + inc r0 + inc r1 + mov a, #011H + add a, @r0 + jnz fail + mov a, #011H + add a, @r1 + jnz fail + + inc r0 + inc r1 + mov a, #021H + add a, @r0 + jnz fail + mov a, #021H + add a, @r1 + jnz fail + + inc r0 + inc r1 + mov a, #041H + add a, @r0 + jnz fail + mov a, #041H + add a, @r1 + jnz fail + + inc r0 + inc r1 + mov a, #081H + add a, @r0 + jnz fail + mov a, #081H + add a, @r1 + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/tx/t0/ent0_clk/test.asm =================================================================== --- verif/black_box/tx/t0/ent0_clk/test.asm (nonexistent) +++ verif/black_box/tx/t0/ent0_clk/test.asm (revision 292) @@ -0,0 +1,15 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Execute ENT0 CLK. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + ent0 clk + +pass: PASS Index: verif/black_box/tx/t0/t0/test.asm =================================================================== --- verif/black_box/tx/t0/t0/test.asm (nonexistent) +++ verif/black_box/tx/t0/t0/test.asm (revision 292) @@ -0,0 +1,21 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test J(N)T0 addr. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jnt0 fail + anl P1, #0FEH + jt0 fail + orl P1, #001H + jt0 pass + +fail: FAIL + +pass: PASS Index: verif/black_box/tx/t1/test.asm =================================================================== --- verif/black_box/tx/t1/test.asm (nonexistent) +++ verif/black_box/tx/t1/test.asm (revision 292) @@ -0,0 +1,21 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test J(N)T1 addr. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jnt1 fail + anl P1, #0FDH + jt1 fail + orl P1, #002H + jt1 pass + +fail: FAIL + +pass: PASS Index: verif/black_box/jbb/jbb_all_0/test.asm =================================================================== --- verif/black_box/jbb/jbb_all_0/test.asm (nonexistent) +++ verif/black_box/jbb/jbb_all_0/test.asm (revision 292) @@ -0,0 +1,20 @@ + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #000H + jb0 fail + jb1 fail + jb2 fail + jb3 fail + jb4 fail + jb5 fail + jb6 fail + jb7 fail + +pass: PASS + +fail: FAIL Index: verif/black_box/jbb/jbb_all_1/test.asm =================================================================== --- verif/black_box/jbb/jbb_all_1/test.asm (nonexistent) +++ verif/black_box/jbb/jbb_all_1/test.asm (revision 292) @@ -0,0 +1,34 @@ + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #0FFH + jb0 ok_0 + jmp fail + +ok_0: jb1 ok_1 + jmp fail + +ok_1: jb2 ok_2 + jmp fail + +ok_2: jb3 ok_3 + jmp fail + +ok_3: jb4 ok_4 + jmp fail + +ok_4: jb5 ok_5 + jmp fail + +ok_5: jb6 ok_6 + jmp fail + +ok_6: jb7 pass + +fail: FAIL + +pass: PASS Index: verif/black_box/jbb/jbb_55/test.asm =================================================================== --- verif/black_box/jbb/jbb_55/test.asm (nonexistent) +++ verif/black_box/jbb/jbb_55/test.asm (revision 292) @@ -0,0 +1,36 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:16 arniml Exp $ + ;; + ;; Test the JBb instruction on 055H. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #055H + jb0 ok_0 + jmp fail + +ok_0: jb1 fail + + jb2 ok_2 + jmp fail + +ok_2: jb3 fail + + jb4 ok_4 + jmp fail + +ok_4: jb5 fail + + jb6 ok_6 + jmp fail + +ok_6: jb7 fail + +pass: PASS + +fail: FAIL Index: verif/black_box/jbb/jbb_aa/test.asm =================================================================== --- verif/black_box/jbb/jbb_aa/test.asm (nonexistent) +++ verif/black_box/jbb/jbb_aa/test.asm (revision 292) @@ -0,0 +1,35 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:16 arniml Exp $ + ;; + ;; Test the JBb instruction on 0AAH. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #0AAH + jb0 fail + + jb1 ok_1 + jmp fail + +ok_1: jb2 fail + + jb3 ok_3 + jmp fail + +ok_3: jb4 fail + + jb5 ok_5 + jmp fail + +ok_5: jb6 fail + + jb7 pass + +fail: FAIL + +pass: PASS Index: verif/black_box/djnz/test.asm =================================================================== --- verif/black_box/djnz/test.asm (nonexistent) +++ verif/black_box/djnz/test.asm (revision 292) @@ -0,0 +1,54 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test DJNZ Rr, addr + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov r0, #003H + mov a, #000H + djnz r0, r0_2 + jmp fail + +r0_2: djnz r0, r0_1 + jmp fail +r0_1: mov a, #0FFH + djnz r0, fail + + + mov r1, #000H + mov r2, #000H +r1_loop: + mov a, r2 + add a, r1 + jnz fail + inc r2 + djnz r1, r1_loop + + mov a, r1 + jnz fail + + + mov a, #002H + mov r3, a + mov r4, a + mov r5, a + djnz r5, ok_r5 + jmp fail +ok_r5: djnz r4, ok_r4 + jmp fail +ok_r4: djnz r3, ok_r3 + jmp fail + +ok_r3: djnz r3, fail + djnz r4, fail + djnz r5, fail + +pass: PASS + +fail: FAIL Index: verif/black_box/jmpp/test.asm =================================================================== --- verif/black_box/jmpp/test.asm (nonexistent) +++ verif/black_box/jmpp/test.asm (revision 292) @@ -0,0 +1,490 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test JMPP. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + +table MACRO data + DB data & 0FFH + ENDM + + ORG 0 + + ;; Start of test + mov a, #000H + jmp table1 + +fail: FAIL + +pass: PASS + + + ;; ******************************************************************* + ORG 0100H + ;; + table t1_e00 + table t1_e01 + table t1_e02 + table t1_e03 + table t1_e04 + table t1_e05 + table t1_e06 + table t1_e07 + table t1_e08 + table t1_e09 + table t1_e0a + table t1_e0b + table t1_e0c + table t1_e0d + table t1_e0e + table t1_e0f + table t1_e10 + table t1_e11 + table t1_e12 + table t1_e13 + table t1_e14 + table t1_e15 + table t1_e16 + table t1_e17 + table t1_e18 + table t1_e19 + table t1_e1a + table t1_e1b + table t1_e1c + table t1_e1d + table t1_e1e + table t1_e1f + ;; + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + ;; + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + ;; + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + ;; + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + ;; + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + ;; + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + table t1_e01 + + jmp fail +table1: jmpp @a + jmp fail + +t1_e00: mov a, #007H + jmp table2 + ;; +t1_e01: jmp fail + jmp fail + ;; +t1_e02: mov a, #005H + jmp table2 + ;; +t1_e03: jmp fail + jmp fail + ;; +t1_e04: mov a, #003H + jmp table2 + ;; +t1_e05: jmp fail + jmp fail + ;; +t1_e06: mov a, #001H + jmp table2 + ;; +t1_e07: jmp fail + jmp fail + ;; +t1_e08: jmp fail + jmp fail + ;; +t1_e09: jmp fail + jmp fail + ;; +t1_e0a: jmp fail + jmp fail + ;; +t1_e0b: jmp fail + jmp fail + ;; +t1_e0c: jmp fail + jmp fail + ;; +t1_e0d: jmp fail + jmp fail + ;; +t1_e0e: jmp fail + jmp fail + ;; +t1_e0f: jmp fail + jmp fail + ;; +t1_e10: mov a, #018H + jmp table2 + ;; +t1_e11: jmp fail + jmp fail + ;; +t1_e12: jmp fail + jmp fail + ;; +t1_e13: jmp fail + jmp fail + ;; +t1_e14: jmp fail + jmp fail + ;; +t1_e15: jmp fail + jmp fail + ;; +t1_e16: jmp fail + jmp fail + ;; +t1_e17: jmp fail + jmp fail + ;; +t1_e18: jmp fail + jmp fail + ;; +t1_e19: jmp fail + jmp fail + ;; +t1_e1a: jmp fail + jmp fail + ;; +t1_e1b: jmp fail + jmp fail + ;; +t1_e1c: jmp fail + jmp fail + ;; +t1_e1d: jmp fail + jmp fail + ;; +t1_e1e: jmp fail + jmp fail + ;; +t1_e1f: jmp pass + jmp fail + + + ;; ******************************************************************* + ORG 512 + ;; + table t2_e00 + table t2_e01 + table t2_e02 + table t2_e03 + table t2_e04 + table t2_e05 + table t2_e06 + table t2_e07 + table t2_e08 + table t2_e09 + table t2_e0a + table t2_e0b + table t2_e0c + table t2_e0d + table t2_e0e + table t2_e0f + table t2_e10 + table t2_e11 + table t2_e12 + table t2_e13 + table t2_e14 + table t2_e15 + table t2_e16 + table t2_e17 + table t2_e18 + table t2_e19 + table t2_e1a + table t2_e1b + table t2_e1c + table t2_e1d + table t2_e1e + table t2_e1f + ;; + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + ;; + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + ;; + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + ;; + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + ;; + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + ;; + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + table t2_e01 + + jmp fail +table2: jmpp @a + jmp fail + +t2_e00: jmp fail + jmp fail + ;; +t2_e01: mov a, #010H + jmp table1 + ;; +t2_e02: jmp fail + jmp fail + ;; +t2_e03: mov a, #006H + jmp table1 + ;; +t2_e04: jmp fail + jmp fail + ;; +t2_e05: mov a, #004H + jmp table1 + ;; +t2_e06: jmp fail + jmp fail + ;; +t2_e07: mov a, #002H + jmp table1 + ;; +t2_e08: jmp fail + jmp fail + ;; +t2_e09: jmp fail + jmp fail + ;; +t2_e0a: jmp fail + jmp fail + ;; +t2_e0b: jmp fail + jmp fail + ;; +t2_e0c: jmp fail + jmp fail + ;; +t2_e0d: jmp fail + jmp fail + ;; +t2_e0e: jmp fail + jmp fail + ;; +t2_e0f: jmp fail + jmp fail + ;; +t2_e10: jmp fail + jmp fail + ;; +t2_e11: jmp fail + jmp fail + ;; +t2_e12: jmp fail + jmp fail + ;; +t2_e13: jmp fail + jmp fail + ;; +t2_e14: jmp fail + jmp fail + ;; +t2_e15: jmp fail + jmp fail + ;; +t2_e16: jmp fail + jmp fail + ;; +t2_e17: jmp fail + jmp fail + ;; +t2_e18: mov a, #01FH + jmp table1 + ;; +t2_e19: jmp fail + jmp fail + ;; +t2_e1a: jmp fail + jmp fail + ;; +t2_e1b: jmp fail + jmp fail + ;; +t2_e1c: jmp fail + jmp fail + ;; +t2_e1d: jmp fail + jmp fail + ;; +t2_e1e: jmp fail + jmp fail + ;; +t2_e1f: jmp fail + jmp fail Index: verif/black_box/in/test.asm =================================================================== --- verif/black_box/in/test.asm (nonexistent) +++ verif/black_box/in/test.asm (revision 292) @@ -0,0 +1,29 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:18 arniml Exp $ + ;; + ;; Test IN A, Pp. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #055H + outl p1, a + mov a, #0AAH + outl p2, a + + clr a + in a, p1 + add a, #0ABH + jnz fail + + in a, p2 + add a, #056H + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/inc/a/test.asm =================================================================== --- verif/black_box/inc/a/test.asm (nonexistent) +++ verif/black_box/inc/a/test.asm (revision 292) @@ -0,0 +1,34 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:16 arniml Exp $ + ;; + ;; Test INC A. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #000H + inc a + add a, #0FFH + jnz fail + + inc a + jb0 ok_0 + jmp fail + +ok_0: mov a, #0FFH + inc a + jnz fail + + mov a, #010100101B + inc a + add a, #001011001B + inc a + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/inc/rr/test.asm =================================================================== --- verif/black_box/inc/rr/test.asm (nonexistent) +++ verif/black_box/inc/rr/test.asm (revision 292) @@ -0,0 +1,243 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:16 arniml Exp $ + ;; + ;; Test INC Rr for RB0 and RB1. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + + ;; fill RB0 + call fill + + ;; check RB0 + call check + + ;; fill RB1 + sel rb1 + call fill + sel rb0 + + ;; clear RB0 + call clr_rb0 + + ;; check RB1 + sel rb1 + call check + + ;; check RB0 for all 0 + mov r0, #000H + mov r1, #008H +chk0_loop: + mov a, @r0 + jnz fail + inc r0 + djnz r1, chk0_loop + + +pass: PASS + +fail: FAIL + + + ORG 0300H +fill: mov a, #0FFH + mov r0, a + mov r1, a + mov r2, a + mov r3, a + mov r4, a + mov r5, a + mov r6, a + mov r7, a + ret + +clr_rb0: + mov r0, #007H + clr a +clr_loop: + mov @r0, a + djnz r0, clr_loop + ret + +check: mov a, #000H + inc r0 + jnz fail_p3 + mov a, r0 + jnz fail_p3 + ;; + mov a, r1 + jz fail_p3 + mov a, r2 + jz fail_p3 + mov a, r3 + jz fail_p3 + mov a, r4 + jz fail_p3 + mov a, r5 + jz fail_p3 + mov a, r6 + jz fail_p3 + mov a, r7 + jz fail_p3 + + mov a, #000H + inc r1 + jnz fail_p3 + mov a, r1 + jnz fail_p3 + ;; + mov a, r0 + jnz fail_p3 + ;; + mov a, r2 + jz fail_p3 + mov a, r3 + jz fail_p3 + mov a, r4 + jz fail_p3 + mov a, r5 + jz fail_p3 + mov a, r6 + jz fail_p3 + mov a, r7 + jz fail_p3 + + mov a, #000H + inc r2 + jnz fail_p3 + mov a, r2 + jnz fail_p3 + ;; + mov a, r0 + jnz fail_p3 + mov a, r1 + jnz fail_p3 + ;; + mov a, r3 + jz fail_p3 + mov a, r4 + jz fail_p3 + mov a, r5 + jz fail_p3 + mov a, r6 + jz fail_p3 + mov a, r7 + jz fail_p3 + + mov a, #000H + inc r3 + jnz fail_p3 + mov a, r3 + jnz fail_p3 + ;; + mov a, r0 + jnz fail_p3 + mov a, r1 + jnz fail_p3 + mov a, r2 + jnz fail_p3 + ;; + mov a, r4 + jz fail_p3 + mov a, r5 + jz fail_p3 + mov a, r6 + jz fail_p3 + mov a, r7 + jz fail_p3 + + mov a, #000H + inc r4 + jnz fail_p3 + mov a, r4 + jnz fail_p3 + ;; + mov a, r0 + jnz fail_p3 + mov a, r1 + jnz fail_p3 + mov a, r2 + jnz fail_p3 + mov a, r3 + jnz fail_p3 + ;; + mov a, r5 + jz fail_p3 + mov a, r6 + jz fail_p3 + mov a, r7 + jz fail_p3 + + mov a, #000H + inc r5 + jnz fail_p3 + mov a, r5 + jnz fail_p3 + ;; + mov a, r0 + jnz fail_p3 + mov a, r1 + jnz fail_p3 + mov a, r2 + jnz fail_p3 + mov a, r3 + jnz fail_p3 + mov a, r4 + jnz fail_p3 + ;; + mov a, r6 + jz fail_p3 + mov a, r7 + jz fail_p3 + + mov a, #000H + inc r6 + jnz fail_p3 + mov a, r6 + jnz fail_p3 + ;; + mov a, r0 + jnz fail_p3 + mov a, r1 + jnz fail_p3 + mov a, r2 + jnz fail_p3 + mov a, r3 + jnz fail_p3 + mov a, r4 + jnz fail_p3 + mov a, r5 + jnz fail_p3 + ;; + mov a, r7 + jz fail_p3 + + mov a, #000H + inc r7 + jnz fail_p3 + mov a, r7 + jnz fail_p3 + ;; + mov a, r0 + jnz fail_p3 + mov a, r1 + jnz fail_p3 + mov a, r2 + jnz fail_p3 + mov a, r3 + jnz fail_p3 + mov a, r4 + jnz fail_p3 + mov a, r5 + jnz fail_p3 + mov a, r6 + jnz fail_p3 + ret + +fail_p3: + FAIL Index: verif/black_box/inc/ind_rr/test.asm =================================================================== --- verif/black_box/inc/ind_rr/test.asm (nonexistent) +++ verif/black_box/inc/ind_rr/test.asm (revision 292) @@ -0,0 +1,345 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:16 arniml Exp $ + ;; + ;; Test INC @ Rr for RB0. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #0FFH + mov r1, a + mov r2, a + mov r3, a + mov r4, a + mov r5, a + mov r6, a + mov r7, a + + mov r0, #001H + mov a, #000H + inc @r0 + jnz fail + mov a, r1 + jnz fail + ;; + mov a, r2 + jz fail + mov a, r3 + jz fail + mov a, r4 + jz fail + mov a, r5 + jz fail + mov a, r6 + jz fail + mov a, r7 + jz fail + + mov a, #000H + inc r0 + jnz fail + inc @r0 + jnz fail + mov a, r2 + jnz fail + ;; + mov a, r1 + jnz fail + ;; + mov a, r3 + jz fail + mov a, r4 + jz fail + mov a, r5 + jz fail + mov a, r6 + jz fail + mov a, r7 + jz fail + + mov a, #000H + inc r0 + jnz fail + inc @r0 + jnz fail + mov a, r3 + jnz fail + ;; + mov a, r1 + jnz fail + mov a, r2 + jnz fail + ;; + mov a, r4 + jz fail + mov a, r5 + jz fail + mov a, r6 + jz fail + mov a, r7 + jz fail + + mov a, #000H + inc r0 + jnz fail + inc @r0 + jnz fail + mov a, r4 + jnz fail + ;; + mov a, r1 + jnz fail + mov a, r2 + jnz fail + mov a, r3 + jnz fail + ;; + mov a, r5 + jz fail + mov a, r6 + jz fail + mov a, r7 + jz fail + + mov a, #000H + inc r0 + jnz fail + inc @r0 + jnz fail + mov a, r5 + jnz fail + ;; + mov a, r1 + jnz fail + mov a, r2 + jnz fail + mov a, r3 + jnz fail + mov a, r4 + jnz fail + ;; + mov a, r6 + jz fail + mov a, r7 + jz fail + + mov a, #000H + inc r0 + jnz fail + inc @r0 + jnz fail + mov a, r6 + jnz fail + ;; + mov a, r1 + jnz fail + mov a, r2 + jnz fail + mov a, r3 + jnz fail + mov a, r4 + jnz fail + mov a, r5 + jnz fail + ;; + mov a, r7 + jz fail + + mov a, #000H + inc r0 + jnz fail + inc @r0 + jnz fail + mov a, r7 + jnz fail + ;; + mov a, r1 + jnz fail + mov a, r2 + jnz fail + mov a, r3 + jnz fail + mov a, r4 + jnz fail + mov a, r5 + jnz fail + mov a, r6 + jnz fail + + jmp test_r1 + +fail: FAIL + + ;; + ALIGN 256 + ;; + +test_r1: + mov a, #0FFH + mov r0, a + mov r2, a + mov r3, a + mov r4, a + mov r5, a + mov r6, a + mov r7, a + + mov r1, #000H + mov a, #000H + inc @r1 + jnz fail2 + mov a, r0 + jnz fail2 + ;; + mov a, r2 + jz fail2 + mov a, r3 + jz fail2 + mov a, r4 + jz fail2 + mov a, r5 + jz fail2 + mov a, r6 + jz fail2 + mov a, r7 + jz fail2 + + mov a, #000H + inc r1 + inc r1 + jnz fail2 + inc @r1 + jnz fail2 + mov a, r2 + jnz fail2 + ;; + mov a, r0 + jnz fail2 + ;; + mov a, r3 + jz fail2 + mov a, r4 + jz fail2 + mov a, r5 + jz fail2 + mov a, r6 + jz fail2 + mov a, r7 + jz fail2 + + mov a, #000H + inc r1 + jnz fail2 + inc @r1 + jnz fail2 + mov a, r3 + jnz fail2 + ;; + mov a, r0 + jnz fail2 + mov a, r2 + jnz fail2 + ;; + mov a, r4 + jz fail2 + mov a, r5 + jz fail2 + mov a, r6 + jz fail2 + mov a, r7 + jz fail2 + + mov a, #000H + inc r1 + jnz fail2 + inc @r1 + jnz fail2 + mov a, r4 + jnz fail2 + ;; + mov a, r0 + jnz fail2 + mov a, r2 + jnz fail2 + mov a, r3 + jnz fail2 + ;; + mov a, r5 + jz fail2 + mov a, r6 + jz fail2 + mov a, r7 + jz fail2 + + mov a, #000H + inc r1 + jnz fail2 + inc @r1 + jnz fail2 + mov a, r5 + jnz fail2 + ;; + mov a, r0 + jnz fail2 + mov a, r2 + jnz fail2 + mov a, r3 + jnz fail2 + mov a, r4 + jnz fail2 + ;; + mov a, r6 + jz fail2 + mov a, r7 + jz fail2 + + mov a, #000H + inc r1 + jnz fail2 + inc @r1 + jnz fail2 + mov a, r6 + jnz fail2 + ;; + mov a, r0 + jnz fail2 + mov a, r2 + jnz fail2 + mov a, r3 + jnz fail2 + mov a, r4 + jnz fail2 + mov a, r5 + jnz fail2 + ;; + mov a, r7 + jz fail2 + + mov a, #000H + inc r1 + jnz fail2 + inc @r1 + jnz fail2 + mov a, r7 + jnz fail2 + ;; + mov a, r0 + jnz fail2 + mov a, r2 + jnz fail2 + mov a, r3 + jnz fail2 + mov a, r4 + jnz fail2 + mov a, r5 + jnz fail2 + mov a, r6 + jnz fail2 + +pass: PASS + +fail2: FAIL Index: verif/black_box/jnc/test.asm =================================================================== --- verif/black_box/jnc/test.asm (nonexistent) +++ verif/black_box/jnc/test.asm (revision 292) @@ -0,0 +1,22 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test JNC instruction. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jnc ok_1 + jmp fail + +ok_1: mov a, #0FFH + add a, #001H + jnc fail + +pass: PASS + +fail: FAIL Index: verif/black_box/swap/test.asm =================================================================== --- verif/black_box/swap/test.asm (nonexistent) +++ verif/black_box/swap/test.asm (revision 292) @@ -0,0 +1,25 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test SWAP A. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #05AH + swap a + add a, #05BH + jnz fail + + mov a, #0C8H + swap a + add a, #074H + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/cpl/a/test.asm =================================================================== --- verif/black_box/cpl/a/test.asm (nonexistent) +++ verif/black_box/cpl/a/test.asm (revision 292) @@ -0,0 +1,28 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test CPL A. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + mov a, #0FFH + cpl a + jnz fail + + cpl a + inc a + jnz fail + + mov a, #055H + cpl a + add a, #01010110B + jnz fail + +pass: PASS + +fail: FAIL Index: verif/black_box/cpl/c/test.asm =================================================================== --- verif/black_box/cpl/c/test.asm (nonexistent) +++ verif/black_box/cpl/c/test.asm (revision 292) @@ -0,0 +1,31 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test CPL C. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jc fail + + cpl c + jnc fail + + mov a, #0FEH + add a, #001H + jc fail + cpl c + jnc fail + + add a, #001H + jnc fail + cpl c + jc fail + +pass: PASS + +fail: FAIL Index: verif/black_box/cpl/f0/test.asm =================================================================== --- verif/black_box/cpl/f0/test.asm (nonexistent) +++ verif/black_box/cpl/f0/test.asm (revision 292) @@ -0,0 +1,23 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test CPL F0. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jf0 fail + cpl f0 + jf0 ok_1 + jmp fail + +ok_1: cpl f0 + jf0 fail + +pass: PASS + +fail: FAIL Index: verif/black_box/cpl/f1/test.asm =================================================================== --- verif/black_box/cpl/f1/test.asm (nonexistent) +++ verif/black_box/cpl/f1/test.asm (revision 292) @@ -0,0 +1,23 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1.1.1 2004-03-25 22:29:17 arniml Exp $ + ;; + ;; Test CPL F1. + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + ;; Start of test + jf1 fail + cpl f1 + jf1 ok_1 + jmp fail + +ok_1: cpl f1 + jf1 fail + +pass: PASS + +fail: FAIL Index: verif/include/Makefile.core =================================================================== --- verif/include/Makefile.core (nonexistent) +++ verif/include/Makefile.core (revision 292) @@ -0,0 +1,20 @@ + +.PHONY: all +all: t48_rom.hex t48_ext_rom.hex + +$(MODULE).p: $(MODULE).asm + asl -i $(VERIF_DIR)/include -L $(MODULE).asm + +t48_rom.hex: $(MODULE).p + p2hex -r 0-2047 $(MODULE).p t48_rom.hex + +t48_ext_rom.hex: $(MODULE).p + p2hex -a -r 2048-4095 $(MODULE).p t48_ext_rom.hex + +.PHONY: simu +simu: all + cp t48_rom.hex t48_ext_rom.hex $(SIM_DIR) + +.PHONY: clean +clean: + rm -f *.p *~ *.hex *.lst Index: verif/include/Makefile.cell =================================================================== --- verif/include/Makefile.cell (nonexistent) +++ verif/include/Makefile.cell (revision 292) @@ -0,0 +1,4 @@ + +MODULE=test + +include $(VERIF_DIR)/include/Makefile.core Index: verif/include/cpu.inc =================================================================== --- verif/include/cpu.inc (nonexistent) +++ verif/include/cpu.inc (revision 292) @@ -0,0 +1,2 @@ + + CPU 8048 Index: verif/include/pass_fail.inc =================================================================== --- verif/include/pass_fail.inc (nonexistent) +++ verif/include/pass_fail.inc (revision 292) @@ -0,0 +1,12 @@ + +FAIL MACRO + mov a, #0AAH + mov a, #055H + mov a, #000H + ENDM + +PASS MACRO + mov a, #0AAH + mov a, #055H + mov a, #001H + ENDM Index: verif/gp_sw/toggle/test.asm =================================================================== --- verif/gp_sw/toggle/test.asm (nonexistent) +++ verif/gp_sw/toggle/test.asm (revision 292) @@ -0,0 +1,23 @@ + ;; ******************************************************************* + ;; $Id: test.asm,v 1.1 2004-05-02 19:15:27 arniml Exp $ + ;; + ;; Toggle P1[0] + ;; ******************************************************************* + + INCLUDE "cpu.inc" + INCLUDE "pass_fail.inc" + + ORG 0 + + mov a, #0FFH + +loop: outl p1, a + xrl a, #001H + + mov r1, #000H +wait1: + mov r0, #000H +wait2: djnz r0, wait2 + djnz r1, wait1 + + jmp loop Index: i8039emu/i8039.c =================================================================== --- i8039emu/i8039.c (nonexistent) +++ i8039emu/i8039.c (revision 292) @@ -0,0 +1,841 @@ +/**************************************************************************** + * Intel 8039 Portable Emulator * + * * + * Copyright (C) 1997 by Mirko Buffoni * + * Based on the original work (C) 1997 by Dan Boris, an 8048 emulator * + * You are not allowed to distribute this software commercially * + * Please, notify me, if you make any changes to this file * + * * + * Adapted for the T48 uController project, 2004 by Arnim Laeuger * + * See http://www.opencores.org/projects.cgi/web/t48/overview * + * * + * $Id: i8039.c,v 1.7 2004-07-04 12:06:53 arniml Exp $ + * * + * **** Change Log **** * + * * + * TLP (19-Jun-2001) * + * - Changed Ports 1 and 2 to quasi bidirectional output latched ports * + * - Added the Port 1 & 2 output latch data to the debugger window * + * TLP (02-Jan-2002) * + * - External IRQs no longer go pending (sampled as a level state) * + * - Timer IRQs do not go pending if Timer interrupts are disabled * + * - Timer IRQs made pending, were incorrectly being cleared if the * + * external interrupt was being serviced * + * - External interrupts now take precedence when simultaneous * + * internal and external interrupt requests occur * + * - 'DIS TCNTI' now removes pending timer IRQs * + * - Nested IRQs of any sort are no longer allowed * + * - T_flag was not being set in the right place of execution, which * + * could have lead to it being incorrectly set after being cleared * + * - Counter overflows now also set the T_flag * + * - Added the Timer/Counter register to the debugger window * + * TLP (09-Jan-2002) * + * - Changed Interrupt system to instant servicing * + * - The Timer and Counter can no longer be 'on' simultaneously * + * - Added Save State * + * TLP (15-Feb-2002) * + * - Corrected Positive signal edge sensing (used on the T1 input) * + ****************************************************************************/ + + +#include +#include +#include + +#include "i8039.h" + + +/*** Cycle times for the jump on condition instructions, are unusual. + Condition is tested during the first cycle, so if condition is not + met, second address fetch cycle may not really be taken. For now we + just use the cycle counts as listed in the i8048 user manual. +***/ + +#if 0 +#define ADJUST_CYCLES { inst_cycles -= 1; } /* Possible real cycles setting */ +#else +#define ADJUST_CYCLES { } /* User Manual cycles setting */ +#endif + + + +/* HJB 01/05/99 changed to positive values to use pending_irq as a flag */ +#define I8039_NO_INT 0 /* No Interrupts pending or executing */ +#define I8039_EXTERNAL_INT 1 /* Execute a normal external interrupt */ +#define I8039_TIMCNT_INT 2 /* Execute a Timer/Counter interrupt */ + + +/* Layout of the registers in the debugger */ +static UINT8 i8039_reg_layout[] = { + I8039_PC, I8039_SP, I8039_PSW, I8039_A, I8039_TC, I8039_P1, I8039_P2, -1, + I8039_R0, I8039_R1, I8039_R2, I8039_R3, I8039_R4, I8039_R5, I8039_R6, I8039_R7, 0 +}; + +/* Layout of the debugger windows x,y,w,h */ +static UINT8 i8039_win_layout[] = { + 0, 0,80, 2, /* register window (top rows) */ + 0, 3,24,19, /* disassembler window (left colums) */ + 25, 3,55, 9, /* memory #1 window (right, upper middle) */ + 25,13,55, 9, /* memory #2 window (right, lower middle) */ + 0,23,80, 1, /* command line window (bottom rows) */ +}; + + +static int Ext_IRQ(void); +static int Timer_IRQ(void); + +#define M_RDMEM(A) I8039_RDMEM(A) +#define M_RDOP(A) I8039_RDOP(A) +#define M_RDOP_ARG(A) I8039_RDOP_ARG(A) +#define M_IN(A) I8039_In(A) +#define M_OUT(A,V) I8039_Out(A,V) + +#define port_r(A) I8039_In(I8039_p0 + A) +#define port_w(A,V) I8039_Out(I8039_p0 + A,V) +#define test_r(A) I8039_In(I8039_t0 + A) +#define test_w(A,V) I8039_Out(I8039_t0 + A,V) +#define bus_r() I8039_In(I8039_bus) +#define bus_w(V) I8039_Out(I8039_bus,V) + +#define C_FLAG 0x80 +#define A_FLAG 0x40 +#define F_FLAG 0x20 +#define B_FLAG 0x10 + +typedef struct +{ + PAIR PREVPC; /* previous program counter */ + PAIR PC; /* program counter */ + UINT8 A, SP, PSW; + UINT8 RAM[256]; + UINT8 bus, f1; /* Bus data, and flag1 */ + UINT8 P1, P2; /* Internal Port 1 and 2 latched outputs */ + + UINT8 pending_irq, irq_executing, masterClock, regPtr; + UINT8 t_flag, timer, timerON, countON, xirq_en, tirq_en; + UINT16 A11, A11ff; + UINT8 irq_state, irq_extra_cycles; + int (*irq_callback)(int irqline); +} I8039_Regs; + +static I8039_Regs R; +int i8039_ICount; +int inst_cycles; +static UINT8 Old_T1; + +/* The opcode table now is a combination of cycle counts and function pointers */ +typedef struct { + unsigned cycles; + void (*function) (void); +} s_opcode; + +#define POSITIVE_EDGE_T1 (( (int)(T1-Old_T1) > 0) ? 1 : 0) +#define NEGATIVE_EDGE_T1 (( (int)(Old_T1-T1) > 0) ? 1 : 0) + +#define M_Cy ((R.PSW & C_FLAG) >> 7) +#define M_Cn (!M_Cy) +#define M_Ay ((R.PSW & A_FLAG)) +#define M_An (!M_Ay) +#define M_F0y ((R.PSW & F_FLAG)) +#define M_F0n (!M_F0y) +#define M_By ((R.PSW & B_FLAG)) +#define M_Bn (!M_By) + +#define intRAM R.RAM +#define regPTR R.regPtr + +#define R0 intRAM[regPTR ] +#define R1 intRAM[regPTR+1] +#define R2 intRAM[regPTR+2] +#define R3 intRAM[regPTR+3] +#define R4 intRAM[regPTR+4] +#define R5 intRAM[regPTR+5] +#define R6 intRAM[regPTR+6] +#define R7 intRAM[regPTR+7] + + +INLINE void CLR (UINT8 flag) { R.PSW &= ~flag; } +INLINE void SET (UINT8 flag) { R.PSW |= flag; } + + +/* Get next opcode argument and increment program counter */ +INLINE unsigned M_RDMEM_OPCODE (void) +{ + unsigned retval; + retval=M_RDOP_ARG(R.PC.w.l); + R.PC.w.l++; + return retval; +} + +INLINE void push(UINT8 d) +{ + intRAM[8+R.SP++] = d; + R.SP = R.SP & 0x0f; + R.PSW = R.PSW & 0xf8; + R.PSW = R.PSW | (R.SP >> 1); +} + +INLINE UINT8 pull(void) { + R.SP = (R.SP + 15) & 0x0f; /* if (--R.SP < 0) R.SP = 15; */ + R.PSW = R.PSW & 0xf8; + R.PSW = R.PSW | (R.SP >> 1); + /* regPTR = ((M_By) ? 24 : 0); regPTR should not change */ + return intRAM[8+R.SP]; +} + +INLINE void daa_a(void) +{ + if ((R.A & 0x0f) > 0x09 || (R.PSW & A_FLAG)) + R.A += 0x06; + if ((R.A & 0xf0) > 0x90 || (R.PSW & C_FLAG)) + { + R.A += 0x60; + SET(C_FLAG); + } else CLR(C_FLAG); +} + +INLINE void M_ADD(UINT8 dat) +{ + UINT16 temp; + + CLR(C_FLAG | A_FLAG); + if ((R.A & 0xf) + (dat & 0xf) > 0xf) SET(A_FLAG); + temp = R.A + dat; + if (temp > 0xff) SET(C_FLAG); + R.A = temp & 0xff; +} + +INLINE void M_ADDC(UINT8 dat) +{ + UINT16 temp; + + CLR(A_FLAG); + if ((R.A & 0xf) + (dat & 0xf) + M_Cy > 0xf) SET(A_FLAG); + temp = R.A + dat + M_Cy; + CLR(C_FLAG); + if (temp > 0xff) SET(C_FLAG); + R.A = temp & 0xff; +} + +INLINE void M_CALL(UINT16 addr) +{ + push(R.PC.b.l); + push((R.PC.b.h & 0x0f) | (R.PSW & 0xf0)); + R.PC.w.l = addr; + +} + +INLINE void M_XCHD(UINT8 addr) +{ + UINT8 dat = R.A & 0x0f; + R.A &= 0xf0; + R.A |= intRAM[addr] & 0x0f; + intRAM[addr] &= 0xf0; + intRAM[addr] |= dat; +} + + +INLINE void M_ILLEGAL(void) +{ + logerror("I8039: PC = %04x, Illegal opcode = %02x\n", R.PC.w.l-1, M_RDMEM(R.PC.w.l-1)); +} + +INLINE void M_UNDEFINED(void) +{ + logerror("I8039: PC = %04x, Unimplemented opcode = %02x\n", R.PC.w.l-1, M_RDMEM(R.PC.w.l-1)); +} + +#define INT_RAM_MASK 0xff + +static void illegal(void) { M_ILLEGAL(); } + +static void add_a_n(void) { M_ADD(M_RDMEM_OPCODE()); } +static void add_a_r0(void) { M_ADD(R0); } +static void add_a_r1(void) { M_ADD(R1); } +static void add_a_r2(void) { M_ADD(R2); } +static void add_a_r3(void) { M_ADD(R3); } +static void add_a_r4(void) { M_ADD(R4); } +static void add_a_r5(void) { M_ADD(R5); } +static void add_a_r6(void) { M_ADD(R6); } +static void add_a_r7(void) { M_ADD(R7); } +static void add_a_xr0(void) { M_ADD(intRAM[R0 & INT_RAM_MASK]); } +static void add_a_xr1(void) { M_ADD(intRAM[R1 & INT_RAM_MASK]); } +static void adc_a_n(void) { M_ADDC(M_RDMEM_OPCODE()); } +static void adc_a_r0(void) { M_ADDC(R0); } +static void adc_a_r1(void) { M_ADDC(R1); } +static void adc_a_r2(void) { M_ADDC(R2); } +static void adc_a_r3(void) { M_ADDC(R3); } +static void adc_a_r4(void) { M_ADDC(R4); } +static void adc_a_r5(void) { M_ADDC(R5); } +static void adc_a_r6(void) { M_ADDC(R6); } +static void adc_a_r7(void) { M_ADDC(R7); } +static void adc_a_xr0(void) { M_ADDC(intRAM[R0 & INT_RAM_MASK]); } +static void adc_a_xr1(void) { M_ADDC(intRAM[R1 & INT_RAM_MASK]); } +static void anl_a_n(void) { R.A &= M_RDMEM_OPCODE(); } +static void anl_a_r0(void) { R.A &= R0; } +static void anl_a_r1(void) { R.A &= R1; } +static void anl_a_r2(void) { R.A &= R2; } +static void anl_a_r3(void) { R.A &= R3; } +static void anl_a_r4(void) { R.A &= R4; } +static void anl_a_r5(void) { R.A &= R5; } +static void anl_a_r6(void) { R.A &= R6; } +static void anl_a_r7(void) { R.A &= R7; } +static void anl_a_xr0(void) { R.A &= intRAM[R0 & INT_RAM_MASK]; } +static void anl_a_xr1(void) { R.A &= intRAM[R1 & INT_RAM_MASK]; } +static void anl_bus_n(void) { bus_w( bus_r() & M_RDMEM_OPCODE() ); } +static void anl_p1_n(void) { R.P1 &= M_RDMEM_OPCODE(); port_w( 1, R.P1 ); } +static void anl_p2_n(void) { R.P2 &= M_RDMEM_OPCODE(); port_w( 2, R.P2 ); } +static void anld_p4_a(void) { port_w( 4, port_r(4) & M_RDMEM_OPCODE() ); } +static void anld_p5_a(void) { port_w( 5, port_r(5) & M_RDMEM_OPCODE() ); } +static void anld_p6_a(void) { port_w( 6, port_r(6) & M_RDMEM_OPCODE() ); } +static void anld_p7_a(void) { port_w( 7, port_r(7) & M_RDMEM_OPCODE() ); } +static void call(void) { UINT8 i=M_RDMEM_OPCODE(); M_CALL(i | R.A11); } +static void call_1(void) { UINT8 i=M_RDMEM_OPCODE(); M_CALL(i | 0x100 | R.A11); } +static void call_2(void) { UINT8 i=M_RDMEM_OPCODE(); M_CALL(i | 0x200 | R.A11); } +static void call_3(void) { UINT8 i=M_RDMEM_OPCODE(); M_CALL(i | 0x300 | R.A11); } +static void call_4(void) { UINT8 i=M_RDMEM_OPCODE(); M_CALL(i | 0x400 | R.A11); } +static void call_5(void) { UINT8 i=M_RDMEM_OPCODE(); M_CALL(i | 0x500 | R.A11); } +static void call_6(void) { UINT8 i=M_RDMEM_OPCODE(); M_CALL(i | 0x600 | R.A11); } +static void call_7(void) { UINT8 i=M_RDMEM_OPCODE(); M_CALL(i | 0x700 | R.A11); } +static void clr_a(void) { R.A=0; } +static void clr_c(void) { CLR(C_FLAG); } +static void clr_f0(void) { CLR(F_FLAG); } +static void clr_f1(void) { R.f1 = 0; } +static void cpl_a(void) { R.A ^= 0xff; } +static void cpl_c(void) { R.PSW ^= C_FLAG; } +static void cpl_f0(void) { R.PSW ^= F_FLAG; } +static void cpl_f1(void) { R.f1 ^= 1; } +static void dec_a(void) { R.A--; } +static void dec_r0(void) { R0--; } +static void dec_r1(void) { R1--; } +static void dec_r2(void) { R2--; } +static void dec_r3(void) { R3--; } +static void dec_r4(void) { R4--; } +static void dec_r5(void) { R5--; } +static void dec_r6(void) { R6--; } +static void dec_r7(void) { R7--; } +static void dis_i(void) { R.xirq_en = 0; } +static void dis_tcnti(void) { R.tirq_en = 0; R.pending_irq &= ~I8039_TIMCNT_INT; } +static void djnz_r0(void) { UINT8 i=M_RDMEM_OPCODE(); R0--; if (R0 != 0) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void djnz_r1(void) { UINT8 i=M_RDMEM_OPCODE(); R1--; if (R1 != 0) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void djnz_r2(void) { UINT8 i=M_RDMEM_OPCODE(); R2--; if (R2 != 0) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void djnz_r3(void) { UINT8 i=M_RDMEM_OPCODE(); R3--; if (R3 != 0) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void djnz_r4(void) { UINT8 i=M_RDMEM_OPCODE(); R4--; if (R4 != 0) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void djnz_r5(void) { UINT8 i=M_RDMEM_OPCODE(); R5--; if (R5 != 0) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void djnz_r6(void) { UINT8 i=M_RDMEM_OPCODE(); R6--; if (R6 != 0) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void djnz_r7(void) { UINT8 i=M_RDMEM_OPCODE(); R7--; if (R7 != 0) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void en_i(void) { R.xirq_en = 1; if (R.irq_state == I8039_EXTERNAL_INT) { R.irq_extra_cycles += Ext_IRQ(); } } +static void en_tcnti(void) { R.tirq_en = 1; } +static void ento_clk(void) { M_UNDEFINED(); } +static void in_a_p1(void) { R.A = port_r(1) & R.P1; } +static void in_a_p2(void) { R.A = port_r(2) & R.P2; } +static void ins_a_bus(void) { R.A = bus_r(); } +static void inc_a(void) { R.A++; } +static void inc_r0(void) { R0++; } +static void inc_r1(void) { R1++; } +static void inc_r2(void) { R2++; } +static void inc_r3(void) { R3++; } +static void inc_r4(void) { R4++; } +static void inc_r5(void) { R5++; } +static void inc_r6(void) { R6++; } +static void inc_r7(void) { R7++; } +static void inc_xr0(void) { intRAM[R0 & INT_RAM_MASK]++; } +static void inc_xr1(void) { intRAM[R1 & INT_RAM_MASK]++; } + +/* static void jmp(void) { UINT8 i=M_RDOP(R.PC.w.l); R.PC.w.l = i | R.A11; } + */ + +static void jmp(void) +{ + UINT8 i=M_RDOP(R.PC.w.l); + UINT16 oldpc,newpc; + + oldpc = R.PC.w.l-1; + R.PC.w.l = i | R.A11; + newpc = R.PC.w.l; + if (newpc == oldpc) { if (i8039_ICount > 0) i8039_ICount = 0; } /* speed up busy loop */ + else if (newpc == oldpc-1 && M_RDOP(newpc) == 0x00) /* NOP - Gyruss */ + { if (i8039_ICount > 0) i8039_ICount = 0; } +} + +static void jmp_1(void) { UINT8 i=M_RDOP(R.PC.w.l); R.PC.w.l = i | 0x100 | R.A11; } +static void jmp_2(void) { UINT8 i=M_RDOP(R.PC.w.l); R.PC.w.l = i | 0x200 | R.A11; } +static void jmp_3(void) { UINT8 i=M_RDOP(R.PC.w.l); R.PC.w.l = i | 0x300 | R.A11; } +static void jmp_4(void) { UINT8 i=M_RDOP(R.PC.w.l); R.PC.w.l = i | 0x400 | R.A11; } +static void jmp_5(void) { UINT8 i=M_RDOP(R.PC.w.l); R.PC.w.l = i | 0x500 | R.A11; } +static void jmp_6(void) { UINT8 i=M_RDOP(R.PC.w.l); R.PC.w.l = i | 0x600 | R.A11; } +static void jmp_7(void) { UINT8 i=M_RDOP(R.PC.w.l); R.PC.w.l = i | 0x700 | R.A11; } +static void jmpp_xa(void) { UINT16 addr = (R.PC.w.l & 0xf00) | R.A; R.PC.w.l = (R.PC.w.l & 0xf00) | M_RDMEM(addr); } +static void jb_0(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.A & 0x01) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jb_1(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.A & 0x02) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jb_2(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.A & 0x04) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jb_3(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.A & 0x08) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jb_4(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.A & 0x10) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jb_5(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.A & 0x20) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jb_6(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.A & 0x40) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jb_7(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.A & 0x80) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jf0(void) { UINT8 i=M_RDMEM_OPCODE(); if (M_F0y) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jf1(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.f1) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jnc(void) { UINT8 i=M_RDMEM_OPCODE(); if (M_Cn) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jc(void) { UINT8 i=M_RDMEM_OPCODE(); if (M_Cy) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jni(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.irq_state == I8039_EXTERNAL_INT) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jnt_0(void) { UINT8 i=M_RDMEM_OPCODE(); if (!test_r(0)) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jt_0(void) { UINT8 i=M_RDMEM_OPCODE(); if (test_r(0)) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jnt_1(void) { UINT8 i=M_RDMEM_OPCODE(); if (!test_r(1)) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jt_1(void) { UINT8 i=M_RDMEM_OPCODE(); if (test_r(1)) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jnz(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.A != 0) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jz(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.A == 0) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; } else ADJUST_CYCLES } +static void jtf(void) { UINT8 i=M_RDMEM_OPCODE(); if (R.t_flag) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; R.t_flag = 0; } else ADJUST_CYCLES } + +static void mov_a_n(void) { R.A = M_RDMEM_OPCODE(); } +static void mov_a_r0(void) { R.A = R0; } +static void mov_a_r1(void) { R.A = R1; } +static void mov_a_r2(void) { R.A = R2; } +static void mov_a_r3(void) { R.A = R3; } +static void mov_a_r4(void) { R.A = R4; } +static void mov_a_r5(void) { R.A = R5; } +static void mov_a_r6(void) { R.A = R6; } +static void mov_a_r7(void) { R.A = R7; } +static void mov_a_psw(void) { R.A = R.PSW | 0x08; } +static void mov_a_xr0(void) { R.A = intRAM[R0 & INT_RAM_MASK]; } +static void mov_a_xr1(void) { R.A = intRAM[R1 & INT_RAM_MASK]; } +static void mov_r0_a(void) { R0 = R.A; } +static void mov_r1_a(void) { R1 = R.A; } +static void mov_r2_a(void) { R2 = R.A; } +static void mov_r3_a(void) { R3 = R.A; } +static void mov_r4_a(void) { R4 = R.A; } +static void mov_r5_a(void) { R5 = R.A; } +static void mov_r6_a(void) { R6 = R.A; } +static void mov_r7_a(void) { R7 = R.A; } +static void mov_psw_a(void) { R.PSW = R.A | 0x08; regPTR = ((M_By) ? 24 : 0); R.SP = (R.PSW & 7) << 1; } +static void mov_r0_n(void) { R0 = M_RDMEM_OPCODE(); } +static void mov_r1_n(void) { R1 = M_RDMEM_OPCODE(); } +static void mov_r2_n(void) { R2 = M_RDMEM_OPCODE(); } +static void mov_r3_n(void) { R3 = M_RDMEM_OPCODE(); } +static void mov_r4_n(void) { R4 = M_RDMEM_OPCODE(); } +static void mov_r5_n(void) { R5 = M_RDMEM_OPCODE(); } +static void mov_r6_n(void) { R6 = M_RDMEM_OPCODE(); } +static void mov_r7_n(void) { R7 = M_RDMEM_OPCODE(); } +static void mov_a_t(void) { R.A = R.timer; } +static void mov_t_a(void) { R.timer = R.A; } +static void mov_xr0_a(void) { intRAM[R0 & INT_RAM_MASK] = R.A; } +static void mov_xr1_a(void) { intRAM[R1 & INT_RAM_MASK] = R.A; } +static void mov_xr0_n(void) { intRAM[R0 & INT_RAM_MASK] = M_RDMEM_OPCODE(); } +static void mov_xr1_n(void) { intRAM[R1 & INT_RAM_MASK] = M_RDMEM_OPCODE(); } +static void movd_a_p4(void) { R.A = port_r(4); } +static void movd_a_p5(void) { R.A = port_r(5); } +static void movd_a_p6(void) { R.A = port_r(6); } +static void movd_a_p7(void) { R.A = port_r(7); } +static void movd_p4_a(void) { port_w(4, R.A); } +static void movd_p5_a(void) { port_w(5, R.A); } +static void movd_p6_a(void) { port_w(6, R.A); } +static void movd_p7_a(void) { port_w(7, R.A); } +static void movp_a_xa(void) { R.A = M_RDMEM((R.PC.w.l & 0x0f00) | R.A); } +static void movp3_a_xa(void) { R.A = M_RDMEM(0x300 | R.A); } +static void movx_a_xr0(void) { R.A = M_IN(R0); } +static void movx_a_xr1(void) { R.A = M_IN(R1); } +static void movx_xr0_a(void) { M_OUT(R0, R.A); } +static void movx_xr1_a(void) { M_OUT(R1, R.A); } +static void nop(void) { } +static void orl_a_n(void) { R.A |= M_RDMEM_OPCODE(); } +static void orl_a_r0(void) { R.A |= R0; } +static void orl_a_r1(void) { R.A |= R1; } +static void orl_a_r2(void) { R.A |= R2; } +static void orl_a_r3(void) { R.A |= R3; } +static void orl_a_r4(void) { R.A |= R4; } +static void orl_a_r5(void) { R.A |= R5; } +static void orl_a_r6(void) { R.A |= R6; } +static void orl_a_r7(void) { R.A |= R7; } +static void orl_a_xr0(void) { R.A |= intRAM[R0 & INT_RAM_MASK]; } +static void orl_a_xr1(void) { R.A |= intRAM[R1 & INT_RAM_MASK]; } +static void orl_bus_n(void) { bus_w( bus_r() | M_RDMEM_OPCODE() ); } +static void orl_p1_n(void) { R.P1 |= M_RDMEM_OPCODE(); port_w(1, R.P1); } +static void orl_p2_n(void) { R.P2 |= M_RDMEM_OPCODE(); port_w(2, R.P2); } +static void orld_p4_a(void) { port_w(4, port_r(4) | R.A ); } +static void orld_p5_a(void) { port_w(5, port_r(5) | R.A ); } +static void orld_p6_a(void) { port_w(6, port_r(6) | R.A ); } +static void orld_p7_a(void) { port_w(7, port_r(7) | R.A ); } +static void outl_bus_a(void) { bus_w(R.A); } +static void outl_p1_a(void) { port_w(1, R.A); R.P1 = R.A; } +static void outl_p2_a(void) { port_w(2, R.A); R.P2 = R.A; } +static void ret(void) { R.PC.w.l = ((pull() & 0x0f) << 8); R.PC.w.l |= pull(); } + +static void retr(void) +{ + UINT8 i=pull(); + R.PC.w.l = ((i & 0x0f) << 8) | pull(); + R.PSW = (R.PSW & 0x0f) | (i & 0xf0); /* Stack is already changed by pull */ + regPTR = ((M_By) ? 24 : 0); + + R.irq_executing = I8039_NO_INT; + + R.A11 = R.A11ff; + + /* Take an interrupt if a request is still being made */ + if (R.irq_state == I8039_EXTERNAL_INT) { + R.irq_extra_cycles += Ext_IRQ(); /* Service External IRQ */ + } + else if (R.pending_irq == I8039_TIMCNT_INT) { + R.irq_extra_cycles += Timer_IRQ(); /* Service pending Timer/Counter IRQ */ + } +} +static void rl_a(void) { UINT8 i=R.A & 0x80; R.A <<= 1; if (i) R.A |= 0x01; else R.A &= 0xfe; } +/* NS990113 */ +static void rlc_a(void) { UINT8 i=M_Cy; if (R.A & 0x80) SET(C_FLAG); else CLR(C_FLAG); R.A <<= 1; if (i) R.A |= 0x01; else R.A &= 0xfe; } +static void rr_a(void) { UINT8 i=R.A & 1; R.A >>= 1; if (i) R.A |= 0x80; else R.A &= 0x7f; } +/* NS990113 */ +static void rrc_a(void) { UINT8 i=M_Cy; if (R.A & 1) SET(C_FLAG); else CLR(C_FLAG); R.A >>= 1; if (i) R.A |= 0x80; else R.A &= 0x7f; } +static void sel_mb0(void) { R.A11 = 0; R.A11ff = 0; } +static void sel_mb1(void) { R.A11ff = 0x800; R.A11 = 0x800; } +static void sel_rb0(void) { CLR(B_FLAG); regPTR = 0; } +static void sel_rb1(void) { SET(B_FLAG); regPTR = 24; } +static void stop_tcnt(void) { R.timerON = R.countON = 0; } +static void strt_cnt(void) { R.countON = 1; R.timerON = 0; Old_T1 = test_r(1); } /* NS990113 */ +static void strt_t(void) { R.timerON = 1; R.countON = 0; R.masterClock = 0; } /* NS990113 */ +static void swap_a(void) { UINT8 i=R.A >> 4; R.A <<= 4; R.A |= i; } +static void xch_a_r0(void) { UINT8 i=R.A; R.A=R0; R0=i; } +static void xch_a_r1(void) { UINT8 i=R.A; R.A=R1; R1=i; } +static void xch_a_r2(void) { UINT8 i=R.A; R.A=R2; R2=i; } +static void xch_a_r3(void) { UINT8 i=R.A; R.A=R3; R3=i; } +static void xch_a_r4(void) { UINT8 i=R.A; R.A=R4; R4=i; } +static void xch_a_r5(void) { UINT8 i=R.A; R.A=R5; R5=i; } +static void xch_a_r6(void) { UINT8 i=R.A; R.A=R6; R6=i; } +static void xch_a_r7(void) { UINT8 i=R.A; R.A=R7; R7=i; } +static void xch_a_xr0(void) { UINT8 i=R.A; R.A=intRAM[R0 & INT_RAM_MASK]; intRAM[R0 & INT_RAM_MASK]=i; } +static void xch_a_xr1(void) { UINT8 i=R.A; R.A=intRAM[R1 & INT_RAM_MASK]; intRAM[R1 & INT_RAM_MASK]=i; } +static void xchd_a_xr0(void) { M_XCHD(R0 & INT_RAM_MASK); } +static void xchd_a_xr1(void) { M_XCHD(R1 & INT_RAM_MASK); } +static void xrl_a_n(void) { R.A ^= M_RDMEM_OPCODE(); } +static void xrl_a_r0(void) { R.A ^= R0; } +static void xrl_a_r1(void) { R.A ^= R1; } +static void xrl_a_r2(void) { R.A ^= R2; } +static void xrl_a_r3(void) { R.A ^= R3; } +static void xrl_a_r4(void) { R.A ^= R4; } +static void xrl_a_r5(void) { R.A ^= R5; } +static void xrl_a_r6(void) { R.A ^= R6; } +static void xrl_a_r7(void) { R.A ^= R7; } +static void xrl_a_xr0(void) { R.A ^= intRAM[R0 & INT_RAM_MASK]; } +static void xrl_a_xr1(void) { R.A ^= intRAM[R1 & INT_RAM_MASK]; } + +static s_opcode opcode_main[256]= +{ + {1, nop },{0, illegal },{2, outl_bus_a },{2, add_a_n },{2, jmp },{1, en_i },{0, illegal },{1, dec_a }, + {2, ins_a_bus },{2, in_a_p1 },{2, in_a_p2 },{0, illegal },{2, movd_a_p4 },{2, movd_a_p5 },{2, movd_a_p6 },{2, movd_a_p7 }, + {1, inc_xr0 },{1, inc_xr1 },{2, jb_0 },{2, adc_a_n },{2, call },{1, dis_i },{2, jtf },{1, inc_a }, + {1, inc_r0 },{1, inc_r1 },{1, inc_r2 },{1, inc_r3 },{1, inc_r4 },{1, inc_r5 },{1, inc_r6 },{1, inc_r7 }, + {1, xch_a_xr0 },{1, xch_a_xr1 },{0, illegal },{2, mov_a_n },{2, jmp_1 },{1, en_tcnti },{2, jnt_0 },{1, clr_a }, + {1, xch_a_r0 },{1, xch_a_r1 },{1, xch_a_r2 },{1, xch_a_r3 },{1, xch_a_r4 },{1, xch_a_r5 },{1, xch_a_r6 },{1, xch_a_r7 }, + {1, xchd_a_xr0 },{1, xchd_a_xr1 },{2, jb_1 },{0, illegal },{2, call_1 },{1, dis_tcnti },{2, jt_0 },{1, cpl_a }, + {0, illegal },{2, outl_p1_a },{2, outl_p2_a },{0, illegal },{2, movd_p4_a },{2, movd_p5_a },{2, movd_p6_a },{2, movd_p7_a }, + {1, orl_a_xr0 },{1, orl_a_xr1 },{1, mov_a_t },{2, orl_a_n },{2, jmp_2 },{1, strt_cnt },{2, jnt_1 },{1, swap_a }, + {1, orl_a_r0 },{1, orl_a_r1 },{1, orl_a_r2 },{1, orl_a_r3 },{1, orl_a_r4 },{1, orl_a_r5 },{1, orl_a_r6 },{1, orl_a_r7 }, + {1, anl_a_xr0 },{1, anl_a_xr1 },{2, jb_2 },{2, anl_a_n },{2, call_2 },{1, strt_t },{2, jt_1 },{1, daa_a }, + {1, anl_a_r0 },{1, anl_a_r1 },{1, anl_a_r2 },{1, anl_a_r3 },{1, anl_a_r4 },{1, anl_a_r5 },{1, anl_a_r6 },{1, anl_a_r7 }, + {1, add_a_xr0 },{1, add_a_xr1 },{1, mov_t_a },{0, illegal },{2, jmp_3 },{1, stop_tcnt },{0, illegal },{1, rrc_a }, + {1, add_a_r0 },{1, add_a_r1 },{1, add_a_r2 },{1, add_a_r3 },{1, add_a_r4 },{1, add_a_r5 },{1, add_a_r6 },{1, add_a_r7 }, + {1, adc_a_xr0 },{1, adc_a_xr1 },{2, jb_3 },{0, illegal },{2, call_3 },{1, ento_clk },{2, jf1 },{1, rr_a }, + {1, adc_a_r0 },{1, adc_a_r1 },{1, adc_a_r2 },{1, adc_a_r3 },{1, adc_a_r4 },{1, adc_a_r5 },{1, adc_a_r6 },{1, adc_a_r7 }, + {2, movx_a_xr0 },{2, movx_a_xr1 },{0, illegal },{2, ret },{2, jmp_4 },{1, clr_f0 },{2, jni },{0, illegal }, + {2, orl_bus_n },{2, orl_p1_n },{2, orl_p2_n },{0, illegal },{2, orld_p4_a },{2, orld_p5_a },{2, orld_p6_a },{2, orld_p7_a }, + {2, movx_xr0_a },{2, movx_xr1_a },{2, jb_4 },{2, retr },{2, call_4 },{1, cpl_f0 },{2, jnz },{1, clr_c }, + {2, anl_bus_n },{2, anl_p1_n },{2, anl_p2_n },{0, illegal },{2, anld_p4_a },{2, anld_p5_a },{2, anld_p6_a },{2, anld_p7_a }, + {1, mov_xr0_a },{1, mov_xr1_a },{0, illegal },{2, movp_a_xa },{2, jmp_5 },{1, clr_f1 },{0, illegal },{1, cpl_c }, + {1, mov_r0_a },{1, mov_r1_a },{1, mov_r2_a },{1, mov_r3_a },{1, mov_r4_a },{1, mov_r5_a },{1, mov_r6_a },{1, mov_r7_a }, + {2, mov_xr0_n },{2, mov_xr1_n },{2, jb_5 },{2, jmpp_xa },{2, call_5 },{1, cpl_f1 },{2, jf0 },{0, illegal }, + {2, mov_r0_n },{2, mov_r1_n },{2, mov_r2_n },{2, mov_r3_n },{2, mov_r4_n },{2, mov_r5_n },{2, mov_r6_n },{2, mov_r7_n }, + {0, illegal },{0, illegal },{0, illegal },{0, illegal },{2, jmp_6 },{1, sel_rb0 },{2, jz },{1, mov_a_psw }, + {1, dec_r0 },{1, dec_r1 },{1, dec_r2 },{1, dec_r3 },{1, dec_r4 },{1, dec_r5 },{1, dec_r6 },{1, dec_r7 }, + {1, xrl_a_xr0 },{1, xrl_a_xr1 },{2, jb_6 },{2, xrl_a_n },{2, call_6 },{1, sel_rb1 },{0, illegal },{1, mov_psw_a }, + {1, xrl_a_r0 },{1, xrl_a_r1 },{1, xrl_a_r2 },{1, xrl_a_r3 },{1, xrl_a_r4 },{1, xrl_a_r5 },{1, xrl_a_r6 },{1, xrl_a_r7 }, + {0, illegal },{0, illegal },{0, illegal },{2, movp3_a_xa },{2, jmp_7 },{1, sel_mb0 },{2, jnc },{1, rl_a }, + {2, djnz_r0 },{2, djnz_r1 },{2, djnz_r2 },{2, djnz_r3 },{2, djnz_r4 },{2, djnz_r5 },{2, djnz_r6 },{2, djnz_r7 }, + {1, mov_a_xr0 },{1, mov_a_xr1 },{2, jb_7 },{0, illegal },{2, call_7 },{1, sel_mb1 },{2, jc },{1, rlc_a }, + {1, mov_a_r0 },{1, mov_a_r1 },{1, mov_a_r2 },{1, mov_a_r3 },{1, mov_a_r4 },{1, mov_a_r5 },{1, mov_a_r6 },{1, mov_a_r7 } +}; + + +/**************************************************************************** + * Reset registers to their initial values + ****************************************************************************/ +void i8039_reset (void *param) +{ + R.PC.w.l = 0; + R.SP = 0; + R.A = 0; + R.PSW = 0x08; /* Start with Carry SET, Bit 4 is always SET */ + memset(R.RAM, 0x0, 128); + R.P1 = 0xff; + R.P2 = 0xff; + R.bus = 0; + R.irq_executing = I8039_NO_INT; + R.pending_irq = I8039_NO_INT; + + R.A11ff = R.A11 = 0; + R.tirq_en = R.xirq_en = 0; + R.timerON = R.countON = 0; + R.timerON = 1; /* Mario Bros. doesn't work without this */ + R.irq_extra_cycles = 0; + R.masterClock = 0; + + /* print dump header */ + printf(" Addr | Instruction | PC Accu SP PSW BUS F1 P1 P2 A11 RAM\n"); + printf(" ------+--------------------+---------------------------------------\n"); +} + + +/**************************************************************************** + * Shut down CPU emulation + ****************************************************************************/ +static void i8039_exit (void) +{ + /* nothing to do ? */ +} + +/**************************************************************************** + * Issue an interrupt if necessary + ****************************************************************************/ +static int Ext_IRQ(void) +{ + int extra_cycles = 0; + + if (R.xirq_en) { + if (R.irq_executing == I8039_NO_INT) { +/* logerror("I8039: EXT INTERRUPT being serviced\n"); */ + R.irq_executing = I8039_EXTERNAL_INT; + push(R.PC.b.l); + push((R.PC.b.h & 0x0f) | (R.PSW & 0xf0)); + R.PC.w.l = 0x03; + R.A11ff = R.A11; + R.A11 = 0; + + extra_cycles = 2; /* 2 clock cycles used */ + + if (R.timerON) /* NS990113 */ + R.masterClock += extra_cycles; + if (R.irq_callback) (*R.irq_callback)(0); + } + } + + return extra_cycles; +} + +static int Timer_IRQ(void) +{ + int extra_cycles = 0; + + if (R.tirq_en) { + if (R.irq_executing == I8039_NO_INT) { +/* logerror("I8039: TIMER/COUNTER INTERRUPT\n"); */ + R.irq_executing = I8039_TIMCNT_INT; + R.pending_irq &= ~I8039_TIMCNT_INT; + push(R.PC.b.l); + push((R.PC.b.h & 0x0f) | (R.PSW & 0xf0)); + R.PC.w.l = 0x07; + R.A11ff = R.A11; + R.A11 = 0; + + extra_cycles = 2; /* 2 clock cycles used */ + + if (R.timerON) /* NS990113 */ + R.masterClock += extra_cycles; + } + else { + if (R.irq_executing == I8039_EXTERNAL_INT) { + R.pending_irq |= I8039_TIMCNT_INT; + } + } + } + + R.t_flag = 1; + + return extra_cycles; +} + + +static void dump_machine_state(void) +{ + int i; + + printf(" | %04X %02X %02X %02X", (UINT32)R.PC.w.l, (UINT32)R.A, (UINT32)(R.SP >> 1), (UINT32)R.PSW); + printf(" %02X %X %02X %02X", (UINT32)R.bus, (UINT32)R.f1, (UINT32)R.P1, (UINT32)R.P2); + printf(" %X ", (UINT32)(R.A11ff >> 11)); + + for (i = 0; i < 256; i++) + printf(" %02X", R.RAM[i]); + + printf("\n"); +} + + +enum {ACCU_IDLE, ACCU_HAS_AA, ACCU_HAS_55, ACCU_PASS, ACCU_FAIL}; + +/**************************************************************************** + * Execute cycles CPU cycles. Return number of cycles really executed + ****************************************************************************/ +int i8039_execute(int cycles, int dump) +{ + unsigned opcode, T1; + int count, i; + char buffer[64]; + char string[32]; + + static int accu = 0; + static int accu_state = ACCU_IDLE; + + i8039_ICount = (cycles - R.irq_extra_cycles); + R.irq_extra_cycles = 0; + + if ((accu_state == ACCU_PASS) || (accu_state == ACCU_FAIL)) { + printf("End of simulation detected\n"); + + return(accu_state == ACCU_PASS ? 0 : -1); + } + + do + { + R.PREVPC = R.PC; + + + opcode=M_RDOP(R.PC.w.l); + + buffer[0] = '\0'; + Dasm8039(buffer, R.PC.w.l); + sprintf(string, " %04X : %s", R.PC.w.l, buffer); + for (i = strlen(string); i < 26; i++) + string[i] = ' '; + string[i <= 31 ? i : 31] = '\0'; + printf("%s", string); + +/* logerror("I8039: PC = %04x, opcode = %02x\n", R.PC.w.l, opcode); */ + + R.PC.w.l++; + inst_cycles = opcode_main[opcode].cycles; + (*(opcode_main[opcode].function))(); + i8039_ICount -= inst_cycles; /*/ */ + + if (dump == 1) { + /* dump machine state information */ + dump_machine_state(); + } else + printf("\n"); + + /* end-of-simulation check */ + if (accu != R.A) { + accu = R.A; + + switch (accu_state) { + case ACCU_IDLE: + accu_state = accu == 0xaa ? ACCU_HAS_AA : ACCU_IDLE; + break; + + case ACCU_HAS_AA: + accu_state = accu == 0x55 ? ACCU_HAS_55 : ACCU_IDLE; + break; + + case ACCU_HAS_55: + switch (accu) { + case 0x01: + accu_state = ACCU_PASS; + break; + case 0x00: + accu_state = ACCU_FAIL; + break; + default: + accu_state = ACCU_IDLE; + break; + } + break; + + case ACCU_PASS: + case ACCU_FAIL: + break; + + default: + accu_state = ACCU_IDLE; + break; + } + } + + + + + if (R.countON) /* NS990113 */ + { + for ( ; inst_cycles > 0; inst_cycles-- ) + { + T1 = test_r(1); + if (NEGATIVE_EDGE_T1) + { + R.timer++; + if (R.timer == 0) { + count = Timer_IRQ(); /* Handle Counter IRQ */ + i8039_ICount -= count; + } + } + Old_T1 = T1; + } + } + + if (R.timerON) { + R.masterClock += opcode_main[opcode].cycles; + if (R.masterClock >= 32) { /* NS990113 */ + R.masterClock -= 32; + R.timer++; + if (R.timer == 0) { + count = Timer_IRQ(); /* Handle Timer IRQ */ + i8039_ICount -= count; + } + } + } + } while (i8039_ICount > 0 && accu_state != ACCU_PASS && accu_state != ACCU_FAIL); + + i8039_ICount -= R.irq_extra_cycles; + R.irq_extra_cycles = 0; + + return cycles - i8039_ICount; +} + +/**************************************************************************** + * Get all registers in given buffer + ****************************************************************************/ +static void i8039_get_context (void *dst) +{ + if( dst ) + *(I8039_Regs*)dst = R; +} + + +/**************************************************************************** + * Set all registers to given values + ****************************************************************************/ +static void i8039_set_context (void *src) +{ + if( src ) + { + R = *(I8039_Regs*)src; + regPTR = ((M_By) ? 24 : 0); + R.SP = (R.PSW << 1) & 0x0f; + } + /* Handle forced Interrupts throught the Debugger */ + if (R.irq_state != I8039_NO_INT) { + R.irq_extra_cycles += Ext_IRQ(); /* Handle External IRQ */ + } + if (R.timer == 0) { + R.irq_extra_cycles += Timer_IRQ(); /* Handle Timer IRQ */ + } +} + + +/**************************************************************************** + * Set IRQ line state + ****************************************************************************/ +void set_irq_line(int irqline, int state) +{ + if (state != CLEAR_LINE) { + R.irq_state = I8039_EXTERNAL_INT; + R.irq_extra_cycles += Ext_IRQ(); /* Handle External IRQ */ + } + else { + R.irq_state = I8039_NO_INT; + } +} Index: i8039emu/main.c =================================================================== --- i8039emu/main.c (nonexistent) +++ i8039emu/main.c (revision 292) @@ -0,0 +1,128 @@ +/* + * $Id: main.c,v 1.3 2004-07-03 14:37:12 arniml Exp $ + * + * Copyright (c) 2004, Arnim Laeuger (arniml@opencores.org) + * + * All rights reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. See also the file COPYING which + * came with this application. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include +#include + +#include "types.h" +#include "memory.h" +#include "i8039.h" + + +void logerror(char *msg, UINT16 address, UINT8 opcode) +{ +} + + +void print_usage(void) { + printf("Usage:\n"); + printf(" i8039 -f [-x ] [-d] [-h]\n"); + printf(" -f : Name of hex file for internal ROM\n"); + printf(" -x : Name of hex file for external ROM (optional)\n"); + printf(" -d : Dump machine state\n"); + printf(" -h : Print this help\n"); +} + + +int main(int argc, char *argv[]) +{ + int do_cycles, real_cycles, total_cycles; + char *hex_file = ""; + char *ext_hex_file = ""; + int c; + int dump = 0; + + /* process options */ + while ((c = getopt(argc, argv, "df:hx:")) != -1) { + switch (c) { + case 'd': + dump = 1; + break; + + case 'f': + hex_file = optarg; + break; + + case 'x': + ext_hex_file = optarg; + break; + + case 'h': + /* fallthrough */ + + default: + print_usage(); + return(0); + break; + } + } + + /* check options */ + if (strlen(hex_file) == 0) { + print_usage(); + return(1); + } + + /* read hex file for internal ROM */ + printf("Reading %s\n", hex_file); + if (!read_hex_file(hex_file, 0)) { + printf("Error reading file!\n"); + return(1); + } + + /* read hex fiel for external ROM */ + if (strlen(ext_hex_file) > 0) { + printf("Reading %s\n", ext_hex_file); + if (!read_hex_file(ext_hex_file, 0x800)) { + printf("Error reading file!\n"); + return(1); + } + } + + printf("Resetting 8039\n"); + i8039_reset(NULL); + + do_cycles = 52; + + total_cycles = 0; + + do { + real_cycles = i8039_execute(do_cycles, dump); + + /* activate interrupt */ + set_irq_line(0, HOLD_LINE); + /* hold interrupt for 3 machine cycles */ + real_cycles += i8039_execute(3, dump); + set_irq_line(0, CLEAR_LINE); + + if (real_cycles > 0) + total_cycles += real_cycles; + } while (real_cycles > 0); + + printf("Emulated %i cycles\n", total_cycles); + printf("Simulation Result: %s\n", real_cycles == 0 ? "PASS" : "FAIL"); + + return(0); +} Index: i8039emu/memory.c =================================================================== --- i8039emu/memory.c (nonexistent) +++ i8039emu/memory.c (revision 292) @@ -0,0 +1,149 @@ +/* + * $Id: memory.c,v 1.3 2004-07-03 14:35:52 arniml Exp $ + * + * Copyright (c) 2004, Arnim Laeuger (arniml@opencores.org) + * + * All rights reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. See also the file COPYING which + * came with this application. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include + +#include "memory.h" +#include "i8039.h" + + +static UINT8 code_mem[4096]; + + +static UINT8 port1 = 0xff, port2 = 0xff; + + +UINT8 program_read_byte_8(UINT16 address) +{ + return(code_mem[address]); +} + +UINT8 cpu_readop(UINT16 address) +{ + return(code_mem[address]); +} + +UINT8 cpu_readop_arg(UINT16 address) +{ + return(code_mem[address]); +} + + +UINT8 io_read_byte_8(UINT8 address) +{ + UINT8 data; + + switch (0x100 | address) { + case I8039_p1: + data = port1; + break; + + case I8039_p2: + data = port2; + break; + + case I8039_t0: + /* connect T0 to P1[0] */ + data = port1 & 0x01; + break; + + case I8039_t1: + /* connect T1 to P1[1] */ + data = (port1 & 0x02) >> 1; + break; + + default: + data = 0; + break; + } + + + return(data); +} + + +void io_write_byte_8(UINT8 address, UINT8 data) +{ + switch (0x100 | address) { + case I8039_p1: + port1 = data; + break; + + case I8039_p2: + port2 = data; + break; + + default: + break; + } +} + + +int read_hex_file(char *filename, UINT16 file_offset) +{ + FILE *hex_file; + UINT16 record_len, offset, record_type; + UINT16 byte; + char line[540]; + char *payload, *idx; + int result = 0; + + record_len = offset = record_type = 0; + hex_file = fopen(filename, "r"); + if (hex_file != NULL) { + + while (fgets(line, 539, hex_file)) { + if (sscanf(line, ":%2hx%4hx%2hx", &record_len, &offset, &record_type) == 3) { + /* strip off newline */ + idx = (char *)strchr(line, '\n'); + if (idx != NULL) + *idx = '\0'; + /* extract payload */ + payload = &(line[9]); + /* strip of checksum */ + if (strlen(payload) > 2) + payload[strlen(payload) - 2] = '\0'; + + /* read payload to array */ + if (record_type == 0) { + while (strlen(payload) >= 2) { + if (sscanf(payload, "%2hx", &byte) == 1) + code_mem[file_offset + offset++] = byte; + + payload++; + payload++; + } + } + + } + } + + result = 1; + + fclose(hex_file); + } + + return(result); +} Index: i8039emu/memory.h =================================================================== --- i8039emu/memory.h (nonexistent) +++ i8039emu/memory.h (revision 292) @@ -0,0 +1,26 @@ +/* + * $Id: memory.h,v 1.2 2004-07-03 14:35:52 arniml Exp $ + * + */ + +#ifndef _MEMORY_H_ +#define _MEMORY_H_ + +#include "types.h" + +typedef UINT32 offs_t; + + +UINT8 program_read_byte_8(UINT16); + +UINT8 cpu_readop(UINT16); + +UINT8 cpu_readop_arg(UINT16); + +UINT8 io_read_byte_8(UINT8); + +void io_write_byte_8(UINT8, UINT8); + +int read_hex_file(char *, UINT16); + +#endif Index: i8039emu/i8039.h =================================================================== --- i8039emu/i8039.h (nonexistent) +++ i8039emu/i8039.h (revision 292) @@ -0,0 +1,107 @@ +/************************************************************************** + * Intel 8039 Portable Emulator * + * * + * Copyright (C) 1997 by Mirko Buffoni * + * Based on the original work (C) 1997 by Dan Boris, an 8048 emulator * + * You are not allowed to distribute this software commercially * + * Please, notify me, if you make any changes to this file * + * * + * Adapted for the T48 uController project, 2004 by Arnim Laeuger * + * See http://www.opencores.org/projects.cgi/web/t48/overview * + * * + * $Id: i8039.h,v 1.2 2004-04-15 22:03:53 arniml Exp $ + **************************************************************************/ + +#ifndef _I8039_H +#define _I8039_H + +#ifndef INLINE +#define INLINE static inline +#endif + +#include "types.h" + + +/************************************************************************** + Internal Clock divisor + + External Clock is divided internally by 3 to produce the machine state + generator. This is then divided by 5 for the instruction cycle times. + (Each instruction cycle passes through 5 machine states). +*/ + +#define I8039_CLOCK_DIVIDER (3*5) + + + +enum { I8039_PC=1, I8039_SP, I8039_PSW, I8039_A, I8039_TC, + I8039_P1, I8039_P2, I8039_R0, I8039_R1, I8039_R2, + I8039_R3, I8039_R4, I8039_R5, I8039_R6, I8039_R7 +}; + +/* This handling of special I/O ports should be better for actual MAME + * architecture. (i.e., define access to ports { I8039_p1, I8039_p1, dkong_out_w }) + */ + +#define I8039_p0 0x100 /* Not used */ +#define I8039_p1 0x101 +#define I8039_p2 0x102 +#define I8039_p4 0x104 +#define I8039_p5 0x105 +#define I8039_p6 0x106 +#define I8039_p7 0x107 +#define I8039_t0 0x110 +#define I8039_t1 0x111 +#define I8039_bus 0x120 + + +#include "memory.h" + +/* + * Input a UINT8 from given I/O port + */ +#define I8039_In(Port) ((UINT8)io_read_byte_8((UINT8)Port)) + + +/* + * Output a UINT8 to given I/O port + */ +#define I8039_Out(Port,Value) (io_write_byte_8((UINT8)Port,(UINT8)Value)) + + +/* + * Read a UINT8 from given memory location + */ +#define I8039_RDMEM(A) ((unsigned)program_read_byte_8(A)) + + +/* + * Write a UINT8 to given memory location + */ +#define I8039_WRMEM(A,V) (program_write_byte_8(A,V)) + + +/* + * I8039_RDOP() is identical to I8039_RDMEM() except it is used for reading + * opcodes. In case of system with memory mapped I/O, this function can be + * used to greatly speed up emulation + */ +#define I8039_RDOP(A) ((unsigned)cpu_readop(A)) + + +/* + * I8039_RDOP_ARG() is identical to I8039_RDOP() except it is used for reading + * opcode arguments. This difference can be used to support systems that + * use different encoding mechanisms for opcodes and opcode arguments + */ +#define I8039_RDOP_ARG(A) ((unsigned)cpu_readop_arg(A)) + +int Dasm8039(char *dst, unsigned pc); + +void i8039_reset(void *); +int i8039_execute(int, int); +void set_irq_line(int, int); + +void logerror(char *, UINT16, UINT8); + +#endif /* _I8039_H */ Index: i8039emu/8039dasm.c =================================================================== --- i8039emu/8039dasm.c (nonexistent) +++ i8039emu/8039dasm.c (revision 292) @@ -0,0 +1,289 @@ +/**************************************************************************** + * + * mcs48 disassembler + * + * This file is Copyright 1996 Michael Cuddy, Fen's Ende Sofware. + * Redistribution is allowed in source and binary form as long as both + * forms are distributed together with the file 'README'. This copyright + * notice must also accompany the files. + * + * This software should be considered a small token to all of the + * emulator authors for thier dilligence in preserving our Arcade and + * Computer history. + * + * Michael Cuddy, Fen's Ende Software. + * 11/25/1996 + * + * Adapted by Andrea Mazzoleni for use with MAME + * + ***************************************************************************/ + +#include +#include +#include +#include + +#include "memory.h" + +typedef unsigned char byte; + +#define FMT(a,b) a, b +#define PTRS_PER_FORMAT 2 + +const char *Formats[] = { + FMT("00000011dddddddd", "add a, #%X"), + FMT("01101rrr", "add a, %R"), + FMT("0110000r", "add a, @%R"), + FMT("00010011dddddddd", "adc a, #%X"), + FMT("01111rrr", "adc a, %R"), + FMT("0111000r", "adc a, @%R"), + FMT("01010011dddddddd", "anl a, #%X"), + FMT("01011rrr", "anl a, %R"), + FMT("0101000r", "anl a, @%R"), + FMT("10011000dddddddd", "anl bus, #%X"), + FMT("10011001dddddddd", "anl p1, #%X"), + FMT("10011010dddddddd", "anl p2, #%X"), + FMT("100111pp", "anld %P, a"), + FMT("aaa10100aaaaaaaa", "call %A"), + FMT("00100111", "clr a"), + FMT("10010111", "clr c"), + FMT("10100101", "clr f1"), + FMT("10000101", "clr f0"), + FMT("00110111", "cpl a"), + FMT("10100111", "cpl c"), + FMT("10010101", "cpl f0"), + FMT("10110101", "cpl f1"), + FMT("01010111", "da a"), + FMT("00000111", "dec a"), + FMT("11001rrr", "dec %R"), + FMT("00010101", "dis i"), + FMT("00110101", "dis tcnti"), + FMT("11101rrraaaaaaaa", "djnz %R, %J"), + FMT("00000101", "en i"), + FMT("00100101", "en tcnti"), + FMT("01110101", "ent0 clk"), + FMT("00001001", "in a, p1"), + FMT("00001010", "in a, p2"), + FMT("00010111", "inc a"), + FMT("00011rrr", "inc %R"), + FMT("0001000r", "inc @%R"), + FMT("00001000", "ins a,bus"), + FMT("0001 0110aaaaaaaa", "jtf %J"), + FMT("0010 0110aaaaaaaa", "jnt0 %J"), + FMT("0011 0110aaaaaaaa", "jt0 %J"), + FMT("0100 0110aaaaaaaa", "jnt1 %J"), + FMT("0101 0110aaaaaaaa", "jt1 %J"), + FMT("0111 0110aaaaaaaa", "jf1 %J"), + FMT("1000 0110aaaaaaaa", "jni %J"), + FMT("1001 0110aaaaaaaa", "jnz %J"), + FMT("1011 0110aaaaaaaa", "jf0 %J"), + FMT("1100 0110aaaaaaaa", "jz %J"), + FMT("1110 0110aaaaaaaa", "jnc %J"), + FMT("1111 0110aaaaaaaa", "jc %J"), + FMT("bbb10010aaaaaaaa", "jb%B %J"), + FMT("aaa00100aaaaaaaa", "jmp %A"), + FMT("10110011", "jmpp @a"), + FMT("00100011dddddddd", "mov a, #%X"), + FMT("11111rrr", "mov a, %R"), + FMT("1111000r", "mov a, @%R"), + FMT("11000111", "mov a, psw"), + FMT("10111rrrdddddddd", "mov %R, #%X"), + FMT("10101rrr", "mov %R, a"), + FMT("1010000r", "mov @%R, a"), + FMT("1011000rdddddddd", "mov @%R, #%X"), + FMT("11010111", "mov psw, a"), + FMT("000011pp", "movd a, %P"), + FMT("001111pp", "movd %P, a"), + FMT("01000010", "mov a, t"), + FMT("01100010", "mov t, a"), + FMT("11100011", "movp3 a, @a"), + FMT("10100011", "movp a, @a"), + FMT("1000000r", "movx a, @%R"), + FMT("1001000r", "movx @%R, a"), + FMT("0100 1rrr", "orl a, %R"), + FMT("0100 000r", "orl a, @%R"), + FMT("0100 0011dddddddd", "orl a, #%X"), + FMT("1000 1000dddddddd", "orl bus, #%X"), + FMT("1000 1001dddddddd", "orl p1, #%X"), + FMT("1000 1010dddddddd", "orl p2, #%X"), + FMT("1000 11pp", "orld %P, a"), + FMT("00000010", "outl bus, a"), + FMT("001110pp", "outl %P, a"), + FMT("10000011", "ret"), + FMT("10010011", "retr"), + FMT("11100111", "rl a"), + FMT("11110111", "rlc a"), + FMT("01110111", "rr a"), + FMT("01100111", "rrc a"), + FMT("11100101", "sel mb0"), + FMT("11110101", "sel mb1"), + FMT("11000101", "sel rb0"), + FMT("11010101", "sel rb1"), + FMT("01100101", "stop tcnt"), + FMT("01000101", "strt cnt"), + FMT("01010101", "strt t"), + FMT("01000111", "swap a"), + FMT("00101rrr", "xch a, %R"), + FMT("0010000r", "xch a, @%R"), + FMT("0011000r", "xchd a, @%R"), + FMT("1101 0011dddddddd", "xrl a, #%X"), + FMT("1101 1rrr", "xrl a, %R"), + FMT("1101 000r", "xrl a, @%R"), + FMT("00000000", "nop"), + NULL +}; + +#define MAX_OPS (((sizeof(Formats) / sizeof(Formats[0])) - 1) / PTRS_PER_FORMAT) + +typedef struct opcode { + byte mask; /* instruction mask */ + byte bits; /* constant bits */ + char extcode; /* value that gets extension code */ + const char *parse; /* how to parse bits */ + const char *fmt; /* instruction format */ +} M48Opcode; + +static M48Opcode Op[MAX_OPS+1]; +static int OpInizialized = 0; + +static void InitDasm8039(void) +{ + const char *p, **ops; + byte mask, bits; + int bit; + int i; + + ops = Formats; i = 0; + while (*ops) { + p = *ops; + mask = 0; bits = 0; bit = 7; + while (*p && bit >= 0) { + switch (*p++) { + case '1': mask |= 1<= 0) + { + /* printf("{%c/%d}",*cp,bit); */ + switch(*cp) + { + case 'a': a <<=1; a |= ((code & (1<) { + if (/^(\S+):/) { + chomp($_); + @signals = split(/ +/); + + # remove time information + shift(@signals); + last; + } +} + +# build index +for ($i = 0; $i < scalar(@signals); $i++) { + # strip off hierarchical path + $signals[$i] =~ s/.*\.//; + $index{$signals[$i]} = $i; +} + +$istrobe = 0; +# read vectors +while () { + if (/^\d+> /) { + chop($_); + @vector = split(/ +/); + + # remove time information + shift(@vector); + + # process write operation to RAM + if ($vector[$index{'we_tmp'}] eq '1') { + $ram[hex(hex8($vector[$index{'address_tmp[7:0]'}]))] = hex8($vector[$index{'data_tmp[7:0]'}]); + } + + # find falling instruction strobe + if ($istrobe == 0) { + $istrobe = $vector[0]; + next; + } else { + $istrobe = $vector[0]; + if ($vector[0] == 0) { + # falling edge detected + } else { + next; + } + } + + # process each signal + for ($i = 1; $i < scalar(@vector); $i++) { + $_ = $signals[$i]; + $line = ''; + + SWITCH: { + if (/^program_counter/) { print(hex16($vector[$i]).' '); last; } + if (/^accumulator/) { print(hex8($vector[$i]).' '); last; } + if (/^sp/) { print(hex8($vector[$i]).' '); last; } + if (/^psw/) { print(hex8($vector[$i]).' '); last; } + if (/^bus/) { print(hex8($vector[$i]).' '); last; } + if (/^f1/) { print($vector[$i].' '); last; } + if (/^p1/) { print(hex8($vector[$i]).' '); last; } + if (/^p2/) { print(hex8($vector[$i]).' '); last; } + if (/^mb/) { print($vector[$i].' '); last; } + if (/^we_tmp/) { dump_ram(\@ram); last; } + } + } + print("\n"); + } +}
vec2dump.pl Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vcd2vec.pl =================================================================== --- vcd2vec.pl (nonexistent) +++ vcd2vec.pl (revision 292) @@ -0,0 +1,234 @@ +#!/usr/bin/perl -w +# +# ############################################################################ +# +# vcd2vec.pl +# +# $Id: vcd2vec.pl,v 1.1 2004-04-09 19:16:00 arniml Exp $ +# +# Copyright (c) 2004, Arnim Laeuger (arniml@opencores.org) +# +# All rights reserved +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. See also the file COPYING which +# came with this application. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# ############################################################################ +# +# Purpose: +# ======== +# +# Converts a VCD-file to a vector file. +# +# Reads VCD from STDIN and writes the resulting vector stream to STDOUT. +# vcd2vec.pl -s [-i] [-h] +# -s : Name of the file containing the signals for vector output +# -i : Read initial state from VCD (given with $dumpvars) +# -h : Print this help +# + + +use strict; + +use Getopt::Std; + + +my $time_unit = 'ns'; + +sub print_usage { + print < [-i] [-h] + -s : Name of the file containing the signals for vector output + -i : Read initial state from VCD (given with \$dumpvars) + -h : Print this help +EOU +} + +sub print_index { + my $index = shift; + my ($tok, $desc); + + while (($tok, $desc) = each %{$index}) { + print("Token $tok:\n"); + print(" $desc->{'name'}\n"); + print(" $desc->{'pos'}\n"); + } +} + +sub dump_state { + my ($state, $time, $dump_signals) = @_; + my $signal; + + print("${time}>"); + foreach $signal (@{$dump_signals}) { + if (exists($state->{$signal})) { + print(" ".$state->{$signal}); + } else { + print(STDERR "Error: Signal '$signal' not included in VCD!\n"); + } + } + print("\n"); +} + +sub read_scope { + my $scope = shift; + my $index = shift; + my $pos = shift; + my ($token, $base, $extension); + my $ipt; + + print("Processing scope '$scope'\n"); + + while () { + last if (/^\$upscope/); + + last if (/^\$enddefinitions/); + + if (/^\$var +\S+ +\S+ +(\S+) +(\S+) +(([^\$]\S*)|\$end)/) { + $token = $1; + $base = $2; + + $extension = defined($4) ? $4 : ''; + $extension =~ s/[\[\]]//g; + + $index->{$token} = {}; + $ipt = $index->{$token}; + $ipt->{'name'} = "$scope.$base$extension"; + $ipt->{'pos'} = $$pos++; + + print("Appended ".$ipt->{'name'}."\n"); + } + + if (/^\$scope +\S+ +(\S+)/) { + read_scope("$scope.$1", $index, $pos); + } + + if (/^\$timescale/) { + $_ = ; + if (/^\s*1(\S+)/) { + $time_unit = $1; + } + } + } +} + +my %options; +my %index; +my %state; +my ($i, $time, $pos); +my $index; +my $token; +my ($ipt, $val); +my ($tok, $desc); +my $signal; +my $initial_states = 0; +local *SIGNALS_FILE; + +my @dump_signals; + +# process command line options +if (!getopts('s:ih', \%options)) { + print_usage(); + exit(1); +} + +if (exists($options{'h'})) { + print_usage(); + exit(0); +} + +if (exists($options{'i'})) { + $initial_states = 1; +} + +if (exists($options{'s'})) { +} else { + print(STDERR "File with signal names is required!\n"); + print_usage(); + exit(1); +} + + +############################################################################## +# Read signals file +# +if (!open(SIGNALS_FILE, "<$options{'s'}")) { + print(STDERR "Cannot read signals file '$options{'s'}'!\n"); + exit(1); +} + +@dump_signals = ; +close(SIGNALS_FILE); +chomp(@dump_signals); + + +# parse header +$index = {}; +$pos = 0; +read_scope("", $index, \$pos); + + +if ($initial_states) { + # read initial state + while () { last if (/^\$dumpvars/) } + while () { + last if (/^\$end/); + if (/^(.)(\S+)/) { + $val = $1; + $token = $2; + $state{$index->{$token}->{'name'}} = $val; + } + } +} + +$time = '0'; + +print("time:"); +foreach $signal (@dump_signals) { + print(" $signal"); +} +print("\n"); + +# now read all state changes +while () { + if (/^#(\d+)/) { + if ($1 != 0) { + # dump previous state + dump_state(\%state, $time, \@dump_signals); + } + $time = $1; + next; + } else { + if (/^(\S)(\S+)$/) { + $val = $1; + $token = $2; + $state{$index->{$token}->{'name'}} = $val; + } + + if (/^(\S+) (\S+)$/) { + $val = $1; + $token = $2; + $state{$index->{$token}->{'name'}} = $val; + } + } + +} + +# final dump +dump_state(\%state, $time, \@dump_signals); + +0;
vcd2vec.pl Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: init_project.template.sh =================================================================== --- init_project.template.sh (nonexistent) +++ init_project.template.sh (revision 292) @@ -0,0 +1,17 @@ +############################################################################## +# +# Template script to set up all project-specific environemt variables. +# +# Copy this script to init_project.sh and fill in your local information. +# +# This script has to be sourced from the command line! +# Do not run it as a 'usual' program, as this does not set the variables +# in the current shell process. +# +############################################################################## + +export PROJECT_DIR=/t48 +export VERIF_DIR=$PROJECT_DIR/sw/verif +export SIM_DIR=$PROJECT_DIR/sim/rtl_sim + +export PATH=$PATH:$PROJECT_DIR/sw

powered by: WebSVN 2.1.0

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