home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Unsorted BBS Collection
/
thegreatunsorted.tar
/
thegreatunsorted
/
programming
/
asm_programming
/
VERTSCR.ZIP
/
MXFONT2.INC
< prev
next >
Wrap
Text File
|
1993-07-24
|
7KB
|
365 lines
;
; Order of operation:
; 1) Call StealFont (grabs 8x8 bios font)
; 2) Change into any 256 color PLANAR mode
; 3) Call SetDefPal, which sets up the default palette useing the last
; few palette registers. This is not neccessary, but if you want
; to use the predefined colors, it is needed.
; ?) Call PrintText to print a message
; DI = Ypos, AX = Xpos, DS:SI -> zero terminating string to process.
; 1 = change color command. 2->255 are characters. no line feeds or
; carriage returns.
; OR
; ?) Call PrintList, which will print out a list of messages all across the
; screen. DS:BX -> the MsgHdr's
;
; NOTE: The Y position is in PIXELS, the X position is in 4 pixel increments.
; All characters are 8 pixels wide. (2 X positions.)
; This code is set up for IDEAL mode.
;
; Written by Draeden of VLA
;
────────────────────────────────────────────────────────────────────────────
STRUC PalStruc
R db ?
G db ?
B db ?
ENDS
STRUC MsgHdr
Off dw ?
Xpos dw ?
Ypos dw ?
ENDS
NumDefPal = 9
BLACK = 0
BLUE = 255
GREEN = 254
RED = 253
GREY1 = 252
GREY2 = 251
GREY3 = 250
GREY4 = 249
GREY5 = 248
RED2 = 247
SCRW = 80
────────────────────────────────────────────────────────────────────────────
DefPal PalStruc <20,00,00>,<25,25,25>,<35,35,35>,<45,45,45>,<56,56,56>
PalStruc <63,63,63>,<40,00,00>,<00,40,00>,<00,00,40>
Font8x8 db 256*8 dup (0) ;holding place for font
TextColor db RED
TempCOlor db ?
────────────────────────────────────────────────────────────────────────────
;DS:BX = Ptr to list
; CX = # of entries
PROC PrintList
pusha
@@MSgLoop:
mov si,[(MsgHdr PTR bx).Off]
mov ax,[(MsgHdr PTR bx).Xpos]
mov di,[(MsgHdr PTR bx).Ypos]
call PrintText
add bx,(size MsgHdr)
dec cx
jne @@MsgLoop
popa
ret
ENDP
;di = Ypos
;ax = Xpos
;ds:si = ptr to zero terminating string
PROC PrintText
pusha
push es
mov es,[cs:VGAseg]
imul di,SCRW
add di,ax
@@PrintLoop:
lodsb
or al,al
je @@Done
dec al
je @@ColorChange
dec al
movzx bx,al
shl bx,3 ;*8
mov cl,8
mov ch,[cs:TextColor]
mov bp,di
@@CopyChar:
mov ah,[cs:Font8x8 + bx]
and ah,1111b
@Set_Write_Plane
mov [es:bp],ch
mov ah,[cs:Font8x8 + bx]
shr ah,4
@Set_Write_Plane
mov [es:bp+1],ch
add bp,SCRW
inc bx
dec cl
jne @@CopyChar
add di,2
jmp short @@PrintLoop
@@Done:
pop es
popa
ret
@@ColorChange:
lodsb
mov [cs:TextColor],al
jmp @@PrintLoop
ENDP
MACRO @AMacro
LOCAL @@D1
shr ah,1
jnc @@D1
mov [es:di],ch
@@d1:
inc di
ENDM
;di = Ypos
;ax = Xpos
;ds:si = ptr to zero terminating string
; CL = color to start with
PROC PrintShadeText
pusha
push es
mov es,[cs:VGAseg]
mov [cs:TempColor],cl
imul di,SCRW
add di,ax
@@PrintLoop:
lodsb
or al,al
je @@Done
dec al
je @@ColorChange
dec al
movzx bx,al
shl bx,3 ;*8
mov cl,8
mov ch,[cs:TempColor]
mov bp,di
@@CopyChar:
mov ah,[cs:Font8x8 + bx]
and ah,1111b
@Set_Write_Plane
mov [es:bp],ch
mov ah,[cs:Font8x8 + bx]
shr ah,4
@Set_Write_Plane
mov [es:bp+1],ch
inc ch
cmp ch,MAXCOlor
jbe @@okok
mov ch,1
@@okok:
add bp,SCRW
inc bx
dec cl
jne @@CopyChar
add di,2
jmp short @@PrintLoop
@@Done:
pop es
popa
ret
@@ColorChange:
lodsb
mov [cs:TextColor],al
jmp @@PrintLoop
ENDP
;di = Ypos
;ax = Xpos
;ds:si = ptr to zero terminating string
; CL = color to start with
PROC PrintShadeTextBIG
pusha
push es
mov es,[cs:VGAseg]
mov [cs:TempColor],cl
imul di,SCRW
add di,ax
mov ah,1111b
@Set_Write_Plane
@@PrintLoop:
lodsb
or al,al
je @@Done
dec al
je @@ColorChange
dec al
movzx bx,al
shl bx,3 ;*8
mov cl,8
mov ch,[cs:TempColor]
mov bp,di
@@CopyChar:
mov ah,[cs:Font8x8 + bx]
REPT 8
@AMacro
ENDM
add di,SCRW-8
inc ch
cmp ch,MAXCOlor
jbe @@okok
mov ch,1
@@okok:
mov ah,[cs:Font8x8 + bx]
REPT 8
@AMacro
ENDM
add di,SCRW-8
inc ch
cmp ch,MAXCOlor
jbe @@okok1
mov ch,1
@@okok1:
mov ah,[cs:Font8x8 + bx]
REPT 8
@AMacro
ENDM
add di,SCRW-8
inc ch
cmp ch,MAXCOlor
jbe @@okok2
mov ch,1
@@okok2:
mov ah,[cs:Font8x8 + bx]
REPT 8
@AMacro
ENDM
add di,SCRW-8
inc ch
cmp ch,MAXCOlor
jbe @@okok3
mov ch,1
@@okok3:
add bp,SCRW
inc bx
dec cl
jne @@CopyChar
add di,8-8*4*SCRW
jmp @@PrintLoop
@@Done:
pop es
popa
ret
@@ColorChange:
lodsb
mov [cs:TextColor],al
jmp @@PrintLoop
ENDP
;Immediatly after calling this routine, you MUST do a mode change
; to properly restore the status of the VGA card.
PROC StealFont
pusha
push es ds
mov ax,0003h
int 10h ;set VGA 80x25x16 char
mov ax,1112h
mov bl,0
int 10h ;load 8x8 bios font into bank 0
mov dx,3c4h ;setup to read memory
mov ax,00402h
out dx,ax
mov ax,00604h
out dx,ax
──
mov dx,3ceh
mov ax,00005h
out dx,ax
mov ax,00c06h
out dx,ax
mov ax,00204h
out dx,ax
mov ax,0b800h
mov ds,ax
mov ax,cs
mov es,ax
mov di,offset Font8x8
mov si,64 ;start w/ char #2, not #0
cld
mov dx,255 ;grab 255 chars
@@GrabLoop:
mov cx,8
@@UpHere:
lodsb
xor ah,ah
REPT 8 ;mirror the byte- if this isn't done the chars will
shl al,1 ; be backwards..
rcr ah,1
ENDM
mov al,ah
stosb
loop @@UpHere
add si,32-8
dec dx
jne @@GrabLoop
pop ds es
popa
ret
ENDP
PROC SetDefPal
pusha
push ds
mov ax,cs
mov ds,ax
mov si,offset DefPal
mov cx,NumDefPal
mov al,256-NumDefPal
@WritePalette
pop ds
popa
ret
ENDP