home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol236 / ovlmngr.mac < prev    next >
Encoding:
Text File  |  1986-02-13  |  6.3 KB  |  209 lines

  1. ; OVERLAY MANAGER FOR PROGRAMS LINKED WITH DIGITAL RESEARCH'S LINK PROGRAM
  2.  
  3.         .Z80
  4.  
  5. BDOS    EQU 5                           ; BDOS ENTRY
  6. FDR     EQU 50H                         ; DRIVE HOLDING PROGRAM
  7. FCB     EQU 5CH                         ; LOCATION OF FCB
  8. BUFF    EQU 80H                         ; LOCATION OF BUFFER
  9. TRUE    EQU -1
  10. FALSE   EQU 0
  11.  
  12. CHECK   EQU FALSE
  13.  
  14.         ENTRY ?OVLAY,?OVLA0
  15.  
  16. ?OVLAY: LD HL,OVLAYX                    ; NOT IMPLEMENTED YET
  17.         JP ERREX
  18.  
  19. ?OVLA0: PUSH HL                         ; KEEP 2 PARAMETERS
  20.         PUSH DE
  21.         PUSH BC                         ; LOCATION OF FILE NAME IS IN BC
  22.         LD A,(LEVEL)                    ; OVERLAY LEVEL
  23.         INC A
  24.         CP 5
  25.         JP Z,TMOL                       ; EXIT IF TOO LEVEL TOO HIGH
  26.         LD (LEVEL),A
  27.  
  28.         DEC A                           ; TO RECOVER OVERLAY LEVEL
  29.         ADD A,A                         ; MULTIPLY BY 10
  30.         LD H,A
  31.         ADD A,A
  32.         ADD A,A
  33.         ADD A,H
  34.         LD HL,FILEN                     ; FILE NAMES OF PREVIOUS OVERLAYS
  35.         LD D,0
  36.         LD E,A
  37.         ADD HL,DE                       ; FILE NAME OF LAST OVERLAY AT THIS LEVEL
  38.         LD D,B                          ; GET FILE NAME OF REQUESTED OVERLAY
  39.         LD E,C
  40.         LD BC,8                         ; COMPARE 8 BYTES
  41. LOOP:   LD A,(DE)                       ;   OF STRINGS STARTING AT (HL) AND (DE)
  42.         CPI
  43.         JR NZ,DIFF
  44.         JP PO,SAME
  45.         INC DE
  46.         JR LOOP
  47. DIFF:   INC BC
  48.         DEC HL
  49.         EX DE,HL
  50.         LDIR                            ; UPDATE FILE NAME
  51.         EX DE,HL
  52.         LD (ORIG),HL                    ; LOCATION WHERE ORIGIN IS TO BE STORED
  53.         INC HL
  54.         INC HL
  55.         LD (HL),0FFH                    ; CLEAR NEXT OVERLAY LEVEL
  56.  
  57.         POP HL                          ; LOCATION OF FILE NAME
  58.         LD DE,FCB+1                     ; LOAD FILE NAME
  59.         LD BC,8
  60.         LDIR
  61.         LD HL,FTYPE                     ; LOAD FILE TYPE
  62.         LD BC,3
  63.         LDIR
  64.         LD A,(FDR)                      ; LOAD DRIVE
  65.         LD (FCB),A
  66.         XOR A                           ; A=0
  67.         LD (FCB+12),A                   ; EXTENT
  68.         LD (FCB+32),A                   ; CURRENT RECORD
  69.         LD C,15                         ; OPEN FILE CODE
  70.         LD DE,FCB
  71.         CALL BDOS
  72.         AND A
  73.         JP NZ,OPER                      ; JUMP ON OPEN ERROR
  74.         LD C,44                         ; MULTISECTOR COUNT CODE
  75.         LD E,1
  76.         CALL BDOS
  77.         LD C,26                         ; SET DMA CODE
  78.         LD DE,BUFF
  79.         CALL BDOS
  80.         LD C,20                         ; READ CODE
  81.         LD DE,FCB
  82.         CALL BDOS
  83.         AND A
  84.         JP NZ,RDER
  85.         LD HL,(BUFF+1)                  ; LENGTH OF OVERLAY FILE
  86.         DEC HL                          ; FIND NUMBER OF 128 BYTE BLOCKS
  87.         ADD HL,HL
  88.         JP C,LONG                       ; EXIT ON OVERFLOW
  89.         INC H
  90.         JP M,LONG                       ; EXIT IF GREATER THAN 128
  91.         LD E,H                          ; NUMBER OF BLOCKS
  92.         LD C,44                         ; MULTISECTOR COUNT CODE
  93.         CALL BDOS
  94.         LD DE,(BUFF+7)                  ; WHERE FILE IS TO BE LOADED
  95.         LD HL,(ORIG)                    ; KEEP OVERLAY ORIGIN
  96.         LD (HL),E
  97.         INC HL
  98.         LD (HL),D
  99.         LD (ORIG),DE
  100.         LD C,26                         ; SET DMA CODE
  101.         CALL BDOS
  102.         LD A,2                          ; START AT RECORD 2
  103.         LD (FCB+32),A
  104.         LD C,20                         ; READ CODE
  105.         LD DE,FCB
  106.         CALL BDOS
  107.         AND A
  108.         JP NZ,RDER
  109.         LD C,44                         ; SET MULTISECTOR COUNT TO 1
  110.         LD E,1
  111.         CALL BDOS
  112.         LD C,26                         ; RESET DMA TO 80H
  113.         LD DE,80H
  114.         CALL BDOS
  115.                          IF CHECK
  116.         LD HL,ACT
  117.         CALL MSG
  118.                          ENDIF
  119. REC:    POP DE                          ; RECOVER PARAMETERS
  120.         LD HL,EXIT                      ; TO LOAD EXIT
  121.         EX (SP),HL                      ;    ONTO STACK
  122.         PUSH HL
  123.         LD HL,(ORIG)                    ; WHERE TO JUMP TO
  124.         EX (SP),HL
  125.         RET                             ; THIS WILL JUMP TO THE OVERLAY
  126.  
  127. SAME:   LD DE,ORIG                      ; FIND OVERLAY ORIGIN
  128.         LDI
  129.         LDI
  130.         POP HL                          ; ADJUST STACK
  131.                          IF CHECK
  132.         LD HL,NACT
  133.         CALL MSG
  134.                          ENDIF
  135.         JR REC
  136.  
  137. EXIT:   PUSH HL                         ; ADJUST LEVEL ON EXIT FROM OVERLAY
  138.         LD HL,LEVEL
  139.         DEC (HL)
  140.         JP M,OLE
  141.                          IF CHECK
  142.         PUSH AF
  143.         PUSH BC
  144.         PUSH DE
  145.         LD HL,ADJ
  146.         CALL MSG
  147.         POP DE
  148.         POP BC
  149.         POP AF
  150.                          ENDIF
  151.         POP HL
  152.         RET
  153.  
  154. ERREX:  LD A,(HL)                       ; LENGTH OF STRING
  155.         INC HL                          ; POINTS TO STRING
  156.         LD (CCB+2),A
  157.         XOR A
  158.         LD (CCB+3),A
  159.         LD (CCB),HL
  160.         LD C,111                        ; PRINT BLOCK CODE
  161.         LD DE,CCB
  162.         CALL BDOS
  163.         JP 0                            ; RETURN TO CP/M
  164.  
  165.                          IF CHECK
  166. MSG:    LD A,(HL)                       ; LENGTH OF STRING
  167.         INC HL                          ; POINTS TO STRING
  168.         LD (CCB+2),A
  169.         XOR A
  170.         LD (CCB+3),A
  171.         LD (CCB),HL
  172.         LD C,111                        ; PRINT BLOCK CODE
  173.         LD DE,CCB
  174.         CALL BDOS
  175.         RET
  176.  
  177. ACT:    DB 10,13,10,'ACTION',13,10
  178. NACT:   DB 13,13,10,'NO ACTION',13,10
  179. ADJ:    DB 13,13,10,'ADJ STACK',13,10
  180.                          ENDIF
  181.  
  182. TMOL:   LD HL,TMOLX
  183.         JP ERREX
  184. OPER:   LD HL,OPERX
  185.         JP ERREX
  186. RDER:   LD HL,RDERX
  187.         JP ERREX
  188. LONG:   LD HL,LONGX
  189.         JP ERREX
  190. OLE:    LD HL,OLEX
  191.         JP ERREX
  192.  
  193. TMOLX:  DB 15,13,10,'TOO MANY OVLS'
  194. OVLAYX: DB 17,13,10,'?OVLAY ACCESSED'
  195. FTYPE:  DB 'OVL'                        ; FILE TYPE OF OVERLAYS
  196. OPERX:  DB 16,13,10,'OVL FL OPN ERR'
  197. RDERX:  DB 15,13,10,'OVL FL RD ERR'
  198. LONGX:  DB 17,13,10,'OVL FL TOO LONG'
  199. OLEX:   DB 13,13,10,'OVL LVL ERR'
  200.  
  201.         DSEG
  202. CCB:    DS 4                            ; CHARACTER CONTROL BLOCK
  203. ORIG:   DS 2                            ; ORIGIN OF OVERLAY
  204. LEVEL:  DB 0                            ; OVERLAY LEVEL
  205. FILEN:  DB 0FFH                         ; FILENAMES & ORIGINS
  206.         DS 50
  207.  
  208.         END
  209.