home *** CD-ROM | disk | FTP | other *** search
/ Loadstar 242 / 242.d81 / t.bbii < prev    next >
Text File  |  2022-08-26  |  7KB  |  289 lines

  1. u
  2.                 BASSEM
  3.                Part II
  4.  
  5.  
  6. MNEMONICS AND PSEUDO-OPS
  7.  
  8.     BASSEM supports all 6502
  9. addressing modes and instructions as
  10. shown in the [COMMODORE 64 Program-
  11. mer's Reference Guide]. In addition,
  12. it supports several pseudo-ops which
  13. tell the assembler on how to generate
  14. code. The following paragraphs
  15. summarize the pseudo-ops that you will
  16. need to know to start using BASSEM,
  17. including the ones demonstrated in the
  18. example above. In each description,
  19. optional parameters are indicated by
  20. pointy brackets and repeating
  21. parameters are represented by
  22. ellipses. When only one of several
  23. choices are allowed, the parameters
  24. are surrounded by parentheses and
  25. separated by a </>.
  26.  
  27.  
  28. BAS address
  29.  
  30.     Sets the program counter (PC) to a
  31. specified address. The BAS command
  32. is usually used to define the starting
  33. address for the program. The [address]
  34. parameter must be a value between 0
  35. and 65535. If you don't set a starting
  36. address, BASSEM assumes a default
  37. value of $C000 (49152).
  38.  
  39.  
  40. BUF number of bytes <,byte>...
  41.  
  42.     Reserves space for the specified
  43. number of bytes. The first parameter
  44. is required and tells BASSEM how many
  45. bytes of memory to reserve within the
  46. object code. Legal values range from 1
  47. to 65535. Optionally, BUF may be
  48. followed by byte values which
  49. determine how the reserved space is
  50. filled.
  51.  
  52.     If BUF is followed by only the
  53. first parameter, the number of memory
  54. locations specified by the value is
  55. filled with 0's. Otherwise, it is
  56. filled with the pattern established by
  57. the given values. For example, if you
  58. enter the command
  59.  
  60.     BUF 8,2,2,3 -
  61.  
  62. BASSEM will write
  63.  
  64.     2,2,3,2,2,3,2,2
  65.  
  66. to the object file. Legal values for
  67. the fill-byte parameters are between 0
  68. and 255.
  69.  
  70.  
  71. BYT (number/strng)<,(number/strng)>...
  72.  
  73.     Places the specified byte(s) or
  74. string(s) into the object file. If you
  75. specify a number or numerical
  76. expression, BASSEM places the value
  77. into the object file. Legal values
  78. range from 0 to 255. If you specify a
  79. string, BASSEM places each character
  80. of the string into a byte. You can
  81. specify multiple byte values or
  82. strings with one BYT command by
  83. separating each with a comma.
  84.  
  85.     1001 BYT"COM,X,Y",0,1,"end",0
  86.  
  87.  
  88. PASS (1/2)
  89.  
  90.     Tells the assembler where to begin
  91. and end assembly. Assembly begins with
  92. the PASS 1 command. You must place the
  93. PASS 1 command just before the first
  94. label definition or machine language
  95. instruction to be assembled.
  96.  
  97.     The PASS 2 command indicates the
  98. end of the program and must be placed
  99. just after the last label definition
  100. or machine language instruction.
  101.  
  102.  
  103. SET start label addr, end label addr
  104.  
  105.     Specifies the location of the
  106. label buffer. The SET command is used
  107. to define the buffer where BASSEM
  108. stores labels as it assembles. The
  109. first argument sets the beginning of
  110. the buffer, and the second argument
  111. sets the end. If you don't specify a
  112. location for the label buffer,
  113. BASSEM places it under BASIC ROM
  114. ($A000-$BFFF). When defining the label
  115. buffer, be sure to use an area of
  116. memory that won't conflict with BASIC,
  117. BASSEM, or your object code (if you
  118. are writing it to memory). In general,
  119. it is best to use areas above $A000.
  120.  
  121.  
  122. WRT (0/1)
  123.  
  124.     Specifies whether or not the
  125. object code should be written to
  126. memory. If WRT is 0, the assembler
  127. will [not] write the code to memory.
  128. If the parameter is 1, BASSEM writes
  129. the code to memory. The WRT command is
  130. useful when you don't want to place
  131. the code in memory but need to check
  132. the systax of your program or assemble
  133. it to disk.
  134.  
  135.  
  136. WOR number<,number>...
  137.  
  138.     Places the specified number(s)
  139. into the object code in low-byte/high-
  140. byte format. Legal values for numbers
  141. range from 0 to 65535. You can specify
  142. multiple values with one WOR command
  143. by separating them with commas.
  144.  
  145.  
  146. FLP number<,number>...
  147.  
  148.     Places the specified number(s)
  149. into the object file in five-byte
  150. floating-point format. Legal values
  151. for numbers range from -1E38 to 1E38.
  152. As with the BYT and WOR commands, you
  153. can specify multiple values with one
  154. FLP command by separating them with
  155. commas.
  156.  
  157.  
  158. OPZ (0/1)<,number>
  159.  
  160.     Tells the assembler how to
  161. assemble zero-page addressing modes
  162. for those instructions whih support
  163. it. Setting the first parameter to 1
  164. tells BASSEM to use zero-page
  165. addressing whenever possible. (This is
  166. the way most assemblers handle zero-
  167. page addressing.) Setting it to 0
  168. tells BASSEM to use absolute
  169. addressing mode.
  170.  
  171.     If, for example, you enter the
  172. commands:
  173.  
  174.     250 OPZ 1: LDA #C6
  175.  
  176. in your source file, the assembler
  177. generates the values
  178.  
  179.     $A5 $C6.
  180.  
  181. If you change the zero-page command to
  182. OPZ 0,
  183.  
  184.     $AD $C6 $00
  185.  
  186. will be generated.
  187.  
  188.     The first example is in zero-page
  189. addressing mode, and the second is in
  190. absolute addressing mode. Zero-page
  191. addressing is both shorter and faster,
  192. but in some applications where timing
  193. is critical, you may want to use
  194. absolute addressing instead.
  195.  
  196.     If you're not careful, setting OPZ
  197. incorrectly can cause errors during
  198. assembly. One such case occurs when
  199. you attempt to assemble an instruction
  200. which supports X- or Y-indexed, zero-
  201. page addressing mode but doesn't
  202. support its equivalent absolute
  203. addressing mode. If you try to
  204. assemble
  205.  
  206.     250 OPZ 0:STX$61,Y
  207.  
  208. BASSEM will stop assembling with a
  209. SYNTAX ERROR message. The error is
  210. flagged as a syntax error because the
  211. assembler does not expect the comma
  212. before the Y.
  213.  
  214.     A 6502 instruction generally has
  215. one of two types of arguments: address
  216. and data, or value. The second
  217. parameter of the OPZ instruction
  218. determines which messages BASSEM
  219. prints when an instruction's argument
  220. is 0. If OPZ's second parameter is set
  221. to 0, no messages are issued; if it is
  222. 1, BASSEM prints a warning when it
  223. encounters a 0 address; if the
  224. parameter is 2, the assembler issues a
  225. warning upon encountering a 0 data
  226. value; and if it is 3, it prints
  227. warning for both types of 0 arguments.
  228.  
  229.  
  230. [LOADSTAR NOTE:] Using SHELL.BC as the
  231. beginning template for your own
  232. program takes care of most of these
  233. controls for you.
  234.  
  235. In SHELL.BC, line 1 you can assign the
  236. beginning address for assembly to
  237. Memory (MM= address) and Disk (DD=
  238. address). Line 10 SETs label memory
  239. for you.
  240.  
  241. When you RUN the assembler, lines 6-7
  242. puts your choice of mode in Z. In
  243. lines 20-32, if you chose Disk, the
  244. name of your program is fetched, has
  245. ".ML" appended, is scratched, and is
  246. opened for writing by the assembler.
  247.  
  248. If you chose Memory, all that is
  249. skipped, and the WRT 1 in line 22
  250. sends the assembly to memory.
  251.  
  252. We have added two other features:
  253.  
  254. BASSEM does not recognize immediate
  255. loads of lo or hi address bytes:
  256.  
  257.     LDA#<ADDR
  258.     LDX#>ADDR
  259.  
  260. So SHELL.BC includes BASIC FN
  261. definitions in lines 41-42 to do the
  262. job:
  263.  
  264.     DEF FNH(X)=INT(X/256)
  265.     DEF FNL(X)=X-FNH(X)*256
  266.  
  267. In the body of your code, you can then
  268. use
  269.  
  270.     LDA#FNL(ADDR)
  271.     LDX#FNH(ADDR)
  272.  
  273.  
  274. We have also included FNI(address),
  275. which is very useful in debugging.
  276. FNI(251) returns the two byte value in
  277. 251/252.
  278.  
  279. The last feature is a ready-written
  280. hard-copy LIST print routine at line
  281. 61000. Set the LIST parameters in line
  282. 61002, then GOTO61000. The listing is
  283. sent to Device 4.
  284.  
  285. ----------------
  286. There's MORE! Continued with Part III
  287.  
  288.  DMM
  289.  
  290.