| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- .286
- .model small
- .code
- ORG 100h
- start:
- mov ax, 13h
- int 10h
- call MakePal
- call WriteLines
- lu:
- mov ah, 06h
- mov dl, 0ffh
- int 21h
- jnz GAMEOVER
- call AdvPal
- PUSH 5
- call Coolwait
- jmp lu
- GAMEOVER:
- mov ax,3
- int 10h
- int 20h
- ; End of main proc
- ;-------------------------------
- MakePal proc near
- pusha
- mov cx, 128
- colr:
- mov dx, 3c6h ;Mask
- mov al, 0FFh
- out dx, al
- mov dx, 3c8h ; Write index
- mov al, Col
- out dx, al
- mov dx, 3c9h ; Out data
- mov al, RCol ; R
- out dx, al
- mov al, GCol ; G
- out dx, al
- mov al, BCol ; B
- out dx, al
- cmp byte ptr Col, 63
- ja GIn1
- je lp1end
- inc RCol
- jmp lp1End
- GIn1: dec RCol
- inc GCol
- lp1End: inc Col
- loop colr
- inc RCol
- dec Gcol
- mov cx, 128
- colB:
- mov dx, 3c6h ;Mask
- mov al, 0FFh
- out dx, al
- mov dx, 3c8h ; Write index
- mov al, Col
- out dx, al
- mov dx, 3c9h
- mov al, RCol
- out dx, al
- mov al, GCol
- out dx, al
- mov al, BCol
- out dx, al
- cmp byte ptr Col, 0BFh
- ja GIn2
- je lp2end
- inc BCol
- dec GCol
- jmp lp2End
- GIn2: dec BCol
- lp2End: inc Col
- loop colB
- popa
- ret
- Col db 0
- RCol db 0
- GCol db 0
- Bcol db 0
- endp
- ;{--------------------------------------}
- WriteLines proc near
- pusha
- mov ax, 0A000h
- mov es, ax
- mov di, 0
- mov ax, 0000h
- mov cx, 200
- wrlp1: push cx
- mov cx, 160
- repe stosw
- pop cx
- inc ah
- inc al
- loop wrlp1
- popa
- ret
- endp
- ;/---------------
- ;|
- ;\---------------
- AdvPal proc near
- pusha
- mov dx, 3c7h ; Read index
- mov al, 0FEh
- out dx, al
- mov dx, 3c9h
- in al, dx
- mov Rlast, al
- in al, dx
- mov Glast, al
- in al, dx
- mov Blast, al
- ; Save last values
- mov cx, 0FEh
- ; Main cirlce
- adV: mov dx, 3c7h ; Read index
- mov al, cl
- dec al
- out dx, al
- mov dx, 3c9h
- in al, dx
- mov curR, al
- in al, dx
- mov curG, al
- in al, dx
- mov curB, al
- ; Read last value, and write it to next
- mov dx, 3c8h ; Write index
- mov al, cl
- out dx, al
- mov dx, 3c9h
- mov al, curR
- out dx, al
- mov al, curG
- out dx, al
- mov al, curB
- out dx, al
- dec cx
- cmp cx, 1
- jae adv
- mov dx, 3c8h ; Write index
- mov al, 1h
- out dx, al
- mov dx, 3c9h
- mov al, Rlast
- out dx, al
- mov al, Glast
- out dx, al
- mov al, Blast
- out dx, al
- popa
- ret
- curR db 0
- curG db 0
- curB db 0
- Rlast db 0
- Glast db 0
- Blast db 0
- endp
- CoolWait proc near ; CoolWait(word delay);
- push bp
- mov bp, sp
- push cx
- mov cx, word ptr [bp+4]
- ggg: push cx
- mov cx, 0
- loop $
- pop cx
- loop ggg
- pop cx
- pop bp
- ret 2
- endp
- end start
|