home *** CD-ROM | disk | FTP | other *** search
- ; Fast Write By: Miles Levy 8/89
- ; called: MLFW (X, Y, String)
- ; X=Row, Y=Column
- ; 1..80, 1..25
- ;
- ; Procedure MLFW (x,y : integer; strng : string);
- ;
- code segment byte public
- assume cs:code,ds:code
- public mlfw
- ;
- strng equ dword ptr [bp+6]
- y equ word ptr [bp+10]
- x equ word ptr [bp+12]
-
- vid equ 0B800H
- ;
- mlfw proc far
- ;
- start:
- push bp
- mov bp,sp
- push ds
-
- mov ax,vid
- mov es,ax
- cld
- lds si,strng ; DS:SI points to string[0]
- lodsb ; length to Al
- xor ah,ah
- mov cx,ax
- jcxz fini ; if empty string, exit
- mov bx,y ; row (line number / 1 relative )
- dec bx ; 0 relative
- shl bx,1
- mov di,word ptr cs:rowvect[bx] ; line pointer
- mov bx,x
- dec bx ; column ( 0 relative )
- shl bx,1
- add di,bx ; di is tgt ptr
- ; optimize for 2-byte moves
- mov ax,cx ; count
- cmp ax,3 ; 1 or 2 bytes to move:
- jb lt3 ; yes
- shr ax,1 ; odd check
- jc oddno ; yes, odd no of bytes
- lodsb ; char ---> al
- stosb ; char ---> video memory
- inc di ; bypass attribute byte
- shr cx,1 ; set for 2-byte moves
- dec cx
- movelpe:
- lodsw ; 2 chars ---> ah / al
- stosb ; char ---> video memory
- inc di ; bypass attribute byte
- mov al,ah ; process 2nd char
- stosb
- inc di
- loop movelpe
- ;
- lodsb ; last char ---> al
- stosb ; last char ---> video memory
- jmp short fini
- ;
- lt3:
- lodsb ; char ---> al
- stosb ; char ---> video memory
- inc di ; bypass attribute byte
- loop lt3
- jmp short fini
- ;
- oddno:
- lodsb ; char ---> al
- stosb ; char ---> video memory
- inc di ; bypass attribute byte
- shr cx,1 ; set for 2-byte moves
- movelpo:
- lodsw ; 2 chars ---> ah / al
- stosb ; char ---> video memory
- inc di ; bypass attribute byte
- mov al,ah ; process 2nd char
- stosb
- inc di
- loop movelpo
- ;
- fini:
- pop ds
- pop bp
- ret 8
-
- ; ---------------------------------------------------
-
- rowvect equ $
- ; Generate the row vectors
- adr = 0
- rept 25
- dw adr
- adr = adr+160
- endm
-
- copywrt db 'Copyright 1989 Miles Levy'
-
- mlfw endp
- code ends
- end
-
-