.model small .code org 100h start: push bp ; стек mov bp,sp sub sp, 303h mov ah,0 ; установка реж 320х200х256 mov al,13h int 10h xor bx,bx ; считываем палитру в [BP-4]-[BP+FCFDh] mov cx,0FDh lea dx,[bp][0FCFDh] mov ax,ds mov es,ax mov ax,01017h int 10h mov ax,0A000h ; устанавливаем es:di на видео память mov es,ax xor ax,ax mov di,ax mov cx,0FA00h ; начинаем рисовать mov al,00h LP: mov es:[di],BYTE PTR al ; цикл прорисовки mov ax,di add ax,01h xor dx,dx ; проверяем, кратно ли di 320ти mov bx,0140h div bx mov al, BYTE PTR es:[di] add di,1h cmp dx,0h je UVEL ; если да, увеличиваем цвет LOP: loop LP ; конец цикла jmp e UVEL: add al,1h ; здесь увеличиваем цвет jmp LOP e: mov al, [bp][0FD00h] ; сохраняем первый цвет в [BP-3] mov [bp-0003], al mov al, [bp][0FD01h] ; сохраняем первый цвет в [BP-2] mov [bp-0002], al mov al, [bp][0FD02h] ; сохраняем первый цвет в [BP-1] mov [bp-0001], al lea ax,[bp][0FD00h] ; от сих lea bx,[bp][0FD03h] mov si,bx mov di,ax mov ax,ds mov es,ax mov cx,02FAh repe movsb ; до сих, смещаем палитру ниже mov al, [bp][-0003h] mov [bp-0006], al ; потерянный цвет в конец палитры mov al, [bp][-0002h] mov [bp-0005], al mov al, [bp][-0001h] mov [bp-0004], al mov dx,03DAh ; порт состояния луча монитора in1: in al,dx ; от сих and al,008h jne in1 in2: in al,dx and al,008h je in2 ; до сих - ждем обратного хода луча xor bx,bx ; от сих mov cx,0100h lea dx,[bp][0FCFDh] mov ax,ds mov es,ax mov ax,01012h int 10h ; до сих - вставляем палитру mov ah,01h ; проверка на нажатие кнопки int 16h ; ----- jz e ; если нету, то снова mov ah,0 mov al,3h ; обратно в текстовый режим int 10h ; ----- mov sp,bp ; вертаем стек pop bp int 20h ; типа конец :) end start