home *** CD-ROM | disk | FTP | other *** search
/ norge.freeshell.org (192.94.73.8) / 192.94.73.8.tar / 192.94.73.8 / pub / computers / cpm / alphatronic / DRIPAK.ZIP / CPM_3-0 / SOURCES / PLIBIOS.ASM < prev    next >
Assembly Source File  |  1982-12-31  |  5KB  |  171 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.     public    bstdma    ;set dma
  17.     public    bflush    ;flush deblocking buffers
  18. ;
  19. ;
  20.     extrn    ?boot    ;system reboot entry point
  21.     extrn    ?bdos    ;bdos entry point
  22. ;
  23. ;***********************************************************
  24. ;*                                                         *
  25. ;*        equates for interface to cp/m bios               *
  26. ;*                                                         *
  27. ;***********************************************************
  28. cr    equ    0dh    ;carriage return
  29. lf    equ    0ah    ;line feed
  30. eof    equ    1ah    ;end of file
  31. ;
  32. base    equ    0
  33. wboot    equ    base+1h    ;warm boot entry point stored here
  34. sdsk    equ    18h    ;bios select disk entry point
  35. strk    equ    1bh    ;bios set track entry point
  36. ssec    equ    1eh    ;bios set sector entry point
  37. sdma    equ    21h    ;bios set dma entry point
  38. read    equ    24h    ;bios read sector entry point
  39. write    equ    27h    ;bios write sector entry point
  40. stran    equ    2dh    ;bios sector translation entry point
  41. ;
  42. ;    utility functions
  43. ;
  44. ;***********************************************************
  45. ;***********************************************************
  46. ;*                                                         *
  47. ;*       general purpose routines used upon entry          *
  48. ;*                                                         *
  49. ;***********************************************************
  50. ;
  51. ;
  52. getp:    ;get parameter
  53.     mov    e,m    ;low (addr)
  54.     inx    h
  55.     mov    d,m    ;high (addr)
  56.     inx    h
  57.     push    h    ;save for next parameter
  58.     xchg        ;hl = .char
  59.     mov    e,m    ;to register e
  60.     inx    h
  61.     mov    d,m    ;get high byte as well
  62.     pop    h    ;ready for next parameter
  63.     ret
  64. ;
  65. ;
  66. ;***********************************************************
  67. ;*                                                         *
  68. ;***********************************************************
  69. seldsk:    ;select drive number 0-15, in C
  70.     ;1-> drive no.
  71.     ;returns-> pointer to translate table in HL
  72.     call getp
  73.     mov c,e        ;c = drive no.
  74.     lxi d,sdsk
  75.     jmp gobios
  76. ;
  77. ;***********************************************************
  78. ;*                                                         *
  79. ;***********************************************************
  80. settrk:    ;set track number 0-76, 0-65535 in BC
  81.     ;1-> track no.
  82.     call getp
  83.     mov b,d
  84.     mov c,e        ;bc = track no.
  85.     lxi d,strk
  86.     jmp gobios
  87. ;
  88. ;***********************************************************
  89. ;*                                                         *
  90. ;***********************************************************
  91. setsec:    ;set sector number 1 - sectors per track
  92.     ;1-> sector no.
  93.     call getp
  94.     mov b,d
  95.     mov c,e        ;bc = sector no.
  96.     lxi d,ssec
  97.     jmp gobios
  98. ;
  99. ;***********************************************************
  100. ;*                                                         *
  101. ;***********************************************************
  102. rdsec:    ;read current sector into sector at dma addr
  103.     ;returns in A register:    0 if no errors 
  104.     ;            1 non-recoverable error
  105.     lxi d,read
  106.     jmp gobios
  107. ;***********************************************************
  108. ;*                                                         *
  109. ;***********************************************************
  110. wrsec:    ;writes contents of sector at dma addr to current sector
  111.     ;returns in A register:    0 errors occured
  112.     ;            1 non-recoverable error
  113.     lxi d,write
  114.     jmp gobios
  115. ;
  116. ;***********************************************************
  117. ;*                                                         *
  118. ;***********************************************************
  119. sectrn:    ;translate sector number
  120.     ;1-> logical sector number (fixed(15))
  121.     ;2-> pointer to translate table
  122.     ;returns-> physical sector number
  123.     call getp    ;first parameter
  124.     mov b,d    
  125.     mov c,e        ;bc = logical sector no.
  126.     call getp    ;second parameter
  127.     push d        ;save it
  128.     lxi d,stran
  129.     lhld wboot
  130.     dad d        ;hl = sectran entry point
  131.     pop d        ;de = .translate-table 
  132.     pchl
  133. ;
  134. ;***********************************************************
  135. ;*
  136. ;*
  137. ;***********************************************************
  138. bstdma:    ;set dma
  139.     call    getp
  140.     mov    b,d
  141.     mov    c,e
  142.     lxi    d,sdma
  143.     jmp    gobios    
  144. ;
  145. bflush:    ;flush deblocking buffers
  146. ;    lxi    b,0ffffh
  147. ;    lxi    d,setdmf
  148. ;    jmp    gobios
  149.     ret
  150.  
  151. ;***********************************************************
  152. ;***********************************************************
  153. ;***********************************************************
  154. ;*                                                         *
  155. ;*       compute offset from warm boot and jump to bios    *
  156. ;*                                                         *
  157. ;***********************************************************
  158. ;
  159. ;
  160. gobios:    ;jump to bios entry point
  161.     ;de ->  offset from warm boot entry point
  162.     lhld    wboot
  163.     dad    d
  164.     pchl
  165. ;
  166.     dw    0,0,0,0,0,0,0,0
  167.     dw    0,0,0,0,0,0,0,0
  168.     db    0    
  169.     end
  170.  
  171.