00000h ORG 02000H ; 02000h 3E0F PIOINIT: LD A,00FH ;Byte-Ausgabe 02002h D3DE OUT (0DEH),A ;USER-PIO 2 Kanal A programmiert 02004h D3DF OUT (0DFH),A ;USER-PIO 2 Kanal B programmiert 02006h DD216121 LD IX,ANZ ;Anzeigeregister laden 0200Ah CD5A04 ABFRAGE: CALL 0045AH ;CALL DAK1 0200Dh FE10 CP 010H ;erreicht bei Taste -> vgl. Tastenwert auf 10H 0200Fh DA9820 JP C,ZAHL ;Zahlentaste gedrückt 02012h CACD20 JP Z,PLUS ;+ gedrückt 02015h FE11 CP 011H ;Tastenwert - 02017h CADA20 JP Z,MINUS ;- gedrückt 0201Ah FE12 CP 012H ;Tastenwert EX 0201Ch 2810 JR Z,EXECUTE ;M on / off 0201Eh FE14 CP 014H ;Tastenwert DAT 02020h 286D JR Z,DATA ;ZaHl B eingeben 02022h FE19 CP 019H ;Tastenwert ADR 02024h 2860 JR Z,ADDRESS ;ZaHl A eingeben 02026h FE1E CP 01EH ;Tastenwert ST 02028h 2854 JR Z,STORE ;Steuerworteingabe 0202Ah FE1F CP 01FH ;Tastenwert LD 0202Ch 2828 JR Z,LOAD ;Cn on / off 0202Eh DDE5 EXECUTE: PUSH IX ;IX retten, da wir was neues anzeigen 02030h 3A5D21 LD A,(MS) ;M-Ausgangswert vom RAM laden 02033h FE10 CP 010H ;10H, da B4 auf PIO-Ausgabe 02035h 380B JR C,M1 ;wenn Carry, dann 00H -> überspringen der "0-Setzung" 02037h 3E00 LD A,000H ;"0-Setzung" 02039h 325D21 LD (MS),A ;Zurück auf den RAM 0203Ch DD214821 LD IX,MOFF ;"M off" anzeigen 02040h 1809 JR M2 ;Überspringen der "20H-Setzung" 02042h 3E10 M1: LD A,010H ;10H, da B4 auf PIO-Ausgabe 02044h 325D21 LD (MS),A ;Zurück auf den RAM 02047h DD214221 LD IX,MON ;"M on" anzeigen 0204Bh 0664 M2: LD B,064H ;Anzeigedauer 0204Dh CD8304 M3: CALL 00483H ;CALL DAK2 02050h 10FB DJNZ M3 ;wiederHolen der Anzeige bis B=0 02052h DDE1 POP IX ;altes IX wiederHolen 02054h 18B4 JR ABFRAGE ;und wieder zur Abfrage 02056h DDE5 LOAD: PUSH IX ;vorHeriges IX retten 02058h 3A5E21 LD A,(CN) ;Cn-Ausgangswert vom RAM laden 0205Bh FE20 CP 020H ;20H, da B5 auf PIO-Ausgabe 0205Dh 380B JR C,M4 ;auf Routine, wenn 00H 0205Fh 3E00 LD A,000H ;ansonsten 00H setzen 02061h 325E21 LD (CN),A ;00H-Zustand auf RAM ablegen 02064h DD215421 LD IX,CNOFF ;Anzeigewert für "Cn off" laden 02068h 1809 JR M5 ;überspringen der 20H Setzung 0206Ah 3E20 M4: LD A,020H ;20H, da B5 auf PIO-Ausgabe 0206Ch 325E21 LD (CN),A ;20H-Zustand auf RAM ablegen 0206Fh DD214E21 LD IX,CNON ;Anzeigewert für "Cn on" laden 02073h 0664 M5: LD B,064H ;1 Sekunde Anzeigezeit 02075h CD8304 M6: CALL 00483H ;den aktuellen Zustand anzeigen 02078h 10FB DJNZ M6 ;und das Ganze 1 Sekunde lang 0207Ah DDE1 POP IX ;vorheriges IX wiederHolen 0207Ch 188C JR ABFRAGE ;und zurück zur Abfrage 0207Eh DD213C21 STORE: LD IX,ANZST ;"S 0X"-Anzeige laden 02082h 0E10 LD C,010H ;Status auf Steuerwort (=10H) setzen 02084h 1884 JR ABFRAGE ;und zurück zur Abfrage 02086h DD213021 ADDRESS: LD IX,ANZA ;"A 0X"-Anzeige laden 0208Ah 0E00 LD C,000H ;Status auf Zahl A (=00H) setzen 0208Ch C30A20 JP ABFRAGE ;und zurück zur Abfrage 0208Fh DD213621 DATA: LD IX,ANZB ;"B 0X"-Anzeige laden 02093h 0E01 LD C,001H ;Status auf Zahl B (=01H) setzen 02095h C30A20 JP ABFRAGE ;und zurück zur Abfrage 02098h F5 ZAHL: PUSH AF ;AF retten 02099h 79 LD A,C ;Status "umladen" 0209Ah FE10 CP 010H ;Steuerwort als Status? 0209Ch 2808 JR Z,STIN ;zur Steuerwort-Eingabe 0209Eh FE00 CP 000H ;Zahl A als Status? 020A0h 2811 JR Z,AIN ;zur ZaHl A-Eingabe 020A2h FE01 CP 001H ;Zahl B als Status? 020A4h 281A JR Z,BIN ;zur Zahl B-Eingabe 020A6h F1 STIN: POP AF ;AF holen 020A7h 325C21 M8: LD (ST),A ;aktuelles Steuerwort laden 020AAh CDCA04 CALL 004CAH ;CALL ONESEG 020ADh 323C21 LD (ANZST),A ;Anzeigewert auf RAM ablegen 020B0h C30A20 JP ABFRAGE ;und zurück zur Abfrage 020B3h F1 AIN: POP AF ;AF holen 020B4h 325A21 M9: LD (ZAHLA),A ;aktuelle Zahl A laden 020B7h CDCA04 CALL 004CAH ;CALL ONESEG 020BAh 323021 LD (ANZA),A ;Anzeigewert auf RAM ablegen 020BDh C30A20 JP ABFRAGE ;und zurück zur Abfrage 020C0h F1 BIN: POP AF ;AF holen 020C1h 325B21 M10: LD (ZAHLB),A ;aktuelle Zahl B laden 020C4h CDCA04 CALL 004CAH ;CALL ONESEG 020C7h 323621 LD (ANZB),A ;Anzeigewert auf RAM ablegen 020CAh C30A20 JP ABFRAGE ;und zurück zur Abfrage 020CDh 79 PLUS: LD A,C ;Status "umladen" 020CEh FE00 CP 000H ;Zahl A als Status? 020D0h 2815 JR Z,APLUS ;zur A-Erhöhung 020D2h FE01 CP 001H ;Zahl B als Status? 020D4h 281F JR Z,BPLUS ;zur B-Erhöhung 020D6h FE10 CP 010H ;Steuerwort als Status? 020D8h 2826 JR Z,STPLUS ;zur Steuerwort-Erhöhung 020DAh 79 MINUS: LD A,C ;Status "umladen" 020DBh FE00 CP 000H ;ZaHl A als Status? 020DDh 282C JR Z,AMINUS ;zur A-Verringerung 020DFh FE01 CP 001H ;ZaHl B als Status? 020E1h 2833 JR Z,BMINUS ;zur B-Verringerung 020E3h FE10 CP 010H ;Steuerwort als Status? 020E5h 283A JR Z,STMINUS ;zur Steuerwort-Verringerung 020E7h 3A5A21 APLUS: LD A,(ZAHLA) ;aktuellen Wert von A laden 020EAh 3C INC A ;diesen um 1 erhöhen 020EBh FE10 CP 010H ;schon 10H? -> darf nicht, da 4-Bit-Ebene 020EDh CCF220 CALL Z,PLUS10 ;wenn ja müssen wir das ändern 020F0h 18C2 JR M9 ;zur A-Aktualisierung in A-Eingabe 020F2h 3E00 PLUS10: LD A,000H ;aus ehemals 10H jetzt 00H macHen 020F4h C9 RET ;und zurück 020F5h 3A5B21 BPLUS: LD A,(ZAHLB) ;aktuellen Wert von B laden 020F8h 3C INC A ;diesen um 1 erhöhen 020F9h FE10 CP 010H ;schon 10H? -> darf nicht, da 4-Bit-Ebene 020FBh CCF220 CALL Z,PLUS10 ;wenn ja müssen wir das ändern 020FEh 18C1 JR M10 ;zur B-Aktualisierung in B-Eingabe 02100h 3A5C21 STPLUS: LD A,(ST) ;aktuellen Wert vom Steuerwort laden 02103h 3C INC A ;diesen um 1 erhöhen 02104h FE10 CP 010H ;schon 10H? -> darf nicht, da 4-Bit-Ebene 02106h CCF220 CALL Z,PLUS10 ;wenn ja müssen wir das ändern 02109h 189C JR M8 ;zur S-Aktualisierung in B-Eingabe 0210Bh 3A5A21 AMINUS: LD A,(ZAHLA) ;aktuellen Wert von A laden 0210Eh 3D DEC A ;diesen um 1 verringern 0210Fh FEFF CP 0FFH ;schon FFH? -> darf nicht, da 4-Bit-Ebene 02111h CC2D21 CALL Z,MINUSFF ;wenn ja müssen wir das ändern 02114h 189E JR M9 ;zur A-Aktualisierung in A-Eingabe 02116h 3A5B21 BMINUS: LD A,(ZAHLB) ;aktuellen Wert von B laden 02119h 3D DEC A ;diesen um 1 verringern 0211Ah FEFF CP 0FFH ;schon FFH? -> darf nicht, da 4-Bit-Ebene 0211Ch CC2D21 CALL Z,MINUSFF ;wenn ja müssen wir das ändern 0211Fh 18A0 JR M10 ;zur B-Aktualisierung in B-Eingabe 02121h 3A5C21 STMINUS: LD A,(ST) ;aktuellen Wert vom Steuerwort laden 02124h 3D DEC A ;diesen um 1 verringern 02125h FEFF CP 0FFH ;schon FFH? -> darf nicht, da 4-Bit-Ebene 02127h CC2D21 CALL Z,MINUSFF ;wenn ja müssen wir das ändern 0212Ah C3A720 JP M8 ;zur S-Aktualisierung in S-Eingabe 0212Dh 3E0F MINUSFF: LD A,00FH ;aus ehemals FFH jetzt 0FH macHen 0212Fh C9 RET ;und zurück 02130h E7 ANZA: DEFB 0E7H ;"0" 02131h E7 DEFB 0E7H ;"0" 02132h 00 DEFB 000H ;" " 02133h 08 DEFB 008H ;"-" 02134h 00 DEFB 000H ;" " 02135h 6F DEFB 06FH ;"A" 02136h E7 ANZB: DEFB 0E7H ;"0" 02137h E7 DEFB 0E7H ;"0" 02138h 00 DEFB 000H ;" " 02139h 08 DEFB 008H ;"-" 0213Ah 00 DEFB 000H ;" " 0213Bh EA DEFB 0EAH ;"B" 0213Ch E7 ANZST: DEFB 0E7H ;"0" 0213Dh E7 DEFB 0E7H ;"0" 0213Eh 00 DEFB 000H ;" " 0213Fh 08 DEFB 008H ;"-" 02140h CA DEFB 0CAH ;"t" 02141h AE DEFB 0AEH ;"S" 02142h 00 MON: DEFB 000H ;" " 02143h 68 DEFB 068H ;"n" 02144h E8 DEFB 0E8H ;"o" 02145h 00 DEFB 000H ;" " 02146h 00 DEFB 000H ;" " 02147h 6C DEFB 06CH ;"M" 02148h 4E MOFF: DEFB 04EH ;"f" 02149h 4E DEFB 04EH ;"f" 0214Ah E8 DEFB 0E8H ;"o" 0214Bh 00 DEFB 000H ;" " 0214Ch 00 DEFB 000H ;" " 0214Dh 6C DEFB 06CH ;"M" 0214Eh 00 CNON: DEFB 000H ;" " 0214Fh 68 DEFB 068H ;"n" 02150h E8 DEFB 0E8H ;"o" 02151h 00 DEFB 000H ;" " 02152h 68 DEFB 068H ;"n" 02153h C6 DEFB 0C6H ;"C" 02154h 4E CNOFF: DEFB 04EH ;"f" 02155h 4E DEFB 04EH ;"f" 02156h E8 DEFB 0E8H ;"o" 02157h 00 DEFB 000H ;" " 02158h 68 DEFB 068H ;"n" 02159h C6 DEFB 0C6H ;"C" 0215Ah 00 ZAHLA: DEFB 000H ; 0215Bh 00 ZAHLB: DEFB 000H ; 0215Ch 00 ST: DEFB 000H ; 0215Dh 00 MS: DEFB 000H ; 0215Eh 00 CN: DEFB 000H ; 0215Fh 00 STOUT: DEFB 000H ; 02160h 00 ZAHLOUT: DEFB 000H ; 02161h 00 ANZ: DEFB 000H ;" " 02162h E3 DEFB 0E3H ;"U" 02163h C2 DEFB 0C2H ;"L" 02164h 6F DEFB 06FH ;"A" 02165h 00 DEFB 000H ;" " 02166h 00 DEFB 000H ;" " 02167h 08 DONE: DEFB 008H ;"-" 02168h CE DEFB 0CEH ;"e" 02169h 68 DEFB 068H ;"n" 0216Ah E8 DEFB 0E8H ;"o" 0216Bh E9 DEFB 0E9H ;"d" 0216Ch 08 DEFB 008H ;"-" 0216Dh F5 OUTST: PUSH AF ;alle Register, die ich brauche retten 0216Eh C5 PUSH BC ;alle Register, die ich brauche retten 0216Fh D5 PUSH DE ;alle Register, die ich brauche retten 02170h E5 PUSH HL ;alle Register, die ich brauche retten 02171h 3A5C21 LD A,(ST) ;das aktuelle Steuerwort-Zustand laden 02174h 47 LD B,A ;den auf ein anderes Register scHieben 02175h 3A5D21 LD A,(MS) ;den aktuellen M-Zustand laden 02178h 80 ADD A,B ;Steuerwort und M addieren 02179h 47 LD B,A ;das Ergebnis in das andere Register 0217Ah 3A5E21 LD A,(CN) ;den aktuellen Cn-Zustand laden 0217Dh 80 ADD A,B ;Cn zu Steuerwort und M dazuaddieren 0217Eh 325F21 LD (STOUT),A ;das Ganze auf den RAM 02181h D3DD OUT (0DDH),A ;auf User-PIO 2 Kanal B ausgeben 02183h 3A5B21 OUTZAHL: LD A,(ZAHLB) ;die aktuelle ZaHl B laden 02186h CB27 SLA A ;links schieben 02188h CB27 SLA A ;links schieben 0218Ah CB27 SLA A ;links schieben 0218Ch CB27 SLA A ;links schieben 0218Eh 47 LD B,A ;ins andere Register ablegen 0218Fh 3A5A21 LD A,(ZAHLA) ;die aktuelle Zahl A laden 02192h 80 ADD A,B ;aufaddieren 02193h 326021 LD (ZAHLOUT),A ;das Ganze auf den RAM ablegen 02196h D3DC OUT (0DCH),A ;auf User-PIO 2 Kanal A ausgeben 02198h DDE5 PUSH IX ;das vorherige IX retten 0219Ah DD216721 LD IX,DONE ;"-done-"-Anzeigewert laden 0219Eh 06FF LD B,0FFH ;FFH als Zeitkonstante 021A0h CD8304 M7: CALL 0483H ;"-done-" anzeigen 021A3h 10FB DJNZ M7 ;und zwar FFH lang 021A5h DDE1 POP IX ;altes IX wiederHolen 021A7h E1 POP HL ;alle Register, die ich brauche wiederHolen 021A8h D1 POP DE ;alle Register, die ich brauche wiederHolen 021A9h C1 POP BC ;alle Register, die ich brauche wiederHolen 021AAh F1 POP AF ;alle Register, die ich brauche wiederHolen 021ABh ED45 RETN ;Return from NMI 021ADh SETBASE 02340H ; 02340h C36D21 JP OUTST ;Sprung zur Ausgabeprozedur 02343h END ;