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
- CALL estableceragua
- 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
- pintar_linea:
- MOV AL, [azul]
- 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
- estableceragua:
- MOV AL, [azul]
- MOV DI, 320*133+130
- MOV [auxagua], DI
- MOV CX, 34
- largo:
- PUSH CX
- MOV CX, 58
- agua:
- MOV [ES:DI], AL
- INC DI
- LOOP agua
- SUB [auxagua], 320
- MOV DI, [auxagua]
- POP CX
- LOOP largo
- RET
- timer:
- DEC [counter]
- JNZ salir_counter
- CMP [llenando], 1
- JE llenar
- CMP [vaciando], 1
- JE vaciando
- MOV [counter], 20
- llenar:
- CALL llenar_tanque
- MOV [counter], 20
- JMP salir_counter
- vaciar:
- CALL vaciar_tanque
- MOV [counter], 20
- 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
- JE opc1
- CMP AL, 47
- JE opc2
- 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 AL, [azul]
- MOV DI, 320*99+130
- MOV [aux1], DI
- MOV CX, 30
- alturadelagua:
- PUSH CX
- MOV CX, 58
- posicionagua:
- MOV [ES:DI], AL
- INC DI
- LOOP posicionagua
- SUB [aux1], 320
- MOV DI, [aux1]
- POP CX
- LOOP alturadelagua
- RET
- vaciartanque:
- MOV AL, [blanco]
- MOV DI, 320*99+130
- MOV [aux3], DI
- MOV CX, 35
- niveldelagua:
- PUSH CX
- MOV CX, 58
- posagua:
- MOV [ES:DI], AL
- INC DI
- LOOP posagua
- ADD [aux3], 320
- MOV DI, [aux3]
- POP CX
- LOOP niveldelagua
- RET
- 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
- auxagua DW ?
- 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