1
0
mirror of https://github.com/livingcomputermuseum/Darkstar.git synced 2026-03-04 10:45:41 +00:00
Files
livingcomputermuseum.Darkstar/D/IOP/Source/8085SelfTest.asm,v
2023-09-27 16:17:41 -07:00

39 lines
12 KiB
Plaintext

head 1.1;
branch 1.1.1;
access ;
symbols start:1.1.1.1 Xerox:1.1.1;
locks ; strict;
comment @;; @;
1.1
date 2001.08.12.22.22.17; author freier; state Exp;
branches 1.1.1.1;
next ;
1.1.1.1
date 2001.08.12.22.22.17; author freier; state Exp;
branches ;
next ;
desc
@@
1.1
log
@Initial revision
@
text
@{
MODULE = 8085SelfTest.asm found on [Iris]<WMicro>DLion>
**************************************************************************************************
*
* "Pre-boot" Diagnostics for Dandelion Diagnostic Test Package - Input/Output Processor, 8085
*
* Origional edit by Roy RXM on September 5, 1980 2:40 PM
* Last edited by J. JxP on March 9, 1982 4:01 PM
*
* This code tests a portion of the 8085 instruction set.
*
*
* Dennis DEG : 2-Sep-84 15:12:56, add copyright notice
**************************************************************************************************}
{ Copyright (C) 1980, 1982 by Xerox Corporation. All rights reserved.}
; Subroutine [I8085SelfTest].
GET "SysDefs.asm" ; From [IRIS]<Workstation>
; Imports and Exports
EXP I8085SelfTest ; To PreBootSource.asm
IMP CommonHalt ; From PreBootSource.asm
; Register usage: Explained as necessary in individual tests below.
I8085SelfTest: ; Instructions tested:
; Explained as necessary in individual tests below.
; Functions tested:
; Explained as necessary in individual tests below.
;**********************
JumpTest: ;* Basic Jump
;**********************
; Instructions tested:
; nop, jmp
; Functions tested:
; nop, jmp (unconditional), program counter
nop ; Test nop (no operation)
jmp EndJumpTest ; Test jmp
HLT ; Attempt to halt if program counter,
HLT ; nop, or jump failed.
HLT ;
EndJumpTest:
;**********************
BranchTest: ;* General Branching
;**********************
; Instructions tested:
; xra A, stc, jc, jnc, jnz, jpo, jm
; Functions tested:
; Conditional jumps and flags
; Flags are: Z/zero, S/sign, P/parity, CY/carry, AC/auxiliary carry.
xra a ; Zero out A register, carry and sign bits;
; set zero and parity bits to 1.
jc CommonHalt ; Test carry reset. Should not jump.
jnc BrTst1 ; Test carry. Should jump, else CY, Z, S, or P flag failed.
jmp CommonHalt ;
BrTst1:
jnz CommonHalt ; Test jnz and Z flag. Should not jump.
jz BrTst2 ; Zero - should jump.
jmp CommonHalt ;
BrTst2:
jpe BrTst3 ; Parity even - should jump.
jmp CommonHalt ;
BrTst3:
jp BrTst4 ; Positive - should jump.
jmp CommonHalt ;
BrTst4:
jpo CommonHalt ; Test jpo and P flag. Should not jump.
jm CommonHalt ; Test jm and sign flag. Should not jump.
stc ; Set carry bit to 1.
jnc CommonHalt ; Test stc (set carry) instruction. Should not jump.
jc BrTst5 ; Carry bit is set - should jump.
jmp CommonHalt ; Jump failed or carry, zero, sign, or parity flag failed.
BrTst5:
jpo CommonHalt ; Test jpo and/or parity flag. Should not jump.
jm CommonHalt ; Test jm and/or sign flag. Should not jump.
jnz CommonHalt ; Test jnz and/or zero flag. Should not jump.
EndBranchTest:
;**********************
XriTest: ;* Xri
;**********************
; Instructions tested:
; Xri, Jz, Jpo, Jpe
; Functions tested:
; Zero detector, Parity detector, ALU Exclusive OR, ALU Bus
;**********************
RegisterTest: ;* General Registers
;**********************
; Instructions tested:
; mvi, mov reg-reg, ral, xra reg
; Functions tested:
; Addressing registers B, C, D, E, H, L
mvi L,0dfH ; Load registers in reverse order with unique patterns
mvi H,0efH ; to test addressing of individual registers.
mvi E,0f7H ;
mvi D,0fbH ;
mvi C,0fdH ;
mvi B,0feH ;
mvi A,0ffH ;
xri 0ffH ; Test if mvi to A worked.
jnz CommonHalt ; Jump to error if it failed.
mov a,l ; Register L to A.
xri 0dfH ; Test for 'df'.
jnz CommonHalt ; Jump if error, mov, reg L, or mvi failed.
mov a,H ; Register H to A.
xri 0efH ; Test for 'ef'.
jnz CommonHalt ; Jump if register H failed.
mov a,E ; Register E to A.
xri 0f7H ; Test for 'f7'.
jnz CommonHalt ; Jump if register E failed.
mov a,D ; Register D to A.
xri 0fbH ; Test for 'fb'.
jnz CommonHalt ; Jump if register D failed.
mov a,C ; Register C to A.
xri 0fdH ; Test for 'fd'.
jnz CommonHalt ; Jump if register C failed.
mov a,B ; Register B to A.
xri 0feH ; Test for 'fe'.
jnz CommonHalt ; Jump if register B failed.
mvi a,00H ; Load registers in forward order with compliment patterns
mvi b,01H ; to test addressing of registers.
mvi c,02H ;
mvi d,04H ;
mvi e,08H ;
mvi h,10H ;
mvi l,20H ;
xri 00H ; Test A.
jnz CommonHalt ; Jump if A failed.
mvi a,80H ; 80 to A
ral ; Test rotating into carry.
jnc CommonHalt ; Jump if mvi or ral failed.
ral ; Test rotating carry into A.
jc CommonHalt ; Jump if ral failed.
xra b ; A:B
jnz CommonHalt ; Jump if not equal, xra, or ral failed.
mvi a,01H ; Move 1 to A.
ral ; 2 to A, test ral.
xra c ; A:C
jnz CommonHalt ; Jump not equal.
mvi a,2H ; Move 2 to A.
ral ; 4 to A, test ral.
xra d ; A:D, test xra.
jnz CommonHalt ; Jump on not equal.
mvi a,04H ; Move 4 to A.
ral ; 8 to A, test ral.
xra e ; A:E, test xra.
jnz CommonHalt ; Jump on not equal.
mvi a,08H ; Move 8 to A.
ral ; 10 to A, test ral.
xra h ; A:H, test xra.
jnz CommonHalt ; Jump on not equal.
mvi a,10H ; Move 10H to A.
ral ; 20 to A, test ral.
xra l ; A:L, test xra.
jnz CommonHalt ; Jump on not equal.
mvi b,0a5H ; Move a5 to B.
mvi a,69H ; Move 69H to A.
xra b ; CC to A, test xra.
xri 0ccH ; Test xra for Exclusive OR.
jnz CommonHalt ; Jump if xra failed.
mvi a,20H ; Move 20 to A.
ral ; 40 to A, Test ral.
xri 40H ; Test for Exclusive OR.
jnz CommonHalt ; Jump if ral failed.
mvi a,40H ; Move 40H to A.
ral ; 80 to A, test ral.
xri 80H ; Test for Exclusive OR.
EndRegisterTest: ;
;**********************
RegPatternTest: ;* Register Patterns
;**********************
; Instructions tested:
; mov
; Functions tested:
; Test registers B, C, D, E, H, and L with patterns.
; Register Usage Patterns Tested
; A - 0001 01FF FFFE FE00
; B - 0003 03FF FFFC FC00
; C - Dictionary Code 0007 07FF FFF8 F800
; D - Pattern 000F 0FFF FFF0 F000
; E - Pattern 001F 1FFF FFE0 E000
; H - Under Test 003F 3FFF FFC0 C000
; L - Under Test 007F 7FFF FF80 8000
; SP - Under Test 00FF FFFF FF00 0000
RegPat1:
xra a ; Initialize pattern with zeroes to A and Carry bit.
stc ; Set Carry bit to 1.
RegPat2:
ral ; Generate new pattern.
mov l,a ; Move pattern through the registers.
mov h,l ;
mov e,h ;
mov d,e ;
mov c,d ;
mov b,c ;
xra b ; A:B
jnz CommonHalt ; Jump if A not equal to B or register failed.
xra b ; Move B to A.
jm RegPat2 ; Is pattern msb a one?
stc ; No, so set Carry bit to 1.
jnz RegPat2 ; Cycle until finished.
EndRegPatternTest:
;**********************
INXhTest: ;* Inx
;**********************
; UNIMPLEMENTED
; Instructions tested:
; Inx H
; Functions tested:
; Inx logic (program counter)
; Register Usage Patterns Tested
; A - Scratch FFFE FFFF FF7F FF80
; B - New Pattern FFFD FFFE FEFF FF00
; C - New Pattern FFFB FFFC FDFF FE00
; D - Expt Result FFF7 FFFA FBFF FC00
; E - Expt Result FFEF FFF0 F7FF F800
; H - Under Test FFDF FFE0 EFFF F000
; L - Under Test FFBF FFC0 DFFF E000
; BFFF C000
; 7FFF 8000
; FFFF 0000
INXhTest1:
mvi b,0ffH ; Initialize patterns.
mvi c,0feH ;
mov d,b ;
mov e,b ;
INXhTest2:
xra a ; Set zero bit, reset carry bit.
mov h,b ; Move test pattern to H and L registers.
mov l,c ;
inx h ; Test inx
jnz CommonHalt ; Test that zero and carry bits have not changed.
jc CommonHalt ;
mov a,l ; Test results -- DE:HL
xra e ;
jnz CommonHalt ;
mov a,h ;
xra d ;
jnz CommonHalt ;
stc ; Generate next pattern.
mov a,c ;
ral ;
mov c,a ;
mov a,b ;
ral ;
mov b,a ;
xra a ; Generate expected result.
mov a,e ;
ral ;
mov e,a ;
mov a,d ;
ral ;
mov d,a ;
jc INXhTest2 ; Loop until last pattern is complete -- test patterns FFFE to 0000.
INXhTest3:
stc ; Generate expected result.
mov a,c ;
ral ;
mov e,a ;
mov a,b ;
ral ;
mov d,a ;
xra a ; Generate pattern.
mov a,c ;
ral ;
mov c,a ;
mov l,a ;
mov a,b ;
ral ;
mov b,a ;
mov h,a ;
jnc EndINXhTest ; Jump if last pattern is complete.
inx h ; Test inx.
jnc CommonHalt ; Test that carry is not reset.
mov a,l ; Test the result.
xra e ;
jnz CommonHalt ;
mov a,h ;
xra d ;
EndINXhTest:
;**********************
ADDrTest: ;* Add r
;**********************
; UNIMPLEMENTED
; Instructions tested:
; Add r
; Functions tested:
; ALU add logic
;**********************
ADCrTest: ;* Add with carry
;**********************
; UNIMPLEMENTED
; Instructions tested:
; Adc r
; Functions tested:
; Add with carry
;**********************
ADDmTest: ;* Add m
;**********************
; UNIMPLEMENTED
; Instructions tested:
; Add m
; Functions tested:
; H and L memory addressing
;**********************
SPregTest: ;* SP (Stack Pointer) Registers
;**********************
; Instructions tested:
; sphl
; Functions tested:
; sp register, stack operations.
;**************************************************************************************************
; CAUTION:
;
; From 'SPregTst1' to 'ParityTest' you may NOT set a breakpoint to debug this code because:
; The BREAK command 'D7' calls the stack pointer and since this code has altered the SP....!
;
;**************************************************************************************************
lxi h,1 ; Initialize patterns with 0001 in H and L registers.
SPregTst1:
mov d,h ; Save pattern in registers D and E.
mov e,l ;
xra a ; Set Zero bit to 1.
stc ; Set Carry bit to 1.
sphl ; Test sphl: pattern to SP
jnz CommonHalt ; Test Zero and Carry bits not reset.
jnc CommonHalt ;
mov h,a ; Zeroes to H and L registers.
mov l,a ;
dad sp ; SP to H and L.
mov a,l ; Test result - HL:DE.
cmp e ;
jnz CommonHalt ;
mov a,h ;
xra d ; Move zeroes to A register.
jnz CommonHalt ;
ora d ; Test if DE = 0000 (last pattern),
ora e ; and go to next test if yes ...
jz EndSPregTest ; else shift HL left.
dad H ;
jc SPregTst1 ; Jump if marching zeroes ...
inx h ; else insert '1' into lsb (marching one's).
EndSPregTest:
;+++++Do NOT remove. Remember SP has been smashed and you are only two calls deep.++++++
lxi sp, UserStkStart - 4 ; Re-Initialize stack pointer to user stack area.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++
;**********************
ParityTest: ;* Parity
;**********************
; Instructions Tested:
; jpo, jpe
; Functions Tested:
; parity logic
xra a ; Set A register to all zeroes
xri 0ffh ; XOR ff with A, setting parity even
jpo CommonHalt ; Error if branch is taken
xri 3eH ; Set parity to odd
jpe CommonHalt ; Error if branch is taken
jpo EndParityTest ;
EndParityTest:
;**********************
AddTest: ;* Add
;**********************
; UNIMPLEMENTED
;**********************
MoveTest: ;* Move
;**********************
; UNIMPLEMENTED
;**********************
PushPopTest: ;* Push and Pop
;**********************
; UNIMPLEMENTED
;**********************
CallRetTest: ;* Call and Return
;**********************
; UNIMPLEMENTED
;**********************
RestartTest: ;* Restart (rst)
;**********************
; UNIMPLEMENTED
;**********************
FlagTest: ;* Flags
;**********************
; UNIMPLEMENTED
;**********************
InrDcrTest: ;* Increment (inr) and Decrement (dcr)
;**********************
; UNIMPLEMENTED
;**********************
SubtractTest: ;* Subtract
;**********************
; UNIMPLEMENTED
;**********************
CompareTest: ;* Compare
;**********************
; UNIMPLEMENTED
;**********************
AndOrTest: ;* And / Or
;**********************
; UNIMPLEMENTED
;**********************
AluTest: ;* Alu
;**********************
; UNIMPLEMENTED
;**********************
LdStrDirectTest: ;* Load and Store Direct
;**********************
; UNIMPLEMENTED
ExitSelfTest:
RET ; Return.
END ; End of I8085SelfTest.asm
@
1.1.1.1
log
@first add
@
text
@@