home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / c64 / programming / documents / using-sprites.txt < prev   
Encoding:
Internet Message Format  |  1993-12-30  |  27.1 KB

  1. fROM jiadar@DELPHI.COM fRI dEC 31 00:47:21 1993
  2. pATH: KLAAVA!NEWS.FUNET.FI!SUNIC!eu.NET!HOWLAND.RESTON.ANS.NET!CS.UTEXAS.EDU!NEWS.TAMU.EDU!BLOOM-BEACON.MIT.EDU!NOC.NEAR.NET!NEWS.DELPHI.COM!USENET
  3. fROM: rOSS mARTIN aNDREW cAPDEVILLE <jiadar@DELPHI.COM>
  4. nEWSGROUPS: COMP.SYS.CBM
  5. sUBJECT: rE: pROGRAMMING
  6. dATE: tUE, 28 dec 93 23:49:13 est
  7. oRGANIZATION: dELPHI iNTERNET
  8. lINES: 796
  9. mESSAGE-id: <931228.85753.jiadar@DELPHI.COM>
  10. rEFERENCES: <ciPbZ9.k82@SUNCAD.CAMOSUN.BC.CA> <931228.10928.jiadar@DELPHI.COM>
  11. nntp-pOSTING-hOST: BOS3A.DELPHI.COM
  12.  
  13. rATASTIC pROGRAMMING, iNC.                           PAGE 1.
  14. 931228-0134.MLS                             28 dECEMBER 1993
  15.  
  16. pROGRAM: 931228-0134.MLS sPRITE!
  17. dESCRIPTION: ml CONVERSION OF BASIC PROGRAM. dEMONSTRATION
  18.              OF SPRITE CREATION AND MOVEMENT.
  19.  
  20. *= $C000
  21. O:.S
  22.  
  23. iNSTRUCTIONS TO THE ASEMBLER. tHE START ADDRESS WILL BE
  24. $C000, WE WANT TO POKE DATA TO MEMORY AND DISPLAY TO THE
  25. SCREEN.
  26.  
  27. V = 53248
  28.  
  29. sET THE VARIABLE (LABEL) v TO THE STARTING ADDRESS OF THE
  30. vic CHIP, 53248. wE CAN USE THIS AS AN OFFSET TO ACCESS vic
  31. REGESTERS.
  32.  
  33. PRINT = $FFD2
  34. STROUT = $AB1E
  35.  
  36. dEFINE TWO MORE VARIABLES, THESE ARE KERNAL ROUTINES TO
  37. PRINT A CHARACTER AND STRING.
  38.  
  39. LDA #5:JSR PRINT:LDA #6:STA 53280:STA 53281:LDX #64
  40.  
  41. tHIS SETS THE COLOR TO WHITE, BACKROUND AND BORDER COLORS TO
  42. LIGHT BLUE, AND PUTS 64 IN .X. .x WILL BE THE INDEX TO READ
  43. IN THE SPRITE DATA.
  44.  
  45. LOOP LDA DATA,X:STA 832,X:DEX:BNE LOOP
  46.  
  47. tHIS SIMPLY PUTS THE SPRITE DATA INTO BLOCK 13 OF SPRITE
  48. MEMORY IN BANK 1. iT IS SORTA LIKE A BACKWARDS (STEP-1) FOR
  49. NEXT LOOP IN BASIC, SORTA...
  50.  
  51. LDA #255:STA X:LDA #200:STA Y
  52.  
  53. hERE WE SET THE DEFAULT VALUES FOR THE x AND y VARIABLES. dO
  54. NOT CONFUSE THESE WITH THE REGESTERS. tHESE VARIABLES WILL
  55. BE USED TO HOLD THE POSITION OF THE SPRITE.
  56.  
  57. LDA #4:STA V+21 ; SET THE SPRITE ENABLE REGESTER TO ENABLE
  58.                 ; SPRITE 2
  59. LDA #1:STA V+41 ; COLOR SPRITE 2 WHITE
  60. LDA X:STA V+4   ; POSITION X     
  61. LDA Y:STA V+5   ; POSITION Y
  62. LDA #13:STA 2042; DATA BLOCK 13
  63. LDA #0:STA 53264; ZERO msb OF x   
  64. LDA #1:STA I    ; NOT NEEDED
  65.  
  66. tHE ABOVE CODE JUST SETS THE vic REGESTERS AND DISPLAYS THE
  67. SPRITE AT X,Y FROM DATA BLOCK 13.     
  68.  
  69.  
  70.  
  71. rATASTIC pROGRAMMING, iNC.                           PAGE 2.
  72. 931228-0134.MLS                             28 dECEMBER 1993
  73.  
  74. LDA #<TXT:LDY #>TXT:JSR STROUT
  75.  
  76. tHIS PRINTS SOME TEXT ON THE SCREEN. wHEN WE RUN INTO THIS
  77. TEXT WITH THE SPRITE, THE PROGRAM WILL END.
  78.  
  79. RJ LDA 56320:AND #15:STA J
  80.  
  81. tHIS READS THE JOYSTICK. iT IS LIKE J=PEEK(56320)AND15 IN
  82. BASIC. wE WILL GET THE FOLLOWING VALUES:
  83.  
  84.                          14            
  85.                       10     6                   
  86.                     11   15    7                 
  87.                        9     5                             
  88.                          13            
  89.  
  90. wE PUT THE VALUE RECIEVED INTO THE VARIABLE j.
  91.  
  92. LDA 56320:AND #16:BNE CTU1:RTS
  93.  
  94. wE CHECK IF THE FIRE BUTTON IS PRESSED. tHIS IS LIKE THE
  95. BASIC IF(PEEK(56320)AND16)=0THENEND. wE USE THE bne
  96. INSTRUCTION BECAUSE IF IT IS true THE FIRE BUTTON IS not
  97. PRESSED. 
  98.  
  99. CTU1 LDA 53279:LDA J:LDY Y:LDX X
  100.  
  101. fIRST WE LATCH 53279 TO RESET THE COLLISION DETECT. tHEN WE
  102. LOAD THE VARIABLE j INTO THE .A REGESTER, Y INTO .Y, AND X
  103. INTO .X. nOW WE CAN DIRECTLY ACCESS THE VARIBLES THROUGH THE
  104. REGESTERS.
  105.  
  106. LDA J:CMP #14:BNE CTU2:DEY:JMP CHADR          ; UP        
  107. CTU2 LDA J:CMP #13:BNE CTU3:INY:JMP CHADR     ; DOWN
  108. CTU3 LDA J:CMP #11:BNE CTU4:DEX:JMP CHADR     ; LEFT
  109. CTU4 LDA J:CMP #7:BNE CTU5:INX:JMP CHADR      ; RIGHT
  110. CTU5 LDA J:CMP #10:BNE CTU6:DEX:DEY:JMP CHADR ; UP-LEFT
  111. CTU6 LDA J:CMP #6:BNE CTU7:DEY:INX:JMP CHADR  ; UP-RIGHT
  112. CTU7 LDA J:CMP #5:BNE CTU8:INX:INY:JMP CHADR  ; DOWN-RIGHT
  113. CTU8 LDA J:CMP #9:BNE CTU9:DEX:INY:JMP CHADR  ; DOWN-LEFT
  114. CTU9 JMP CHADR
  115.  
  116. tHIS BLOCK OF CODE INCREMENTS REGESTERS ACCORDING TO THE
  117. VARIABLE j. tHIS IS LIKE BASIC - IF J=XX THEN DO THIS. iF
  118. NOT IT IS IGNORED. aLL IN ALL, WE END UP AT chadr.
  119.  
  120. CHADR JSR DELAY:JMP RUDA
  121.  
  122. wE JSR TO A DELAY SUBROUTINE SO WE CAN ACTUALLY see THE
  123. SPRITE ON THE SCREEN, AND THEN WE JUMP TO ruda.
  124.  
  125.  
  126.  
  127.  
  128.  
  129. rATASTIC pROGRAMMING, iNC.                           PAGE 3.
  130. 931228-0134.MLS                             28 dECEMBER 1993
  131.  
  132. LDA 53264:AND #4:BEQ NL
  133. LDA #0:STA 53264:LDX #255:JMP RUDA
  134. NL LDA 53264:ORA #4:STA 53264:LDX #0
  135.  
  136. tHIS CODE WAS SOPOSE TO CHECK FOR THE line AND DEAL WITH THE
  137. msb x REGESTER, BUT i COULD NOT FIGURE OUT HOW TO DO IT. iF
  138. YOU KNOW HOW, HELP ME!
  139.  
  140. RUDA LDA 53279:AND #4:BEQ RDT:RTS
  141.  
  142. hERE WE CHECK THE SPRITE TO DATA COLLISION REGESTER, AND IF
  143. IT IS TRUE (YOU TOUCH **stop** WITH THE SPRITE) THEN WE END
  144. THE PROGRAM.
  145.  
  146. RDT STX X:STY Y:STX V+4:STY V+5:JMP RJ
  147.  
  148. wE UPDATE THE x AND y VARIABLES AND ACTUALLY MOVE THE
  149. SPRITE. tHEN WE GO BACK TO rj (READ-JOYSTICK) TO DO IT ALL
  150. OVER AGAIN.
  151.  
  152. RTS
  153.  
  154. i JUST HAVE THIS HERE SO IT DOES NOT CRASH IF i FORGOT IT.
  155.  
  156. DELAY STY Y:PHA:TYA:PHA:LDY #0
  157. LOP1 DEY:STY V+41:BNE LOP1
  158. PLA:TAY:PLA:LDY #1:STA V+41:LDY Y:RTS
  159.  
  160. sIMPLE LONGATED DELAY SUBROUTINE WHICH ATTEMPTS TO SAVE THE
  161. VARIABLES. 
  162.  
  163. I .BYTE 1
  164. X .BYTE 0
  165. Y .BYTE 0
  166. J .BYTE 0
  167. TXT .BYTE 147:.BYTE "**STOP**":.BYTE 0
  168.  
  169. vARIABLES USED IN THE PROGRAM. 'i' IS NOT USED BUT THE
  170. OTHERS ARE.
  171.  
  172. DATA .BYTE 255 128 0 255 0 0
  173. BYTE 254 0 0 252 0 0
  174. BYTE 252 0 0 254 0 0
  175. BYTE 231 0 0 195 128 0
  176. BYTE 129 192 0 0 224 0
  177. BYTE 0 112 0 0 48 0
  178. BYTE 0 0 0 0 0 0
  179. BYTE 0 0 0 0 0 0
  180. BYTE 0 0 0 0 0 0
  181. BYTE 0 0 0 0 0 0
  182. BYTE 0 0 0 0 0 0
  183.  
  184.  
  185.  
  186.  
  187. rATASTIC pROGRAMMING, iNC.                           PAGE 4.
  188. 931228-0134.MLS                             28 dECEMBER 1993
  189.  
  190. tHE DATA FOR THE SPRITE.
  191.  
  192. END
  193.  
  194. wE TELL THE ASEMBLER TO STOP ASSEMBLING.
  195.  
  196.  
  197. hERE IS THE COMPLETE LISTING FOR EASIER TYPING IN VIA AN
  198. ASSEMBLER SUCH AS rlass (AVALIABLE FROM ME).
  199.  
  200.  
  201.  
  202. 10 *= $C000
  203. 20 .O:.S
  204. 30 V = 53248
  205. 40 PRINT = $FFD2
  206. 50 STROUT = $AB1E
  207. 100 LDA #5:JSR PRINT:LDA #6:STA 53280:STA 53281:LDX #64
  208. 110 LOOP LDA DATA,X:STA 832,X:DEX:BNE LOOP
  209. 120 LDA #255:STA X:LDA #200:STA Y
  210. 130 LDA #4:STA V+21
  211. 140 LDA #1:STA V+41
  212. 150 LDA X:STA V+4
  213. 160 LDA Y:STA V+5
  214. 170 LDA #13:STA 2042
  215. 180 LDA #0:STA 53264
  216. 190 LDA #1:STA I
  217. 200 LDA #<TXT:LDY #>TXT:JSR STROUT
  218. 210 RJ LDA 56320:AND #15:STA J
  219. 220 LDA 56320:AND #16:BNE CTU1:RTS
  220. 230 CTU1 LDA 53279:LDA J:LDY Y:LDX X
  221. 240 LDA J:CMP #14:BNE CTU2:DEY:JMP CHADR
  222. 250 CTU2 LDA J:CMP #13:BNE CTU3:INY:JMP CHADR
  223. 260 CTU3 LDA J:CMP #11:BNE CTU4:DEX:JMP CHADR
  224. 270 CTU4 LDA J:CMP #7:BNE CTU5:INX:JMP CHADR
  225. 280 CTU5 LDA J:CMP #10:BNE CTU6:DEX:DEY:JMP CHADR
  226. 290 CTU6 LDA J:CMP #6:BNE CTU7:DEY:INX:JMP CHADR
  227. 300 CTU7 LDA J:CMP #5:BNE CTU8:INX:INY:JMP CHADR
  228. 310 CTU8 LDA J:CMP #9:BNE CTU9:DEX:INY:JMP CHADR
  229. 320 CTU9 JMP CHADR
  230. 330 CHADR JSR DELAY:JMP RUDA
  231. 340 LDA 53264:AND #4:BEQ NL
  232. 350 LDA #0:STA 53264:LDX #255:JMP RUDA
  233. 360 NL LDA 53264:ORA #4:STA 53264:LDX #0
  234. 370 RUDA LDA 53279:AND #4:BEQ RDT:RTS
  235. 380 RDT STX X:STY Y:STX V+4:STY V+5:JMP RJ
  236. 39999 RTS
  237. 40000 DELAY STY Y:PHA:TYA:PHA:LDY #0
  238. 40010 LOP1 DEY:STY V+41:BNE LOP1
  239. 40020 PLA:TAY:PLA:LDY #1:STA V+41:LDY Y:RTS
  240.  
  241.  
  242.  
  243.  
  244.  
  245. rATASTIC pROGRAMMING, iNC.                           PAGE 5.
  246. 931228-0134.MLS                             28 dECEMBER 1993
  247.  
  248. 49999 RTS
  249. 50000 I .BYTE 1
  250. 50010 X .BYTE 0
  251. 50020 Y .BYTE 0
  252. 50030 J .BYTE 0
  253. 55000 TXT .BYTE 147:.BYTE "**STOP**":.BYTE 0
  254. 60000 DATA .BYTE 255 128 0 255 0 0
  255. 60010 .BYTE 254 0 0 252 0 0
  256. 60020 .BYTE 252 0 0 254 0 0
  257. 60030 .BYTE 231 0 0 195 128 0
  258. 60040 .BYTE 129 192 0 0 224 0
  259. 60050 .BYTE 0 112 0 0 48 0
  260. 60060 .BYTE 0 0 0 0 0 0
  261. 60070 .BYTE 0 0 0 0 0 0
  262. 60080 .BYTE 0 0 0 0 0 0
  263. 60090 .BYTE 0 0 0 0 0 0
  264. 60100 .BYTE 0 0 0 0 0 0
  265. 63999 .END
  266. READY.
  267.  
  268. aND IF YOU DO NOT HAVE AN ASSEMBLER, HERE IS A LISTING OF A
  269. basic LOADER WHICH LOADS THE ml FROM DATA STATEMENTS. yOU
  270. CAN TYPE THIS IN DIRECTLY IN basic. be very careful AND
  271. WATCH OUT FOR ERRORS. tHERE ARE 365 DATA ITEMS TO TYPE IN!
  272.  
  273. 0 REM SPRITE! BY RATASTIC
  274. 1 REM 931228-0134.MLS
  275. 2 REM SPRITE - JOYSTICK MOVER
  276. 10 FORX=49152TO49517:READY:POKEX,Y:NEXT
  277. 20 PRINT"FINISHED...[DOWN 9]":PRINT"SYS49152 TO START"
  278. 30 POKE 49417,0 :REM SPEED 1 IS FASTEST 0 IS SLOWEST 255 IS
  279.                  SLOW, 5 IS FAST EXC
  280. 60000 DATA 169, 5, 32, 210, 255, 169
  281. 60001 DATA 6, 141, 32, 208, 141, 33
  282. 60002 DATA 208, 162, 64, 189, 43, 193
  283. 60003 DATA 157, 64, 3, 202, 208, 247
  284. 60004 DATA 169, 255, 141, 30, 193, 169
  285. 60005 DATA 200, 141, 31, 193, 169, 4
  286. 60006 DATA 141, 21, 208, 169, 1, 141
  287. 60007 DATA 41, 208, 173, 30, 193, 141
  288. 60008 DATA 4, 208, 173, 31, 193, 141
  289. 60009 DATA 5, 208, 169, 13, 141, 250
  290. 60010 DATA 7, 169, 0, 141, 16, 208
  291. 60011 DATA 169, 1, 141, 29, 193, 169
  292. 60012 DATA 33, 160, 193, 32, 30, 171
  293. 60013 DATA 173, 0, 220, 41, 15, 141
  294. 60014 DATA 32, 193, 173, 0, 220, 41
  295. 60015 DATA 16, 208, 1, 96, 173, 31
  296. 60016 DATA 208, 173, 32, 193, 172, 31
  297. 60017 DATA 193, 174, 30, 193, 173, 32
  298.  
  299.  
  300.  
  301.  
  302.  
  303. rATASTIC pROGRAMMING, iNC.                           PAGE 6.
  304. 931228-0134.MLS                             28 dECEMBER 1993
  305.  
  306. 60018 DATA 193, 201, 14, 208, 4, 136
  307. 60019 DATA 76, 201, 192, 173, 32, 193
  308. 60020 DATA 201, 13, 208, 4, 200, 76
  309. 60021 DATA 201, 192, 173, 32, 193, 201
  310. 60022 DATA 11, 208, 4, 202, 76, 201
  311. 60023 DATA 192, 173, 32, 193, 201, 7
  312. 60024 DATA 208, 4, 232, 76, 201, 192
  313. 60025 DATA 173, 32, 193, 201, 10, 208
  314. 60026 DATA 5, 202, 136, 76, 201, 192
  315. 60027 DATA 173, 32, 193, 201, 6, 208
  316. 60028 DATA 5, 136, 232, 76, 201, 192
  317. 60029 DATA 173, 32, 193, 201, 5, 208
  318. 60030 DATA 5, 232, 200, 76, 201, 192
  319. 60031 DATA 173, 32, 193, 201, 9, 208
  320. 60032 DATA 5, 202, 200, 76, 201, 192
  321. 60033 DATA 76, 201, 192, 32, 2, 193
  322. 60034 DATA 76, 234, 192, 173, 16, 208
  323. 60035 DATA 41, 4, 240, 10, 169, 0
  324. 60036 DATA 141, 16, 208, 162, 255, 76
  325. 60037 DATA 234, 192, 173, 16, 208, 9
  326. 60038 DATA 4, 141, 16, 208, 162, 0
  327. 60039 DATA 173, 31, 208, 41, 4, 240
  328. 60040 DATA 1, 96, 142, 30, 193, 140
  329. 60041 DATA 31, 193, 142, 4, 208, 140
  330. 60042 DATA 5, 208, 76, 78, 192, 96
  331. 60043 DATA 140, 31, 193, 72, 152, 72
  332. 60044 DATA 160, 0, 136, 140, 41, 208
  333. 60045 DATA 208, 250, 104, 168, 104, 160
  334. 60046 DATA 1, 141, 41, 208, 172, 31
  335. 60047 DATA 193, 96, 96, 1, 56, 54
  336. 60048 DATA 14, 147, 42, 42, 83, 84
  337. 60049 DATA 79, 80, 42, 42, 0, 255
  338. 60050 DATA 128, 0, 255, 0, 0, 254
  339. 60051 DATA 0, 0, 252, 0, 0, 252
  340. 60052 DATA 0, 0, 254, 0, 0, 231
  341. 60053 DATA 0, 0, 195, 128, 0, 129
  342. 60054 DATA 192, 0, 0, 224, 0, 0
  343. 60055 DATA 112, 0, 0, 48, 0, 0
  344. 60056 DATA 0, 0, 0, 0, 0, 0
  345. 60057 DATA 0, 0, 0, 0, 0, 0
  346. 60058 DATA 0, 0, 0, 0, 0, 0
  347. 60059 DATA 0, 0, 0, 0, 0, 0
  348. 60060 DATA 0, 0, 0, 0, 0, 0
  349. 60061 DATA 0, 0, 0, 0, 0, 0
  350. READY.
  351.  
  352.  
  353. tHAT IS QUITE ALOT OF DATA AND IF YOU DO NOT REALLY NEED THE
  354. SPEED, HERE IS THE basic VERSION BEFORE i CODED IT TO ml. iT
  355. DOES CHECK FOR THE msb. tHE EXPLINATION FOR THIS PROGRAM IS
  356. ALSO CONTAINED.
  357.  
  358.  
  359.  
  360.  
  361. rATASTIC pROGRAMMING, iNC.                           PAGE 7.
  362. 931228-0134.MLS                             28 dECEMBER 1993
  363.  
  364.  
  365. 0 PRINTCHR$(5):POKE53280,6:POKE53281,6
  366. mAKE BACKROUND AND BORDER LIGHT BLUE AND CHANGE TEXT TO
  367. WHITE.
  368.  
  369. 10 FORX=832TO832+63:READY:POKEX,Y:NEXTX
  370. rEAD IN SPRITE DATA INTO BLOCK 13 OF BANK 1. bANK 1 IS THE
  371. DEFAULT BANK. wE GET BLOCK 13 BY 832/64. iF WE WERE TO USE
  372. 704 TO 704+64 THEN IT WOULD BE BLOCK 11 (704/64). wE USE
  373. THIS BLOCK NUMBER WITH THE SPRITE POINTER REGESTER. wE READ
  374. 63 BYTES FROM DATA STATEMENTS AND POKE THEM INTO MEMORY.
  375.  
  376. 15 X=255:Y=200
  377. sET THE X AND Y CO-ORDINATES OF THE SPRITE.
  378.  
  379. 20 V=53248     :REM SET 'V' TO VIC ADR
  380. sET THE VARIBLE 'V' TO THE START OF vic MEMORY. tHIS ALLOWS
  381. US TO ADDRESS SPECIFIC REGESTERS OF THE VIC WITH v+REGVALUE.
  382.  
  383. 30 POKEV+21,4  :REM ENABLE SPR 2
  384. rEGESTER 21 OF THE vic CHIP IS THE SPRITE ENABLE REGESTER.
  385. wE POKE IT LIKE THIS: poke v+21, peek (v+21) or (SPRITE
  386. ENABLE^2) TO ENABLE A SPECIFIC SPRITE. sINCE WE WILL BE
  387. USING ONLY SPRITE 3, WE JUST POKE IT WITH A 4. tHIS IS DONE
  388. BY BINARY REPRESENTATION:
  389.  
  390. sPRITE ->  7   6   5   4   3   2   1   0
  391. bINARY ->  1   1   1   1   1   1   1   1   ->255 (ONE BYTE)
  392. vALUE  -> 128  64  32  16  8   4   2   1   
  393.  
  394. tHE 'VALUE' FOR SPRITE 2 IS 4, SO WE POKE THAT INTO THE
  395. sPRITE eNABLE rEGESTER AND THAT ALLOWS THE SPRITE TO BE
  396. VISABLE.
  397.  
  398. 40 POKEV+41,1  :REM COLOR SPR 2 WHITE
  399. tHIS SETS THE COLOR OF THE SPRITE JUST AS YOU WOULD SET THE
  400. BACKROUND OR BORDER COLORS. tHE ARGUMENTS ARE THE SAME. tHIS
  401. SETS SPRITE 2. eACH SPRITE HAS A SEPERATE COLOR REGISTER.
  402. sPRITE 0 HAS REG. 39, ALL THE WAY FOR ALL 7 SPRITES.
  403.  
  404. 50 POKEV+4,X   :REM POSITION SPR 2 X
  405. tHIS IS THE x POSITION (LOWER 8 BITS) OF SPRITE 2. eACH
  406. SPRITE HAS AN x POSITION AND A y POSITION. wE DEFINED x
  407. EARLIER, SO WE POKE REGISTER 4 WITH THE VALUE OF x, THUS
  408. PLACING THE SPRITE ON THE VISUAL SCREEN.
  409.  
  410. 60 POKEV+5,Y   :REM POSITION SPR 2 Y
  411. wE MUST POKE THE y VALUE ALSO.
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419. rATASTIC pROGRAMMING, iNC.                           PAGE 8.
  420. 931228-0134.MLS                             28 dECEMBER 1993
  421.  
  422. 70 POKE2042,13 :REM DATA BLOCK FOR SPR 2
  423. tHIS TELLS THE vic CHIP WHERE TO GET THE DATA. tHIS IS A
  424. BLOCK NUMBER, THUS THE NUMBER POKED HERE TIMES 64 WILL GIVE
  425. THE ACTUAL STARTING ADDRESS OF THE DATA. 13*64 = 832 AND
  426. THAT IS WHERE WE ARE PUTTING THE SPRITE DATA.
  427.  
  428. 80 POKE53264,0 :REM 0 MSB OF X
  429. tHIS IS THE 9TH BIT OF THE x REGESTER. tHE ARGUMENTS WORK
  430. LIKE THE SPRITE ENABLE REGESTER, ONE BIT FOR EACH SPRITE.
  431. sINCE THERE ARE MORE THAN 255 (ONE BYTE) SCAN LINES FOR x,
  432. WE MUST PROVIDE ANOTHER BIT TO PROVIDE FOR FIVE HUNDERED
  433. SOMETHING PLACES. wE SET THIS TO 0 BECAUSE WE ARE SETTING
  434. THE x POSITION AT 255. iF WE WANTED TO SET x AT THE 256TH
  435. POSITION, WE WOULD SET BIT TWO OF THIS REGESTER TO 1 AND THE
  436. x POSITION REGESTER TO 0. tHAT WOULD GIVE A BINARY VALUE OF
  437. %100000000 WHICH IS THE NINE BIT REPRESENTATION OF 256.
  438.  
  439. 90 I=1
  440. dELARES THE VARIABLE i AND SETS ITS VALUE TO 1. tHIS WILL
  441. BE USED TO INCREMENT THE JOYSTICK CONTROL.
  442.  
  443. 91 PRINTCHR$(147)"**STOP**        "
  444. pRINT A PROMPT. tHIS WILL BE USED TO STOP THE PROGRAM. wHEN
  445. THE POINTER COMES INTO CONTACT WITH THIS TEXT, THE PROGRAM
  446. WILL END. wE CAN CHECK BY THE SPRITE TO DATA COLLISION
  447. REGESTER.
  448.     
  449. 100 REM MOVE SPRITE BY JOYSTICK IN
  450. 110 REM PORT 2 SUBROUTINE
  451. wE WILL NOW WRITE A SUBROUTINE THAT WILL ALLOW US TO MOVE
  452. THE SPRITE VIA A JOYSTICK IN PORT 2. 
  453.  
  454. 120 J=NOT PEEK(56320)AND15
  455. tHIS PEEKS THE cia#1 CHIP (COMPLEX-INTERFACE-ADAPTER) TO GET
  456. THE VALUE OF JOYSTICK 2. nO NEED TO how IT WORKS, JUST KNOW
  457. THAT IT DOES. 
  458.  
  459. 121 IF((PEEK(56320)AND16)/16)=0THENEND                 
  460. tHIS IS A TEST FOR THE FIRE BUTTON. iF IT IS FALSE, 0, THEN
  461. WE WILL ABORT THE PROGRAM. aGAIN, NO NEED TO KNOW HOW IT
  462. WORKS. (iF YOU WANT TO i WILL EXPLAIN BUT IT WILL CONFUSE
  463. YOU!)
  464.  
  465. 122 A=PEEK(53279)
  466. aLL THIS DOES IS CLEAR THE SPRITE TO DATA COLLISION
  467. REGESTER. tHIS REGESTER IS CLEARED WHEN READ AND WE NEED TO
  468. SET IT TO 0 BEFORE WE START ANYTHING ELSE.
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477. rATASTIC pROGRAMMING, iNC.                           PAGE 9.
  478. 931228-0134.MLS                             28 dECEMBER 1993
  479.  
  480. 130 IFJ=1THENY=Y-I
  481. 140 IFJ=2THENY=Y+I
  482. 150 IFJ=4THENX=X-I
  483. 160 IFJ=8THENX=X+I
  484. 170 IFJ=5THENX=X-I:Y=Y-I
  485. 180 IFJ=9THENY=Y-I:X=X+I
  486. 190 IFJ=10THENX=X+I:Y=Y+I
  487. 200 IFJ=6THENX=X-I:Y=Y+I
  488. tHE ABOVE CODE CHECKS FOR ALL POSSIBLE JOYSTICK POSITIONS
  489. AND ADJUSTS THE X AND Y VARIABLES ACCORDINGLY. hERE IS A
  490. CHART OF THE POSSIBLE VALUES OF j:
  491.  
  492.                           1                                          
  493.                         5    9                                       
  494.                       4   0    8                 
  495.                         6   10                             
  496.                           2                                
  497.  
  498. 201 IFJ=0THENP=1:I=1
  499. 202 IF(P/15)=INT(P/15)THENI=I+1
  500. 203 IFJTHENP=P+1
  501. 204 IFI>5THENI=5
  502. tHIS CODE ADJUSTS THE SPEED OF THE POINER IF IT IS HELD DOWN
  503. FOR AN EXTENDED AMOUNT OF TIME. iN LINE 201, WE CHECK TO SEE
  504. IF THE JOYSTICK IS STATIONARY (0 VALUE) AND IF IT IS THEN WE
  505. SET p (PULSE-COUNTER) TO 1 AND i TO 1. tHIS IS THE SLOWEST
  506. SPEED AND IS ALSO THE DEFAULT. iN LINE 202 WE CHECK IF p IS
  507. A MUTIPLE OF 15 AND IF SO THEN WE INCREMENT i. sO i WILL BE
  508. INCREMENTED WHEN p REACHES 15, 30, 45, 60, 75, SO ON UNTIL
  509. THE JOYSTICK IS RELEASED. iN LINE 203 WE CHECK IF j IS
  510. NON-ZERO (BOLEON LOGIC TESTS...) AND IF IT IS NOT THAT MEANS
  511. THAT THE JOYSTICK IS BEING HELD IN ONE DIRECTION SO WE
  512. INCREMENT p. lINE 204 MAKES SURE WE DO NOT ALLOW THE
  513. JOYSTICK TO GO too FAST. tHE VARIABLE i CANNOT GO OVER 5.
  514.   
  515. 210 IF(X<256)AND(X>-1)THEN220
  516. 211 IF(PEEK(53264)AND4)THENPOKE53264,0:X=255:GOTO220
  517. 212 POKE53264,PEEK(53264)OR4:X=0
  518. tHIS CODE ALLOWS US TO GET OVER THE INVISIBLE line. sINCE
  519. THERE ARE OVER 255 x SCAN LINES, WE MUST BE ABLE TO MOVE THE
  520. SPRITE PAST THE 255TH x POSITION. tHERE IS A msb REGESTER
  521. THAT WORKS LIKE THE SPRITE ENABLE REGESTER. fOLLOW THE
  522. LOGIC... iN LINE 210 WE CHECK TO SEE IF x IS OUT OF RANGE. a
  523. BYTE CAN ONLY BE >-1 AND <256 SO WE CHECK THAT AND IF x IS
  524. WITHIN RANGE THAN NO CHANGING NEEDS TO BE DONE AND WE
  525. CONTINUE WITH 220. iF x IS OUT OF RANGE, THOUGH, WE NEED TO
  526. FIX SOMETHING AS WE CAN NOT poke A VALUE GREATER THAN 255 OR
  527. LESS THAN 0. iN LINE 211 WE CHECK (BY BOLEON LOGIC) TO SEE
  528. IF THE msb IS on. wE USE THE and 4 AT THE END TO STRIP ALL
  529. BITS EXCEPT THE 2ND BINARY DIGET. tHEREFORE, IF IT IS TRUE
  530.  
  531.  
  532.  
  533.  
  534.  
  535. rATASTIC pROGRAMMING, iNC.                          PAGE 10.
  536. 931228-0134.MLS                             28 dECEMBER 1993
  537.  
  538. WE WILL GET 4 AND IF IT IS FALSE WE WILL GET 0. iF IT IS
  539. TRUE, THEN WE MAKE IT 0 AND MAKE x 255 AND GO TO 220. iF IT
  540. IS NOT TRUE, THEN ONLY ONE OTHER CONDITION COULD BE-  ITS
  541. FALSE! iF IT IS FALSE, THEN WE MUST TURN THE msb on AND MAKE
  542. x 0. tHEN THE SPRITE WILL BE AT THE 256TH POSITION. i KNOW,
  543. IT IS CONFUSING...
  544.  
  545. 220 IF(PEEK(53279)AND4)THENEND
  546. tHIS IS THE SPRITE TO DATA COLLISION DETECT REGESTER. tHE
  547. EXPRESSION PEEK(53279)AND4 WILL RETURN 0 OR 4 DEPENDING ON
  548. IF THE SPRITE HAS TOUCHED ANY CHARACTERS ON THE SCREEN. iF
  549. IT HAS, IT WILL BE 4, THUS TRUE. iF IT HAS NOT IT WILL BE 0.
  550. iF IT IS TRUE THEN WE END THE PROGRAM AS THE USER MOVED THE
  551. SPRITE AND TOUCHED THE **stop** PROMPT PRINTED EARLIER.
  552.  
  553. 230 POKEV+4,X:POKEV+5,Y:GOTO120
  554. hERE WE UPDATE THE CO-ORDINANTS, THUS ACTUALLY MOVING THE
  555. SPRITE. wE GO BACK TO 120 TO GET ANOTHER JOYSTICK VALUE AND
  556. WE DO IT ALL OVER AGAIN!
  557.  
  558.  
  559. 60000 DATA 255, 128, 0, 255, 0, 0
  560. 60001 DATA 254, 0, 0, 252, 0, 0
  561. 60002 DATA 252, 0, 0, 254, 0, 0
  562. 60003 DATA 231, 0, 0, 195, 128, 0
  563. 60004 DATA 129, 192, 0, 0, 224, 0
  564. 60005 DATA 0, 112, 0, 0, 48, 0
  565. 60006 DATA 0, 0, 0, 0, 0, 0
  566. 60007 DATA 0, 0, 0, 0, 0, 0
  567. 60008 DATA 0, 0, 0, 0, 0, 0
  568. 60009 DATA 0, 0, 0, 0, 0, 0
  569. 60010 DATA 0, 0, 0, 0, 0, 0
  570. tHAT IS THE DATA FOR THE SPRITE SHAPED LIKE A POINTER.
  571.     
  572.  
  573. hERE IS THE COMPLETE UNCOMMENTED PROGRAM FOR EASIER TYPING
  574. IN. 
  575.  
  576.  
  577.  
  578. READY.
  579.  
  580. 0 PRINTCHR$(5):POKE53280,6:POKE53281,6
  581. 10 FORX=832TO832+63:READY:POKEX,Y:NEXTX
  582. 15 X=255:Y=200
  583. 20 V=53248     :REM SET 'V' TO VIC ADR
  584. 30 POKEV+21,4  :REM ENABLE SPR 3
  585. 40 POKEV+41,1  :REM COLOR SPR 3 WHITE
  586. 50 POKEV+4,X   :REM POSITION SPR 3 X
  587. 60 POKEV+5,Y   :REM POSITION SPR 3 Y
  588.  
  589.  
  590.  
  591.  
  592.  
  593. rATASTIC pROGRAMMING, iNC.                          PAGE 11.
  594. 931228-0134.MLS                             28 dECEMBER 1993
  595.  
  596. 70 POKE2042,13 :REM DATA BLOCK FOR SPR3
  597. 80 POKE53264,0 :REM 0 MSB OF X
  598. 90 I=1
  599. 91 PRINTCHR$(147)"**STOP**        "
  600. 100 REM MOVE SPRITE BY JOYSTICK IN
  601. 110 REM PORT 2 SUBROUTINE
  602. 120 J=NOT PEEK(56320)AND15
  603. 121 IF((PEEK(56320)AND16)/16)=0THENEND                 
  604. 122 A=PEEK(53279)
  605. 130 IFJ=1THENY=Y-I
  606. 140 IFJ=2THENY=Y+I
  607. 150 IFJ=4THENX=X-I
  608. 160 IFJ=8THENX=X+I
  609. 170 IFJ=5THENX=X-I:Y=Y-I
  610. 180 IFJ=9THENY=Y-I:X=X+I
  611. 190 IFJ=10THENX=X+I:Y=Y+I
  612. 200 IFJ=6THENX=X-I:Y=Y+I
  613. 201 IFJ=0THENP=1:I=1
  614. 202 IF(P/15)=INT(P/15)THENI=I+1
  615. 203 IFJTHENP=P+1
  616. 204 IFI>5THENI=5
  617. 210 IF(X<256)AND(X>-1)THEN220
  618. 211 IF(PEEK(53264)AND4)THENPOKE53264,0:X=255:GOTO220
  619. 212 POKE53264,PEEK(53264)OR4:X=0
  620. 220 IF(PEEK(53279)AND4)THENEND
  621. 230 POKEV+4,X:POKEV+5,Y:GOTO120
  622. 60000 DATA 255, 128, 0, 255, 0, 0
  623. 60001 DATA 254, 0, 0, 252, 0, 0
  624. 60002 DATA 252, 0, 0, 254, 0, 0
  625. 60003 DATA 231, 0, 0, 195, 128, 0
  626. 60004 DATA 129, 192, 0, 0, 224, 0
  627. 60005 DATA 0, 112, 0, 0, 48, 0
  628. 60006 DATA 0, 0, 0, 0, 0, 0
  629. 60007 DATA 0, 0, 0, 0, 0, 0
  630. 60008 DATA 0, 0, 0, 0, 0, 0
  631. 60009 DATA 0, 0, 0, 0, 0, 0
  632. 60010 DATA 0, 0, 0, 0, 0, 0
  633. READY.
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651. rATASTIC pROGRAMMING, iNC.                          PAGE 12.
  652. 931228-0134.MLS                             28 dECEMBER 1993
  653.  
  654. uuencodings. iF YOU DO NOT WANT TO TYPE IT IN, HERE ARE THE
  655. UUENCODINGS FOR THREE PROGRAMS. gfx.ptr-exampl IS THE BASIC
  656. PROGRAM. blr.sprite IS THE BASIC LOADER FOR THE MACHINE
  657. LANGUAGE PROGRAM. gfx.spr-editor IS MY SPRITE EDITOR. hERE
  658. ARE THE INSTRUCTIONS FOR THAT -> TYPE run AND YOU WILL GET A
  659. GRID. dESIGN YOUR SPRITE WITH ASTRICTS * ON THE GRID. tHEN
  660. GO RIGHT BELOW THE GRID AND TYPE run 100. iT WILL DRAW YOUR
  661. SPRITE. iF YOU ARE NOT SATISIFIED, THEN FIX IT WITH * AND .
  662. AND THEN run 100 AGAIN AND IT WILL RE-DRAW. wHEN YOU ARE
  663. SATISFIED, YOU CAN SAVE THE NUMBERED DATA TO A seq FILE OR
  664. HAVE THE PROGRAM WRITE DATA STATEMENTS FOR YOU. iF YOU WANT
  665. TO SAVE IT TO A SEQ FILE run 200, TO LOAD IT run 300. tO
  666. PRINT OUT DATA run 400. wHEN IT ASKS YOU TO ERASE THE
  667. PROGRAM TELL IT YES. iT WILL GIVE YOU DATA STATEMENTS AND
  668. SOME LINES TO SET UP THE SPRITE. iTS SMALL, BUT IT WORKS AND
  669. IS ALL i NEED TO MAKE AWESOME SPRITE DEMOS LIKE THE ONES
  670. CONTAINED WITHIN THIS DOCUMENT!
  671.  
  672. BEGIN 644 GFX.PTR-EXAMPL
  673. m_0@="___f<<h-2dzes4s,c@p+#8zes4s,c@q+#8_.@@*_(%8lc@s,j0x,s*j
  674. m-c,zaudzeu@l63j"6_!*"_\_6+(r-34z6;(r,#__<_@4_%:r-3,r-#@@("_@
  675. m(#j/(%-%5"_g5b<@5$\@5de#($%$4@"-"!x_eu:j,c$l-"_@.h\@14y!0dq%
  676. m(%-04b_s_*\(*_"75jht,2pq("_zcr!#3tq/4b!34%(@,r!72$e410#0"#(_
  677. meu:j-"q8("_@.h\@4$]3251)3tx@4u!2(#,@6_#q"#p_eu:j-2q9("_@.h\@
  678. m4$]3251)3tx@4u!2(#,@60_5"48_es(p-#(l,3,@.h\@1$%402!"3$]#2r!&
  679. m3u(@4u!2,p_p"5__es4s,c8t+#_@.h\@,"!-4t(@3t8@6__x"5h_2;(q_%8)
  680. m6p"9qr@q-#<i(bhj4u1/4"hj("_@("_@("_b_'<)9_"/($u/5d4@4u!2251%
  681. m($)9($i/65-424-+($e._(\);@"/(%!/4e0@,b!354)23u5424y%_*,)>_!*
  682. mlj@@pb@u-c,r,"fo,34_t_ey_(lh*,(h-38s,c_iks$v*:tq-bfr,*>_("_@
  683. m("_@("_@("_@("_@("__wpez_$&rpb@u,s(w.2d_[@f"_(m*lc&g6;)9jtd_
  684. m_0f,_(m*lc*g6;)9jdd_#_j6_(m*lc2g6+)8jtd_&pj@_(m*lcbg6+)8jdd_
  685. m,_jj_(m*lc6g6+)8jtdz6;)9jtd_10jt_(m*lcfg6;)9jtdz6+)8jdd_6pj^
  686. m_(m*lc$piubr6*i).efr6:i)_'_*r_"+2k(viubr6*m).efr6:i)_($*r0"+
  687. m2k(piu"r,3i)lc$_fpk*_(lh4*tq-2frm2a0k3$u*:=)ldfj,0"h"ll_btjg
  688. m4+)0jc$_m0k,_(m)l36g2;(u_,t*t@"+*%bs,c4v*:\h6+&k,2fg,c(p_/,*
  689. mtp"+*,(h-3,r-c0iks0iiy<u,s(v-"pp.ebr,c4u.hdr,c__#0o4_)<u,s(v
  690. m-"s"*#4s,c8t*;_t.ebr,__a"]p_brc"*#4s,c<y*:\t*:>__#@+y@"75jht
  691. m+%@zeu:j-2q9.hdq,c__50m@zh,@,c4u+"_q,c@l(#_l(#(u-2p@,"p@,_!p
  692. m"v'j@r_r-30l(#_l(#_l(#(u,bp@,"p@,_"+"v+j@r_r-3(l(#_l(#_l(#(u
  693. m-"p@,"p@,_"h"v/j@r_r,s$l(#_l(#_l(#$y-2p@,3(x+"_p_,4+9.j#(#$r
  694. m.2p@,3dr+"_p+"_p+"_r,c0l(#__wpmezh,@,"p@,3$r+"_p+"_p+"_t."p@
  695. m,_#v"v;j@r_p+"_p+"_p+"_p+"_p+"_p__t,9^j#(#_l(#_l(#_l(#_l(#_l
  696. m(#__)_qhzh,@,"p@,"p@,"p@,"p@,"p@,__[#&gj@r_p+"_p+"_p+"_p+"_p
  697. =+"_p_%(,:nj#(#_l(#_l(#_l(#_l(#_l(#______
  698. _
  699. END
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709. rATASTIC pROGRAMMING, iNC.                          PAGE 13.
  710. 931228-0134.MLS                             28 dECEMBER 1993
  711.  
  712. BEGIN 644 BLR.SPRITE
  713. m_0@?"___cr!34%))5$4a("_@("!"62!2051!4u1)0p_u"_$_cr_y,s$r,c@m
  714. m,#$s-"y-3%,_4p@"_(\@4u!2251%("t@2d]94u1)0tl@34]615(_<_@*_(%8
  715. mlc0y,34ri#0y-3$w.h=9.i=8+%dz@@"a"!0_f2)&24y)4ta%1"xn+a$1$1$1
  716. m$1$1$2(zf2)365,t.3$u,b!43r!35$%25"(_[0@>_)<@-#dt,3<l,"_zcr!3
  717. m4$5%1"_q($e3($9!4u1%4u0@,"!)4r!33$]715-4(#(u-2!)4r!33$]7+"_u
  718. m($e3($9!4u0@15a#__t)8.j#(#$v.2p@-2p@,s(l(#(q,"p@,c4u+"_q-cd_
  719. m+_eazh,@-bp@,30q+"_s,bp@,c_x+"_q-#$l(#,s_$t)8nj#(#(p."p@,38r
  720. m+"_v-"p@,3@y+"_t,rp@,3ds_&t)8^j#(#$u-rp@-c0l(#,l(#(p,bp@,c_x
  721. m+"_r-#<_cpedzh,@,38y+"_r-34l(#$t,2p@,s_l(#$y,rp@,38y_*\)9>j#
  722. m(#(p,"p@,30q+"_s,2p@,3ds+"_q-cdl(#0_spefzh,@,30q+"_r,2p@,c_x
  723. m+"_q-cdl(#$l(#$t,0#p"6?j@r_t,2p@,c_x+"_q-s,l(#,p+"_q.3,l(#$t
  724. m,0_0"fcj@r_t+"_r,#@l(#$w,rp@,s$l(#$y,rp@,30q_#_*:>j#(#4l(#(p
  725. m."p@,38y+"_q,rp@,30q+"_r-3__3@ijzh,@-rp@,38y+"_p+"_q-#$l(#$v
  726. m+"_r,#@_;@ikzh,@,38y+"_q+"_q-#$l(#(y+"_q.3,l(#$v.0"."fsj@r_s
  727. m,rp@,38p+"_q.3,l(#,r+"_s,"p@,3<q_*t*;>j#(#$w,rp@,"p@,c(p+"_t
  728. m,2p@,34l(#$t,0#,"f[j@r_s,bp@,3ds+"_q-s,l(#_l(#(r,"p@-#$_z@io
  729. mzh,@,38l(#(p."p@,2p@.38l(#$w,rp@,s$_"pmpzh,@,c_x+"_q-s,l(#,r
  730. m+"_q.3,l(#$w,bp@,s$_+_mqzh,@,3ds+"_q-s0l(#,p+"_q.3,l(#$w,rp@
  731. m,s(_3_mrzh,@,3ds+"_r,#$l(#$t+"_r,#@l(#0l(#$s-@!m"w/j@r_w-bp@
  732. m,c_q+"_q.3(l(#$w,rp@,s(l(#$y,p","w3j@r_r,#$l(#$s+"_r,#@l(#0l
  733. m(#(p,"p@-s8_k@muzh,@,c_q+"_q.3(l(#$w,rp@,s(l(#$y,rp@,c_q_,t+
  734. m=nj#(#$q+"_r,#@l(#0l(#(p,bp@-s8l(#(p,0#m"w?j@r_q.3(l(#$w,rp@
  735. m,s(l(#$y,rp@,c_q+"_w__t,>.j#(#(p."p@-"p@,c,r+"_w-bp@,c_q+"_q
  736. m.3(_+@qyzh,@,3<s+"_s,bp@,3ds+"_r,#$l(#$p+"_r,#@_3@qzzh,@-2p@
  737. m,c_r+"_q,s8l(#<v+"_r,#$l(#$y,@!n#'oj@r_q-s,l(#,r+"_q.3,l(#(p
  738. m,2p@-bp@,c_x_(x,?.j#(#4l(#$s-bp@,c,r+"_w-bp@,c_q+"_q.3(_k@q]
  739. mzh,@,3<s+"_s,bp@,3ds+"_r,#$l(#4l(#(p._#.#'[j@r_u+"_r,s(l(#(p
  740. m,"p@-s8l(#(p,2p@,3dr_.x,?^j#(#$w,rp@,s(l(#$y,rp@,c_q+"_y+"_r
  741. m,#@_#@v_zh,@-2p@,c_r+"_r,#_l(#<v+"_r,#$l(#$y,@_m#8'j@r_w-bp@
  742. m,c_q+"_q.3(l(#,r+"_r+"_q.3,_3@v"zh,@-s8l(#(s-"p@,3dr+"_q-s,l
  743. m(#$v+"_r,#@_:pv#zh,@-#$l(#0l(#(t,"p@,3_l(#$v.2p@,_",#83j@r_q
  744. m-#$l(#$v+"_r,#@l(#$v,bp@,c4u+"_w-@"l#87j@r_r,s0l(#$y,bp@,3<s
  745. m+"_q-bp@,c_x+"_y_,h-anj#(#0l(#$t,2p@,38l(#(p."p@,38r+"_p_.d-
  746. ma^j#(#$w,rp@,s$l(#(p."p@-#$l(#0l(#(t,__(#hcj@r_q+"_y-bp@,30r
  747. m+"_s,"p@,3ds+"_q-#__*_z)zh,@,s$l(#$y,rp@,30r+"_t+"_r,#@l(#$t
  748. m,_!&#hkj@r_u+"_r,#@l(#<v+"_w."p@,3dr+"_y-@!f#hoj@r_q-#_l(#,q
  749. m+"_q.3,l(#<r+"_q-3(l(#<r_(8.c.j#(#$v,"p@,"p@,3,v+"_q-#_l(#0q
  750. m+"_r,#@_j0z-zh,@,c_x+"_r-3_l(#$p-"p@,38x+"_q,#0l(#$v,_#(#h[j
  751. m@r_q+"_q-#$l(#0q+"_r,#@l(#$w,bp@,s$_y0z/zh,@,3ds+"_y-bp@.38l
  752. m(#$l(#4v+"_u-__##y#j@r_q-"p@,30w+"_t,bp@-#(l(#@s+"_x-__@#y'j
  753. m@r_w.2p@.#_l(#0r+"_t,bp@,"p@,c4u_#t/dnj#(#$r."p@,"p@,c4u+"_p
  754. m+"_p+"_r-30_6_^3zh,@,"p@,"p@,c4r+"_p+"_p+"_r-3(_<p^4zh,@,"p@
  755. m,"p@,c4t+"_p+"_p+"_r,s$_d_^5zh,@,"p@,"p@,3du+"_q,c@l(#_l(#$r
  756. m.0"k#y;j@r_q.3(l(#_l(#_l(#(r-"p@,"p@,_#%#y?j@r_q,3(l(#_l(#_l
  757. m(#0x+"_p+"_p_-p/f.j#(#_l(#_l(#_l(#_l(#_l(#__\p^9zh,@,"p@,"p@
  758. m,"p@,"p@,"p@,__*$)kj@r_p+"_p+"_p+"_p+"_p+"_p_"$0f^j#(#_l(#_l
  759. m(#_l(#_l(#_l(#__.!"<zh,@,"p@,"p@,"p@,"p@,"p@,_!/$)wj@r_p+"_p
  760. /+"_p+"_p+"_p+"_p____
  761. _
  762. END
  763.  
  764.  
  765.  
  766.  
  767. rATASTIC pROGRAMMING, iNC.                          PAGE 14.
  768. 931228-0134.MLS                             28 dECEMBER 1993
  769.  
  770. BEGIN 644 GFX.SPR-EDITOR
  771. m_0@e"___es4s,c@p+#8zf2(%(ci$ll(h,3@v*3j+1+,xit2r._!4"_h_f<<h
  772. m,30w*3lz@52r,:0r,3j!6;(qi#(t.idb+b([.h)9.idz@e0zb3(p_'$("p"!
  773. m6+(x,s*d.#,rjc8s.h=9.i=8+%dz@e@_j_@,_%:r-3,r-#@zeu:j,c$l-#j7
  774. m3e5%(%=)5$@@64]54b!04d]'4d%-($a%4d4_!0d4_%:r-3,r-#@zeu:j,c$l
  775. m-#j75jht,2pq.i=6jc0l,c4u.i=6jc4l,c_p.i<r,#0r+#$s_#h)'@"!6+(x
  776. m,s*d.#,rjc8t.i=8+#(u-3j".h%8lc@s,jhv-*0x,s*ijs$zeu@l,#j".h__
  777. m>0ed_)pz0[(x.h%9lc"d,c_z@5br,:0r-#i0ll(h,3_r,zi8jc0pk%di.d.r
  778. m0zlq.hm0lc0riu&r4:hrkd,_f0en_(m#lc"g0[(x.d>r1zhq.i<x,s&j1rq1
  779. m.e&r,_"c"7@_@e@z@ed_j0f"_(__v0g(_(4b4t%612!&24q%3d%-12([020z
  780. mgs(l."pr+")34%(n(ji!)*hb+%,l5r(__0k2_(%8lc@s,j0x,s*j-c0zf#(l
  781. mpba8*3j".j_r.idbd9$b.sj__$0*+_&%(dq/040@1de,14y!344b.t$d.i\r
  782. m+#@l,bpb4u!2+b*j022j(bq3+%(b.h%8lc@s,j0x,s*j-c0za#(l60!3"c8!
  783. meu@l63j"6#j@,@!9"d_!@_"!"i_!a2)35$%25"!,24y%($y534)%4b([03j+
  784. m0;(pit&r-c_p,#__l0j:_9dbdq$1(cj902)$051!(clz@5br,:0u.ig"*#@s
  785. m,:i8jd\i(itl(clz@e@_p0jd_9g"*#@s,:i8jd\i_-h*k@&+3[*q-c.gf2)$
  786. m3ty%(2(zb30v,_#x"k@!f2)!/2)!jc$b.d\](d^j-b(z1t]43s0q,__c"\(!
  787. mes$y."ps.i<v,s$l,3,zes8s,bpq,sj7-c,s+#$s.idb$r([.h__80o,_84b
  788. m15)!4t4@4%)/1u)!32!!3d0@2e535"!,14%612!$051!(cm!)#j+r"a!)"pq
  789. m*;.q(edbis4p,_"3"]8!3+(p("_@("_@("_@("_@("_@("_@("_@("_@("_@
  790. m("_@("_@("_@("_@("_@_+<+x_&9(i,1$2(zf4pzf2),/2),jc$p.sj+3+$t
  791. m-#"g-3$p_,p+z@&9(ci'3u1/-#@p(cj)-#4p_._+]_&9(i,1$4q)4u0b.hdt
  792. m-3__$ps^_9dbdq$1(cj!6+(t-#"d-3(pj3$p.ie8.h)8.h%8lc8s,:0v-#_z
  793. meu@l,3,z@e@_)pp(_i<q.3@l,3_zf2(3(clz@__^#&#j@r_p+"_p+"_p+"_p
  794. m+"_p+"_p_%4,8>j#(#_l(#_l(#_l(#_l(#_l(#__;_qbzh,@,"p@,"p@,"p@
  795. m,"p@,"p@,_"##&/j@r_p+"_p+"_p+"_p+"_p+"_p_)h,9.j#(#_l(#_l(#_l
  796. m(#_l(#_l(#__l0qezh,@,"p@,"p@,"p@,"p@,"p@,_#(#&;j@r_p+"_p+"_p
  797. m+"_p+"_p+"_p_-\,9^j#(#_l(#_l(#_l(#_l(#_l(#__]@qhzh,@,"p@,"p@
  798. m,"p@,"p@,"p@,__-#6gj@r_p+"_p+"_p+"_p+"_p+"_p_"0-:nj#(#_l(#_l
  799. (#_l(#_l(#_l(#______
  800. _
  801. END
  802. --
  803. rOSS mARTIN aNDREW cAPDEVILLE OF rATASTIC pROGRAMMING, iNC.
  804. iNET: jIADAR@DELPHI.COM                   604 n sT pATRICK
  805.       jIADAR@MINTIR.NEW-ORLEANS.LA.US     nEW oRLEANS/la 70119
  806. fIDO: 1:396/65 tHE dIGITAL cOTTAGE        eYE OF lEVETA ii!
  807. a pROUD pROGRAMMER OF THE cOMMODORE 64/128!!!
  808. -- tHE CHANT OF A RESISTOR: OHM... OHM... OHM...
  809.  
  810.