582 lines
19 KiB
Plaintext
582 lines
19 KiB
Plaintext
|
NAME OVERLAY_MANAGER
|
|||
|
ASSUME CS:CODE,DS:DATA
|
|||
|
|
|||
|
DATA SEGMENT PUBLIC
|
|||
|
DMAPTR DW ? ;DMA ADDRESS FOR INPUT XFER
|
|||
|
PROCNAME DB 8 DUP(?) ;NAME OF PROCEDURE WHICH WE ARE CALLI
|
|||
|
NG
|
|||
|
OVLGNUM DB ? ;OVERLAY NUMBER
|
|||
|
PROCADR DW ? ;PROCEDURE ADDRESS
|
|||
|
MYFCB DB 36 DUP(?) ;FCB FOR FILE OPENING
|
|||
|
;
|
|||
|
; USRRET STACK CONTAINS RETURN ADDRESS AND
|
|||
|
; SAVED OVERLAY AREA ADDRESS
|
|||
|
; AND OVERLAY GROUP NUMBER ;(MAX NESTING 25
|
|||
|
DB 129 DUP(?) ;SAVED RETURN ADDRESSES
|
|||
|
USRRET:
|
|||
|
OVLAREA DW ? ;LOC OF MOST RECENT OVL AREA
|
|||
|
DATA ENDS
|
|||
|
|
|||
|
CODE SEGMENT PUBLIC
|
|||
|
|
|||
|
M EQU Byte Ptr 0[BX]
|
|||
|
;---------------------------------------------------------------;
|
|||
|
; ;
|
|||
|
; Overlay Management Module for Pascal/MT+ under PCDOS ;
|
|||
|
; ;
|
|||
|
; Created: March 18, 1981 ;
|
|||
|
; Updated: February 24, 1983 ;
|
|||
|
; ;
|
|||
|
;---------------------------------------------------------------;
|
|||
|
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
|
|||
|
; equates for pertinant information ;
|
|||
|
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
|
|||
|
;
|
|||
|
; THE FOLLOWING THREE EQUATES DESCRIBE DATA PLACED AT THE
|
|||
|
; BEGINNING OF THE .CMD FILE BY LINK/MT+86 AFTER THE
|
|||
|
; STACK POINTER INITIALIZATION CODE.
|
|||
|
; THEY MUST BE REFERENCED WITH A CS OVERRIDE
|
|||
|
;
|
|||
|
NCBPTR EQU 000CH
|
|||
|
ovlbase EQU 0001h ;base prefix for file name
|
|||
|
namelen EQU 0000h ;length of names (6 or 7 characters)
|
|||
|
@XXXX1 EQU 000EH ;PTR TO BASE OF OVL_AREA_TAB
|
|||
|
|
|||
|
TRUE EQU -1
|
|||
|
FALSE EQU 0 ;FOR CONDITIONAL ASSEMBLY
|
|||
|
RELOAD EQU OFF ;NON-RECURSIVE OVERLAY CALLING
|
|||
|
|
|||
|
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
|
|||
|
; PUBLIC AND EXTRN SYMBOLS ;
|
|||
|
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
|
|||
|
|
|||
|
PUBLIC @OVL ;OVERLAY LOADER
|
|||
|
PUBLIC @OVS ;OVERLAY DISK SET
|
|||
|
extrn @hlt : near
|
|||
|
|
|||
|
;###############################################################;
|
|||
|
; ;
|
|||
|
; MAIN ROUTINE - @OVL ;
|
|||
|
; PURPOSE - LOAD OVERLAY AND CALL PROCEDURE ;
|
|||
|
;---------------------------------------------------------------;
|
|||
|
; ON ENTRY TO @OVL, RETURN ADDRESS POINTS TO OVERLAY CALL ;
|
|||
|
; DATA BLOCK: ;
|
|||
|
; ;
|
|||
|
; +0 : OVERLAY GROUP NUMBER --- 1 BYTE ;
|
|||
|
; +1 : OVERLAY PROCEDURE NAME-- 8 BYTES ;
|
|||
|
; ;
|
|||
|
;###############################################################;
|
|||
|
@OVL PROC NEAR
|
|||
|
POP BX
|
|||
|
MOV AL,CS:M
|
|||
|
MOV Byte Ptr OVLGNUM,AL
|
|||
|
INC BX
|
|||
|
MOV CH,8
|
|||
|
MOV DX,(Offset PROCNAME)
|
|||
|
OVL1:
|
|||
|
MOV AL,CS:M
|
|||
|
INC BX
|
|||
|
MOV SI,DX
|
|||
|
MOV BYTE PTR [SI],AL
|
|||
|
INC DX
|
|||
|
DEC CH
|
|||
|
JNZ OVL1
|
|||
|
|
|||
|
CALL PSHUSRRET ;SAVE USER'S RETURN ADDRESSES
|
|||
|
CALL LOADOVLY ;GO LOAD IT (IF NECESSARY)
|
|||
|
CALL FINDPROC ;GO SEARCH FOR AND FIND PROCNAME
|
|||
|
;DOES NOT RETURN IF PROC NOT FOUND
|
|||
|
MOV BX,(Offset OURRET);PUSH OUR RETURN ADDRESS ON THE STACK
|
|||
|
PUSH BX
|
|||
|
MOV BX,Word Ptr PROCADR ;GET ADDRESS OF PROC WITHIN OVERLAY AREA
|
|||
|
JMP BX ;AND OFF TO USER ROUTINE
|
|||
|
OURRET:
|
|||
|
PUSH AX
|
|||
|
PUSH BX ;SAVE POSSIBLE RETURN VALUES
|
|||
|
CALL POPUSRRET ;MAY RELOAD OLD OVERLAY GROUP
|
|||
|
POP BX
|
|||
|
POP AX ;GET POSSIBLE RETURN VALUES BACK AGAIN
|
|||
|
JMP CX ;AND BACK TO THE USER (SIMPLE CASE)
|
|||
|
@OVL ENDP
|
|||
|
|
|||
|
;###############################################################;
|
|||
|
; ;
|
|||
|
; MAIN ROUTINE - @OVS ;
|
|||
|
; PURPOSE - SET DRIVE NUMBER FOR A SPECIFIC OVERLAY ;
|
|||
|
; INPUT - ON STACK : OVLNUM,DRIVE ;
|
|||
|
; OVLNUM : 1..50 ;
|
|||
|
; DRIVE : '@'..'O' ;
|
|||
|
; ;
|
|||
|
; PASCAL DEFINITION: ;
|
|||
|
; ;
|
|||
|
; EXTERNAL PROCEDURE @OVS(OVNUM:INTEGER; DRNUM:CHAR); ;
|
|||
|
; ;
|
|||
|
;###############################################################;
|
|||
|
@OVS PROC NEAR
|
|||
|
POP BX ;RET ADR
|
|||
|
POP CX ;DRIVE NUMBER
|
|||
|
POP DX ;OVERLAY NUMBER
|
|||
|
PUSH BX
|
|||
|
MOV AL,CL
|
|||
|
SUB AL,'@' ;MAKE 0..19
|
|||
|
DEC DX ;ADJUST OVLNUM (COUNT FROM 0)
|
|||
|
MOV BX,(Offset DRIVETAB)
|
|||
|
ADD BX,DX
|
|||
|
MOV CS:M,AL
|
|||
|
RET
|
|||
|
@OVS ENDP
|
|||
|
|
|||
|
;===============================================================;
|
|||
|
; SUBROUTINE: CALCADDR ;
|
|||
|
; PURPOSE : CALC OVERLAY AREA ADDRESS BASED ON OVLGNUM ;
|
|||
|
;===============================================================;
|
|||
|
CALCADDR PROC NEAR
|
|||
|
|
|||
|
MOV AL,Byte Ptr OVLGNUM ;GET REQUESTED GROUP NUMBER
|
|||
|
DEC AL
|
|||
|
RCR AL,1
|
|||
|
RCR AL,1
|
|||
|
RCR AL,1 ;DIVIDE BY 8
|
|||
|
AND AL,1EH
|
|||
|
MOV DL,AL
|
|||
|
MOV DH,0
|
|||
|
MOV BX,CS:Word Ptr @XXXX1 ;GET ADDR OF OVERLAY AREA TABLE
|
|||
|
;POINT TO TABLE ENTRY
|
|||
|
ADD BX,DX
|
|||
|
|
|||
|
|
|||
|
|
|||
|
MOV DX,CS:WORD PTR [BX]
|
|||
|
|
|||
|
XCHG BX,DX ;BX NOW POINTS TO OVERLAY AREA
|
|||
|
MOV Word Ptr OVLAREA,BX ;SAVE IT FOR LATER
|
|||
|
RET
|
|||
|
CALCADDR ENDP
|
|||
|
|
|||
|
;===============================================================;
|
|||
|
; SUBROUTINE: PSHUSRRET ;
|
|||
|
; PURPOSE : SAVE CONTENTS OF HL, OVERLAY AREA ADDR ;
|
|||
|
; AND OVERLAY GROUP NUMBER ON USRRET STACK ;
|
|||
|
;===============================================================;
|
|||
|
; PUBLIC PSHUSRRET
|
|||
|
PSHUSRRET PROC NEAR
|
|||
|
PUSH BX
|
|||
|
CALL CALCADDR
|
|||
|
|
|||
|
MOV CX,BX
|
|||
|
|
|||
|
POP DX
|
|||
|
MOV BX,CS:Word Ptr USRSP ;GET STACK POINTER
|
|||
|
DEC BX
|
|||
|
MOV M,DH ;STORE RET ADDR
|
|||
|
DEC BX
|
|||
|
MOV M,DL
|
|||
|
DEC BX
|
|||
|
MOV M,CH ;STORE OVERLAY AREA ADDR
|
|||
|
DEC BX
|
|||
|
MOV M,CL
|
|||
|
DEC BX
|
|||
|
MOV SI,CX ;GET OVERLAY NUMBER
|
|||
|
MOV AL,CS:BYTE PTR [SI]
|
|||
|
MOV M,AL
|
|||
|
MOV CS:Word Ptr USRSP,BX
|
|||
|
RET
|
|||
|
PSHUSRRET ENDP
|
|||
|
|
|||
|
;===============================================================;
|
|||
|
; SUBROUTINE: POPUSRRET ;
|
|||
|
; PURPOSE : POP RET ADDR, OVERLAY AREA ADDR AND NUMBER ;
|
|||
|
; IF RECURSE IS SET TO TRUE THEN THIS ROUTINE ;
|
|||
|
; WILL CALL LOADOVLY TO RE-LOAD PREVIOUS ;
|
|||
|
; OVERLAY IF NECESSARY ;
|
|||
|
;===============================================================;
|
|||
|
; PUBLIC POPUSRRET
|
|||
|
POPUSRRET PROC NEAR
|
|||
|
MOV BX,CS:Word Ptr USRSP
|
|||
|
MOV AL,M
|
|||
|
MOV Byte Ptr OVLGNUM,AL ;SAVE OVERLAY GROUP NUMBER
|
|||
|
INC BX
|
|||
|
MOV DL,M
|
|||
|
INC BX
|
|||
|
MOV DH,M
|
|||
|
INC BX ;DE NOW CONTAINS OVERLAY AREA ADDRESS
|
|||
|
XCHG BX,DX
|
|||
|
MOV Word Ptr OVLAREA,BX
|
|||
|
XCHG BX,DX
|
|||
|
MOV DL,M
|
|||
|
INC BX
|
|||
|
MOV DH,M ;DE NOW CONTAINS CALLERS RET ADDRESS
|
|||
|
INC BX
|
|||
|
MOV CS:Word Ptr USRSP,BX
|
|||
|
XCHG BX,DX ;PUT REAL ADDR INTO HL
|
|||
|
;----------------------------------------------------------------
|
|||
|
IF RELOAD ; THEN RELOAD OLD OVERLAY IF NECESSARY
|
|||
|
PUSH BX
|
|||
|
MOV AL,Byte Ptr OVLGNUM
|
|||
|
OR AL,AL
|
|||
|
JZ L@1
|
|||
|
CALL LOADOVLY ;ELSE GO LOAD IT IN AGAIN
|
|||
|
L@1:
|
|||
|
POP BX ;GET RET ADDR BACK AGAIN
|
|||
|
ENDIF
|
|||
|
;----------------------------------------------------------------
|
|||
|
MOV CX,BX ;RETURN IT IN CX (1/17/82)
|
|||
|
RET ;BACK TO MAIN @OVL ROUTINE
|
|||
|
POPUSRRET ENDP
|
|||
|
|
|||
|
;===============================================================;
|
|||
|
; SUBROUTINE: LOADOVLY ;
|
|||
|
; PURPOSE : USING OVLADDR AND OVLBASE LOAD THE OVERLAY ;
|
|||
|
;===============================================================;
|
|||
|
LOADOVLY PROC NEAR
|
|||
|
CALL CALCADDR ;SETS OVLAREA AND HL-REG
|
|||
|
MOV AL,Byte Ptr OVLGNUM ;GET GROUP NUMBER BACK AGAIN
|
|||
|
CMP AL,CS:M ;IS REQUESTED OVERLAY IN THE AREA?
|
|||
|
JNZ L@2
|
|||
|
RET ;RETURN IF ALREADY LOADED
|
|||
|
L@2:
|
|||
|
;
|
|||
|
; IF NOT LOADED THEN CONSTRUCT NAME AND LOAD IT
|
|||
|
;
|
|||
|
; MOVE OVLBASE,MYFCB+1,8
|
|||
|
MOV BX,CS:WORD PTR NCBPTR
|
|||
|
ADD BX,OVLBASE
|
|||
|
MOV DX,(Offset MYFCB)+1
|
|||
|
MOV CH,8
|
|||
|
?1: MOV AL,CS:M ;GET BYTE OF NAME FROM CODE SEG
|
|||
|
MOV SI,DX
|
|||
|
MOV BYTE PTR [SI],AL ;AND STORE IN DATA SEG
|
|||
|
INC BX
|
|||
|
INC DX
|
|||
|
DEC CH
|
|||
|
JNZ ?1
|
|||
|
|
|||
|
MOV AL,Byte Ptr OVLGNUM
|
|||
|
DEC AL
|
|||
|
MOV DL,AL
|
|||
|
MOV DH,0
|
|||
|
MOV BX,(Offset DRIVETAB)
|
|||
|
ADD BX,DX
|
|||
|
MOV AL,CS:M ;GET DRIVE NUMBER FROM TABLE
|
|||
|
MOV Byte Ptr MYFCB,AL ;FOR NOW DEFAULT DRIVE ONLY
|
|||
|
MOV AL,'0'
|
|||
|
MOV Byte Ptr MYFCB+9,AL
|
|||
|
MOV AL,Byte Ptr OVLGNUM
|
|||
|
RCR AL,1
|
|||
|
RCR AL,1
|
|||
|
RCR AL,1
|
|||
|
RCR AL,1
|
|||
|
CALL CV2HX ;CONVERT HIGH NIBBLE
|
|||
|
MOV Byte Ptr MYFCB+10,AL
|
|||
|
MOV AL,Byte Ptr OVLGNUM
|
|||
|
CALL CV2HX ;CONVERT LOW NIBBLE
|
|||
|
MOV Byte Ptr MYFCB+11,AL
|
|||
|
MOV BX,(Offset MYFCB)+12
|
|||
|
MOV CH,23 ;NUMBER OF EXTRA BYTES
|
|||
|
LO2:
|
|||
|
MOV M,0
|
|||
|
INC BX
|
|||
|
DEC CH
|
|||
|
JNZ LO2
|
|||
|
|
|||
|
|
|||
|
MOV DX,80H ;SET DEFAULT DMA ADDRESS
|
|||
|
call setdma
|
|||
|
|
|||
|
MOV DX,(Offset MYFCB)
|
|||
|
call open
|
|||
|
|
|||
|
CMP AL,255
|
|||
|
JNZ L@3
|
|||
|
JMP NOFILE ;BR IF FILE NOT FOUND
|
|||
|
L@3:
|
|||
|
;
|
|||
|
; OK, NOW LOAD IT UNTIL EOF
|
|||
|
;
|
|||
|
LO3:
|
|||
|
|
|||
|
MOV DX,Word Ptr OVLAREA ;GET OVERLAY AREA ADDRESS
|
|||
|
mov bx,ds ;save ds
|
|||
|
mov ax,cs
|
|||
|
mov ds,ax
|
|||
|
call setdma
|
|||
|
mov ds,bx ;RESTORE DS
|
|||
|
MOV DX,(Offset MYFCB)
|
|||
|
mov DI,DX
|
|||
|
mov AX,word ptr [DI+16] ;get file size in bytes
|
|||
|
mov CL,7 ;set up to divide by 128
|
|||
|
shr AX,CL ;do divide by shifting
|
|||
|
mov CX,AX ;move number of records into CX
|
|||
|
call rdran
|
|||
|
RET
|
|||
|
LOADOVLY ENDP
|
|||
|
|
|||
|
pcdos PROC NEAR ; the call to PCDOS
|
|||
|
push es
|
|||
|
int 21h
|
|||
|
pop es
|
|||
|
ret
|
|||
|
pcdos endp
|
|||
|
|
|||
|
open: ; file open (#15)
|
|||
|
mov ah,15
|
|||
|
jmp pcdos
|
|||
|
|
|||
|
rdran: ;random read (#39)
|
|||
|
mov ah,39
|
|||
|
jmp pcdos
|
|||
|
|
|||
|
setdma: ;set DMA offset (#26) PCDOS style
|
|||
|
mov ah,26 ; load function number
|
|||
|
jmp pcdos
|
|||
|
|
|||
|
;
|
|||
|
; INTERNAL ROUTINE - CV2HX
|
|||
|
; LOW ORDER 4-BITS OF A-REG CONTAIN BINARY NUMBER
|
|||
|
; RETURN ASCII CHAR IN A-REG
|
|||
|
;
|
|||
|
CV2HX PROC NEAR
|
|||
|
AND AL,0FH
|
|||
|
ADD AL,'0'
|
|||
|
CMP AL,03AH
|
|||
|
JNB L@4
|
|||
|
RET ;RETURN IF A VAILD DIGIT
|
|||
|
L@4:
|
|||
|
ADD AL,7
|
|||
|
RET
|
|||
|
CV2HX ENDP
|
|||
|
|
|||
|
;===============================================================;
|
|||
|
; SUBROUTINE: FINDPROC ;
|
|||
|
; PURPOSE : GIVEN PROCEDURE NAME IN PROCNAME ;
|
|||
|
; RETURN ADDRESS OF THIS PROCEDURE IN ;
|
|||
|
; PROCADR ;
|
|||
|
;===============================================================;
|
|||
|
FINDPROC PROC NEAR
|
|||
|
MOV BX,Word Ptr OVLAREA ;GET ADDR OF OVERLAY AREA
|
|||
|
INC BX
|
|||
|
MOV DL,CS:M
|
|||
|
INC BX
|
|||
|
MOV DH,CS:M ;POINT TO TABLE
|
|||
|
XCHG BX,DX
|
|||
|
FP1:
|
|||
|
MOV AL,CS:M
|
|||
|
OR AL,AL
|
|||
|
JNZ L@5
|
|||
|
JMP NOPROC
|
|||
|
L@5:
|
|||
|
MOV DX,(Offset PROCNAME)
|
|||
|
MOV SI,CS:WORD PTR NCBPTR
|
|||
|
MOV AL,CS:BYTE PTR [SI]
|
|||
|
MOV CH,AL
|
|||
|
PUSH BX ;SAVE ADDR OF TABLE ENTRY
|
|||
|
FP2:
|
|||
|
MOV SI,DX
|
|||
|
MOV AL,BYTE PTR [SI]
|
|||
|
CMP AL,CS:M
|
|||
|
JNZ FP3 ;BR IF NO MATCH
|
|||
|
INC BX
|
|||
|
INC DX
|
|||
|
DEC CH
|
|||
|
JNZ FP2 ;BR IF MORE TO COMPARE
|
|||
|
;
|
|||
|
; WE FOUND IT......
|
|||
|
;
|
|||
|
POP BX ;GET BASE ADDR OF TABLE ENTRY
|
|||
|
MOV DX,8 ;BYPASS NAME
|
|||
|
|
|||
|
ADD BX,DX
|
|||
|
MOV DL,CS:M
|
|||
|
INC BX
|
|||
|
MOV DH,CS:M
|
|||
|
XCHG BX,DX
|
|||
|
MOV Word Ptr PROCADR,BX
|
|||
|
RET ;AND EXIT
|
|||
|
FP3:
|
|||
|
POP BX
|
|||
|
MOV DX,10
|
|||
|
ADD BX,DX
|
|||
|
JMP SHORT FP1
|
|||
|
FINDPROC ENDP
|
|||
|
|
|||
|
;===============================================================;
|
|||
|
; ERROR MESSAGE PRINTING ROUTINES ;
|
|||
|
;===============================================================;
|
|||
|
NOFILE: ;***OVERLAY FILE NOT FOUND***
|
|||
|
; MOVE MYFCB+1,NFMSG1+2,8 ;MOVE IN NAME
|
|||
|
MOV BX,(Offset MYFCB)+1
|
|||
|
MOV DX,(Offset NFMSG1)+2
|
|||
|
MOV CX,8
|
|||
|
?2:
|
|||
|
MOV AL,M
|
|||
|
INC BX
|
|||
|
MOV SI,DX
|
|||
|
MOV CS:BYTE PTR [SI],AL
|
|||
|
INC DX
|
|||
|
DEC CX
|
|||
|
MOV AL,CH
|
|||
|
OR AL,CL
|
|||
|
JNZ ?2
|
|||
|
; MOVE MYFCB+9,NFMSG1+11,3 ;MOVE IN EXTENSION
|
|||
|
MOV BX,(Offset MYFCB)+9
|
|||
|
MOV DX,(Offset NFMSG1)+11
|
|||
|
MOV CX,3
|
|||
|
?3:
|
|||
|
MOV AL,M
|
|||
|
INC BX
|
|||
|
MOV SI,DX
|
|||
|
MOV CS:BYTE PTR[SI],AL
|
|||
|
INC DX
|
|||
|
DEC CX
|
|||
|
MOV AL,CH
|
|||
|
OR AL,CL
|
|||
|
JNZ ?3
|
|||
|
MOV AL,Byte Ptr MYFCB
|
|||
|
ADD AL,'@'
|
|||
|
MOV CS:Byte Ptr NFMSG1,AL
|
|||
|
MOV DX,(Offset NFMSG)
|
|||
|
CMP AL,'@'
|
|||
|
JNZ WMSG
|
|||
|
MOV BX,' '
|
|||
|
MOV Word Ptr NFMSG1,BX ;CHANGE "@:" TO " "
|
|||
|
WMSG:
|
|||
|
PUSH DS
|
|||
|
MOV AX,CS
|
|||
|
MOV DS,AX
|
|||
|
mov ah,9
|
|||
|
call pcdos
|
|||
|
POP DS
|
|||
|
call @hlt
|
|||
|
|
|||
|
NFMSG:
|
|||
|
DB 13,10,'Unable to open: '
|
|||
|
NFMSG1 DB 40H,': . '
|
|||
|
DB 13,10
|
|||
|
DB '$'
|
|||
|
NOPROC: ;***PROCEDURE NAME NOT FOUND***
|
|||
|
; MOVE MYFCB+1,NPMSG2+2,8 ;MOVE IN NAME
|
|||
|
MOV BX,(Offset MYFCB)+1
|
|||
|
MOV DX,(Offset NPMSG2)+2
|
|||
|
MOV CX,8
|
|||
|
?4:
|
|||
|
MOV AL,M
|
|||
|
INC BX
|
|||
|
MOV SI,DX
|
|||
|
MOV CS:BYTE PTR [SI],AL
|
|||
|
INC DX
|
|||
|
DEC CX
|
|||
|
MOV AL,CH
|
|||
|
OR AL,CL
|
|||
|
JNZ ?4
|
|||
|
; MOVE MYFCB+9,NPMSG2+11,3 ;MOVE IN EXTENSION
|
|||
|
MOV BX,(Offset MYFCB)+9
|
|||
|
MOV DX,(Offset NPMSG2)+11
|
|||
|
MOV CX,3
|
|||
|
?5:
|
|||
|
MOV AL,M
|
|||
|
INC BX
|
|||
|
MOV SI,DX
|
|||
|
MOV CS:BYTE PTR [SI],AL
|
|||
|
INC DX
|
|||
|
DEC CX
|
|||
|
MOV AL,CH
|
|||
|
OR AL,CL
|
|||
|
JNZ ?5
|
|||
|
MOV AL,Byte Ptr MYFCB
|
|||
|
ADD AL,'@'
|
|||
|
MOV CS:Byte Ptr NPMSG2,AL
|
|||
|
CMP AL,'@'
|
|||
|
JNZ NP1
|
|||
|
MOV BX,' '
|
|||
|
MOV CS:Word Ptr NPMSG2,BX
|
|||
|
NP1:
|
|||
|
; MOVE PROCNAME,NPMSG1,8
|
|||
|
MOV BX,(Offset PROCNAME)
|
|||
|
MOV DX,(Offset NPMSG1)
|
|||
|
MOV CX,8
|
|||
|
?6:
|
|||
|
MOV AL,M
|
|||
|
INC BX
|
|||
|
MOV SI,DX
|
|||
|
MOV CS:BYTE PTR [SI],AL
|
|||
|
INC DX
|
|||
|
DEC CX
|
|||
|
MOV AL,CH
|
|||
|
OR AL,CL
|
|||
|
JNZ ?6
|
|||
|
MOV DX,(Offset NPMSG)
|
|||
|
JMP WMSG
|
|||
|
|
|||
|
NPMSG DB 13,10,'Proc: "'
|
|||
|
NPMSG1 DB ' " not found ovl:'
|
|||
|
NPMSG2 DB 40H,': . '
|
|||
|
DB 13,10
|
|||
|
DB '$'
|
|||
|
;***************************************************************;
|
|||
|
; ;
|
|||
|
; DATA AREA FOR OVERLAY MANAGER ;
|
|||
|
; ;
|
|||
|
;***************************************************************;
|
|||
|
;
|
|||
|
; NOTE THIS TABLE MUST BE IN THE CSEG AREA BECAUSE IS MUST
|
|||
|
; BE INITIALIZED VIA DB AND LINKMT WILL NOT SUPPORT INITIALIZED
|
|||
|
; DATA IN THE DSEG
|
|||
|
;
|
|||
|
DRIVETAB: ;DRIVE TABLES FOR 50 OVERLAYS
|
|||
|
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
DB 0
|
|||
|
|
|||
|
USRSP DW (Offset USRRET) ;USRRET STACK POINTER
|
|||
|
;THIS MUST ALSO BE IN CODE SEG
|
|||
|
CODE ENDS
|
|||
|
END
|
|||
|
|