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 / BDOS / P2DOS23.LBR / P2DOS.MZC / P2DOS.MAC
Text File  |  2000-06-30  |  15KB  |  380 lines

  1.     TITLE    'P2DOS Disk Operating System'
  2. ;******************************************************************************
  3. ;*                                          *
  4. ;*  P 2 D O S --Z80 REPLACEMENT DISK OPERATING SYSTEM VERSION 2.3          *
  5. ;*        No more control-C to change disks!                      *
  6. ;*  COPYRIGHT (C) 1985 BY:     H.A.J. TEN BRUGGE                  *
  7. ;*  ALL RIGHTS RESERVED         MOLENSTRAAT 33                      *
  8. ;*                  NL-7491 BD DELDEN                  *
  9. ;*                 THE NETHERLANDS                  *
  10. ;*                 TEL:..31-5407-1980                  *
  11. ;*  P2DOS WAS WRITTEN BY HERMAN TEN BRUGGE, WHO ASSUMES NO RESPONSIBILITY     *
  12. ;*  OR LIABILITY FOR ITS USE. P2DOS IS RELEASED TO THE PUBLIC DOMAIN FOR      *
  13. ;*  NON-COMMERCIAL USE ONLY.                              *
  14. ;*                                          *
  15. ;*  THE PULBLIC IS ENCOURAGED TO FREELY COPY AND USE THIS PROGRAM FOR         *
  16. ;*  NON-COMMERCIAL PURPOSES. ANY COMMERCIAL USE OF P2DOS IS PROHIBITED        *
  17. ;*  UNLESS APPROVED BY THE AUTHOR, H.A.J. TEN BRUGGE, IN WRITING.          *
  18. ;*                                              *     
  19. ;*  THIS IS MOD 2.3 TO THE RELEASE VERSION OF P2DOS                  *
  20. ;*                                          *
  21. ;******************************************************************************
  22. ;*
  23. ;* Mod 2.3 Revisions
  24. ;*
  25. ;*   By Donald C. Kirkpatrick
  26. ;*      17595 S.W. Pheasant Lane
  27. ;*      Beaverton, Oregon 97006
  28. ;*      15 February 1988
  29. ;*    uucp: !tektronix!dadla!donk
  30. ;*
  31. ;*   Name returned to P2DOS.
  32. ;*
  33. ;*   Restored full compatibility with P2DOS mod 2.1 and Digital Research
  34. ;*   BDOS. Moved disk error routines and path location address back to
  35. ;*   where they were in P2DOS. Fixed Drive Reset Command 37 so only drives
  36. ;*   specified in reset vector are affected.
  37. ;*
  38. ;*   Made system file r/o an assembly time option to satisfy Benjamin Ho's
  39. ;*   desire to not protect system files yet allow those of us who want
  40. ;*   insurance to take insurance.
  41. ;*
  42. ;*   Added single character ignore read/only status. It seemed just too
  43. ;*   dangerous to allow any character except ^C to cancel r/o status.
  44. ;*   This is an assembly time option, so those who wish to retain the
  45. ;*   any character cancels r/o status may. The ignore r/o status
  46. ;*   character was chosen to be ^X (CANCEL), but may be set to anything
  47. ;*   by changing the IGNORE equate.
  48. ;*
  49. ;*   Added flag to the FLAGS byte to disable ignore r/o status so a
  50. ;*   running program can insist that the r/o status of a file or disk
  51. ;*   be observed.
  52. ;*
  53. ;*   Added an assembly time option to allow true XON (^Q) - XOFF (^S)
  54. ;*   start/stop of console output. If this option is selected, only
  55. ;*   a ^Q will restart suspended console output. Also added is an assembly
  56. ;*   time option so suspended console output cannot be restarted by
  57. ;*   ^S. It has always seemed a mistake that a second ^S would restart
  58. ;*   something suspended by ^S. If neither assembly time option is
  59. ;*   selected, console suspention will operate just as it always has.
  60. ;*
  61. ;**************************************************************************
  62. ;*
  63. ;*  MOD 2.2 Revisions (Mod 2.2 a.k.a. Mod 0.2 of SUPRBDOS)
  64. ;*  Renamed to SUPRBDOS
  65. ;*        By Benjamin Ho
  66. ;*               626 Emerson St.
  67. ;*                 Evanston, IL 60201
  68. ;*  Background:
  69. ;* 
  70. ;*  P2DOS MOD 2.1 was not a major improvement on the standard CP/M BDOS.
  71. ;*  While it added Public files, slightly more informative error messages, and
  72. ;*  time stamp support, it did not fix the major annoyances of the CP/M BDOS,
  73. ;*  namely the necessity of logging in new disks with Control-C, mystifying
  74. ;*  error messages, and a delete key that looked like it didn't delete.  
  75. ;*
  76. ;*  P2DOS MOD 2.2 is a major enhancement which liberates the CP/M user from all
  77. ;*  these annoyances.  It is compatible with all CP/M software except those
  78. ;*  that modify the BDOS.  Fortunately, that type of program is extremely rare.
  79. ;*
  80. ;*  P2DOS MOD 2.2 may be used with ZCPR3 to provide an extremely powerful
  81. ;*  100% CP/M 2.2 compatible operating system.  The resulting system is not
  82. ;*  subject to Digital Research's licensing agreement.  The only restriction
  83. ;*  is that it may be used for non-commerical use only, as stated by the
  84. ;*  authors of ZCPR3 and P2DOS.
  85. ;*
  86. ;*  Enjoy!
  87. ;*  9/2/86- 
  88. ;*        Added automatic login of changed disks--no more Control-C 
  89. ;*          when changing disks!  
  90. ;*        Removed P2DOS tie to ZCPR2.  Can now be used with ZCPR3 or 
  91. ;*            (ugh!) normal CP/M.  
  92. ;*        Improved error messages:  
  93. ;*          Disk Error on X: Read Error 
  94. ;*                             Write Error 
  95. ;*                           Non-existent drive 
  96. ;*                             File is Read-Only 
  97. ;*        Fixed delete key--now works like backspace.  No echoing characters 
  98. ;*        Allowed functions 13 and 37 to recognize changes between single and 
  99. ;*            double sided disks on machines which normally require a warm 
  100. ;*            boot when "sidedness" is changed.  Bios modification is needed 
  101. ;*            to support this feature 
  102. ;*        Fixed directory read bug.  Function 37 bug which plagued
  103. ;*            library utility program NULU 1.5 is fixed.                
  104. ;*        Choice of assembly by M80 and compatibles or public domain ZASM 
  105. ;*          System files are read/write, as in CP/M.  Changed from P2DOS 
  106. ;*           mod 2.1 in which system files were R/O
  107. ;*          Deleted P2DOS search path so the more flexible 
  108. ;*           ZCR3 search path could be used
  109. ;*          File split into 3 sections for easy of editing.
  110. ;******************************************************************************
  111. ;
  112. ;
  113. ;
  114. ;  P 2 D O S --Z80 REPLACEMENT DISK OPERATING SYSTEM VERSION 2.3
  115. ;
  116. ;
  117. ; NEW FEATURES OF P2DOS ARE:
  118. ;
  119. ; - TEST CONSOLE STATUS AFTER 256 CHARACTERS OUTPUT. THIS MAKES IT POSSIBLE TO
  120. ;   EXIT A PROGRAM, AFTER YOU HIT ACCIDENTALY A KEY, BY TYPING ^S FOLLOWED
  121. ;   BY ^C. THIS FIXES A BUG IN THE DIGITAL RESEARCH BDOS. THERE, ANY OTHER
  122. ;   CHARACTER WOULD CAUSE ALL SUBSEQUENT ^S TO BE IGNORED.
  123. ;
  124. ; - ERROR ROUTINES GIVE MORE INFORMATION.
  125. ;      P2DOS ERROR ON D: BAD SECTOR
  126. ;             SELECT
  127. ;             FILE R/O
  128. ;             R/O
  129. ;      FUNCTION =XXX (FILE =FILENAME.TYP)
  130. ;   AS YOU CAN SEE THE ERROR IS DISPLAYED WITH THE P2DOS FUNCTION CALL.
  131. ;   THE OPTION 'FILE =FILENAME.TYP' IS ONLY DISPLAYED IF THE P2DOS FUNCTION
  132. ;   USES A FILENAME. AFTER ALL ERRORS A WARM BOOT IS DONE.
  133. ;
  134. ; - PUBLIC FILES ARE SUPPORTED. YOU CAN ACCESS A PUBLIC FILE FROM ANY
  135. ;   USER NUMBER.  THIS MAKES IT POSSIBLE TO PUT FOR EXAMPLE ALL '.COM' IN 
  136. ;   A SPECIAL USER NUMBER AND MAKE ALL THOSE FILES PUBLIC. YOU CAN ACCESS ALL 
  137. ;   THE FILES FROM ANY USER NUMBER ON THE SAME DISK.
  138. ;   A PUBLIC FILE IS A FILE WITH BIT F2 (BIT 7 FROM FILENAME LETTER 2) SET TO
  139. ;   ONE. PUBLIC FILES CAN ONLY BE REFERENCED BY THERE EXACT NAME AND NOT BY WILD
  140. ;   CARD CHARACTERS. 
  141. ;
  142. ; - SEARCH PATH IS IMPLEMENTED JUST AS IN ZCPR2 TO FIND FILES ON OTHER DRIVES
  143. ;   AND IN OTHER USER AREAS. THE FILES MUST BE SYSTEM FILES AND MUST BE
  144. ;   REFERENCED BY THEIR EXACT NAME AS IN PUBLIC FILE NAMES ABOVE.
  145. ;
  146. ; - AUTOMATIC DATE AND TIME STAMP IS IMPLEMENTED. THE CREATION DATE AND TIME
  147. ;   IS SET WHEN THE FUNCTION MAKE IS EXECUTED. THE UPDATE DATE AND TIME IS
  148. ;   SET AS THE FILE IS CLOSED. TO LET THIS FEATURE WORK YOU NEED TO HAVE A 
  149. ;   REAL TIME CLOCK AND THE CORRECT P2BIOS DRIVER ROUTINE. YOU ALSO HAVE TO 
  150. ;   INITIALISE YOUR  DIRECTORY FOR TIME STAMPS.   
  151. ;
  152. ; - FILE R/O ERROR MESSAGE OCCURS IF ONE OF THE FOLLOWING FILE TYPES IS ACTIVE:
  153. ;     PUBLIC FILE (F2)
  154. ;     FILE R/O    (T1)
  155. ;     SYSTEM FILE (T2) (if enabled)
  156. ;   THIS MEANS THAT A SYSTEM FILE OR PUBLIC FILE CANNOT BE ERASED ACCIDENTALY.
  157. ;
  158. ; - NEW FUNCTION GET TIME (200) IS IMPLEMENTED TO GET THE CORRECT DATE AND TIME.
  159. ;   ENTRY DE IS ADDRESS TO PUT TIME. THE DATE AND TIME RECORD HAS THE FOLLOWING
  160. ;   LAYOUT:
  161. ;    DATE:    DEFS    2    DATE = 1     (SU 01-JAN-1978)
  162. ;                DATE = 65535 (SU 05-JUN-2157)     
  163. ;    HOUR:    DEFS    1    HOUR IN BCD
  164. ;    MINUTE:    DEFS    1    MINUTE IN BCD
  165. ;    SECOND:    DEFS    1    SECOND IN BCD
  166. ;    FUNCTION WORKS ONLY IF CORRECT P2BIOS FUNCTION CALL IS INSTALLED.
  167. ;
  168. ; - NEW FUNCTION SET TIME (201) IS IMPLEMENTED TO SET THE CORRECT DATE AND TIME.
  169. ;   ENTRY DE IS ADDRESS NEW TIME. THE DATE AND TIME LAYOUT IS AS ABOVE.
  170. ;   FUNCTION WORKS ONLY IF CORRECT P2BIOS FUNCTION CALL IS INSTALLED.
  171. ;
  172. ;  * DISK SIZE CAN BE AS LARGE AS 65536*16K=1 048 576 K BYTE=1 G BYTE. 
  173. ;  * FILE SIZE CAN BE AS LARGE AS 32*64*16K=32 768K BYTE=32 M BYTE.  
  174. ;
  175. ;
  176. ; YOU CAN ENABLE/DISABLE THE FUNCTIONS MENTIONED ABOVE WITH THE FOLLOWING
  177. ; DATA AND ADDRESSES.
  178. ;
  179. ; - ENABLE PATH NAME BY PUTTING ADDRESS OF PATH IN P2DOS+11H. IF THIS VALUE IS
  180. ;   0000H NO PATH IS USED. THIS ADDRESS IS NORMALLY SET TO 0040H.
  181. ;
  182. ; - ENABLE P2DOS TIME AND DATE STAMP BY PUTTING THE CORRECT P2BIOS ADDRESS
  183. ;   AT P2DOS+13H. THIS ADDRESS IS NORMALY SET TO THE P2BIOS CONSOLE STATUS 
  184. ;   FUNCTION. 
  185. ;
  186. ; - YOU CAN ENABLE THE 256 CHARACTER DELAY FUNCTION BY SETTING BIT 0 OF
  187. ;   ADDRESS P2DOS+15H. THIS BIT IS NORMALLY SET TO 1.
  188. ;
  189. ; - YOU CAN ENABLE PUBLIC FILES BY SETTING BIT 1 OF ADDRESS P2DOS+15H.
  190. ;   THIS BIT IS NORMALLY SET TO 1.
  191. ;
  192. ; - YOU CAN ENABLE IGNORE R/O STATUS BY SETTING BIT 2 OF ADDRESS P2DOS+15H
  193. ;   THIS BIT IS NORMALLY SET TO 1.
  194. ;
  195. ; ENTRY ADDRESSES P2BIOS
  196. ;
  197. ; FUNC    NAME    INPUT PARAMETERS    RETURNED VALUES
  198. ;  0    BOOT    NONE            NONE
  199. ;  1    WBOOT    NONE            NONE
  200. ;  2    CONST    NONE            A=0FFH IF READY
  201. ;                     A=000H IF NOT READY
  202. ;  3    CONIN    NONE            A=CONSOLE CHARACTER
  203. ;  4    CONOUT    C=CONSOLE CHARACTER    NONE
  204. ;  5    LIST    C=LIST CHARACTER    NONE
  205. ;  6    PUNCH    C=PUNCH CHARACTER    NONE
  206. ;  7    READER    NONE            A=READER CHARACTER
  207. ;  8    HOME    NONE            NONE
  208. ;  9    SELDSK    C=DRIVE NUMBER (0..15)    HL=DISK PARAMETER HEADER ADDRESS
  209. ;        E=INIT SELECT FLAG    HL=0000H IF INVALID DRIVE
  210. ; 10    SETTRK    BC=TRACK NUMBER        NONE
  211. ; 11    SETSEC    BC=SECTOR NUMBER    NONE
  212. ; 12    SETDMA    BC=DMA ADDRESS        NONE
  213. ; 13    READ    NONE            A=00H IF NO ERROR
  214. ;                    A=01H IF ERROR
  215. ; 14    WRITE    C=0 WRITE DATA        A=00H IF NO ERROR
  216. ;        C=1 WRITE DIRECTORY    A=01H IF ERROR
  217. ;        C=2 WRITE NEW DATA
  218. ; 15    LISTST    NONE            A=000H IF READY
  219. ;                    A=0FFH IF NOT READY
  220. ; 16    SECTRN    BC=LOGICAL SECTOR    HL=PHYSICAL SECTOR NUMBER
  221. ;            NUMBER
  222. ;        DE=TRANSLATION TABLE
  223. ;            ADDRESS
  224. ; XX    TIME    C=000H GET TIME        HL=POINTER TO TIME TABLE
  225. ;        C=0FFH UPDATE CLOCK        HL+0:DATE LSB SINCE 1,1,1978
  226. ;        HL=POINTER TO TIME        HL+1:DATE MSB
  227. ;            TABLE            HL+2:HOURS  (BCD)
  228. ;                        HL+3:MINUTES (BCD)
  229. ;                        HL+4:SECONDS (BCD)
  230. ;
  231. ; XX    SETDSK    NONE            NONE
  232. ;
  233. ;
  234. ;
  235. RAMLOW    EQU    00000H            ; START ADDRESS MEMORY
  236. DOSSTRT    EQU    0C000H            ; Place your BDOS start address here
  237. P2BIOS    EQU    DOSSTRT+0E00H
  238. ;
  239. ;
  240. ;
  241. BOOT    EQU    P2BIOS+00000H        ; P2 SYSTEM COLD BOOT
  242. WBOOT    EQU    P2BIOS+00003H        ; P2 SYSTEM WARM BOOT
  243. CONST    EQU    P2BIOS+00006H        ; P2 SYSTEM CONSOLE STATUS
  244. CONIN    EQU    P2BIOS+00009H        ; P2 SYSTEM CONSOLE INPUT
  245. CONOUT    EQU    P2BIOS+0000CH        ; P2 SYSTEM CONSOLE OUTPUT
  246. LIST    EQU    P2BIOS+0000FH        ; P2 SYSTEM LIST OUTPUT
  247. PUNCH    EQU    P2BIOS+00012H        ; P2 SYSTEM PUNCH OUTPUT
  248. READER    EQU    P2BIOS+00015H        ; P2 SYSTEM READER INPUT
  249. HOME    EQU    P2BIOS+00018H        ; P2 SYSTEM HOME DISK
  250. SELDSK    EQU    P2BIOS+0001BH        ; P2 SYSTEM SELECT DISK
  251. SETTRK    EQU    P2BIOS+0001EH        ; P2 SYSTEM SELECT TRACK
  252. SETSEC    EQU    P2BIOS+00021H        ; P2 SYSTEM SELECT SECTOR
  253. SETDMA    EQU    P2BIOS+00024H        ; P2 SYSTEM SET DMA ADDRESS
  254. READ    EQU    P2BIOS+00027H        ; P2 SYSTEM READ 128 BYTES
  255. WRITE    EQU    P2BIOS+0002AH        ; P2 SYSTEM WRITE 128 BYTES
  256. LISTST    EQU    P2BIOS+0002DH        ; P2 SYSTEM LIST STATUS
  257. SECTRN    EQU    P2BIOS+00030H        ; P2 SYSTEM SECTOR TRANSLATION
  258. TIME    EQU    P2BIOS+00033H        ; P2 SYSTEM GET/SET TIME
  259. SETDSK    EQU    P2BIOS+00036H        ; P2 SYSTEM DISK CHANGE SENSE
  260. ;
  261. ;
  262. ; INTERNAL DEFINITIONS
  263. ;
  264. CONTC    EQU    003H            ; KEY TO GENERATE WARM BOOT
  265. CONTE    EQU    005H            ; BREAK LINE
  266. CONTH    EQU    008H            ; BACKSPACE
  267. TAB    EQU    009H            ; TAB
  268. LF    EQU    00AH            ; LINE FEED
  269. CR    EQU    00DH            ; CARRIAGE RETURN
  270. CONTP    EQU    010H            ; SET/RESET PRINT FLAG
  271. CONTQ    EQU    011H            ; restart console output
  272. CONTR    EQU    012H            ; REPEAT LINE
  273. CONTS    EQU    013H            ; STOP CONSOLE OUTPUT
  274. CONTU    EQU    015H            ; DELETE LINE
  275. CONTX    EQU    018H            ; DELETE LINE (BACKSPACES)
  276. DRVSEP    EQU    03AH            ; DRIVE SEPERATOR (:)
  277. RUBOUT    EQU    07FH            ; DELETE LAST CHAR
  278. IGNORE    EQU    CONTX            ; Ignore R/O status character
  279. ;
  280. MAXCMD    EQU    40            ; NUMBER OF VALID P2DOS COMMANDS
  281. ;
  282. ;=============================
  283. ;P2DOS Customization
  284. ;
  285. ;(Formerly a.k.a. SUPRBDOS)
  286. ;
  287. ;See INSTALL.DOC for more information on installation.
  288. ;
  289. FALSE    EQU    0 
  290. TRUE    EQU    0FFH
  291. ;
  292. ;
  293. ;Assembly Conditionals:
  294. ;
  295. DOTIME    EQU    TRUE            ; True if time stamp is supported 
  296. ;
  297. ;
  298. ;Some systems, like the Kaypro 4, only recognize changes between single 
  299. ;and double sided disks when the system is warm booted; bdos function 13 
  300. ;(reset disk) will not work.  By adding a "hook" to the bios of these 
  301. ;machines and setting RESDSK to TRUE, bdos functions 13 and 37 will 
  302. ;allowchanges between single and double sided disks.  Very handy for disk
  303. ;housekeeping utilities such as NSWP, NULU, and cataloging programs.  
  304. ;  
  305. ;The "hook" is added as follows: Obtain the source to your computer's BIOS.  
  306. ;Examine the code for WARM BOOT.  Somewhere, there should be a call to 
  307. ;a routine which initializes the disk system after a warm boot, or which 
  308. ;detects changes between single and double sided disks.  Call this routine
  309. ;DISKINT for purposes of discussion.  Modify your bios's cold boot routine to
  310. ;initialize 3 bytes at address SETDSK as "JP DISKINT".  The location of SETDSK
  311. ;is arbitrary, it may be in your bios, or in a reserved spot in CP/M's page 0.
  312. ;It is assumed here that "JP DISKINT" is in the BIOS jump table one beyond
  313. ;the jump to the time routine.
  314. ;
  315. RESDSK    EQU    FALSE            ; Set to true only if your drives
  316.                     ; can have more than one disk format.
  317.                     ; Set to false if, for example,
  318.                     ; drive A only supports single
  319.                     ; density disks and drive B only
  320.                     ; supports double density two-sided
  321.                      ; disks. IF YOU CAN'T MIX FORMATS
  322.                     ; ON THE SAME DRIVE OR YOUR BIOS
  323.                     ; ALWAYS KNOWS WHAT THE PROPER
  324.                     ; FORMAT IS, YOU DON'T NEED A 
  325.                     ; DISKINT ROUTINE!!!!
  326. ;
  327. PATHON    EQU    FALSE            ; True to enable BDOS search.
  328.                     ; If PATHON is set, then some code
  329.                     ; must be inserted either here or in
  330.                     ; the BIOS to initialize the path
  331.                     ; at RAMLOW+040H
  332. ;
  333. SYSRO    EQU    TRUE            ; True for system files read only.
  334.                     ; Since P2DOS allows the run-time
  335.                     ; cancel of read-only status, this
  336.                     ; is a good saftey precaution to
  337.                     ; prevent accedential erasure.
  338. ;
  339. XONOFF    EQU    TRUE            ; True for "true" xon/xoff
  340.                     ; When set, only ^S stops console
  341.                     ; output and only ^Q restarts output.
  342. ;
  343. NOXOFF    EQU    FALSE            ; True disables ^S as a restart char
  344.                     ; When set, the first ^S stops
  345.                     ; console output, but subsequent
  346.                     ; ^S's will not restart output.
  347.                     ; XONOFF takes presedent if both
  348.                     ; are true.
  349. ;
  350. DEFFLG    EQU    0FFH            ; Default value for flag byte.
  351.                     ; set bit means:
  352.                     ;  bit 0=public file enable
  353.                     ;  bit 1=delay 256 char active
  354.                     ;  bit 2=allow r/o ignore
  355. ;
  356. SERNO1    EQU    000H            ; enter your serial number here
  357. SERNO2    EQU    000H
  358. SERNO3    EQU    000H
  359. SERNO4    EQU    000H
  360. SERNO5    EQU    000H
  361. SERNO6    EQU    000H
  362. ;
  363. ;
  364.     .Z80
  365.     ASEG
  366.     ORG    0100H            ; L80 loads the code at 100H but,
  367.     .PHASE    DOSSTRT            ; M80 compiles the code for exectuion
  368.                     ; at DOSSTRT
  369.     $INCLUDE P2DOS1.MAC
  370.     $INCLUDE P2DOS2.MAC
  371. ;
  372. DOSSTOP    EQU    $
  373. ;
  374.     IF    ((DOSSTOP-DOSSTRT) GT 3584)
  375.     *Bdos too large!!*
  376.     ENDIF
  377. ;
  378.     END
  379.  
  380.