home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / utils / dskutl / bback622.lbr / ARCH.AQM / ARCH.AZÍ
Text File  |  1986-04-27  |  6KB  |  136 lines

  1. ;;01-20-85
  2. ;
  3. ;                             ARCH.AZM (ARCH.PAT)
  4. ;Eric Gans
  5. ;French Dep't UCLA
  6. ;Los Angeles CA 90024
  7. ;
  8. ;    This program was written for the Kaypro-10 CP/M v. 2.2F.  
  9. ;All addresses should be checked before using on another system.
  10. ;
  11. ;       Patching BDOS is a fairly drastic action.  I think it's worth it
  12. ;because of the extreme usefulness of the "archive" principle.  Whether you
  13. ;do word-processing or programming, spreadsheets, etc., you are bound to
  14. ;collect large numbers of similarly typed files, and it is all too easy
  15. ;to forget to back them up if you have to remember which ones you have
  16. ;written to since last time and then (at the very least) tag each file
  17. ;separately for backup.  It's also very useful to have the date entered
  18. ;automatically at the beginning of the file.  I autoload CAL.COM so that
  19. ;it's sure to contain the current date for use in BBACK.
  20. ;
  21. ;    1. This patch assumes that you have a free area of 48 bytes in 
  22. ;high memory where you can remove the BDOS stack.  If not, you won't be
  23. ;able to use it.
  24. ;
  25. ;    2. The principle of the patch is very simple; to zero the "archive"
  26. ;bit when the file directory information is written back to the disk.  This
  27. ;allows BBACK (or a similar program) to selctively back up only files that
  28. ;have changed since last backup. (See BBACK.DOC for details.)  What compli-
  29. ;cates matters is that separate patches are necessary for sequential and
  30. ;random file writes; this patch was arrived at only after much experimen-
  31. ;tation (and disassembly of the BIOS).
  32. ;
  33. ;    3. This file was written for the Z80MR assembler; it can easily be
  34. ;modified for any z80 assembler like M80, ZASM etc., or you can enter the
  35. ;code directly with DDT, SID etc. 
  36. ;
  37. ;                           INSTRUCTIONS
  38. ;
  39. ;     1. Check patch area; should be all 0's.  This is the BDOS stack
  40. ;area, so the stack will have to be moved elsewhere.
  41. ;
  42. ; **************************************************************************** 
  43. ; * KAYPRO-10 NOTE: The K-10 makes it easy by having over a kilobyte of un-  *
  44. ; * used memory above the BIOS, which ends (in my version) at 0f0d2h.        *
  45. ; **************************************************************************** 
  46. ;
  47. ;    2. Assemble the patch. 
  48. ;
  49. ;    3. Load PUTSYS, SYSGEN or whatever file contains an image of the
  50. ;BDOS to be written to the system tracks of your (hard or floppy) disk under
  51. ;DDT, SID etc.  (It doesn't have to be a z80 debugger since its only 
  52. ;function is to read in a HEX file.)
  53. ;
  54. ;    4. Read in ARCH.HEX (the DDT command is: iarch.hex <CR> r <CR>)
  55. ;
  56. ;    5. After checking the patch area, exit the debugger and SAVE the
  57. ;memory image (don't forget to calculate the appropriate number of pages).
  58. ;Use a new name for the SAVEd file so you don't lose your original in case
  59. ;something goes wrong.
  60. ;
  61. ;    6. Run the patched PUTSYS/SYSGEN program and reset the computer.
  62. ;
  63. ;    7. Test the patch by running BBACK on a file then writing to it,
  64. ;etc. (The NSWP or DA utilities will show if the archive bit is set.)
  65. ;Try using various application programs to see if the archive bit is reset
  66. ;when the file is written to. (LU should only reset this bit for a library
  67. ;that has been modified, not just read from; Wordstar will reset it whenever
  68. ;the file is saved; MBasic resets it even without the patch since the "save"
  69. ;command creates a new file...)
  70. ;
  71. ;
  72. ;    If you don't have a z80 assembler, the only instruction that will
  73. ;give you trouble is the RES 7,(HL); you'll have to do this with: mov a,m|
  74. ;and 7fh|mov m,a .  The JR instruction will also lose you a byte; but with
  75. ;the stack out of the way you have plenty of room.
  76. ;
  77. ;    Make sure to check all addresses before assembly: remember,
  78. ;the size of your CP/M system is not necessarily the size of your RAM.
  79. ;
  80.  
  81. size    equ    60
  82. bdosp    equ    3c00h+(size-20)*1024    ;=0dc00h on the K-10
  83. ibdosp    equ    1180h    ;SYSGEN-type programs put the BDOS image here
  84. inewst    equ    ibdosp+25h    ;=11a5h Image of addr of BDOS stack
  85. patch1    equ    bdosp+311h    ;=0df11h Area freed by removal of stack
  86. ipatch    equ    ibdosp+311h    ;=1491h  Image of patch area
  87. dirch    equ    bdosp+810h    ;=0e410h Start of directory write rtn
  88. clcont    equ    bdosp+8a2h    ;=0e4a2h Cont. of close rtine
  89. icload    equ    ibdosp+91dh    ;=1a9dh Image of jump addr in close rtn (2)
  90. iclrtn    equ    ibdosp+0ca9h    ;=1e29h Image of jump addr in close rtn    (1)
  91. dirbf    equ    bdosp+0db9h    ;=0e9b9h Addr of CP/M directory buffer
  92. ofstad    equ    bdosp+0de9h    ;=0e9e9h Addr of offset to fcb in buffer
  93. endbios    equ    0f0d2h        ;*** MUST BE CHECKED FOR YOUR SYSTEM ***
  94.  
  95.     org inewst
  96.  
  97.     dw    endbios+30h        ;BDOS stack has 48 bytes
  98.  
  99.     org ipatch
  100.  
  101. ;the first patch takes care of random writes (LU for example)
  102.  
  103.     ld hl,(dirbf)            ;addr of directory buffer
  104.     ld a,(ofstad)            ;offset of file in buffer
  105.     add a,l
  106.     ld l,a
  107.     jr nc,nocar
  108.     inc h
  109. nocar:    ld de,11            ;get to last letter of filetype
  110.     add hl,de
  111.     res 7,(hl)            ;set 't3 bit to 0 
  112.     jp dirch            ;jump to directory write rtn
  113.     
  114. ;the second patch is for sequential writes where the file must be closed
  115. ;via BDOS function 16 (e.g., WordStar, other word-proc. programs)
  116.  
  117.     ;at the beginning of the close routine, hl holds the fcb address
  118.     ;for the file 
  119.  
  120. patch2    equ $+bdosp-1180h        ;addr for second patch
  121.  
  122.     ld de,11
  123.     add hl,de            ;hl points to last char in fltype
  124.     res 7,(hl)            ;reset 't3...
  125.     jp clcont            ;continuation of close routine
  126.  
  127.     org icload            
  128.  
  129.     dw    patch1
  130.  
  131.     org iclrtn
  132.  
  133.     dw    patch2            ;replace jump to clcont with
  134.                     ;jump to patch
  135.  
  136.     end