home *** CD-ROM | disk | FTP | other *** search
/ Solo Programadores 22 / SOLO_22.iso / disk22 / modosx / modox.inc < prev    next >
Encoding:
Text File  |  1996-03-25  |  7.3 KB  |  200 lines

  1.  
  2. ;;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒C▒O▒M▒P▒I▒L▒E▒R▒▒▒▒▒▒▒▒▒▒▒S▒O▒F▒T▒W▒A▒R▒E▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  3. ;;▒▒                                                                      ▒▒
  4. ;;▒▒  MODOX.INC                                                           ▒▒
  5. ;;▒▒                                                                      ▒▒
  6. ;;▒▒  Esta librería es introductoria y a partir del próximo número estará ▒▒
  7. ;;▒▒  completamente  optimizada para  286+. Es igual que MODOX.H sólo que ▒▒
  8. ;;▒▒  totalmente en ASSEMBLER.                                            ▒▒
  9. ;;▒▒  Diseñada para compilarse con TASM junto con otro fichero.           ▒▒
  10. ;;▒▒                                                                      ▒▒
  11. ;;▒▒  include MODOX.INC                                                   ▒▒
  12. ;;▒▒                                                                      ▒▒
  13. ;;▒▒  1996 Compiler SoftWare. Para dudas y contactos leer el fichero de   ▒▒
  14. ;;▒▒  texto COMPILER.NFO                                                  ▒▒
  15. ;;▒▒                                                                      ▒▒
  16. ;;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  17.  
  18.  
  19. SEQU_ADDR EQU 3c4h
  20. CRTC_ADDR EQU 3d4h
  21. GRAC_ADDR EQU 3ceh
  22.  
  23.  
  24.  
  25. ;;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  26. ;;▒▒ Set_320x200X();                                                      ▒▒
  27. ;;▒▒                                                                      ▒▒
  28. ;;▒▒ Inicializa el Modo 13X de 320x200 a 256 colores en sistema 1x4.      ▒▒
  29. ;;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  30.  
  31. Set_320x200X    PROC
  32.         
  33.         push ax cx dx di es
  34.  
  35.         mov ax , 0013h                    ; inicializamos modo 13h estándar 
  36.         int 10h
  37.  
  38.         mov dx, SEQU_ADDR
  39.         mov ax, 0604h
  40.         out dx, ax                        ; ponemos el bit CHAIN-4 a 0
  41.  
  42.         mov dx, CRTC_ADDR
  43.         mov ax, 0E317h
  44.         out dx, ax                        ; ajuste del modo de palabras 
  45.         
  46.         mov ax, 0014h
  47.         out dx, ax                        ; ajuste del modo de dobles palabras 
  48.         
  49.         mov ax, 0F02h
  50.         out dx, ax                        ; seleccionar los 4 planos   
  51.  
  52.         mov ax , 0A000h
  53.         mov es , ax
  54.         xor di , di
  55.         xor ax , ax
  56.         mov cx , 32000
  57.         rep stosw                          ; borrar la pantalla
  58.         
  59.         pop es di dx cx ax 
  60.         ret
  61.  
  62. Set_320x200X    ENDP
  63.  
  64.  
  65.  
  66. ;;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  67. ;;▒▒ Set_320x240X();                                                      ▒▒
  68. ;;▒▒                                                                      ▒▒
  69. ;;▒▒ Inicializa el Modo X de 320x240 a 256 colores en sistema 1x4.        ▒▒
  70. ;;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  71.  
  72.  
  73. Set_320x240X PROC
  74.         
  75.         call Set_320x200X                ;primero inicializamos 13X 
  76.  
  77.         push ax dx
  78.  
  79.         mov dx, 3C2h                     ; Estas modificaciones serán
  80.         mov ax, 0E3h                     ; explicadas en el siguiente     
  81.         out dx, al                       ; artículo con profundidad.
  82.         mov dx, CRTC_ADDR
  83.         mov ax, 2C11h                  
  84.         out dx, ax
  85.         mov ax, 0D06h
  86.         out dx, ax
  87.         mov ax, 03E07h
  88.         out dx, ax
  89.         mov ax, 0EA10h
  90.         out dx, ax
  91.         mov ax, 0AC11h
  92.         out dx, ax
  93.         mov ax, 0DF12h
  94.         out dx, ax
  95.         mov ax, 0E715h
  96.         out dx, ax
  97.         mov ax, 0616h                    ; ;-) Ya estamos en MODO X.
  98.         out dx, ax
  99.  
  100.         pop  dx ax 
  101.         ret
  102.        
  103. Set_320x240X ENDP
  104.  
  105.  
  106. ;;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  107. ;;▒▒ PutPixelX();                                                         ▒▒
  108. ;;▒▒                                                                      ▒▒
  109. ;;▒▒ Coloca un punto en la primera página en (X,Y) de color color.        ▒▒
  110. ;;▒▒ Entrada:                                                             ▒▒
  111. ;;▒▒                                                                      ▒▒
  112. ;;▒▒ AH = Color                                                           ▒▒
  113. ;;▒▒ BX = X                                                               ▒▒
  114. ;;▒▒ CX = Y   ( 4 páginas por 1: puede ir desde 0 hasta RESOL_Y * 4 )     ▒▒
  115. ;;▒▒                                                                      ▒▒
  116. ;;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  117.  
  118. PutPixelX PROC 
  119.  
  120.         push ax bx cx dx es di
  121.  
  122.         push ax cx                    ; copia de Ax y Cx
  123.         mov dx, SEQU_ADDR
  124.         mov al, 2
  125.         out dx, al
  126.         inc dx
  127.         
  128.         mov cx, bx
  129.         and cx, 3                     ; plano = 1 << ( x & 3 )
  130.         xor ax, ax
  131.         inc ax
  132.         shl ax, cl
  133.         out dx, al
  134.         pop cx ax
  135.         
  136.         push cx                         
  137.         shl cx, 6
  138.         mov di, cx
  139.         pop cx
  140.         shl cx, 4                     ; (y<<4) + (y<<6)  ->   (y*80)
  141.         add di, cx
  142.         shr bx, 2                     ; x/4
  143.         add di, bx                    ; di=(y*80) + x/4
  144.  
  145.         mov dx , 0a000h
  146.         mov es , dx
  147.         mov al, ah
  148.         stosb
  149.  
  150.         pop si ds dx cx bx ax
  151.         ret
  152.  
  153. PutPixelX ENDP
  154.  
  155.  
  156. ;;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  157. ;;▒▒ GetPixelX();                                                         ▒▒
  158. ;;▒▒                                                                      ▒▒
  159. ;;▒▒ Devuelve el color del pixel de coordenadas (X,Y) en un sist. 1x4     ▒▒
  160. ;;▒▒ Entrada:                                                             ▒▒
  161. ;;▒▒                                                                      ▒▒
  162. ;;▒▒ BX = X                                                               ▒▒
  163. ;;▒▒ CX = Y   ( 4 páginas por 1: puede ir desde 0 hasta RESOL_Y * 4 )     ▒▒
  164. ;;▒▒                                                                      ▒▒
  165. ;;▒▒ Devuelve                                                             ▒▒
  166. ;;▒▒ AL = Color                                                           ▒▒
  167. ;;▒▒                                                                      ▒▒
  168. ;;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  169.  
  170.  
  171. GetPixelX PROC 
  172.  
  173.         push bx cx dx ds si
  174.  
  175.         mov dx, GRAC_ADDR                     
  176.         mov al, 4                             ; función leer plano
  177.         out dx, al
  178.         inc dx                                ; GRAC_ADDR += 1
  179.         mov ax, bx                            ; copia
  180.         and ax, 3                             ; plano = x & 3
  181.         out dx, al                            ; enviar plano ->(4 últ. bits)
  182.         
  183.         push cx
  184.         shl cx, 6
  185.         mov si, cx
  186.         pop cx
  187.         shl cx, 4
  188.         add si, cx
  189.         shr bx, 2
  190.         add si, bx                           ; SI = (y<<6)+(y<<4)+(x>>2)
  191.  
  192.         mov dx , 0a000h
  193.         mov ds , dx                          ; DS:SI -> Pixel a leer
  194.         lodsb                                ; leemos el byte en AL
  195.  
  196.         pop si ds dx cx bx                   ; recuperamos registros usados
  197.         ret                                  ; volvemos...
  198.  
  199. GetPixelX ENDP
  200.