areyesram

Untitled

Sep 23rd, 2020
981
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. code    segment
  2.     org 100h
  3.     assume cs:code, ds:code
  4.  
  5. ;--------------------------------------------------
  6. setdac  MACRO
  7. ; Par metros:
  8. ;   Ninguno
  9.     R   EQU 80h
  10.     G   EQU 40h
  11.     B   EQU 20h
  12.  
  13.     mov ah, 32      ; AH = registro de la DAC
  14.     mov bl, 1       ; BL = intensidad
  15.  
  16. @ciclo:
  17.     mov dx, 3c8h
  18.     mov al, ah
  19.     out dx, al
  20.     inc dl      ; mov dx, 3c8h
  21. @red:
  22.     xor al, al
  23.     test    ah, R
  24.     jz  @green
  25.     mov al, bl
  26. @green:
  27.     out dx, al
  28.     xor al, al
  29.     test    ah, G
  30.     jz  @blue
  31.     mov al, bl
  32. @blue:
  33.     out dx, al
  34.     xor al, al
  35.     test    ah, B
  36.     jz  @cont
  37.     mov al, bl
  38.  
  39. @cont:
  40.     out dx, al
  41.  
  42.     add bl, 2
  43.     inc ah
  44.     or  ah, ah
  45.     jnz @ciclo
  46.  
  47.     ENDM
  48. ;--------------------------------------------------
  49. esfera  MACRO
  50. ; Par metros:
  51. ;   ES:DI   = apuntador a la pantalla
  52. ;   BL  = color base
  53. ;   BH  = radio
  54. ; Locales:
  55. ;   CL, CH  = x, y
  56. ;   SI  = r * r
  57. ;
  58.     mov ax, 0a000h  ; p = makeptr(0xa000, _DI)
  59.     mov es, ax
  60.  
  61.     mov al, bh
  62.     mul bh
  63.     mov si, ax      ; rr = r*r;
  64.  
  65.     mov ch, bh      ; for (y = -r; y <= r; y++)
  66.     neg ch
  67. @loop_ch:           ; {
  68.     mov cl, bh      ;   for (x = -r; x <= r; x++)
  69.     neg cl
  70. @loop_cl:           ;   {
  71.     mov al, cl      ;       index = (x*x+y*y)*32 / rr;
  72.     imul    cl
  73.     mov bp, ax
  74.     mov al, ch
  75.     imul    ch
  76.     add ax, bp
  77.     mov dx, 32
  78.     mul dx
  79.     div si
  80.     cmp ax, 32      ;       if (index <= 32)
  81.     jge @no_pinta   ;       {
  82.     neg al      ;           *p = 31 - index + color_base
  83.     add al, 31
  84.     add al, bl
  85.     mov es:[di], al
  86. @no_pinta:          ;       }
  87.     inc di      ;       p++;
  88.     inc cl
  89.     cmp cl, bh
  90.     jle @loop_cl    ;   }
  91.  
  92.     add di, 319
  93.     mov al, bh
  94.     cbw
  95.     sub di, ax
  96.     sub di, ax      ;   p += 319 - 2*r
  97.  
  98.     inc ch
  99.     cmp ch, bh
  100.     jle @loop_ch    ; }
  101.  
  102.     ENDM
  103. ;--------------------------------------------------
  104. delay   MACRO
  105.     mov ax, 0040h
  106.     mov es, ax
  107.     mov si, 6ch     ; p = makeptr(0x0040, 0x006c);
  108.  
  109.     mov ax, es:[si] ; t = *p;
  110. timerloop:          ; do {
  111.     cmp ax, es:[si] ;   // nada (esperar)
  112.     je  timerloop   ; } while (t == *p);
  113.     ENDM
  114. ;--------------------------------------------------
  115. kbhit   MACRO
  116.     mov ah, 01h
  117.     int 16h
  118.     ENDM
  119.  
  120. ;--------------------------------------------------
  121. ;   *** PROGRAMA PRINCIPAL  ***
  122. ;--------------------------------------------------
  123. @inicio:
  124.     mov ax, 13h     ; establece modo gr fico
  125.     int 10h
  126.  
  127.     setdac          ; crea la paleta
  128.  
  129. @loop_main:
  130.     call    rand
  131.     mov bx, ax
  132.     and bx, 0001111111100000b
  133.     or  bl, bl
  134.     jz  @loop_main
  135.     cmp bh, 10
  136.     jb  @loop_main
  137.     call    rand
  138.     mov di, ax
  139.  
  140.     esfera
  141.  
  142.     delay
  143.  
  144.     kbhit
  145.     jz  short   @loop_main
  146.  
  147.     mov ax, 0003h   ; vuelve a modo texto
  148.     int 10h
  149.  
  150.     ret         ; termina el programa
  151.  
  152. ;--------------------------------------------------
  153.     seed    dw  1234
  154. rand:
  155.     mov ax, seed
  156.     mov dx, 4e35h
  157.     mul dx
  158.     inc ax
  159.     mov seed, ax
  160.     ret
  161. ;--------------------------------------------------
  162.  
  163. code    ENDS
  164.  
  165.     END @inicio
  166.  
RAW Paste Data