home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / jsage / znode3 / uploads / xbnote.lbr / NZPAT.ZZ0 / NZPAT.Z80
Encoding:
Text File  |  1990-12-07  |  4.3 KB  |  162 lines

  1. ;
  2. ; Patch Overlay for NZCOM.COM            AWH
  3. ;
  4. ;    1) Patch location 280H to connect the XBIOS BSX jumps
  5. ;       to the DOS installed ( ZSDOS )
  6. ;    2) Patch path to B0: $$ B0:, as system boots with RAM disk A:
  7. ;    3) Patch command line to B0:STARTZCM
  8. ;
  9. ;    Revision 1.0        5  Dec 90    Release
  10. ;
  11. ; Patch origins:
  12. patch1     equ    0280H        ; user patch area
  13. patch2     equ    0680H        ; path
  14. patch3     equ    0690H        ; command line
  15. ;
  16. ; the ususal:
  17. ;
  18. cr    equ    0dH        
  19. lf    equ    0aH
  20. ;
  21. ; cp/m locations:
  22. ;
  23. os$base    equ    0        ; memory base
  24. biospg    equ    os$base+2    ; warmboot target hi-order byte
  25. bdos    equ    os$base+5    ; bdos entry
  26. ;
  27. prbuff    equ    9        ; bdos print string 
  28. ;
  29. ; nzcom environment location & offsets
  30. ;
  31. nzenv    equ    0100H        ; NZCOM.COM target system environment
  32. nzbiopg equ    nzenv+2        ; Hi byte of const jump in XBIOS
  33. nzdos    equ    nzenv+042H    ; pointer to DOS addr
  34. ;
  35. ; pointers to patch locations
  36. ;
  37. dosoff    equ    0007h        ; DOS patch at DOS+dosoff
  38. xbent    equ    004eh        ; XBIOS entry for BSX string
  39. xbtag    equ    00dch        ; location of 'XBIOS' string in XBIOS 
  40. xbret    equ    02a8h        ; XBIOS BSX return addr stored here
  41. ;
  42. ;---------------------------------------------------------------------
  43. ;
  44. ; Patch BSX jump into new DOS, and DOS return into XBIOS
  45. ;
  46. ;---------------------------------------------------------------------    
  47. ;  
  48.     org    patch1
  49. ;
  50. pat1:    cp    0        ; non nzcom system running?
  51.     jr    z,a0        ; yes, find XBIOS location
  52.     cp    1        ; nzcom running?
  53.     jr    z,a1        ; get XBIOS location
  54.     cp    3        ; new system loaded?
  55.     jr    z,a3        ; install patches
  56.     ret            ; none of the above, pass 
  57. ;
  58. ; NZCOM not loaded, get XBIOS page from page 0 warm boot vector
  59. ;
  60. a0:    ld    hl,biospg    ; point to hi byte
  61.     jr    a01com        ; join common code
  62. ;
  63. ; NZCOM loaded, find XBIOS page from ENV pointer to const routine
  64. ;
  65. a1:    ld    hl,nzbiopg    ; point to hi byte
  66. a01com:    ld    de,xbbase+1    ; point to buffer
  67.     ld    a,(hl)        ; save byte
  68.     ld    (de),a
  69.     ld    c,prbuff    ; use bdos to print banner
  70.     ld    de,signon    
  71.     jp    bdos        ; remember, call pending
  72. ;
  73. ; New system in place, patch return in XBIOS and jump in DOS
  74. ; First, test for XBIOS & ZSDOS
  75. ;
  76. a3:    ld    hl,(xbbase)    ; get XBIOS base addr
  77.     ld    de,xbtag    ; offset to XBIOS string
  78.     add    hl,de        ; form address
  79.     ld     de,xbstr    ; point to baseline string
  80.     ld    a,(xbct)    ; byte counter
  81.     ld    b,a        ; where we need it 
  82. ckxb:    ld    a,(de)        ; get good character
  83.     cp    a,(hl)        ; compare to BIOS character
  84.     ret    nz             ; not a match, gong this routine
  85.     inc    de        ; point to next character
  86.     inc    hl
  87.     djnz    ckxb        ; check them all
  88. ;
  89.     ld    hl,(nzdos)    ; get DOS base addr
  90.     ld    de,dosstr    ; point to baseline string
  91.     ld    a,(dosct)    ; character count
  92.     ld    b,a        ; where we need it
  93. ckdos:    ld    a,(de)        ; get good character
  94.     cp    a,(hl)        ; compare to DOS character
  95.     ret      nz             ; not a match, gong this routine
  96.     inc    de        ; point to next character
  97.     inc    hl
  98.     djnz    ckdos        ; check them all
  99. ;
  100. ; Everything looks ok, patch jump target at DOS+7 into XBIOS return,
  101. ; and XBIOS BSX entry into DOS+7
  102. ;
  103.     ld    hl,(xbbase)    ; get XBIOS base addr
  104.     ld    de,xbret    ; offset to XBIOS return
  105.     add    hl,de        ; form complete addr
  106.     push    hl        ; save on stack
  107.     ld    hl,(nzdos)    ; get DOS base addr
  108.     ld    de,dosoff    ; offset to jump loc
  109.     add    hl,de        ; complete addr
  110.     pop    de        ; XBIOS addr now in de
  111.     push    hl        ; save DOS addr
  112.     ldi            ; move 1 byte twice
  113.     ldi            ; from DOS to XBIOS
  114. ;
  115.     ld    hl,(xbbase)    ; get XBIOS base addr
  116.     ld    de,xbent    ; offset to entry
  117.     add    hl,de        ; form complete addr
  118.     ld    (xbbsx),hl    ; and save
  119.     ld    hl,xbbsx    ; point to entry
  120.     pop    de        ; get DOS jump addr
  121.     ldi            ; move bytes
  122.     ldi
  123. ;
  124.     ret            ; fini
  125. ;
  126. ; data storage
  127. ;
  128. xbbase:    dw    0f200H        ; True location of bios
  129. xbbsx:    dw    0f24eH        ; xbios entry for BSX
  130. ;
  131. signon:    db    cr,lf,'Patching BSX entry and return',cr,lf,'$'
  132. xbstr:    db     'XBIOS'
  133. xbct:    db    $-xbstr        ; char count
  134. dosstr:    db    'ZSDOS'    
  135. dosct:    db    $-dosstr
  136. ;
  137. ;---------------------------------------------------------------------
  138. ;
  139. ; Patch path to be B0: $$ b0:
  140. ;
  141. ;---------------------------------------------------------------------    
  142. ;  
  143.     org    patch2
  144. ;
  145. pat2:    db    02,00        ; B0:
  146.     db    '$$'        ; curently logged drive
  147.     db    02,00
  148.     db    0,-1        ; terminator
  149. ;
  150. ;---------------------------------------------------------------------
  151. ;
  152. ; Patch command line
  153. ;
  154. ;---------------------------------------------------------------------    
  155. ;  
  156.     org    patch3
  157. ;
  158. pat3    db    'B0:STARTZCM'
  159.     db    0,-1        ; terminator
  160. ;
  161.     end