; Testprogramm fuer Z80-Assembler und Z80-Simulator
;
; Copyright (C) 1989 by Udo Munk
;
JR $JR01 ;JR-Befehle testen
HALT
$JR01: SCF
JR C,$JR02
HALT
$JR02: CCF
JR NC,$JR03
HALT
$JR03: XOR A
JR Z,$JR04
HALT
$JR04: INC A
JR NZ,$JR05
HALT
$JR05: LD B,0
XOR A
$JR06:
INC A
DJNZ $JR06
JR Z,$JR07
HALT
$JR07:
OR A
JR Z,$JR08
HALT
$JR08:
$NEXT01: ;JP-Befehle testen
JP $JP01
HALT
$JP01: LD HL,$JP02
JP (HL)
HALT
$JP02: LD IX,$JP03
JP (IX)
HALT
$JP03: LD IY,$JP04
JP (IY)
HALT
$JP04: SCF
JP C,$JP05
HALT
$JP05: CCF
JP NC,$JP06
HALT
$JP06: XOR A
JP Z,$JP07
HALT
$JP07: INC A
JP NZ,$JP08
HALT
$JP08: JP PO,$JP09
HALT
$JP09: INC A
INC A
AND 3
JP PE,$JP10
HALT
$JP10: JP P,$JP11
HALT
$JP11: SUB 8
JP M,$JP12
HALT
$JP12:
$NEXT02: ;CALL und RET-Befehle testen
LD SP,STACK
CALL UP1
HALT
SCF
CALL C,UP2
HALT
CCF
CALL NC,UP3
HALT
XOR A
CALL Z,UP4
HALT
INC A
CALL NZ,UP5
HALT
CALL PO,UP6
HALT
INC A
INC A
AND 3
CALL PE,UP7
HALT
CALL P,UP8
HALT
SUB 8
CALL M,UP9
HALT
$NEXT03: ;8-Bit Ladebefehle testen
LD A,10
LD B,A
LD C,B
LD D,C
LD E,D
LD H,E
LD L,H
SUB L
JR Z,$LD01
HALT
$LD01: LD A,B
CP 10
JR Z,$LD02
HALT
$LD02: LD A,C
CP 10
JR Z,$LD03
HALT
$LD03: LD A,D
CP 10
JR Z,$LD04
HALT
$LD04: LD A,E
CP 10
JR Z,$LD05
HALT
$LD05: LD A,H
CP 10
JR Z,$LD06
HALT
$LD06: LD A,L
CP 10
JR Z,$LD07
HALT
$LD07: LD BC,BYTE1
LD DE,BYTE2
LD HL,BYTE3
LD A,1
LD (BC),A
INC A
LD (DE),A
INC A
LD (HL),A
LD A,(BC)
LD B,A
LD A,(DE)
LD C,A
LD A,(HL)
ADD A,B
ADD A,C
CP 6
JR Z,$LD08
HALT
$LD08: LD A,1
LD B,2
LD C,3
LD D,4
LD E,5
LD H,6
LD L,7
ADD A,B
ADD A,C
ADD A,D
ADD A,E
ADD A,H
ADD A,L
CP 28
JR Z,$LD09
HALT
$LD09: LD HL,BYTE3
LD A,(HL)
CP 3
JR Z,$LD10
HALT
$LD10: LD B,(HL)
CP B
JR Z,$LD11
HALT
$LD11: LD C,(HL)
CP C
JR Z,$LD12
HALT
$LD12: LD D,(HL)
CP D
JR Z,$LD13
HALT
$LD13: LD E,(HL)
CP E
JR Z,$LD14
HALT
$LD14: LD H,(HL)
CP H
JR Z,$LD15
HALT
$LD15: LD HL,BYTE3
LD L,(HL)
CP L
JR Z,$LD16
HALT
$LD16: LD A,0D3H
LD (BYTE1),A
XOR A
LD A,(BYTE1)
CP 0D3H
JR Z,$LD17
HALT
$LD17: LD IX,TAB1
LD B,TAB1_END-TAB1
LD C,0
$LD18: LD A,(IX+0)
CP C
JR Z,$LD19
HALT
$LD19: INC C
INC IX
DJNZ $LD18
$LD20: LD IY,TAB1
LD B,TAB1_END-TAB1
LD C,0
$LD21: LD A,(IY+0)
CP C
JR Z,$LD22
HALT
$LD22: INC C
INC IY
DJNZ $LD21
$LD23: LD IX,TAB1_END
LD B,TAB1_END-TAB1
LD A,(TAB1_END-1)
LD C,A
$LD24: LD A,(IX+-1)
CP C
JR Z,$LD25
HALT
$LD25: DEC C
DEC IX
DJNZ $LD24
$LD26: LD IY,TAB1_END
LD B,TAB1_END-TAB1
LD A,(TAB1_END-1)
LD C,A
$LD27: LD A,(IY+-1)
CP C
JR Z,$LD28
HALT
$LD28: DEC C
DEC IY
DJNZ $LD27
$LD29: LD HL,1234H
PUSH HL
LD IX,WORD1
LD (IX+0),L
LD (IX+1),H
LD DE,(WORD1)
OR A
SBC HL,DE
JR Z,$LD30
HALT
$LD30: LD C,(IX+0)
LD B,(IX+1)
POP HL
OR A
SBC HL,BC
JR Z,$LD31
HALT
$LD31:
$NEXT04: ;16-Bit Ladebefehle testen
LD BC,1234H
LD (WORD1),BC
LD HL,(WORD1)
OR A
SBC HL,BC
JR Z,$LDW01
HALT
$LDW01: LD DE,4321H
LD (WORD1),DE
LD HL,(WORD1)
OR A
SBC HL,DE
JR Z,$LDW02
HALT
$LDW02: LD HL,5678H
LD (WORD1),HL
LD BC,(WORD1)
OR A
SBC HL,BC
JR Z,$LDW03
HALT
$LDW03: LD IX,3456H
PUSH IX
POP DE
LD (WORD1),IX
LD IY,(WORD1)
PUSH IY
POP HL
OR A
SBC HL,DE
JR Z,$LDW04
HALT
$LDW04: LD IY,4567H
PUSH IY
POP BC
LD (WORD1),IY
LD IX,(WORD1)
PUSH IX
POP HL
OR A
SBC HL,BC
JR Z,$LDW05
HALT
$LDW05: LD (WORD1),SP
LD HL,(WORD1)
LD DE,STACK
OR A
SBC HL,DE
JR Z,$LDW06
HALT
$LDW06: LD BC,1122H
PUSH BC
LD HL,$LDW07
EX (SP),HL
RET
HALT
$LDW07: LD BC,1122H
OR A
SBC HL,BC
JR Z,$LDW07A
HALT
$LDW07A:
PUSH BC
LD IX,$LDW08
EX (SP),IX
RET
HALT
$LDW08: LD BC,1122H
PUSH IX
POP HL
OR A
SBC HL,BC
JR Z,$LDW08A
HALT
$LDW08A:
PUSH BC
LD IY,$LDW09
EX (SP),IY
RET
HALT
$LDW09: LD BC,1122H
PUSH IY
POP HL
OR A
SBC HL,BC
JR Z,$LDW09A
HALT
$LDW09A:
$NEXT05: ;8-Bit Arithmetik testen
LD A,20H
LD B,20H
ADD A,B
JR NC,$AR01
HALT
$AR01: JR NZ,$AR02
HALT
$AR02: JP P,$AR03
HALT
$AR03: JP PO,$AR04
HALT
$AR04: OR A
ADC A,B
ADC A,B
JR NC,$AR05
HALT
$AR05: JR NZ,$AR06
HALT
$AR06: JP M,$AR07
HALT
$AR07: JP PE,$AR08
HALT
$AR08: ADC A,B
JR NC,$AR09
HALT
$AR09: JR NZ,$AR10
HALT
$AR10: JP M,$AR11
HALT
$AR11: JP PO,$AR12
HALT
$AR12: LD B,60H
ADD A,B
JR C,$AR13
HALT
$AR13: JR Z,$AR14
HALT
$AR14: JP P,$AR15
HALT
$AR15: JP PO,$AR16
HALT
$AR16: LD IX,BYTE1
LD (IX+0),0
LD B,10
$AR17: INC (IX+0)
DJNZ $AR17
LD A,(IX+0)
CP 10
JR Z,$AR18
HALT
$AR18: LD A,80H
ADD A,A
JR C,$AR19
HALT
$AR19: JR Z,$AR20
HALT
$AR20:
$NEXT06: ;16-Bit Arithmetik testen
LD SP,STACK-10
LD IX,0
ADD IX,SP
LD HL,0
ADD HL,SP
PUSH IX
POP BC
OR A
SBC HL,BC
JR Z,$ARW01
HALT
$ARW01: LD SP,0
LD BC,1
LD DE,1
LD IY,1
ADD IY,IY
ADD IY,BC
ADD IY,DE
DEC IY
DEC IY
DEC IY
DEC IY
PUSH IY
POP HL
LD A,H
OR L
JR Z,$ARW02
HALT
$ARW02:
LD HL,TEXT ; Test erfolgreich beendet,
LD B,TEND-TEXT ; TEXT aufs Terminal ausgeben
LD C,0 ; (Port 0 ist Terminal Output)
OTIR
HALT ; und CPU anhalten
;
EJECT
;
; Die folgenden Unterprogramme testen die CALL und RET Befehle.
; Durch Erhoehen der Return-Adresse auf dem Stack um 1 werden
; die HALT-Befehle nach den CALL-Befehlen uebersprungen, wenn
; alles richtig funktioniert.
;
UP1:
EX (SP),HL
INC HL
EX (SP),HL
RET
HALT
;
UP2:
EX (SP),HL
INC HL
EX (SP),HL
RET C
HALT
;
UP3:
EX (SP),HL
INC HL
EX (SP),HL
RET NC
HALT
;
UP4:
EX (SP),HL
INC HL
EX (SP),HL
RET Z
HALT
;
UP5:
EX (SP),HL
INC HL
EX (SP),HL
RET NZ
HALT
;
UP6:
EX (SP),HL
INC HL
EX (SP),HL
RET PO
HALT
;
UP7:
EX (SP),HL
INC HL
EX (SP),HL
RET PE
HALT
;
UP8:
EX (SP),HL
INC HL
EX (SP),HL
RET P
HALT
;
UP9:
EX (SP),HL
INC HL
EX (SP),HL
RET M
HALT
;
EJECT
;
; Initialisierte Daten
;
TAB1: DEFB 00H,01H,02H,03H,04H,05H,06H,07H
DEFB 08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
DEFB 10H,11H,12H,13H,14H,15H,16H,17H
DEFB 18H,19H,1AH,1BH,1CH,1DH,1EH,1FH
TAB1_END: