Projects/MCL86/Tests/TEST_81B.ERR

881 lines
21 KiB
Plaintext

; Tests for opcode range 0x81 with second word=0x0-0x7
; These tests are for REG16,IMM16
; ----------------------------------------------------
mov ax,es ; Increment ES so it is not the same as DS
inc ax
mov es,ax
; 0x81 - ADD REG16,IMM16
; ############################################################
TEST_81_0_0: ; Test from Memory
mov dx,0FFFF
lock add dx,01234 ; test lock prefix
cmp dx,01233
jne FAIL_81_0_0
mov dx,00000
add dx,01234
cmp dx,01234
jne FAIL_81_0_0
mov word dx,01111 ; test segment override
add word dx,02222
cmp word dx,03333
jne FAIL_81_0_0
jmp TEST_81_0_1
FAIL_81_0_0:
mov dx,00030 ; Print a 0
mov ax,00202
int 021
TEST_81_0_1: ; ADD REG16,IMM16 - Test flags
; Overflow, Sign, Zero, Parity, AUX, Carry
mov dx,00001
add dx,07FFF ; Overflow should be set
jno FAIL_81_0_1 ; If not set, then fail
mov dx,00022
add dx,01234 ; Overflow should NOT be set
jno PASS_81_0_1 ; If not set, then we passed
jmp FAIL_81_0_1 ; If set then we fail
PASS_81_0_1:
mov dx,07FFF
add word[00050],00234 ; sign should be set
jns FAIL_81_0_1 ; If not set, then fail
mov dx,01111
add dx,02222 ; sign should NOT be set
js FAIL_81_0_1 ; If set then we fail
mov dx,00100
add dx,0FF00 ; zero should be set
jne FAIL_81_0_1 ; If not set then we fail
jmp TEST_81_1_0
FAIL_81_0_1:
mov dx,00030 ; Print a 0
mov ax,00202
int 021
; 0x81 - OR REG16,IMM16
; ############################################################
TEST_81_1_0: ; OR REG16,IMM16 - Test data values from memory
mov ax,es ; Increment ES so it is not the same as DS
inc ax
mov es,ax
mov dx,05A5A
lock or dx,0A5A5
cmp dx,0FFFF
jne FAIL_81_1_0
mov dx,00000
or dx,01234
cmp dx,01234
jne FAIL_81_1_0
mov word dx,05500
or word dx,05555
cmp word dx,05555
jne FAIL_81_1_0
jmp TEST_81_1_1
FAIL_81_1_0:
mov dx,00031 ; Print a 1
mov ax,00202
int 021
; ##################
TEST_81_1_1: ; OR REG16,IMM16 - Test flags
; Overflow, Sign, Zero, Parity, AUX, Carry
mov dx,01111
or dx,02222 ; Overflow should NEVER be set
jno PASS_81_1_1 ; If not set, then we passed
jmp FAIL_81_1_1 ; If set then we fail
PASS_81_1_1:
mov dx,08000
or dx,01234 ; sign should be set
jns FAIL_81_1_1 ; If not set, then fail
mov dx,01111
or dx,02222 ; sign should NOT be set
js FAIL_81_1_1 ; If set then we fail
mov dx,00000
or dx,00000 ; zero should be set
jne FAIL_81_1_1 ; If not set then we fail
jmp PASS_81_1_2
FAIL_81_1_1:
mov dx,00031 ; Print a 1
mov ax,00202
int 021
jmp TEST_81_2_0
PASS_81_1_2:
mov dx,00000
or dx,01234 ; zero should NOT be set
je FAIL_81_1_1 ; If set then we fail
mov dx,01111
or dx,02222 ; parity should be set
jnp FAIL_81_1_1 ; If not set then we fail
mov dx,00010
or dx,03400 ; parity should NOT be set
jp FAIL_81_1_1 ; If set then we fail
mov dx,01112
or dx,02234 ; carry should NEVER be set
jc FAIL_81_1_1 ; If set then we fail
; 0x81 - ADC REG16,IMM16
; ############################################################
TEST_81_2_0: ; ADC REG16,IMM16 - Test data values from memory
; Tests with Carry Bit CLEARED
; ----------------------------
clc
mov dx,00000
lock adc dx,0F3FF ; test lock prefix
cmp dx,0F3FF
jne FAIL_81_2_0
clc
mov dx,00000
adc dx,01200
cmp dx,01200
jne FAIL_81_2_0
clc
mov word dx,01111 ; test segment override
adc word dx,02222
cmp word dx,03333
jne FAIL_81_2_0
clc
mov dx,0FFFF
adc dx,012FF
cmp dx,012FE
jne FAIL_81_2_0
jmp TEST_81_2_1
FAIL_81_2_0:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
; ##################
; Tests with Carry Bit SET
; ------------------------
TEST_81_2_1:
stc
mov dx,00000
lock adc dx,01200 ; test lock prefix
cmp dx,01201
jne FAIL_81_2_1
stc
mov dx,00000
adc dx,01234
cmp dx,01235
jne FAIL_81_2_1
stc
mov word dx,01111 ; test segment override
adc word dx,02222
cmp word dx,03334
jne FAIL_81_2_1
stc
mov dx,0FFFF
adc dx,01234
cmp dx,01234
jne FAIL_81_2_1
jmp TEST_81_2_2
FAIL_81_2_1:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
; ##################
TEST_81_2_2: ; ADC REG16,IMM16 - Test flags
; Overflow, Sign, Zero, Parity, AUX, Carry
; Tests with Carry Bit CLEARED
; ----------------------------
clc
mov dx,00001
adc dx,07FFF ; Overflow should be set
jno FAIL_81_2_2 ; If not set, then fail
clc
mov dx,00002
adc dx,01111 ; Overflow should NOT be set
jno PASS_81_2_2 ; If not set, then we passed
jmp FAIL_81_2_2 ; If set then we fail
PASS_81_2_2:
clc
mov dx,00001
adc dx,07FFF ; sign should be set
jns FAIL_81_2_2 ; If not set, then fail
clc
mov dx,01111
adc dx,02222 ; sign should NOT be set
js FAIL_81_2_2 ; If set then we fail
clc
mov dx,00100
adc dx,0FF00 ; zero should be set
jne FAIL_81_2_2 ; If not set then we fail
jmp PASS_81_2_3
FAIL_81_2_2:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
jmp PASS_81_2_4
PASS_81_2_3:
clc
mov dx,00000
adc dx,03001 ; zero should NOT be set
je FAIL_81_2_2 ; If set then we fail
clc
mov dx,00011
adc dx,01122 ; parity should be set
jnp FAIL_81_2_2 ; If not set then we fail
clc
mov dx,00011
adc dx,01121 ; parity should NOT be set
jp FAIL_81_2_2 ; If set then we fail
clc
mov dx,0FFFF
adc dx,02201 ; carry should be set
jnc FAIL_81_2_2 ; If not set then we fail
clc
mov dx,01222
adc dx,03433 ; carry should NOT be set
jc FAIL_81_2_2 ; If set then we fail
; Tests with Carry Bit SET
; ------------------------
stc
mov dx,07FFF
adc dx,00201 ; Overflow should be set
jno FAIL_81_2_3 ; If not set, then fail
stc
mov dx,01111
adc dx,02222 ; Overflow should NOT be set
jno PASS_81_2_4 ; If not set, then we passed
jmp FAIL_81_2_3 ; If set then we fail
PASS_81_2_4:
stc
mov dx,07FFE
adc dx,00201 ; sign should be set
jns FAIL_81_2_3 ; If not set, then fail
stc
mov dx,01111
adc dx,02222 ; sign should NOT be set
js FAIL_81_2_3 ; If set then we fail
stc
mov dx,0EEEF
adc dx,01110 ; zero should be set
jne FAIL_81_2_3 ; If not set then we fail
jmp PASS_81_2_5
FAIL_81_2_3:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
jmp TEST_81_3_0
PASS_81_2_5:
stc
mov dx,00000
adc dx,01234 ; zero should NOT be set
je FAIL_81_2_3 ; If set then we fail
stc
mov dx,02210
adc dx,02222 ; parity should be set
jnp FAIL_81_2_3 ; If not set then we fail
stc
mov dx,02211
adc dx,02222 ; parity should NOT be set
jp FAIL_81_2_3 ; If set then we fail
stc
mov dx,0FFFF
adc dx,02000 ; carry should be set
jnc FAIL_81_2_3 ; If not set then we fail
stc
mov dx,01111
adc dx,02222 ; carry should NOT be set
jc FAIL_81_2_3 ; If set then we fail
; 0x81 - SBB REG16,IMM16
; ############################################################
TEST_81_3_0: ; SBB REG16,IMM16 - Test data values from memory
; Tests with Carry Bit CLEARED
; ----------------------------
clc
mov dx,00000
lock sbb dx,01201 ; test lock prefix
cmp dx,0EDFF
jne FAIL_81_3_0
clc
mov dx,00000
sbb dx,01200
cmp dx,0EE00
jne FAIL_81_3_0
clc
mov word dx,02222 ; test segment override
sbb word dx,01111
cmp word dx,01111
jne FAIL_81_3_0
clc
mov dx,0FF00
sbb dx,0FF00
cmp dx,00000
jne FAIL_81_3_0
jmp TEST_81_3_1
FAIL_81_3_0:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
; ##################
; Tests with Carry Bit SET
; ------------------------
TEST_81_3_1:
stc
mov dx,01235
lock sbb dx,01234 ; test lock prefix
cmp dx,00000
jne FAIL_81_3_1
stc
mov dx,01234
sbb dx,00000
cmp dx,01233
jne FAIL_81_3_1
stc
mov word dx,01111 ; test segment override
sbb word dx,02222
cmp word dx,0EEEE
jne FAIL_81_3_1
stc
mov dx,0FFFF
sbb dx,01234
cmp dx,0EDCA
jne FAIL_81_3_1
jmp TEST_81_3_2
FAIL_81_3_1:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
; ##################
TEST_81_3_2: ; SBB REG16,IMM16 - Test flags
; Overflow, Sign, Zero, Parity, AUX, Carry
; Tests with Carry Bit CLEARED
; ----------------------------
clc
mov dx,08000
sbb dx,00101 ; Overflow should be set
jno FAIL_81_3_2 ; If not set, then fail
clc
mov dx,07800
sbb dx,03400 ; Overflow should NOT be set
jno PASS_81_3_2 ; If not set, then we passed
jmp FAIL_81_3_2 ; If set then we fail
PASS_81_3_2:
clc
mov dx,08FFF
sbb dx,00101 ; sign should be set
jns FAIL_81_3_2 ; If not set, then fail
clc
mov dx,01111
sbb dx,00101 ; sign should NOT be set
js FAIL_81_3_2 ; If set then we fail
clc
mov dx,01234
sbb dx,01234 ; zero should be set
jne FAIL_81_3_2 ; If not set then we fail
jmp PASS_81_3_3
FAIL_81_3_2:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
jmp PASS_81_3_4
PASS_81_3_3:
clc
mov dx,04444
sbb dx,02222 ; zero should NOT be set
je FAIL_81_3_2 ; If set then we fail
clc
mov dx,04444
sbb dx,01111 ; parity should be set
jnp FAIL_81_3_2 ; If not set then we fail
clc
mov dx,04444
sbb dx,01110 ; parity should NOT be set
jp FAIL_81_3_2 ; If set then we fail
clc
mov dx,00000
sbb dx,00101 ; carry should be set
jnc FAIL_81_3_2 ; If not set then we fail
clc
mov dx,01234
sbb dx,00112 ; carry should NOT be set
jc FAIL_81_3_2 ; If set then we fail
; Tests with Carry Bit SET
; ------------------------
stc
mov dx,08000
sbb dx,00200 ; Overflow should be set
jno FAIL_81_3_3 ; If not set, then fail
stc
mov dx,03333
sbb dx,01111 ; Overflow should NOT be set
jno PASS_81_3_4 ; If not set, then we passed
jmp FAIL_81_3_3 ; If set then we fail
PASS_81_3_4:
stc
mov dx,00001
sbb dx,00201 ; sign should be set
jns FAIL_81_3_3 ; If not set, then fail
stc
mov dx,04444
sbb dx,02222 ; sign should NOT be set
js FAIL_81_3_3 ; If set then we fail
stc
mov dx,00201
sbb dx,00200 ; zero should be set
jne FAIL_81_3_3 ; If not set then we fail
jmp PASS_81_3_5
FAIL_81_3_3:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
jmp TEST_81_4_0
PASS_81_3_5:
stc
mov dx,01111
sbb dx,00201 ; zero should NOT be set
je FAIL_81_3_3 ; If set then we fail
stc
mov dx,04444
sbb dx,01113 ; parity should be set
jnp FAIL_81_3_3 ; If not set then we fail
stc
mov dx,04448
sbb dx,01113 ; parity should NOT be set
jp FAIL_81_3_3 ; If set then we fail
stc
mov dx,00000
sbb dx,00200 ; carry should be set
jnc FAIL_81_3_3 ; If not set then we fail
stc
mov dx,06666
sbb dx,02222 ; carry should NOT be set
jc FAIL_81_3_3 ; If set then we fail
; 0x81 - AND REG16,IMM16
; ############################################################
TEST_81_4_0: ; AND REG16,IMM16 - Test data values from memory
mov dx,05A5A
lock and dx,0A5A5
cmp dx,000
jne FAIL_81_4_0
mov dx,0FFFF
and dx,01111
cmp dx,01111
jne FAIL_81_4_0
mov word dx,01100
and word dx,01100
cmp word dx,01100
jne FAIL_81_4_0
jmp TEST_81_4_1
FAIL_81_4_0:
mov dx,00034 ; Print a 4
mov ax,00202
int 021
; ##################
TEST_81_4_1: ; AND REG16,IMM16 - Test flags
; Overflow, Sign, Zero, Parity, AUX, Carry
mov dx,01111
and dx,02222 ; Overflow should NEVER be set
jno PASS_81_4_1 ; If not set, then we passed
jmp FAIL_81_4_1 ; If set then we fail
PASS_81_4_1:
mov dx,08000
and dx,08000 ; sign should be set
jns FAIL_81_4_1 ; If not set, then fail
mov dx,0FFFF
and dx,07FFF ; sign should NOT be set
js FAIL_81_4_1 ; If set then we fail
mov dx,00000
and dx,012FF ; zero should be set
jne FAIL_81_4_1 ; If not set then we fail
jmp PASS_81_4_2
FAIL_81_4_1:
mov dx,00034 ; Print a 4
mov ax,00202
int 021
jmp TEST_81_5_0
PASS_81_4_2:
mov dx,0FF00
and dx,00100 ; zero should NOT be set
je FAIL_81_4_1 ; If set then we fail
mov dx,00003
and dx,00103 ; parity should be set
jnp FAIL_81_4_1 ; If not set then we fail
mov dx,00003
and dx,00101 ; parity should NOT be set
jp FAIL_81_4_1 ; If set then we fail
mov dx,01112
and dx,01134 ; carry should NEVER be set
jc FAIL_81_4_1 ; If set then we fail
; 0x28 - SUB REG16,IMM16
; ############################################################
TEST_81_5_0: ; SUB REG16,IMM16 - Test data values from memory
mov dx,08888
lock sub dx,01111 ; test lock prefix
cmp dx,07777
jne FAIL_81_5_0
mov dx,01222
sub dx,01222
cmp dx,00000
jne FAIL_81_5_0
mov word dx,02222 ; test segment override
sub word dx,01111
cmp word dx,01111
jne FAIL_81_5_0
mov dx,00100
sub dx,00101
cmp dx,0FFFF
jne FAIL_81_5_0
jmp TEST_81_5_1
FAIL_81_5_0:
mov dx,00035 ; Print a 5
mov ax,00202
int 021
; ##################
TEST_81_5_1: ; SUB REG16,IMM16 - Test flags
; Overflow, Sign, Zero, Parity, AUX, Carry
mov dx,08000
sub dx,00201 ; Overflow should be set
jno FAIL_81_5_1 ; If not set, then fail
mov dx,01234
sub dx,01234 ; Overflow should NOT be set
jno PASS_81_5_1 ; If not set, then we passed
jmp FAIL_81_5_1 ; If set then we fail
PASS_81_5_1:
mov dx,00000
sub dx,00201 ; sign should be set
jns FAIL_81_5_1 ; If not set, then fail
mov dx,02222
sub dx,01111 ; sign should NOT be set
js FAIL_81_5_1 ; If set then we fail
mov dx,01111
sub dx,01111 ; zero should be set
jne FAIL_81_5_1 ; If not set then we fail
jmp PASS_81_5_2
FAIL_81_5_1:
mov dx,00035 ; Print a 5
mov ax,00202
int 021
jmp TEST_81_6_0
PASS_81_5_2:
mov dx,05555
sub dx,01111 ; zero should NOT be set
je FAIL_81_5_1 ; If set then we fail
mov dx,00034
sub dx,00201 ; parity should be set
jnp FAIL_81_5_1 ; If not set then we fail
mov dx,00032
sub dx,00201 ; parity should NOT be set
jp FAIL_81_5_1 ; If set then we fail
mov dx,00000
sub dx,00201 ; carry should be set
jnc FAIL_81_5_1 ; If not set then we fail
mov dx,04031
sub dx,00211 ; carry should NOT be set
jc FAIL_81_5_1 ; If set then we fail
; 0x81 - XOR REG16,IMM16
; ############################################################
TEST_81_6_0: ; XOR REG16,IMM16 - Test data values from memory
mov dx,05A5A
lock xor dx,0A5A5
cmp word dx,0FFFF
jne FAIL_81_6_0
mov dx,00200
xor dx,00200
cmp word dx,00000
jne FAIL_81_6_0
mov word dx,08200
xor word dx,00201
cmp word word dx,08001
jne FAIL_81_6_0
jmp TEST_81_6_1
FAIL_81_6_0:
mov dx,00036 ; Print a 6
mov ax,00202
int 021
; ##################
TEST_81_6_1: ; XOR REG16,IMM16 - Test flags
; Overflow, Sign, Zero, Parity, AUX, Carry
mov dx,020FF
xor dx,0207F ; Overflow should NEVER be set
jno PASS_81_6_1 ; If not set, then we passed
jmp FAIL_81_6_1 ; If set then we fail
PASS_81_6_1:
mov dx,08000
xor dx,00200 ; sign should be set
jns FAIL_81_6_1 ; If not set, then fail
mov dx,01111
xor dx,02222 ; sign should NOT be set
js FAIL_81_6_1 ; If set then we fail
mov dx,05A22
xor dx,05A22 ; zero should be set
jne FAIL_81_6_1 ; If not set then we fail
jmp PASS_81_6_2
FAIL_81_6_1:
mov dx,00036 ; Print a 6
mov ax,00202
int 021
jmp TEST_81_7_0
PASS_81_6_2:
mov dx,00000
xor dx,00201 ; zero should NOT be set
je FAIL_81_6_1 ; If set then we fail
mov dx,00001
xor dx,00202 ; parity should be set
jnp FAIL_81_6_1 ; If not set then we fail
mov dx,00001
xor dx,00206 ; parity should NOT be set
jp FAIL_81_6_1 ; If set then we fail
mov dx,01212
xor dx,01234 ; carry should NEVER be set
jc FAIL_81_6_1 ; If set then we fail
; 0x81 - CMP REG16,IMM16
; ############################################################
TEST_81_7_0: ; CMP REG16,IMM16 - Test data values from memory
mov dx,01212
lock cmp dx,01212 ; test lock prefix
jne FAIL_81_7_0
mov dx,00200
cmp dx,00200
jne FAIL_81_7_0
mov word dx,01111 ; test segment override
cmp word dx,01111
jne FAIL_81_7_0
mov dx,0F2FF
cmp dx,0F2FF
jne FAIL_81_7_0
jmp TEST_81_7_1
FAIL_81_7_0:
mov dx,00037 ; Print a 7
mov ax,00202
int 021
; ##################
TEST_81_7_1: ; CMP REG16,IMM16 - Test flags
; Overflow, Sign, Zero, Parity, AUX, Carry
mov dx,08000
cmp dx,00201 ; Overflow should be set
jno FAIL_81_7_1 ; If not set, then fail
mov dx,02222
cmp dx,01111 ; Overflow should NOT be set
jno PASS_81_7_1 ; If not set, then we passed
jmp FAIL_81_7_1 ; If set then we fail
PASS_81_7_1:
mov dx,0FFFF
cmp dx,00201 ; sign should be set
jns FAIL_81_7_1 ; If not set, then fail
mov dx,01111
cmp dx,00201 ; sign should NOT be set
js FAIL_81_7_1 ; If set then we fail
mov dx,03434
cmp dx,03434 ; zero should be set
jne FAIL_81_7_1 ; If not set then we fail
jmp PASS_81_7_2
FAIL_81_7_1:
mov dx,00037 ; Print a 7
mov ax,00202
int 021
jmp Z_END
PASS_81_7_2:
mov dx,01100
cmp dx,03301 ; zero should NOT be set
je FAIL_81_7_1 ; If set then we fail
mov dx,00044
cmp dx,00200 ; parity should be set
jnp FAIL_81_7_1 ; If not set then we fail
mov dx,00044
cmp dx,00201 ; parity should NOT be set
jp FAIL_81_7_1 ; If set then we fail
mov dx,00000
cmp dx,00201 ; carry should be set
jnc FAIL_81_7_1 ; If not set then we fail
mov dx,01234
cmp dx,00201 ; carry should NOT be set
jc FAIL_81_7_1 ; If set then we fail
; xxxxxxxxxxxxxxxxxxxxxxx
; End
; xxxxxxxxxxxxxxxxxxxxxxx
Z_END:
mov ax,00000 ; DOS Command=Exit
int 021