home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / jsage / znode3 / uploads / xbnote.lbr / XBNOTE.TZT / XBNOTE.TXT
Encoding:
Text File  |  1990-12-07  |  6.4 KB  |  132 lines

  1. Hi. As promised, here are some notes on integrating XBIOS, the 
  2. DateStamper BSX and NZCOM. This is still very much a work in progress, 
  3. and I am intrested in hearing your comments and experiences.
  4.  
  5. My system is a 6mhz SB180, with 2 to 4 48tpi floppy disk drives. It has 
  6. a Dallas Semiconductor Smartwatch installed in the ROM socket. It is 
  7. built into a Heath H19 terminal.
  8.  
  9. My original XBIOS/NZCOM system was constucted several years ago. I made 
  10. a minimum size XBIOS system by removing the XBIOS buffers for the IOP, 
  11. RCP and FCP segments. I used the ZCPR30 command processor and ZRDOS17 
  12. dos segment. This system immediately booted NZCOM, which was configured 
  13. as a full featured system, with a 12 record IOP, 18 record FCP, and 5 
  14. record FCP. Later I added ZDDOS, with an additional 3 record clock 
  15. driver. The CCP in this system located at C300, giving me a 48.75K tpa.
  16. This was adequate for virtually all my needs, so I very seldom changed 
  17. to other configurations.
  18.  
  19. As you know, the Z-System is in constant change. About once a year it 
  20. has been my custom to completely update my system, with current releases 
  21. and replacement programs. During this years purge, I also took a good 
  22. look at the underlying system, and made some useful changes.
  23.  
  24. I had four rough ideas for improving the system. I wanted to boot up 
  25. XBIOS with ZCPR34 and ZSDOS, make the DateStamper BSX work with NZCOM, 
  26. allow the system to boot up with the RAM disk configured as A:, and 
  27. reduce the memory required for the system.
  28.  
  29. The latest version of the XBIOS SYSBLD utility can load .ZRL format 
  30. segments. This did not appear to be true, but I finally realized that 
  31. ZCPR34 needed an extended environment, and SYSBLD was not supplying one.
  32. I used the new program ENVSRC to create a assembler source file of a 
  33. running NZCOM system, and then manually edited it to match the memory 
  34. map I desired. The IOP, FCP, and RCP sizes and locations were made 0, 
  35. and the other buffers were put in the locations defined by SYSBLD. You 
  36. must pick a byte to locate the wheel byte, as this does not appear in 
  37. the SYSBLD memory map display. I then assembled it to a .COM file. At 
  38. the SYSBLD menu page Z-System Parameter Menu I input this prepared 
  39. environment. I now had a functional system, with ZCPR34 and ZSDOS 
  40. running. A full range of ZCPR features are included: 4 element shell 
  41. stack, 14 entry named directory buffer, message buffers, command line, 
  42. and external path, FCB, and stack. ZDDOS starts at E400, so a 57K tpa is 
  43. possible. 
  44.  
  45. I then loaded the DateStamper BSX, and found that the datestamping 
  46. features worked. Also, most of my system time aware programs, like 
  47. ZFILER, ARUNZ, and ZXD read the clock fine. One program did not; ZCAL, 
  48. the ZSDOS calender display utility, reported that no clock was installed. 
  49. I also verified that DateStamping ceased to function if I loaded an 
  50. NZCOM system, or if I even reloaded ZSDOS with JetLDR.
  51.  
  52. I presumed that the BSX mechanism worked like the RSX mechanism, which 
  53. redirects the jump vector to DOS at location 0005. The Purpose of a BSX 
  54. is to alter standard DOS funtions or create new ones. Using the memory 
  55. display function of SHOW, this is what I found. On my system, ZSDOS 
  56. begins at E400, and XBIOS begins at F200. 
  57.  
  58.     0000    C3 06 E4    jp DOS+6    ; jump to DOS
  59.  
  60.     E406    C3 4E F2    jp XBIOS+4E    ; fascinating, Jim. I 
  61.                           wonder how it comes 
  62.                           back?
  63.  
  64. At this point I looked at the file XSYS.LIB, which lists XBIOS system 
  65. equates. XBIOS+4E is defined in the BIOS jump table as "Banked system 
  66. extension loader interface". I then used JetLDR to load in a virgin 
  67. ZSDOS, to see where it would normally jump to. 
  68.  
  69.     E406    C3 9B E4    jp DOS+9B    ; Somewhere there is a 
  70.                           return to this 
  71.                           location
  72.  
  73. I then tracked thru XBIOS.
  74.  
  75.     F2E4       C3 22 F4    jp XBIOS+222 
  76.  
  77.     F422    32 AA F4    ld (F4AA),a    ; save accumulator
  78.         3E 00        ld a,0        ; set a to 0
  79.             32 05 F3    ld (F305),a    ; store 0 at F305 
  80.         3A AF AF    ld a,(F4AF)       ; get a flag
  81.         B7        or a        ; set flags based on 
  82.                           flag
  83.         3A AA F4    ld a,(F4AA)    ; restore a to entry
  84.     F431    20 06        jr nz,J1    ; jump based on flag
  85.         E5        push hl        ; add an entry to stack
  86.         2A A8 F4    ld hl,(F4A8)    ; get word at F4A8
  87.         E3        ex (sp),hl    ; put that word on 
  88.                           stack, get hl back
  89.         C9        ret        ; jump to (F4A8)
  90.     J1    CD 6F F5    call F56F    ; remap memory?
  91.         CD 00 4E    call 4E00      ; Banked memory?
  92.  
  93. Checking the contents of F4A8 revealed 9B E4, the return location to DOS 
  94. that I was expecting. Apparently SYSBLD patches the jump to XBIOS in the 
  95. DOS segment, and the return to DOS in the XBIOS segment when it creates 
  96. the XSYSTEM.MDL system file.
  97.  
  98. I checked this by reloading ZSDOS with JetLDR, and then poking in the 
  99. patches. Always poke the return into XBIOS first! Patching the jumps   
  100. in the wrong order invokes a cosmic force that moves your index finger 
  101. to the reset button! I then loaded a NZCOM system, manually located the 
  102. jump targets and patched them. The DateStamper was now working under 
  103. NZCOM.
  104.  
  105. The strategy  required is this: Read the word at DOS+7, and patch it 
  106. into XBIOS+2A8, and then patch XBIOS+4E into DOS+7. I suspect the 
  107. offsets into XBIOS are constant for different configurations of XBIOS, 
  108. as all the XBIOS variations are derived from the same distribution .REL 
  109. file, but this needs to confirmed.
  110.  
  111. Next I wrote the following ARUNZ script to automate this process. Note 2 
  112. points: The script requires that the XBIOS location be known explicitly, 
  113. as ARUNZ cannot find offsets into the "real" bios, and you cannot apply 
  114. this alias twice. ( You can, but the aforementioned cosmic force 
  115. awaits).
  116.  
  117. ;
  118. ; BSXON patches the BSX entry into DOS and the DOS return into XBIOS
  119. ; This script requires that the base of XBIOS be at F200h, and it must 
  120. ; only be invoked on an unpatched system!
  121. ;
  122. BSXON        poke f4a8 $@h+d0007 $@h+d0008;poke $+d0007 4e f2 
  123. ;
  124.  
  125. I then set about to write an overlay for NZCOM.COM to apply this patch that 
  126. would be transparent and generalized. The overlay finds XBIOS directly, 
  127. and also checks that XBIOS and ZSDOS are both present before making the 
  128. patch. ( It has since occurred to me that I should check that the DOS 
  129. segment is being changed before applying the patch, and not apply it to 
  130. an unchanged segment. Next version. ) If you use another DOS variant, 
  131. change the test string, or disable the test. Also, verify the offset to 
  132. the XBIOS string in your configuration.