; *********************************************************************
  PutPixel:
;
; Diese Routine kann anstelle der Funktion 0Ch des BIOS-Interrupts 10h
; eingesetzt werden.
;
; Vorteil:   deutlich schneller als INT 10h
; Nachteil:  aktualisiert nicht den Grafikspeicher bei B000:0000
; Autor:     Klaus Peichl
; Copyright: Public domain
;
; Eingabe:  al = Farbe (0=l”schen, sonst=setzen)
;           cx = x
;           dx = y
;           ah = keine Bedeutung (bei INT 10h muá dagegen ah=0Ch sein)
;
; *********************************************************************
                push ax
                push bx
                push cx
                push dx

; falls die HighBytes in ch und cl ignoriert werden sollen:
;                mov ch,0
;                mov dh,0

; Hier Clipping aktivieren, falls gewuenscht:
;                cmp cx,239
;                ja PixelEnde
;                cmp dx,63
;                ja PixelEnde

                mov bl,14
                or al,al
                jz ClearPixel
                inc bl
  ClearPixel:   mov Byte Ptr [Offset SetClear+1],bl

                shl dx,1
                mov bx,dx               
                shl bx,1
                shl bx,1
                shl bx,1
                shl bx,1
                sub bx,dx               ; bx = y*30

                mov ah,cl
                and ah,7                ; ah = x mod 8

                shr cx,1
                shr cx,1                ; cx = x/8
                shr cx,1

                add bx,cx               ; bx = y*30 + x/8

                mov dx,8011h
		mov al,10
		out dx,al
		dec dx
                mov al,bl
		out dx,al               ; Cursoradresse low setzen
		inc dx
		mov al,11
		out dx,al
		dec dx
		mov al,bh
		out dx,al               ; Cursoradresse high setzen

                inc dx
  SetClear:     mov al,15               ; 15 = Pixel setzen  14 = l”schen
                out dx,al
                dec dx
                mov al,ah
                out dx,al

  PixelEnde:    pop dx
                pop cx
                pop bx
                pop ax

                ret
