;=================================================================================== ; ; Тест процессора КР1801ВМ1 для ДВК ; ; Версия 0.1a ; ; (c) dr.Titus 2012 ; ;=================================================================================== .MCall .TTYIN, .TTYOUT, .Print, .Exit .RADIX 10 .CSect CSR2STATE = ^O176674 CSR2DATA = ^O176676 PPLADR = ^O177010 PPL12DATA = ^O177014 $JSW = ^O44 TTSPC$ = ^O10000 TPLCPU = 60 ;Тактов на дополнительные команды в каждом цикле TPSCPU = 100 ;Такты на вход и выход из цикла замера TPLPPU = 84 ;Тактов на дополнительные команды в каждом цикле TPSPPU = 420 ;Такты на вход и выход из цикла замера ;=============================================== Start: ;----------------------------------------------- ; .Print #KeyOFF ;Отключить клавиатуру MOV #Text0,R1 ;Информация о тесте CALL PrnStr ;Печатать название теста ;----------------------------------------------- Тестирование правильности команд CPU CPUFuncTest: MOV #Text2,R1 ; CALL PrnStr ;Печатать название теста MOV #TRUETAB,R1 ;R1 - Таблица для тестирования правильности команд CPU 1$: CALL ComTest ;Тестирование одной команды (группы команд) CPU TST (R1) ;Если еще не конец таблицы, BNE 1$ ;то цикл --> 1$ ;----------------------------------------------- ExitTest: ; .Print #KeyON ;Включить клавиатуру .Exit ;=================================================================================== ; ; Печать NULL-terminated строку с вопросом перехода на следующий экран ; ; Входные данные: R1 - указатель на строку ; ;=================================================================================== PrnStr: CMP LineCtr,#23 ;Если напечатали < 23 строки, то BCS 4$ ;пропустить вопрос --> 4$ ;----------------------------------------------- Next page? MOV R1,-(SP) ;Сохранить на стеке R1 ;[T] Восстановить системные вектора TRAP 4,10 .Print #NextPage ;Печатаем сообщение "Next page?" ; .Print #KeyON ;Включить клавиатуру BIS #TTSPC$,@#$JSW ;Запрет отображения символов на экране .TTYIN ;Ожидание нажатия клавиши CMPB R0,#13 ;Если код = 13 (Возврат каретки), BNE 3$ ;то ожидаем еще один код = 10 (перевод строки) .TTYIN ; 3$: ; .Print #KeyOFF ;Отключить клавиатуру .Print #NextLine ;Переходим на следующую строку CLR LineCtr ;Сбросить счетчик строк ;[T] Вернуть наши вектора TRAP 4,10 MOV (SP)+,R1 ;Восстановить R1 4$: ;----------------------------------------------- Печать символа MOVB (R1)+,R0 ;(R1)+ -> R0 BEQ 1$ ;Если равен 0, то выход --> 1$ CMP #10,R0 ;Если равен 10, то BNE 2$ ; INC LineCtr ;Прирастить счетчик строк 2$: .TTYOUT ;Печать символа в R0 ; EMT ^O341 ;Печать символа в R0 BR PrnStr ;Цикл 1$: RETURN ;Выход ;=================================================================================== ; ; Печать в буфер шестнадцатиричного числа ; ; Входные данные: R0 - указатель на буфер ; R1 - число ; Выходные данные: R0 - указатель на буфер после числа ; ;=================================================================================== PrBHex: MOV #4,R3 ;Счетчик на 4 цифры 1$: ADD R1,R1 ;Циклический сдвиг R1 влево ADC R1 ;на 4 бита ADD R1,R1 ; ADC R1 ; ADD R1,R1 ; ADC R1 ; ADD R1,R1 ; ADC R1 ; MOV R1,R2 ;Преобразовать младший ниббл R1 в шестнадцатиричную ASCII-цифру BIC #65520,R2 ;AND $000F,R2 CMP R2,#10 ; BCS 2$ ; ADD #7,R2 ; 2$: ADD #48,R2 ; MOVB R2,(R0)+ ;Занести цифру в буфер SOB R3,1$ ;Цикл на 4 цифры RETURN ;Выход ;=================================================================================== ; ; Печать в буфер десятичного числа ; ; Входные данные: R0 - указатель на буфер ; R1 - 0 - не печатать ведущие нули, <0 - печатать ; R3 - число ; R5 - вес старшего разряда ; Выходные данные: R0 - указатель на буфер после числа ; Портит регистры: R0..R5 ; ;=================================================================================== PrBDec: CLR R2 ;R2.R3 - число SUB R4,R4 ;R4.R5 - вес разряда DIV R5,R2 ;R2 = R2.R3/R5, R3 - остаток CMP R2,R1 ;Если R2 = R1, BEQ 1$ ;то пропускаем цифру --> 1$ DEC R1 ;Снимаем флаг, запрещающий печатать нули ADD #48,R2 ;R2 - ASCII-цифра MOVB R2,(R0)+ ;R2 -> (R0)+ (заносим цифру в буфер) 1$: DIV #10,R4 ;R4 = R4.R5 / 10 (перейти к следущему разряду) MOV R4,R5 ;R5 = R4 BNE PrBDec ;Если вес разряда <> 0, то цикл --> PrBDec RETURN ;Выход ;=================================================================================== ; ; Печать на экран десятичного числа без ведущих нулей ; ; Входные данные: R3 - число 0..65535 ; Портит регистры: R0, R2..R5 ; ;=================================================================================== PSBDec: MOV R1,-(SP) ;Сохранить R1 на стеке MOV #TextBuf,R0 ;R0 - буфер для печати CLR R1 ;R1 = 0 (не печатать ведущие нули) MOV #10000,R5 ;Число до 5 знаков CALL PrBDec ;Печатать в буфер R1 CLRB (R0) ;Закрыть стринг MOV #TextBuf,R1 ; CALL PrnStr ;Печатать число из буфера на экране MOV (SP)+,R1 ;Восстановить R1 RETURN ;Выход ;=================================================================================== ; ; Печать результата теста правильности команды CPU ; ; Входные данные: R0 - результат теста (0xA5A1, 0xA5A2 - TRAP 4 и TRAP 10) ; ;=================================================================================== PrTstRes: MOV R1,-(SP) ;Сохранить R1 на стеке MOV #TTrap4,R1 ;Если R0 = 0xA5A1, CMP #42401,R0 ;то печатать "Trap 4" BEQ 1$ ;--> PrnStr MOV #TTrap10,R1 ;Если R0 = 0xA5A2, CMP #42402,R0 ;то печатать "Trap 10" BEQ 1$ ;--> PrnStr MOV R0,R1 ;R1 - число MOV #TextBuf,R0 ;R0 - буфер для печати MOVB #48,(R0)+ ;Занести в буфер "0x" MOVB #120,(R0)+ ; CALL PrBHex ;Печатать в буфер R1 CLRB (R0) ;Закрыть стринг MOV #TextBuf,R1 ; 1$: CALL PrnStr ;Печатать число из буфера на экране MOV (SP)+,R1 ;Восстановить R1 RETURN ;Выход ;=================================================================================== ;=================================================================================== ; ; Тестирование правильности выполнение команд процессора ; ;=================================================================================== ComTest: MOV R1,-(SP) ; MOV #NextL0,R1 ;Переход на следующую строчку CALL PrnStr ; MOV (SP)+,R1 ; .TTYOUT #9 ;Печать символа <9> (Табуляция) CALL PrnStr ;Печать мнемоники по адресу R1 .TTYOUT #9 ;Печать символа <9> (Табуляция) .TTYOUT #45 ;Печать символа "-" .TTYOUT #32 ;Печать пробела INC R1 ;Even R1 (выравнивание на границу слова) BIC #1,R1 ; ;----------------------------------------------- MOV (R1)+,R0 CALL (R0) ;Вызов функции тестирования ;R5 - посчитанная сумма MOV (R1)+,R4 ;R4 - правильная сумма CMP R4,R5 ;Если R4 = R5, BNE 1$ ;то .Print #TxtOK ;печать "ОК" RETURN ;Выход ;----------------------------------------------- R4 <> R5 1$: .Print #TxtERROR ;Печать "ERROR " MOV R4,R0 ;R0 - число CALL PrTstRes ;Печать 16-ричной суммы или "TRAP 4/10" .Print #TxtSlash ;Печать " / " MOV R5,R0 ;R0 - число CALL PrTstRes ;Печать 16-ричной суммы или "TRAP 4/10" RETURN ;Выход ;=================================================================================== ; ; Процедуры тестирования правильности выполнения команд процессора ; ;=================================================================================== ;=================================================================================== ; ; Тестовая функция однооперандных байтовых команд ; ;=================================================================================== InB1Op: MOV #2$,R0 ;Занести 1 слово команды MOV (R1)+,(R0) ;из таблицы в код процедуры MOV R1,-(SP) ;Сохранить R1 ;R0 - временный регистр ;R1 - счетчик аргумента ;R2 - результат ;R3 - счетчик PSW ;R4 - счетчик на 16 итераций ;R5 - накопленная сумма CLR R1 ;R1 = 0 (инициализация аргумента) CLR R3 ;R3 = 0 (инициализация PSW, прерывания разрешены) CLR R5 ;R5 = 0 (инициализация суммы) MOV #16,R4 ;R4 = 16 (счетчик на 16 итераций) 1$: MOVB R1,R2 ;R2 = R1 (аргумент 0..255 с расширением знака) MTPS R3 ;PSW = R3 (флаги 0..15) 2$: NOP ;Команда сигнатуры MFPS R0 ;R0 = PSW ADD R0,R5 ;R5 = R5 + PSW ADD R5,R5 ;R5 = R5 rol 1 (декoрреляция) ADC R5 ; ADD R2,R5 ;R5 = R5 + R2 INCB R1 ;R1 = R1 + 1 BNE 1$ ;Если не достигли 0, то цикл (256 итераций) INC R3 ;R3 = R3 + 1 SOB R4,1$ ;Цикл на 16 итераций (4 бита флагов) InTRExit: ;Выход в случае прерывания TRAP n MOV (SP)+,R1 ;Восстановить R1 RETURN ;Выход ;=================================================================================== ; ; Тестовая функция однооперандных словных команд ; ;=================================================================================== InW1Op: MOV #2$,R0 ;Занести 1 слово команды MOV (R1)+,(R0) ;из таблицы в код процедуры MOV R1,-(SP) ;Сохранить R1 ;R0 - временный регистр ;R1 - счетчик аргумента ;R2 - результат ;R3 - счетчик PSW ;R4 - счетчик на 16 итераций ;R5 - накопленная сумма CLR R1 ;R1 = 0 (инициализация аргумента) CLR R3 ;R3 = 0 (инициализация PSW, прерывания разрешены) CLR R5 ;R5 = 0 (инициализация суммы) MOV #16,R4 ;R4 = 16 (счетчик на 16 итераций) 1$: MOV R1,R2 ;R2 = R1 (аргумент 0..65535) MTPS R3 ;PSW = R3 (флаги 0..15) 2$: NOP ;Команда сигнатуры MFPS R0 ;R0 = PSW ADD R0,R5 ;R5 = R5 + PSW ADD R5,R5 ;R5 = R5 rol 1 (декoрреляция) ADC R5 ; ADD R2,R5 ;R5 = R5 + R2 INC R1 ;R1 = R1 + 1 BNE 1$ ;Если не достигли 0, то цикл (65536 итераций) INC R3 ;R3 = R3 + 1 SOB R4,1$ ;Цикл на 16 итераций (4 бита флагов) MOV (SP)+,R1 ;Восстановить R1 RETURN ;Выход ;=================================================================================== ; ; Тестовая функция двухоперандных байтовых команд ; ;=================================================================================== InB2Op: MOV #2$,R0 ;Занести 1 слово команды MOV (R1)+,(R0) ;из таблицы в код процедуры MOV R1,-(SP) ;Сохранить R1 ;R0 - временный регистр ;R1 - счетчик аргумента ;R2 - результат ;R3 - счетчик PSW ;R4 - счетчик на 16 итераций ;R5 - накопленная сумма CLR R1 ;R1 = 0 (инициализация аргумента) CLR R3 ;R3 = 0 (инициализация PSW, прерывания разрешены) CLR R5 ;R5 = 0 (инициализация суммы) MOV #16,R4 ;R4 = 16 (счетчик на 16 итераций) 1$: MOV R1,R2 ;R2.b - операнд-1 0..255 SWAB R2 ;R1.b - операнд-2 0..255 MTPS R3 ;PSW = R3 (флаги 0..15) 2$: NOP ;Команда сигнатуры MFPS R0 ;R0 = PSW ADD R0,R5 ;R5 = R5 + PSW ADD R5,R5 ;R5 = R5 rol 1 (декoрреляция) ADC R5 ; ADD R2,R5 ;R5 = R5 + R2 INC R1 ;R1 = R1 + 1 BNE 1$ ;Если не достигли 0, то цикл (65536 итераций) INC R3 ;R3 = R3 + 1 SOB R4,1$ ;Цикл на 16 итераций (4 бита флагов) MOV (SP)+,R1 ;Восстановить R1 RETURN ;Выход ;=================================================================================== ; ; Тестовая функция двухоперандных словных команд ; (частичный перебор) ; ;=================================================================================== InW2Op: MOV #2$,R0 ;Занести 1 слово команды MOV (R1)+,(R0) ;из таблицы в код процедуры MOV R1,-(SP) ;Сохранить R1 ;R0 - временный регистр, аргумент 1 ;R1 - глобальный счетчик аргумента ;R2 - аргумент 2 ;R3 - счетчик PSW ;R4 - счетчик на 16 итераций ;R5 - накопленная сумма CLR R3 ;R3 = 0 (инициализация PSW, прерывания разрешены) CLR R5 ;R5 = 0 (инициализация суммы) MOV #16,R4 ;R4 = 16 (счетчик на 16 итераций) 1$: MOV #16383,R1 ;R1 = 0x3FFF (инициализация аргумента) 5$: MOV R1,R0 ; ADD R0,R0 ;R0 = R1 << 2 ADD R0,R0 ; BIC #8191,R0 ;R0 = R0 and 0xE000 BISB R1,R0 ;R0.b = R0.b and R1.b BIC #8176,R0 ;R0 = R0 and 0xE00F BIT #8,R0 ;Если R0[3] = 1, BEQ 3$ ;то R0[12..4] = 1 BIS #8176,R0 ;R0 - операнд-1 0..65535 3$: MOV R1,R2 ; SWAB R2 ; BIC #4088,R2 ;R2 = R2 and 0xF007 BIT #4,R2 ;Если R2[2] = 1, BEQ 4$ ;то R2[11..3] = 1 BIS #4088,R2 ;R2 - операнд-2 0..65535 4$: MTPS R3 ;PSW = R3 (флаги 0..15) 2$: NOP ;Команда сигнатуры MFPS R0 ;R0 = PSW ADD R1,R5 ;R5 = R5 + R1 ADD R0,R5 ;R5 = R5 + PSW ADD R5,R5 ;R5 = R5 rol 1 (декoрреляция) ADC R5 ; ADD R2,R5 ;R5 = R5 + R2 DEC R1 ;R1 = R1 - 1 BPL 5$ ;Если не достигли -1, то цикл (16384 итерации) INC R3 ;R3 = R3 + 1 SOB R4,1$ ;Цикл на 16 итераций (4 бита флагов) MOV (SP)+,R1 ;Восстановить R1 RETURN ;Выход ;=================================================================================== ; ; Тестовая функция команд работы с флагами ; ;=================================================================================== InFlags: ;Занести 1 слово команды MOV (R1)+,R2 ;из таблицы в регистр R2 MOV R1,-(SP) ;Сохранить R1 ;R0 - временный регистр ;R1 - счетчик аргумента ;R2 - результат ;R3 - счетчик PSW ;R4 - счетчик на 16 итераций ;R5 - накопленная сумма CLR R3 ;R3 = 0 (инициализация PSW, прерывания разрешены) CLR R5 ;R5 = 0 (инициализация суммы) MOV #16,R4 ;R4 = 16 (счетчик на 16 итераций) 1$: MOV #15,R1 ;R1 = 0xF (инициализация аргумента) 3$: BIC #15,R2 ;R2 = R2 and 0xFFF0 BIS R1,R2 ;R2 = R2 or R1 MOV R2,2$ ;R2 -> (2$) MTPS R3 ;PSW = R3 (флаги 0..15) 2$: NOP ;Команда сигнатуры MFPS R0 ;R0 = PSW ADD R1,R5 ;R5 = R5 + R1 ADD R0,R5 ;R5 = R5 + PSW ADD R5,R5 ;R5 = R5 rol 1 (декoрреляция) ADC R5 ; ADD R1,R5 ;R5 = R5 + R1 ADD R3,R5 ;R5 = R5 + R3 DEC R1 ;R1 = R1 - 1 BPL 3$ ;Если не достигли -1, то цикл (16 итераций) INC R3 ;R3 = R3 + 1 SOB R4,1$ ;Цикл на 16 итераций (4 бита флагов) MOV (SP)+,R1 ;Восстановить R1 RETURN ;Выход ;=================================================================================== ; ; Тестовая функция условных переходов ; ;=================================================================================== InBcc: MOV R1,-(SP) ;Сохранить R1 ;R0 - временный регистр ;R1 - не используется ;R2 - результат ;R3 - счетчик PSW ;R4 - счетчик на 16 итераций ;R5 - накопленная сумма CLR R3 ;R3 = 0 (инициализация PSW, прерывания разрешены) CLR R5 ;R5 = 0 (инициализация суммы) MOV #16,R4 ;R4 = 16 (счетчик на 16 итераций) 1$: MOV #256+2,2$ ;'BR +2' -> (2$) (инициализация сигнатуры команды) 3$: MTPS R3 ;PSW = R3 (флаги 0..15) 2$: BR 4$ ;Команда сигнатуры ADD 2$,R5 ;R5 = R5 + (2$) (если перехода не было) 4$: ADD R5,R5 ;R5 = R5 rol 1 (декoрреляция) ADC R5 ; ADD 2$,R5 ;R5 = R5 + (2$) ADD R3,R5 ;R5 = R5 + R3 ADD #256,2$ ;(2$) = (2$) + 0x100 (к следующей команде перехода) BIT #2048,2$ ;Если (2$)[11] <> 1, BEQ 3$ ;то цикл -> 3$ MOV #34816,R0 ;(2$) = (2$) xor 0x8800 (ко второму набору) XOR R0,2$ ; BMI 3$ ;Если не конец второго набора, то -> 3$ INC R3 ;R3 = R3 + 1 SOB R4,1$ ;Цикл на 16 итераций (4 бита флагов) 6$: MOV (SP)+,R1 ;Восстановить R1 RETURN ;Выход ;=================================================================================== ; ; Обработчик TRAP 4 для тестирования команд CPU ; ;=================================================================================== InTR4: MOV #InTRExit,(SP) ;Поменять адрес выхода на InTRExit MOV #42401,R5 ;R5 = 0xA5A51 RTI ;Выход из прерывания ;=================================================================================== ; ; Обработчик TRAP 10 для тестирования команд CPU ; ;=================================================================================== InTR10: MOV #InTRExit,(SP) ;Поменять адрес выхода на InTRExit MOV #42402,R5 ;R5 = 0xA5A52 RTI ;Выход из прерывания ;=================================================================================== Text0: .ASCIZ <14>"tEST PROCESSORA kr1801wm1"<15>" v0.1a (c) by dr.Titus" Text2: .ASCIZ <13><10><13><10><14>"tESTIROWANIE PRAWILXNOSTI WYPOLNENIQ KOMAND PROCESSORA:"<15><13><10> NextPage: .ASCII "Next page?"<128> NextLine: .ASCII <13><10><128> NextL0: .ASCIZ <13><10> KeyOFF: .ASCII <27><91><50><104><128> KeyON: .ASCII <27><91><50><108><128> TTrap4: .ASCIZ "TRAP 4" TTrap10: .ASCIZ "TRAP 10" TxtOK: .ASCII "OK"<128> TxtERROR: .ASCII "ERROR: "<128> TxtSlash: .ASCII " / "<128> TxtER2: .ASCII "Error, must be: "<128> TextBuf: .BLKB 64 ;Текстовый буфер на 64 буквы .Even ;=============================================== LineCtr: .WORD 0 ;Счетчик строк PNextEl: .WORD 0 ;Адрес следующего элемента в таблице PComCtr: .WORD 0 ;Число выполненных команд за один кадр PInteger: .WORD 0 ;Целая часть числа PFraction: .WORD 0 ;Дробная часть числа ;=================================================================================== ; ; Таблица шаблонов для проверки правильности выполнения команд ; ;=================================================================================== TRUETAB: ;Однооперандный байтовый режим: ; R1 - циклический счетчик 0..255 ; R2 - результат операции .ASCII <14>"oDNOOPERANDNYE BAJTOWYE KOMANDY:"<15><13><10><9> .ASCIZ "NOP"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации NOP ;Тестируемый фрагмент .WORD 47358 ;Правильный результат теста .ASCIZ "MOVB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации MOVB R1,R2 ;Тестируемый фрагмент .WORD 22591 ;Правильный результат теста .ASCIZ "CLRB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации CLRB R2 ;Тестируемый фрагмент .WORD 174 ;Правильный результат теста .ASCIZ "COMB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации COMB R2 ;Тестируемый фрагмент .WORD 19640 ;Правильный результат теста .ASCIZ "INCB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации INCB R2 ;Тестируемый фрагмент .WORD 45759 ;Правильный результат теста .ASCIZ "DECB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации DECB R2 ;Тестируемый фрагмент .WORD 16439 ;Правильный результат теста .ASCIZ "NEGB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации NEGB R2 ;Тестируемый фрагмент .WORD 34896 ;Правильный результат теста .ASCIZ "TSTB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации TSTB R2 ;Тестируемый фрагмент .WORD 22591 ;Правильный результат теста .ASCIZ "ROLB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации ROLB R2 ;Тестируемый фрагмент .WORD 59598 ;Правильный результат теста .ASCIZ "RORB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации RORB R2 ;Тестируемый фрагмент .WORD 14191 ;Правильный результат теста .ASCIZ "ASRB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации ASRB R2 ;Тестируемый фрагмент .WORD 39071 ;Правильный результат теста .ASCIZ "ASLB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации ASLB R2 ;Тестируемый фрагмент .WORD 34430 ;Правильный результат теста .ASCIZ "ADCB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации ADCB R2 ;Тестируемый фрагмент .WORD 20623 ;Правильный результат теста .ASCIZ "SBCB"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации SBCB R2 ;Тестируемый фрагмент .WORD 23623 ;Правильный результат теста .ASCIZ "SXT"<9> ;Мнемоника команды .Even ; .WORD InB1Op ;Функция инициализации SXT R2 ;Тестируемый фрагмент .WORD 753 ;Правильный результат теста ;----------------------------------------------- TRUE16: .ASCII <13><10><9><14>"oDNOOPERANDNYE SLOWNYE KOMANDY:"<15><13><10><9> .ASCIZ "MOV"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации MOV R2,R2 ;Тестируемый фрагмент .WORD 21045 ;Правильный результат теста .ASCIZ "CLR"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации CLR R2 ;Тестируемый фрагмент .WORD 40952 ;Правильный результат теста .ASCIZ "COM"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации COM R2 ;Тестируемый фрагмент .WORD 40884 ;Правильный результат теста .ASCIZ "INC"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации INC R2 ;Тестируемый фрагмент .WORD 31498 ;Правильный результат теста .ASCIZ "DEC"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации DEC R2 ;Тестируемый фрагмент .WORD 21477 ;Правильный результат теста .ASCIZ "NEG"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации NEG R2 ;Тестируемый фрагмент .WORD 55940 ;Правильный результат теста .ASCIZ "TST"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации TST R2 ;Тестируемый фрагмент .WORD 42568 ;Правильный результат теста .ASCIZ "ROL"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации ROL R2 ;Тестируемый фрагмент .WORD 4314 ;Правильный результат теста .ASCIZ "ROR"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации ROR R2 ;Тестируемый фрагмент .WORD 16955 ;Правильный результат теста .ASCIZ "ASR"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации ASR R2 ;Тестируемый фрагмент .WORD 56713 ;Правильный результат теста .ASCIZ "ASL"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации ASL R2 ;Тестируемый фрагмент .WORD 53748 ;Правильный результат теста .ASCIZ "ADC"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации ADC R2 ;Тестируемый фрагмент .WORD 34714 ;Правильный результат теста .ASCIZ "SBC"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации SBC R2 ;Тестируемый фрагмент .WORD 37579 ;Правильный результат теста .ASCIZ "SWAB"<9> ;Мнемоника команды .Even ; .WORD InW1Op ;Функция инициализации SWAB R2 ;Тестируемый фрагмент .WORD 28360 ;Правильный результат теста ;----------------------------------------------- .ASCII <13><10><9><14>"dWUHOPERANDNYE BAJTOWYE KOMANDY:"<15><13><10><9> .ASCIZ "CMPB"<9> ;Мнемоника команды .Even ; .WORD InB2Op ;Функция инициализации CMPB R1,R2 ;Тестируемый фрагмент .WORD 32299 ;Правильный результат теста .ASCIZ "BITB"<9> ;Мнемоника команды .Even ; .WORD InB2Op ;Функция инициализации BITB R1,R2 ;Тестируемый фрагмент .WORD 20674 ;Правильный результат теста .ASCIZ "BICB"<9> ;Мнемоника команды .Even ; .WORD InB2Op ;Функция инициализации BICB R1,R2 ;Тестируемый фрагмент .WORD 34044 ;Правильный результат теста .ASCIZ "BISB"<9> ;Мнемоника команды .Even ; .WORD InB2Op ;Функция инициализации BISB R1,R2 ;Тестируемый фрагмент .WORD 3366 ;Правильный результат теста ;----------------------------------------------- .ASCII <13><10><9><14>"dWUHOPERANDNYE SLOWNYE KOMANDY (^ASTI^NYJ TEST):"<15><13><10><9> .ASCIZ "ADD"<9> ;Мнемоника команды .Even ; .WORD InW2Op ;Функция инициализации ADD R0,R2 ;Тестируемый фрагмент .WORD 19449 ;Правильный результат теста .ASCIZ "SUB"<9> ;Мнемоника команды .Even ; .WORD InW2Op ;Функция инициализации SUB R0,R2 ;Тестируемый фрагмент .WORD 53150 ;Правильный результат теста .ASCIZ "CMP"<9> ;Мнемоника команды .Even ; .WORD InW2Op ;Функция инициализации CMP R0,R2 ;Тестируемый фрагмент .WORD 20463 ;Правильный результат теста .ASCIZ "BIT"<9> ;Мнемоника команды .Even ; .WORD InW2Op ;Функция инициализации BIT R0,R2 ;Тестируемый фрагмент .WORD 24602 ;Правильный результат теста .ASCIZ "BIC"<9> ;Мнемоника команды .Even ; .WORD InW2Op ;Функция инициализации BIC R0,R2 ;Тестируемый фрагмент .WORD 20591 ;Правильный результат теста .ASCIZ "BIS"<9> ;Мнемоника команды .Even ; .WORD InW2Op ;Функция инициализации BIS R0,R2 ;Тестируемый фрагмент .WORD 29619 ;Правильный результат теста .ASCIZ "XOR"<9> ;Мнемоника команды .Even ; .WORD InW2Op ;Функция инициализации XOR R0,R2 ;Тестируемый фрагмент .WORD 14773 ;Правильный результат теста ;----------------------------------------------- ALU16: .ASCII <13><10><9><14>"kOMANDY RABOTY S FLAGAMI:"<15><13><10><9> .ASCIZ "CLx"<9> ;Мнемоника команды .Even ; .WORD InFlags ;Функция инициализации CCC ;Тестируемый фрагмент .WORD 512 ;Правильный результат теста .ASCIZ "SEx"<9> ;Мнемоника команды .Even ; .WORD InFlags ;Функция инициализации SCC ;Тестируемый фрагмент .WORD 1008 ;Правильный результат теста ;----------------------------------------------- BCC16: .ASCII <13><10><9><14>"kOMANDY USLOWNYH PEREHODOW:"<15><13><10><9> .ASCIZ "Bcc"<9> ;Мнемоника команды .Even ; .WORD InBcc ;Функция инициализации .WORD 59587 ;Правильный результат теста ;----------------------------------------------- .WORD 0 ;0 - конец таблицы ;=================================================================================== .End Start ;