#
# 68k_test_2
#
# second test file for the 68k core testing program
#
# tests conditional branches and call/return/RTE group
#

# $Id: 68k_test_2,v 1.6 2000/03/04 22:44:52 nyef Exp $

#
# NOTE: Someone plays fast and loose with flags...
#

# test BRA (basic branch)
start bra, take 1
set mem 0x002000 = 0x6000
set mem 0x002002 = 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002002
check cycles 0
done

# test BRA (basic branch)
start bra, take 2
set mem 0x002000 = 0x6002
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set pc 0x002000
set cycles 10
run
check pc 0x002004
check cycles 0
done

# test BRA (basic branch)
start bra, take 3
set mem 0x002000 = 0x60fe
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set pc 0x002000
set cycles 10
run
check pc 0x002000
check cycles 0
done

# test BRA (basic branch)
start bra, take 4
set mem 0x002000 = 0x6000
set mem 0x002002 = 0x0042
set pc 0x002000
set cycles 10
run
check pc 0x002044
check cycles 0
done

# test BRA (basic branch)
start bra, take 5
set mem 0x002000 = 0x6000
set mem 0x002002 = 0xfefe
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BNE taken
start bne taken, take 1
set mem 0x002000 = 0x6600
set mem 0x002002 = 0x0000
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002002
check cycles 0
done

# test BNE taken
start bne taken, take 2
set mem 0x002000 = 0x6602
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002004
check cycles 0
done

# test BNE taken
start bne taken, take 3
set mem 0x002000 = 0x66fe
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002000
check cycles 0
done

# test BNE taken
start bne taken, take 4
set mem 0x002000 = 0x6600
set mem 0x002002 = 0x0042
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002044
check cycles 0
done

# test BNE taken
start bne taken, take 5
set mem 0x002000 = 0x6600
set mem 0x002002 = 0xfefe
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BNE not taken
start bne not taken, take 1
set mem 0x002000 = 0x6604
set flags 0x0004
set pc 0x002000
set cycles 8
run
check pc 0x002002
check cycles 0
done

# test BNE not taken
start bne not taken, take 2
set mem 0x002000 = 0x6600
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0004
set pc 0x002000
set cycles 12
run
check pc 0x002004
check cycles 0
done

# test BMI taken
start bmi taken, take 1
set mem 0x002000 = 0x6b00
set mem 0x002002 = 0x0000
set flags 0x0008
set pc 0x002000
set cycles 10
run
check pc 0x002002
check cycles 0
done

# test BMI taken
start bmi taken, take 2
set mem 0x002000 = 0x6b02
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0008
set pc 0x002000
set cycles 10
run
check pc 0x002004
check cycles 0
done

# test BMI taken
start bmi taken, take 3
set mem 0x002000 = 0x6bfe
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0008
set pc 0x002000
set cycles 10
run
check pc 0x002000
check cycles 0
done

# test BMI taken
start bmi taken, take 4
set mem 0x002000 = 0x6b00
set mem 0x002002 = 0x0042
set flags 0x0008
set pc 0x002000
set cycles 10
run
check pc 0x002044
check cycles 0
done

# test BMI taken
start bmi taken, take 5
set mem 0x002000 = 0x6b00
set mem 0x002002 = 0xfefe
set flags 0x0008
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BMI not taken
start bmi not taken, take 1
set mem 0x002000 = 0x6b04
set flags 0x0000
set pc 0x002000
set cycles 8
run
check pc 0x002002
check cycles 0
done

# test BMI not taken
start bmi not taken, take 2
set mem 0x002000 = 0x6b00
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0000
set pc 0x002000
set cycles 12
run
check pc 0x002004
check cycles 0
done

# test BEQ taken
start beq taken, take 1
set mem 0x002000 = 0x6700
set mem 0x002002 = 0x0000
set flags 0x0004
set pc 0x002000
set cycles 10
run
check pc 0x002002
check cycles 0
done

# test BEQ taken
start beq taken, take 2
set mem 0x002000 = 0x6702
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0004
set pc 0x002000
set cycles 10
run
check pc 0x002004
check cycles 0
done

# test BEQ taken
start beq taken, take 3
set mem 0x002000 = 0x67fe
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0004
set pc 0x002000
set cycles 10
run
check pc 0x002000
check cycles 0
done

# test BEQ taken
start beq taken, take 4
set mem 0x002000 = 0x6700
set mem 0x002002 = 0x0042
set flags 0x0004
set pc 0x002000
set cycles 10
run
check pc 0x002044
check cycles 0
done

# test BEQ taken
start beq taken, take 5
set mem 0x002000 = 0x6700
set mem 0x002002 = 0xfefe
set flags 0x0004
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BEQ not taken
start beq not taken, take 1
set mem 0x002000 = 0x6704
set flags 0x0000
set pc 0x002000
set cycles 8
run
check pc 0x002002
check cycles 0
done

# test BEQ not taken
start beq not taken, take 2
set mem 0x002000 = 0x6700
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0000
set pc 0x002000
set cycles 12
run
check pc 0x002004
check cycles 0
done

# test BPL taken
start bpl taken, take 1
set mem 0x002000 = 0x6a00
set mem 0x002002 = 0x0000
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002002
check cycles 0
done

# test BPL taken
start bpl taken, take 2
set mem 0x002000 = 0x6a02
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002004
check cycles 0
done

# test BPL taken
start bpl taken, take 3
set mem 0x002000 = 0x6afe
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002000
check cycles 0
done

# test BPL taken
start bpl taken, take 4
set mem 0x002000 = 0x6a00
set mem 0x002002 = 0x0042
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002044
check cycles 0
done

# test BPL taken
start bpl taken, take 5
set mem 0x002000 = 0x6a00
set mem 0x002002 = 0xfefe
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BPL not taken
start bpl not taken, take 1
set mem 0x002000 = 0x6a04
set flags 0x0008
set pc 0x002000
set cycles 8
run
check pc 0x002002
check cycles 0
done

# test BPL not taken
start bpl not taken, take 2
set mem 0x002000 = 0x6a00
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0008
set pc 0x002000
set cycles 12
run
check pc 0x002004
check cycles 0
done

# test BCS taken
start bcs taken, take 1
set mem 0x002000 = 0x6500
set mem 0x002002 = 0x0000
set flags 0x0001
set pc 0x002000
set cycles 10
run
check pc 0x002002
check cycles 0
done

# test BCS taken
start bcs taken, take 2
set mem 0x002000 = 0x6502
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0001
set pc 0x002000
set cycles 10
run
check pc 0x002004
check cycles 0
done

# test BCS taken
start bcs taken, take 3
set mem 0x002000 = 0x65fe
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0001
set pc 0x002000
set cycles 10
run
check pc 0x002000
check cycles 0
done

# test BCS taken
start bcs taken, take 4
set mem 0x002000 = 0x6500
set mem 0x002002 = 0x0042
set flags 0x0001
set pc 0x002000
set cycles 10
run
check pc 0x002044
check cycles 0
done

# test BCS taken
start bcs taken, take 5
set mem 0x002000 = 0x6500
set mem 0x002002 = 0xfefe
set flags 0x0001
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BCS not taken
start bcs not taken, take 1
set mem 0x002000 = 0x6504
set flags 0x0000
set pc 0x002000
set cycles 8
run
check pc 0x002002
check cycles 0
done

# test BCS not taken
start bcs not taken, take 2
set mem 0x002000 = 0x6500
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0000
set pc 0x002000
set cycles 12
run
check pc 0x002004
check cycles 0
done

# test BCC taken
start bcc taken, take 1
set mem 0x002000 = 0x6400
set mem 0x002002 = 0x0000
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002002
check cycles 0
done

# test BCC taken
start bcc taken, take 2
set mem 0x002000 = 0x6402
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002004
check cycles 0
done

# test BCC taken
start bcc taken, take 3
set mem 0x002000 = 0x64fe
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002000
check cycles 0
done

# test BCC taken
start bcc taken, take 4
set mem 0x002000 = 0x6400
set mem 0x002002 = 0x0042
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x002044
check cycles 0
done

# test BCC taken
start bcc taken, take 5
set mem 0x002000 = 0x6400
set mem 0x002002 = 0xfefe
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BCC not taken
start bcc not taken, take 1
set mem 0x002000 = 0x6404
set flags 0x0001
set pc 0x002000
set cycles 8
run
check pc 0x002002
check cycles 0
done

# test BCC not taken
start bcc not taken, take 2
set mem 0x002000 = 0x6400
set mem 0x002002 = 0x0000 # Branch always reads next word, even when not needed
set flags 0x0001
set pc 0x002000
set cycles 12
run
check pc 0x002004
check cycles 0
done

# test BHI taken
start bhi taken, take 1
set mem 0x002000 = 0x6200
set mem 0x002002 = 0xfefe
set flags 0x0000
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BHI taken
start bhi taken, take 2
set mem 0x002000 = 0x6200
set mem 0x002002 = 0xfefe
set flags 0x001a
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BHI not taken
start bhi not taken, take 1
set mem 0x002000 = 0x6204
set flags 0x0001
set pc 0x002000
set cycles 8
run
check pc 0x002002
check cycles 0
done

# test BHI not taken
start bhi not taken, take 2
set mem 0x002000 = 0x6204
set flags 0x0004
set pc 0x002000
set cycles 8
run
check pc 0x002002
check cycles 0
done

# test BHI not taken
start bhi not taken, take 3
set mem 0x002000 = 0x6204
set flags 0x0005
set pc 0x002000
set cycles 8
run
check pc 0x002002
check cycles 0
done

# test BLS taken
start bls taken, take 1
set mem 0x002000 = 0x6300
set mem 0x002002 = 0xfefe
set flags 0x0001
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BLS taken
start bls taken, take 2
set mem 0x002000 = 0x6300
set mem 0x002002 = 0xfefe
set flags 0x0004
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BLS taken
start bls taken, take 3
set mem 0x002000 = 0x6300
set mem 0x002002 = 0xfefe
set flags 0x0005
set pc 0x002000
set cycles 10
run
check pc 0x001f00
check cycles 0
done

# test BLS not taken
start bls not taken, take 1
set mem 0x002000 = 0x6304
set flags 0x0000
set pc 0x002000
set cycles 8
run
check pc 0x002002
check cycles 0
done

# test BLS not taken
start bls not taken, take 1
set mem 0x002000 = 0x6304
set flags 0x001a
set pc 0x002000
set cycles 8
run
check pc 0x002002
check cycles 0
done

#
# BSR/JSR/JMP/RTS/RTE group
#

# test JMP (An)
start jmp (An), take 1
set mem 0x002000 = 0x4ed0
set reg a0 = 0x00004000
set pc 0x002000
set cycles 8
run
check pc 0x004000
check cycles 0
done

# test JSR (An)
start jsr (An), take 1
set mem 0x002000 = 0x4e90
set reg a0 = 0x00004000
set reg a7 = 0x00800000
set mem 0x7ffffe = 0x0000
set mem 0x7ffffc = 0x0000
set pc 0x002000
set cycles 16
run
check pc 0x004000
check reg a7 = 0x007ffffc
check mem 0x7ffffe = 0x2002
check mem 0x7ffffc = 0x0000
check cycles 0
done

# test RTS
start rts, take 1
set mem 0x002000 = 0x4e75
set reg a7 = 0x007ffffc
set mem 0x7ffffc = 0x0000
set mem 0x7ffffe = 0x4000
set pc 0x002000
set cycles 16
run
check pc 0x004000
check cycles 0 
done

# test RTE
# FIXME: test RTE behavior in user mode
start rte, take 1
set mem 0x002000 = 0x4e73
set reg a7 = 0x007ffffa
set mem 0x7ffffa = 0x201f
set mem 0x7ffffc = 0x0000
set mem 0x7ffffe = 0x4000
set flags 0x2000
set pc 0x002000
set cycles 20
run
check pc 0x004000
check flags 0x201f
check reg a7 = 0x00800000
check cycles 0
done

#
# $Log: 68k_test_2,v $
# Revision 1.6  2000/03/04 22:44:52  nyef
# added tests for BHI and BLS instructions
#
# Revision 1.5  1999/12/18 23:45:19  nyef
# added tests for BCS and BCC
#
# Revision 1.4  1999/12/18 22:53:28  nyef
# fixed cycle count for JSR (An)
#
# Revision 1.3  1999/12/18 15:50:31  nyef
# added tests for BEQ and BPL
#
# Revision 1.2  1999/12/17 02:48:07  nyef
# added tests for the BMI instruction
#
# Revision 1.1  1999/12/16 04:54:15  nyef
# Initial revision
#
#
