Advertisement
carlosmfp

tanqcito

Mar 25th, 2024
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MIX Assembler 3.29 KB | Source Code | 0 0
  1. format binary as 'img'
  2. org 7C00h
  3.  
  4.     MOV AX, 13h
  5.     INT 10h
  6.     MOV AX, 0xA000
  7.     MOV ES, AX
  8.    
  9.     PUSH ES
  10.     CLI
  11.         XOR AX, AX
  12.         XOR DI, DI
  13.         MOV ES, AX
  14.         MOV AX, timer
  15.         MOV [ES:8*4], AX
  16.         MOV [ES:8*4+2], CS
  17.         MOV AX, teclado
  18.         MOV [ES:9*4], AX
  19.         MOV [ES:9*4+2], CS
  20.     STI
  21.     POP ES
  22.    
  23.     CALL pintarfondo
  24.     CALL pintartanque
  25.     XOR DI, DI
  26.  
  27.     jmp $
  28.  
  29.     pintarfondo:
  30.         MOV AL, [blanco]
  31.         MOV DI, 320*24+29
  32.         MOV [aux], DI
  33.         MOV CX, 260
  34.         posicion:
  35.             PUSH CX
  36.             MOV CX, 140
  37.             pintarcolumnas:
  38.                 MOV [ES:DI], AL
  39.                 ADD DI, 320
  40.                 LOOP pintarcolumnas
  41.             POP CX
  42.             INC [aux]
  43.             MOV DI, [aux]
  44.             LOOP posicion
  45.         RET
  46.  
  47.     pintartanque:
  48.         MOV AL, [negro]
  49.         CALL filas
  50.         CALL columnas
  51.            
  52.         filas:
  53.             MOV DI,320*64+129
  54.             MOV [arriba], DI
  55.             MOV DI, 320*134+129
  56.             MOV [abajo], DI
  57.             MOV CX, 60
  58.             pintarfilas:
  59.                 MOV DI, [arriba]
  60.                 MOV [ES:DI], AL
  61.                 INC DI
  62.                 MOV [arriba], DI
  63.                 MOV DI, [abajo]
  64.                 MOV [ES:DI], AL
  65.                 INC DI
  66.                 MOV [abajo], DI
  67.             LOOP pintarfilas
  68.     RET
  69.    
  70.     columnas:
  71.         MOV DI, 320*65+129
  72.         MOV [izquierda], DI
  73.         MOV DI, 320*65+188
  74.         MOV [derecha], DI
  75.         MOV CX, 69
  76.         pintarc:
  77.             MOV DI, [izquierda]
  78.             MOV [ES:DI], AL
  79.             ADD DI, 320
  80.             MOV [izquierda], DI
  81.             MOV DI, [derecha]
  82.             MOV [ES:DI], AL
  83.             ADD DI, 320
  84.             MOV [derecha], DI
  85.         LOOP pintarc
  86.     RET
  87.            
  88.     timer:
  89.         DEC [counter]
  90.         JNZ salir_counter
  91.        
  92.         CMP [llenando], 1
  93.         JE llenar
  94.         CMP [vaciando], 1
  95.         JE vaciar
  96.        
  97.        
  98.         MOV [counter], 7
  99.         JMP salir_counter
  100.  
  101.         llenar:
  102.             CALL llenartanque
  103.             MOV [counter], 7
  104.             JMP salir_counter
  105.         vaciar:
  106.             CALL vaciartanque
  107.             MOV [counter], 7
  108.             JMP salir_counter
  109.  
  110.         salir_counter:
  111.             MOV AL, 20h
  112.             OUT 20h, AL
  113.     IRET
  114.            
  115.  
  116.     teclado:
  117.         IN AL, 60H
  118.         CMP AL, 127
  119.         JAE salir_teclado
  120.         CMP AL, 38  ; l
  121.         JE opc1
  122.         CMP AL, 47  ; v
  123.         JE opc2
  124.        
  125.        
  126.         JMP salir_teclado
  127.  
  128.         opc1:   ;llenar el tanque
  129.             MOV [llenando], 1
  130.             MOV [vaciando], 0
  131.             JMP salir_teclado
  132.  
  133.         opc2:  ;vaciando el tanque
  134.             MOV [vaciando], 1
  135.             MOV [llenando], 0
  136.             JMP salir_teclado
  137.  
  138.         salir_teclado:
  139.             MOV AL, 20h
  140.             OUT 20h, AL
  141.     IRET
  142.    
  143.    
  144.  
  145.     llenartanque:
  146.         MOV DX, [altura_max]
  147.         CMP [altura], DX
  148.         JAE parar_llenado
  149.  
  150.         MOV AL, [azul]
  151.         MOV DI, [auxagua]
  152.         MOV CX, 58
  153.  
  154.         pintar_agua:
  155.             MOV [ES:DI], AL
  156.             INC DI
  157.             LOOP pintar_agua
  158.  
  159.         SUB [auxagua], 320
  160.         INC [altura]
  161.         JMP salir_llenartanque
  162.        
  163.         parar_llenado:
  164.             MOV [llenando], 0
  165.             MOV BX, [altura_max]
  166.             MOV [altura], BX
  167.        
  168.         salir_llenartanque:
  169.             RET
  170.    
  171.     vaciartanque:
  172.         MOV DX, [fondo_del_tanque]
  173.         CMP [altura], DX
  174.         JAE parar_vaciado
  175.  
  176.         MOV AL, [blanco]
  177.         MOV DI, [auxagua]
  178.         MOV CX, 58
  179.  
  180.         quitar_agua:
  181.             MOV [ES:DI], AL
  182.             INC DI
  183.             LOOP quitar_agua
  184.  
  185.         ADD [auxagua], 320
  186.         DEC [altura]
  187.         JMP salir_vaciartanque
  188.        
  189.         parar_vaciado:
  190.             MOV [vaciando], 0
  191.             MOV [altura], 0
  192.             MOV BX, [fondo_del_tanque]
  193.             MOV [auxagua], BX
  194.        
  195.         salir_vaciartanque:
  196.             RET
  197.    
  198.     ; fondo_tanque db 320*
  199.     altura_max dw 55
  200.     altura dw 0
  201.     auxagua DW 320*133+130 ; Donde se va a pintar el agua
  202.     fondo_del_tanque dw 320*133+130
  203.     blanco db 00001111b
  204.     llenando db 0
  205.     vaciando db 0
  206.     aux DW ?
  207.     negro db 00000000b
  208.     arriba DW ?
  209.     abajo DW ?
  210.     derecha DW ?
  211.     izquierda DW ?
  212.     azul db 01h
  213.    
  214.     aux1 DW ?
  215.     aux2 DW ?
  216.     aux3 DW ?
  217.     counter db 18
  218.  
  219. TIMES 510-($-$$) DB 0
  220. DW 0xAA55
  221.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement