Advertisement
klyman047

tanqcito

Mar 20th, 2024
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 3.13 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.     CALL estableceragua
  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.    
  48.     pintar_linea:
  49.         MOV AL, [azul]
  50.        
  51.     RET
  52.  
  53.     pintartanque:
  54.         MOV AL, [negro]
  55.         CALL filas
  56.         CALL columnas
  57.        
  58.     filas:
  59.         MOV DI,320*64+129
  60.         MOV [arriba], DI
  61.         MOV DI, 320*134+129
  62.         MOV [abajo], DI
  63.         MOV CX, 60
  64.         pintarfilas:
  65.             MOV DI, [arriba]
  66.             MOV [ES:DI], AL
  67.             INC DI
  68.             MOV [arriba], DI
  69.             MOV DI, [abajo]
  70.             MOV [ES:DI], AL
  71.             INC DI
  72.             MOV [abajo], DI
  73.         LOOP pintarfilas
  74.     RET
  75.    
  76.     columnas:
  77.         MOV DI, 320*65+129
  78.         MOV [izquierda], DI
  79.         MOV DI, 320*65+188
  80.         MOV [derecha], DI
  81.         MOV CX, 69
  82.         pintarc:
  83.             MOV DI, [izquierda]
  84.             MOV [ES:DI], AL
  85.             ADD DI, 320
  86.             MOV [izquierda], DI
  87.             MOV DI, [derecha]
  88.             MOV [ES:DI], AL
  89.             ADD DI, 320
  90.             MOV [derecha], DI
  91.         LOOP pintarc
  92.     RET
  93.            
  94.     estableceragua:
  95.         MOV AL, [azul]
  96.         MOV DI, 320*133+130
  97.         MOV [auxagua], DI
  98.         MOV CX, 34
  99.         largo:
  100.             PUSH CX
  101.             MOV CX, 58
  102.             agua:
  103.                 MOV [ES:DI], AL
  104.                 INC DI
  105.             LOOP agua
  106.             SUB [auxagua], 320
  107.             MOV DI, [auxagua]
  108.             POP CX
  109.         LOOP largo
  110.     RET
  111.  
  112.     timer:
  113.         DEC [counter]
  114.         JNZ salir_counter
  115.         CMP [llenando], 1
  116.         JE llenar
  117.         CMP [vaciando], 1
  118.         JE vaciando
  119.         MOV [counter], 20
  120.  
  121.         llenar:
  122.             CALL llenar_tanque
  123.             MOV [counter], 20
  124.             JMP salir_counter
  125.         vaciar:
  126.             CALL vaciar_tanque
  127.             MOV [counter], 20
  128.             JMP salir_counter
  129.  
  130.         salir_counter:
  131.             MOV AL, 20h
  132.             OUT 20h, AL
  133.     IRET
  134.            
  135.  
  136.     teclado:
  137.         IN AL, 60H
  138.         CMP AL, 127
  139.         JAE salir_teclado
  140.  
  141.         CMP AL, 38
  142.         JE opc1
  143.         CMP AL, 47
  144.         JE opc2
  145.  
  146.         opc1:   ;llenar el tanque
  147.             MOV [llenando], 1
  148.             MOV [vaciando], 0
  149.             JMP salir_teclado
  150.  
  151.         opc2:  ;vaciando el tanque
  152.             MOV [vaciando], 1
  153.             MOV [llenando], 0
  154.             JMP salir_teclado
  155.  
  156.         salir_teclado:
  157.             MOV AL, 20h
  158.             OUT 20h, AL
  159.     IRET
  160.    
  161.     llenartanque:
  162.         MOV AL, [azul]
  163.         MOV DI, 320*99+130
  164.         MOV [aux1], DI
  165.         MOV CX, 30
  166.         alturadelagua:
  167.             PUSH CX
  168.             MOV CX, 58
  169.             posicionagua:
  170.                 MOV [ES:DI], AL
  171.                 INC DI
  172.             LOOP posicionagua
  173.             SUB [aux1], 320
  174.             MOV DI, [aux1]
  175.             POP CX
  176.         LOOP alturadelagua
  177.     RET
  178.    
  179.     vaciartanque:
  180.         MOV AL, [blanco]
  181.         MOV DI, 320*99+130
  182.         MOV [aux3], DI
  183.         MOV CX, 35
  184.         niveldelagua:
  185.             PUSH CX
  186.             MOV CX, 58
  187.             posagua:
  188.                 MOV [ES:DI], AL
  189.                 INC DI
  190.             LOOP posagua
  191.             ADD [aux3], 320
  192.             MOV DI, [aux3]
  193.             POP CX
  194.         LOOP niveldelagua
  195.     RET
  196.        
  197.    
  198.     blanco db 00001111b
  199.     llenando db 0
  200.     vaciando db 0
  201.     aux DW ?
  202.     negro db 00000000b
  203.     arriba DW ?
  204.     abajo DW ?
  205.     derecha DW ?
  206.     izquierda DW ?
  207.     azul db 01h
  208.     auxagua DW ?
  209.     aux1 DW ?
  210.     aux2 DW ?
  211.     aux3 DW ?
  212.     counter db 18
  213.  
  214. TIMES 510-($-$$) DB 0
  215. DW 0xAA55
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement