10 SYS9*4096:.OPT O,OO 15 *=$C000 20 XLO = $F7 ;KOORDINATEN DER LINKEN 21 YLO = $F8 ;OBEREN ECKE DES WINDOWS 22 XRU = $F9 ;KOORDINATEN DER RECHTEN 23 YRU = $FA ;UNTEREN ECKE DES WINDOWS 24 ZSP = $AA ;ZWISCHENSPEICHER 26 FKEY = $FB ;SPEICHER F. FTASTEN 28 CNT = $57 ;ZAEHLER 30 CUX = $A8 ;RELATIVE CURSORPOSITION 31 CUY = $A9 ;INNERHALB DES WINDOWS 32 POL = $AA ;ZWEI-BYTE ZAEHLER 33 POH = $AB ;FUER DIVERSE ZWECKE 34 POS = $FC ;POSITION IM TEXTSPEICHER 36 ZBR = $FD ;BREITE DES WINDOWS 38 ZAN = $FE ;HOEHE DES WINDOWS 40 MPOS = $FF ;LAENGE DES TEXTSPEICHERS 42 STZ = $22 ;STRINGZEIGER 44 STAT = $90 ;STATUS - BYTE 46 CFLG = $CC ;FLAG FUER CURSOR 48 CREP = $CD ;ZAEHLER F. CURSORBLINKEN 50 IFLG = $11 ;FLAG F. INPUT,GET,READ 52 TFLG = $0D ;TYPFLAG (NUMER./STRING) 54 CGL = $7A 56 CGH = $7B ;ZEIGER D. CHRGET-ROUTINE 58 ZCGL = $4B ;ZWISCHENSPEICHER FUER 59 ZCGH = $4C ;CHRGET-ZEIGER 60 ZVL = $49 ;ZEIGER AUF 61 ZVH = $4A ;VARIABLENWERT 62 COLL = $14 63 COLH = $15 ;ZEIGER IN FARBRAM 64 VRAM =$288 ;HIGH-BYTE VIDEO-RAM 66 CCOL =$286 ;FARBE DES CURSORS 68 ERLZT =$33C;TAB. F. ERLAUBTE ZEICHEN 100 RBYTE = $B79E ;1-BYTE-WERT LESEN 102 PKOM = $AEFD ;AUF KOMMA PRUEFEN 103 PCHAR = $AEFF ;AUF ZEICHEN PRUEFEN 104 FRMEVL = $AD9E ;AUSDRUCK AUWERTEN 106 FRESTR = $B6A3 ;STRINGVERWALTUNG 108 C(null)T = $0079 ;LETZTES Z. HOLEN 110 CGET = $0073 ;NAECHSTES Z. HOLEN 112 GET = $FFE4 ;GET 114 ZANFL = $ECF0 ;TAB. D. BILDSCHIRM- 115 ZANFH = $D9 ;ZEILENANFAENGE 116 CSET = $FFF0 ;CURSOR SETZEN 118 PLET = $B113 ;PRUEF. AUF BUCHST. 120 SVAR = $B08B ;VARIABLE SUCHEN 122 CGSET = $AB76 ;CHRGETZEIGER SETZEN 124 STHOL = $B487 ;STRING HOLEN 126 PRSET = $B7E2 ;PRGZEIGER SETZEN 128 STRVAR = $A9DA ;STRING AN VAR ZUW. 130 PRBYTE = $B7F1 ;S.O. NACH KOMMA 132 CRBYTE = $B79B ;S.O. MIT CHRGET 200 ; 205 ; AUSGABE IN WINDOW 210 ; 215 PRINT JSR POSREAD ;TEXT HOLEN 220 JMP WTEXT ;UND IN WINDOW SCHREIBEN 300 ; 305 ; EINGABE IN WINDOW 310 ; 312 ; - PARAMETER EINLESEN 313 ; 315 INPUT JSR POSREAD ;KOORD. & TEXT 320 LDA #ERLZT 325 JSR RSTRING ;ERLAUBTE ZEICHEN LESEN 330 TXA:BNE PEB ;ALTE EINSTELLUNG 332 STA (POL),Y ;TAB MIT 0 ABSCHLIESSEN 335 PEB JSR C(null)T:CMP #",":BNE PEA 340 JSR CRBYTE ;ANZAHL D. FTASTEN HOLEN 345 CPX #09 ;VGL. <= 8 347 BCS PEA ;NEIN - NICHT BEACHTEN 350 TXA:ADC #133 ;IN ASCII UMRECHNEN 351 STA FKEY ;UND SPEICHERN 355 PEA LDA #";" 360 JSR PCHAR ;AUF SEMIKOLON PRUEFEN 400 ; 405 ; - EINGABE VORBEREITEN 410 ; 415 HOM LDY #00:STY CUX ;CURSOR IN 420 STY CUY ;LINKE OBERE ECKE 425 STY CFLG ;CURSOR EIN 430 STY POS ;AN TEXTANFANG 500 ; 505 ; - EINGABE 510 ; 515 EIN JSR CUSWRT ;TEXT SCHREIBEN 520 EIA JSR GET ;ZEICHEN VON TASTATUR 522 BEQ EIA ;HOLEN 525 LDX #02:STX CREP ;REPEATFUNKTION 526 ; 527 ; - PRUEFUNG AUF SONDERZEICHEN 528 ; 530 CMP #"[133]":BCC E4 ;AUF FTASTE PRUEFEN 535 CMP FKEY ;PR. ERLAUBTE FTASTE 537 BCC E5 ;JA - WIE RETURN 540 CMP #"[140]"+1 ;PR. NICHT DEF. FTASTE 542 BCC EIA ;JA - NICHT BEACHTEN 545 E4 CMP #13 ;PR. RETURN 547 BNE E3 ;NICHT RETURN 550 E5 JMP RET ;RETURN 555 E3 LDX CUX ;CURSORPOSITION IN 557 LDY CUY ;X/Y - REGISTER 560 CMP # 19:BEQ HOM ;HOME 565 CMP #141:BEQ SRET ;SHIFT-RETURN 570 CMP # 29:BEQ CUSR ;CURSOR RIGHT 575 CMP # 17:BEQ CUSD ;CURSOR DOWN 580 CMP #145:BEQ CUSU ;CURSOR UP 585 CMP #157:BEQ CUSL ;CURSOR LEFT 590 CMP # 20:BEQ DEL ;DELETE 595 CMP #148:BEQ INST ;INSERT 600 CMP #147:BEQ CLR ;CLEAR 605 ; 610 ; - PRUEFUNG AUF ERLAUBTE ZEICHEN 615 ; 620 LDY #255 ;Y ALS ZEIGER IN TAB. 625 EIB INY ;ZEIGER ERHOEHEN 627 LDX ERLZT,Y ;ZEICHEN AUS TAB. HOLEN 630 BEQ EIA ;TABELLENENDE 635 CMP ERLZT,Y ;PR. ERLAUBTES ZEICHEN 637 BEQ EIE ;ERLAUBTES ZEICHEN 640 CPX #"[133]":BNE EIC ;AUF F1 PRUEFEN 645 CMP #"0" ;F1 - AUF ZIFFER PRUEFEN 647 BCC EIB 650 CMP #"9"+1 652 BCC EIE ;ZIFFER - ERLAUBT 655 EIC CPX #"[134]" ;AUF F3 PRUEFEN 657 BNE EID 660 JSR PLET ;F3 - AUF BUCHST. PRUEFEN 665 BCS EIE ;BUCHSTABE - ERLAUBT 670 EID CPX #"[135]" ;AUF F5 PRUEFEN 672 BNE EIB 675 CMP #"[193]":BCC EIB ;F5 - AUF GESHIFT. 680 CMP #"[218]"+1 ;BUCHSTABEN PRUEFEN 685 BCS EIB ;KEIN BUCHSTABE 690 EIE LDY POS ;POSITION IM TEXTSP. 695 PTEXT STA TEXTT,Y ;ZEICHEN SPEICHERN 700 ; 705 ; - SONDERZEICHEN-BEHANDLUNG 710 ; 715 CUSR JMP INCU ;CURSOR N. RECHTS 720 SRET LDX #00 ;CUS. AN ZEILENANFANG 725 LDA POS:SBC CUX ;POS NEU BERECHNEN 730 .BYTE $2C ;NAECHSTEN BEF. AUSLASSEN 735 CUSD LDA POS:INY ;CURSORZEILE+1 740 CPY ZAN 745 BCS CDB ;CUY ZU GROSS 750 ADC ZBR ;POS NEU BERECHNEN 755 .BYTE $24 ;NAECHSTEN BEF. AUSLASSEN 760 CDB DEY ;CURSORZEILE-1 765 CDA STA POS ;POS SPEICHERN 770 JMP SCURS ;CURSOR SETZEN 775 CUSU LDA POS 780 CPY #00:BEQ CDA ;CURS. IN 1. ZEILE 785 SBC ZBR ;POS NEU BERECHNEN 790 BCS CDB ;UNBEDINGTER SPRUNG 795 CLR JSR CLEAR ;TEXT LOESCHEN 800 JMP HOM ;ZUR HOME-ROUTINE 805 DEL LDY POS:BEQ INCB ;TEXTANFANG 810 DEB LDA TEXTT,Y:STA TEXTT-1,Y 815 INY:BNE DEB ;TEXT VERSCHIEBEN 820 LDA #32:LDX MPOS 825 STA TEXTT-1,X ;SPACE AN TEXTENDE 830 CUSL JMP DECU ;CURSOR LINKS 835 INST LDY MPOS 840 INA LDA TEXTT-1,Y:STA TEXTT,Y 845 DEY:CPY POS ;TEXT VERSCHIEBEN 850 BNE INA ;BIS ZUR AUGENBL. POSITION 855 LDA #32 860 STA TEXTT,Y ;SPACE EINFUEGEN 865 BNE INCB ;UNBEDINGTER SPRUNG 900 ; 905 ; - CURSORBEWEGUNGEN 910 ; 915 INCU LDX CUX ;CURSOR RIGHT 920 LDY CUY ;CPOS LADEN 925 INX ;SPALTE + 1 930 CPX ZBR:BNE INCC ;KEINE NEUE ZEILE 935 LDX #00 ;ZEILENANFANG 940 INY ;ZEILE + 1 945 CPY ZAN 950 BEQ INCB ;CURSOR RIGHT UNMOEGLICH 955 INCC INC POS ;POS. IN TEXT + 1 960 SCURS STX CUX ;REL. CURSORPOSITION 962 STY CUY ;SPEICHERN 965 INCB JMP EIN ;ZUR EINGABESCHLEIFE 970 DECU LDY CUY ;CURSOR LEFT 975 LDX CUX 980 BNE DECB ;NICHT AM ZEILENANFANG 985 LDX ZBR ;ZEILENENDE 990 TYA 992 BEQ INCB ;CURSOR LEFT UNMOEGLICH 995 DEY ;ZEILE - 1 1000 DECB DEX ;SPALTE - 1 1005 DEC POS ;POS. IN TEXT - 1 1010 JMP SCURS 1100 ; 1105 ; - ENDE DER EINGABE 1110 ; 1115 RET STX CFLG ;CURSOR AUS 1120 SBC #"[133]"-2 ;FTASTENNR. ERRECHNEN 1125 BCS REA ;NICHT RETURN 1130 LDA #00 ;00 FUER RETURN 1135 REA STA STAT ;IN ST SPEICHERN 1140 JSR WTEXT ;TEXT AUF BS AUSGEBEN 1145 REB LDA TEXTT-1,X:CMP #32 1150 BNE REC ;TEXT NACH UEBER- 1152 DEX ;FLUESSIGEN LEERZEICHEN 1155 BNE REB ;DURCHSUCHEN 1160 REC LDA #00 1165 STA TEXTT,X ;00 FUER TEXTENDE 1170 STA IFLG ;00 FUER INPUT 1175 JSR SVAR ;VARIABLE SUCHEN 1180 BIT TFLG 1185 BPL SYNERR ;NUMERISCHE VARIABLE 1190 STA ZVL ;ZEIGER AUF VARIABLE 1195 STY ZVH ;SPEICHERN 1200 LDA CGL:LDY CGH ;CHRGET-ZEIGER 1205 STA ZCGL 1210 STY ZCGH ;ZWISCHENSPEICHERN 1215 LDA PTEXT+1 ;ANFANGSADRESSE DES 1220 LDY PTEXT+2 ;TEXTES UEBERGEBEN 1225 JSR STHOL:JSR PRSET ;STRING HOLEN 1230 JSR STRVAR ;UND DER VAR. ZUWEISEN 1235 LDA ZCGL:LDY ZCGH ;CHRGET-ZEIGER 1240 JMP CGSET ;WIEDERHERSTELLEN 1245 ; 1250 SYNERR JMP $AF08 ;SYNTAX ERROR 2000 ; 2005 ; - UNTERROUTINEN 2010 ; 2015 ; - CURSOR SETZEN 2020 ; 2025 CUSWRT CLC:LDA CUY ;AUS RELATIVER 2030 ADC YLO:TAX ;CURSORPOSITION 2035 LDA CUX ;ABSOLUTE CURSORPOSITION 2040 ADC XLO:TAY ;BERECHNEN 2045 JSR CSET ;CURSOR SETZEN 2100 ; 2105 ; - TEXT IN WINDOW SCHREIBEN 2110 ; 2115 WTEXT LDX #00 ;ZEIGER IN TEXT 2120 LDA YLO:STA CNT ;ZEILENZAEHLER 2125 WTA LDY CNT ;BS-ZEILE 2130 LDA ZANFL,Y ;ZEIGER IN 2135 STA POL ;BILDSCHIRMSPEICHER 2140 STA COLL ;UND FARBRAM SETZEN 2145 LDA ZANFH,Y:AND #03 2150 PHA:ORA VRAM:STA POH 2155 PLA:ORA #$D8:STA COLH 2160 LDY XLO ;SPALTEN - ZAEHLER 2165 WTB LDA TEXTT,X ;ZEICHEN HOLEN 2170 BCWAND BMI BCA ;UMWANDLUNG ASCII- 2175 CMP #96:BCC BCA ;CODE IN 2180 AND #%11011111 ;BILDSCHIRMCODE 2185 BNE BCB 2190 BCA AND #%10111111 2195 BCB BPL BCE:EOR #%11000000 2200 BCE STA (POL),Y ;ZEICHEN IN BSRAM 2205 LDA CCOL ;SCHREIBEN UND 2210 STA (COLL),Y ;FARBE SETZEN 2215 INX ;ZEIGER IN TEXT + 1 2220 INY ;SPALTENZAEHLER + 1 2225 CPY XRU 2230 BCC WTB ;NOCH NICHT LETZTE SPALTE 2235 INC CNT ;ZEILENZAEHLER + 1 2240 CPX MPOS ;PR. AUF TEXTENDE 2245 BCC WTA ;NOCH NICHT TEXTENDE 2250 RTS 2300 ; 2305 ; - KOORDINATENPAAR LESEN 2310 ; 2315 RKOORD JSR PKOM ;AUF KOMMA PRUEFEN 2320 STX ZSP ;ZAEHLER FUER KOORDINATEN 2325 JSR RBYTE ;BYTE-WERT LESEN 2330 CPX #40 ;PR. < 40 (X-KOORDINATE) 2335 BCS ILLERR ;NEIN - FEHLERMELDUNG 2340 LDY ZSP:STX XLO,Y ;WERT SPEICHERN 2345 JSR PRBYTE ;BYTE-WERT LESEN 2350 CPX #25 ;PR. < 25 (Y-K.) 2355 BCS ILLERR ;NEIN 2360 LDY ZSP:STX XLO+1,Y ;SPEICHERN 2365 RTS 2370 ; 2375 ILLERR JMP $B248 ;ILLEGAL Q. ERROR 2400 ; 2405 ; - WINDOWPARAMETER & TEXT- 2410 ; STRING LESEN 2411 ; 2420 POSREAD LDX #00 ;1.KOORDINATENPAAR 2425 JSR RKOORD+3 ;LESEN 2430 LDX #02:JSR RKOORD ;2. '' 2435 INC XRU ;(BESSER VERARBEITBAR) 2440 SEC:LDA XRU ;BREITE DES WINDOWS +1 2445 SBC XLO ;BERECHNEN 2450 BCC ILLERR ;<0 - FEHLER 2455 STA ZBR ;UND SPEICHERN 2460 TXA ;HOEHE DES WINDOWS + 1 2465 SBC YLO ;BERECHNEN 2470 BCC ILLERR:ADC #00:STA ZAN 2475 TAX ;HOEHE (IN X-REG.) MIT 2480 LDA #00 ;BREITE MALNEHMEN = LAENGE 2485 POA ADC ZBR ;DES EINGABETEXTES 2490 BCS ILLERR ;>255 - FEHLER 2495 DEX:BNE POA 2500 STA MPOS ;LAENGE SPEICHERN 2505 CLEAR LDY #00 ;TEXTSPEICHER 2510 LDA #32 ;LOESCHEN 2515 CLEA STA TEXTT,Y:INY:BNE CLEA 2600 ; 2605 ; - STRING LESEN & SPEICHERN 2610 ; 2615 RSTRINGT LDA PTEXT+1 ;ZEIGER AUF 2620 LDX PTEXT+2 ;TEXTSPEICHER 2625 RSTRING STA POL ;ZEIGER FUER 2630 STX POH ;SPEICHERUNG D. STRINGS 2635 JSR C(null)T ;LETZTES ZEICHEN HOLEN 2640 CMP #"," ;PR. AUF KOMMA 2645 BNE RSTE ;NEIN - KEIN STRING FOLGT 2650 JSR CGET:JSR FRMEVL ;STRING LESEN 2655 JSR FRESTR ;& PARAMETER HOLEN 2660 LDY #00 2665 TAX ;LAENGE D. STRING IN X-REG. 2670 BEQ RSTE ;LAENGE = 0 2675 RSTB LDA (STZ),Y ;STRING IN 2680 STA (POL),Y ;SPEICHER (POL/H = 2685 INY ;ANFANGSADRESSE) VERSCHIEBEN 2690 DEX:BNE RSTB 2695 RSTE RTS 3000 ; 3005 ; - TEXTSPEICHER 3010 ; 3015 TEXTT = *