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

  1.  
  2.     name    'PLIBIOS'
  3.     title    'Direct BIOS Calls From PL/I-80'
  4. ;
  5. ;***********************************************************
  6. ;*                                                         *
  7. ;*    bios calls from pl/i for track, sector io          *
  8. ;*                                                         *
  9. ;***********************************************************
  10.     public  seldsk    ;select disk drive
  11.     public    settrk    ;set track number
  12.     public    setsec    ;set sector number
  13.     public    rdsec    ;read sector
  14.     public    wrsec    ;write sector
  15.     public  sectrn    ;translate sector number
  16. ;
  17. ;
  18.     extrn    ?boot    ;system reboot entry point
  19.     extrn    ?bdos    ;bdos entry point
  20. ;
  21. ;***********************************************************
  22. ;*                                                         *
  23. ;*        equates for interface to cp/m bios               *
  24. ;*                                                         *
  25. ;***********************************************************
  26. cr    equ    0dh    ;carriage return
  27. lf    equ    0ah    ;line feed
  28. eof    equ    1ah    ;end of file
  29. ;
  30. base    equ    0
  31. wboot    equ    base+1h    ;warm boot entry point stored here
  32. sdsk    equ    18h    ;bios select disk entry point
  33. strk    equ    1bh    ;bios set track entry point
  34. ssec    equ    1eh    ;bios set sector entry point
  35. read    equ    24h    ;bios read sector entry point
  36. write    equ    27h    ;bios write sector entry point
  37. stran    equ    2dh    ;bios sector translation entry point
  38. readc    equ    1    ;read character from console
  39. writc    equ    2    ;write console character
  40. rdrf    equ    3    ;reader input
  41. punf    equ    4    ;punch output
  42. listf    equ    5    ;list output function
  43. diof    equ    6    ;direct i/o, version 2.0
  44. getiof    equ    7    ;get i/o byte
  45. setiof    equ    8    ;set i/o byte
  46. printf    equ    9    ;print string function
  47. rdconf    equ    10    ;read console buffer
  48. statf    equ    11    ;return console status
  49. versf    equ    12    ;get version number
  50. resetf    equ    13    ;system reset
  51. seldf    equ    14    ;select disk function
  52. openf    equ    15    ;open file function
  53. closef    equ    16    ;close file
  54. serchf    equ    17    ;search for file
  55. serchn    equ    18    ;search next
  56. deletf    equ    19    ;delete file
  57. readf    equ    20    ;read next record
  58. writf    equ    21    ;write next record
  59. makef    equ    22    ;make file
  60. renamf    equ    23    ;rename file
  61. loginf    equ    24    ;get login vector
  62. cdiskf    equ    25    ;get current disk number
  63. setdmf    equ    26    ;set dma function
  64. getalf    equ    27    ;get allocation base
  65. wrprof    equ    28    ;write protect disk
  66. getrof    equ    29    ;get r/o vector
  67. setatf    equ    30    ;set file attributes
  68. getdpf    equ    31    ;get disk parameter block
  69. userf    equ    32    ;set/get user code
  70. rdranf    equ    33    ;read random
  71. wrranf    equ    34    ;write random
  72. filszf    equ    35    ;compute file size
  73. setrcf    equ    36    ;set random record position
  74. rsdrvf    equ    37    ;reset drive function
  75. wrrnzf    equ    40    ;write random zero fill
  76. ;
  77. ;    utility functions
  78. ;
  79. ;***********************************************************
  80. ;***********************************************************
  81. ;*                                                         *
  82. ;*       general purpose routines used upon entry          *
  83. ;*                                                         *
  84. ;***********************************************************
  85. ;
  86. ;
  87. getp:    ;get parameter
  88.     mov    e,m    ;low (addr)
  89.     inx    h
  90.     mov    d,m    ;high (addr)
  91.     inx    h
  92.     push    h    ;save for next parameter
  93.     xchg        ;hl = .char
  94.     mov    e,m    ;to register e
  95.     inx    h
  96.     mov    d,m    ;get high byte as well
  97.     pop    h    ;ready for next parameter
  98.     ret
  99. ;
  100. ;
  101. ;***********************************************************
  102. ;*                                                         *
  103. ;***********************************************************
  104. seldsk:    ;select drive number 0-15, in C
  105.     ;1-> drive no.
  106.     ;returns-> pointer to translate table in HL
  107.     call getp
  108.     mov c,e        ;c = drive no.
  109.     lxi d,sdsk
  110.     jmp gobios
  111. ;
  112. ;***********************************************************
  113. ;*                                                         *
  114. ;***********************************************************
  115. settrk:    ;set track number 0-76, 0-65535 in BC
  116.     ;1-> track no.
  117.     call getp
  118.     mov b,d
  119.     mov c,e        ;bc = track no.
  120.     lxi d,strk
  121.     jmp gobios
  122. ;
  123. ;***********************************************************
  124. ;*                                                         *
  125. ;***********************************************************
  126. setsec:    ;set sector number 1 - sectors per track
  127.     ;1-> sector no.
  128.     call getp
  129.     mov b,d
  130.     mov c,e        ;bc = sector no.
  131.     lxi d,ssec
  132.     jmp gobios
  133. ;
  134. ;***********************************************************
  135. ;*                                                         *
  136. ;***********************************************************
  137. rdsec:    ;read current sector into sector at dma addr
  138.     ;returns in A register:    0 if no errors 
  139.     ;            1 non-recoverable error
  140.     lxi d,read
  141.     jmp gobios
  142. ;***********************************************************
  143. ;*                                                         *
  144. ;***********************************************************
  145. wrsec:    ;writes contents of sector at dma addr to current sector
  146.     ;returns in A register:    0 errors occured
  147.     ;            1 non-recoverable error
  148.     lxi d,write
  149.     jmp gobios
  150. ;
  151. ;***********************************************************
  152. ;*                                                         *
  153. ;***********************************************************
  154. sectrn:    ;translate sector number
  155.     ;1-> logical sector number (fixed(15))
  156.     ;2-> pointer to translate table
  157.     ;returns-> physical sector number
  158.     call getp    ;first parameter
  159.     mov b,d    
  160.     mov c,e        ;bc = logical sector no.
  161.     call getp    ;second parameter
  162.     push d        ;save it
  163.     lxi d,stran
  164.     lhld wboot
  165.     dad d        ;hl = sectran entry point
  166.     pop d        ;de = .translate-table 
  167.     pchl
  168. ;***********************************************************
  169. ;***********************************************************
  170. ;***********************************************************
  171. ;*                                                         *
  172. ;*       compute offset from warm boot and jump to bios    *
  173. ;*                                                         *
  174. ;***********************************************************
  175. ;
  176. ;
  177. gobios:    ;jump to bios entry point
  178.     ;de ->  offset from warm boot entry point
  179.     lhld    wboot
  180.     dad    d
  181.     pchl
  182. ;
  183.     end
  184.  
  185.