Следующий код является тестовой программой для процессора EQUINOX 16
проверяется работа всех команд процессора путем записи в стек данных, выполнения команды и сравнения результатов с тем, что должно быть:
Код:
;
; программа для тестирования процессора EQUINOX 16
; проверка арифметическо-логических команд,
; команд работы с памятью и стеком возвратов,
; а так же ассемблерных макросов для их реализации
;
.386
.MODEL tiny
.CODE
; LOCALS
include equinox.asm ; макро-определения для форт-команд
; -- тут можно и другие макросы вставлять
_TEST MACRO data,name; на стеке два значения, если они не равны, программа должна быть остановлена, иначе продолжается дальше
_compile_
_LIT data
_XOR
; _compile_
_BRAN name&_1
_compile_
_STOP
_compile_
name&_1:
_DROP
_compile_
ENDM
_RET_ MACRO
_RET
_compile_
ENDM
ORG 100h
test_test proc near
LOCALS
begin:
ORGS 000h
; начало
; виртуальное начало с адреса 0000h, для TASM-a - 0100h, поэтому в макросах адреса уменьшаются на 100h
nnn = 000
_NOP ; традиционно начинаю с NOP-a, чтобы можно было заглушить программу, вставив сюда STOP или RET
_CALL test_xdup ; проверка группы команд XDUP
_compile_
_CALL test_xswap ; проверка группы команд XSWAP
_CALL test_xdrop ; проверка группы команд XSWAP
_CALL test_nibbles ; проверка @ ! >R R>
; ------------------------------
; _STOP
xx1: _ZERO
_BRAN xx1
;-------------------------------
_compile_
test_xdup:
_ZERO ; 0
_DUP ; 0 0
_DEC ; 0 -1
_OVER ; 0 -1 0
_TEST 0,t1 ; 0 -1
; _DROP ; 0 -1
_NIP ; -1
_TEST -1,t20 ;
_MONE
_TEST -1,t2
_RET_
; ---------------------------
_compile_
test_xswap:
; _SWAP _INC _DEC _NEG _INV _MUL _LCONV _BSWAP _LSHIFT _RSHIFT
; ---------------------- SWAP
_LIT 1
_LIT 2
_SWAP
_TEST 1,t3
_TEST 2,t4
; ---------------------- INC
_LIT 2
_INC
_TEST 3,t5
_LIT 4
_DEC
_TEST 3,t6
; ---------------------- DEC
_LIT 64
_NEG
_TEST -64,t7
; ---------------------- NEG
_LIT 0AA55h
_INV
_TEST 055AAh,t18
; ---------------------- INV
_LIT 0CC33h
_INV
_TEST 033CCh,t8
; ---------------------- MUL
_LIT 4
_LIT 5
_MUL
_TEST 20,t9
_TEST 0,t10
_LIT 1100h
_LIT 300h
_MUL
_TEST 0,t11
_TEST 33h,t12
; ---------------------- LCONV
_LIT 7
_LCONV
_TEST 0,t13
_LIT 0
_LCONV
_TEST -1,t14
; ---------------------- BSWAP
_LIT 051A1h
_BSWAP
_TEST 0A151h,t15
; ---------------------- LSHIFT
_LIT 0700h
_RSHIFT
_TEST 0380h,t16
; ---------------------- RSHIFT
_LIT 0700h
_LSHIFT
_TEST 0E00h,t17
; ----------------------
_RET_
; ----------------------
_compile_
test_xdrop:
; ----------------------
; ---------------------- _DROP
_CALL set_literals
_DROP
_TEST 3,t20m
_TEST 2,t21
_TEST 1,t22
; ---------------------- _NIP
_CALL set_literals
_NIP
_TEST 4,t23
_TEST 2,t24
_TEST 1,t25
; ---------------------- _ADD
_CALL set_literals
_ADD
_TEST 7,t26
_TEST 2,t27
_TEST 1,t28
; ---------------------- _SUB
_CALL set_literals
_SUB
_TEST -1,t29
_TEST 2,t30
_TEST 1,t31
; ---------------------- _AND
_CALL set_literals
_AND
_TEST 0,t32
_TEST 2,t33
_TEST 1,t34
; ---------------------- _OR
_CALL set_literals
_OR
_TEST 7,t35
_TEST 2,t36
_TEST 1,t37
; ---------------------- _XOR
_CALL set_literals
_XOR
_TEST 7,t38
_TEST 2,t39
_TEST 1,t40
; ---------------------- _NAND
_CALL set_literals
_NAND
_TEST -1,t41
_TEST 2,t42
_TEST 1,t43
; ---------------------- _ADC
; ---------------------- _SBC
_RET_
; ----------------------
set_literals:
_LIT 1
_LIT 2
_LIT 3
_LIT 4
_RET_
; ----------------------
test_nibbles:
; ---------------------- @ !
_LIT 0AAh
_LIT 1000h
_PRISW
_LIT 1000h
_RAZIM
_TEST 0AAh
_LIT 1000h
_CALL inc_ram
_LIT 1000h
_RAZIM
_TEST 0ABh,t48
_LIT 1000h
_CALL inc_ram
_LIT 1000h
_RAZIM
_TEST 0ACh,t49
; ---------------------- >R R>
_CALL set_literals
_toR
_toR
_toR
_TEST 1,t44
_fromR
_TEST 2,t45
_fromR
_TEST 3,t46
_fromR
_TEST 4,t47
_RET_
; ----------------------
; ----------------------
; ---------------------- nops 12,13,14
; ----------------------
; ----------------------
; ----------------------
; ----------------------
; ----------------------
; увеличить на единицу содержимое ячейки памяти (addr --> )
inc_ram:
_DUP
_RAZIM
_INC
_SWAP
_PRISW
_RET_
endp
end begin
Тест был откомпилирован, записан в память, подключенную к процессору и успешно прогнан в симуляторе.
Возможно, проверено не все и не все нюансы, но можно с уверенностью утверждать, что работоспособность процессора проверена на 90+ процентов...