;:open4,4 ;:sys36864; assembler starten ;.opt p4 ; assembler - option *= $c000 ; startadresse ; inform - routine ; nh-230890-arr ; syntax = sys 49152, len, var$ getx =$b7f1 ; holt wert nach sys komma =$aefd ; holt komma nach sys frestr =$b6a3 ; string vorbereiten strres =$b475 ; platz fuer string reservieren findvar =$b08b ; variable nach sys holen tmp =2 ; eingabezaehler len =3 ; maximale laenge strout =$ab1e ; text ausgeben para =$61 ; stringparameter varadr =$49 ; adresse der variablen crs1 =$cc ; cursor on/off crs2 =$cd ; cursor blinkstatus crs3 =$cf ; cursor hell/dunkel latch =$334 ; eingabepuffer get =$ffe4 ; gedrueckte taste holen print =$ffd2 ; zeichen ausgeben quote =212 ; hochkommamodus ret =$aad7 ; crlf ausgeben inform jsr getx ; maximale eingabelaenge nach x holen stx len ; und merken jsr komma ; komma holen jsr findvar ; variable holen sta varadr ; adresse low sty varadr+1 ; und high merken jsr frestr ; auf string testen ldx #0 ; eingabe vorbereiten stx tmp ; zeichenzaehler keylp lda #0 sta crs1 ; cursor einschalten wait jsr get ; taste holen beq wait ; auf taste warten ldx #1 ; cursor stx crs2 ; dunkelschalten coff ldx crs3 ; warten, bis cursor bne coff ; ausgeblinkt hat inc crs1 ; cursor ausschalten cmp #13 ; return-taste pruefen bne text ; nein, dann unten weiter ; return-taste beendet eingabe lda tmp ; anzahl der eingegebenen zeichen jsr strres ; platz fuer text im speicher ldy #2 ; descriptor kopieren setpar lda para,y sta (varadr),y ; in variable schreiben dey ; weiter bpl setpar ; noch nicht null iny ; ergibt null settxt cpy tmp ; schon alle zeichen kopiert beq carried ; ja, dann fertig lda latch,y ; ein zeichen der eingabe lesen sta (para+1),y ; in string schreiben iny ; naechstes zeichen bne settxt ; unbedingter sprung carried jmp ret ; fertig, neue bildschirmzeile ; eingabe auswerten text cmp #20 ; del-taste pruefen beq del ; ja, dann ein zeichen loeschen ; pruefen, ob eingabe druckbar cmp #32 ; kleiner als 32 bcs ok1 ; nein, ok ; zeichen nicht druckbar wrong jmp keylp ; dann eingabe ignorieren ok1 tax ; n-flag setzen bpl ok ; kleiner 128, dann ok cmp #149 ; kleiner 149, bcc wrong ; dann falsch cmp #156 ; kleiner 156, bcc ok ; dann ok cmp #160 ; kleiner 160, bcc wrong ; dann ok ; zeichen druckbar ok ldx tmp ; nr. des zeichens in text cpx len ; maximale laenge pruefen bcs wrong ; eingabe zu lang sta latch,x ; eingabe speichern jsr print ; und ausgeben lda #0 ; quotemodus loeschen sta quote ; (falls anf.zeichen) inc tmp ; nummer erhoehen jmp keylp ; naechste eingabe ; delete-taste del ldx tmp ; erstes zeichen beq wrong ; dann ungueltig lda #delt ; ausgeben jsr strout ; string ausgeben dec tmp ; und zeichen loeschen jmp keylp ; naechste eingabe ; delete-text delt .byte "\x9d \x9d" ; crsr links, space, crsr links .byt 0 ; stringende ; .end