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 / 6502 / 6502SIM.LBR / ZXHINTS.DQC / ZXHINTS.DOC
Text File  |  2000-06-30  |  9KB  |  161 lines

  1.  
  2.  
  3. Hints & kinks for operation of ZX65: SIMULATING A MICRO
  4.  
  5. Written 7/80         R. M. Kruse
  6.  
  7.  
  8.     There are a few things about ZX65 which are either not immedia-
  9. tly evident in the original Dobb's article or which I have run across
  10. since the article was submitted. These I will share with you in the hope
  11. that they make your use of the package easier.
  12.  
  13.     MODIFICATIONS: If you compare the first few lines of both ZXLD
  14. and ZX65 source code on this disk with the listings in Dobb's, you will
  15. notice some differences. The reasons for these changes are twofold: 1)
  16. since submission of the article, I have obtained a much better assembler
  17. (namely the SD Systems Version 3.3). Use of this assembler required the
  18. addition of the 'PSECT ABS' pseudo-op found in the new listing. Although
  19. this assembler does not require the LABEL-$ convention in relative jump
  20. instructions (as did V. 1.0) it tolerates them so they are still there.
  21. 2) I have cleaned up the mechanism for reassembling for different system
  22. memory sizes through the use of the 'INCLUDE FILE' mechanism found in
  23. both ZX65 and ZXLD. In case you're wondering, all instructions still
  24. occupy the same absolute locations as in the Dobb's listing, with an
  25. offset if your system is not 32K.
  26.  
  27.     RELOCATING THE SYSTEM: If for any reason you need to modify the
  28. system to operate in a different memory configuration, follow these
  29. steps:
  30.  
  31.     1. Using your editor, put a new value in the 'SIZE EQU XX'
  32.        statement in the 'SIZE.ZX' file. This is normally the size
  33.        (in decimal) of your CP/M system (i.e. 16K, 24K, 48K, etc)
  34.        and upon assembly this puts the package from MEMTOP-1100H
  35.        to MEMTOP-200H. You could, of course, locate the package
  36.        just about anywhere by using oddball values in 'SIZE EQU
  37.        XX' statement, but don't try this unless you know how to
  38.        relocate your CBIOS. ZX65 expects CBIOS to be in the 512
  39.        bytes of memory immediately following it.
  40.  
  41.     2. Assemble (and link, if necessary) both ZX65.ZSM and ZXLD
  42.        .ZSM in order to create a .HEX file for each. (Note: if
  43.        your assembler doesn't support the 'INCLUDE' mechanism,
  44.        you will have to place the 'SIZE EQU XX' statement into
  45.        both files manually using your editor. Also, you may have
  46.        to do some minor syntax modifications to suit your ass-
  47.        embler.)  
  48.  
  49.     3. Don't try to use CP/M's LOAD utility. It can't handle the
  50.        'load and boot' method used by ZX65. Instead, use DDT:
  51.  
  52.         a. First, load ZXLD by typing 'DDT ZXLD.HEX'. DDT
  53.            will respond with 'PC 100  NEXT 10E' and a 
  54.            prompt.
  55.  
  56.         b. Next, load ZX65 by typing 'IZX65.HEX' <CR> and
  57.            'Rdisp' <CR>. The hex value 'disp' is the offset
  58.            necessary to fool DDT into loading a hex file
  59.            at the 'wrong' address. If you have printed out
  60.            the .PRN file for ZXLD, this value should be cal-
  61.            culated for you at the 'OFFS EQU XXXX' statement
  62.            (it should be a four-digit hex number ending in
  63.            '10' such as 9210 for a 32K system.) You may
  64.            also have DDT calculate it for you by typing
  65.            'H110,ssss' where 'ssss' is MEMTOP-1100H for your
  66.            system.
  67.  
  68.         c. You now have a memory image of ZX65 with a booter
  69.            in the TPA. Exit DDT with a ^C (warm start) and
  70.            type 'SAVE 15 ZX65.COM' to store it on disk as
  71.            an executable command file.
  72.  
  73.         d. Invoke the package by typing 'ZX65'. Drive B
  74.            should immediately operate briefly and a '>'
  75.            prompt should appear on the screen. If not, go
  76.            through the procedure again, and be sure that
  77.            CBIOS is in its usual place.
  78.  
  79.     CP/M COMPATABILITY: As of this writing, I have not yet succum-
  80. bed to Digital Research's efforts to get me to buy the new CP/M 2. From
  81. what I have been able to figure out, it offers very little to me in the
  82. way of advantages. Suffice it to say that ZX65 was written and debugged
  83. using V 1.4, and I cannot say whether or not it will run under any other
  84. version. (My guess is that it will work with V 1.3, but not v 2.X.) The
  85. main reason for any incompatibility will probably have to do with the
  86. fact that my self-contained mini DOS operates the disks and console dir-
  87. ectly through CBIOS rather than by using calls to BDOS which is the more
  88. conventional method. (There is a good reason for this madness which I
  89. will explain shortly.) In any event, since you have spent your hard-
  90. earned nickels for this copy, I suspect that you are resourceful enough
  91. to overcome such problems and implement any necessary patches. If you
  92. do come up with a running version patched for CP/M 2 or for some other
  93. disk format (i.e. North Star etc.), how about submitting it for possible
  94. publication in Dobb's? (No, I'm not on their payroll, but they are re-
  95. ceptive to this type of material and lots of 'hard core' dedicated
  96. computerists read their mag.)
  97.  
  98.     SOME NITTY-GRITTY: As promised, here is the explanation of why
  99. I have interfaced through CBIOS rather than using BDOS: If you have
  100. done any work at all with the 6502 processor, you will recall that page
  101. zero of memory (0000H to 00FFH) is sacred to it. There are short forms
  102. of many instructions for use on page zero, and the very powerful indirect
  103. indexing modes always use page zero. Now ZX65 by design uses no memory
  104. mapping at all...that is, if your 6502 program is ORG'd at 2000H, that
  105. is exactly where you will load it. (This is in contrast to at least one
  106. TRS80-based simulator that I know of.) Having gone this far, it is only
  107. reasonable to expect that page zero will be totally available to the
  108. 6502 program. As you have probably realized by now, the catch here is
  109. that BDOS also likes page zero, and uses large chunks of it during disk
  110. accesses. With one possible limitation (which I will discuss in a bit)
  111. ZX65 totally removes the host system from page zero...even the vectors
  112. at the bottom of memory need not be saved.  ZX65 is, in fact, confined
  113. to the top 1100H bytes of user memory, and ALL space below that is av-
  114. ailable for 6502 programs and data. The one possible conflict that I
  115. mentioned is system-dependent, and may or may not apply in your case.
  116. CP/M V 1.4 has a reserved 'scratch' area of 16 bytes located from 0040H
  117. to 004FH. Some disk controllers use this area for temporary data stor-
  118. age during all disk transfers, whether initiated by CP/M or not. If this
  119. is true of your controller, then you have very little choice but to ac-
  120. cept the fact that this portion of page zero will be messed up whenever
  121. you do a disk access from ZX65. There is still one alternative (I know
  122. because I did it!): you may be able to move this scratch area out of
  123. page zero into high memory. Even if you have this conflict, 6502 pro-
  124. grams that use page zero only for temporary data storage will probably
  125. run normally unless the 6502 program itself accesses the disk. (Yes, it
  126. is possible, using the 'system' subroutine calls.)
  127.  
  128.     ZXDOS COMMENTS: Having destroyed BDOS as described above, I was
  129. obliged to include an embedded disk operating system in ZX65. Now, ZXDOS
  130. will never win any awards for versatility, but it is, I think, adequate
  131. for the application. All internal disk access is confined to drive B (a
  132. two drive system is assumed). ZXDOS files are not CP/M compatible. A dir-
  133. ectory is maintained on track zero, and the remainder of the disk is
  134. available for program/data storage. Each directory entry is 16 bytes long,
  135. and contains the file name (format same as CP/M but file type has no spe-
  136. cial meaning), the load address, the disk location, the number of sectors,
  137. and an active/dead flag byte. During a directory display or search, the
  138. directory is paged through a buffer within ZX65 one sector at a time,
  139. continuing until an 'end of directory' mark is located. Files are stored
  140. sequentially and on sequential sectors (no interleaving). A new file will
  141. normally be appended at the tail end of existing files, unless the entire
  142. file will fit into the space allocated for a dead file. Thus a rudimentary
  143. form of dynamic disk space allocation is used, but a full disk will still
  144. contain quite a few empty slots. Killing a file does not actually erase
  145. anything, but simply resets the active status flag in the directory for
  146. that entry. The 'initialize' command writes a properly formatted empty
  147. directory to the disk. Although I have not done so, it should be possible
  148. to use ZX65 with only one drive. The only change to the source code is at
  149. line   37, where the instruction 'LD C,1' will have to be replaced with
  150. 'LD C,0'. To operate in this mode, first load ZX65, then immediately re-
  151. move the system disk and insert the ZX65 data disk, and from this point
  152. operation should be the same. This should work because once loaded, ZX65
  153. does not itself require any further disk access.
  154.  
  155.     CONCLUSION: Have fun with ZX65!        -RMK
  156.  
  157.  
  158. 
  159. $╖7τ═└═≈!!":$═J 2$>*═c*=%═ 0"═3*;%"Y$:╗$µ(═└═∩├╦
  160.  PASS !>$~╖╚σ*?$+"?$|╡ß w=2$~╖╔!║#~á#╛#( ⌡Z╔:
  161. $╖╚* $w