X-Git-Url: http://4ch.mooo.com/gitweb/?p=16.git;a=blobdiff_plain;f=16%2Fted5%2FLIB_A.ASM;fp=16%2Fted5%2FLIB_A.ASM;h=1ce1de92f47e2a85ec95039841c52a003795f548;hp=0000000000000000000000000000000000000000;hb=4c15d088479b9b6c4a8b298a9db585bc11582321;hpb=21ff8e5607ba86e91ed0d71f6261fd0fcc676e16 diff --git a/16/ted5/LIB_A.ASM b/16/ted5/LIB_A.ASM new file mode 100755 index 00000000..1ce1de92 --- /dev/null +++ b/16/ted5/LIB_A.ASM @@ -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