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 <