Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- format binary as 'img'
- org 7C00h
- MOV AX, 13h
- INT 10h
- MOV AX, 0xA000
- MOV ES, AX
- PUSH ES
- CLI
- XOR AX, AX
- XOR DI, DI
- MOV ES, AX
- MOV AX, timer
- MOV [ES:8*4], AX
- MOV [ES:8*4+2], CS
- MOV AX, teclado
- MOV [ES:9*4], AX
- MOV [ES:9*4+2], CS
- STI
- POP ES
- CALL pintarfondo
- CALL pintartanque
- XOR DI, DI
- jmp $
- pintarfondo:
- MOV AL, [blanco]
- MOV DI, 320*24+29
- MOV [aux], DI
- MOV CX, 260
- posicion:
- PUSH CX
- MOV CX, 140
- pintarcolumnas:
- MOV [ES:DI], AL
- ADD DI, 320
- LOOP pintarcolumnas
- POP CX
- INC [aux]
- MOV DI, [aux]
- LOOP posicion
- RET
- pintartanque:
- MOV AL, [negro]
- CALL filas
- CALL columnas
- filas:
- MOV DI,320*64+129
- MOV [arriba], DI
- MOV DI, 320*134+129
- MOV [abajo], DI
- MOV CX, 60
- pintarfilas:
- MOV DI, [arriba]
- MOV [ES:DI], AL
- INC DI
- MOV [arriba], DI
- MOV DI, [abajo]
- MOV [ES:DI], AL
- INC DI
- MOV [abajo], DI
- LOOP pintarfilas
- RET
- columnas:
- MOV DI, 320*65+129
- MOV [izquierda], DI
- MOV DI, 320*65+188
- MOV [derecha], DI
- MOV CX, 69
- pintarc:
- MOV DI, [izquierda]
- MOV [ES:DI], AL
- ADD DI, 320
- MOV [izquierda], DI
- MOV DI, [derecha]
- MOV [ES:DI], AL
- ADD DI, 320
- MOV [derecha], DI
- LOOP pintarc
- RET
- timer:
- DEC [counter]
- JNZ salir_counter
- CMP [llenando], 1
- JE llenar
- CMP [vaciando], 1
- JE vaciar
- MOV [counter], 7
- JMP salir_counter
- llenar:
- CALL llenartanque
- MOV [counter], 7
- JMP salir_counter
- vaciar:
- CALL vaciartanque
- MOV [counter], 7
- JMP salir_counter
- salir_counter:
- MOV AL, 20h
- OUT 20h, AL
- IRET
- teclado:
- IN AL, 60H
- CMP AL, 127
- JAE salir_teclado
- CMP AL, 38 ; l
- JE opc1
- CMP AL, 47 ; v
- JE opc2
- JMP salir_teclado
- opc1: ;llenar el tanque
- MOV [llenando], 1
- MOV [vaciando], 0
- JMP salir_teclado
- opc2: ;vaciando el tanque
- MOV [vaciando], 1
- MOV [llenando], 0
- JMP salir_teclado
- salir_teclado:
- MOV AL, 20h
- OUT 20h, AL
- IRET
- llenartanque:
- MOV DX, [altura_max]
- CMP [altura], DX
- JAE parar_llenado
- MOV AL, [azul]
- MOV DI, [auxagua]
- MOV CX, 58
- pintar_agua:
- MOV [ES:DI], AL
- INC DI
- LOOP pintar_agua
- SUB [auxagua], 320
- INC [altura]
- JMP salir_llenartanque
- parar_llenado:
- MOV [llenando], 0
- MOV BX, [altura_max]
- MOV [altura], BX
- salir_llenartanque:
- RET
- vaciartanque:
- MOV DX, [fondo_del_tanque]
- CMP [altura], DX
- JAE parar_vaciado
- MOV AL, [blanco]
- MOV DI, [auxagua]
- MOV CX, 58
- quitar_agua:
- MOV [ES:DI], AL
- INC DI
- LOOP quitar_agua
- ADD [auxagua], 320
- DEC [altura]
- JMP salir_vaciartanque
- parar_vaciado:
- MOV [vaciando], 0
- MOV [altura], 0
- MOV BX, [fondo_del_tanque]
- MOV [auxagua], BX
- salir_vaciartanque:
- RET
- ; fondo_tanque db 320*
- altura_max dw 55
- altura dw 0
- auxagua DW 320*133+130 ; Donde se va a pintar el agua
- fondo_del_tanque dw 320*133+130
- blanco db 00001111b
- llenando db 0
- vaciando db 0
- aux DW ?
- negro db 00000000b
- arriba DW ?
- abajo DW ?
- derecha DW ?
- izquierda DW ?
- azul db 01h
- aux1 DW ?
- aux2 DW ?
- aux3 DW ?
- counter db 18
- TIMES 510-($-$$) DB 0
- DW 0xAA55
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement