Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- code segment
- org 100h
- assume cs:code, ds:code
- ;--------------------------------------------------
- setdac MACRO
- ; Par metros:
- ; Ninguno
- R EQU 80h
- G EQU 40h
- B EQU 20h
- mov ah, 32 ; AH = registro de la DAC
- mov bl, 1 ; BL = intensidad
- @ciclo:
- mov dx, 3c8h
- mov al, ah
- out dx, al
- inc dl ; mov dx, 3c8h
- @red:
- xor al, al
- test ah, R
- jz @green
- mov al, bl
- @green:
- out dx, al
- xor al, al
- test ah, G
- jz @blue
- mov al, bl
- @blue:
- out dx, al
- xor al, al
- test ah, B
- jz @cont
- mov al, bl
- @cont:
- out dx, al
- add bl, 2
- inc ah
- or ah, ah
- jnz @ciclo
- ENDM
- ;--------------------------------------------------
- esfera MACRO
- ; Par metros:
- ; ES:DI = apuntador a la pantalla
- ; BL = color base
- ; BH = radio
- ; Locales:
- ; CL, CH = x, y
- ; SI = r * r
- ;
- mov ax, 0a000h ; p = makeptr(0xa000, _DI)
- mov es, ax
- mov al, bh
- mul bh
- mov si, ax ; rr = r*r;
- mov ch, bh ; for (y = -r; y <= r; y++)
- neg ch
- @loop_ch: ; {
- mov cl, bh ; for (x = -r; x <= r; x++)
- neg cl
- @loop_cl: ; {
- mov al, cl ; index = (x*x+y*y)*32 / rr;
- imul cl
- mov bp, ax
- mov al, ch
- imul ch
- add ax, bp
- mov dx, 32
- mul dx
- div si
- cmp ax, 32 ; if (index <= 32)
- jge @no_pinta ; {
- neg al ; *p = 31 - index + color_base
- add al, 31
- add al, bl
- mov es:[di], al
- @no_pinta: ; }
- inc di ; p++;
- inc cl
- cmp cl, bh
- jle @loop_cl ; }
- add di, 319
- mov al, bh
- cbw
- sub di, ax
- sub di, ax ; p += 319 - 2*r
- inc ch
- cmp ch, bh
- jle @loop_ch ; }
- ENDM
- ;--------------------------------------------------
- delay MACRO
- mov ax, 0040h
- mov es, ax
- mov si, 6ch ; p = makeptr(0x0040, 0x006c);
- mov ax, es:[si] ; t = *p;
- timerloop: ; do {
- cmp ax, es:[si] ; // nada (esperar)
- je timerloop ; } while (t == *p);
- ENDM
- ;--------------------------------------------------
- kbhit MACRO
- mov ah, 01h
- int 16h
- ENDM
- ;--------------------------------------------------
- ; *** PROGRAMA PRINCIPAL ***
- ;--------------------------------------------------
- @inicio:
- mov ax, 13h ; establece modo gr fico
- int 10h
- setdac ; crea la paleta
- @loop_main:
- call rand
- mov bx, ax
- and bx, 0001111111100000b
- or bl, bl
- jz @loop_main
- cmp bh, 10
- jb @loop_main
- call rand
- mov di, ax
- esfera
- delay
- kbhit
- jz short @loop_main
- mov ax, 0003h ; vuelve a modo texto
- int 10h
- ret ; termina el programa
- ;--------------------------------------------------
- seed dw 1234
- rand:
- mov ax, seed
- mov dx, 4e35h
- mul dx
- inc ax
- mov seed, ax
- ret
- ;--------------------------------------------------
- code ENDS
- END @inicio
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement