home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / grafik / mcgatpu / mcgatool.asm < prev    next >
Encoding:
Assembly Source File  |  1991-04-05  |  5.4 KB  |  186 lines

  1.                    .model tpascal
  2.                    .data
  3. pixeladdr13        macro
  4.                     ;Setzt einen Farbpixel an der aktuellen Position.
  5.                     ;Eingang:
  6.                     ;         AX:=Y- Koordinate (0-199)
  7.                     ;         BX:=X- Koordinate (0-319)
  8.                     ;Ausgang: ES:BX ->Byte;
  9.  
  10.                    xchg ah,al
  11.                    add  bx,ax
  12.                    shr  ax,1
  13.                    shr  ax,1
  14.                    add  bx,ax
  15.                    mov  ax,0a000h
  16.                    mov  es,ax
  17.                    endm
  18.  
  19.                    .code
  20. printpixelat        proc far col:byte, x:word, y:word
  21.                     public printpixelat
  22.                     mov ax,y
  23.                     mov bx,x
  24.                     pixeladdr13
  25.                     mov al,col
  26.                     mov es:[bx],al
  27.                     ret
  28. printpixelat        endp
  29.  
  30. getpixelat          proc far x:word, y:word returns result:byte
  31.                     public getpixelat
  32.                     mov ax,y
  33.                     mov bx,x
  34.                     pixeladdr13
  35.                     mov al,es:[bx]
  36.                     ret
  37. getpixelat          endp
  38.  
  39. clearscreen         proc far
  40.                     public clearscreen
  41.                     mov cx,320*201
  42.                     mov ax,0a000h
  43.                     mov es,ax
  44.                     mov al,0
  45.                     mov bx,cx
  46. looping:            mov es:[bx],al
  47.                     mov bx,cx
  48.                     loop looping
  49.                     ret
  50. clearscreen         endp
  51.  
  52.                    ;.model tpascal
  53.                    .data
  54. varincr1           dw ?
  55. varincr2           dw ?
  56. varroutine         dw ?
  57.  
  58. bytesperline       equ 320
  59.  
  60.  
  61.                    .code
  62. line     proc far argx1:word,argy1:word,argx2:word,argy2:word,argn:byte
  63.                    public line
  64.  
  65.                    mov  si,bytesperline
  66.                    mov  cx,argx2
  67.                    sub  cx,argx1
  68.                    jz   vertline13
  69.                    jns  l01
  70.                    neg  cx
  71.                    mov  bx,argx2
  72.                    xchg bx,argx1
  73.                    mov  argx2,bx
  74.                    mov  bx,argy2
  75.                    xchg bx,argy1
  76.                    mov  argy2,bx
  77. l01:               mov  bx,argy2
  78.                    sub  bx,argy1
  79.                    jz   horizline13
  80.                    jns  l03
  81.                    neg  bx
  82.                    neg  si
  83. l03:               push si
  84.                    mov  VARroutine,offset LoSlopeLine13
  85.                    cmp  bx,cx
  86.                    jle  l04
  87.                    mov  VARroutine,offset HiSlopeLine13
  88.                    xchg bx,cx
  89. l04:               shl  bx,1
  90.                    mov  varincr1,bx
  91.                    sub  bx,cx
  92.                    mov  si,bx
  93.                    sub  bx,cx
  94.                    mov  varincr2,bx
  95.  
  96. ;Berechnen der Adresse des ersten Pixel
  97.  
  98.                    push cx
  99.                    mov  ax,argy1
  100.                    mov  bx,argx1
  101.                    pixeladdr13
  102.                    mov  di,bx
  103.                    pop  cx
  104.                    inc  cx
  105.                    pop  bx
  106.                    jmp  VARroutine
  107. vertline13:        mov  ax,argy1
  108.                    mov  bx,argy2
  109.                    mov  cx,bx
  110.                    sub  cx,ax
  111.                    jge  l31
  112.                    neg  cx
  113.                    mov  ax,bx
  114. l31:               inc  cx
  115.                    mov  bx,argx1
  116.                    push cx
  117.                    pixeladdr13
  118.                    pop  cx
  119.                    mov  di,bx
  120.                    dec  si
  121.                    mov  al,argn
  122. l32:               stosb
  123.                    add  di,si
  124.                    loop l32
  125.                    jmp  lexit
  126. horizline13:       push cx
  127.                    mov  ax,argy1
  128.                    mov  bx,argx1
  129.                    pixeladdr13
  130.                    mov  di,bx
  131.                    pop  cx
  132.                    inc  cx
  133.                    mov  al,argn
  134.                    rep  stosb
  135.                    jmp  lexit
  136.  
  137. ; Routine fuer dy<=dx (Steigung <=1)
  138. ;             ES:DI ---> Video Buffer
  139. ;             BX       = Y-INC
  140. ;             CX       = # Pixel zu zeichnen
  141. ;             SI       = Entscheidungstraeger ob Y Koordinate erhoeht werden
  142. ;                        soll
  143.  
  144. LoSlopeLine13:     mov  al,argn
  145. l11:               stosb
  146.                    or   si,si
  147.                    jns  l12
  148.                    add  si,varincr1
  149.                    loop l11
  150.                    jmp  lexit
  151. l12:               add  si,varincr2
  152.                    add  di,bx
  153.                    loop l11
  154.                    jmp  lexit
  155.  
  156. ; Routine fuer dy>=dx (Steigung >1)
  157. ;             ES:DI ---> Video Buffer
  158. ;             BX       = Y-INC
  159. ;             CX       = # Pixel zu zeichnen
  160. ;             SI       = Entscheidungstraeger ob Y Koordinate erhoeht werden
  161. ;                        soll
  162.  
  163. hislopeline13:      mov  al,argn
  164. l21:               stosb
  165.                    add  di,bx
  166. l22:               or   si,si
  167.                    jns  l23
  168.                    add  si,varincr1
  169.                    dec  di
  170.                    loop l21
  171.                    jmp  lexit
  172. l23:               add  si,varincr2
  173.                    loop l21
  174. lexit:             ret
  175. line               endp
  176. code               ends
  177.                    end line
  178.  
  179.  
  180.  
  181. code                ends
  182.                     end
  183.  
  184.  
  185.  
  186.