Update assembly tests
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
.export vec_reset, vec_irq, vec_nmi
|
.export vec_reset, vec_irq, vec_nmi
|
||||||
|
|
||||||
|
.ZEROPAGE
|
||||||
|
|
||||||
|
result: .res 1
|
||||||
|
|
||||||
.segment "CODE"
|
.segment "CODE"
|
||||||
|
|
||||||
vec_nmi:
|
vec_nmi:
|
||||||
@@ -8,4 +12,21 @@ vec_irq:
|
|||||||
|
|
||||||
|
|
||||||
jsr_test:
|
jsr_test:
|
||||||
bra jsr_test
|
lda #$ff
|
||||||
|
sta result
|
||||||
|
ldx #$ff
|
||||||
|
txs
|
||||||
|
jsr function_1
|
||||||
|
lda #$01
|
||||||
|
sta result
|
||||||
|
wai
|
||||||
|
|
||||||
|
function_2:
|
||||||
|
pha
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
function_1:
|
||||||
|
jsr function_2
|
||||||
|
rts
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,15 @@
|
|||||||
|
|
||||||
.ZEROPAGE
|
.ZEROPAGE
|
||||||
|
|
||||||
|
result: .res 1
|
||||||
|
|
||||||
zp0: .res 1
|
zp0: .res 1
|
||||||
zp1: .res 4
|
zp1: .res 4
|
||||||
zp2: .res 8
|
zp2: .res 8
|
||||||
zp3: .res 4
|
zp3: .res 4
|
||||||
|
|
||||||
|
good_count: .res 1
|
||||||
|
|
||||||
.CODE
|
.CODE
|
||||||
|
|
||||||
data1: .byte 1
|
data1: .byte 1
|
||||||
@@ -55,14 +59,63 @@ prepare_test:
|
|||||||
lda #.TOPBYTE(data5-2)
|
lda #.TOPBYTE(data5-2)
|
||||||
sta zp3+3
|
sta zp3+3
|
||||||
|
|
||||||
|
stz good_count
|
||||||
|
|
||||||
lda_test:
|
lda_test:
|
||||||
|
@test1:
|
||||||
lda zp0 ; data 1
|
lda zp0 ; data 1
|
||||||
|
cmp #$1
|
||||||
|
bne @test2
|
||||||
|
inc good_count
|
||||||
|
|
||||||
|
@test2:
|
||||||
lda (zp1) ; data 2
|
lda (zp1) ; data 2
|
||||||
|
cmp #$2
|
||||||
|
bne @test3
|
||||||
|
inc good_count
|
||||||
|
|
||||||
|
@test3:
|
||||||
lda data3 ; data 3
|
lda data3 ; data 3
|
||||||
|
cmp #$3
|
||||||
|
bne @test4
|
||||||
|
inc good_count
|
||||||
|
|
||||||
|
@test4:
|
||||||
ldx #$4
|
ldx #$4
|
||||||
ldy #$2
|
ldy #$2
|
||||||
lda (zp2,x) ; data 4
|
lda (zp2,x) ; data 4
|
||||||
|
cmp #$4
|
||||||
|
bne @test5
|
||||||
|
inc good_count
|
||||||
|
|
||||||
|
@test5:
|
||||||
lda (zp3),y ; data 5
|
lda (zp3),y ; data 5
|
||||||
|
cmp #$5
|
||||||
|
bne @test6
|
||||||
|
inc good_count
|
||||||
|
|
||||||
|
@test6:
|
||||||
lda data6,x ; data 6
|
lda data6,x ; data 6
|
||||||
|
cmp #$6
|
||||||
|
bne @test7
|
||||||
|
inc good_count
|
||||||
|
|
||||||
|
@test7:
|
||||||
lda data7,y ; data 7
|
lda data7,y ; data 7
|
||||||
|
cmp #$7
|
||||||
|
bne @done
|
||||||
|
inc good_count
|
||||||
|
|
||||||
|
@done:
|
||||||
|
lda good_count
|
||||||
|
cmp #$7
|
||||||
|
bne @fail
|
||||||
|
|
||||||
|
lda #$1
|
||||||
|
sta result
|
||||||
|
wai
|
||||||
|
|
||||||
|
@fail:
|
||||||
|
lda #$ff
|
||||||
|
sta result
|
||||||
wai
|
wai
|
||||||
@@ -2,7 +2,7 @@ import cocotb
|
|||||||
from cocotb.handle import Immediate
|
from cocotb.handle import Immediate
|
||||||
|
|
||||||
from cocotb.clock import Clock
|
from cocotb.clock import Clock
|
||||||
from cocotb.triggers import Timer, RisingEdge, FallingEdge
|
from cocotb.triggers import Timer, RisingEdge, FallingEdge, with_timeout
|
||||||
|
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
@@ -39,8 +39,7 @@ async def handle_memory(dut):
|
|||||||
if we:
|
if we:
|
||||||
memory[addr] = int(dut.DO.value)
|
memory[addr] = int(dut.DO.value)
|
||||||
|
|
||||||
@cocotb.test
|
async def do_asm_test(dut, filename):
|
||||||
async def test_lda(dut):
|
|
||||||
cocotb.start_soon(Clock(dut.clk, CLK_PERIOD, unit="ns").start())
|
cocotb.start_soon(Clock(dut.clk, CLK_PERIOD, unit="ns").start())
|
||||||
cocotb.start_soon(handle_memory(dut))
|
cocotb.start_soon(handle_memory(dut))
|
||||||
|
|
||||||
@@ -48,7 +47,7 @@ async def test_lda(dut):
|
|||||||
|
|
||||||
base_addr = 0xfffff000
|
base_addr = 0xfffff000
|
||||||
|
|
||||||
with open(f"{path}/asm_source/lda_test", "rb") as file:
|
with open(f"{path}/asm_source/{filename}", "rb") as file:
|
||||||
for i, val in enumerate(file.read()):
|
for i, val in enumerate(file.read()):
|
||||||
write_byte(base_addr+i, val)
|
write_byte(base_addr+i, val)
|
||||||
|
|
||||||
@@ -59,4 +58,14 @@ async def test_lda(dut):
|
|||||||
await RisingEdge(dut.clk)
|
await RisingEdge(dut.clk)
|
||||||
dut.reset.value = 0
|
dut.reset.value = 0
|
||||||
|
|
||||||
await FallingEdge(dut.RDY_O)
|
await with_timeout(FallingEdge(dut.RDY_O), 10, "us")
|
||||||
|
|
||||||
|
assert memory[0] == 1
|
||||||
|
|
||||||
|
@cocotb.test
|
||||||
|
async def test_lda(dut):
|
||||||
|
await do_asm_test(dut, "lda_test")
|
||||||
|
|
||||||
|
@cocotb.test
|
||||||
|
async def test_jsr(dut):
|
||||||
|
await do_asm_test(dut, "jsr_test")
|
||||||
Reference in New Issue
Block a user