home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / zsys / simtel20 / z3lib / zlib2.lbr / Z3PRGLD.Z80 < prev    next >
Encoding:
Text File  |  1986-02-07  |  2.5 KB  |  105 lines

  1. ;
  2. ; Z3LIB Module Name:  Z3PRGLD
  3. ; Author:  Richard Conn
  4. ; Z3LIB  Version Number:  1.3
  5. ; Module Version Number:  1.1
  6. ;
  7.     public    prgload
  8.  
  9. ;
  10. ; OS Equates
  11. ;
  12. bdos    equ    5
  13. tpa    equ    100h
  14.  
  15. ;
  16. ;    PRGLOAD loads the program indicated by the first 12 bytes pted to
  17. ; by DE into memory at 100H and transfers control to it.
  18. ;    If file does not exist, PRGLOAD returns; if file does exist, PRGLOAD
  19. ; clears the stack of its return address and transfers control to the program
  20. ; after loading it with the cleared stack as the program's stack.
  21. ;
  22. prgload:
  23.     push    de        ;save ptr to FCB (DE)
  24.     ld    hl,(bdos+1)    ;get base address of BDOS
  25.     ld    a,h        ;9 pages below BDOS (1st page below CCP)
  26.     sub    9
  27.     ld    h,a
  28.     ld    l,80h        ;HL pts to load address
  29.     ld    (ldadr),hl    ;set load address
  30.     ld    de,40h        ;set FCB address
  31.     add    hl,de
  32.     ld    (ldfcb),hl    ;address of FCB
  33.     pop    de        ;pt to original FCB
  34.     ld    (hl),0        ;set first byte to 0 (current disk)
  35.     inc    hl        ;pt to name
  36.     inc    de        ;pt to name
  37.     ld    b,11        ;11 bytes
  38.     call    moveb        ;do copy
  39.     ld    b,24        ;fill next 24 bytes (to R2) with zeroes
  40.     call    zero        ;initialize LDFCB
  41.     ld    hl,(ldfcb)    ;pt to FCB
  42.     ex    de,hl        ;... in DE
  43.     ld    c,15        ;try to open file
  44.     call    bdos
  45.     cp    0ffh        ;error?
  46.     ret    z        ;abort if error
  47. ;
  48. ; Copy Loader Program into TBUFF Area
  49. ;
  50.     pop    af        ;clear stack
  51.     ld    de,loader    ;pt to loader program
  52.     ld    hl,(ldadr)    ;pt to loader address
  53.     ld    b,64        ;copy 64 bytes
  54.     call    moveb        ;do the copy
  55.     ld    de,100h        ;initial DMA address
  56.     ld    hl,(ldadr)    ;transfer control to the loader program
  57.     jp    (hl)        ;transfer control to the loader program
  58. ;
  59. ; Copy HL to DE for B bytes
  60. ;
  61. moveb:
  62.     ld    a,(de)        ;get byte
  63.     ld    (hl),a        ;put byte
  64.     inc    hl        ;pt to next
  65.     inc    de
  66.     dec    b        ;count down
  67.     jp    nz,moveb
  68.     ret
  69. ;
  70. ; Zero FCB fields pted to by HL
  71. ;
  72. zero:
  73.     ld    (hl),0        ;store zero
  74.     inc    hl        ;pt to next
  75.     dec    b        ;count down
  76.     jp    nz,zero
  77.     ret
  78. ;
  79. ; Loader Program
  80. ;   Upon execution, the address of LOADER is LDADR
  81. ;   The FCB used by LOADER is at LDFCB
  82. ;
  83. loader:
  84.     ld    c,26        ;set DMA
  85.     push    de        ;save address
  86.     call    bdos        ;perform BDOS function
  87. ldfcb    equ    $+1
  88.     ld    de,0        ;pt to FCB
  89.     ld    c,20        ;read next record
  90.     call    bdos
  91.     pop    hl        ;get DMA address
  92.     or    a        ;0=OK
  93.     jp    nz,tpa        ;done with load, so run program
  94.     ld    de,80h        ;advance to next record
  95.     add    hl,de
  96.     ex    de,hl        ;DMA address in DE
  97. ldadr    equ    $+1
  98.     jp    0        ;continue load
  99. ;
  100. ; Memory Marker - For Easy Location of Module End
  101. ;
  102.     db    '**** ZCPR3 PRGLOAD ****'
  103.  
  104.     end
  105.