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