X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=tweak.asm;fp=tweak.asm;h=56af677cd6bde28a5b6308d4c0e731541ade485e;hb=6334d91faf284bd06a8f1408281f784bd291c4f6;hp=0000000000000000000000000000000000000000;hpb=56a8ceb4ff1908c03a18671df7c083eceb3a98b4;p=plz.git diff --git a/tweak.asm b/tweak.asm new file mode 100755 index 0000000..56af677 --- /dev/null +++ b/tweak.asm @@ -0,0 +1,349 @@ + IDEAL + MODEL huge + +CODESEG + +PUBLIC C tw_opengraph, C tw_putpixel, C tw_setpalette, C tw_setstart +PUBLIC C tw_pictovmem, C tw_closegraph, C tw_waitvr, C tw_setrgbpalette +PUBLIC C tw_clrscr, C tw_setpalarea, C tw_getpixel, C tw_opengraph2 + +PUBLIC C scr_seg ; videomuistin alku segmentti + +planetau db 1,2,4,8 +scr_seg dw 0a000h + +; avaa 320x200 tweak tilan, 4 sivua, 4 planea + +PROC tw_opengraph + + mov dx, 03c4h + mov ax, 0f02h + out dx, ax + mov dx, 0a000h + mov es, dx + xor di, di + xor ax, ax + mov cx, 8000h + rep stosw ; clear vmem + + mov dx, 3d4h + mov ax, 0209h + out dx, ax ; 134 y + + mov ax, 5013h + out dx, ax ; 640 wide + ret +ENDP + + +PROC tw_opengraph2 + + mov dx, 03c4h + mov ax, 0604h + out dx, ax ; chain4 off + + mov ax, 0f02h + out dx, ax + mov dx, 0a000h + mov es, dx + xor di, di + xor ax, ax + mov cx, 8000h + rep stosw ; clear vmem + + mov dx, 03d4h + mov ax, 0014h + out dx, ax ; crtc long off + + mov ax, 0e317h + out dx, ax ; crtc byte on + + mov ax, 0009h + out dx, ax ; 400 + + mov ax, 3013h + out dx, ax ; 384 wide + + ret +ENDP + + + +PROC tw_clrscr + + mov dx, 3c4h + mov ax, 0f02h + out dx, ax + mov dx, [cs:scr_seg] + mov es, dx + xor di, di + xor eax, eax + mov cx, 1000h + rep stosd ; clear vmem + + ret +ENDP + +PROC tw_closegraph + + mov ax, 03h + int 10h + + ret +ENDP + +; piirt„„ pisteen ruudulle + +PROC tw_putpixel + + ARG x:word, y:word, color:word + + push bp + mov bp, sp + + mov ax, [cs:scr_seg] + mov es, ax + + mov dx, 03c4h + mov bx, [x] + and bx, 03h + mov ah, [cs:planetau+bx] + mov al, 02h + out dx, ax ; select plane + + mov bx, [x] + shr bx, 2 + mov ax, [y] + shl ax, 4 + add bx, ax + shl ax, 1 + add bx, ax + shl ax, 2 + add bx, ax + + mov cx, [color] + mov [es:bx], cl + + pop bp + ret +ENDP + +PROC tw_getpixel + + ARG x:word, y:word + + push bp + mov bp, sp + + mov ax, [scr_seg] + mov es, ax + + mov dx, 03ceh + mov ax, [x] + and ax, 03h + mov ah, al + mov al, 04h + out dx, ax ; select plane + + mov ax, [y] + shl ax, 4 + mov bx, ax + shl ax, 1 + add bx, ax + shl ax, 2 + add bx, ax + mov ax, [x] + shr ax, 2 + add bx, ax + + xor ax, ax + mov al,[es:bx] + + pop bp + ret +ENDP +; vaihtaa koko paletin + +PROC tw_setpalette + + ARG pal:dword + + push bp + mov bp, sp + push si ds + + lds si,[pal] + cld + mov cx, 300h + mov dx, 03c8h + mov al, 0 + out dx, al + inc dx + + rep outsb + + pop ds si + pop bp + ret +ENDP + +PROC C tw_setpalarea + + ARG pal:dword, start:word, cnt:word + + push si ds + + lds si,[pal] + cld + mov cx, [cnt] + mov ax, cx + add cx, ax + add cx, ax + mov dx, 03c8h + mov ax, [start] + out dx, al + inc dx + + rep outsb + + pop ds si + ret +ENDP + +; asettaa videomuistin alun + +PROC tw_setstart + + ARG start:word + + push bp + mov bp,sp + + mov bx, [start] + mov dx, 03d4h + mov al, 0dh + mov ah, bl + out dx, ax + mov al, 0ch + mov ah, bh + out dx, ax + + pop bp + ret +ENDP + +; kopioi muistista unpacked 1bpl kuvan 4planen kuvaksi videomuistiin +; void tw_pictovmem(char far *pic, unsigned int vstart, unsigned int bytes); + +PROC tw_pictovmem + + ARG pic:dword,to:word,len:word + + push bp + mov bp,sp + push ds es si di + + mov es, [scr_seg] + mov di, [to] + lds si, [pic] + mov cx, [len] + + mov dx,03ceh + mov ax,4005h ; w-mode 0 + out dx,ax + + mov dx, 03c4h + mov al, 02h + mov ah, 1h + out dx, ax + shr cx, 2 +@@l1: + movsb + add si, 3 + loop @@l1 + + + lds si, [pic] + add si, 1d + mov di, [to] + mov cx, [len] + + mov ax, 0202h + out dx, ax + shr cx, 2 +@@l2: + movsb + add si, 3 + loop @@l2 + + + lds si, [pic] + add si, 2d + mov di, [to] + mov cx, [len] + + mov ax, 0402h + out dx, ax + shr cx, 2 +@@l3: + movsb + add si, 3 + loop @@l3 + + + lds si, [pic] + add si, 3d + mov di, [to] + mov cx, [len] + + mov ax, 0802h + out dx, ax + shr cx, 2 +@@l4: + movsb + add si, 3 + loop @@l4 + + pop di si es ds + pop bp + ret +ENDP + +PROC tw_waitvr + + mov dx, 03dah + +@@loop1: + in al, dx + test al, 08h + jnz @@loop1 + +@@loop2: + in al, dx + test al, 08h + jz @@loop2 + + ret +ENDP + + +PROC C tw_setrgbpalette + + ARG pal:word, r:word, g:word, b:word + + mov dx, 3c8h + mov ax, [pal] + out dx, al + + inc dx + mov ax, [r] + out dx, al + mov ax, [g] + out dx, al + mov ax, [b] + out dx, al + + ret +ENDP + +END