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 / BYE5 / BYE510.LBR / BDOS.AQM / BDOS.ASM
Assembly Source File  |  2000-06-30  |  3KB  |  131 lines

  1. *********************************************************
  2. *                            *
  3. *        CP/M BDOS ACCESS            *
  4. *                            *
  5. *    A LINKABLE MODULE IN THE MICROSOFT        *
  6. *    RELOCATION FORMAT                *
  7. *                            *
  8. *          Software Tools RCPM            *
  9. *          P.O. Box 357                *
  10. *          Kenmoe                *
  11. *          QLD, 4069                *
  12. *          AUSTRALIA                *
  13. *                            *
  14. *    Phone +61-7-378-9530  1200/2400 bps        *
  15. *                            *        
  16. *    Written by:    Bill Bolton            *
  17. *                            *
  18. *    Date:        06/Aug/1985            *
  19. *                            *
  20. *    Version:    1.0    (Initial Release)    *
  21. *                            *
  22. *    -------------------------------------------    *
  23. *                            *
  24. *    PURPOSE:                    *
  25. *                            *
  26. *    Allows access to the CP/M BDOS from Microsoft    *
  27. *    High Level Language compilers such as FORTRAN    *
  28. *    COBOL, BASCOM etc.                *
  29. *                            *
  30. *    INPUT PARAMETERS:                *
  31. *                            *
  32. *    1st. passed in HL = Address of variable for    *
  33. *                returned value        *
  34. *                            *
  35. *    2nd. passed in DE = Address of variable        *
  36. *                for the optional data    *
  37. *                argument for BDOS        *
  38. *                            *
  39. *    3rd. passed in BC = Address of variable for    *
  40. *                8 bit returned value    *
  41. *                            *
  42. *    RETURNED VALUE:                    *
  43. *                            *
  44. *    1st.    Any 8 bit value returned by the    BDOS    *
  45. *        in A is placed in the address of the    *
  46. *        variable passed as the 3rd input    *
  47. *        parameter.                *
  48. *                            *
  49. *    2nd.    Any 16 bit value returned by the BDOS    *
  50. *        in HL is placed in the address of the    *
  51. *        variable passed as the 2nd input    *
  52. *        parameter.                *
  53. *                            *
  54. *    ERROR CONDITIONS:                *
  55. *                            *
  56. *                No error conditions are    *
  57. *                explicitly reported by    *
  58. *                this module, BDOS may    *
  59. *                report an error if the    *
  60. *                argument is invalid        *
  61. *                or out of bounds.        *
  62. *                            *
  63. *    ------------------------------------------    *
  64. *                            *
  65. *    Assembler:    RMAC.ASM (Digital Research)    *
  66. *                            *
  67. *********************************************************        
  68.  
  69. CPMBDOS    EQU    5
  70.  
  71. PUBLIC    BDOS            ;GLOBAL LABLE
  72.  
  73.     CSEG            ;RELOCATABLE MODEULE
  74.  
  75. BDOS:
  76. ;
  77.     SHLD    FUNCTION    ;Save pointer to function number
  78.     XCHG
  79.     SHLD    VALUE16        ;Save pointer to data argument
  80.     MOV    H,B
  81.     MOV    L,C        ;HL <--- BC
  82.     SHLD    VALUE8        ;Save pointer to return variable
  83. ;
  84.     LXI    H,0        ;Set up a stack for this module
  85.     DAD    SP
  86.     SHLD    OLDSTAK
  87.     LXI    SP,STACK
  88. ;
  89.     LHLD    FUNCTION
  90.     MOV    C,M        ;C <---- BDOS function number
  91.     LHLD    VALUE16
  92.     MOV    E,M
  93.     INX    H
  94.     MOV    D,M        ;DE <--- BDOS data argument    
  95.     CALL    CPMBDOS
  96. ;
  97.     XCHG            ;DE <---- Returned 16 bit value (if any)
  98.     LHLD    VALUE8        ;Get pointer to 8 bit return value argument
  99.     MOV    M,A        ;Stuff it with 8 bit returned value
  100.     INX    H
  101.     MVI    M,0
  102.     LHLD    VALUE16        ;Get pointer to data argument
  103.     MOV    M,E
  104.     INX    H
  105.     MOV    M,D        ;Stuff it with 16 bit returned value
  106. ;
  107.     LHLD    OLDSTAK        ;Restore the caller's stack
  108.     SPHL
  109.     RET
  110.     
  111. ;
  112. ;    DATA STORAGE
  113. ;
  114.     DSEG
  115. ;
  116. FUNCTION:
  117.     DW    0        ;Address of variable for function
  118. VALUE16:
  119.     DW    0        ;Address of variable for data argumeny
  120. VALUE8:
  121.     DW    0        ;Address of variable for returned value
  122. ;
  123. OLDSTAK:
  124.     DS    2        ;CALLER'S STACK POINTER
  125. SPACE:
  126.     DS    14        ;STACK
  127. STACK:
  128.     DS    2        ;STACK TOP
  129. ;
  130.     END
  131.