;ITT MIKROPROZESSOR-EXPERIMENT-KIT RAMPAG = #12 STAKAD = #1300 CHKEND = #0 RLAMPE = #0C LLAMPE = #0D ASHALT = #14 BSHALT = #15 CSHALT = #16 ;HAUPTPROGRAMM . = #1000 START: MVI A #9B ;TO BE REMOVED OUT #13 MVI A #80 OUT #0B LXI SP,STAKAD JMP HAUPT2 ;SUBROUTINE SRCKSK ;***************** ;ANRUF: CALL SRCKSK ; MASKE ; VERGLEICHSZAHL ; XXX ;BEFEHLE:WERDEN AUSGEFUEHRT FALLS ; XXX ;(B) AND MASKE = VERGLEICHSZAHL ; XXX ; SRCKSK: XTHL PUSH PSW MOV A,M INX H ANA B JMP CKSK2 ;SUBROUTINE SRCKJP ;***************** ;ANRUF: CALL SRCKJP ; MASKE ; VERGLEICHSZAHL ; SPRUNGADR L ;SPRUNG ZU DIESER ADRESSE FALLS ; SPRUNGADR H ;(B) AND MASKE = VERGLEICHSZAHL SRCKJP: XTHL PUSH PSW MOV A,M INX H ANA B JMP CKJP2 ;SUBROUTINE SRCKCN ;***************** ;ANRUF: CALL SRCKCN ; MASKE ; VERGLEICHSZAHL1 ;1.ELEMENT DER KETTE ; SPRUNGADR L ;SPRUNGADRESS: SPRUNG BEI UEBEREINSTIMMUNG ; SPRUNGADR H ;2. ELEMENT DER KETTE ; VERGLEICHSZAHL2 ; XXX ; XXX ; XXX ; XXX ; XXX ; .......... ; 0 ;MASKE 0= ENDBEDINGUNG SRCKCN: XTHL PUSH PSW CHCNLP: MOV A,M INX H JMP CKCN2 ;SUBROUTINE CALL SFLANK ;***************** ;PRUEFUNG AUF FLANKE: MOMENTANER BEFEHL IN B ; LETZTER BEFEHL IN D ;ANRUF: CALL SFLANK ; MASKE ; ADRESSE WENN KEINE POS. FLANKE IN B UND D ; HIGH ADRESSE SFLANK: XTHL PUSH PSW MOV A,D CMA ANA B ANA M INX H JZ CNFUND ;FLANKE NICHT GEFUNDEN JMP CKJPND ;FLANKE GEFUNDEN CKSK2: CMP M INX H JZ CKSEND INX H CKJPND: INX H INX H CKSEND: POP PSW XTHL RET CKJP2: CMP M INX H JZ CNFUND JMP CKJPND CKCN2: CPI 0 JZ CNEND ANA B CMP M INX H JZ CNFUND INX H INX H JMP CHCNLP CNFUND: MOV A,M INX H MOV H,M MOV L,A CNEND: POP PSW XTHL RET HAUPT2: IN CSHALT ;LESE BEFEHL:VERZW. ENTSP. BITS 7-5 MOV D,B ;FUER SUB. CALL SFLANK MOV B,A ;BEFEHL IN B CALL SRCKCN DB #E0 ;SCHALTERSTELLUNG 1 DB #C0 DW CODALU DB #E0 ; " 2 DB #A0 DW AKKUM DB #E0 ; " 3 DB #80 DW AKKSPI DB #E0 ; " 4 DB #60 DW BASIC DB #E0 ; " 5 DB #40 DW HYPOTH DB #E0 ; " 6 DB #20 DW SY8080 DB #E0 ; " 7 DB #0 DW ERWEIT DB CHKEND ; SYSTEM 0 MUSS UNMITTELBAR HIER NACHFOLGEN ; SCHALTERSTELLUNG 0 NICHT EXPLIZIT GEPRUEFT ;SYSTEM 0**************************************** ;ADDIERER - SUBTRAHIERER ;VERKNUEPFT ASHALT UND BSHALT NACH BEFEHL IN B BITS 4-0 ADDSUB: IN ASHALT CHKSKP ;ASHALT OFF DB #10 DB #0 XRA A NOP NOP CHKSKP ;ASHALT KOMPLEMTIERT DB #4 DB #4 CMA NOP NOP MOV C,A IN BSHALT CHKSKP ;BSHALT OFF DB #8 DB #0 XRA A NOP NOP CHKSKP ;BSHALT KOMPLEMTIERT DB #2 DB #2 CMA NOP NOP STC CHKSKP ;INCREMENT ERGEBNIS DB #1 DB #0 CMC ;CARRY 0 WENN KEIN INCREMENT NOP ;ERFORDERLICH NOP ADC C DISPLY: OUT RLAMPE RAL ANI 1 OUT LLAMPE RAR JMP START ;SUBROUTINE OPCODE. VERKNUEPFT A UND C NACH BEFEHL IN B: BITS 3-0 OPCODE: CHKSKP ;A=0 DB #F DB #0 XRA A NOP NOP CHKSKP ;A=1 DB #F DB #1 XRA A INR A NOP CHKSKP ;A=A NICHT DB #F DB #2 CMA NOP NOP CHKSKP ;A=C DB #F DB #3 MOV A,C NOP NOP CHKSKP ;A=C NICHT DB #F DB #4 MOV A,C CMA NOP CHKSKP ;A=A+1 DB #F DB #5 ADI #1 ;NICHT INR A WEGEN CARRY NOP CHKSKP ;A=A-1 DB #F DB #6 SUI #1 ;NICHT DCR A WEGEN CARRY NOP CHKSKP ;A=A+C DB #F DB #7 ADD C NOP NOP CHKSKP ;A=A-C DB #F DB #8 SUB C NOP ;EVENTU. CMC NOP CHKSKP ;A=A AND B DB #F DB #9 ANA C NOP NOP CHKSKP ;A=A OR,B DB #F DB #A ORA C NOP NOP CHKSKP ;A=A XOR B DB #F DB #B XRA C NOP NOP CHKSKP ;A= -1 DB #F DB #C XRA A CMA NOP CHKSKP ;INPUTBEFEHL: A=BSHALT DB #F DB #D IN BSHALT NOP RET ;SYSTEM 1************************************************* ;ALU MIT CODIERUNG CODALU: IN BSHALT MOV C,A IN ASHALT STC CMC CALL OPCODE JMP DISPLY ;SYSTEM 2*************************************** ;AKKUMULATOR AKKUM: MOV A,E ;AKKU IN REG E:(ACC) WIRD ANGEZEIGT CALL SFLANK #10 DW DISPLY ;WARTE AUF TAKT IN BSHALT MOV C,A MOV A,E CALL OPCODE MOV E,A JMP DISPLY ;SYSTEM 3********************************************** ;AKKUMULATOR MIT SPEICHER AKKSPI: MOV A,E ;ACC IN REG E PUSH PSW IN ASHALT ;LADE OPCODE BITS 7-4 ;UND ADRESSE BITS 3-0 PUSH PSW ANI #F ;SPALTE ADRESS AB MOV L,A POP PSW ;BEFEHL KOMMT ZURUECK RAR RAR RAR RAR ANI #F ;SPALTE OP-CODE AB MOV H,A ;ZWISCHENSPEICHER FUER OP-CODE POP PSW CALL SRCKJP DB #4 DB #4 DW DEPOST CALL SRCKJP DB #2 DB #2 DW EXAMIN CALL SFLANK DB #10 DW DISPLY ;WARTE AUF TAKT PUSH B MOV B,H ;OP-CODE INS B-REG MVI H,RAMPAG ;H:L ENTHAELT JETZT ADRESS MOV C,M CALL OPCODE ;HOLE OPERANDEN MOV E,A ;SYSTEM-AKKU ZURUECK CALL SRCKJP ;OP-CODE NOCH IN B: STORE? DB #F DB #E DW STORE POP B JMP DISPLY DEPOST: IN BSHALT STORND: MVI H,RAMPAG MOV M,A JMP DISPLY EXAMIN: MVI H,RAMPAG MOV A,M JMP DISPLY STORE: POP B JMP STORND ;SYSTEM 4****************************************** ;BASIC COMPUTER ;REGISTER ZUORDNUNG ;FLAGS ;DST;ARBEITSREGISTER A ;BEFEHLSREGISTER B ;SRC C ;LETZTER BEFEHL D ;AKKU E ;PC-HIGH H ;PC-LOW L BASIC: PUSH PSW ;RETTE CARRY MOV A,L ;MASK UEBERFLUESSIGE BITS IM PC WEG. RUN-LAMPE ANI #F MOV L,A POP PSW PUSH H ;SPEICHERE PC MOV A,E MVI H,RAMPAG PUSH PSW ;CARRY WIRD GESPEICHERT IN ASHALT ;HOLE MEMORY ADDRESS ANI #F CHKSKP ;LOAD ADDRESS? DB #1 DB #1 MOV L,A ;JA NOP NOP CALL SRCKJP ;EXAMINE? DB #2 DB #2 DW EXAM2 ;JA CALL SFLANK ;DEPOSIT DB #4 DW BASIC2 JMP DPOST2 ;DEPOSIT NUR WENN CALL SFLANK IN BIT 2 GEFUNDEN BASIC2: MOV A,E CALL SRCKJP ;00:10 DB #8 DB #0 DW DSPLY2 ;WARTE AUF START CALL SRCKJP ;01 DB #18 DB #8 DW NORMAL ;RECHNER LAUEFT NORMAL CALL SFLANK ;RECHNER LAUEFT IN SINGLE STEP MODE DB #8 DW DSPLY2 ;WARTE AUF TAKT BIT 3 NORMAL: MOV A,M ;FETCH ANI 360 CPI 360 ;HALT BEFEHL MOV A,E JZ DSPLY2 MOV A,M ;FETCH PUSH PSW ANI 17 ;ISOLIERE ADRESSTEIL DER INSTRUKTION MOV L,A POP PSW ;GANZE INSTRUKTION ZURUECK RAR ;ISOLIERE OPCODE RAR RAR RAR ANI 17 MOV H,A ;ZWISCHENSPEICHER FUER OP-CODE POP PSW ;CARRY KOMMT ZURUECK PUSH B ;WEGEN OP-CODE MOV B,H ;OP-CODE INS BEFEHLSREGISTER MVI H RAMPAG MOV C,M ;OPERANDEN WERDEN GEHOLT CALL OPCODE MOV E,A ;NEUER WERT DES AKKU CHKSKP ;STORE 17 16 MVI H RAMPAG ;JA MOV M,A ;ADRESSTEIL DER INSTRUKTION NOCH IN L POP B POP H ;BRINGE PC ZURUECK PUSH PSW MOV A,L ;INCREMENT PC INR A ANI 17 ORI 100 ;SETZE RUN LAMPE MOV L,A MOV A,E JMP DSPLY2 EXAM2: DCR L MOV A,M INR L DSPLY2: STA 377 ;OUT RLAMPE MOV A,L RAL RAL RAL MOV H,A POP PSW MOV A,H RAL STA 376 ;OUT LLAMPE RAR CALL SFLANK 6 DW START INR L ;INC P.C JMP START DPOST2: MVI A 345 ;IN BSHALT MOV M,A JMP DSPLY2