]> 4ch.mooo.com Git - 16.git/blobdiff - 16/ted5/LIB_A.ASM
ted5 added
[16.git] / 16 / ted5 / LIB_A.ASM
diff --git a/16/ted5/LIB_A.ASM b/16/ted5/LIB_A.ASM
new file mode 100755 (executable)
index 0000000..1ce1de9
--- /dev/null
@@ -0,0 +1,259 @@
+;====================================================
+;
+; Library ASM code
+;
+;====================================================
+       IDEAL
+       P386N
+       MODEL   medium,C
+
+extrn  xormask:WORD,yshift:WORD,CGAfont:WORD,VGAfont:WORD
+
+       DATASEG
+
+SCindex        =       3c4h
+SCmapmask =    2
+GCindex =              3CEh
+GCreadmap =    4
+GCmode         =       5
+
+a      =       0
+LABEL  CGAlookup WORD
+PUBLIC CGAlookup
+       REPT    100
+       dw      a,a XOR 2000h
+a      =       a+80
+       ENDM
+
+a      =       0
+LABEL  EGA1lookup WORD
+PUBLIC EGA1lookup
+       REPT    200
+       dw      a
+a      =       a+40
+       ENDM
+
+a      =       0
+LABEL  EGA2lookup WORD
+PUBLIC EGA2lookup
+       REPT    480
+       dw      a
+a      =       a+80
+       ENDM
+
+a      =       0
+LABEL  VGAlookup WORD
+PUBLIC VGAlookup
+       REPT    200
+       dw      a
+a      =       a+320
+       ENDM
+
+
+       CODESEG
+
+;====================================================
+;
+; Draw CGA chars
+;
+;====================================================
+PROC CGAcharout
+PUBLIC CGAcharout
+ARG    x:WORD,y:WORD,chr:BYTE
+USES si,di,ds
+       mov     bx,[y]
+       shl     bx,1
+       shl     bx,1
+       shl     bx,1
+       shl     bx,1
+       mov     di,[CGAlookup+bx]
+       mov     ax,[x]
+       shl     ax,1
+       add     di,ax
+
+       mov     al,[chr]
+       xor     ah,ah
+       shl     ax,1
+       shl     ax,1
+       shl     ax,1
+       shl     ax,1
+       mov     si,ax
+
+       mov     ax,0b800h
+       mov     es,ax
+       mov     ds,[CGAfont]
+       cld
+       cmp     [ss:xormask],0
+       ja      @@1
+
+       REPT    4
+       movsw
+       add     di,2000h-2
+       movsw
+       sub     di,2000h-78
+       ENDM
+       jmp     @@exit
+@@1:
+       REPT    4
+       lodsw
+       xor     ax,0ffffh
+       stosw
+       add     di,2000h-2
+       lodsw
+       xor     ax,0ffffh
+       stosw
+       sub     di,2000h-78
+       ENDM
+@@exit:
+       ret
+ENDP
+
+;====================================================
+;
+; Draw EGA chars
+;
+;====================================================
+PROC EGAcharout
+PUBLIC EGAcharout
+ARG    x:WORD,y:WORD,chr:BYTE,video:WORD
+USES si,di,ds,bp
+
+       mov     dx,GCindex
+       mov     ax,GCmode
+       out     dx,ax
+
+       mov     bx,[y]
+       shl     bx,1
+       shl     bx,1
+       shl     bx,1
+       add     bx,[yshift]
+       shl     bx,1
+
+       cmp     [video],1
+       jne     @@0
+       mov     cx,39
+       mov     di,[EGA1lookup+bx]
+       jmp     @@1
+@@0:
+       mov     cx,79
+       mov     di,[EGA2lookup+bx]
+@@1:
+       add     di,[x]
+
+       mov     ax,0a000h
+       mov     es,ax
+       mov     ds,ax
+
+       mov     si,0f000h
+       mov     al,[chr]
+       xor     ah,ah
+       shl     ax,1
+       shl     ax,1
+       shl     ax,1
+       add     si,ax
+
+       cld
+       cmp     [ss:xormask],0
+       ja      @@2
+
+       mov     dx,GCindex
+       mov     ax,GCmode OR 100h
+       out     dx,ax
+       mov     dx,SCindex
+       mov     ax,SCmapmask OR 0f00h
+       out     dx,ax
+
+       REPT    8
+       movsb
+       add     di,cx
+       ENDM
+       jmp     @@exit
+
+@@2:
+ga     =       100h
+gb     =       0
+       mov     bp,si
+       mov     bx,di
+       REPT    4
+       mov     dx,SCindex
+       mov     ax,SCmapmask OR ga
+       out     dx,ax
+       mov     dx,GCindex
+       mov     ax,GCreadmap OR gb
+       out     dx,ax
+       REPT    8
+       lodsb
+       xor     al,0ffh
+       stosb
+       add     di,cx
+       ENDM
+       mov     di,bx
+       mov     si,bp
+ga     =       ga*2
+gb     =       gb+100h
+       ENDM
+@@exit:
+       mov     dx,GCindex
+       mov     ax,GCmode
+       out     dx,ax
+       ret
+ENDP
+
+;====================================================
+;
+; Draw VGA chars
+;
+;====================================================
+PROC VGAcharout
+PUBLIC VGAcharout
+ARG    x:WORD,y:WORD,chr:BYTE
+USES si,di,ds
+
+       mov     bx,[y]
+       shl     bx,1
+       shl     bx,1
+       shl     bx,1
+       add     bx,[yshift]
+       shl     bx,1
+       mov     di,[VGAlookup+bx]
+
+       mov     ax,[x]
+       shl     ax,1
+       shl     ax,1
+       shl     ax,1
+       add     di,ax
+
+       mov     ah,[chr]
+       xor     al,al
+       shr     ax,1
+       shr     ax,1    ;[chr]*64!
+       mov     si,ax
+
+       mov     ax,0a000h
+       mov     es,ax
+       mov     ds,[VGAfont]
+
+       cmp     [ss:xormask],0
+       ja      @@1
+
+       REPT    8
+       REPT    4
+       movsw
+       ENDM
+       add     di,320-8
+       ENDM
+       jmp     @@exit
+@@1:
+       REPT    8
+       REPT    4
+       lodsw
+       xor     ax,0ffffh
+       stosw
+       ENDM
+       add     di,320-8
+       ENDM
+@@exit:
+       ret
+ENDP
+
+END