; 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: TEXT: DEFM 'Testprogramm erfolgreich beendet' DEFB 10 TEND: ; ; Nicht initialisierte Daten ; BYTE1: DEFS 1 BYTE2: DEFS 1 BYTE3: DEFS 1 ; WORD1: DEFS 2 ; DEFS 100 STACK: ; END