home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol049
/
mdbsplii.asm
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
5KB
|
200 lines
TITLE 'MDBS/PLI INITIALIZATION AND CHAIN PROGRAM'
;PROGRAM
; MDBS/PLI INITIALIZATION AND CHAIN PROGRAM
;PROGRAMMER
; ROBERT M. WHITE
;DATE WRITTEN
; JULY 19, 1980
;(C)COPYRIGHT 1980,H & W COMPUTER SYSTEMS, INC.
;PURPOSE
; THIS ROUTINE PERFORMS TWO MAIN THE FUNCTIONS. THE FIRST
; IS TO INITIALIZE THE SYSTEM FOR A PL/1 PROGRAM TO UTILIZE
; MDBS. THE SECOND TO PERFORM A CHAINING FUNCTION SO THAT
; PL/1 PROGRAMS CAN BE OVERLAYED IN MEMORY. FOR INITIALIZA-
; TION, THE PL/1 PROGRAM IS GIVEN FROM 0300H TO 7FFFH IN
; MEMORY. MDBS IS GIVEN FROM 8003H TO THE BEGINNING OF BDOS.
; NOTE THAT A JUMP IS INSERTED AT 8000H TO FAKE OUT PL/1.
; TO IT, THE JUMP IS ACTUALLY BDOS AND WILL LIMIT ALL DYNAMIC
; STORAGE ALLOCATIONS TO AREAS BELOW IT.
;REMARKS
; 1. IT IS ASSUMED THAT A FILE NAMED "MDBS.COM" EXISTS
; WHICH CONTAINS A RELOCATED VERSION OF MDBS.REL TO
; 8003H AND CONTAINS THE END-OF-TPA PTR INITIALIZED.
; THE FOLLOWING WAS USED TO DO THIS.
; RLC<CR>
; 8003<CR>
; DDT<CR>
; M8000,BEE2,100<CR> BEE2 WAS GIVEN BY RLC.
; A100<CR> THIS ADDS FAKE JMP TO BDOS.
; JMP 0<CR>
; <CR>
; S109<CR> THIS SUBS IN HIGH MEM PTR.
; FF<CR>
; DF<CR>
; .<CR>
; ^C
; SAVE 64 MDBS.COM<CR>
MACLIB MACRO
DFCB EQU 005CH ;DEFAULT FCB
OVLBGN EQU 0800H ;BEGINNING ADDRESS OF OVERLAY AREA
DMSBGN EQU 8003H ;BEGINNING ADDRESS OF MDBS DMS ENTRY
; DO INITIALIZATION.
TRMDFN ;DEFINE TERMINAL DEFINITION.
MAIN: CSEG
LXI SP,STACK ;SET STACK.
; CAUSE INITIALIZATION TO BE BYPASSED AFTER FIRST CALL.
INITSKP:
NOP ;BRANCH FOR HEREAFTER.
NOP
NOP
MVI A,(JMP) ;CAUSE READ TO BE BYPASSED NEXT TIME.
STA INITSKP
LXI H,INITBYP
SHLD INITSKP+1
CLS ;CLEAR THE SCREEN.
; READ IN MDBS.
PRINT <'READING IN MDBS.',CR,LF>
LXI D,MDBSFCB ;FCB FOR MDBS.
LXI H,DMSBGN-3 ;START ADDRESS.
CALL RDINPGM ;READ IN MDBS.
ORA A ;SUCCESSFUL?
JZ MDBSOK ;...YES.
PRINT <'*** MDBS COULD NOT BE LOADED, ABORTING... ***',CR,LF>
JMP 0
MDBSOK:
PRINT <'MDBS HAS BEEN SUCCESSFULLY READ IN.',CR,LF>
; SET NEW BDOS ENTRY.
LXI H,DMSBGN-3 ;SET NEW BDOS ENTRY POINT TO FOOL PL/1.
SHLD 6
; OPEN THE DATABASE.
PRINT <'OPENING THE DATABASE.',CR,LF>
LXI B,O1 ;SET UP PARMS.
LXI D,O2
LXI H,O3
MVI A,37 ;SET FOR OPEN.
CALL DMSBGN ;CALL MDBS.
ORA A ;CHECK RETURN CODE.
JZ DBSOK ;...SUCCESS.
PUSH PSW
PRINT <'*** DATABASE RETURN CODE IS '>
POP PSW
MOV L,A
MVI H,0
DECOUT
PRINT <'. ***',CR,LF>
PRINT <'*** DATABASE COULD NOT BE OPENED. ***',CR,LF>
JMP 0
DBSOK:
PRINT <'DATABASE HAS BEEN SUCCESSFULLY OPENED.',CR,LF>
; SET WARM START TO CLOSE DB.
LHLD 1 ;GET CURRENT WARM START PTR.
INX H
SHLD WSTRTP ;SAVE IT.
MOV E,M ;GET CURRENT WARM START ADDRESS.
INX H
MOV D,M
XCHG ;SAVE IT.
SHLD WSTRTA
XCHG
LXI D,ENDPGM ;SET NEW WARM START PTR.
MOV M,D
DCX H
MOV M,E
; MOVE FIRST PGM NAME TO DEFAULT FCB.
MOVE PGMFCB,DFCB,32
INITBYP: DS 0
; READ IN PLI PROGRAM.
PRINT <CR,LF,'READING IN NEXT PROGRAM...',CR,LF>
LXI D,DFCB ;SET FOR DEFAULT FCB.
LXI H,OVLBGN ;START ADDRESS.
CALL RDINPGM ;READ IN THE PLI PGM.
ORA A ;SUCCESSFUL?
JZ OVLBGN ;...YES.
PRINT <'*** CHAINED PL/1 PROGRAM COULD NOT BE LOADED... ***',CR,LF>
JMP 0
PAGE
;****************************************************************
;* END OF RUN *
;****************************************************************
; CLOSE THE DATABASE.
ENDPGM:
MVI A,3 ;SET FOR CLOSE.
CALL DMSBGN ;ISSUE IT TO MDBS.
; RESTORE TRUE WARM START PTR.
LHLD WSTRTA ;GET WARM START ADDRESS.
XCHG ;SAVE IT.
LHLD WSTRTP ;GET ADDRESS OF WHERE TO PUT IT.
MOV M,E ;REPLACE IT WITH THE ORIGINAL ADDRESS.
INX H
MOV M,D
; NOW DO TRUE WARM START.
JMP 0
PAGE
;****************************************************************
;* READ IN A PROGRAM *
;****************************************************************
; OPEN THE FCB.
RDINPGM:
SAVE D,H
DISKIO OPEN ;ISSUE OPEN.
RESTORE H,D
CPI 255 ;SUCCESSFUL?
RZ ;...NO, RETURN.
; SET ADDRESS FOR NEXT REGISTER.
RDINLOOP:
SAVE D,H
XCHG
DISKIO SETDMA
RESTORE H,D
; READ A RECORD.
SAVE D,H
DISKIO READ
RESTORE H,D
ORA A ;SUCCESSFUL?
JZ RDINOK ;...YES.
XRA A ;RETURN W/O ERROR.
RET
RDINOK:
; BUMP PTR AND LOOP.
PUSH D
LXI D,128 ;CP/M RECORD LENGTH.
DAD D ;ADD IT TO PTR.
POP D
JMP RDINLOOP
; PROGRAM CONSTANTS.
WSTRTA: DW 0 ;WARM START ENTRY
WSTRTP: DW 0 ;WARM START ENTRY PTR
O1: DB 'MODIFY ' ;MDBS OPEN PARMS.
O2: DB 'ACCTSYS.DB '
O3: DB 'USER '
DB 'PASSWORD '
MDBSFCB: DB 1,'MDBSDMS ','COM',0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0
PGMFCB: DB 1,'ACCTMENU','COM',0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0
DS 64 ;PROGRAM STACK
STACK:
END