home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / CompSysCBM / 072396F.TXT < prev    next >
Text File  |  2019-04-13  |  36KB  |  671 lines

  1. .
  2.  
  3. @(A): Commodore VIC-20 Newsletter Address Change
  4.  
  5. For those interested in the Commodore VIC-20, a very useful but under
  6. utilized computer, Jeffrey Daniels publishes a newsletter for the
  7. machine.  The publication address has changed to:
  8.    
  9.    Vic Newsletter
  10.    Jeff's Ink Press & Deli
  11.    P.O. Box 477493
  12.    Chicago, IL 60647 USA
  13.    Jeffrey Daniels, editor
  14.    U17632@UICVM.CC.UIC.EDU
  15.       
  16. A copy can be obtained by writing the above address.
  17.  
  18. @(A): ESCOM Does a CBM!  (Well, Not Really)
  19.           
  20. Financial Time/Edupage: July 4, 1996
  21.  
  22.    "Escom, the German company that is one of Europe's largest PC
  23.    retailers, is seeking protection from its creditors (similar to Chapte=
  24. r
  25.    11 protection in the U.S.), following significant trading losses, and
  26.    losses caused by a stock write-down.  Aggressive expansion into new
  27.    markets such as the U.K. had caused storage and supply problems."
  28.   
  29. Since ESCOM had recently sold the rights to the Commodore and Amiga
  30. lines to VISCorp, the filing will have little affect on Commodore 8-bit
  31. owners.  Also, CMD reports that this action is part of a massive
  32. reorganization effort by ESCOM intended to solidify its PC manufacturing
  33. operation. CMD notes that, unlike CBM, ESCOM is NOT liquidating, but
  34. merely employing a common US business tactic of filing to shield
  35. themselves from creditors while reorganinzing the business.
  36.  
  37. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
  38. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
  39. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
  40.  
  41. @(#)trick: HEAVY MATH - Part 0: History, Arithmetic, and Simple Algorithm=
  42. s
  43.            by Alan Jones (alan.jones@qcs.org)       
  44.  
  45. Someone on comp.sys.cbm asked if the C64 could do HEAVY MATH, meaning
  46. solve computationally intensive numerical problems.  The answer is of
  47. course, YES!  This is the first of a series of articles on numerical
  48. computing for the C64/128.
  49.  
  50. @(A): Introduction
  51.  
  52. The C64 is not the best computer for numerical work.  However, it does
  53. quite well within its limitations of speed and memory.  It is fine for
  54. most homework  and hobby related problems, but not for big industrial
  55. problems.  It does not bother me at all to let it crunch numbers while I
  56. watch a movie or sleep.  Those old commercials about sending your
  57. children to college with a C64 were a joke.  Still, it can save you a
  58. long walk to the campus on a miserable night. And you can always use it
  59. as a terminal to check jobs running on the mainframe.
  60.  
  61. The C64 is also a good computer for developing numerical algorithms and
  62. programs.  You can try new ideas and write programs at your leisure at
  63. home with a C64.  When developed to your satisfaction, algorithms and
  64. programs can be "ported" to bigger and faster computers to solve larger
  65. problems.  The C64 has many programming languages available, although
  66. many are not well suited for numerical development work.  On larger
  67. computers Fortran and C are popular for numerical work.  On a C64, Power
  68. C might be a good choice for some users.  I use COMAL 2.0.  I also have
  69. COMAL programs that can help convert source codes from BASIC to COMAL,
  70. and COMAL to Fortran.
  71.  
  72. Our C64 with its 6502 (6510) and 64K of RAM is a very simple machine. 
  73. It is so simple that many contemporary numerical programs are far from
  74. ideal on a C64.  So I will start with a bit of numerical computing
  75. history.  Early computers and the numerical algorithms that they used
  76. are often closer to ideal for the C64 than contemporary PCs. 
  77. Researching old numerical algorithms can be useful for the C64; e.g.
  78. Quartersolve in C-Hacking #10.  Of course new algorithms are useful also
  79. and sometimes you might want to combine ideas from both sides of the
  80. spectrum.
  81.  
  82. @(A): History
  83.  
  84. In the beginning... were fingers.  Seriously, "computer" was a human job
  85. description.  These days, human computers are just an oddity seen on TV
  86. talk shows.  The invention of logarithms was a big boon, and log tables
  87. and slide rules were just the start of computational aids.  Eventually,
  88. mechanical adding machines were developed for high precision, error free
  89. (but slow) numerical work.  One can still find large desk top Friden and
  90. Monroe mechanical adding machines.  Numerical work was still a slow
  91. tedious process.  More computing tools were developed.  The Differential
  92. Analyzer was a mechanical computer that could solve IVPs (Initial Value
  93. Problems, integrating differential equations).  There were also some
  94. early analog electronic computing aids.  The first electronic analog
  95. computer was actually developed after electronic digital computers. 
  96. (One could argue that many WW II autopilots and automatic control
  97. circuits were electronic analog computers.)
  98.  
  99. The first digital electronic computers were the ABC, ENIAC, EDVAC, and
  100. UNIBLAB. (UNIBLAB is just for the Jetson's fans. ;) )  John Vincent
  101. Atanasoff invented the first digital electronic computer at Iowa State
  102. University.  (So if someone answers the phone and says, "He's on the
  103. John.  Can he call you back later?"  It might not be mean what you first
  104. think.)  Clifford Berry, was a grad student and chief technician, hence
  105. the Atanasoff-Berry Computer, or ABC.  The Atanasoff story is
  106. fascinating.  See: The First Electronic Computer: The Atanasoff Story,
  107. Alice R. and Arthur W. Burks, The University of Michigan Press, 1988.
  108.  
  109. Atanasoff wanted to be able to solve large sets of linear equations. 
  110. Even with large mechanical adding machines, solving a 10 by 10 problem
  111. was about the largest size that would be attempted.  Schemes to connect
  112. several mechanical adding machines were not feasible, and analog devices
  113. were not precise enough.  He was working at a small university and the
  114. small grants available to him were a serious constraint.  He developed
  115. the ABC over a couple years for less than $7,000.  The ENIAC would later
  116. cost about $500,000!  Atanasoff invented a way to use electronic vacuum
  117. tubes as high speed digital switching devices.  He then invented a
  118. serial arithmetic logic unit, ALU.  Vacuum tubes were still too
  119. expensive so he used cheap capacitors for memory.  He invented
  120. additional circuitry to refresh the capacitors,  i.e. dynamic RAM.  He
  121. designed a parallel computing machine that could add (and subtract,
  122. shift, NOR,...) 30 50-bit binary numbers using 30 modular ALU units. 
  123. This allowed it to solve up to 29 linear equations with one right hand
  124. side vector.  The design could easily be scaled up in size and
  125. precision.  It used scratch paper for I/O and temporary memory. (Created
  126. in man's image?)  The card punch/reader was the limiting factor. 
  127. Mechanical punches, like (then) new accounting machines might use, were
  128. too slow.  An electronic spark punch was developed.  A dielectric
  129. material (paper) was placed between electrodes.  A high electrical
  130. voltage would carbonize a dot in the material and actually burn a small
  131. pin hole.  A smaller voltage would later test for the mark.  This was
  132. actually Berry's project.  It had decimal to binary and binary to
  133. decimal conversion for initial and final I/O, as well as other nice
  134. touches.
  135.  
  136. Atanasoff also developed a variation of Gaussian elimination for solving
  137. the linear systems of equations with the ABC.   The ABC, like our 6502,
  138. has no multiply instruction.  The ABC had capacitor memory to hold two
  139. rows of equations.  Multiplication was done with shifts and adds, but
  140. whole rows were computed in parallel.  Fixed point binary arithmetic
  141. with truncation (no rounding) was used.  However, it provided 50 binary
  142. bits of precision which was more than the adding machines provided.  It
  143. used no division.  The result would be printed (punched) out in decimal
  144. as two integers that would be divided on a mechanical desk calculator
  145. for each variable.  His numerical algorithm may be useful for our 6502,
  146. although I'm sticking with the slower floating point arithmetic.  It was
  147. not a general purpose "stored program" computer, but it could have been
  148. adapted to solve a variety of problems.
  149.  
  150. The ABC was completed and operational in April or May of 1942 except for
  151. one problem:  The card punch reading was not reliable.  The problem may
  152. have been the dielectric material or choice of paper.  A 5 by 5 problem
  153. could be reliably solved, but not the larger problems that it was
  154. designed for.  The problem could have been fixed.  However, Atanasoff
  155. and Berry were called to other WW II related work and not allowed to
  156. perfect the ABC.  The ABC was stored and later dismantled.  Ironically,
  157. the war that built the ENIAC killed the ABC.  Of course many of John
  158. Atanasoff's original inventions were later used in the ENIAC and EDVAC
  159. computers.
  160.  
  161. The ABC was built into a desk sized wheeled cart and could be
  162. transported to a  researcher's "home."  It cost less than $7000, but
  163. additional units would have been cheaper.  The ABC was akin to our
  164. favorite low cost home computer.  By contrast, the second computer,
  165. ENIAC, cost a fortune, required a team of technicians to operate, and
  166. filled a large room.  The ENIAC led to monolithic computing centers.  It
  167. would be decades before the computer returned to the home.
  168.  
  169. I'll skip the better known history lessons: transistor > microprocessor
  170. > electronic hand calculators > home computers > C64 >...  And of course
  171. the electronic computer caused an explosion in the development of
  172. mathematics and numerical algorithms.
  173.  
  174. @(A): Arithmetic
  175.  
  176. Arithmetic is the basic building block of numerical algorithms.  There
  177. are many types of numerical variables and arithmetics.  Binary
  178. arithmetic is the most efficient for intensive numerical work.  Decimal
  179. arithmetic is best for simple math where conversion to and from binary
  180. would just slow down entering and outputting numbers.  Floating point
  181. arithmetic is easy to use because it is self scaling and covers a large
  182. dynamic range, but it tends to be slow.  Fixed point, e.g. integer,
  183. arithmetic is fast but not as easy to use.  Interval arithmetic involves
  184. computing not just a rounded result but an upper and lower bound on the
  185. result to cover the interval of the arguments and the accuracy of the
  186. computation.  PGP encryption uses a high precision modular arithmetic. 
  187. Complex, quaternian, and vector arithmetic can also be used.
  188.  
  189. The C64 built in BASIC provides 5 byte floating point variables and
  190. arithmetic and 2 byte integer variables.  I think integer arithmetic is
  191. done by converting to floating point.  Most of the programming languages
  192. for the C64 use the same numerical variable types and even the same
  193. arithmetic code.  Even in assembly language we often call the same
  194. floating point arithmetic routines.  The +, -, *, and / arithmetic
  195. operations on the C64 have no bugs.  However, they appear to be coded
  196. for minimum code size rather than minimum execution time.   Every type
  197. of computer arithmetic can be built up from the 6502 instruction set. 
  198. Some arithmetics can be coded for specific applications such as
  199. Polygonamy in C-Hacking #12.
  200.  
  201. My interest is in using the floating point routines with numerical
  202. algorithms and writing programs.  Of course even floating point
  203. arithmetic routines are built up from smaller arithmetic blocks.  The
  204. key building block is the multiplication of two positive 8 bit values
  205. into a 16 bit result.  Our 6502 has no such instruction.
  206.  
  207. The 6502 CPU was designed to be a low cost 8 bit CPU.  It is fairly
  208. cheap to interface to and will quickly access cheap "slow" memory.  It
  209. is also very quick and responsive to interrupts.  It can perform 8 bit
  210. binary and BCD addition with carry.  The Z80 CPU was designed to be the
  211. ultimate 8 bit CPU.  It has several 8 bit internal registers which can
  212. be used in 16 bit pairs.  It has a full instruction set that includes
  213. some nibble oriented instructions and a 16 bit add.  On average a 1 Mhz
  214. 6502 is about as effective as a 2 Mhz Z80, and Z80s are generally
  215. available in faster speeds.  The C128 has a Z80 CPU that could be used
  216. for numerical work, but it was poorly integrated into the C128 and
  217. offers us no advantage over the 6502 (other than executing CP/M and
  218. other Z80 code).  Neither CPU has a multiply instruction.  The fastest
  219. way to multiply with a Z80 is with the simple binary shift and add
  220. method.  However, this is not true with the 6502!  The fastest way to do
  221. math on a 6502 is by using table look ups.  This opens the door for
  222. creative programming solutions.
  223.  
  224. Tables can use up a lot of memory, especially for a function of two or
  225. more arguments.  An 8 bit multiply table could eat up 128K of memory.  A
  226. 4 bit, or nybble, multiply table would only need 256 bytes, but this
  227. would involve so  much additional work to realize the 8 bit multiply
  228. that it is hardly worthwhile. The C64/128 multiplies with the slow
  229. binary shift and add method.  However, it is not so slow that we can use
  230. disk or REU memory to speed up such a simple function (a large bank
  231. switched ROM would be much faster).  The table look up method can be
  232. readily used when multiplying by a constant, such as when calculating
  233. CRCs.  Now consider the algebraic identity,
  234.  
  235.    a*b =3D ((a + b)/2)_2 - ((a - b)/2)_2.
  236.  
  237. With some more work we can do the multiplication using a table of
  238. squares of only about 512 bytes!  (a + b) could overflow to nine bits,
  239. but we will immediately shift right one bit (the division by 2) so this
  240. is no problem.  However, if (a + b) is odd the least significant bit is
  241. lost.  This is easy to test for by doing a Roll Right instead of a shift
  242. and testing the carry bit.  One way to compensate is to decrement a by 1
  243. (a <> 0), multiply as above and add b, a*b =3D (a-1)*b + b.  The decremen=
  244. t
  245. is free, but we pay for the extra add.  Using 256K of external memory
  246. you could do a 16 bit multiply this way.
  247.  
  248. For an example of the shift and add type multiply and divide see, "High-
  249. Speed Integer Multiplies and Divides", Donald A. Branson, The
  250. Transactor, Vol. 8 , No. 1, July 1987, pp. 42-43, 45.  Note also that
  251. although a*b =3D b*a, the ordering of the arguments can effect the
  252. multiplication speed depending on the bit patterns.
  253.  
  254. Perhaps a year ago there was a discussion running in comp.sys.cbm on ML
  255. routines to do fast multiplication.  There was no clear best solution. 
  256. Performance often depended on where the arguments a and b were and where
  257. the product was to be stored.  This also affects how well these building
  258. blocks can be used to perform multi byte arithmetic.
  259.  
  260. Division is a more difficult problem.  It can be done by shifting and
  261. subtracting, table look up, and algorithms based on computing the
  262. inverse.  Consider:  a/b =3D exp(log(a) - log(b)).  With tables of the
  263. logarithm and exponential functions (and you might want to use base 2)
  264. we can do division with three table look ups and one subtraction.  The
  265. log and exp functions will have to be tabulated to a greater precision
  266. than the arguments and result, or it will only produce an approximation. =
  267.  
  268. In most cases we will still have to calculate the remainder using
  269. multiplication and subtraction.  Of course with log and exp tabulated we
  270. can calculate fast approximations to many other functions, including
  271. multiplication.
  272.  
  273. Stephen Judd used multiplication based on a table of squares and
  274. division based on a table of log and exp in Polygonamy in C-hacking #12. =
  275.  
  276. He reported that his 9 bit/8 bit divide takes 52 cycles "best case." 
  277. However, where numerical algorithms are concerned, only worst case and
  278. average case performance are important.
  279.  
  280. Double precision, and multiple precision arithmetic routines should be
  281. coded efficiently in assembly language using the fast building blocks
  282. suggested above.  However double precision FP variables and arithmetic
  283. can be built using pairs of ordinary FP variables and arithmetic.  This
  284. will be slow but it can be effective when used sparingly such as when
  285. testing single precision algorithms or using iterative improvement
  286. techniques.  See, "Double Precision Math", Alan Jones, Comal Today,
  287. Issue 20, Feb. 1988, pp. 18-20, and Comal Today, Issue 22, May 1988, pp.
  288. 58-61.                                                           
  289.  
  290. @(A): Numerical Algorithms
  291.  
  292. An algorithm is a procedure or set of instructions for computing
  293. something.  I am mainly concerned with HEAVY MATH algorithms, but here I
  294. will present only feather weight numerical algorithms.
  295.  
  296. Consider the trivial algorithm,
  297.  
  298.    repeat
  299.       x :=3D (x + 1/x)/2
  300.    until converged
  301.  
  302. This is a stable quadratically convergent algorithm.  For any initial x
  303. <> 0 it will converge to sign(x), i.e. +1 or -1.  Pick a number, say 1.5
  304. and take a few iterations.  Note how fast it converges to 1.0.  The
  305. error or distance from 1 keeps getting squared down toward zero.  The
  306. number of correct digits in each iteration doubles.  This is the
  307. quadratic convergence.  Pick another number such as 10_20 and try again. =
  308.  
  309. At each iteration the error is cut in half.  We take giant strides but
  310. convergence is still painfully slow.  This is a linear convergence rate. =
  311.  
  312. This is a typical Newton's method algorithm.  Near the solution, inside
  313. the region of quadratic convergence, convergence is very fast.  Outside
  314. the region convergence is much slower.  On more complex problems
  315. convergence may fail altogether or converge to an undesired point.  In
  316. general an algorithm will converge to a "limit point" and if the
  317. algorithm is numerically stable, the limit point will be very close to
  318. the exact solution intended.  Although it looks like this algorithm
  319. could run forever like an infinite series, in finite precision
  320. arithmetic it always converges in a finite number of iterations, even
  321. from the bad starting points.  This algorithm is not so trivial when
  322. applied to a square matrix (with no eigenvalues on the imaginary axis). 
  323. It will compute the matrix sign function which can be used to compute
  324. the stable invariant subspace, which can be used to solve the algebraic
  325. matrix Ricatti equation, which can solve two point boundary value
  326. problems, and be used to solve linear optimal control problems.  Not to
  327. mention other pseudo random buzz mumble...
  328.  
  329. @(A): Inverse and Division
  330.  
  331. The inverse x =3D 1/b can be iteratively computed from x :=3D x*(2 - b*x)=
  332. This is best used as a floating point, or multiple byte algorithm.  This
  333. is a quadratically convergent algorithm.  This means that each iteration
  334. should double the number of correct bits in x.  You could use an 8 bit
  335. multiply and converge to an 8 bit solution from an initial guess.  A
  336. better use would be to compute a 32 bit result (our floating point
  337. mantissa).  We might start with an 8 bit estimate from x :=3D exp(-log(b)=
  338. )
  339. using look up tables, take an iteration using 16 bit multiplication (or
  340. 16 by 8) to get a 16 bit estimate, and take another iteration using 32
  341. bit multiplication to get the final 32 bit result. Division can then be
  342. accomplished as a/b :=3D a*(1/b).  Of course this is only useful if you
  343. have fast multiplication.
  344.  
  345. @(A): Square Roots
  346.  
  347. BASIC 2.0 calculates square roots from x =3D exp(0.5*log(a)).  This is
  348. slow since BASIC calculates the log and exp functions, and inaccurate as
  349. well.  If you have these functions tabulated you might want to use them
  350. for an initial estimate of x.  If you have a table of squares, the
  351. inverse function of the square root, you could use a search routine on
  352. the table.  Square roots can be calculated iteratively from the Newton's
  353. method algorithm,
  354.  
  355.    x :=3D (x + a/x)/2
  356.  
  357. One can also compute x =3D 1/SQR(a) using
  358.  
  359.    x :=3D x*(3-a*x*x)/2
  360.        
  361. avoiding the division.                                      
  362.  
  363. E. J. Schmahl published ML code for computing the square root in "Faster
  364. Square Root For The Commodore 64" in The Transactor, Vol. 8, No. 1, July
  365. 1987, pp. 34-35.  This used a 16 byte look up table to start, followed
  366. by Newton's method.  He called the ROM FP routines to do the
  367. calculations, but variable precision arithmetic could also be used as
  368. suggested for the inverse algorithm.
  369.  
  370. Another interesting algorithm for the INTEGER square root was recently
  371. published by Peter Heinrich, "Fast Integer Square Root", Dr. Dobb's
  372. Journal, #246, April 1996.  This is a fast algorithm that uses no
  373. multiplication or division.  It is not known yet if this is a good
  374. algorithm for the 6502.
  375.  
  376. @(A): Algebraic Geometric Mean
  377.  
  378. The AG Mean is our first real numerical algorithm, the others above are
  379. our arithmetic building blocks.
  380.                                                                          =
  381.     
  382.    Repeat
  383.       a(i+1) :=3D (a(i) + b(i))/2
  384.       b(i+1) :=3D SQR(a(i)*b(i))
  385.    until converged
  386.   
  387. For 0 < a(0) <=3D 1 and 0 < b(0) <=3D 1  the sequences converge
  388. quadratically to their common limit point, the AG mean of a(0), b(0). 
  389. Note that we need to use full precision from the start and an accurate
  390. square root routine.  The BASIC 2.0 SQR routine is not accurate enough. 
  391. This can be used to compute the complete elliptic integral of the first
  392. kind, K(k).  With a(0) =3D 0 ,and b(0) =3D SQR(1-k_2), K(k) =3D PI/(2*a(n=
  393. )). 
  394. The AG Mean can also be used for some other computations
  395.  
  396. @(A): A Caution
  397.  
  398. Many mathematical equations can be found in math books and similar
  399. sources.  However, these are often in a form for ease of typesetting and
  400. further algebraic manipulation.  They should not generally be coded as
  401. written.  For example, the well known quadratic equation is the best way
  402. to compute the roots of a second order polynomial equation.  However,
  403. there is a particular way to code it to avoid overflow, underflow, and
  404. loss of precision.  There are also analytical expressions for the roots
  405. of third and fourth order polynomial equations.  However, roots of third
  406. and higher order polynomials are best solved for using general root
  407. finding techniques.
  408.  
  409. @(A): Conclusion
  410.  
  411. This article is long on discussion and short on usable code.  Although
  412. it suggests faster ways of performing arithmetic on a C64, the built in
  413. FP +, -, *, and / routines are reliable and can used for serious
  414. computations.  If I continue this series, I would want each article to
  415. present source code for solving a numerically intensive problem.  In Part=
  416.  
  417. 1, I present an introduction to Linear Programming.  Hopefully other
  418. topics will be suggested by readers, and possibly articles will even be
  419. written by other users.  Of course I could also write articles on
  420. numerical methods, or turn this into a simple question and answer
  421. column.  I suspect many readers have already written many HEAVY MATH
  422. C64/128 programs but have not shared them with the Commodore user
  423. community yet.
  424.  
  425. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
  426. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
  427. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
  428.  
  429. @(#)mags: Hacking the Mags
  430.  
  431. Not everything good and/or technical comes from Commodore Hacking, which
  432. is as it should be.  (We still think we have the most, though...)  Thus,
  433. let's spotlight some good and/or technical reading from the other
  434. Commodore publications.
  435.  
  436. If you know of a magazine that you would like to see summarized here, let=
  437.  
  438. C=3DHacking know about it.  These summaries are only limited by Commodore=
  439.  
  440. Hacking's inability to purchase subscriptions to all the Commodore
  441. publications available.  We are very grateful to those publications that
  442. send complimentary copies of their publications for review.
  443.  
  444. @(A): Commodore Gazette
  445.    This new introduction is published by Commodore Gazette Publications,
  446.    and is NOT related to COMPUTE's Gazette, in case you are wondering. 
  447.    In Volume 1, Number 7, editor Christopher Ryan mentions the above
  448.    fact, as it seems some upset COMPUTE'S Gazette subscribers were callin=
  449. g
  450.    him.  In this issue, you will find some detailed instructions on
  451.    installing CMD's JiffyDOS, as well as how to turn your 64 computer int=
  452. o
  453.    a 128 (I should mention this was the April issue).  Kenneth Barsky
  454.    provides some handy tips for BASIC programmers, including one
  455.    involving the append mode of CBM disk drives. Overall, the fare is=09
  456.    a bit light, but is pleasing.
  457.         =09
  458. @(A): Commodore World (http://www.the-spa.com/cmd/cwhome.html)
  459.    In the continuing saga of the funky graphics, Jenifer Esile, who made
  460.    a good share of them, has resigned from editorship of Commodore World.
  461.    We hope it isn't something we said :-).  Anyway, CW has hired a new
  462.    assistant editor, and two new issues have rolled off the press.
  463.   
  464.    Doug Cotton, the editor of CW, mentioned that Issue 13 was a nightmare.
  465.    I guess even CMD falls prey to the superstitious number.  No matter.
  466.    For those wanting to learn more about the World Wide Web and HTML,
  467.    Katherine Nelson presents an article on how to use this presentation
  468.    markup language to develop exciting WWW sites.  A glimpse of the
  469.    Commodore LCD computer is given, and Doug Cotton presents his RUN64
  470.    loader, also presented in the last issue of C=3DH.  For those who are
  471.    anticipating the new release of Novaterm, Gaelyne Moranec interviews
  472.    Nick Rossi, the author of Novaterm.
  473.   
  474.    Issue 14 follows up on the HTML tutorial by Katherine Nelson.  Since
  475.    Commodore software is developed on many computer platforms, Doug Cotto=
  476. n
  477.    presents an article on transferring files between dissimilar computer
  478.    systems.  In the reference department, clip out the User Group list
  479.    compiled in this issue.  Obviously, you don't need it, but it's
  480.    something to send the clueless person who calls asking for help.
  481.    Jim Butterfield shows how to get some input into your ML programs, and
  482.    Maurice Randall delved into the VLIR file format used in GEOS.
  483.   
  484. @(A): DisC=3Dovery (http://www.eskimo.com/~drray/discovery.html)
  485.    Subtitled "The Journal of the Commodore Enthusiast," this recent
  486.    publication introduction debuted online on May 17.  Available in
  487.    electronic format, like C=3DH, this is a magazine Commodore Hacking
  488.    readers won't want to miss.  Issue #1 includes articles by Stephen
  489.    Judd on VDC timing, by Nate Dannenburg on constructing an 8-bit
  490.    analog to digital board, and by Mike Gordillo on upgrading the 16kB
  491.    128 VDC to 64kB.  Other articles include a discussion on George
  492.    Taylor's new Tri-FLI technique, an overview of CP/M, and a look
  493.    at ModPlay 128.  Commented source is included for many of the
  494.    articles, and the technical details are not spared. The layout is
  495.    similar to early issues of Commodore Hacking, but more attention
  496.    is paid to consistency throughout the issue.  In addition to
  497.    the issue itself, there is a WWW Site devoted to the magazine:
  498.    (http://www.eskimo.com/~drray/discovery.html).  Still uncertain
  499.    here at Hacking Headquarters is the publication cycle for this new
  500.    arrival, but we hope it finds an eager audience.  The editors are
  501.    certain that there is room in the Commodore publication arena for
  502.    DisC=3Dovery and more magazines like it.
  503.    =09
  504. @(A): Driven (http://soho.ios.com/~coolhnd/)
  505.    Issue #13 contains a good review of the 1541-DOS package from
  506.    Bonestripper.  For those who don't know, 1541-DOS allows your
  507.    1541 to read and write a disk format that can be read on IBM 5.25"
  508.    floppies.  Iceball presents a reality-check for the demo scene, while
  509.    Tao discusses some ideas to help developers write graphics-format
  510.    independent code.  Even if you don't develop graphics code, you should
  511.    read this article and heed its warnings.  Failing to test NTSC code on
  512.    PAL machines or vice versa can impact the usefulness of your
  513.    application.  A little extra effort in development can pay off in the
  514.    end.  Finally, Tron presents some more information on Internet Relay
  515.    Chat (IRC), including how to use its features.
  516.   
  517.    Eclipsing the last issue, Drive #14 offers a wealth of information.
  518.    Nate Dannenburg presents information on ModPlayer 128, while Guenther
  519.    Bauer reviews the new CMD 20 MHz SuperCPU accelerator.  Nate describes=
  520.  
  521.    some of the theory behind creating digital music and how it can be
  522.    done using a Commodore 64.  Lastly, Issue #14 presents a transcript
  523.    of the Genie roundtable discussion on the 64 and its place on the
  524.    Internet.
  525.   
  526. @(A): LOADSTAR (http://www.loadstar.com)
  527.    Issue 142 brings us Fender's proposal for dealing with the glut of
  528.    good software languishing in the closets of those who have forgotten
  529.    it sits there.  Adam Vardy presents a screen saver appropriately
  530.    described as "a screen saver for a computer that doesn't need one."
  531.    Of special mention on this issue is Terry Flynn's SYSARCH, a handy 14
  532.    screen reference guide containing PRG info at the touch of a key or tw=
  533. o.
  534.    For those who have flipped through the 64 PRG enough to wear out the
  535.    binder, this might provide some relief.
  536.  
  537.    In Issue 143, Jeff Jones presents the nuts and bolts behind LOADSTAR's
  538.    text packing routines, while CodeQuest '95 silver medal winner Paul
  539.    Clark offers a handy LIST wedge that allows forward and backward BASIC
  540.    listing scrolls.   Paul's wedge even allows searching.  That's a neat
  541.    twist for you BASIC programers.  For those who don't regularly use
  542.    GEOS but are given graphics in GEOPaint format, Saimak Ansari provides=
  543.  a
  544.    utility that will allow you to view and print them without GEOS.
  545.  
  546.    By far the most technical of the 3 reviewed, issue 144 contains a
  547.    number of helpful utilities.  One, called Menu Toolbox II, allows the
  548.    programmer to create useful and functional user interfaces with a mini=
  549. mum
  550.    of effort. Jeff Jones, the author, has rolled an extensive list of use=
  551. r
  552.    interface controls into this package. Additionally, Ken Robinson
  553.    presents some bug fixes and enhancements to Jeff Jones' Static Array
  554.    System, a package that allows programmers to treat RAM like a relative
  555.    file. 
  556.  
  557. @(A): LOADSTAR 128 (http://www.loadstar.com)
  558.    For all the Dave's Term folks, Issue 31 presents the 5th and final
  559.    installment of the 128 terminal program.  Bob Markland presents his
  560.    RANDOM 2-254 program that one can use to create random numbers. In
  561.    addition, Bob presents RLE 128, a utility to Run Length Encode (RLE)
  562.    fines to make them smaller.  RLE packing is especially useful for
  563.    text screens and other files with repeating symbols.  Fender Tucker
  564.    notes in the introduction that many new 128 titles are arriving for
  565.    publication, and he mentions that Mr. Markland will be taking charge
  566.    of more aspects of this publication.  We hope he enjoys it.
  567.   
  568. @(A): LOADSTAR LETTER (http://www.loadstar.com)
  569.    We have decided to break LL out from the LOADSTAR reviews because
  570.    J and F Publishing has recently decided to make LL a separate product.
  571.    The details are in LL Issue #34.  The publication will continue to be
  572.    free of charge until #37.
  573.   
  574.    In LL #32, LOADSTAR introduces two more editions in its "Compleat" lin=
  575. e.
  576.    The Compleat Crossword offers what the name inplies, while The
  577.    Compleat Jon presents 11 previously published Jon Mattson games in
  578.    one compilation.  Jeff details a particlularly nasty bug that he worke=
  579. d
  580.    around in The Compleat Crossword.  He invites savvy folks to figure ou=
  581. t
  582.    the problem.  In the reference department, most will want to archive J=
  583. eff
  584.    Jones' Introduction to Machine Language.  Oh sure, it won't teach YOU
  585.    anything new, but the tables are sure nice to have if, perchance, a
  586.    friend ever forgets the addressing modes for some opcode.  Lastly, Jim
  587.    Brain presents part 5 of the Internet series.
  588.    =09
  589.    LL #33 showed up with a revamped look.  The publication now has a
  590.    professional front splash graphic, and the style has evolved.  We are
  591.    impressed with the new look.  Of notable mention is the preliminary
  592.    information on the CMD SuperCPU and its compatibility.  A discussion
  593.    of BASIC compiler pitfalls and problems follows.  Every programer
  594.    should read and re-read the article on how to write applications that
  595.    work on machines with "old" ROMs.  The problems are so simple, but
  596.    neglicting them ruins a perfectly fine app on an old 64.  If you
  597.    haven't figured out how to access RAM under ROM and I/O at $D000,
  598.    there's some functions in the issue to do that as well. 
  599.   
  600.    In LL #34, we learn the new email address for LOADSTAR email:
  601.    jeff@loadstar.com.  The issue also mentions LOADSTAR's WWW address:
  602.    http://www.loadstar.com and notes that it will be the "coolest C64 sit=
  603. e
  604.    on earth."  Well, we'll see about that, but credit is due for the
  605.    attempt.  In this issue, LOADSTAR notes the impending change of LL fro=
  606. m
  607.    free to subscription based, and some more information on the SuperCPU =
  608. is
  609.    related.  For those in the demo scene, you'll be pleased to know that
  610.    Driven will now be distributed on the 3.5" version of LOADSTAR.  Gaely=
  611. ne
  612.    Moranec and her WWW site is spotlighted, but the most newsworthy
  613.    information in this issue is the mention that Byte magazine recently
  614.    recognized the 6502, the SID, and the Agnes/Denise/Paula chips as
  615.    some of the 20 most influential ICs in the computer industry. 
  616.   
  617.    Although LL will appeal to the beginner to intermediate Commodore
  618.    user with current events information, we are pleased to see numerous
  619.    code fragments and technical discussions interspersed with the lighter
  620.    fare.  For $12.00 a year, don't pass it over without a look.
  621.   
  622. @(A): The Underground
  623.    Commodore Hacking would like to thank the anonymous Underground reader
  624.    who donated a subscription so that we can review this magazine for our
  625.    readers.  We appreciate the donation.
  626.   
  627.    With our first issue, Scott Eggleston has changed the format of the
  628.    publication a bit.  Citing problems with reproduction of the smaller
  629.    format and printing woes, The Underground gains a whole new larger
  630.    format look with Issue 13.  For those developers considering a CMD
  631.    hard drive purchase, Disk Estel reviews an HD-40.  Two Internet relate=
  632. d
  633.    articles surface in this issue, as Mark Murphy explains some of the
  634.    technology of the Internet, while Disk Trissel details the File
  635.    Transfer Protocol (FTP).  A full complement of columns and departments
  636.    accompany each issue as well. The Underground covers beginner to
  637.    intermediate material and uses GEOS to publish each issue.  Digitized
  638.    photos make frequent appearances, and the content is top-notch.
  639.   
  640. Other magazines not covered in this rundown include:
  641.  
  642. *  _64'er_
  643. *  _Atta Bitar_ (_8 bitter_)
  644. +  _Bonkers_
  645. +  _Coder's World_
  646. +  _COIN!_
  647. o  _Commodore 64/128 Power User Newsletter (CPU)
  648. o  _COMMODORE CEE_
  649. *  _Commodore Network_
  650. *  _Commodore Zone_
  651. *  _Gatekeeper_
  652. o  _Vision_
  653.  
  654. Notes on Legend:
  655. * =3D We have never received an issue of this publication.
  656. o =3D We have not received a new issue of this publication to review.
  657. + =3D We will begin reviewing this magazine in the next issue.
  658.  
  659. In addition, others exist that C=3DHacking is simply not aware of.  As so=
  660. on
  661. as we can snag a copy of any of these, or get the foreign language ones
  662. in English :-), we will give you the scoop on them. 
  663.  
  664. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
  665. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
  666. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
  667. =3D
  668.  
  669.  
  670.