; MICROPROCESSOR-KIT TESTER PROGRAMM ; ********************************** ; ; ;DEFINITIONEN ; START EQU 1C00H ; ASHLT EQU 2H BSHLT EQU 1H CSHLT EQU 4H LLAMP EQU 2H RLAMP EQU 1H ; ; SHLTA EQU 2H SHLTB EQU 1H SHLTC EQU 4H LAMPL EQU 2H LAMPR EQU 1H NEWIO EQU 8H ; ; RSBIT EQU 1H ;FUER NEWIO RUNLM EQU 2H ;" " GO EQU 4H ;" " NOGO EQU 8H ;" " ; ; LOADR EQU 1H ;FUER C-SCHALTER EXAM EQU 2H ;" " DEPOS EQU 4 RUN EQU 8H ;" " BREAK EQU 10H ;" " SSTEP EQU 10H ;" " TAKT EQU 10H ;" " ; ; EXPT0 EQU 0E0H EXPT1 EQU 0C0H EXPT2 EQU 0A0H EXPT3 EQU 80H EXPT4 EQU 60H EXPT5 EQU 40H EXPT6 EQU 20H ; ; RAMBT EQU 400H TERMT EQU 13FFH RAMTP EQU 4FFH ; TRMBT EQU 400H+START TRMTP EQU 4FFH+START CBILD EQU TRMTP ; FRED EQU 93H ; ; ORG START ; LXI SP,TRMTP-1 CALL LOADC DB 0 ; ;RAMTE ; ;RAM-PRUEFPROGRAMM. DIESER TEIL LAEUFT IM ;TESTER. ER LAEDT RAMPR IN DEN PRUEFLING, ;LAESST ES LAUFEN UND WARTET. DIE ANTWORT GLEICH ;FRED +3MAL (0100H-RAMND) KOMMT IN DEN LLAMPE ;ZURUECK. FRED IST BELIEBIG Z.B 93H ; ; ; RAMTE: CALL BOOTS ;LADE RAMPR DW RAMPR DW RAMND DW RAMBT CALL SETC DB RUN ; CALL WARTE DB 40H ;EINSTELLEN! ; IN LAMPL CPI FRED+3*(RAMPR+100-RAMEND) JNZ ERROR ; ;ROMTE ; ;ROM-PRUEFPROGRAMM. DIESER TEIL LAUFT IM ;TESTER. ER GIBT DEM PRUEFLING EINE ;ADRESSE UND ERWARTET DEN ROM-INHALT. ;KEIN HANDSHAKE: DER PRUEFLING MUSS ;INNERHALB EINER GEWISSEN ZEIT ANTWORTEN ;PRUEFUNG VON OBEN NACH UNTEN ; ; ; ROMTE: CALL BOOTS ;LADE PROGR. ROMPR DW ROMPR DW ROMND DW RAMBT CALL SETC DB RUN CALL WARTE DB 5H ;EINSTELLEN LXI D,3FFH ;HOCHSTE ROM-ADR LXI H,TERMT ;LETZTE ROM-ADR. IN MASTER-ROM ROMLP: MOV A,D OUT SHLTA ;HIGH ADR MOV A,E OUT SHLTB ;LOW ADR MVI B,0BH ;KLEINE WARTESCHLEIFE RMDEL: DCR B JNZ RMDEL IN LAMPR CMP M JNZ ERROR DCX H DCX D ; MOV A,D ANA E ;ENDE WENN BEIDE GLEICH FF JP ROMLP ; ; ; ;IOTE ; ;I/O PRUEFPROGRAMM. DIESER TEIL LAUFT IM TESTER ;VERSCHIEDENE BITMUSTER WERDEN BENUTZT. DAFUER ;WERDEN C,D,UND E ALS ZAEHLER BETRIEBEN. C NACH ;UNTEN,E NACH OBEN UND D NACH OBEN IN SCHRITTEN ;VON 3. IM PRUEFLING LAEFT DAS PROGRAMM IOPR ; ; ; IOTE: CALL BOOTS ;LADE PROG. IOPR DW IOPR DW IOEND DW RAMBT ; CALL SETC DB RUN CALL WARTE DB 5H ; XRA A ;LOESCHE C,D,E MOV C,A MOV D,A MOV E,A IOLOP: CALL IOSUB DCR C CALL IOSUB INR D INR D INR D CALL IOSUB INR E JNZ IOLOP ; ; ; ; ;SYST 0 ; ;EXPERIMENT 0 PRUEFT ADD UND SUB ; ; SYST0: CALL LOADC DB EXPT0 CALL RESET MVI A,0C3H OUT SHLTA MVI A,017H OUT SHLTB CALL SETC DB 18H ;A+B=C3+17=0DA CALL CHKRL DB 0DAH ; CALL SETC DB 7H ;A-B-1=-DB=25 CALL CHKRL DB 25H ; CALL CHKLL DB 1H ;CARRY=1 ; ; ; ;SYST1 ; ;EXPERIMENT 1 PRUEFT A,A+1,A XOR B ; ; SYST1: CALL LOADC DB EXPT1 CALL RESET MVI A,0FH OUT SHLTA MVI A,0AAH OUT SHLTB CALL CHKRL DB 0FH ;FUNKTION A ; CALL SETC DB 5H CALL CHKRL DB 10H ;FUNKTIONA+1 ; CALL SETC DB 0BH CALL CHKRL DB 5AH ;FUNKTIONA X0R B ; ; ; ;SYST2 ; ;EXPERIMENT 2 PRUEFT SP1 UND ADD ; ; ; SYST2: CALL LOADC DB EXPT2 CALL RESET MVI A,2FH OUT SHLTB CALL SETC DB 1H CALL TAKTC DB TAKT CALL CHKRL DB 1H ;SP1 ; CALL SETC DB 7H CALL TAKTC DB TAKT CALL CHKRL DB 30H ;ADD:2F+1=30 ; ; ; ;SYST3 ; ;EXPERIMENT 3 LAEDT 47 IN ADR 4 INPUT 32 ;IN ACC ADDIERT BEIDE ZUSAMMEN ; ; ; SYST3: CALL LOADC DB EXPT3 CALL RESET MVI A,4H OUT SHLTA MVI A,47H OUT SHLTB CALL TAKTC DB DEPOS ;LADE 47 IN ADR 4 ; MVI A,32H OUT SHLTB MVI A,0D0H CALL TAKTC DB TAKT ;INPUT 32 IN ACC ; MVI A,74H ;OP-CODE 7,ADR 4 OUT SHLTA CALL TAKTC DB TAKT ;ADD <4>=47 ; CALL CHKRL DB 79H ; ; ; ;SYST4 ; ;EXPERIMENT 4 LAEDT LDA 5, CMA,HLT IN ADR ;5,6,7.LDA 5 LAEDT SICH SELBST =35 IN DEN ;ACC. ERGEBNIS = 0CA ALLES IN SINGLE STEP ; ; ; SYST4: CALL LOADC DB EXPT4 CALL RESET MVI A,5H ;ANFANGSADRESSE 5 OUT SHLTA CALL TAKTC DB LOADR ;LOAD ADR 5 ; MVI A,35H OUT SHLTB CALL TAKTC DB DEPOS ;LADE 35 IN ADR 5 ; MVI A,20H OUT SHLTB CALL TAKTC DB DEPOS ;LADE 20 IN ADR 6 ; MVI A,0F0H OUT SHLTB CALL TAKTC DB DEPOS ;LADE F0 IN ADR 7 ; CALL SETC DB SSTEP ;SINGLE STEP CALL TAKTC DB LOADR ;ADR 5 ZIRUECK CALL TAKTC DB RUN CALL CHKRL DB 35H ;LDA 5 CALL CHKLL DB 62H ;PC = 6,RUN = 1, CARRY=0 ; CALL TAKTC DB RUN CALL CHKRL DB 0CAH ;CMA CALL CHKLL DB 72H ;PC =7,RUN=1,CARRY=0 ; CALL TAKTC DB RUN CALL CHKRL DB 0CAH ;HLT CALL CHKLL DB 70H ;PC=7(NOCH),RUN=0,CARRY=0 ; ; ; ;SYST5 ; ;EXPERIMENT 5 LIEST ETWAS VOM A-SCHALTER ;UND SPRINGT ZURUECK. TESTER BIETET PRUEFLING 52H AN ;UND ERWARTET 52H IN R-LAMPEN IN <52H> =E0H IN ;L-LAMPEN; ; ; SYST5: CALL LOADC DB EXPT5 CALL RESET MVI A,50H ;ANFANGS.ADR. DES PROGS. OUT SHLTA CALL TAKTC DB LOADR ;LOAD ADR 50H ; MVI A,87H OUT SHLTA CALL TAKTC DB DEPOS ;LADE 87=LOAD A3 MVI A,0FFH ;MEMORY MAPPED IO ADDR. OUT SHLTA ;FUER A-SCHALTER CALL TAKTC DB DEPOS ;LADE FF = INPUT ; MVI A,0E0H OUT SHLTA CALL TAKTC DB DEPOS ;LADE E0=JUMP ; MVI A,50H OUT SHLTA CALL TAKTC DB DEPOS ;LADE 50=SCHLEIFEN ADR. ; CALL SETC DB RUN MVI A,3BH ;DISPLAY <> UND OUT SHLTB ; MVI A,52H ;INPUT DATEN OUT SHLTA ; CALL WARTE DB 4H ;ZUSAETZLICHE VERZOEG. ; CALL CHKRL DB 52H ;INPUT-DATEN ZURUECK CALL CHKLL DB 0E0H ;<> - INPUT ADR 52 ; ; ; ; ;ALLOK UND ERROR ; ;ENDE DES HAUPTPROGRAMMES. ENTWEDER LEUCHTET ;DIE GO ODER DIE NOGO-LAMPE. DER TESTER HAELT UND W ;WARTET AUF RESET. RUN LAMPE GELOESCHT ; ; ; ALLOK: CALL LOADC DB GO HLT ; ERROR: CALL LOADC DB NOGO HLT ; ; ; ;UNTERPROGRAMME ; ; ; ;RESET ; ;FIBT DEM PRUEFLING EIN RESET. LOESCHT ;AUCH GO UND NOGO LAMPEN. SETZT RUN LAMPE ; ; ; ;ANRUF: CALL RESET ; RESET: PUSH PSW MVI A,RSBIT OUT NEWIO ;SETZE RESET MVI A,RUNLM OUT NEWIO ;LOESCHE RESET ;UND SETZE RUN-LAMPE POP PSW CALL WARTE DB 5 RET ; ; ; ;CHKLL UND CHKRL ; ;LIEST R-LAMPEN BZW L-LAMPEN UND SPRINGT ZU ;ERROR WENN SIE NICHT GLEICH DEM ARGUMENT SIND ; ; ;ANRUF: CALL CHKLL ; DB BITMUSTER ; CHKLL: XTHL PUSH PSW CALL WARTE DB 1H IN LAMPL CMP M JNZ ERROR INX H POP PSW XTHL RET ; ; ; CHKRL: XTHL PUSH PSW CALL WARTE DB 1H IN LAMPR CMP M JNZ ERROR INX H POP PSW XTHL RET ; ; ; ;WARTE ; ;WARTET N MILLISECS. ; ; ;ANRUF: CALL WARTE ; DB N ; WARTE: XTHL PUSH PSW PUSH B MOV C,M ;ZEIT N IN C INX H ; WTLP2: MVI B,40H WTLP1: DCR B JNZ WTLP1 DCR C JNZ WTLP2 ; POP B POP PSW XTHL RET ; ; ; ;SETC ; ;SETZT BITS IM C-SCHALTER OHNE DIE UEBRIGEN ;BITS ZU VERAENDERN ; ; ;ANRUF: CALL SETC ; DB BITMUSTER ; SETC: XTHL PUSH PSW LDA CBILD ORA M INX H STA CBILD OUT SHLTC POP PSW XTHL RET ; ; ; ;CLRC ; ;LOESCHT BITS IM C-SCHALTER IHNE DIE UEBRIGEN ;BITS ZU VERAENDERN ; ; ;ANRUF: CALL CLRC ; DB BITMUSTER ; CLRC: XTHL PUSH PSW LDA CBILD CMA ORA M CMA INX H STA CBILD OUT SHLTC POP PSW XTHL RET ; ; ; ;LOADC ; ;LAEDT EIN BYTE IN DEN C-SCHALTER ;(JAM-TRANSFER) ; ; ;ANRUF: CALL LOADC ; DB BITMUSTER ; LOADC: XTHL PUSH PSW MOV A,M INX H STA CBILD OUT SHLTC POP PSW XTHL RET ; ; ; ;TAKTC ; ;TAKTET BITS IN C-SCHALTER OHNE DIE ;RESTLICHEN BITS ZU BEEINFLUSSEN ;TAKTET NULL-EINS-NULL ; ; ;ANRUF: CALL TAKTC ; DB BITMUSTER ; TAKTC: XTHL PUSH PSW LDA CBILD ORA M OUT SHLTC ; CALL WARTE DB 5H ; XRA M OUT SHLTC INX H STA CBILD POP PSW XTHL RET ; ; ; ;RAMPR ; ;PRUEFT RAM MIT EINSEN, NULLEN UND ADRESSEN ;(3 TEILE). LAUFT IM PRUEFLING. BEI JEDER ;BESTANDENEN PRUEFUNG WIRD C=FRED INKREMENTIERT ;C WIRD AM ENDE ZUR BESTAETIGUNG ZUM TESTER ;ZURUECKGEGEBEN. SUBROUTINE RAMSB MUSS UN- ;MITTELBAR DANACHFOLGEN, FUER BOOTS ; ; OFSET EQU RAMBT-RAMPR OFST0 EQU RAMBT-RAMND ; RAMPR: MVI C,FRED MVI A,0FFH ;LAUTER EINSEN CALL RAMSB+OFSET XRA A ;LAUTER NULLEN CALL RAMSB+OFSET ; LXI H,RAMND+OFST0 ; _ RMLP1: MOV M,L ;FUER ALLE ADRESSEN INR L ;AUSSER DEM PROGRAMM BEREICH JNZ RMLP1+OFSET ; LXI H,RAMND+OFST0 ;ZURUECKLESEN UND BESTAETIGEN RMOK1: MOV A,L CMP M JNZ ERR1+OFSET INR C ERR1: INR L JNZ RMOK1+OFSET MOV A,C OUT LLAMP HLT ; ; ;RAMSB ; ;LAEUFT IM PRUEFLING. MUSS UNMITTELBAR NACH ;RAMPR KOMMEN DAMIT ALLES ZUSAMMEN GELADEN ;WERDEN KANN. ;ES LAEDT DEN INHALT VON ACC UEBERALL UND BESTAETIGT ;DAS ERGEBNIS. C WIRD BEI JEDER BESTAETIGUNG ;INKREMENTIERT ; ; RAMSB: LXI H,RAMND+OFST0 RMLP2: MOV M,A ;LADE FF BZW 00 INR L JNZ RMLP2+OFSET ; RMOK2: LXI H,RAMND+OFST0 CMP M JNZ ERR2+OFSET INR C ERR2: INR L JNZ RMOK2+OFSET RET RAMND: HLT ; ; ;ROMPR ; ;ROM PRUEFPROGRAMM. LAEUFT I PRUEFLING ;ES GIBT DEM TESTER JEDES WORT NACH ;EMPFANG DER ADRESSE WEITER. DAFUER ;LAEUFT ROMTE IM TESTER ; ; OFST1 EQU RAMBT-ROMPR ; ROMPR: IN ASHLT MOV A,H IN BSHLT MOV L,A MOV A,M ;FETCH OUT RLAMP JMP ROMPR+OFST1 ROMND: HLT ;FUER BOOTS ; ; ;IOPR ; ;I/O PRUEFPROGRAMM. LAEUFT IM PRUEFLING ;ES LIEST DIE A,B UND C-SCHALTER IND ;LIEFERT A XOR C AN DIE L-LAMPEN UND ;B XOR C AN DIE R-LAMPEN ; ; OFST2 EQU RAMBT-IOPR ; IOPR: IN CSHLT MOV C,A IN ASHLT XRA C OUT LLAMP IN BSHLT XRA C OUT RLAMP JMP IOPR+OFST2 IOEND: HLT ; ; ; ;IOSUB ; ;NUR FUER IOTE. ES GIBT DIE INHALTE ;VON D,E,UND C AUF DEN A,B UND C-SCHALTER. ;ES PRUEFT DIE GLEICHUNGEN DIE IN IOPR ;BERECHNET WERDEN ; ; ;ANRUF: CALL IOSUB ; IOSUB: MOV A,D OUT SHLTA MOV A,E OUT SHLTB MOV A,C OUT SHLTC MVI A,0BH ;KLEINE WARTESCHL. IODEL: DCR A JNZ IODEL ; IN LAMPL XRA C CMP D JNZ ERROR ;PRUEFE A XOR C IN LAMPR XRA C CMP E JNZ ERROR ;PRUEFE B XOR C RET ; ; ; ;BOOTS ; ;LAEDT EIN PROGRAMM VOM TESTER IN DAS ;PRUEFLING - RAM. MAX. LAENGE FF BYTES. ;LAEUFT IM TESTER ; ; ;ANRUF: CALL BOOTS ; DW QUELLE-ANFAGSADRESSE ; DW QUELLE-ENDE-ADRESSE ; DW ZIEL-ANFANGS-ADRESSE ; BOOTS: XTHL MOV E,M INX H MOV D,M ;ARG 1 IN DE INX H MOV A,M INX H INX H ;OBERES ENDE WEGWERFEN SUB E INR A ;LAENGE IN A MOV C,M ;ZIEL-ADR IN C INX H INX H ;OBERES ENDE WEGWERFEN XTHL MOV L,A ;LAENGE IN L CALL LOADC DB EXPT6 ;EXPERIMENT6 ; CALL RESET MOV A,C CALL TAKTC DB LOADR ;LOAD ADR. ; BOTLP: LDAX D ;BYTE EINHOLEN INX D OUT SHLTA ;BYTE AUSGEBEN CALL TAKTC DB DEPOS ;DEPOSIT DCR L JNZ BOTLP RET ; ; ; END START ;STARTADR. FUER ISIS