; Quelltext CHRCHA.ASM/.PRN zu CHRCHA.COM ; mit Z-80 Public-Domain Assembler ; ZMAC/ZLINK (Vertrieb Kotulla) ; ; by Horst Buchholz, 3116 Bienenbuettel $' ; 18.1.1989 ; jr start titel: db ' CHRCHA.COM by Buchholz 1.89 $' ; start: ld de,string1 ; Hinweistext 1 call stringex ld de,string2 ; Hinweistext 2 call stringex ; call bytein ; Eingabe Zeichen-Nr. push af ; sichern bis Zeile 58 ld l,a ld h,0 ; Zeichen-Nr. in HL add hl,hl add hl,hl add hl,hl ; * 8, da 8 Bytes ld de,0b800h ; Anfang Zeichenmatrix add hl,de ; Adresse Zeichen- push hl ; anfang sichern ; ld de,string3 ; Hinweistext 3 call stringex ld de,string4 ; Hinweistext 4 call stringex ; ld a,8 ; Schleifenzaehler ld hl,tabelle ; Speicher fuer 8 Bytes loop: dec a ; - 1 je Durchlauf push af ; Wert sichern bis 'X' push hl ; Wert sichern bis 'Y' call bytein ; Eingabe 8 Bytes pop hl ; 'Y' = in Adresse HL ld (hl),a ; naemlich Tabelle inc hl ; Vektor HL + 1 pop af ; 'X' = Zaehlwert cp 0 ; schon 8-mal ? jr nz,loop ; wenn nein, nochmal ; di ld a,82h ; Adresse 8000-BFFF out (0f2h),a ; Screen-Bank ld hl,tabelle ; Quelle pop de ; Ziel ab B800 ld bc,8 ; 8 Bytes ldir ; kopieren ld a,86h ; Adresse 8000-BFFF out (0f2h),a ; wieder TPA (Bank 1) ei ; ld de,string5 ; Hinweistext 5 call stringex pop af ; Zeichen-Nr. holen ld e,a ; neu gestaltetes ld c,2 ; Zeichen mit BDOS # 2 call 0005 ; anzeigen ld de,string6 ; 2 Leerzeilen call stringex ; call 0000 ; ENDE ; ; ; UNTERPROGRAMME ; stringex: ld c,9 ; BDOS # 9 call 0005 ret ; bytein: call asciiin ; Input 10-er-Stelle rlca rlca ; 4-mal RLCA rlca ; weil Zehnerstelle rlca push af ; 10-er sichern call asciiin ; Input 1-er-Stelle pop bc ; 10-er holen add a,b ; zu 1-er addieren push af ; vor BDOS # 2 retten ld e,20h ld c,2 ; BDOS # 2 (Space) call 0005 pop af ; Eingabe-Byte in A ret ; asciiin: ld c,1 ; BDOS # 1 call 0005 call hexok ; Hexa-Zahl ? cp 0ffh ; als falsch erkannt ? jr z,asciiin ; dann nochmal ret ; hexok: cp 67h ; 'g' oder mehr ? jp p,wrong cp 60h ; 'a' bis 'f' ? jp p,lower cp 47h ; 'G' oder mehr ? jp p,wrong cp 40h ; 'A' bis 'F' ? jp p,upper cp 3ah ; mehr als '9' ? jp p,wrong cp 30h ; '0' bis '9' ? jp p,chiffre ; wrong: ld e,7 ; BEEP ld c,2 call 0005 ld e,8 ; BACKSPACE ld c,2 call 0005 ld a,0ffh ; Fehler-Kennung ret ; lower: sub 20h ; a-f wird A-F upper: sub 7h ; A-F wird 10-16 chiffre: sub 30h ; ASCII wird Wert 0-F ret ; ; ; SPEICHERBEREICHE ; tabelle: db 00,00,00,00,00,00,00,00 string1: db 0ah,0ah,0dh,' --- ZEICHENAENDERUNG ---$' string2: db 0ah,0ah,0dh,'Bitte Hexa-Nr des Zeichens ..... $' string3: db 0ah,0ah,0dh,' 1 2 3 4 5 6 7 8$' string4: db 0ah,0ah,0dh,'8 Bytes = $' string5: db 0ah,0ah,0dh,'So sieht es jetzt aus .......... $' string6: db 0ah,0ah,0dh,'$' ; END