home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 02 / tricks / scolor.asm < prev    next >
Assembly Source File  |  1989-11-14  |  5KB  |  158 lines

  1. A CS:100
  2. ;* ------------------------------------------------------- *
  3. ;*                      SCOLOR.ASM                         *
  4. ;*    Setzt Farbattribute auf Monitor ohne daß der Text    *
  5. ;*    gelöscht wird.                                       *
  6. ;*                                                         *
  7. ;*    Syntax:   SCOLOR x, y, a, h, v, b                    *
  8. ;*                                                         *
  9. ;*  x,y : Cursorposition                                   *
  10. ;*  a,h : Breite * Höhe                                    *
  11. ;*  v,b : Vordergrund / Hintergrund                        *
  12. ;*                                                         *
  13. ;*  Aufruf:  DEBUG < SCOLOR.ASM                            *
  14. ;* ------------------------------------------------------- *
  15. ;
  16. JMP 019A   ; Überspringe Konstantenvereinbarung
  17. ;
  18. DB 00,00,00,00,00,00,00
  19. DB 0D,0A,"SCOLOR 1.0  (c)  1989  by  R. Seelig",0D,0A
  20. DB 0D,0A,"Syntax:  SCOLOR x,y,a,h,v,b",0D,0A
  21. DB "x,y = Koordinaten; a,h= Breite,Höhe; "
  22. DB "v,b= Vorder- und Hintergrundfarbe"
  23. DB 0D,0A,"$"
  24. ;
  25. ; Eigentlicher Programmanfang
  26. ;
  27. MOV CX,0006     ; Vorwahl für 6 Parameter
  28. CALL 01D1       ; UPRO: Einlesen Parameter
  29. CMP AL,00       ; Param. nicht gefunden
  30. JZ 01AA         ; Springe zum Abbruch
  31. CALL 0219       ; UPRO: Führe Param. aus
  32. JMP 01B1        ; Springe zum Programmabbruch
  33. NOP
  34. MOV DX,010A     ; Setze Zeiger auf Textkonstante
  35. MOV AH,09       ; Bereite Textausgabe vor
  36. INT 21          ; Gebe Text aus
  37. INT 20          ; Beende Programm
  38. ;
  39. ; Unterprogramm zum Lesen der Parameter, und
  40. ; errechnen als Nummerischen Wert. Speichern
  41. ; ab Adresse 103
  42. ;
  43. LODSB           ; Lade Zeichen
  44. SUB AL,30       ; ASCII => nummerisch
  45. PUSH AX         ; Wert retten
  46. LODSB           ; Lade Zeichen
  47. CMP AL,2C       ; war es ","
  48. JZ 01CF         ; dann springe Unterprogramm Ende
  49. CMP AL,0D       ; war es RETURN Taste
  50. JZ 01CF         ; dann springe Unterprogramm Ende
  51. SUB AL,30       ; ASCII => nummerisch
  52. MOV DL,AL       ; Wert nach DL
  53. POP AX          ; 1. Param. restaurieren
  54. XOR AH,AH       ; AH löschen
  55. MOV BL,0A       ; Multiplikation mit 10
  56. MUL BL          ; durchführen
  57. ADD AL,DL       ; und 2. Zeichen dazu addieren
  58. PUSH AX         ; Zahl speichern
  59. LODSB           ; nächstes Zeichen laden
  60. POP AX          ; Zahl restaurieren
  61. RET            ; Unterprogramm Ende
  62. ;
  63. ; Liest Parameter von Kommandoebene in Puffer;
  64. ; Werden Param. gefunden AL=1,
  65. ;         nicht gefunden AL=0;
  66. ;
  67. MOV AL,[0080]   ; Parameteranzahl laden
  68. CMP AL,00       ; keine Parameter
  69. JZ 01FC         ; dann springe Unterprogramm Ende
  70. MOV SI,0082     ; Zeiger auf 1. Parameterzeichen
  71. LODSB           ; 1. Parameterzeichen laden
  72. CMP AL,20       ; war es ein Leerzeichen
  73. JZ 01DB         ; dann Wiederhole Ladevorgang
  74. CMP AL,0D       ; war 1. Zeichen RETURN Taste
  75. JNZ 01E9
  76. MOV AL,00       ; dann setze AL=0
  77. JMP 01FC        ; und springe Unterprogramm Ende
  78. NOP
  79. DEC SI          ; Zeiger wieder auf 1. Zeichen setzen
  80. XOR BX,BX       ; BX als Anzahl gelesener Parameter
  81. PUSH CX         ; Schleifenanfang
  82. PUSH BX
  83. CALL 01B3       ; Rechen und Speichern aufrufen
  84. POP BX
  85. MOV [BX+0103],AL ; Errechneter Wert speichern
  86. INC BX          ; Speicherplatz für Param. um 1 versetzen
  87. POP CX          ; Restauriere Schleifenzaähler
  88. LOOP 01EC       ; Wiederhole den Aufruf 6 mal
  89. MOV AL,01       ; Parameter vorhanden markieren
  90. RET             ; Unterprogramm Ende
  91. ;
  92. ; Unterprogramm, daß direkt in den Bildspeicher schreibt
  93. ; in BX steht die Bildspeicherstelle
  94. ;
  95. PUSH BX         ; Bildspeicherstelle retten
  96. MOV BL,[0107]   ; hole Vordergrundfarbe
  97. MOV BH,[0108]   ; hole Hintergrundfarbe
  98. MOV CX,0004     ;
  99. SHL BH,CL       ; schiebe Hintergrund um 4 Bit nach rechts
  100. ADD BL,BH       ; errechne Attributbyte
  101. POP CX          ; restauriere Bildspeicherstelle
  102. MOV AX,B800     ; (B000 bei Hercules Karte)
  103. MOV ES,AX       ; Offset Adresse nach ES
  104. MOV DI,CX       ; Speicherstelle nach DI
  105. ES:
  106. MOV [DI],BL     ; Setze Farbattribut
  107. RET             ; Unterprogramm End
  108. ;
  109. ; Unterprogramm daß Bildschirmspeicherstellen
  110. ; errechnet und anschließend die Farbattribute
  111. ; setzt
  112. ;
  113. XOR CX,CX
  114. MOV CL,[0106]  ; Hoehenanzahl laden
  115. PUSH CX        ; Schleifenzähler1 retten
  116. XOR AX,AX
  117. MOV AL,[0104]  ; y - Anfangswert laden
  118. DEC AL
  119. MOV BX,0050    ; Multiplikator setzen
  120. MUL BX         ; AX= y * 80
  121. XOR BX,BX
  122. MOV BL,[0103]  ; x - Anfangswert laden
  123. DEC BL
  124. ADD AX,BX      ; AX= (y * 80)+x
  125. MOV BX,0002    ; Multiplikator setzen
  126. MUL BX         ; AX= ((y * 80)+x)*2
  127. INC AX         ; AX= (((y * 80)+x)*2)+1
  128. XOR CX,CX
  129. MOV CL,[0105]  ; x-Anzahl als Schleifenzähler2
  130. PUSH CX        ; Schleifenzähler2 retten
  131. PUSH AX
  132. MOV BX,AX      ; Speicherstelle nach BX
  133. CALL 01FD      ; Farbattribut setzen aufrufen
  134. POP AX
  135. INC AX         ; Bildschirmadresse auf
  136. INC AX         ; nächstes Attributbyte setzen
  137. POP CX         ; Schleifenzähler2 restaurieren
  138. LOOP 0242      ; Schleife wiederholen
  139. MOV AL,[0104]  ; Y Wert laden
  140. INC AL         ; und um 1 erhöhen
  141. MOV [0104],AL  ; neuen Y Wert speichern
  142. POP CX         ; Schleifenzähler1 restaurieren
  143. LOOP 021F      ; und Schleife wiederholen
  144. RET            ; Unterprogramm Ende
  145. ;
  146. ; Programmcode zu Ende. Leerzeile beendet
  147. ; den Assembler Modus
  148.  
  149. n scolor.com
  150. r bx
  151. 0
  152. r cx
  153. 15b
  154. w
  155. q
  156. ;* ------------------------------------------------------- *
  157. ;*                  Ende von SCOLOR.ASM                    *
  158.