home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol049 / mdbsplii.asm < prev    next >
Assembly Source File  |  1984-04-29  |  5KB  |  200 lines

  1.     TITLE    'MDBS/PLI INITIALIZATION AND CHAIN PROGRAM'
  2. ;PROGRAM
  3. ;        MDBS/PLI INITIALIZATION AND CHAIN PROGRAM
  4. ;PROGRAMMER
  5. ;        ROBERT M. WHITE
  6. ;DATE WRITTEN
  7. ;        JULY 19, 1980
  8. ;(C)COPYRIGHT    1980,H & W COMPUTER SYSTEMS, INC.
  9. ;PURPOSE
  10. ;        THIS ROUTINE PERFORMS TWO MAIN THE FUNCTIONS.  THE FIRST
  11. ;        IS TO INITIALIZE THE SYSTEM FOR A PL/1 PROGRAM TO UTILIZE
  12. ;        MDBS.  THE SECOND TO PERFORM A CHAINING FUNCTION SO THAT
  13. ;        PL/1 PROGRAMS CAN BE OVERLAYED IN MEMORY.  FOR INITIALIZA-
  14. ;        TION, THE PL/1 PROGRAM IS GIVEN FROM 0300H TO 7FFFH IN
  15. ;        MEMORY.  MDBS IS GIVEN FROM 8003H TO THE BEGINNING OF BDOS.
  16. ;        NOTE THAT A JUMP IS INSERTED AT 8000H TO FAKE OUT PL/1.
  17. ;        TO IT, THE JUMP IS ACTUALLY BDOS AND WILL LIMIT ALL DYNAMIC
  18. ;        STORAGE ALLOCATIONS TO AREAS BELOW IT.
  19. ;REMARKS
  20. ;        1.  IT IS ASSUMED THAT A FILE NAMED "MDBS.COM" EXISTS 
  21. ;            WHICH CONTAINS A RELOCATED VERSION OF MDBS.REL TO
  22. ;            8003H AND CONTAINS THE END-OF-TPA PTR INITIALIZED.
  23. ;            THE FOLLOWING WAS USED TO DO THIS.
  24. ;                RLC<CR>
  25. ;                8003<CR>
  26. ;                DDT<CR>
  27. ;                M8000,BEE2,100<CR>   BEE2 WAS GIVEN BY RLC.
  28. ;                A100<CR>     THIS ADDS FAKE JMP TO BDOS.
  29. ;                JMP 0<CR>
  30. ;                <CR>
  31. ;                S109<CR>     THIS SUBS IN HIGH MEM PTR.
  32. ;                FF<CR>
  33. ;                DF<CR>
  34. ;                .<CR>
  35. ;                ^C
  36. ;                SAVE 64 MDBS.COM<CR>
  37.  
  38.  
  39.     MACLIB    MACRO
  40. DFCB    EQU    005CH        ;DEFAULT FCB
  41. OVLBGN    EQU    0800H        ;BEGINNING ADDRESS OF OVERLAY AREA
  42. DMSBGN    EQU    8003H        ;BEGINNING ADDRESS OF MDBS DMS ENTRY
  43.  
  44. ;        DO INITIALIZATION.
  45.     TRMDFN            ;DEFINE TERMINAL DEFINITION.
  46. MAIN:    CSEG
  47.     LXI    SP,STACK    ;SET STACK.
  48.  
  49. ;        CAUSE INITIALIZATION TO BE BYPASSED AFTER FIRST CALL.
  50. INITSKP:
  51.     NOP            ;BRANCH FOR HEREAFTER.
  52.     NOP
  53.     NOP
  54.     MVI    A,(JMP)        ;CAUSE READ TO BE BYPASSED NEXT TIME.
  55.     STA    INITSKP
  56.     LXI    H,INITBYP
  57.     SHLD    INITSKP+1
  58.     CLS            ;CLEAR THE SCREEN.
  59.  
  60.  
  61. ;        READ IN MDBS.
  62.     PRINT    <'READING IN MDBS.',CR,LF>
  63.     LXI    D,MDBSFCB    ;FCB FOR MDBS.
  64.     LXI    H,DMSBGN-3    ;START ADDRESS.
  65.     CALL    RDINPGM        ;READ IN MDBS.
  66.     ORA    A        ;SUCCESSFUL?
  67.     JZ    MDBSOK        ;...YES.
  68.     PRINT    <'*** MDBS COULD NOT BE LOADED, ABORTING... ***',CR,LF>
  69.     JMP    0
  70. MDBSOK:
  71.     PRINT    <'MDBS HAS BEEN SUCCESSFULLY READ IN.',CR,LF>
  72.  
  73. ;        SET NEW BDOS ENTRY.
  74.     LXI    H,DMSBGN-3    ;SET NEW BDOS ENTRY POINT TO FOOL PL/1.
  75.     SHLD    6
  76.  
  77. ;        OPEN THE DATABASE.
  78.     PRINT    <'OPENING THE DATABASE.',CR,LF>
  79.     LXI    B,O1        ;SET UP PARMS.
  80.     LXI    D,O2
  81.     LXI    H,O3
  82.     MVI    A,37        ;SET FOR OPEN.
  83.     CALL    DMSBGN        ;CALL MDBS.
  84.     ORA    A        ;CHECK RETURN CODE.
  85.     JZ    DBSOK        ;...SUCCESS.
  86.     PUSH    PSW
  87.     PRINT    <'*** DATABASE RETURN CODE IS '>
  88.     POP    PSW
  89.     MOV    L,A
  90.     MVI    H,0
  91.     DECOUT
  92.     PRINT    <'. ***',CR,LF>
  93.     PRINT    <'*** DATABASE COULD NOT BE OPENED. ***',CR,LF>
  94.     JMP    0
  95. DBSOK:
  96.     PRINT    <'DATABASE HAS BEEN SUCCESSFULLY OPENED.',CR,LF>
  97.  
  98. ;        SET WARM START TO CLOSE DB.
  99.     LHLD    1        ;GET CURRENT WARM START PTR.
  100.     INX    H
  101.     SHLD    WSTRTP        ;SAVE IT.
  102.     MOV    E,M        ;GET CURRENT WARM START ADDRESS.
  103.     INX    H
  104.     MOV    D,M
  105.     XCHG            ;SAVE IT.
  106.     SHLD    WSTRTA
  107.     XCHG
  108.     LXI    D,ENDPGM    ;SET NEW WARM START PTR.
  109.     MOV    M,D
  110.     DCX    H
  111.     MOV    M,E
  112.  
  113. ;        MOVE FIRST PGM NAME TO DEFAULT FCB.
  114.     MOVE    PGMFCB,DFCB,32
  115. INITBYP: DS    0
  116.  
  117. ;        READ IN PLI PROGRAM.
  118.     PRINT    <CR,LF,'READING IN NEXT PROGRAM...',CR,LF>
  119.     LXI    D,DFCB        ;SET FOR DEFAULT FCB.
  120.     LXI    H,OVLBGN    ;START ADDRESS.
  121.     CALL    RDINPGM        ;READ IN THE PLI PGM.
  122.     ORA    A        ;SUCCESSFUL?
  123.     JZ    OVLBGN        ;...YES.
  124.     PRINT    <'*** CHAINED PL/1 PROGRAM COULD NOT BE LOADED... ***',CR,LF>
  125.     JMP    0
  126.     PAGE
  127. ;****************************************************************
  128. ;*                          END OF RUN                          *
  129. ;****************************************************************
  130.  
  131. ;        CLOSE THE DATABASE.
  132. ENDPGM:
  133.     MVI    A,3        ;SET FOR CLOSE.
  134.     CALL    DMSBGN        ;ISSUE IT TO MDBS.
  135.  
  136. ;        RESTORE TRUE WARM START PTR.
  137.     LHLD    WSTRTA        ;GET WARM START ADDRESS.
  138.     XCHG            ;SAVE IT.
  139.     LHLD    WSTRTP        ;GET ADDRESS OF WHERE TO PUT IT.
  140.     MOV    M,E        ;REPLACE IT WITH THE ORIGINAL ADDRESS.
  141.     INX    H
  142.     MOV    M,D
  143.  
  144. ;        NOW DO TRUE WARM START.
  145.     JMP    0
  146.     PAGE
  147. ;****************************************************************
  148. ;*                  READ IN A PROGRAM                           *
  149. ;****************************************************************
  150.  
  151. ;        OPEN THE FCB.
  152. RDINPGM:
  153.     SAVE    D,H
  154.     DISKIO    OPEN        ;ISSUE OPEN.
  155.     RESTORE H,D
  156.     CPI    255        ;SUCCESSFUL?
  157.     RZ             ;...NO, RETURN.
  158.  
  159. ;        SET ADDRESS FOR NEXT REGISTER.
  160. RDINLOOP:
  161.     SAVE    D,H
  162.     XCHG
  163.     DISKIO    SETDMA
  164.     RESTORE H,D
  165.  
  166. ;        READ A RECORD.
  167.     SAVE    D,H
  168.     DISKIO    READ
  169.     RESTORE    H,D
  170.     ORA    A        ;SUCCESSFUL?
  171.     JZ    RDINOK        ;...YES.
  172.     XRA    A        ;RETURN W/O ERROR.
  173.     RET
  174. RDINOK:
  175.  
  176. ;        BUMP PTR AND LOOP.
  177.     PUSH    D
  178.     LXI    D,128        ;CP/M RECORD LENGTH.
  179.     DAD    D        ;ADD IT TO PTR.
  180.     POP    D
  181.     JMP    RDINLOOP
  182.  
  183.  
  184. ;        PROGRAM CONSTANTS.
  185. WSTRTA: DW    0        ;WARM START ENTRY
  186. WSTRTP:    DW    0        ;WARM START ENTRY PTR
  187. O1:    DB    'MODIFY  '    ;MDBS OPEN PARMS.
  188. O2:    DB    'ACCTSYS.DB      '
  189. O3:    DB    'USER            '
  190.     DB    'PASSWORD        '
  191. MDBSFCB: DB    1,'MDBSDMS ','COM',0,0,0,0
  192.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  193.     DB    0
  194. PGMFCB: DB    1,'ACCTMENU','COM',0,0,0,0
  195.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  196.     DB    0
  197.     DS    64        ;PROGRAM STACK
  198. STACK:
  199.     END
  200.