Skip to content

Instantly share code, notes, and snippets.

@jdesiloniz
Last active July 31, 2019 10:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jdesiloniz/cd9a288cb34c8275041bba8fb182bf8d to your computer and use it in GitHub Desktop.
Save jdesiloniz/cd9a288cb34c8275041bba8fb182bf8d to your computer and use it in GitHub Desktop.
# SSP1601 tests for load operations
# Not totally exhaustive but covers most usual situations
org 400
test_init: eor a, a
test_gen_registers: ldi x, 5050
ld a, x
cmpi a, 5050
bra z=0, @test_failed
ldi y, 5050
ld a, y
cmpi a, 5050
bra z=0, @test_failed
ldi st, 0001
ld a, st
cmpi a, 0001
bra z=0, @test_failed
# Loads from and to registers:
ldi x, 1010
ld y, x
ld a, y
cmpi a, 1010
bra z=0, @test_failed
eor a, a
ld y, x
ld a, y
cmpi a, 1010
bra z=0, @test_failed
eor a, a
ldi x, FFF
ld st, x
ld a, st
cmpi a, FFF
bra z=0, @test_failed
eor a, a
test_stack: ldi stack, 0001
ldi stack, 0002
ldi stack, 0003
ldi stack, 0004
ldi stack, 0005
ldi stack, 0006
ldi stack, 0007 # this is a full stack condition, push is ignored
ld a, stack
cmpi a, 0006
bra z=0, @test_failed
ld a, stack
cmpi a, 0005
bra z=0, @test_failed
ld a, stack
cmpi a, 0004
bra z=0, @test_failed
ld a, stack
cmpi a, 0003
bra z=0, @test_failed
ld a, stack
cmpi a, 0002
bra z=0, @test_failed
ld a, stack
cmpi a, 0001
bra z=0, @test_failed
ld a, stack # this is an empty stack condition, pop is ignored
cmpi a, 0001
bra z=1, @test_failed
eor a, a
test_ext_registers: ldi ext0, 5050
ld a, ext0
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi ext1, 5050
ld a, ext0
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi ext2, 5050
ld a, ext0
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi ext3, 5050
ld a, ext0
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi ext4, 5050
ld a, ext0
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi ext5, 5050
ld a, ext0
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi ext6, 5050
ld a, ext0
cmpi a, 5050
bra z=0, @test_failed
eor a, a
# No messing with ext7, it's actually AL and we need it for comparisons to work!
test_ptr_regs: ldi r0, F0
ld a, r0
cmpi a, 00F0
bra z=0, @test_failed
eor a, a
ldi r1, F0
ld a, r1
cmpi a, 00F0
bra z=0, @test_failed
eor a, a
ldi r2, F0
ld a, r2
cmpi a, 00F0
bra z=0, @test_failed
eor a, a
ldi r3, F0
ld a, r3
cmpi a, 00F0
bra z=1, @test_failed # You shouldn't be able to modify the first stack pointer
eor a, a
ldi r4, F0
ld a, r4
cmpi a, 00F0
bra z=0, @test_failed
eor a, a
ldi r5, F0
ld a, r5
cmpi a, 00F0
bra z=0, @test_failed
eor a, a
ldi r6, F0
ld a, r6
cmpi a, 00F0
bra z=0, @test_failed
eor a, a
ldi r7, F0
ld a, r7
cmpi a, 00F0
bra z=1, @test_failed # You shouldn't be able to modify the second stack pointer
eor a, a
ldi x, 00F1
ld r0, x
ld a, r0
cmpi a, 00F1
bra z=0, @test_failed
eor a, a
ldi y, 00F2
ld r0, y
ld a, r0
cmpi a, 00F2
bra z=0, @test_failed
eor a, a
ldi a, 00F3
ld r0, a
ld a, r0
cmpi a, 00F3
bra z=0, @test_failed
eor a, a
test_mem_bank_loads: ldi r0, 10
ldi (r0), 5050
ld a, (r0)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi r1, 12
ldi (r1), 5050
ld a, (r1)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi r2, 14
ldi (r2), 5050
ld a, (r2)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi (r3), 5050
ld a, (r3)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi r4, 16
ldi (r4), 5050
ld a, (r4)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi r5, 18
ldi (r5), 5050
ld a, (r5)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi r6, 1A
ldi (r6), 5050
ld a, (r6)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi (r7), A0A0
ld a, (r7)
cmpi a, A0A0
bra z=0, @test_failed
eor a, a
ldi x, 5050
ld (r0), x
ld a, (r0)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi y, A0A0
ld (r1), y
ld a, (r1)
cmpi a, A0A0
bra z=0, @test_failed
eor a, a
ldi a, 5050
ld (r2), a
ld a, (r2)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi st, 5050
ld (r4), st
ld a, (r4)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
test_pram_reads: ldi r0, 10
ldi (r0), 0400 # let's read the first word of the code
ld a, ((r0))
cmpi a, E003
bra z=0, @test_failed
eor a, a
ldi r1, 12
ldi (r1), 0400
ld a, ((r1))
cmpi a, E003
bra z=0, @test_failed
eor a, a
ldi r2, 14
ldi (r2), 0400
ld a, ((r2))
cmpi a, E003
bra z=0, @test_failed
eor a, a
ldi (r3), 0400
ld a, ((r3))
cmpi a, E003
bra z=0, @test_failed
eor a, a
ldi r4, 16
ldi (r4), 0400
ld a, ((r4))
cmpi a, E003
bra z=0, @test_failed
eor a, a
ldi r5, 18
ldi (r5), 0400
ld a, ((r5))
cmpi a, E003
bra z=0, @test_failed
eor a, a
ldi r6, 1A
ldi (r6), 0400
ld a, ((r6))
cmpi a, E003
bra z=0, @test_failed
eor a, a
ldi (r7), 0400
ld a, ((r7))
cmpi a, E003
bra z=0, @test_failed
eor a, a
# Let's also see copies to other regs:
ldi (r4), 0400
ld x, ((r4))
ld a, x
cmpi a, E003
bra z=0, @test_failed
eor a, a
ldi (r4), 0400
ld y, ((r4))
ld a, y
cmpi a, E003
bra z=0, @test_failed
eor a, a
ldi (r4), 0400
ld st, ((r4))
ld a, st
cmpi a, E003
bra z=0, @test_failed
eor a, a
test_direct_addressing: ldi r0, 40
ldi a, 5050
ld 040, a
ld a, (r0)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
ldi r4, 40
ldi a, 5050
ld 140, a
ld a, (r0)
cmpi a, 5050
bra z=0, @test_failed
eor a, a
# Test finished:
bra always, @test_success
test_failed: bra always, @test_failed
test_success: bra always, @test_success
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment