Data segment para public 'Data'
include Small.FNT
MessageNumLines equ 48
Message db ' ',0
db ' BBS ADVERTISEMENT BY ',0
db ' FRED NIETZCHE ',0
db ' ',0
db ' FONTS SNAGGED FROM ',0
db ' THG''S INTROMAKER 3.0 ',0
db ' ',0
db ' ',1
db ' ',0
db ' ',0
db ' - SKYNET BBS - ',0
db ' (301) 890-2972 ',0
db ' ',0
db ' SYSOPS: VIPER * THE ROCKETEER ',0
db ' ',0
db ' ',1
db ' ',0
db ' ',0
db ' FEATURING... ',0
db ' * 1.7 GIGS ONLINE! ',0
db ' * SEARCHLIGHT V3.0 BBS ',0
db ' * 14400 V.32/BIS,V.42/BIS ',0
db ' ',0
db ' ',1
db ' ',0
db ' ',0
db ' SPECIALIZING IN... ',0
db ' * SB/VGA DEMOS/FILES ',0
db ' * .MOD/.MID MUSIC FILES ',0
db ' * LIVELY DISCUSSIONS (HA!) ',0
db ' ',0
db ' ',1
db ' ',0
db ' ',0
db ' ...AND OF COURSE, THE LATEST ',0
db ' AND GREATEST IN 0-7 DAY WAREZ ',0
db ' ',0
db ' CALL TODAY! ',0
db ' ',0
db ' ',1
db ' ',0
db ' ',0
db ' ',0
db ' OH..... ',0
db ' DID I MENTION 9600+ ONLY? ',0
db ' ',0
db ' ',0
db ' ',1
MessagePtr dw offset Message
MessageLine dw 0
Data ends
DisplayNextLine proc near
; This procedure displays the next message line 'slice' onto the bottom of the
; split screen window. Assumes ES = 0a000h, and write mode is 0
mov dx,03c4h
mov ax,0f02h
out dx,ax
mov al,CurrentLine
add al,129
mov di,StartAddr
add di,SplitHeight*80 + 4
mov cx,72
rep stosb
mov si,MessagePtr
mov di,StartAddr
add di,SplitHeight*80 + 4 ; (Xstart,Ystart) = (32,SplitHeight)
mov cl,3
DNL1:
lodsb
cmp al,1
jbe Finished
sub al,32
xor bx,bx
mov bl,al
shl bx,6
xor ah,ah
shl ax,4
add bx,ax
add bx,MessageLine
mov ah,8
DNL2:
mov al,[offset Font + bx]
cmp al,0
jz DNL3
mov bp,ax
mov ax,0802h
shr ah,cl
mov dx,03c4h
out dx,ax
mov ax,bp
mov byte ptr es:[di],al
DNL3:
dec cl
jns DNL4
inc di
mov cl,3
DNL4:
inc bx
dec ah
jnz DNL2
jmp DNL1
Finished:
add MessageLine,8
cmp MessageLine,80
jne DontResetML
cmp al,1
jne Finished2
mov Delay,200
Finished2:
mov MessageLine,0
add MessagePtr,37
cmp MessagePtr,offset Message + MessageNumLines*37
jne DontResetML
mov MessagePtr,offset Message
DontResetML:
ret
DisplayNextLine endp
CopyLineToTop proc near
; Copies displayed line from the bottom of the split screen window to the
; top portion. Assumes in write mode 1, data rotate is none, and ES points to
; 0a000h
mov bx,ds
mov si,StartAddr
add si,4
mov di,si
add si,SplitHeight*80
mov dx,03c4h
mov ax,0f02h
out dx,ax
mov ax,0a000h
mov ds,ax
mov cx,72
rep movsb
mov ds,bx
ret
CopyLineToTop endp