From 9d7df2d50768df54503dc400e6c774ad82f02c8e Mon Sep 17 00:00:00 2001 From: Michael Neuling Date: Tue, 31 Mar 2020 17:32:38 +1100 Subject: [PATCH] Add test cases for new exceptions and supervisor state This adds test cases for: - sc, illegals and decrementer exceptions - decrementer overflow - rfid - mt/mf sprg0/1 srr0/1 - mtdec - mtmsrd - sc It also adds these test cases to make check/check_light Signed-off-by: Michael Neuling --- .gitignore | 5 +- Makefile | 8 +- scripts/run_test_console.sh | 38 +++++++ tests/Makefile.test | 28 +++++ tests/decrementer/Makefile | 3 + tests/decrementer/decrementer.c | 54 ++++++++++ tests/decrementer/head.S | 161 +++++++++++++++++++++++++++++ tests/decrementer/powerpc.lds | 13 +++ tests/illegal/Makefile | 3 + tests/illegal/head.S | 125 ++++++++++++++++++++++ tests/illegal/illegal.c | 37 +++++++ tests/illegal/powerpc.lds | 13 +++ tests/sc/Makefile | 3 + tests/sc/head.S | 111 ++++++++++++++++++++ tests/sc/powerpc.lds | 13 +++ tests/sc/sc.c | 37 +++++++ tests/test_decrementer.bin | Bin 0 -> 5220 bytes tests/test_decrementer.console_out | 3 + tests/test_illegal.bin | Bin 0 -> 5012 bytes tests/test_illegal.console_out | 1 + tests/test_sc.bin | Bin 0 -> 5012 bytes tests/test_sc.console_out | 1 + tests/update_console_tests | 14 +++ 23 files changed, 668 insertions(+), 3 deletions(-) create mode 100755 scripts/run_test_console.sh create mode 100644 tests/Makefile.test create mode 100644 tests/decrementer/Makefile create mode 100644 tests/decrementer/decrementer.c create mode 100644 tests/decrementer/head.S create mode 100644 tests/decrementer/powerpc.lds create mode 100644 tests/illegal/Makefile create mode 100644 tests/illegal/head.S create mode 100644 tests/illegal/illegal.c create mode 100644 tests/illegal/powerpc.lds create mode 100644 tests/sc/Makefile create mode 100644 tests/sc/head.S create mode 100644 tests/sc/powerpc.lds create mode 100644 tests/sc/sc.c create mode 100755 tests/test_decrementer.bin create mode 100644 tests/test_decrementer.console_out create mode 100755 tests/test_illegal.bin create mode 100644 tests/test_illegal.console_out create mode 100755 tests/test_sc.bin create mode 100644 tests/test_sc.console_out create mode 100755 tests/update_console_tests diff --git a/.gitignore b/.gitignore index 3c7c0b5..776be9b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,7 @@ *.cf *.s *_tb -main_ram.bin \ No newline at end of file +main_ram.bin +tests/*/*.bin +tests/*/*.hex +tests/*/*.elf diff --git a/Makefile b/Makefile index a1658d4..2f90f22 100644 --- a/Makefile +++ b/Makefile @@ -128,14 +128,18 @@ dmi_dtm_tb: dmi_dtm_tb.o sim_vhpi_c.o sim_bram_helpers_c.o $(GHDL) -e $(GHDLFLAGS) -Wl,sim_vhpi_c.o -Wl,sim_bram_helpers_c.o $@ tests = $(sort $(patsubst tests/%.out,%,$(wildcard tests/*.out))) +tests_console = $(sort $(patsubst tests/%.console_out,%,$(wildcard tests/*.console_out))) -check: $(tests) test_micropython test_micropython_long +check: $(tests) $(test_console) test_micropython test_micropython_long -check_light: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 test_micropython test_micropython_long +check_light: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 test_micropython test_micropython_long $(tests_console) $(tests): core_tb @./scripts/run_test.sh $@ +$(tests_console): core_tb + @./scripts/run_test_console.sh $@ + test_micropython: core_tb @./scripts/test_micropython.py diff --git a/scripts/run_test_console.sh b/scripts/run_test_console.sh new file mode 100755 index 0000000..1aaa2bb --- /dev/null +++ b/scripts/run_test_console.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# Runs a test and checks the console output against known good output + +if [ $# -ne 1 ]; then + echo "Usage: run_test.sh " + exit 1 +fi + +TEST=$1 + +TMPDIR=$(mktemp -d) + +function finish { + rm -rf "$TMPDIR" +} + +trap finish EXIT + +MICROWATT_DIR=$PWD + +cd $TMPDIR + +cp ${MICROWATT_DIR}/tests/${TEST}.bin main_ram.bin + +${MICROWATT_DIR}/core_tb > /dev/null 2> test1.out || true + +grep -v "Failed to bind debug socket" test1.out > test.out + +cp ${MICROWATT_DIR}/tests/${TEST}.console_out exp.out + +cp test.out /tmp +cp exp.out /tmp + +diff -q test.out exp.out && echo "$TEST PASS" && exit 0 + +echo "$TEST FAIL ********" +exit 1 diff --git a/tests/Makefile.test b/tests/Makefile.test new file mode 100644 index 0000000..a043810 --- /dev/null +++ b/tests/Makefile.test @@ -0,0 +1,28 @@ +ARCH = $(shell uname -m) +ifneq ("$(ARCH)", "ppc64") +ifneq ("$(ARCH)", "ppc64le") + CROSS_COMPILE = powerpc64le-linux- + endif + endif + +CC = $(CROSS_COMPILE)gcc +LD = $(CROSS_COMPILE)ld +OBJCOPY = $(CROSS_COMPILE)objcopy + +CFLAGS = -Os -g -Wall -std=c99 -msoft-float -mno-string -mno-multiple -mno-vsx -mno-altivec -mlittle-endian -fno-stack-protector -mstrict-align -ffreestanding -fdata-sections -ffunction-sections -I ../../hello_world +ASFLAGS = $(CFLAGS) +LDFLAGS = -T powerpc.lds + +all: $(TEST).hex + +$(TEST).elf: $(TEST).o head.o ../../hello_world/console.o + $(LD) $(LDFLAGS) -o $(TEST).elf $(TEST).o head.o ../../hello_world/console.o + +$(TEST).bin: $(TEST).elf + $(OBJCOPY) -O binary $(TEST).elf $(TEST).bin + +$(TEST).hex: $(TEST).bin + ../../scripts/bin2hex.py $(TEST).bin > $(TEST).hex + +clean: + @rm -f *.o $(TEST).elf $(TEST).bin $(TEST).hex diff --git a/tests/decrementer/Makefile b/tests/decrementer/Makefile new file mode 100644 index 0000000..2effce5 --- /dev/null +++ b/tests/decrementer/Makefile @@ -0,0 +1,3 @@ +TEST=decrementer + +include ../Makefile.test diff --git a/tests/decrementer/decrementer.c b/tests/decrementer/decrementer.c new file mode 100644 index 0000000..36ac922 --- /dev/null +++ b/tests/decrementer/decrementer.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +#include "console.h" + +#define TEST "Test " +#define PASS "PASS\r\n" +#define FAIL "FAIL\r\n" + +extern int dec_test_1(void); +extern int dec_test_2(void); +extern int dec_test_3(void); + +// i < 100 +void print_test_number(int i) +{ + putstr(TEST, strlen(TEST)); + putchar(48 + i/10); + putchar(48 + i%10); + putstr(":", 1); +} + +int main(void) +{ + int fail = 0; + + potato_uart_init(); + + print_test_number(1); + if (dec_test_1() != 0) { + fail = 1; + putstr(FAIL, strlen(FAIL)); + } else + putstr(PASS, strlen(PASS)); + + print_test_number(2); + if (dec_test_2() != 0) { + fail = 1; + putstr(FAIL, strlen(FAIL)); + } else + putstr(PASS, strlen(PASS)); + + + print_test_number(3); + if (dec_test_3() != 0) { + fail = 1; + putstr(FAIL, strlen(FAIL)); + } else + putstr(PASS, strlen(PASS)); + + return fail; +} diff --git a/tests/decrementer/head.S b/tests/decrementer/head.S new file mode 100644 index 0000000..11107ca --- /dev/null +++ b/tests/decrementer/head.S @@ -0,0 +1,161 @@ +/* Copyright 2013-2014 IBM Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define STACK_TOP 0x2000 + +/* Load an immediate 64-bit value into a register */ +#define LOAD_IMM64(r, e) \ + lis r,(e)@highest; \ + ori r,r,(e)@higher; \ + rldicr r,r, 32, 31; \ + oris r,r, (e)@h; \ + ori r,r, (e)@l; + + .section ".head","ax" + + /* + * Microwatt currently enters in LE mode at 0x0, so we don't need to + * do any endian fix ups + */ + . = 0 +.global _start +_start: + b boot_entry + +.global boot_entry +boot_entry: + /* setup stack */ + LOAD_IMM64(%r1, STACK_TOP - 0x100) + LOAD_IMM64(%r12, main) + mtctr %r12 + bctrl + attn // terminate on exit + b . + +/* test to see if end up at the instruction after the rfid */ +.global dec_test_1 +dec_test_1: + li %r3, 0 + mtdec %r3 + LOAD_IMM64(%r3, dec_test_1_rfid) + mtsrr0 %r3 + LOAD_IMM64(%r3, 0x9000000000008003) + mtsrr1 %r3 + li %r3, 1 // preload with a fail code + rfid +dec_test_1_rfid: + b 1f // should be skipped + b 1f // should be skipped + li %r3, 0 + blr +1: + li %r3, 1 + blr + + +/* test to see if end up at the instruction after the rfid */ +.global dec_test_2 +dec_test_2: + li %r3, 0x100 + mtdec %r3 + LOAD_IMM64(%r3, dec_test_2_rfid) + mtsrr0 %r3 + LOAD_IMM64(%r3, 0x9000000000008003) + mtsrr1 %r3 + li %r3, 1 // preload with a fail code + rfid +dec_test_2_rfid: + b . // should wait here and then be skipped + b 1f // should be skipped + li %r3, 0 + blr +1: + li %r3, 1 + blr + + +/* test mtmsrd */ +.global dec_test_3 +dec_test_3: + LOAD_IMM64(%r3, 0x9000000000000003) + mtmsrd %r3 // EE off + li %r3, 0x0 // shouldn't fire right away + mtdec %r3 + b 2f + nop + b 1f // shouln't get here +2: + LOAD_IMM64(%r3, 0x9000000000008003) + mtmsrd %r3 // EE on + b 1f // shouln't get here + b 1f // shouln't get here + + li %r3, 0 + blr +1: + li %r3, 1 + blr + +#define EXCEPTION(nr) \ + .= nr ;\ + b . + + /* More exception stubs */ + EXCEPTION(0x300) + EXCEPTION(0x380) + EXCEPTION(0x400) + EXCEPTION(0x480) + EXCEPTION(0x500) + EXCEPTION(0x600) + EXCEPTION(0x700) + EXCEPTION(0x800) + + . = 0x900 + mtsprg0 %r3 + LOAD_IMM64(%r3, 0x000000000ffffff) + mtdec %r3 + mfsrr0 %r3 + addi %r3, %r3, 8 // skip 2 instructions + mtsrr0 %r3 + mfsprg0 %r3 + rfid + + EXCEPTION(0x980) + EXCEPTION(0xa00) + EXCEPTION(0xb00) + EXCEPTION(0xc00) + EXCEPTION(0xd00) + EXCEPTION(0xe00) + EXCEPTION(0xe20) + EXCEPTION(0xe40) + EXCEPTION(0xe60) + EXCEPTION(0xe80) + EXCEPTION(0xf00) + EXCEPTION(0xf20) + EXCEPTION(0xf40) + EXCEPTION(0xf60) + EXCEPTION(0xf80) +#if 0 + EXCEPTION(0x1000) + EXCEPTION(0x1100) + EXCEPTION(0x1200) + EXCEPTION(0x1300) + EXCEPTION(0x1400) + EXCEPTION(0x1500) + EXCEPTION(0x1600) +#endif + + diff --git a/tests/decrementer/powerpc.lds b/tests/decrementer/powerpc.lds new file mode 100644 index 0000000..0b65470 --- /dev/null +++ b/tests/decrementer/powerpc.lds @@ -0,0 +1,13 @@ +SECTIONS +{ + _start = .; + . = 0; + .head : { + KEEP(*(.head)) + } + . = 0x1000; + .text : { *(.text) } + . = 0x2000; + .data : { *(.data) } + .bss : { *(.bss) } +} diff --git a/tests/illegal/Makefile b/tests/illegal/Makefile new file mode 100644 index 0000000..1c4f392 --- /dev/null +++ b/tests/illegal/Makefile @@ -0,0 +1,3 @@ +TEST=illegal + +include ../Makefile.test diff --git a/tests/illegal/head.S b/tests/illegal/head.S new file mode 100644 index 0000000..5446d68 --- /dev/null +++ b/tests/illegal/head.S @@ -0,0 +1,125 @@ +/* Copyright 2013-2014 IBM Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define STACK_TOP 0x2000 + +/* Load an immediate 64-bit value into a register */ +#define LOAD_IMM64(r, e) \ + lis r,(e)@highest; \ + ori r,r,(e)@higher; \ + rldicr r,r, 32, 31; \ + oris r,r, (e)@h; \ + ori r,r, (e)@l; + + .section ".head","ax" + + /* + * Microwatt currently enters in LE mode at 0x0, so we don't need to + * do any endian fix ups + */ + . = 0 +.global _start +_start: + b boot_entry + +.global boot_entry +boot_entry: + /* setup stack */ + LOAD_IMM64(%r1, STACK_TOP - 0x100) + LOAD_IMM64(%r12, main) + mtctr %r12 + bctrl + attn // terminate on exit + b . + +/* test illegal */ +.global ill_test_1 +ill_test_1: + li %r3, 1 // preload a failure + .long 0x0 // illegal will be skipped + 1 more + b 1f // skipped + + li %r3, 1 // preload a failure + .long 0x0 // illegal will be skipped + 1 more + b 1f // skipped + + li %r3, 0 + blr +1: + li %r3, 1 + blr + +#define EXCEPTION(nr) \ + .= nr ;\ + b . + + /* More exception stubs */ + EXCEPTION(0x300) + EXCEPTION(0x380) + EXCEPTION(0x400) + EXCEPTION(0x480) + EXCEPTION(0x500) + EXCEPTION(0x600) + + . = 0x700 + mtsprg0 %r3 + mtsprg1 %r4 + + // test for bit 44 being set for ILL + mfsrr1 %r3 + li %r4, 1 + sldi %r4, %r4, (63-44) + and. %r4, %r4, %r3 + li %r4, 8 // PASS so skip 2 instructions + bne 1f + li %r4, 4 // FAIL so only skip 1 instruction. Return will catch +1: + mfsrr0 %r3 + add %r3, %r3, %r4 // skip some instructions + mtsrr0 %r3 + + mfsprg0 %r3 + mfsprg1 %r4 + rfid + + EXCEPTION(0x800) + EXCEPTION(0x900) + EXCEPTION(0x980) + EXCEPTION(0xa00) + EXCEPTION(0xb00) + EXCEPTION(0xc00) + EXCEPTION(0xd00) + EXCEPTION(0xe00) + EXCEPTION(0xe20) + EXCEPTION(0xe40) + EXCEPTION(0xe60) + EXCEPTION(0xe80) + EXCEPTION(0xf00) + EXCEPTION(0xf20) + EXCEPTION(0xf40) + EXCEPTION(0xf60) + EXCEPTION(0xf80) +#if 0 + EXCEPTION(0x1000) + EXCEPTION(0x1100) + EXCEPTION(0x1200) + EXCEPTION(0x1300) + EXCEPTION(0x1400) + EXCEPTION(0x1500) + EXCEPTION(0x1600) +#endif + + diff --git a/tests/illegal/illegal.c b/tests/illegal/illegal.c new file mode 100644 index 0000000..0778ffe --- /dev/null +++ b/tests/illegal/illegal.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include + +#include "console.h" + +#define TEST "Test " +#define PASS "PASS\r\n" +#define FAIL "FAIL\r\n" + +extern int ill_test_1(void); + +// i < 100 +void print_test_number(int i) +{ + putstr(TEST, strlen(TEST)); + putchar(48 + i/10); + putchar(48 + i%10); + putstr(":", 1); +} + +int main(void) +{ + int fail = 0; + + potato_uart_init(); + + print_test_number(1); + if (ill_test_1() != 0) { + fail = 1; + putstr(FAIL, strlen(FAIL)); + } else + putstr(PASS, strlen(PASS)); + + return fail; +} diff --git a/tests/illegal/powerpc.lds b/tests/illegal/powerpc.lds new file mode 100644 index 0000000..0b65470 --- /dev/null +++ b/tests/illegal/powerpc.lds @@ -0,0 +1,13 @@ +SECTIONS +{ + _start = .; + . = 0; + .head : { + KEEP(*(.head)) + } + . = 0x1000; + .text : { *(.text) } + . = 0x2000; + .data : { *(.data) } + .bss : { *(.bss) } +} diff --git a/tests/sc/Makefile b/tests/sc/Makefile new file mode 100644 index 0000000..a2fb869 --- /dev/null +++ b/tests/sc/Makefile @@ -0,0 +1,3 @@ +TEST=sc + +include ../Makefile.test diff --git a/tests/sc/head.S b/tests/sc/head.S new file mode 100644 index 0000000..ddbedef --- /dev/null +++ b/tests/sc/head.S @@ -0,0 +1,111 @@ +/* Copyright 2013-2014 IBM Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define STACK_TOP 0x2000 + +/* Load an immediate 64-bit value into a register */ +#define LOAD_IMM64(r, e) \ + lis r,(e)@highest; \ + ori r,r,(e)@higher; \ + rldicr r,r, 32, 31; \ + oris r,r, (e)@h; \ + ori r,r, (e)@l; + + .section ".head","ax" + + /* + * Microwatt currently enters in LE mode at 0x0, so we don't need to + * do any endian fix ups + */ + . = 0 +.global _start +_start: + b boot_entry + +.global boot_entry +boot_entry: + /* setup stack */ + LOAD_IMM64(%r1, STACK_TOP - 0x100) + LOAD_IMM64(%r12, main) + mtctr %r12 + bctrl + attn // terminate on exit + b . + +/* test sc */ +.global sc_test_1 +sc_test_1: + li %r3, 1 // preload a failure + sc + b 1f // skipped + b 1f // skipped + b 2f // return here is good! + b 1f // shouldn't hit here +2: + li %r3, 0 + blr +1: + li %r3, 1 + blr + +#define EXCEPTION(nr) \ + .= nr ;\ + b . + + /* More exception stubs */ + EXCEPTION(0x300) + EXCEPTION(0x380) + EXCEPTION(0x400) + EXCEPTION(0x480) + EXCEPTION(0x500) + EXCEPTION(0x600) + EXCEPTION(0x700) + EXCEPTION(0x800) + EXCEPTION(0x900) + EXCEPTION(0x980) + EXCEPTION(0xa00) + EXCEPTION(0xb00) + + . = 0xc00 + mtsprg0 %r3 + mfsrr0 %r3 + addi %r3, %r3, 8 // skip 2 instructions + mtsrr0 %r3 + mfsprg0 %r3 + rfid + + EXCEPTION(0xd00) + EXCEPTION(0xe00) + EXCEPTION(0xe20) + EXCEPTION(0xe40) + EXCEPTION(0xe60) + EXCEPTION(0xe80) + EXCEPTION(0xf00) + EXCEPTION(0xf20) + EXCEPTION(0xf40) + EXCEPTION(0xf60) + EXCEPTION(0xf80) +#if 0 + EXCEPTION(0x1000) + EXCEPTION(0x1100) + EXCEPTION(0x1200) + EXCEPTION(0x1300) + EXCEPTION(0x1400) + EXCEPTION(0x1500) + EXCEPTION(0x1600) +#endif + + diff --git a/tests/sc/powerpc.lds b/tests/sc/powerpc.lds new file mode 100644 index 0000000..0b65470 --- /dev/null +++ b/tests/sc/powerpc.lds @@ -0,0 +1,13 @@ +SECTIONS +{ + _start = .; + . = 0; + .head : { + KEEP(*(.head)) + } + . = 0x1000; + .text : { *(.text) } + . = 0x2000; + .data : { *(.data) } + .bss : { *(.bss) } +} diff --git a/tests/sc/sc.c b/tests/sc/sc.c new file mode 100644 index 0000000..67d80b9 --- /dev/null +++ b/tests/sc/sc.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include + +#include "console.h" + +#define TEST "Test " +#define PASS "PASS\r\n" +#define FAIL "FAIL\r\n" + +extern int sc_test_1(void); + +// i < 100 +void print_test_number(int i) +{ + putstr(TEST, strlen(TEST)); + putchar(48 + i/10); + putchar(48 + i%10); + putstr(":", 1); +} + +int main(void) +{ + int fail = 0; + + potato_uart_init(); + + print_test_number(1); + if (sc_test_1() != 0) { + fail = 1; + putstr(FAIL, strlen(FAIL)); + } else + putstr(PASS, strlen(PASS)); + + return fail; +} diff --git a/tests/test_decrementer.bin b/tests/test_decrementer.bin new file mode 100755 index 0000000000000000000000000000000000000000..95244695f767d942111ac2ad736e00aad8f61657 GIT binary patch literal 5220 zcmeHLO-vI(6n@(x)QY4g9*EW0q9imip$87F1=%fv5Rg>iz;SC!LO5ZHWLp<@Lo`9d zL5?P-kZ3mXVmx~Dhe*75ATb^h)B}WrB*vtq$oSr}3uRLfLP(=@lId)}dEa~AdoyjP zQv%Qm;Hd}jiZf+i3CB2`_lf{&1HgE6rffWkWA97XcvQ1L81|N^onQlM$P)vaeMrU; z`7z|jkROZ7_^jDeGCbOj+f~Bv${g}80(7|0N4eq018OJXGy<33@25TbC2e{ATJ@m6 zI46>RJ&z3zh?hu{)fTmr?T(uDk`!P5!3y9$E@&&pFKGGcd+bQJV*W>Z`H%Mg*O~^l zonIK9Ul^lv%8;ztQnCYLcs5AMT6jRFGs_`tl|q013LXCtO1dwX#r*eGuK&)sxc<8@ z>EG&e*z>!qJNWEj>p!UfgJ-ylhZXjA*#+EUhAk{>c89$2Kb)_Jsc=BEIb@vA;#`)o zuZ?1Yg(UZgEM>nb$jQtyZ)U-!pC3fY9oKOu%!lq9*yrrJ;s+&gr8L&vU|>#A&PG;Z zvLAm}39mMA#%|Sfpa%L9u|Ttd`N10y8EZG>b1L3DaImF~bdf$&OO)HtLiY&G$cz5a zxnk0-$gf~jpd2EU1M2q~F-+aFo80-34f)5ApEURYPiv(J{Wt~*prwGNk6BRJGmTuf6jOxL9MxV*DZFx^g9+1`z&_V z7Q2szor-q(Y7TEacqarRczjV0_>!PjtrB(y_+X`pLEEZ+hhsRP!CW(Z6hRFyxxg6& zsKFBYZfDpi?|}YA+6#N-ISd{^e`Y66?%q9JHLXav2h4rKue?^uAmfZ1fEcl|eX&B&PEpepw3&Ru>wFeisY&WxQ5!yOVIsqa=R~L=ly@^2&&R#Yw z@cu||TFqPjj<;*+k9Mrv~7}Wsqmi?MtUkh_%c^2=yp6#uc6%_ zhY#2E`AIHqOE@baOhzXV&KH9)icz=D7>^@0!tkyOM8pCFU?Ysjeh;xa9I4e{@5cTN au?PXCzN>otCXB5MG-Io1@&RqhH?=<$QnkPU literal 0 HcmV?d00001 diff --git a/tests/test_decrementer.console_out b/tests/test_decrementer.console_out new file mode 100644 index 0000000..e70abe3 --- /dev/null +++ b/tests/test_decrementer.console_out @@ -0,0 +1,3 @@ +Test 01:PASS +Test 02:PASS +Test 03:PASS diff --git a/tests/test_illegal.bin b/tests/test_illegal.bin new file mode 100755 index 0000000000000000000000000000000000000000..dac5b01df04573b6326a24d89ea35fb41f4bda76 GIT binary patch literal 5012 zcmeHLPe>GD6#vb-=(d@x;6d7;T{CbYXb&D{Tg#cUeuLFO1;I`>DA4h44UX#YGY9u&H)Ec*4{>@13;1tJ^mKKOVuzxUqve(!zX?96^% zpbZE$0by;SBCM0{$LX*JSQmk*)I!D7FzJDpfvJ>T_Fy#ZwYuN|OPd5u=8M{0*OktE znjC`F#dg;0Q<72#{?QK5{x7JM@)xxI{QFnbQq=X^$y~8 zkFI?fSG=Tc&xlb|mp1IO5yMW9e`4CG2Ri?gT~pNSPit7{`inh(p&z3{_rFwsVLMP- z|AYJgr~VwZ{a|*7w;nbB!_I&B3J;iJL%dxJKw8O&Z)~LdV%rDPnI`=Nu_}rm| z;!^8QtTr4p4H@Gq*I;oC#Q(aRBhOoM?Z5-^TgeIAAcdU(D{cuBn?hb?RBZugb=2vl253_hoU5dumQf5b-Be_wt_F=`1Ps zqAfWJJUq`addHd3+@6ZWR(5>dB?Vg5_RbT2pj++fVck1$=Wd9s7hI2ktEG{v@an1* ztdv0C-hAeSzAYi1vAyM(iW$$W)LIp-R>%6Ppnh2@R~tWhZ}GD6#spz=(d@x;6d7;T`O=QXb&D{Tg#dCPl_Uv26mfm^&$jj1*444ARR0` z)U6=2gX}T7bncHJ9SZEy(f)Z*JS22kS@i3@aRx=w0&gUBkml2J349x~4Yoqli1Ka5{I|NA%lPyIP;{r=eB6G)Z3|T|vrkjSq)q%7~1cM&Y|fKKYL_mahsp z_or?|`W-xkFR7Pe3;R^qv=XqC%VpW#n=TfDb*g(UYbNNvVf>nlOL?O~z*Zg)XO+7y zmOxC=rR;Fi7d8zW1h#YIyf{BEmq*U*0XokeTF5W+!|~NeB9^IOLgN~2u7UEu?#A%) z7Vf*C{5dY$EN#jTDc?3u4lkyRpL5o^oj&yb!Hu`DM~-+Mr5OrzMB|w#;v=wY*BLtr zHCf|fXkXtwBk^iU*w&efCzrQv-7N)L zwf4>vA)s69>0#MBaQjY_v=?2Auq(yrRg@Z /dev/null 2> test_$i.console_out + rm main_ram.bin +done