home *** CD-ROM | disk | FTP | other *** search
- A CS:100
- ;* ------------------------------------------------------- *
- ;* SCOLOR.ASM *
- ;* Setzt Farbattribute auf Monitor ohne daß der Text *
- ;* gelöscht wird. *
- ;* *
- ;* Syntax: SCOLOR x, y, a, h, v, b *
- ;* *
- ;* x,y : Cursorposition *
- ;* a,h : Breite * Höhe *
- ;* v,b : Vordergrund / Hintergrund *
- ;* *
- ;* Aufruf: DEBUG < SCOLOR.ASM *
- ;* ------------------------------------------------------- *
- ;
- JMP 019A ; Überspringe Konstantenvereinbarung
- ;
- DB 00,00,00,00,00,00,00
- DB 0D,0A,"SCOLOR 1.0 (c) 1989 by R. Seelig",0D,0A
- DB 0D,0A,"Syntax: SCOLOR x,y,a,h,v,b",0D,0A
- DB "x,y = Koordinaten; a,h= Breite,Höhe; "
- DB "v,b= Vorder- und Hintergrundfarbe"
- DB 0D,0A,"$"
- ;
- ; Eigentlicher Programmanfang
- ;
- MOV CX,0006 ; Vorwahl für 6 Parameter
- CALL 01D1 ; UPRO: Einlesen Parameter
- CMP AL,00 ; Param. nicht gefunden
- JZ 01AA ; Springe zum Abbruch
- CALL 0219 ; UPRO: Führe Param. aus
- JMP 01B1 ; Springe zum Programmabbruch
- NOP
- MOV DX,010A ; Setze Zeiger auf Textkonstante
- MOV AH,09 ; Bereite Textausgabe vor
- INT 21 ; Gebe Text aus
- INT 20 ; Beende Programm
- ;
- ; Unterprogramm zum Lesen der Parameter, und
- ; errechnen als Nummerischen Wert. Speichern
- ; ab Adresse 103
- ;
- LODSB ; Lade Zeichen
- SUB AL,30 ; ASCII => nummerisch
- PUSH AX ; Wert retten
- LODSB ; Lade Zeichen
- CMP AL,2C ; war es ","
- JZ 01CF ; dann springe Unterprogramm Ende
- CMP AL,0D ; war es RETURN Taste
- JZ 01CF ; dann springe Unterprogramm Ende
- SUB AL,30 ; ASCII => nummerisch
- MOV DL,AL ; Wert nach DL
- POP AX ; 1. Param. restaurieren
- XOR AH,AH ; AH löschen
- MOV BL,0A ; Multiplikation mit 10
- MUL BL ; durchführen
- ADD AL,DL ; und 2. Zeichen dazu addieren
- PUSH AX ; Zahl speichern
- LODSB ; nächstes Zeichen laden
- POP AX ; Zahl restaurieren
- RET ; Unterprogramm Ende
- ;
- ; Liest Parameter von Kommandoebene in Puffer;
- ; Werden Param. gefunden AL=1,
- ; nicht gefunden AL=0;
- ;
- MOV AL,[0080] ; Parameteranzahl laden
- CMP AL,00 ; keine Parameter
- JZ 01FC ; dann springe Unterprogramm Ende
- MOV SI,0082 ; Zeiger auf 1. Parameterzeichen
- LODSB ; 1. Parameterzeichen laden
- CMP AL,20 ; war es ein Leerzeichen
- JZ 01DB ; dann Wiederhole Ladevorgang
- CMP AL,0D ; war 1. Zeichen RETURN Taste
- JNZ 01E9
- MOV AL,00 ; dann setze AL=0
- JMP 01FC ; und springe Unterprogramm Ende
- NOP
- DEC SI ; Zeiger wieder auf 1. Zeichen setzen
- XOR BX,BX ; BX als Anzahl gelesener Parameter
- PUSH CX ; Schleifenanfang
- PUSH BX
- CALL 01B3 ; Rechen und Speichern aufrufen
- POP BX
- MOV [BX+0103],AL ; Errechneter Wert speichern
- INC BX ; Speicherplatz für Param. um 1 versetzen
- POP CX ; Restauriere Schleifenzaähler
- LOOP 01EC ; Wiederhole den Aufruf 6 mal
- MOV AL,01 ; Parameter vorhanden markieren
- RET ; Unterprogramm Ende
- ;
- ; Unterprogramm, daß direkt in den Bildspeicher schreibt
- ; in BX steht die Bildspeicherstelle
- ;
- PUSH BX ; Bildspeicherstelle retten
- MOV BL,[0107] ; hole Vordergrundfarbe
- MOV BH,[0108] ; hole Hintergrundfarbe
- MOV CX,0004 ;
- SHL BH,CL ; schiebe Hintergrund um 4 Bit nach rechts
- ADD BL,BH ; errechne Attributbyte
- POP CX ; restauriere Bildspeicherstelle
- MOV AX,B800 ; (B000 bei Hercules Karte)
- MOV ES,AX ; Offset Adresse nach ES
- MOV DI,CX ; Speicherstelle nach DI
- ES:
- MOV [DI],BL ; Setze Farbattribut
- RET ; Unterprogramm End
- ;
- ; Unterprogramm daß Bildschirmspeicherstellen
- ; errechnet und anschließend die Farbattribute
- ; setzt
- ;
- XOR CX,CX
- MOV CL,[0106] ; Hoehenanzahl laden
- PUSH CX ; Schleifenzähler1 retten
- XOR AX,AX
- MOV AL,[0104] ; y - Anfangswert laden
- DEC AL
- MOV BX,0050 ; Multiplikator setzen
- MUL BX ; AX= y * 80
- XOR BX,BX
- MOV BL,[0103] ; x - Anfangswert laden
- DEC BL
- ADD AX,BX ; AX= (y * 80)+x
- MOV BX,0002 ; Multiplikator setzen
- MUL BX ; AX= ((y * 80)+x)*2
- INC AX ; AX= (((y * 80)+x)*2)+1
- XOR CX,CX
- MOV CL,[0105] ; x-Anzahl als Schleifenzähler2
- PUSH CX ; Schleifenzähler2 retten
- PUSH AX
- MOV BX,AX ; Speicherstelle nach BX
- CALL 01FD ; Farbattribut setzen aufrufen
- POP AX
- INC AX ; Bildschirmadresse auf
- INC AX ; nächstes Attributbyte setzen
- POP CX ; Schleifenzähler2 restaurieren
- LOOP 0242 ; Schleife wiederholen
- MOV AL,[0104] ; Y Wert laden
- INC AL ; und um 1 erhöhen
- MOV [0104],AL ; neuen Y Wert speichern
- POP CX ; Schleifenzähler1 restaurieren
- LOOP 021F ; und Schleife wiederholen
- RET ; Unterprogramm Ende
- ;
- ; Programmcode zu Ende. Leerzeile beendet
- ; den Assembler Modus
-
- n scolor.com
- r bx
- 0
- r cx
- 15b
- w
- q
- ;* ------------------------------------------------------- *
- ;* Ende von SCOLOR.ASM *
-