home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / RCPM / RUNFILE.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  4KB  |  147 lines

  1. ;RUNFILE.ASM    Ver 1.0        27 Nov 1983
  2. ;
  3. ;Phil Cary, W5TYF
  4. ;Mesilla Valley RCP/M, Las Cruces, NM
  5. ;(505) 522-8856
  6. ;
  7. ;The following is an application of the technique described in CPMCHAIN.DOC
  8. ;
  9. ;The purpose of this program is to aid the user who is unfamiliar with your
  10. ;system in running the message program.  It gives a message reminding the
  11. ;user of the correct filename, and then chains to that program.
  12. ;
  13. ;Since there are at least four major message systems(CBBS, MINICBBS, RBBS,
  14. ;and MINIRBBS) plus some others like my own MSGSYS, this will take the guess
  15. ;work out of the user's attempts to run your message system.  
  16. ;
  17. ;To use this aid, fill in the name of the message program you are using below,
  18. ;change the message texts as desired, change the defdrv/usr equates as
  19. ;required and assemble.  Then rename the COM file to one of the above and
  20. ;copy it into the drive/area of your message system.  Rename the COM file
  21. ;again to another possibility from above and copy again.  Continue until you
  22. ;think you have covered all bases.
  23. ;
  24. ;BDOS functions
  25.  
  26. wrcon:    equ    2        ;console output
  27. printf:    equ    9        ;print string
  28. bdos:   equ     5        ;bdos call
  29. openf:  equ     15        ;open file
  30. readf:  equ     20        ;read sequential
  31. dmaf:   equ     26        ;set dma address
  32. usrset:    equ    32        ;set user area
  33.  
  34. ;Misc equates
  35.  
  36. cr:    equ    0dh
  37. lf:    equ    0ah
  38.  
  39.     org    100h
  40.  
  41.     jmp    start        ;skip over following data
  42.  
  43. ;############################################################################
  44.  
  45. ;CHANGE THE FOLLOWING TO MEET YOUR REQUIREMENTS
  46.  
  47. defdrv:    equ    'F'-'@'        ;drive containing message system COM file
  48. defusr:    equ    0        ;user area  "        "      "     "    "
  49.  
  50. runfil:    db    'MSGSYS  '    ;filename for your message system COM file,
  51. ; eight chars-->>^^^^^^^^<<    ;...MINICBBS, RBBS, MINICBBS, CBBS, etc.
  52.  
  53. ;Remind the user of the name of your message program
  54.  
  55. opnmsg:    db    cr,lf
  56.     db    'Message program here is MSGSYS',cr,lf
  57.     db    'Chaining to MSGSYS.....',cr,lf,'$'
  58.  
  59. errmsg:    db    cr,lf
  60.     db    'Chain error! Warmbooting.  Enter MSGSYS please.$'
  61.  
  62. ;#############################################################################
  63.  
  64. start:    mvi    c,8        ;first move the filename above into fcb below
  65.     lxi    h,runfil    ;location of filename
  66.     lxi    d,fcb+1        ;destination
  67.     call    move        ; 8 bytes
  68.  
  69.     mvi     c,usrset    ;Set up set user function
  70.     mvi     e,defusr    ;desired user area
  71.     call     bdos        ;..do it
  72.  
  73.     lxi    d,opnmsg    ;print the reminder
  74.     call    prnmsg
  75.  
  76.     lhld     bdos+1        ;start of BDOS address
  77.     lxi     b,-codeln    ;subtract length of code to be moved
  78.     dad     b        ;..to make room at top of TPA
  79.     shld     jmpr+1          ;fill in jump address below
  80.     push     h               ;save code address for RET
  81.     xchg            ;..and use to calculate final location of fcb
  82.     lxi     h,fcb-loader    ;distance between start of loader and fcb
  83.     dad     d           ;add address computed above
  84.     shld     fcbr+1          ;and put in LXI below for eventual file read
  85.     push     h               ;save FCB destination address
  86.     lxi     h,loader    ;point to start of loader
  87.     mvi     c,codeln    ;length of loader
  88.     call     move        ;destination still in DE from above
  89.     pop     d               ;recover FCB address( saved as push h above )
  90.     mvi     c,openf
  91.     call     bdos           ;open file
  92.     inr     a        
  93.     jz     error           ;signal if error
  94.     pop     h        ;recover start of loader
  95.     sphl            ;point stack to top of
  96.     push     h              ;start of loader and save address again
  97.     lxi     h,100h          ;point to start of TPA for set DMA below
  98.     ret            ;to address on stack which is start of loader
  99.  
  100. loader:    push     h        ;DMA address at start of TPA
  101.     xchg            ;put in DE for DMA set
  102.     mvi     c,dmaf
  103.     call     bdos        ;set DMA address
  104.  
  105. fcbr:    lxi     d,$-$        ;address of moved fcb filled in earlier
  106.     mvi     c,readf        
  107.     call     bdos        ;read next record
  108.     ora     a        ;check for end of file
  109.     jnz     100h            ;EOF -> start TPA
  110.     pop     h        ;recover
  111.     lxi     d,128        ;...and bump DMA address
  112.     dad     d
  113.              
  114. jmpr:   jmp     $-$             ;jump to loader address filled in earlier
  115.  
  116. fcb:    db      defdrv          ;drive code
  117.     ds      8        ;room for filename
  118.     db      'COM'           ;file type
  119.     db      0,0,0,0,0,0    ;Zero out remaining 24 bytes of fcb
  120.     db      0,0,0,0,0,0
  121.     db    0,0,0,0,0,0
  122.     db    0,0,0,0,0,0
  123.  
  124. codeln: equ     $-loader
  125.  
  126. move:   ; c = # bytes, hl = source, de = destination
  127.     mov     a,m
  128.     stax     d
  129.     inx      h
  130.     inx     d
  131.     dcr     c
  132.     jnz     move
  133.     ret
  134.  
  135. error:    lxi    d,errmsg
  136.     call    prnmsg
  137.     jmp    0
  138.  
  139. ; Write a string of characters to the CRT
  140. ;
  141. prnmsg:    mvi    c,printf
  142.     call    bdos
  143.     ret
  144.  
  145.     end
  146.  
  147.