home *** CD-ROM | disk | FTP | other *** search
- page 48,132
- title COM-AND script machine language subroutine
- ;-------------------------------------------------------------------
- ; Author: R. McGinnis; Chicago IL
- ;
- ; These routines provide some simple functions in a machine
- ; language overlay form for COM-AND scripts.
- ;
- ; Source: OVERLAY.ASM Source for this module
- ; Object: OVERLAY.OBJ Object derived from assembly of .Asm
- ; Exec: OVERLAY.EXE Executable derived from LINK of .OBJ
- ;
- ; Note: you'll need entry points for the script SCALL statement
- ; Note: no stack segment is required
- ;-------------------------------------------------------------------
-
- PUBLIC Display ; Display a string
-
- code segment byte public 'code'
- ASSUME CS:Code
-
- jmp near ptr Display ; A jump table makes it easy
- jmp near ptr SegAddr ; .. to SCALL a routine
-
- page
- ;------ Display ----------------------------------------------------
- ; This routine displays a string on the screen
- ;
- ; Passed:
- ; One parameter, the string addr
- ; Returned:
- ; nothing
- ;
- ; No registers need be preserved...
- ;-------------------------------------------------------------------
-
- Display proc far ; MUST be far return !!
- ;
- ; Get passed parameters
- ;
- mov BP,SP ; Save current stack ptr
-
- mov SI,[BP+4] ; Get offset of last parm
- mov ax,[BP+6] ; Get segment of last parm
- mov DS,ax ; And set into DS...
-
- ;*** mov DI,[BP+8] ; Get offset of prev parm
- ;*** mov ax,[BP+10] ; Get segment of prev parm
- ;*** mov ES,ax ; Set segment into ES
- ;
- ; Initialize
- ;
- xor cx,cx ; Make cx = 0
- mov ah,0eh ; Int 10h subfuntion, TTY write
- xor bx,bx ; Make bh,bl = 0 (page # and fgnd)
- ;
- ; Display the string one character at a time
- ;
- DISP100:
- mov al,byte ptr [SI] ; Get a char
- or al,al ; Test for null terminator
- jz DISP200 ; Skip if found
-
- int 10h ; Write TTY (req's ah,al,bh,bl)
-
- inc SI ; Point next fetch
- inc cx ; We'll display it
- cmp cx,80 ; Max length is 80
- jl DISP100 ; Loop up to 80 times
- ;
- ; And we're done
- ;
- DISP200:
- ret ; FAR return here
- Display endp
- page
- ;------ SegAddr ----------------------------------------------------
- ; This routine returns the overlay segment address
- ;
- ; Passed:
- ; nothing
- ; Returned:
- ; One parameter, the segment value
- ;
- ; No registers need be preserved...
- ;-------------------------------------------------------------------
-
- SegAddr proc far ; MUST be far return !!
- ;
- ; Get rtn parameter address
- ;
- mov BP,SP ; Save current stack ptr
-
- mov DI,[BP+4] ; Get offset of last parm
- mov ax,[BP+6] ; Get segment of last parm
- mov DS,ax ; And set into DS...
- ;
- ; Store the segment reg
- ;
- mov ax,CS ; Set-up to store
- mov word ptr DS:[DI],ax ; Store our segment addr
- ;
- ; And we're done
- ;
- ret ; FAR return here
- SegAddr endp
- Code ends
- end