home *** CD-ROM | disk | FTP | other *** search
/ Commodore Free 26 / Commodore_Free_Issue_26_2009_Commodore_Computer_Club.d64 / quickman < prev    next >
Text File  |  2023-02-26  |  9KB  |  298 lines

  1. u
  2.  
  3.  
  4.  
  5.      QUICKMAN PROGRAMMERS DELIGHT
  6.      ----------------------------
  7.  
  8. QUIKMAN: 1984 revisited
  9. Posted on October 27th, 2008 by Rob
  10. A couple of years ago, I was rejoined
  11. with my old Commodore VIC20 software
  12. library my brother had kept, some of
  13. which were programs I had written and
  14. saved using an ordinary audio cassette
  15. tape. I decided to try and resurrect
  16. the data, because I still have my old
  17. VIC20 and datasette drive. But if the
  18. data successfully loaded into the
  19. computer's memory, how could I then
  20. transfer it over to a modern PC? This
  21. problem cannot be new to me, so after
  22. a few google searches, I learned of a
  23. PC serial cable and some DOS software
  24. that would allow me to hook up and use
  25. a Commodore floppy drive but not tape.
  26.  
  27. In steps ebay. I was able to purchase
  28. a new-in-the-box VIC 1540 diskette
  29. drive for $15 shipped. I then got
  30. pillaged another $10 for a box of
  31. 5-1/4 floppy disks. Fortunately back
  32. then, I practiced the good discipline
  33. of recording on both sides of each
  34. tape, as well as to keep a master copy
  35. of all things relevant on an
  36. additional tape. So with a freshly
  37. cleaned datasette head and a LOT of
  38. load attempts, I was able to retrieve
  39. all of my saved programs from the
  40. 22-year aged tapes.
  41.  
  42. I forgot about the fun it was to
  43. format a 170kb floppy disk. Compared
  44. to cassette tape, floppies were
  45. amazingly faster. Today, you can
  46. download a copy of it faster than you
  47. can type RUN on the VIC@s keyboard.
  48. Seriously though, using the tapes and
  49. floppies was like experiencing it new
  50. all over again. And that was kind of
  51. fun, though I am glad not to be
  52. fussing over such clumsy media with
  53. severely limited storage capacity.
  54.  
  55. I have been able to enjoy the result
  56. of this tape librarian nightmare
  57. through the use of machine emulation
  58. software, specifically from the VICE
  59. Team. But a funny thing struck me this
  60. past week one of my programs is a game
  61. I wrote in 1984 called QUIKMAN. I
  62. named it QUIK instead of you-know-who,
  63. because earlier that year I wrote my
  64. first fully machine language program
  65. dubbed QUIKVIC quick as in fast, which
  66. it really was on a 1mHz 8-bit 6502
  67. CPU. As it went for me back then, I
  68. had this one final week off during the
  69. last of my college days, and I decided
  70. to spend it writing this game. I
  71. believed then that there would never
  72. be another opportunity for me to
  73. create this game, because I was
  74. grooming to be a professional data
  75. processing programmer using mainframes
  76. my dream of being an arcade game
  77. programmer would die, but I needed to
  78. try and do this one last time.
  79.  
  80. I abandoned both my girlfriend and
  81. bathing that week, and spent 20-hour
  82. days in front of the parlor@s Zenith
  83. color TV with my little VIC20 and
  84. machine language monitor cartridge.
  85. The result of the game came out just
  86. fine for something that ultimately
  87. loads & runs on a machine with only
  88. 3.5kb of memory and 8-colors. As a
  89. matter of opinion, my recreation of
  90. this arcade megahit is far, FAR
  91. superior than what the licensed owners
  92. produced for the home computer market
  93. of that day. Still, I have always felt
  94. I could have done better If only I had
  95. the time, and perhaps even the tools.
  96. And now after 24-years, that feeling
  97. of an incomplete job has resurfaced.
  98.  
  99. What triggered that gut reaction was
  100. my accidental discovery of a software
  101. project on cc65.org. It stirred up
  102. fond memories of my first C compiler,
  103. as it was also for the 6502 CPU
  104. powering the mighty Commodore 128. But
  105. this was not that product of that day.
  106. However, it sports a nifty 6502
  107. assembler with preset configurations
  108. to compile for Commodore 8-bit
  109. computers, including the VIC20! I used
  110. to own Merlin 128, too, so I had some
  111. pretty high expectations from this
  112. tool.
  113.  
  114. After some light reading of its
  115. documentation, I became convinced that
  116. I could resurrect my QUIKMAN code into
  117. an original assembler source format
  118. that could be recompiled back into its
  119. original binary format. Turning back
  120. to VICE, I loaded QUIKMAN, virtually
  121. attached the VICMON cartridge, and had
  122. it virtually print (to an ASCII text
  123. file) a disassembled listing of its
  124. machine code and data.
  125.  
  126. Over the past 5 days, I have been
  127. massaging that listing into
  128. newly-formatted assembler source,
  129. worthy of today@s coding standards.
  130. The goal was to produce an assembler
  131. source version that would compile into
  132. a binary that was EXACTLY the same as
  133. the originally hand-coded machine
  134. language version. After my first
  135. successful pass at compiling, I simply
  136. could not wait to look for deltas I
  137. had to boot it up and see if the
  138. program ran. Naturally, I was
  139. disappointed when the screen turned
  140. blue and did nothing. I found the
  141. first bug and fixed it, and to my
  142. surprise and delight, a version of
  143. QUIKMAN was up and running. Way too
  144. cool!!
  145.  
  146. I then had the chore to compare the
  147. new binary against the old one. It is
  148. really important to complete the first
  149. objective in making an assembler
  150. source that would compile exactly as
  151. the original. To accomplish this
  152. without too much effort, I turned to
  153. the use of two command-line tools:
  154. hexdump and meld. By issuing:
  155.  
  156. hexdump -C quikman.p00 > quikman.old
  157. hexdump -C quikman.prg > quikman.new
  158.  
  159. I could then compare the two outputs
  160. with this graphical diff view:
  161. meld quikman.old quikman.newIt
  162. highlighted just a few differences,
  163. which had no real adverse affects on
  164. the program functionality, but I
  165. wanted it to be precisely the same.
  166. After a few more edits, validated by a
  167. clean meld view, the assembler source
  168. is now complete.
  169.  
  170. Now I wonder how many more days I'll
  171. go without bathing until I figure I am
  172. done with its next revision ?
  173.  
  174.  
  175. Programmer's Delight
  176. --------------------
  177. Posted on November 1st, 2008 by Rob
  178. Earlier this morning, I had the
  179. pleasure of scratching a 24-year old
  180. itch which resulted in the 2008
  181. completed version of Quikman for the
  182. venerable Commodore VIC20. It was just
  183. the other week I wrote about the feat
  184. of converting a disassembled listing
  185. of my old game, reformatting it into
  186. suitable assembler source code so that
  187. if compiled, it produces the exact
  188. same binary of the original program
  189. file.
  190.  
  191. The days that followed was something I
  192. did not expect. With this new
  193. assembler, I found that I was able to
  194. recall what each part of the program
  195. did, reorganize the code and data in a
  196. manner that was much more memory
  197. efficient (a stock VIC20 only has 3583
  198. bytes for loading a program), and
  199. remove all unnecessary data and NOP
  200. (no operation) instructions that were
  201. useful then for reserving bytes for
  202. future machine code. This internal
  203. house-cleaning did not change any part
  204. of the game, but it did free up
  205. 88-bytes and assure me that the
  206. assembly process was in a manageable,
  207. relocatable address state. That was
  208. all I needed to get motivated to make
  209. the changes I could not do in 1984
  210. without these tools no excuses for me
  211. now not to get it done right! This is
  212. what got done:
  213.  
  214. - fix the character cell-based
  215.   graphics to reduce flickering and
  216.   color noise
  217.  
  218. - fix the number of lives remaining in
  219.   the status bar
  220.  
  221. - fix a software interrupt that can
  222.   cause a joystick poll to occur
  223.   during quikman's move
  224.  
  225. - reverse monsters direction after
  226.   swallowing a powerpill
  227.  
  228. - any monster released from the cage
  229.   remains aggressive, even during
  230.   powerpill play
  231.  
  232. - add a startup demo mode
  233.  
  234. - improve quikman@s death sequence
  235.  
  236. - improve completed level sequence
  237.  
  238. = add a cheat key to advance to the
  239.   next fruit level
  240.  
  241. A bonus feature from all the above
  242. fixes and optimizations allowed me to
  243. integrate progressive playing speed as
  244. the fruit levels advance. The player
  245. will require teenager reflexes to
  246. exceed the apple level without the use
  247. of the cheat key (ESC). I decided to
  248. make the demo mode look like an old
  249. Atari VCS home video game a steady
  250. flicker from its player / missile
  251. graphics while cycling the screen@s
  252. color palette. This was quite
  253. intentional, because that look
  254. definitely invokes an authentic
  255. retro-arcade gaming feel about it.
  256.  
  257. The final result of this program is
  258. that it completely uses not just
  259. occupies all 3583-bytes of available
  260. RAM. Fortunately, it was enough for my
  261. skill and determination to complete my
  262. objective in making a quality Pac-Man
  263. clone for a stock Commodore VIC20. Too
  264. bad it took 24-years to complete,
  265. because there was no other clone of
  266. that era that I ever played which came
  267. this close to the original.
  268.  
  269. After playing a few rounds of my new
  270. found toy, an overwhelming mix of
  271. satisfaction and pride took hold of my
  272. senses which after a short time, I
  273. found myself a bit physically shaken
  274. as if I were nervous. Talk about a
  275. coding session hangover ha! The only
  276. other time I felt that, but it was
  277. more potent, was witnessing the birth
  278. of my daughter, Erin. It is that
  279. feeling from accomplishment in
  280. software invention that I describe as
  281. programmer@s delight.
  282.  
  283. P.S., this program runs perfectly on
  284. another fine machine emulator, mess,
  285. and uses a joystick. It uses the PC@s
  286. F4 key for the VIC@s F7 key (which is
  287. accurate as the VIC only had four
  288. function keys, but used SHIFT to yield
  289. eight) and the HOME key as VIC's STOP
  290. key for cheating. From the
  291. command-line, simply:
  292.  
  293. mess vic20 -quik quikman2k8.prgAnd you
  294. will need to type RUN after a few
  295. seconds from its READY prompt.
  296.  
  297.  
  298.