.386
Locals
;------
CSEG SEGMENT PARA `CODE` USE16
ASSUME CS:CSEG,DS:CSEG,SS:CSEG
ORG 100h
AUTO equ OFFSET AUTO1+1
size equ 120
RealStart:
jmp Start
;------
SetPalette MACRO
mov dx, 3c8h
MOV AL,1
out dx, al ; zacznij od koloru 0
inc dx ; 3c9h to nast(c)pny rejestr
xor ah, ah
Loop:
mov AL,0FFH
out dx, al ; R(ed)
out dx, al ; G(reen)
out dx, al ; B(lue)
ENDM
;--------------------------------------- ----------------;
Start:
mov ax,13h
int 10h ; wĄcz 13h (320x200x8bit)
SetPalette
push 0a000h
pop es
MOV BH,21
MainLoop:
xor di, di ; ustaw es:[di] na poczĄtek ekranu
mov dx, 3dah ; \\
WaitVSync: ; \\
in al, dx ; | poczekaj na plamk(c)
test al, 8 ; /
jz WaitVSync ; /
;--------------------------------------- ----------------;
XOR SI,SI
MOV CH,0
mov cL, 200
Outer:
mov dx, 320
Inner:
MOV AH,0
MOV BL,BH
IN2:
mov aL, 0
AND AH,1
JNZ IN3
INC AL
IN3:
AND CH,1
JNZ IN3A
XOR AL,1
IN3A:
stosb ; postaw pixel
DEC BL
JNZ IN4
INC AH
MOV BL,BH
IN4:
dec dx
jnz In2
PUSH BX
XCHG BL,BH
XOR BH,BH
INC SI
CMP SI,BX
JNZ IN5
XOR SI,SI
INC CH
IN5:
POP BX
dec cL
jnz Outer
;--------------------------------------- ----------------;
AUTO1:
INC BH
CMP BH,size
JZ AUTO2A
CMP BH,0
JNZ AUTO2
MOV BH,BYTE PTR [AUTO]
CMP BH, 0CFH
JNZ AUTO2
XOR BH,8
MOV BYTE PTR [AUTO],BH
MOV BH,1
JMP AUTO2
AUTO2A:
MOV BH,BYTE PTR [AUTO]
XOR BH,8
MOV BYTE PTR [AUTO],BH
AUT3: MOV BH,size
AUTO2:
mov ah,1
int 16h
jz MainLoop
mov ah,0
int 16h
cmp al,27
jz exit
mov ah,0
int 16h
jmp mainloop
exit:
mov ax,3h
int 10h ;3h (tekstowy)
ret
Time dw ?
CSEG ENDS
END RealStart