mirror of
https://github.com/livingcomputermuseum/Darkstar.git
synced 2026-03-04 10:45:41 +00:00
39 lines
12 KiB
Plaintext
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
|
|
@@
|