Zeile | Marke | Adresse | Hex-Code | Assembler-Code | Kommentar |
0001 | ORG 02000H | ;Adresse Programmbeginn | |||
0002 | 02000H | 3A 2A 20 | LD A,(0202AH) | ;NMI vorbereiten | |
0003 | 02003H | 32 41 23 | LD (02341h),A | ;dazu 2341H und 2342H | |
0004 | 02006H | 3A 2B 20 | LD A,(0202BH) | ;mit entsprechenden Werte | |
0005 | 02009H | 32 42 23 | LD (02342H),A | ;laden | |
0006 | N1: | 0200CH | 3C | INC A | ;A inkrementieren... |
0007 | 0200DH | 18 FD | JR N1 | ;...bis der NMI ausgelöst wird | |
0008 | 0200FH | 32 2E 20 | LD (0202EH),A | ;ersten Wert in Speicher schreiben T(200F) | |
0009 | 02012H | 3A 2C 20 | LD A,(0202CH) | ;NMI für Zweiten Wert vorbereiten | |
0010 | 02015H | 32 41 23 | LD (02341H),A | ;wieder 2341H und 2342H modifizieren | |
0011 | 02018H | 3A 2D 20 | LD A,(0202DH) | ;entsprechende Werte... | |
0012 | 0201BH | 32 42 23 | LD (02342H),A | ;auf die Speicherzellen | |
0013 | N3: | 0201EH | 3C | INC A | ;zweiten Wert ermitteln |
0014 | 0201FH | 18 FD | JR N3 | ;also A inkrementieren bis NMI | |
0015 | 02021H | 32 2F 20 | LD (0202FH),A | ;zweiten Wert in Speicher schreiben | |
0016 | 02024H | 18 1A | JR EINGABE | ;Springe zur Eingabe, über Daten Hinweg | |
0017 | SETBASE 0202AH | ; | |||
0018 | 0202AH | 0F | DEFB 00FH | ;für NMI-Umlenkung | |
0019 | 0202BH | 20 | DEFB 020H | ; | |
0020 | 0202CH | 21 | DEFB 021H | ; | |
0021 | 0202DH | 20 | DEFB 020H | ; | |
0022 | 0202EH | 00 | DEFB 000H | ;für BerecHnungsgrundlage | |
0023 | 0202FH | 00 | DEFB 000H | ; | |
0024 | 02030H | 00 | DEFB 000H | ;für DAK | |
0025 | 02031H | 00 | DEFB 000H | ; | |
0026 | 02032H | 00 | DEFB 000H | ; | |
0027 | 02033H | 00 | DEFB 000H | ; | |
0028 | 02034H | 48 | DEFB 048H | ; | |
0029 | 02035H | 68 | DEFB 068H | ; | |
0030 | SETBASE 02040H | ; | |||
0031 | EINGABE: | 02040H | DD 21 30 20 | LD IX,02030H | ;Pointer setzen |
0032 | 02044H | CD 5A 08 | CALL 0085AH | ;"nr" Anzeigen lassen per DAK1 | |
0033 | 02047H | 32 36 20 | LD (02036H),A | ;eingetippten Wert speichern | |
0034 | 0204AH | DD 21 30 20 | LD IX,02030H | ;selbes Prozedere für zweiten Wert | |
0035 | 0204EH | CD 5A 08 | CALL 0085AH | ;"nr" Anzeigen lassen per DAK1 | |
0036 | 02051H | 32 37 20 | LD (02037H),A | ;erst einmal sicher | |
0037 | 02054H | 3A 36 20 | LD A,(02036H) | ;nochmal erste Ziffer holen | |
0038 | 02057H | CB 27 | SLA A | ;viermal nach links schieben | |
0039 | 02059H | CB 27 | SLA A | ;so wird aus der letzen Ziffer | |
0040 | 0205BH | CB 27 | SLA A | ;die erste Ziffer | |
0041 | 0205DH | CB 27 | SLA A | ; | |
0042 | 0205FH | 47 | LD B,A | ;das ganze nach B | |
0043 | 02060H | 3A 37 20 | LD A,(02037H) | ;A mit zweiter Ziffer laden | |
0044 | 02063H | 80 | ADD A,B | ;Gesamtwert errechnen | |
0045 | M7: | 02064H | 32 38 20 | LD (02038H),A | ;sichern! LD(2038H), A |
0046 | 02067H | 3A 38 20 | LD A,(02038H) | ;schauen, wie viele Zahlen gewünscht #### | |
0047 | 0206AH | FE 32 | CP 032H | ;bitte nicht mehr als 50d (=32H) | |
0048 | 0206CH | 38 07 | JR C,A_OK | ;weniger? In Ordnung | |
0049 | 0207EH | 28 05 | JR Z,A_OK | ;genau 50d? In Ordnung | |
0050 | 02070H | 3E 32 | LD A,032H | ;zuviel, also 32H festlegen | |
0051 | 02072H | 32 38 20 | LD (02038H),A | ;und sichern | |
0052 | A_OK: | 02075H | 21 00 22 | LD HL,02200H | ;ab hier Zahlen in Speicher |
0053 | 02078H | 3A 38 20 | LD A,(02038H) | ;wie viele Zahlen gebraucht? | |
0054 | 0207BH | 5F | LD E,A | ;nach E | |
0055 | ERZEUGEN: | 0207CH | 3A 2E 20 | LD A,(0202EH) | ;erster Faktor, Sprungziel |
0056 | 0207FH | 47 | LD B,A | ;nach B für DJNZ | |
0057 | 02080H | 34 2F 20 | LD A,(0202FH) | ;zweiter Faktor | |
0058 | 02083H | 4F | LD C,A | ;nach C | |
0059 | 02084H | 05 | DEC B | ;für die Multiplikation | |
0060 | N5: | 02085H | 81 | ADD A,C | ;C B mal zu A addieren |
0061 | 02086H | 10 FD | DJNZ N5 | ;mit DJNZ | |
0062 | 02088H | 17 | RLA | ;damit es bei 00 keinen Hänger gibt | |
0063 | 02089H | 77 | LD (HL),A | ;Zufallszahl speichern | |
0064 | 0208AH | 32 2E 20 | LD (0202EH),A | ;mit A wird als Faktor weitergerechnet | |
0065 | 0208DH | 23 | INC HL | ;auf nächste Speicherzelle rutschen | |
0066 | 0208EH | 1D | DEC E | ;eine Zahl weniger noch zu erzeugen | |
0067 | 0208FH | 7B | LD A,E | ;für den Vergleich | |
0068 | 02090H | 20 EA | JR NZ,ERZEUGEN | ;wenn nicht fertig, dann weiter machen! | |
0069 | 02092H | 3A 38 20 | LD A,(002038H) | ;Lade Anzahl der Werte | |
0070 | 02095H | 3D | DEC A | ;Dekrementiere A | |
0071 | 02096H | 32 FF 21 | LD (021FFH),A | ;Speichere A in 21FFH | |
0072 | 02099H | 3E 00 | LD A, 000H | ;Lade A mit 00H | |
0073 | 0209BH | 32 FE 21 | LD (021FEH),A | ;Speichere 00H in 21FEH | |
0074 | 0209EH | 18 6C | JR M6 | ;Springe zur Anzeiger der Zahlen | |
0075 | ;<<Sortieren | ||||
0076 | BUBBLE: | 020A0H | DD 21 00 00 | LD IX,00000H | ;Vergleichanzahlreg. |
0077 | 020A4H | FD 21 00 00 | LD IY,00000H | ;Austauschanzahlreg. | |
0078 | START: | 020A8H | 16 00 | LD D,000H | ;Resete Statusreg. (dient zur Kontrolle für Austausch) mit 00H |
0079 | 020AAH | 21 00 22 | LD HL,02200H | ;Lade HL mit Zahlenfolgestartadresse | |
0080 | 020ADH | 3A FF 21 | LD A,(021FFH) | ;Lade A mit Anzahl der Werten | |
0081 | 020B0H | 47 | LD B,A | ;Speichere Anzahl der Werte in B | |
0082 | 020B1H | 7E | LD A,(HL) | ;Lade A mit erster Zahl | |
0083 | VGL: | 020B2H | 4F | LD C,A | ;Lade C mit Vergleichswert 1 |
0084 | 020B3H | 23 | INC HL | ;Inkrementiere HL | |
0085 | 020B4H | 7E | LD A,(HL) | ;Lade A mit Vergleichswert 2 | |
0086 | 020B5H | DD 23 | INC IX | ;Inkrementiere IX -> Anzahl der Vergleich | |
0087 | 020B7H | B9 | CP C | ;Vergleiche C und A | |
0088 | 020B8H | 38 09 | JR C,AUS | ;Springe zu AUS wenn < C (CARRY FLAG) | |
0089 | M2: | 020BAH | 10 F6 | DJNZ VGL | ;B:=B-1 -> Springe zu VGL wenn B <> 0 |
0090 | 020BCH | 7A | LD A,D | ;Lade A mit D -> D=000H Kein Austausch D=0FFH Austausch | |
0091 | 020BDH | FE FF | CP 0FFH | ;Vergleiche A mit FFH | |
0092 | 020BFH | 28 E7 | JR Z,START | ;Springe zu START wenn A=0FFH (ZERO FLAG) | |
0093 | 020C1H | 18 0B | JR M4 | ;Springe zu M4 -> Anzeige von IX und IY | |
0094 | AUS: | 020C3H | FD 23 | INC IY | ;Inkrementiere IY -> Anzahl der Austausche |
0095 | 020C5H | 16 FF | LD D,0FFH | ;Aktiviere D mit FFH | |
0096 | 020C7H | 2B | DEC HL | ;Dekrementiere HL (VORIGE ADRESSE) | |
0097 | 020C8H | 77 | LD (HL),A | ;Speichere Wert 2 (Reg. A) in HL | |
0098 | 020C9H | 23 | INC HL | ;Inkrementiere HL | |
0099 | 020CAH | 79 | LD A,C | ;Lade A mit Wert 1 (Reg. C) | |
0100 | 020CBH | 77 | LD (HL),A | ;Speichere Wert 1 (Reg. C) in HL | |
0101 | 020CCH | 18 EC | JR M2 | ;Springe zu M2 | |
0102 | M4: | 020CEH | 3E 00 | LD A,000H | ;Lade A mit 00H |
0103 | 020D0H | 32 F3 23 | LD (023F3H),A | ;Speichere 00H in 23F3H | |
0104 | 020D3H | 18 02 | JR VGL1 | ;Springe zu VGL1 | |
0105 | VGL2: | 020D5H | DD E1 | POP IX | ;Lade aus Speicher IX |
0106 | VGL1: | 020D7H | DD 7C | LD A,IXH | ;Lade DE aus IX |
0107 | 020D9H | 57 | LD D,A | ;Lade DE aus IX | |
0108 | 020DAH | DD 7D | LD A,IXL | ;Lade DE aus IX | |
0109 | 020DCH | 5F | LD E,A | ;Lade DE aus IX | |
0110 | 020DDH | CD B7 08 | CALL 008B7H | ;Rufe DADP | |
0111 | 020E0H | 3E E0 | LD A,0E0H | ;Lade A mit E0H (=V) | |
0112 | 020E2H | 32 F2 23 | LD (023F2H),A | ;Speichere E0H in 23F2H | |
0113 | 020E5H | DD E5 | PUSH IX | ;Speichere in Speicher IX | |
0114 | ANZEIG: | 020E7H | DD 21 F2 23 | LD IX,023F2H | ;Lade IX mit 23F2H |
0115 | 020EBH | CD 5A 08 | Call 085AH | ;Rufe DAK1 | |
0116 | 020EEH | FE 10 | CP 010H | ;ob "+" gedrückt wurde | |
0117 | 020F0H | 28 E3 | JR Z,VGL2 | ;Springe wenn "+" zu VGL2 | |
0118 | 020F2H | FE 11 | CP 011H | ;ob "-" gedrückt wurde | |
0119 | 020F4H | 28 06 | JR Z,AUS1 | ;Springe wenn "-" zu AUS1 | |
0120 | 020F6H | FE 12 | CP 012H | ;ob "EXE" gedrückt wurde | |
0121 | 020F8H | 28 12 | JR Z,M6 | ;Springe wenn "EXE" zu M6 | |
0122 | 020FAH | 18 EB | JR ANZEIG | ;Springe zu ANZEIG | |
0123 | AUS1: | 020FCH | FD 7C | LD A,IYH | ;Lade DE aus IY |
0124 | 020FEH | 57 | LD D,A | ;Lade DE aus IY | |
0125 | 020FFH | FD 7D | LD A,IYL | ;Lade DE aus IY | |
0126 | 02101H | 5F | LD E,A | ;Lade DE aus IY | |
0127 | 02102H | CD B7 08 | CALL 008B7H | ;Rufe DADP | |
0128 | 02105H | 3E 6F | LD A,06FH | ;Lade A mit 6FH | |
0129 | 02107H | 32 F2 23 | LD (023F2H),A | ;Speichere 6FH in 23F2H | |
0130 | 0210AH | 18 DB | JR ANZEIG | ;Springe zu ANZEIG | |
0131 | ;<<Anzeige | ||||
0132 | M6: | 0210CH | 11 00 22 | LD DE,02200H | ;Lade DE mit 2200H |
0133 | M5: | 0210FH | 1A | LD A,(DE) | ;Lade den Wert aus 2200H in A |
0134 | 02110H | 21 F2 22 | LD HL,022F2H | ;Speichere 022F2H in HL | |
0135 | 02113H | CD D9 08 | CALL 008D9H | ;Rufe TWOSEG | |
0136 | 02116H | 7B | LD A,E | ;Lade A mit E | |
0137 | 02117H | 21 F5 22 | LD HL,022F5H | ;Speichere 022F5H in HL | |
0138 | 0211AH | CD D9 08 | CALL 008D9H | ;Rufe TWOSEG | |
0139 | 0211DH | DD 21 F2 22 | LD IX,022F2H | ;Lade IX mit 22F2H | |
0140 | ANZ1: | 02121H | CD 5A 08 | CALL 085AH | ;Rufe DAK1 |
0141 | 02124H | FE 10 | CP 010H | ;ob "+" gedrückt wurde | |
0142 | 02126H | 28 0A | JR Z,PLUS | ;Springe wenn "+" zu PLUS | |
0143 | 02128H | FE 11 | CP 011H | ;ob "-" gedrückt wurde | |
0144 | 0212AH | 28 0F | JR Z,MINUS | ;Springe wenn "-" zu MINUS | |
0145 | 0212CH | FE 12 | CP 012H | ;ob "EXE" gedrückt wurde | |
0146 | 0212EH | 28 13 | JR Z,WEITER | ;Springe wenn "EXE" zu WEITER | |
0147 | 02130H | 18 EF | JR ANZ1 | ;Springe zu ANZ1 | |
0148 | PLUS: | 02132H | 3A FF 21 | LD A,(021FFH) | ;Lade A mit Anzahl der Zahlen |
0149 | 02135H | BB | CP E | ;Vergleiche A mit E | |
0150 | 02136H | 28 D7 | JR Z,M5 | ;Wenn gleich springe zurück | |
0151 | 02138H | 13 | INC DE | ;Inkrementiere DE | |
0152 | 02139H | 18 D4 | JR M5 | ;Springe auf M5 | |
0153 | MINUS: | 0213BH | 7B | LD A,E | ;Lade A mit E |
0154 | 0213CH | FE 00 | CP 000H | ;Vergleiche Position mit 00H | |
0155 | 0213EH | 28 CF | JR Z,M5 | ;Wenn Zero dann springe zu M5 | |
0156 | 02140H | 1B | DEC DE | ;Dekrementiere DE | |
0157 | 02141H | 18 CC | JR M5 | ;Springe zu M5 | |
0158 | WEITER: | 02143H | 3A FE 21 | LD A,(021FEH) | ;Lade A mit Status aus 021FEH |
0159 | 02146H | FE 00 | CP 000H | ;Vergleiche Status mit 00H | |
0160 | 02148H | CA A0 20 | JP Z,BUBBLE | ;Wenn dann springe zu BUBBLE | |
0161 | 0214BH | FE FF | CP 0FFH | ;Vergleiche Status mit FFH | |
0162 | 0214DH | 28 02 | JR Z,STOP | ;Wenn dann springe zu STOP | |
0163 | 0214FH | 18 D0 | JR ANZ1 | ;Springe zu ANZ1 | |
0164 | STOP: | 02151H | 76 | HALT | ;Stopp |
0165 | |||||
0166 | SETBASE 022F2H | ||||
0167 | 022F2H | 00 | DEFB 000H | ||
0168 | 022F3H | 00 | DEFB 000H | ||
0169 | 022F4H | 08 | DEFB 008H | ||
0170 | 022F5H | 00 | DEFB 000H | ||
0171 | 022F6H | 00 | DEFB 000H | ||
0172 | 022F7H | 4F | DEFB 04FH |
Download:
>
Aside (ZIP) - Download <