SHARE
TWEET

PONG.ASM V4.01

a guest Dec 27th, 2012 35 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;---------------------------------------------------;
  2. ;---------------------------------------------------;
  3. ; Name:                 PONG.ASM                                                        ;
  4. ; Use:                  DTI's version of the PONG game          ;
  5. ;---------------------------------------------------;
  6. ; Copyright:    (C)2012 DTI                                                     ;
  7. ;                               Dysfunctional Technologies, Inc.        ;
  8. ;                               All Rights Reserved                                     ;
  9. ;---------------------------------------------------;
  10. ; Author:               Timothy S. Carlson                                      ;
  11. ;                           Dysfunctional Technologies, Inc.    ;
  12. ; Date:                 December 28, 2012                                       ;
  13. ; Version:              V4.01                                                           ;
  14. ;---------------------------------------------------;
  15. ;---------------------------------------------------;
  16. ; WEBSITE:              www.dysfunctionaltechnologies.com       ;
  17. ; EMAIL:                tscarlson@gmail.com                                     ;
  18. ;                                                                                                       ;
  19. ; You are welcome to use this code as you see fit,      ;
  20. ; however - not to be used in for-profit products       ;
  21. ; unless we have come to a monetary agreement.          ;
  22. ;                                                                                                       ;
  23. ; If this code is used, credit given is appreciated     ;
  24. ;---------------------------------------------------;
  25. ;---------------------------------------------------;
  26. ; VERSION LOG:                                                                          ;
  27. ; V3.00:  Modified characters, character placement,     ;
  28. ;                 and field to look more like the real PONG     ;
  29. ; V3.01:  Renamed to PIC-PONG                                           ;
  30. ;               - Added 64x224 mode for copyright message       ;
  31. ;               - Added piezo speaker for sounds                        ;
  32. ;               - Added ball 'slow-down' method                         ;
  33. ;               - Added special dot as court divider            ;
  34. ; V3.02: Fixed my program memory page issues.           ;
  35. ;               - Revamped _Draw_Scores. Cleaner, faster.       ;
  36. ;               - Redid title - "PONG FOR THE 12F1840"          ;
  37. ;               - Added _DEBUG_ turns on/off GP2 VSYNC Pulse;
  38. ;               - Moved some procs to high page:                        ;
  39. ;                       - _Draw_Title                                                   ;
  40. ;                       - _Clear_Court                                                  ;
  41. ;                       - _Copyright                                                    ;
  42. ;                       - _Initialize_System                                    ;
  43. ;               - More comments                                                         ;
  44. ;               - Modified comments discussing the number of;
  45. ;                 lines, what they do, and how long (in ms)     ;
  46. ;                 for a complete video frame.                           ;
  47. ;                 260 lines * 64us each = 16.64ms per frame     ;
  48. ;                 The current timing is ~16.645ms per frame     ;
  49. ;               - General Cleanup                                                       ;
  50. ;               - Added the software version number at the      ;
  51. ;                 bottom right of the screen, in the copy-      ;
  52. ;                 right strip.                                                          ;
  53. ; V3.03:  Updated version number display to V3.03       ;
  54. ;               - Adding more comments                                          ;
  55. ;               - Changed references to 'Half_Line' and         ;
  56. ;                 'Full_Line' in some proc titles to            ;
  57. ;                 '30us_Line' and '60us_Line' respectively.     ;
  58. ;                 (_Blank_Half_Line => _Blank_30us_Line)        ;
  59. ;               - Moved some line generation procs to high      ;
  60. ;                 page, added PAGESELs, adjusted timings.       ;
  61. ;                       - _Blank_60us_Line                                              ;
  62. ;                       - _Blank_30us_Line                                              ;
  63. ;                       - _Special_30us_Line                                    ;
  64. ;                       - _Inverted_30us_Line                                   ;
  65. ;               - Everything possible has been moved to the ;
  66. ;                 high page of memory, with the exceptions:     ;
  67. ;                       - _Update_Paddle_1                                              ;
  68. ;                       - _Update_Paddle_2                                              ;
  69. ;                       - _Update_Ball                                                  ;
  70. ;                 I am only using 655 words in the low page     ;
  71. ;                 of program memory now (H'000'-H'28E') out     ;
  72. ;                 of 4096 bytes (2048 words). The high page ;
  73. ;                 is packed - H'800'-H'D92'. I left the         ;
  74. ;                 above procs in the low page as I will be      ;
  75. ;                 making modifications / enhancements to        ;
  76. ;                 these routines in the near future.            ;
  77. ;               - NOTE: If you see what appears to be stray     ;
  78. ;                 NOPs strewn about in the code - DON'T         ;
  79. ;                 REMOVE THEM. They are there for video         ;
  80. ;                 timings purposes. Remove them and DOOM!       ;
  81. ; V3.04:  Updated version number display to V3.04       ;
  82. ;               - Changed the use of Timer0 (8bit) from         ;
  83. ;                 loading zero and waiting for count to         ;
  84. ;                 loading (inverse) count and waiting for       ;
  85. ;                 overflow flag (TMR0IF) in INTCON.                     ;
  86. ;               - Created _Clear_Items and _Draw_Items.         ;
  87. ;                 _Clear_Items clears ball, paddles, scores     ;
  88. ;                 _Draw_Items draws ball, paddles, scores       ;
  89. ;               - Removed _Update_Scores, since one half        ;
  90. ;                 went into _Clear_Items and the other half     ;
  91. ;                 went into _Draw_Items. There was nothing      ;
  92. ;                 left, except for 60us line generation,        ;
  93. ;                 after that.                                                           ;
  94. ; V3.05:  Updated verion number display to V3.05        ;
  95. ;               - Changed field size from 32x56 to 32x48        ;
  96. ;               - Changed VIDEO_BUFFER start from H'2010' to;
  97. ;                 H'2020' to recover 16 bytes of data memory;
  98. ;                 that are now available due to small field     ;
  99. ;               - Added dynamic creation of blank lines         ;
  100. ;                 depending on screen size. This will keep      ;
  101. ;                 the screen centered (vertically) in the       ;
  102. ;                 viewable area of the video frame and keep     ;
  103. ;                 the video frame at 60hz                                       ;
  104. ;               - Added court sidelines so that the limits      ;
  105. ;                 of the court can be easily determined no      ;
  106. ;                 matter the size of the field.                         ;
  107. ;               - Added 'SERVICE' markers (arrows next to       ;
  108. ;                 the scores) to easily determine who's turn;
  109. ;                 it is to serve. Last one scored serves.       ;
  110. ;               - Reduced size of title screen and changed      ;
  111. ;                 title back to just 'PONG'. Title screen       ;
  112. ;                 was too large and the time to draw (or        ;
  113. ;                 clear) was blowing WAY past the 60us limit;
  114. ;               - Changed wall collision detection so that      ;
  115. ;                 Ball_Dir_Y can be something other that 1  ;
  116. ;                 or -1. This opens the door to implementing;
  117. ;                 'english' on the ball                                         ;
  118. ;               - Service is now done from the paddle, not      ;
  119. ;                 center court. And the beginning Ball_Y        ;
  120. ;                 position is centered with the paddle          ;
  121. ;               - Ball angle on service (Ball_Dir_Y at 1 or     ;
  122. ;                 for the left paddle, -1 or -2 for the         ;
  123. ;                 right paddle) depends on paddle position      ;
  124. ;               - The starting position of the scores has       ;
  125. ;                 been dropped one line to keep the score       ;
  126. ;                 display from bumping against the court        ;
  127. ;                 side line.                                                            ;
  128. ;               - With a field of 32x48, PONG has been          ;
  129. ;                 testing on a Sony PS1 LCD monitor, a small;
  130. ;                 PHILIPS LCD TV, and a regular CRT TV which;
  131. ;                 all work well. However, a 32" Chinese made;
  132. ;                 LCD TV does not work - maybe because it       ;
  133. ;                 wants 50hz? Any feedback on various TVs       ;
  134. ;                 used with PONG would be appreciated.          ;
  135. ;               - Added a check to see if the left or right     ;
  136. ;                 button is being held - this keeps from        ;
  137. ;                 holding the button down and continuously      ;
  138. ;                 serving the ball.                                                     ;
  139. ;               - Even MORE comments added. I sure hope I       ;
  140. ;                 remove all of the old (irrelevent) ones.      ;
  141. ;               - Back to the large graphics to the title.      ;
  142. ;                 I split it into two 60us lines. Also did      ;
  143. ;                 a lot of tricks to reduce the instruction     ;
  144. ;                 count. _Clear_Screen replaces _Clear_Items;
  145. ;                 and will clear the screen OR display the      ;
  146. ;                 title at the appropriate time.                        ;
  147. ;               - EVERYTHING uses TIMER0 now, except for        ;
  148. ;                 generating a positive 2us sync pulse. Not     ;
  149. ;                 enough cycles to incorporate the timer.       ;
  150. ;               - All loose code and commented out lines        ;
  151. ;                 removed. All timings at spec. RELEASE!        ;
  152. ; V3.06:  Updated verion number display to V3.06        ;
  153. ;               - Corrected a few bugs in ball/paddle           ;
  154. ;                 collision detection.                                          ;
  155. ;               - Corrected a bug in _Clear_Screen                      ;
  156. ;               - Moved all 30us stuff to a procedure called;
  157. ;                 _Vertical_Sync.                                                       ;
  158. ;               - Split the code as evenly as I could           ;
  159. ;                 between the low page and high page of         ;
  160. ;                 program memory. Lots of room for editing      ;
  161. ;                 now without worrying about bumping the        ;
  162. ;                 ceilings. There's around 900 program words;
  163. ;                 free in each page.                                            ;
  164. ;               - I don't think there are any major bugs -      ;
  165. ;                 just enhancements waiting in the wings.       ;
  166. ;                 Time to final release and move on!            ;
  167. ; V3.07:  Updated version number display to V3.07       ;
  168. ;               - Added a blank line and then two white         ;
  169. ;                 lines just after the copyright lines. Just;
  170. ;                 because I like it better.                                     ;
  171. ;               - Fixed the 'shoot off in a horitontal angle;
  172. ;                 when hitting the upper sideline wall' bug.;
  173. ;                 If you saw the V3.06 demo video, it was       ;
  174. ;                 occurring frequently and the OCD in me        ;
  175. ;                 said "You gotta fix that".                            ;
  176. ;                 That's it for this version - RELEASE!         ;
  177. ; V4.00:  Updated version number display to V4.00       ;
  178. ;               - Converting timings of video signal to         ;
  179. ;                 TIMER0 Interrupt Service Routine.                     ;
  180. ;               - Added a 'shake loose' of the PICKIT if        ;
  181. ;                 attached. Without the 'shake loose', the      ;
  182. ;                 PICKIT hold GPIO1 low, which is the RBUTT.;
  183. ; V4.01:  Updated version number display to V4.01       ;
  184. ;               - Added COMPUTER mode for player 2. Hold        ;
  185. ;                 down the LEFT button when powering up. A      ;
  186. ;                 large 'C' should display in the upper         ;
  187. ;                 right corner. PLAYER 2 is now controlled      ;
  188. ;                 by the computer.                                                      ;
  189. ;---------------------------------------------------;
  190. ;---------------------------------------------------;
  191.  
  192. ;---------------------------------------------------;
  193. ; Project Defines                                                                       ;
  194. ;---------------------------------------------------;
  195. #DEFINE         _PONG.ASM_                                                              ;
  196. #DEFINE         _MAIN_MODULE_                                                   ;
  197. ;---------------------------------------------------;
  198. #DEFINE         _DEBUG_                                 TRUE                    ;
  199. #DEFINE         _USE_THUMBSTICKS_               TRUE                    ;
  200. ;---------------------------------------------------;
  201.  
  202. ;---------------------------------------------------;
  203. ; Includes                                                                                      ;
  204. ;---------------------------------------------------;
  205. ; This file has some common defines (TRUE, FALSE,       ;
  206. ; etc.) used throughout the program. It also has the;
  207. ; CONFIGURATION_BITS settings for the PIC, which are;
  208. ; only processed in the module that has the define      ;
  209. ; _MAIN_MODULE_.                                                                        ;
  210. ;---------------------------------------------------;
  211. #INCLUDE        Common.INC                                                              ;
  212. ;---------------------------------------------------;
  213.  
  214. ;---------------------------------------------------;
  215. ; Macros                                                                                        ;
  216. ;---------------------------------------------------;
  217. DELAY           MACRO   DTIME                                                   ;
  218.         ;-----------------------------------------------;
  219.         ; The time munger used EVERYWHERE                               ;
  220.         ;-----------------------------------------------;
  221.         MOVLW   DTIME                                                                   ;
  222.         MOVWF   DTemp                                                                   ;
  223.         DECFSZ  DTemp, F                                                                ;
  224.         GOTO    $-1                                                                             ;
  225.         ;-----------------------------------------------;
  226.         ENDM                                                                                    ;
  227.                                                                                                         ;
  228. DO_BIT          MACRO   THISBIT, NOPS                                   ;
  229.         ;-----------------------------------------------;
  230.         ; Sets the DAC either WHITE or BLACK                    ;
  231.         ; Does a specified delay in NOPs                                ;
  232.         ;-----------------------------------------------;
  233.         ; NOTE: This is used in the higher resolution   ;
  234.         ; COPYRIGHT lines and when generating the               ;
  235.         ; gameplay data lines.                                                  ;
  236.         ;-----------------------------------------------;
  237.         ; Note that a WHITE bit check is done first and ;
  238.         ; then a BLACK bit check. If you reverse the    ;
  239.         ; order, things look a bit differently on the   ;
  240.         ; screen. That is because there is a two                ;
  241.         ; instruction delay between writing the bit in  ;
  242.         ; one state or in the other state. Reversing the;
  243.         ; order (BLACK first, then WHITE) causes black  ;
  244.         ; 'gaps'. This order is most visually appealing,;
  245.         ; at least to me.                                                               ;
  246.         ;-----------------------------------------------;
  247.         BTFSC   INDF1, THISBIT                                                  ;
  248.         BSF             PORTA, VIDEO_0_BIT                                              ;
  249.         BTFSS   INDF1, THISBIT                                                  ;
  250.         BCF             PORTA, VIDEO_0_BIT                                              ;
  251. #IF NOPS > 0                                                                            ;
  252.         NOP                                                                                             ;
  253. #ENDIF                                                                                          ;
  254. #IF NOPS > 1                                                                            ;
  255.         NOP                                                                                             ;
  256. #ENDIF                                                                                          ;
  257. #IF NOPS > 2                                                                            ;
  258.         NOP                                                                                             ;
  259. #ENDIF                                                                                          ;
  260. #IF NOPS > 3                                                                            ;
  261.         NOP                                                                                             ;
  262. #ENDIF                                                                                          ;
  263. #IF NOPS > 4                                                                            ;
  264.         NOP                                                                                             ;
  265. #ENDIF                                                                                          ;
  266. #IF NOPS > 5                                                                            ;
  267.         NOP                                                                                             ;
  268. #ENDIF                                                                                          ;
  269. #IF NOPS > 6                                                                            ;
  270.         NOP                                                                                             ;
  271. #ENDIF                                                                                          ;
  272. #IF NOPS > 7                                                                            ;
  273.         NOP                                                                                             ;
  274. #ENDIF                                                                                          ;
  275. #IF NOPS > 8                                                                            ;
  276.         NOP                                                                                             ;
  277. #ENDIF                                                                                          ;
  278. #IF NOPS > 9                                                                            ;
  279.         NOP                                                                                             ;
  280. #ENDIF                                                                                          ;
  281.         ;-----------------------------------------------;
  282.         ENDM                                                                                    ;
  283.                                                                                                         ;
  284. SET_DAC2BIT     MACRO   COLOR                                                   ;
  285.         ;-----------------------------------------------;
  286.         ; Sets the 2bit DAC to the desired color                ;
  287.         ; Both bits are done at once, or else some weird;
  288.         ; transitions on the DAC can be seen. Okay if   ;
  289.         ; just colors (WHITE, GRAY, BLACK), but if a    ;
  290.         ; sync pulse shows up out context, it can really;
  291.         ; mess up the video timings                                             ;
  292.         ;-----------------------------------------------;
  293.         MOVFW   PORTA                                                                   ;
  294.         ANDLW   ~(VIDEO_0 | VIDEO_1)                                    ;
  295.         IORLW   COLOR                                                                   ;
  296.         MOVWF   PORTA                                                                   ;
  297.         ;-----------------------------------------------;
  298.         ENDM                                                                                    ;
  299.                                                                                                         ;
  300. AUDIO_PROC MACRO                                                                        ;
  301.         ;-----------------------------------------------;
  302.         ; This handles the sound generation during the  ;
  303.         ; game. Sounds are produced by toggling GPIO1   ;
  304.         ; at the end of each 60us line - if it is               ;
  305.         ; toggled during ALL 60us lines, you get a high ;
  306.         ; frequency (around 7800hz). If every other 60us;
  307.         ; line, the frequency is around lower. This     ;
  308.         ; procedure is NOT run during VERTICAL SYNC time;
  309.         ; to keep AUDIO from altering the timings of the;
  310.         ; video, causing distortions of the image on the;
  311.         ; screen.                                                                               ;
  312.         ;-----------------------------------------------;
  313.         BTFSC   System_Status, VERTICAL_SYNC_BIT                ;
  314.         GOTO    $+15                                                                    ;
  315.         BTFSS   System_Status, BUZZ_BIT                                 ;
  316.         GOTO    $+13                                                                    ;
  317.         DECFSZ  Buzz_Count, F                                                   ;
  318.         GOTO    $+11                                                                    ;
  319.         MOVFW   Buzz_Reload                                                             ;
  320.         MOVWF   Buzz_Count                                                              ;
  321.         MOVLW   AUDIO                                                                   ;
  322.         XORWF   PORTA, F                                                                ;
  323.         DECFSZ  Buzz_Dur_LO, F                                                  ;
  324.         GOTO    $+5                                                                             ;
  325.         DECFSZ  Buzz_Dur_HI, F                                                  ;
  326.         GOTO    $+3                                                                             ;
  327.         BCF             System_Status, BUZZ_BIT                                 ;
  328.         BSF             PORTA, AUDIO_BIT                                                ;
  329.         ;-----------------------------------------------;
  330.         ENDM                                                                                    ;
  331.                                                                                                         ;
  332. #DEFINE SIG_2US         2                                                               ;
  333. #DEFINE SIG_4US         4                                                               ;
  334. #DEFINE SIG_30US        30                                                              ;
  335. #DEFINE SIG_60US        60                                                              ;
  336.                                                                                                         ;
  337. START_TIMING MACRO SIG_1_LEN, SIG_2_LEN                         ;
  338.         AUDIO_PROC                                                                              ;
  339.                                                                                                         ;
  340.         BTFSC   PORTA, VIDEO_1_BIT                                              ;
  341.         GOTO    $-1                                                                             ;
  342.                                                                                                         ;
  343. #IF (SIG_1_LEN == 2)                                                            ;
  344.         MOVLW   ~((SIG_1_LEN*2)-0)                                              ;
  345. #ENDIF                                                                                          ;
  346. #IF (SIG_1_LEN == 4)                                                            ;
  347.         MOVLW   ~((SIG_1_LEN*3)-1)                                              ;
  348. #ENDIF                                                                                          ;
  349. #IF (SIG_1_LEN == 30)                                                           ;
  350.         MOVLW   ~((SIG_1_LEN*4)-5)                                              ;
  351. #ENDIF                                                                                          ;
  352. #IF (SIG_1_LEN == 60)                                                           ;
  353.         MOVLW   ~((SIG_1_LEN*4)-5)                                              ;
  354. #ENDIF                                                                                          ;
  355.                                                                                                         ;
  356.         MOVWF   Next_Vid_Timing                                                 ;
  357.                                                                                                         ;
  358.         BTFSS   PORTA, VIDEO_1_BIT                                              ;
  359.         GOTO    $-1                                                                             ;
  360.                                                                                                         ;
  361. #IF (SIG_2_LEN == 2)                                                            ;
  362.         MOVLW   ~((SIG_2_LEN*2)-0)                                              ;
  363. #ENDIF                                                                                          ;
  364. #IF (SIG_2_LEN == 4)                                                            ;
  365.         MOVLW   ~((SIG_2_LEN*3)-1)                                              ;
  366. #ENDIF                                                                                          ;
  367. #IF (SIG_2_LEN == 30)                                                           ;
  368.         MOVLW   ~((SIG_2_LEN*4)-5)                                              ;
  369. #ENDIF                                                                                          ;
  370. #IF (SIG_2_LEN == 60)                                                           ;
  371.         MOVLW   ~((SIG_2_LEN*4)-5)                                              ;
  372. #ENDIF                                                                                          ;
  373.                                                                                                         ;
  374.         MOVWF   Next_Vid_Timing                                                 ;
  375.         ;-----------------------------------------------;
  376.         ENDM                                                                                    ;
  377.                                                                                                         ;
  378. PLAY_SOUND      MACRO FREQUENCY, DURATION                               ;
  379.         ;-----------------------------------------------;
  380.         ; This will play a sound of a specified                 ;
  381.         ; frequency for a specified duration                    ;
  382.         ; The lower the frequency number, the higher    ;
  383.         ; the frequency. Duration is also a function    ;
  384.         ; of the frequency number, so if frequency goes ;
  385.         ; up, adjust the duration down.                                 ;
  386.         ;-----------------------------------------------;
  387.         ; Sound is played during 4us HORIZONTAL SYNC    ;
  388.         ; times of the video signal. There is a short   ;
  389.         ; period during VERTICAL SYNC where nothing is  ;
  390.         ; done with sound because there ARE no 4us              ;
  391.         ; HSYNCs. There are 2us HSYNCs during VSYNC, but;
  392.         ; there isn't enough time to process the sound  ;
  393.         ; code without stretching out the 2us HSYNCs    ;
  394.         ; beyond 2us, and that will mess up the video   ;
  395.         ; timings. The total time between the last 4us  ;
  396.         ; HSYNC before VSYNC and the first 4us HSYNC    ;
  397.         ; after VSYNC is only ~512us, so it's barely    ;
  398.         ; noticable. After all, it's only a game...             ;
  399.         ;-----------------------------------------------;
  400.         ; NOTE that a FREQUENCY of 0 is treated as a    ;
  401.         ; frequency of 256. 0<=Freq<=255. The count is  ;
  402.         ; decremented BEFORE it is checked to be 0, so  ;
  403.         ; starting with 0 will dec, see 255, continue   ;
  404.         ; loop. Just so you are warned.                                 ;
  405.         ;-----------------------------------------------;
  406.         MOVLW   FREQUENCY                                                               ;
  407.         MOVWF   Buzz_Count                                                              ;
  408.         MOVWF   Buzz_Reload                                                             ;
  409.         MOVLW   LOW DURATION                                                    ;
  410.         MOVWF   Buzz_Dur_LO                                                             ;
  411.         MOVLW   HIGH DURATION                                                   ;
  412.         MOVWF   Buzz_Dur_HI                                                             ;
  413.         BSF             System_Status, BUZZ_BIT                                 ;      
  414.         ;-----------------------------------------------;
  415.         ENDM                                                                                    ;
  416. ;---------------------------------------------------;
  417.  
  418. ;---------------------------------------------------;
  419. ; Defines                                                                                       ;
  420. ;---------------------------------------------------;
  421.         ; You have to chose between using all buttons,  ;
  422.         ; or using a thumbstick with a button. I might  ;
  423.         ; be able to figure out a way to automatically  ;
  424.         ; determine which is connected, but for now you ;
  425.         ; will just have to decide which you want, set  ;
  426.         ; _USE_THUMBSTICKS_ to either TRUE or FALSE, and;
  427.         ; re-compile the project.                                               ;
  428.         ;-----------------------------------------------;
  429. #IF     _USE_THUMBSTICKS_                                                               ;
  430. #DEFINE RJOY                            H'01'                                   ; Right THUMBSTICK
  431. #DEFINE RJOY_BIT                           0                                    ; GPIO 0 - PIN 7
  432. #DEFINE AUDIO                           H'02'                                   ; Audio Output when set to OUTPUT
  433. #DEFINE AUDIO_BIT                          1                                    ; GPIO 1 - PIN 6
  434. #DEFINE RBUTT                           H'02'                                   ; Right BUTTON when set to INPUT
  435. #DEFINE RBUTT_BIT                          1                                    ; GPIO 1 - PIN 6
  436. #DEFINE LJOY                            H'04'                                   ; Left THUMBSTICK
  437. #DEFINE LJOY_BIT                           2                                    ; GPIO 2 - PIN 5
  438. #DEFINE LBUTT                           H'08'                                   ; Left BUTTON
  439. #DEFINE LBUTT_BIT                          3                                    ; GPIO 3 - PIN 4
  440. #ELSE   ;!_USE_THUMBSTICKS_                                                     ;
  441. #DEFINE RBUTT_1                         H'01'                                   ; Right BUTTON 1
  442. #DEFINE RBUTT_1_BIT                        0                                    ; GPIO 0 - PIN 7
  443. #DEFINE RBUTT_2                         H'02'                                   ; Right BUTTON 2
  444. #DEFINE RBUTT_2_BIT                        1                                    ; GPIO 1 - PIN 6
  445. #DEFINE LBUTT_2                         H'04'                                   ; Left BUTTON 2
  446. #DEFINE LBUTT_2_BIT                        2                                    ; GPIO 2 - PIN 5
  447. #DEFINE LBUTT_1                         H'08'                                   ; Left BUTTON 1
  448. #DEFINE LBUTT_1_BIT                        3                                    ; GPIO 3 - PIN 4
  449. #ENDIF  ;_USE_THUMBSTICKS_                                                      ;
  450.         ;-----------------------------------------------;
  451.                                                                                                         ;
  452.         ;-----------------------------------------------;
  453.         ; 2bit DAC definitions. The 2bit DAC is just a  ;
  454.         ; pair of resistors on two GPIOs, which feeds   ;
  455.         ; the VIDEO out.                                                                ;
  456.         ;-----------------------------------------------;
  457. #DEFINE VIDEO_1                         H'10'                                   ; 1K ohm
  458. #DEFINE VIDEO_1_BIT                        4                                    ; GPIO 5 - PIN 2
  459. #DEFINE VIDEO_0                         H'20'                                   ; 470 ohm
  460. #DEFINE VIDEO_0_BIT                        5                                    ; GPIO 4 - PIN 3
  461.                                                                                                         ;
  462. #DEFINE COLOR_WHITE                     (VIDEO_0 + VIDEO_1)             ;
  463. #DEFINE COLOR_BLACK                     VIDEO_1                                 ;
  464. #DEFINE COLOR_GRAY                      VIDEO_0                                 ;
  465. #DEFINE COLOR_SYNC                      0                                               ;
  466.         ;-----------------------------------------------;
  467.                                                                                                         ;
  468.         ;-----------------------------------------------;
  469.         ; There are 224 lines created during _Data_Lines;
  470.         ; However, because of memory limitations, I             ;
  471.         ; cannot allocate enough memory for the video   ;
  472.         ; buffer. So - I do have enough memory for 56   ;
  473.         ; lines - 1/4 of 224 - so we display each line  ;
  474.         ; of data 4 times.                                                              ;
  475.         ;-----------------------------------------------;
  476. #DEFINE MAX_LINES                       56                                              ; DON'T EXCEED 56
  477.         ;-----------------------------------------------;
  478.         ; Make certain NUM_LINES is an even number so   ;
  479.         ; all of the math works out properly. Make sure ;
  480.         ; NOT to exceed the MAX_LINES value. And don't  ;
  481.         ; change NUM_LINES for less than 9 - that's the ;
  482.         ; paddle height, so that will probably break it.;
  483.         ; But then - the paddle height is adjustable    ;
  484.         ; with just changing a define (below), so - who ;
  485.         ; knows!                                                                                ;
  486.         ;-----------------------------------------------;
  487. #DEFINE NUM_LINES                       48                                              ; DON'T EXCEED 48
  488.         ;-----------------------------------------------;
  489.                                                                                                         ;
  490.         ;-----------------------------------------------;
  491.         ; This is my method of making the game easier or;
  492.         ; harder - either I update and draw the ball    ;
  493.         ; every frame (fast ball), or every other frame ;
  494.         ; (not as fast), or every 3rd frame (normal             ;
  495.         ; ball) or higher for slower. Set MAX_BALL_WAIT ;
  496.         ; to the desired speed (1=fast, 2=not as fast,  ;
  497.         ; 3=normal, 4=slower, etc.). This is hardcoded  ;
  498.         ; right now, a change requires a recompile. I   ;
  499.         ; have plans to allocate another precious byte  ;
  500.         ; of data memory so that the ball speed can be  ;
  501.         ; changed by a menu item.                                               ;
  502.         ;-----------------------------------------------;
  503. #DEFINE DRAW_BALL_BIT           0                                               ;
  504. #DEFINE MAX_BALL_WAIT           3                                               ;
  505.                                                                                                         ;
  506.         ;-----------------------------------------------;
  507.         ; Just a bunch of hardcoded starting points,    ;
  508.         ; sizes, and bit-munching stuff for the various ;
  509.         ; graphics.                                                                             ;
  510.         ;-----------------------------------------------;
  511.         ; I use the PIC's LINEAR MEMORY scheme to create;
  512.         ; a contiguous video buffer. Grab the MicroChip ;
  513.         ; documentation and read up. Then go search on  ;
  514.         ; the web for some docs that will really explain;
  515.         ; it for you.                                                                   ;
  516.         ;-----------------------------------------------;
  517. #DEFINE VIDEO_BUFFER_START      H'2030'                                 ;
  518. #DEFINE FIELD_HEIGHT            NUM_LINES                               ;
  519. #DEFINE FIELD_WIDTH                     32                                              ;
  520. #DEFINE LEFT_SCORE_START        H'01'                                   ;
  521. #DEFINE RIGHT_SCORE_START       H'02'                                   ;
  522. #DEFINE LEFT_PADDLE_START       H'00'                                   ;
  523. #DEFINE LEFT_PADDLE_BIT         H'40'                                   ;
  524. #DEFINE LEFT_PADDLE_MASK        H'BF'                                   ;
  525. #DEFINE RIGHT_PADDLE_START      H'03'                                   ;
  526. #DEFINE RIGHT_PADDLE_BIT        H'02'                                   ;
  527. #DEFINE RIGHT_PADDLE_MASK       H'FD'                                   ;
  528. #DEFINE PADDLE_HEIGHT           9                                               ;
  529. #DEFINE BALL_HEIGHT                     3                                               ;
  530. #DEFINE SERVICE_1_START         H'00'                                   ;
  531. #DEFINE SERVICE_2_START         H'03'                                   ;
  532. #DEFINE COMPUTER_2_START        H'07'                                   ;
  533. ;---------------------------------------------------;
  534.  
  535. ;---------------------------------------------------;
  536. ;---------------------------------------------------;
  537. USER_DATA_1             UDATA           H'020'                                  ;
  538. ;---------------------------------------------------;
  539. Ball_X                  res     1                                                               ; 20
  540. Ball_Y                  res     1                                                               ; 21
  541. Ball_Dir_X              res     1                                                               ; 22
  542. Ball_Dir_Y              res     1                                                               ; 23
  543. Paddle_1_Y              res     1                                                               ; 24
  544. Paddle_2_Y              res     1                                                               ; 25
  545. Score_1                 res     1                                                               ; 26
  546. Score_2                 res     1                                                               ; 27
  547. Ball_Wait               res     1                                                               ; 28
  548. ;---------------------------------------------------;
  549. ; Bit definitions for System_Status                                     ;
  550. ;---------------------------------------------------;
  551. #DEFINE BUZZ                            H'01'                                   ;
  552. #DEFINE BUZZ_BIT                           0                                    ;
  553. #DEFINE P1_SERVICE                      H'02'                                   ;
  554. #DEFINE P1_SERVICE_BIT             1                                    ;
  555. #DEFINE P2_SERVICE                      H'04'                                   ;
  556. #DEFINE P2_SERVICE_BIT             2                                    ;
  557. #DEFINE P1_PRESSED                      H'08'                                   ;
  558. #DEFINE P1_PRESSED_BIT             3                                    ;
  559. #DEFINE P2_PRESSED                      H'10'                                   ;
  560. #DEFINE P2_PRESSED_BIT             4                                    ;
  561. #DEFINE VERTICAL_SYNC           H'20'                                   ;
  562. #DEFINE VERTICAL_SYNC_BIT          5                                    ;
  563. #DEFINE WHICH_CR                        H'40'                                   ;
  564. #DEFINE WHICH_CR_BIT               6                                    ;
  565. #DEFINE P2_COMPUTER                     H'80'                                   ;
  566. #DEFINE P2_COMPUTER_BIT            7                                    ;
  567. ;---------------------------------------------------;
  568. System_Status   res 1                                                           ; 29
  569. Buzz_Count              res     1                                                               ; 2A
  570. Buzz_Reload             res     1                                                               ; 2B
  571. Buzz_Dur_HI             res 1                                                           ; 2C
  572. Buzz_Dur_LO             res 1                                                           ; 2D
  573. ;---------------------------------------------------;
  574. ; Consume Left_Overs / Smaller_Screen for your data     ;
  575. ; variables as need. LO/SS is just here to pad to       ;
  576. ; push Video_Buffer1 to the proper spot.                        ;
  577. Left_Overs              res     2                                                               ; 2E-2F
  578. ;---------------------------------------------------;
  579. ; Only 6 bytes left - 2A-2F                                                     ;
  580. ;---------------------------------------------------;
  581. Smaller_Screen  res     32                                                              ; 30-4F
  582. ;---------------------------------------------------;
  583. ; I've pushed the VIDEO_BUFFER to H'2020', since the;
  584. ; field has become smaller (32x48 vs 32x56). The        ;
  585. ; required size of the VIDEO_BUFFER is also less, so;
  586. ; this will give up 24 more bytes of data memory for;
  587. ; use in game programming.                                                      ;
  588. ;---------------------------------------------------;
  589. ; 16 additional bytes left (smaller screen) - 30-3F     ;
  590. ;---------------------------------------------------;
  591. ; We don't access the Video_BufferX arrays directly,;
  592. ; we use LINEAR PAGE memory through the FSR register;
  593. ; LINEAR PAGE memory groups the data memory at 0x20,;
  594. ; 0xA0, and Ox120 into a contiguous linear page.        ;
  595. ; Note that the shared memory (at the top 16 bytes      ;
  596. ; of each page) is NOT included in the LINEAR PAGE      ;
  597. ; memory mapping.                                                                       ;
  598. ;---------------------------------------------------;
  599. ; MEMORY MAP - LINEAR PAGE MEMORY - 240 bytes total     ;
  600. ; 0x2000-0x204F - 0x020-0x06F   80 bytes                        ;
  601. ; 0x2050-0x20BF - 0x0A0-0x0EF   80 bytes                        ;
  602. ; 0x20A0-0x20EF - 0x120-0x16F   80 bytes                        ;
  603. ;---------------------------------------------------;
  604. ; Since out max lines (now) is 48, we need 48x8         ;
  605. ; (192) bytes of memory for the screen buffer. This     ;
  606. ; leaves us with 48 bytes of data memory for program;
  607. ; variables, plus the 16 in shared memory for 64!       ;
  608. ;---------------------------------------------------;
  609. Video_Buffer1   res     32                                                              ; 50-6F
  610. ;---------------------------------------------------;
  611. ;---------------------------------------------------;
  612.  
  613. ;---------------------------------------------------;
  614. ;---------------------------------------------------;
  615. USER_DATA_2             UDATA           H'0A0'                                  ;
  616. ;---------------------------------------------------;
  617. Video_Buffer2   res     80                                                              ; A0-EF
  618. ;---------------------------------------------------;
  619. ;---------------------------------------------------;
  620.  
  621. ;---------------------------------------------------;
  622. ;---------------------------------------------------;
  623. USER_DATA_3             UDATA           H'120'                                  ;
  624. ;---------------------------------------------------;
  625. Video_Buffer3   res     80                                                              ; 120-6F
  626. ;---------------------------------------------------;
  627. ;---------------------------------------------------;
  628.  
  629. ;---------------------------------------------------;
  630. ;---------------------------------------------------;
  631. USER_DATA_S             UDATA_SHR       H'070'                                  ;
  632. ;---------------------------------------------------;
  633. Temp1                   res     1                                                               ; 70
  634. Temp2                   res     1                                                               ; 71
  635. DTemp                   res     1                                                               ; 72
  636. DL_Count                res     1                                                               ; 73
  637. Line_Data               res     4                                                               ; 74-77
  638. Line_Count              res     1                                                               ; 78
  639. Repeat_Count    res 1                                                           ; 79
  640. Vid_Timing              res     1                                                               ; 7A
  641. Next_Vid_Timing res     1                                                               ; 7B
  642. VSync_Count             res     1                                                               ; 7C
  643. ;---------------------------------------------------;
  644. ; Only 3 bytes left! - 7D-7F                                            ;
  645. ;---------------------------------------------------;
  646. ;---------------------------------------------------;
  647.  
  648. ;---------------------------------------------------;
  649. ;---------------------------------------------------;
  650. ; Reset Vector Code - Entry point from reset            ;
  651. ;---------------------------------------------------;
  652. RESET_VECT              CODE            H'000'                                  ;
  653. ;---------------------------------------------------;
  654.         ; Initialize the hardware and memory elements.  ;
  655.         ; This is a FAR CALL to a proc in the high              ;
  656.         ; page of Program Memory, so it needs the               ;
  657.         ; PAGESEL before and after the CALL to properly ;
  658.         ; set the upper 2 bits in the program counter.  ;
  659.         ; I am slowly converting ALL CALLs (and some    ;
  660.         ; GOTOs) to having PAGESEL before and after, but;
  661.         ; the added instruction cycles mess up the video;
  662.         ; timings in some spots. To be done slowly and  ;
  663.         ; surely.                                                                               ;
  664.         ;-----------------------------------------------;
  665.         PAGESEL _Initialize_System                                              ;
  666.         GOTO    _Initialize_System                                              ;
  667.         NOP                                                                                             ;
  668.         NOP                                                                                             ;
  669. ;---------------------------------------------------;
  670. ;---------------------------------------------------;
  671.  
  672. ;---------------------------------------------------;
  673. ;---------------------------------------------------;
  674. ; Interrupt Vector Code                                                         ;
  675. ;---------------------------------------------------;
  676. INT_VECT                CODE            H'004'                                  ;
  677. ;---------------------------------------------------;
  678. _IV_Entry:                                                                                      ;
  679.         ;-----------------------------------------------;
  680.         ; Toggle the BLACK/SYNC bit                                             ;
  681.         ;-----------------------------------------------;
  682.         MOVLW   VIDEO_1                                                                 ;
  683.         XORWF   PORTA, F                                                                ;
  684.         ;-----------------------------------------------;
  685.                                                                                                         ;
  686.         ;-----------------------------------------------;
  687.         ; Load current timing into TMR0, load next              ;
  688.         ; timing into current timing.                                   ;
  689.         ;-----------------------------------------------;
  690.         MOVFW   Vid_Timing                                                              ;
  691.         MOVWF   TMR0                                                                    ;
  692.         MOVFW   Next_Vid_Timing                                                 ;
  693.         MOVWF   Vid_Timing                                                              ;
  694.         ;-----------------------------------------------;
  695. _IV_Exit:                                                                                       ;
  696.         BCF             INTCON, TMR0IF                                                  ;
  697.         RETFIE                                                                                  ;
  698. ;---------------------------------------------------;
  699. ;---------------------------------------------------;
  700.  
  701. ;---------------------------------------------------;
  702. ;---------------------------------------------------;
  703. ; User Code in the low page of Program Memory           ;
  704. ; More user code (USER_CODE_2) can be found in the      ;
  705. ; high page of Program Memory, starting at H'800'       ;
  706. ;---------------------------------------------------;
  707. USER_CODE_1             CODE            H'00C'                                  ;
  708. ;---------------------------------------------------;
  709.  
  710. ;---------------------------------------------------;
  711. _Update_Paddles:                                                                        ;
  712. ;---------------------------------------------------;
  713.         ; 60us BLACK line                                                               ;
  714.         ;-----------------------------------------------;
  715.         PAGESEL _Black_Line_60us                                                ;
  716.         CALL    _Black_Line_60us                                                ;
  717.         PAGESEL $                                                                               ;
  718.         ;-----------------------------------------------;
  719.                                                                                                         ;
  720. #IF     _USE_THUMBSTICKS_                                                               ;
  721. _UP1_Update:                                                                            ;
  722.         ;-----------------------------------------------;
  723.         ; ADC Magic     (Channel 0)                                                     ;
  724.         ;-----------------------------------------------;
  725.         BANKSEL ADCON1                                                                  ;
  726.         MOVLW   H'60'                                                                   ; Left Justified
  727.         MOVWF   ADCON1                                                                  ; FOSC/64, VREF
  728.         MOVLW   B'00001011'                                                             ; AN2, ADC GO, ADC On
  729.         MOVWF   ADCON0                                                                  ;
  730.         BTFSC   ADCON0, GO                                                              ; Wait for conversion
  731.         GOTO    $-1                                                                             ;
  732.         MOVFW   ADRESH                                                                  ; Get result
  733.         BANKSEL MEMORY                                                                  ;
  734.         ;-----------------------------------------------;
  735.                                                                                                         ;
  736.         ;-----------------------------------------------;
  737.         ; The following code uses the joystick in a     ;
  738.         ; normal fashion - paddle position follows the  ;
  739.         ; joystick position.                                                    ;
  740.         ;-----------------------------------------------;
  741.         MOVWF   Paddle_1_Y                                                              ;
  742.         RRF             Paddle_1_Y, F                                                   ;
  743.         RRF             Paddle_1_Y, F                                                   ;
  744.         MOVLW   H'3F'                                                                   ;
  745.         ANDWF   Paddle_1_Y, F                                                   ;
  746.         MOVLW   23                                                                              ;
  747.         SUBWF   Paddle_1_Y, F                                                   ;
  748.         ;-----------------------------------------------;
  749.                                                                                                         ;
  750.         ;-----------------------------------------------;
  751.         ; The following code uses the joystick in a     ;
  752.         ; button fashion - once the joystick crosses a  ;
  753.         ; certain threshold (position), the joystick    ;
  754.         ; reading is treating as an UP or DOWN button   ;
  755.         ; press and either increments or decrements the ;
  756.         ; paddle position.                                                              ;
  757.         ;-----------------------------------------------;
  758. ;       MOVWF   Temp1                                                                   ;
  759. ;       MOVLW   H'90'                                                                   ;
  760. ;       SUBWF   Temp1, W                                                                ;
  761. ;       BTFSS   STATUS, C                                                               ;
  762. ;       DECF    Paddle_1_Y, F                                                   ;
  763. ;       MOVLW   H'98'                                                                   ;
  764. ;       SUBWF   Temp1, W                                                                ;
  765. ;       BTFSC   STATUS, C                                                               ;
  766. ;       INCF    Paddle_1_Y, F                                                   ;
  767.         ;-----------------------------------------------;
  768.                                                                                                         ;
  769.         ;-----------------------------------------------;
  770.         ; Make sure the paddle position stays within the;
  771.         ; range of the field.                                                   ;
  772.         ;-----------------------------------------------;
  773. _UP1_Limit_Paddle_Position:                                                     ;
  774.         ;-----------------------------------------------;
  775.         ; Lower Limit                                                                   ;
  776.         ;-----------------------------------------------;
  777.         BTFSC   Paddle_1_Y, MSB                                                 ;
  778.         CLRF    Paddle_1_Y                                                              ;
  779.         ;-----------------------------------------------;
  780.         ; Upper Limit                                                                   ;
  781.         ;-----------------------------------------------;
  782.         MOVLW   NUM_LINES - PADDLE_HEIGHT                               ;
  783.         SUBWF   Paddle_1_Y, W                                                   ;
  784.         BTFSS   STATUS, C                                                               ;
  785.         GOTO    _UP1_Update_Done                                                ;
  786.         MOVLW   NUM_LINES - PADDLE_HEIGHT                               ;
  787.         MOVWF   Paddle_1_Y                                                              ;
  788.         ;-----------------------------------------------;
  789.                                                                                                         ;
  790. _UP1_Update_Done:                                                                       ;
  791. #ELSE   ;!_USE_THUMBSTICKS_                                                     ;
  792. _UP1_Check_Up:                                                                          ;
  793.         CLRW                                                                                    ;
  794.         XORWF   Paddle_1_Y, W                                                   ;
  795.         BTFSC   STATUS, Z                                                               ;
  796.         GOTO    _UP1_Check_Down                                                 ;
  797.         BTFSS   PORTA, LBUTT_1_BIT                                              ;
  798.         DECF    Paddle_1_Y, F                                                   ;
  799. _UP1_Check_Down:                                                                        ;
  800.         MOVLW   NUM_LINES - PADDLE_HEIGHT                               ;
  801.         XORWF   Paddle_1_Y, W                                                   ;
  802.         BTFSC   STATUS, Z                                                               ;
  803.         GOTO    _UP1_Draw_Paddle                                                ;
  804.         BTFSS   PORTA, LBUTT_2_BIT                                              ;
  805.         INCF    Paddle_1_Y, F                                                   ;
  806. #ENDIF  ;_USE_THUMBSTICKS_                                                      ;
  807.                                                                                                         ;
  808. #IF     _USE_THUMBSTICKS_                                                               ;
  809. _UP2_Update:                                                                            ;
  810.         BTFSC   System_Status, P2_COMPUTER_BIT                  ;
  811.         GOTO    _UP2_Computer                                                   ;
  812.                                                                                                         ;
  813.         ;-----------------------------------------------;
  814.         ;-----------------------------------------------;
  815. _UP2_Human:                                                                                     ;
  816.         ;-----------------------------------------------;
  817.         ; ADC Magic     (Channel 0)                                                     ;
  818.         ;-----------------------------------------------;
  819.         BANKSEL ADCON1                                                                  ;
  820.         MOVLW   H'60'                                                                   ; Left Justified
  821.         MOVWF   ADCON1                                                                  ; FOSC/64, VREF
  822.         MOVLW   B'00000011'                                                             ; AN0, ADC GO, ADC On
  823.         MOVWF   ADCON0                                                                  ;
  824.         BTFSC   ADCON0, GO                                                              ; Wait for conversion
  825.         GOTO    $-1                                                                             ;
  826.         MOVFW   ADRESH                                                                  ; Get result
  827.         BANKSEL MEMORY                                                                  ;
  828.         ;-----------------------------------------------;
  829.                                                                                                         ;
  830.         MOVWF   Temp1                                                                   ;
  831.         MOVLW   H'60'                                                                   ;
  832.         SUBWF   Temp1, W                                                                ;
  833.         BTFSS   STATUS, C                                                               ;
  834.         INCF    Paddle_2_Y, F                                                   ;
  835.         MOVLW   H'9F'                                                                   ;
  836.         SUBWF   Temp1, W                                                                ;
  837.         BTFSC   STATUS, C                                                               ;
  838.         DECF    Paddle_2_Y, F                                                   ;
  839.         BTFSC   Paddle_2_Y, MSB                                                 ;
  840.         CLRF    Paddle_2_Y                                                              ;
  841.         MOVLW   NUM_LINES - PADDLE_HEIGHT                               ;
  842.         SUBWF   Paddle_2_Y, W                                                   ;
  843.         BTFSS   STATUS, C                                                               ;
  844.         GOTO    _UP2_Human_Done                                                 ;
  845.         MOVLW   NUM_LINES - PADDLE_HEIGHT                               ;
  846.         MOVWF   Paddle_2_Y                                                              ;
  847. _UP2_Human_Done:                                                                        ;
  848.         GOTO    _UP_Exit                                                                ;
  849.         ;-----------------------------------------------;
  850.                                                                                                         ;
  851.         ;-----------------------------------------------;
  852.         ;-----------------------------------------------;
  853. _UP2_Computer:                                                                          ;
  854.         ;-----------------------------------------------;
  855.         MOVLW   (FIELD_WIDTH * 7) / 9                                   ;
  856.         SUBWF   Ball_X, W                                                               ;
  857.         BTFSS   STATUS, C                                                               ;
  858.         GOTO    _UP2_Computer_Done                                              ;
  859.         ;-----------------------------------------------;
  860.         MOVFW   Paddle_2_Y                                                              ;
  861.         ADDLW   PADDLE_HEIGHT / 2                                               ;
  862.         SUBWF   Ball_Y, W                                                               ;
  863.         BTFSS   STATUS, C                                                               ;
  864.         DECF    Paddle_2_Y, F                                                   ;
  865.         ;-----------------------------------------------;
  866.         MOVFW   Paddle_2_Y                                                              ;
  867.         ADDLW   PADDLE_HEIGHT / 2                                               ;
  868.         SUBWF   Ball_Y, W                                                               ;
  869.         BTFSC   STATUS, C                                                               ;
  870.         INCF    Paddle_2_Y, F                                                   ;
  871.         ;-----------------------------------------------;
  872.         BTFSC   Paddle_2_Y, MSB                                                 ;
  873.         CLRF    Paddle_2_Y                                                              ;
  874.         MOVLW   NUM_LINES - PADDLE_HEIGHT                               ;
  875.         SUBWF   Paddle_2_Y, W                                                   ;
  876.         BTFSS   STATUS, C                                                               ;
  877.         GOTO    _UP2_Computer_Done                                              ;
  878.         MOVLW   NUM_LINES - PADDLE_HEIGHT                               ;
  879.         MOVWF   Paddle_2_Y                                                              ;
  880.         ;-----------------------------------------------;
  881. _UP2_Computer_Done:                                                                     ;
  882.         GOTO    _UP_Exit                                                                ;
  883.                                                                                                         ;
  884. #ELSE   ;!_USE_THUMBSTICKS_                                                     ;
  885. _UP2_Check_Up:                                                                          ;
  886.         CLRW                                                                                    ;
  887.         XORWF   Paddle_2_Y, W                                                   ;
  888.         BTFSC   STATUS, Z                                                               ;
  889.         GOTO    _UP2_Check_Down                                                 ;
  890.         BTFSS   PORTA, RBUTT_1_BIT                                              ;
  891.         DECF    Paddle_2_Y, F                                                   ;
  892. _UP2_Check_Down:                                                                        ;
  893.         MOVLW   NUM_LINES - PADDLE_HEIGHT                               ;
  894.         XORWF   Paddle_2_Y, W                                                   ;
  895.         BTFSC   STATUS, Z                                                               ;
  896.         GOTO    _UP2_Draw_Paddle                                                ;
  897.         BTFSS   PORTA, RBUTT_2_BIT                                              ;
  898.         INCF    Paddle_2_Y, F                                                   ;
  899. #ENDIF  ;_USE_THUMBSTICKS_                                                      ;
  900.                                                                                                         ;
  901. _UP_Exit:                                                                                       ;
  902.         RETURN                                                                                  ;
  903. ;---------------------------------------------------;
  904.  
  905. ;---------------------------------------------------;
  906. _Update_Ball:                                                                           ;
  907. ;---------------------------------------------------;
  908.         ; 60us BLACK line                                                               ;
  909.         ;-----------------------------------------------;
  910.         PAGESEL _Black_Line_60us                                                ;
  911.         CALL    _Black_Line_60us                                                ;
  912.         PAGESEL $                                                                               ;
  913.                                                                                                         ;
  914. _UB_Check_Wait:                                                                         ;
  915.         ;-----------------------------------------------;
  916.         ; This is the delay so the ball isn't so fast   ;
  917.         ;-----------------------------------------------;
  918.         DECFSZ  Ball_Wait, F                                                    ;
  919.         GOTO    _UB_Exit                                                                ;
  920.                                                                                                         ;
  921.         MOVLW   MAX_BALL_WAIT                                                   ;
  922.         MOVWF   Ball_Wait                                                               ;
  923.         ;-----------------------------------------------;
  924.                                                                                                         ;
  925.         ;-----------------------------------------------;
  926.         ; Is the ball moving? (Ball_Dir_X or Ball_Dir_Y ;
  927.         ; not equal to zero?) If so, update the ball    ;
  928.         ; position. Otherwise, check for serve.                 ;
  929.         ;-----------------------------------------------;
  930.         CLRW                                                                                    ;
  931.         XORWF   Ball_Dir_X, W                                                   ;
  932.         BTFSS   STATUS, Z                                                               ;
  933.         GOTO    _UB_Update_Ball_X                                               ;
  934.         CLRW                                                                                    ;
  935.         XORWF   Ball_Dir_Y, W                                                   ;
  936.         BTFSS   STATUS, Z                                                               ;
  937.         GOTO    _UB_Update_Ball_X                                               ;
  938.         ;-----------------------------------------------;
  939.                                                                                                         ;
  940.         ;-----------------------------------------------;
  941.         ; Check if left player pushed button to serve   ;
  942.         ;-----------------------------------------------;
  943. _UB_Check_L_Serve:                                                                      ;
  944.         BTFSS   System_Status, P1_SERVICE_BIT                   ;
  945.         GOTO    _UB_Check_R_Serve                                               ;
  946.         BTFSC   PORTA, LBUTT_BIT                                                ;
  947.         GOTO    _UB_Check_L_Unpressed                                   ;
  948.         BTFSC   System_Status, P1_PRESSED_BIT                   ;
  949.         GOTO    _UB_Check_R_Serve                                               ;
  950.         BSF             System_Status, P1_PRESSED_BIT                   ;
  951.         BCF             System_Status, P1_SERVICE_BIT                   ;
  952.         BCF             System_Status, P2_SERVICE_BIT                   ;
  953.         MOVLW   1                                                                               ;
  954.         MOVWF   Ball_Dir_X                                                              ;
  955.         MOVFW   Paddle_1_Y                                                              ;
  956.         ADDLW   PADDLE_HEIGHT / 2                                               ;
  957.         SUBLW   NUM_LINES / 2                                                   ;
  958.         MOVLW   -2                                                                              ;
  959.         BTFSC   STATUS, C                                                               ;
  960.         MOVLW   1                                                                               ;
  961.         MOVWF   Ball_Dir_Y                                                              ;
  962.         MOVLW   2                                                                               ;
  963.         MOVWF   Ball_X                                                                  ;
  964.         MOVFW   Paddle_1_Y                                                              ;
  965.         ADDLW   PADDLE_HEIGHT / 2                                               ;
  966.         MOVWF   Ball_Y                                                                  ;
  967.         GOTO    _UB_Service                                                             ;
  968. _UB_Check_L_Unpressed:                                                          ;
  969.         BCF             System_Status, P1_PRESSED_BIT                   ;
  970.         ;-----------------------------------------------;
  971.                                                                                                         ;
  972.         ;-----------------------------------------------;
  973.         ; Check if right player pushed button to serve  ;
  974.         ;-----------------------------------------------;
  975. _UB_Check_R_Serve:                                                                      ;
  976.         BTFSC   System_Status, P2_COMPUTER_BIT                  ;
  977.         GOTO    _UB_CRS_Computer                                                ;
  978.         ;-----------------------------------------------;
  979. _UB_CRS_Human:                                                                          ;
  980.         BTFSS   System_Status, P2_SERVICE_BIT                   ;
  981.         GOTO    _UB_Exit                                                                ;
  982.         BTFSC   System_Status, BUZZ_BIT                                 ;
  983.         GOTO    _UB_Exit                                                                ;
  984.         BANKSEL TRISA                                                                   ;
  985.         BSF             TRISA, RBUTT_BIT                                                ; Set as input (for BUTTON)
  986.         BANKSEL PORTA                                                                   ;
  987.         BTFSC   PORTA, RBUTT_BIT                                                ;
  988.         GOTO    _UB_CRS_Unpressed                                               ;
  989.         BANKSEL TRISA                                                                   ;
  990.         BCF             TRISA, RBUTT_BIT                                                ; Set as output (for AUDIO)
  991.         BANKSEL MEMORY                                                                  ;
  992.         BTFSC   System_Status, P2_PRESSED_BIT                   ;
  993.         GOTO    _UB_Exit                                                                ;
  994.         BANKSEL TRISA                                                                   ;
  995.         BCF             TRISA, RBUTT_BIT                                                ; Set as output (for AUDIO)
  996.         BANKSEL MEMORY                                                                  ;
  997.         GOTO    _UB_CRS_Init                                                    ;
  998.         ;-----------------------------------------------;
  999.                                                                                                         ;
  1000.         ;-----------------------------------------------;
  1001. _UB_CRS_Computer:                                                                       ;
  1002.         BTFSS   System_Status, P1_SERVICE_BIT                   ;
  1003.         BTFSS   System_Status, P2_SERVICE_BIT                   ;
  1004.         GOTO    _UB_CRS_Unpressed                                               ;
  1005.         BTFSC   System_Status, P2_PRESSED_BIT                   ;
  1006.         ;-----------------------------------------------;
  1007.                                                                                                         ;
  1008.         ;-----------------------------------------------;
  1009. _UB_CRS_Init:                                                                           ;
  1010.         BSF             System_Status, P2_PRESSED_BIT                   ;
  1011.         BCF             System_Status, P1_SERVICE_BIT                   ;
  1012.         BCF             System_Status, P2_SERVICE_BIT                   ;
  1013.         MOVLW   -1                                                                              ;
  1014.         MOVWF   Ball_Dir_X                                                              ;
  1015.         MOVFW   Paddle_2_Y                                                              ;
  1016.         ADDLW   PADDLE_HEIGHT / 2                                               ;
  1017.         SUBLW   NUM_LINES / 2                                                   ;
  1018.         MOVLW   -1                                                                              ;
  1019.         BTFSC   STATUS, C                                                               ;
  1020.         MOVLW   2                                                                               ;
  1021.         MOVWF   Ball_Dir_Y                                                              ;
  1022.         MOVLW   29                                                                              ;
  1023.         MOVWF   Ball_X                                                                  ;
  1024.         MOVFW   Paddle_2_Y                                                              ;
  1025.         ADDLW   PADDLE_HEIGHT / 2                                               ;
  1026.         MOVWF   Ball_Y                                                                  ;
  1027.         GOTO    _UB_Service                                                             ;
  1028.         ;-----------------------------------------------;
  1029.                                                                                                         ;
  1030.         ;-----------------------------------------------;
  1031. _UB_CRS_Unpressed:                                                                      ;
  1032.         BCF             System_Status, P2_PRESSED_BIT                   ;
  1033.         GOTO    _UB_Exit                                                                ;
  1034.         ;-----------------------------------------------;
  1035.                                                                                                         ;
  1036.         ;-----------------------------------------------;
  1037. _UB_Service:                                                                            ;
  1038.         MOVLW   H'11'                                                                   ;
  1039.         XORWF   Score_1, W                                                              ;
  1040.         BTFSC   STATUS, Z                                                               ;
  1041.         GOTO    $+5                                                                             ;
  1042.         MOVLW   H'11'                                                                   ;
  1043.         XORWF   Score_2, W                                                              ;
  1044.         BTFSS   STATUS, Z                                                               ;
  1045.         GOTO    _UB_Exit                                                                ;
  1046.         CLRF    Score_1                                                                 ;
  1047.         CLRF    Score_2                                                                 ;
  1048.         GOTO    _UB_Exit                                                                ;
  1049.         ;-----------------------------------------------;
  1050.                                                                                                         ;
  1051.         ;-----------------------------------------------;
  1052. _UB_Update_Ball_X:                                                                      ;
  1053.         MOVFW   Ball_Dir_X                                                              ; Update Ball X Position
  1054.         ADDWF   Ball_X, F                                                               ;
  1055.         ;-----------------------------------------------;
  1056.                                                                                                         ;
  1057.         ;-----------------------------------------------;
  1058. _UB_Update_Ball_X_Min:                                                          ;
  1059.         MOVLW   0                                                                               ;
  1060.         XORWF   Ball_X, W                                                               ;
  1061.         BTFSS   STATUS, Z                                                               ;
  1062.         GOTO    _UB_Update_Ball_X_Max                                   ;
  1063.         MOVLW   1                                                                               ;
  1064.         MOVWF   Ball_Dir_X                                                              ;
  1065.                                                                                                         ;
  1066.         INCF    Score_2, F                                                              ;
  1067.         PLAY_SOUND      24, H'017F'                                                     ; Frequency, Duration
  1068.         BCF             System_Status, P1_SERVICE_BIT                   ;
  1069.         BSF             System_Status, P2_SERVICE_BIT                   ;
  1070.         MOVLW   0                                                                               ;
  1071.         MOVWF   Ball_Dir_X                                                              ;
  1072.         MOVWF   Ball_Dir_Y                                                              ;
  1073.         MOVLW   15                                                                              ;
  1074.         MOVWF   Ball_X                                                                  ;
  1075.         MOVLW   27                                                                              ;
  1076.         MOVWF   Ball_Y                                                                  ;
  1077.         MOVFW   Score_2                                                                 ;
  1078.         ANDLW   H'0F'                                                                   ;
  1079.         XORLW   H'0A'                                                                   ;
  1080.         BTFSS   STATUS, Z                                                               ;
  1081.         GOTO    _UB_BXMin_Exit                                                  ;
  1082.         MOVFW   Score_2                                                                 ;
  1083.         ANDLW   H'F0'                                                                   ;
  1084.         ADDLW   H'10'                                                                   ;
  1085.         MOVWF   Score_2                                                                 ;
  1086.         MOVLW   H'A0'                                                                   ;
  1087.         XORWF   Score_2, W                                                              ;
  1088.         BTFSC   STATUS, Z                                                               ;
  1089.         CLRF    Score_2                                                                 ;
  1090. _UB_BXMin_Exit:                                                                         ;
  1091.         MOVLW   H'11'                                                                   ;
  1092.         XORWF   Score_2, W                                                              ;
  1093.         BTFSS   STATUS, Z                                                               ;
  1094.         GOTO    _UB_Exit                                                                ;
  1095.         BSF             System_Status, P1_SERVICE_BIT                   ;
  1096.         BSF             System_Status, P2_SERVICE_BIT                   ;
  1097.         GOTO    _UB_Exit                                                                ;
  1098.         ;-----------------------------------------------;
  1099.                                                                                                         ;
  1100.         ;-----------------------------------------------;
  1101. _UB_Update_Ball_X_Max:                                                          ;
  1102.         MOVLW   31                                                                              ;
  1103.         XORWF   Ball_X, W                                                               ;
  1104.         BTFSS   STATUS, Z                                                               ;
  1105.         GOTO    _UB_Update_Ball_Y                                               ;
  1106.         MOVLW   -1                                                                              ;
  1107.         MOVWF   Ball_Dir_X                                                              ;
  1108.                                                                                                         ;
  1109.         INCF    Score_1, F                                                              ;
  1110.         PLAY_SOUND      24, H'017F'                                                     ; Frequency, Duration
  1111.         BSF             System_Status, P1_SERVICE_BIT                   ;
  1112.         BCF             System_Status, P2_SERVICE_BIT                   ;
  1113.         MOVLW   0                                                                               ;
  1114.         MOVWF   Ball_Dir_X                                                              ;
  1115.         MOVWF   Ball_Dir_Y                                                              ;
  1116.         MOVLW   15                                                                              ;
  1117.         MOVWF   Ball_X                                                                  ;
  1118.         MOVLW   27                                                                              ;
  1119.         MOVWF   Ball_Y                                                                  ;
  1120.         MOVFW   Score_1                                                                 ;
  1121.         ANDLW   H'0F'                                                                   ;
  1122.         XORLW   H'0A'                                                                   ;
  1123.         BTFSS   STATUS, Z                                                               ;
  1124.         GOTO    _UB_BXMax_Exit                                                  ;
  1125.         MOVFW   Score_1                                                                 ;
  1126.         ANDLW   H'F0'                                                                   ;
  1127.         ADDLW   H'10'                                                                   ;
  1128.         MOVWF   Score_1                                                                 ;
  1129.         MOVLW   H'A0'                                                                   ;
  1130.         XORWF   Score_1, W                                                              ;
  1131.         BTFSC   STATUS, Z                                                               ;
  1132.         CLRF    Score_1                                                                 ;
  1133. _UB_BXMax_Exit:                                                                         ;
  1134.         MOVLW   H'11'                                                                   ;
  1135.         XORWF   Score_1, W                                                              ;
  1136.         BTFSS   STATUS, Z                                                               ;
  1137.         GOTO    _UB_Exit                                                                ;
  1138.         BSF             System_Status, P1_SERVICE_BIT                   ;
  1139.         BSF             System_Status, P2_SERVICE_BIT                   ;
  1140.         GOTO    _UB_Exit                                                                ;
  1141.         ;-----------------------------------------------;
  1142.                                                                                                         ;
  1143.         ;-----------------------------------------------;
  1144.         ; Update Ball_Y position                                                ;
  1145.         ;-----------------------------------------------;
  1146. _UB_Update_Ball_Y:                                                                      ;
  1147.         MOVFW   Ball_Dir_Y                                                              ;
  1148.         ADDWF   Ball_Y, F                                                               ;
  1149.         ;-----------------------------------------------;
  1150.                                                                                                         ;
  1151.         ;-----------------------------------------------;
  1152.         ; Check for collision with upper sideline               ;
  1153.         ;-----------------------------------------------;
  1154. _UB_Update_Ball_Y_Min:                                                          ;
  1155.         BTFSS   Ball_Y, MSB                                                             ;
  1156.         GOTO    _UB_Update_Ball_Y_Max                                   ;
  1157.         COMF    Ball_Y, F                                                               ;
  1158.         COMF    Ball_Dir_Y, F                                                   ;
  1159.         INCF    Ball_Dir_Y, F                                                   ;
  1160.         ;-----------------------------------------------;
  1161.         ; Play the 'Ball Hit Sideline' sound                    ;
  1162.         ;-----------------------------------------------;
  1163.         PLAY_SOUND      6, H'017F'                                                      ; Frequency, Duration
  1164.         GOTO    _UB_Paddle_Detect_Left                                  ;
  1165.         ;-----------------------------------------------;
  1166.                                                                                                         ;
  1167.         ;-----------------------------------------------;
  1168.         ; Check for collision with lower sideline               ;
  1169.         ;-----------------------------------------------;
  1170. _UB_Update_Ball_Y_Max:                                                          ;
  1171.         MOVLW   NUM_LINES - 2                                                   ;
  1172.         SUBWF   Ball_Y, W                                                               ;
  1173.         BTFSS   STATUS, C                                                               ;
  1174.         GOTO    _UB_Paddle_Detect_Left                                  ;
  1175.         MOVLW   NUM_LINES - 2                                                   ;
  1176.         MOVWF   Ball_Y                                                                  ;
  1177.         COMF    Ball_Dir_Y, F                                                   ;
  1178.         INCF    Ball_Dir_Y, F                                                   ;
  1179.         ;-----------------------------------------------;
  1180.         ; Play the 'Ball Hit Wall' sound                                ;
  1181.         ;-----------------------------------------------;
  1182.         PLAY_SOUND      6, H'017F'                                                      ; Frequency, Duration
  1183.         ;-----------------------------------------------;
  1184.                                                                                                         ;
  1185.         ;-----------------------------------------------;
  1186.         ; Check for collision with left paddle                  ;
  1187.         ;-----------------------------------------------;
  1188. _UB_Paddle_Detect_Left:                                                         ;
  1189.         ;-----------------------------------------------;
  1190.         ; On the same vertical line as the left paddle? ;
  1191.         ;-----------------------------------------------;
  1192.         MOVLW   1                                                                               ;
  1193.         XORWF   Ball_X, W                                                               ;
  1194.         BTFSS   STATUS, Z                                                               ;
  1195.         GOTO    _UB_Paddle_Detect_Right                                 ;
  1196.                                                                                                         ;
  1197.         MOVFW   Paddle_1_Y                                                              ;
  1198.         MOVWF   Temp1                                                                   ;
  1199.         GOTO    _UB_PD_Check_Hit                                                ;
  1200.                                                                                                         ;
  1201.         ;-----------------------------------------------;
  1202.         ; Check for collision with right paddle                 ;
  1203.         ;-----------------------------------------------;
  1204. _UB_Paddle_Detect_Right:                                                        ;
  1205.         ;-----------------------------------------------;
  1206.         ; On the same vertical line as the right paddle?;
  1207.         ;-----------------------------------------------;
  1208.         MOVLW   30                                                                              ;
  1209.         XORWF   Ball_X, W                                                               ;
  1210.         BTFSS   STATUS, Z                                                               ;
  1211.         GOTO    _UB_Exit                                                                ;
  1212.         MOVFW   Paddle_2_Y                                                              ;
  1213.         MOVWF   Temp1                                                                   ;
  1214.         ;-----------------------------------------------;
  1215.                                                                                                         ;
  1216. _UB_PD_Check_Hit:                                                                       ;
  1217.         ;-----------------------------------------------;
  1218.         ; Are we on the save horizontal plane as the    ;
  1219.         ; paddle?                                                                               ;
  1220.         ;-----------------------------------------------;
  1221.         MOVFW   Ball_Y                                                                  ;
  1222.         ADDLW   BALL_HEIGHT                                                             ;
  1223.         SUBWF   Temp1, W                                                                ;
  1224.         BTFSC   STATUS, C                                                               ;
  1225.         GOTO    _UB_Exit                                                                ;
  1226.                                                                                                         ;
  1227.         MOVFW   Temp1                                                                   ;
  1228.         ADDLW   PADDLE_HEIGHT - 1                                               ;
  1229.         MOVWF   Temp2                                                                   ;
  1230.         MOVFW   Ball_Y                                                                  ;
  1231.         SUBWF   Temp2, W                                                                ;
  1232.         BTFSS   STATUS, C                                                               ;
  1233.         GOTO    _UB_Exit                                                                ;
  1234.                                                                                                         ;
  1235. _UB_PD_Its_A_Hit:                                                                       ;
  1236.         ;-----------------------------------------------;
  1237.         ; Reverse the ball 'X' direction                                ;
  1238.         ;-----------------------------------------------;
  1239.         COMF    Ball_Dir_X, F                                                   ;
  1240.         INCF    Ball_Dir_X, F                                                   ;
  1241.         ;-----------------------------------------------;
  1242.         ; Adjust the ball 'X' position                                  ;
  1243.         ;-----------------------------------------------;
  1244.         MOVFW   Ball_Dir_X                                                              ;
  1245.         ADDWF   Ball_X, F                                                               ;
  1246.         ;-----------------------------------------------;
  1247.         ; Play the 'Ball Hit Paddle' sound                              ;
  1248.         ;-----------------------------------------------;
  1249.         PLAY_SOUND      8, H'014F'                                                      ; Frequency, Duration
  1250.         ;-----------------------------------------------;
  1251.                                                                                                         ;
  1252.         ;-----------------------------------------------;
  1253.         ; Ball update done. Restore RBUTT as an output  ;
  1254.         ; for sound and wait for 60us to pass.                  ;
  1255.         ;-----------------------------------------------;
  1256. _UB_Exit:                                                                                       ;
  1257.         BANKSEL TRISA                                                                   ;
  1258.         BCF             TRISA, RBUTT_BIT                                                ; Set as OUTPUT (for AUDIO)
  1259.         BANKSEL MEMORY                                                                  ;
  1260.                                                                                                         ;
  1261.         RETURN                                                                                  ;
  1262. ;---------------------------------------------------;
  1263.  
  1264. ;---------------------------------------------------;
  1265. _Draw_Items:                                                                            ;
  1266. ;---------------------------------------------------;
  1267.         ;-----------------------------------------------;
  1268.         ; 60us BLACK Line                                                               ;
  1269.         ;-----------------------------------------------;
  1270.         START_TIMING SIG_4US, SIG_60US                                  ;
  1271.         ;-----------------------------------------------;
  1272.                                                                                                         ;
  1273. _DI_Draw_Service_Player_1:                                                      ;
  1274.         MOVLW   LOW VIDEO_BUFFER_START + SERVICE_1_START;
  1275.         MOVWF   FSR1L                                                                   ;
  1276.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  1277.         MOVWF   FSR1H                                                                   ;
  1278.         MOVLW   LOW SERVICE_TABLE                                               ;
  1279.         MOVWF   FSR0L                                                                   ;
  1280.         MOVLW   HIGH SERVICE_TABLE                                              ;
  1281.         MOVWF   FSR0H                                                                   ;
  1282.         MOVLW   (SERVICE_TABLE_END - SERVICE_TABLE_START) / 2
  1283.         MOVWF   Temp1                                                                   ;
  1284. _DI_DSP1_Next_Byte:                                                                     ;
  1285.         MOVFW   INDF0                                                                   ;
  1286.         BTFSS   System_Status, P1_SERVICE_BIT                   ;
  1287.         CLRW                                                                                    ;
  1288.         BTFSC   System_Status, P2_SERVICE_BIT                   ;
  1289.         CLRW                                                                                    ;
  1290.         MOVWF   INDF1                                                                   ;
  1291.         ADDFSR  FSR0, 1                                                                 ;
  1292.         ADDFSR  FSR1, 4                                                                 ;
  1293.         DECFSZ  Temp1, F                                                                ;
  1294.         GOTO    _DI_DSP1_Next_Byte                                              ;
  1295.                                                                                                         ;
  1296. _DI_Draw_Service_Player_2:                                                      ;
  1297.         MOVLW   LOW VIDEO_BUFFER_START + SERVICE_2_START;
  1298.         MOVWF   FSR1L                                                                   ;
  1299.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  1300.         MOVWF   FSR1H                                                                   ;
  1301.         MOVLW   LOW SERVICE_TABLE                                               ;
  1302.         MOVWF   FSR0L                                                                   ;
  1303.         MOVLW   HIGH SERVICE_TABLE                                              ;
  1304.         MOVWF   FSR0H                                                                   ;
  1305.         MOVLW   (SERVICE_TABLE_END - SERVICE_TABLE_START) / 2
  1306.         MOVWF   Temp1                                                                   ;
  1307.         ADDWF   FSR0L, F                                                                ;
  1308. _DI_DSP2_Next_Byte:                                                                     ;
  1309.         MOVFW   INDF0                                                                   ;
  1310.         BTFSS   System_Status, P2_SERVICE_BIT                   ;
  1311.         CLRW                                                                                    ;
  1312.         BTFSC   System_Status, P1_SERVICE_BIT                   ;
  1313.         CLRW                                                                                    ;
  1314.         MOVWF   INDF1                                                                   ;
  1315.         ADDFSR  FSR0, 1                                                                 ;
  1316.         ADDFSR  FSR1, 4                                                                 ;
  1317.         DECFSZ  Temp1, F                                                                ;
  1318.         GOTO    _DI_DSP2_Next_Byte                                              ;
  1319.                                                                                                         ;
  1320. _DI_Draw_Score1:                                                                        ;
  1321. _DI_DS1_Draw_Left_Char:                                                         ;
  1322.         SWAPF   Score_1, W                                                              ;
  1323.         ANDLW   H'0F'                                                                   ;
  1324.         MOVWF   Temp1                                                                   ;
  1325.                                                                                                         ;
  1326.         MOVLW   LOW VIDEO_BUFFER_START + LEFT_SCORE_START
  1327.         MOVWF   FSR1L                                                                   ;
  1328.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  1329.         MOVWF   FSR1H                                                                   ;
  1330.                                                                                                         ;
  1331.         MOVLW   HIGH CHARACTER_TABLE                                    ;
  1332.         MOVWF   FSR0H                                                                   ;
  1333.         MOVLW   LOW CHARACTER_TABLE                                             ;
  1334.         ADDWF   Temp1, W                                                                ;
  1335.         BTFSC   STATUS, C                                                               ;
  1336.         INCF    FSR0H, F                                                                ;
  1337.         MOVWF   FSR0L                                                                   ;
  1338.                                                                                                         ;
  1339.         MOVLW   5                                                                               ;
  1340.         MOVWF   Temp1                                                                   ;
  1341. _DI_DS1_DLC_Next_Line:                                                          ;
  1342.         MOVFW   INDF0                                                                   ;
  1343.         MOVWF   DTemp                                                                   ;
  1344.         RRF             DTemp, W                                                                ;
  1345.         ANDLW   H'70'                                                                   ;
  1346.         MOVWF   INDF1                                                                   ;
  1347.         ADDFSR  FSR0, 10                                                                ;
  1348.         ADDFSR  FSR1, 4                                                                 ;
  1349.         DECFSZ  Temp1, F                                                                ;
  1350.         GOTO    _DI_DS1_DLC_Next_Line                                   ;
  1351.                                                                                                         ;
  1352. _DI_DS1_Draw_Right_Char:                                                        ;
  1353.         MOVFW   Score_1                                                                 ;
  1354.         ANDLW   H'0F'                                                                   ;
  1355.         MOVWF   Temp1                                                                   ;
  1356.                                                                                                         ;
  1357.         MOVLW   LOW VIDEO_BUFFER_START + LEFT_SCORE_START
  1358.         MOVWF   FSR1L                                                                   ;
  1359.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  1360.         MOVWF   FSR1H                                                                   ;
  1361.                                                                                                         ;
  1362.         MOVLW   HIGH CHARACTER_TABLE                                    ;
  1363.         MOVWF   FSR0H                                                                   ;
  1364.         MOVLW   LOW CHARACTER_TABLE                                             ;
  1365.         ADDWF   Temp1, W                                                                ;
  1366.         BTFSC   STATUS, C                                                               ;
  1367.         INCF    FSR0H, F                                                                ;
  1368.         MOVWF   FSR0L                                                                   ;
  1369.                                                                                                         ;
  1370.         MOVLW   5                                                                               ;
  1371.         MOVWF   Temp1                                                                   ;
  1372. _DI_DS1_DRC_Next_Line:                                                          ;
  1373.         MOVFW   INDF0                                                                   ;
  1374.         MOVWF   DTemp                                                                   ;
  1375.         RRF             DTemp, W                                                                ;
  1376.         ANDLW   H'07'                                                                   ;
  1377.         MOVWF   DTemp                                                                   ;
  1378.         MOVFW   INDF1                                                                   ;
  1379.         IORWF   DTemp, W                                                                ;
  1380.         MOVWF   INDF1                                                                   ;
  1381.         ADDFSR  FSR0, 10                                                                ;
  1382.         ADDFSR  FSR1, 4                                                                 ;
  1383.         DECFSZ  Temp1, F                                                                ;
  1384.         GOTO    _DI_DS1_DRC_Next_Line                                   ;
  1385.                                                                                                         ;
  1386. _DI_Draw_Score2:                                                                        ;
  1387. _DI_DS2_Draw_Left_Char:                                                         ;
  1388.         SWAPF   Score_2, W                                                              ;
  1389.         ANDLW   H'0F'                                                                   ;
  1390.         MOVWF   Temp1                                                                   ;
  1391.                                                                                                         ;
  1392.         MOVLW   LOW VIDEO_BUFFER_START + RIGHT_SCORE_START
  1393.         MOVWF   FSR1L                                                                   ;
  1394.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  1395.         MOVWF   FSR1H                                                                   ;
  1396.                                                                                                         ;
  1397.         MOVLW   HIGH CHARACTER_TABLE                                    ;
  1398.         MOVWF   FSR0H                                                                   ;
  1399.         MOVLW   LOW CHARACTER_TABLE                                             ;
  1400.         ADDWF   Temp1, W                                                                ;
  1401.         BTFSC   STATUS, C                                                               ;
  1402.         INCF    FSR0H, F                                                                ;
  1403.         MOVWF   FSR0L                                                                   ;
  1404.                                                                                                         ;
  1405.         MOVLW   5                                                                               ;
  1406.         MOVWF   Temp1                                                                   ;
  1407. _DI_DS2_DLC_Next_Line:                                                          ;
  1408.         MOVFW   INDF0                                                                   ;
  1409.         ANDLW   H'E0'                                                                   ;
  1410.         MOVWF   INDF1                                                                   ;
  1411.         ADDFSR  FSR0, 10                                                                ;
  1412.         ADDFSR  FSR1, 4                                                                 ;
  1413.         DECFSZ  Temp1, F                                                                ;
  1414.         GOTO    _DI_DS2_DLC_Next_Line                                   ;
  1415.                                                                                                         ;
  1416. _DI_DS2_Draw_Right_Char:                                                        ;
  1417.         MOVFW   Score_2                                                                 ;
  1418.         ANDLW   H'0F'                                                                   ;
  1419.         MOVWF   Temp1                                                                   ;
  1420.                                                                                                         ;
  1421.         MOVLW   LOW VIDEO_BUFFER_START + RIGHT_SCORE_START
  1422.         MOVWF   FSR1L                                                                   ;
  1423.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  1424.         MOVWF   FSR1H                                                                   ;
  1425.                                                                                                         ;
  1426.         MOVLW   HIGH CHARACTER_TABLE                                    ;
  1427.         MOVWF   FSR0H                                                                   ;
  1428.         MOVLW   LOW CHARACTER_TABLE                                             ;
  1429.         ADDWF   Temp1, W                                                                ;
  1430.         BTFSC   STATUS, C                                                               ;
  1431.         INCF    FSR0H, F                                                                ;
  1432.         MOVWF   FSR0L                                                                   ;
  1433.         MOVLW   5                                                                               ;
  1434.         MOVWF   Temp1                                                                   ;
  1435. _DI_DS2_DRC_Next_Line:                                                          ;
  1436.         MOVFW   INDF0                                                                   ;
  1437.         ANDLW   H'0E'                                                                   ;
  1438.         MOVWF   DTemp                                                                   ;
  1439.         MOVFW   INDF1                                                                   ;
  1440.         IORWF   DTemp, W                                                                ;
  1441.         MOVWF   INDF1                                                                   ;
  1442.         ADDFSR  FSR0, 10                                                                ;
  1443.         ADDFSR  FSR1, 4                                                                 ;
  1444.         DECFSZ  Temp1, F                                                                ;
  1445.         GOTO    _DI_DS2_DRC_Next_Line                                   ;
  1446.                                                                                                         ;
  1447.         ;-----------------------------------------------;
  1448.         ; 60us BLACK Line                                                               ;
  1449.         ;-----------------------------------------------;
  1450.         START_TIMING SIG_4US, SIG_60US                                  ;
  1451.         ;-----------------------------------------------;
  1452.                                                                                                         ;
  1453. _DI_Draw_Computer_Player_2:                                                     ;
  1454.         BTFSS   System_Status, P2_COMPUTER_BIT                  ;
  1455.         GOTO    _DI_DCP2_Done                                                   ;
  1456.         MOVLW   LOW VIDEO_BUFFER_START + COMPUTER_2_START
  1457.         MOVWF   FSR1L                                                                   ;
  1458.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  1459.         MOVWF   FSR1H                                                                   ;
  1460.         MOVLW   LOW COMPUTER_2_TABLE                                    ;
  1461.         MOVWF   FSR0L                                                                   ;
  1462.         MOVLW   HIGH COMPUTER_2_TABLE                                   ;
  1463.         MOVWF   FSR0H                                                                   ;
  1464.         MOVLW   COMPUTER_2_TABLE_END - COMPUTER_2_TABLE_START
  1465.         MOVWF   Temp1                                                                   ;
  1466. _DI_DCP2_Next_Byte:                                                                     ;
  1467.         MOVFW   INDF0                                                                   ;
  1468.         IORWF   INDF1                                                                   ;
  1469.         ADDFSR  FSR0, 1                                                                 ;
  1470.         ADDFSR  FSR1, 4                                                                 ;
  1471.         DECFSZ  Temp1, F                                                                ;
  1472.         GOTO    _DI_DCP2_Next_Byte                                              ;
  1473. _DI_DCP2_Done:                                                                          ;
  1474.                                                                                                         ;
  1475. _DI_Draw_Paddle_1:                                                                      ;
  1476.         MOVFW   Paddle_1_Y                                                              ;
  1477.         ADDWF   Paddle_1_Y, W                                                   ;
  1478.         ADDWF   Paddle_1_Y, W                                                   ;
  1479.         ADDWF   Paddle_1_Y, W                                                   ;
  1480.         ADDLW   LOW VIDEO_BUFFER_START + LEFT_PADDLE_START
  1481.         MOVWF   FSR1L                                                                   ;
  1482.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  1483.         MOVLW   PADDLE_HEIGHT                                                   ;
  1484.         MOVWF   Temp1                                                                   ;
  1485. _DI_DP1_Next_Bit:                                                                       ;
  1486.         MOVFW   INDF1                                                                   ;
  1487.         IORLW   LEFT_PADDLE_BIT                                                 ;
  1488.         MOVWF   INDF1                                                                   ;
  1489.         ADDFSR  FSR1, 4                                                                 ;
  1490.         DECFSZ  Temp1, F                                                                ;
  1491.         GOTO    _DI_DP1_Next_Bit                                                ;
  1492.                                                                                                         ;
  1493. _DI_Draw_Paddle_2:                                                                      ;
  1494.         MOVFW   Paddle_2_Y                                                              ;
  1495.         ADDWF   Paddle_2_Y, W                                                   ;
  1496.         ADDWF   Paddle_2_Y, W                                                   ;
  1497.         ADDWF   Paddle_2_Y, W                                                   ;
  1498.         ADDLW   LOW VIDEO_BUFFER_START + RIGHT_PADDLE_START;
  1499.         MOVWF   FSR1L                                                                   ;
  1500.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  1501.         MOVWF   FSR1H                                                                   ;
  1502.         MOVLW   PADDLE_HEIGHT                                                   ;
  1503.         MOVWF   Temp1                                                                   ;
  1504. _DI_DP2_Next_Bit:                                                                       ;
  1505.         MOVFW   INDF1                                                                   ;
  1506.         IORLW   RIGHT_PADDLE_BIT                                                ;
  1507.         MOVWF   INDF1                                                                   ;
  1508.         ADDFSR  FSR1, 4                                                                 ;
  1509.         DECFSZ  Temp1, F                                                                ;
  1510.         GOTO    _DI_DP2_Next_Bit                                                ;
  1511.                                                                                                         ;
  1512. _DI_Draw_Ball:                                                                          ;
  1513.         ;-----------------------------------------------;
  1514.         ; Check to see if the ball has any movement. If ;
  1515.         ; not, we are either at the end of a game or    ;
  1516.         ; waiting for service. In that case, don't draw ;
  1517.         ; the ball.                                                                             ;
  1518.         ;-----------------------------------------------;
  1519.         CLRW                                                                                    ;
  1520.         XORWF   Ball_Dir_X, W                                                   ;
  1521.         BTFSS   STATUS, Z                                                               ;
  1522.         GOTO    _DI_DB_Draw                                                             ;
  1523.         CLRW                                                                                    ;
  1524.         XORWF   Ball_Dir_Y, W                                                   ;
  1525.         BTFSC   STATUS, Z                                                               ;
  1526.         GOTO    _DI_Exit                                                                ;
  1527.         MOVLW   1                                                                               ;
  1528.         XORWF   Ball_Wait, W                                                    ;
  1529.         BTFSS   STATUS, Z                                                               ;
  1530.         GOTO    _DI_Exit                                                                ;
  1531.                                                                                                         ;
  1532. _DI_DB_Draw:                                                                            ;
  1533.         ;-----------------------------------------------;
  1534.         ; This is where we actually 'draw' the ball.    ;
  1535.         ;-----------------------------------------------;
  1536.         MOVFW   Ball_Y                                                                  ;
  1537.         ADDWF   Ball_Y, W                                                               ;
  1538.         ADDWF   Ball_Y, W                                                               ;
  1539.         ADDWF   Ball_Y, W                                                               ;
  1540.         ADDLW   LOW VIDEO_BUFFER_START                                  ;
  1541.         MOVWF   FSR1L                                                                   ;
  1542.         RRF             Ball_X, W                                                               ;
  1543.         MOVWF   Temp1                                                                   ;
  1544.         RRF             Temp1, F                                                                ;
  1545.         RRF             Temp1, W                                                                ;
  1546.         ANDLW   H'1F'                                                                   ;
  1547.         ADDWF   FSR1L, F                                                                ;
  1548.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  1549.         MOVWF   FSR1H                                                                   ;
  1550.                                                                                                         ;
  1551.         MOVFW   Ball_X                                                                  ;
  1552.         ANDLW   H'07'                                                                   ;
  1553.         MOVWF   Temp1                                                                   ;
  1554.         MOVLW   H'80'                                                                   ;
  1555.         MOVWF   DTemp                                                                   ;
  1556.         MOVLW   0                                                                               ;                                                                                       ;
  1557.         XORWF   Temp1, W                                                                ;
  1558.         BTFSC   STATUS, Z                                                               ;
  1559.         GOTO    $+5                                                                             ;
  1560.         DECF    Temp1, F                                                                ;
  1561.         RRF             DTemp, F                                                                ;
  1562.         BCF             DTemp, MSB                                                              ;
  1563.         GOTO    $-7                                                                             ;
  1564.                                                                                                         ;
  1565.         MOVLW   BALL_HEIGHT                                                             ;
  1566.         MOVWF   Temp1                                                                   ;
  1567.         MOVFW   DTemp                                                                   ;
  1568. _DI_DB_D_Next_Pixel:                                                            ;
  1569.         XORWF   INDF1, F                                                                ;
  1570.         ADDFSR  FSR1, 4                                                                 ;
  1571.         DECFSZ  Temp1, F                                                                ;
  1572.         GOTO    _DI_DB_D_Next_Pixel                                             ;
  1573.                                                                                                         ;
  1574. _DI_Exit:                                                                                       ;
  1575.         RETURN                                                                                  ;
  1576. ;---------------------------------------------------;
  1577.  
  1578. ;---------------------------------------------------;
  1579. USER_CODE_2             CODE            H'800'                                  ;
  1580. ;---------------------------------------------------;
  1581. ;---------------------------------------------------;
  1582. _Initialize_System:                                                                     ;
  1583. ;---;-----------------------------------------------;
  1584.         ; Initialize Hardware                                                   ;
  1585.         ;-----------------------------------------------;
  1586.         ; - Oscillator                                                                  ;
  1587.         ;-----------------------------------------------;
  1588. _IS_Init_Oscillator:                                                            ;
  1589.         BANKSEL OSCCON                                                                  ;
  1590.         MOVLW   B'11110000'                                                             ; 32Mhz
  1591.         MOVWF   OSCCON                                                                  ;
  1592.                                                                                                         ;
  1593.         BANKSEL OSCSTAT                                                                 ; Wait for
  1594. _IS_IO_Wait:                                                                            ;
  1595.         MOVFW   OSCSTAT                                                                 ; high speed
  1596.         ANDLW   H'79'                                                                   ; oscillator
  1597.         XORLW   H'59'                                                                   ; to be
  1598.         BTFSS   STATUS, Z                                                               ; stable and
  1599.         GOTO    _IS_IO_Wait                                                             ; locked
  1600.         ;-----------------------------------------------;
  1601.                                                                                                         ;
  1602.         ;-----------------------------------------------;
  1603.         ; - GPIOs                                                                               ;
  1604.         ;-----------------------------------------------;
  1605. _IS_Init_GPIOs:                                                                         ;
  1606.         BANKSEL ANSELA                                                                  ;
  1607.         CLRF    ANSELA                                                                  ; ALL I/O as digital
  1608. #IF     _USE_THUMBSTICKS_                                                               ;
  1609.         BSF             ANSELA, LJOY_BIT                                                ;
  1610.         BSF             ANSELA, RJOY_BIT                                                ;
  1611. #ENDIF  ;_USE_THUMBSTICKS_                                                      ;
  1612.                                                                                                         ;
  1613.         BANKSEL LATA                                                                    ;
  1614.         CLRF    LATA                                                                    ;
  1615.                                                                                                         ;
  1616.         BANKSEL TRISA                                                                   ;
  1617.         CLRF    TRISA                                                                   ;
  1618.         BCF             TRISA, VIDEO_0_BIT                                              ; Set as OUTPUT
  1619.         BCF             TRISA, VIDEO_1_BIT                                              ; Set as OUTPUT
  1620.         BCF             TRISA, AUDIO_BIT                                                ; Set as OUTPUT
  1621. #IF     _USE_THUMBSTICKS_                                                               ;
  1622.         BSF             TRISA, LJOY_BIT                                                 ; Set as INPUT
  1623.         BSF             TRISA, LBUTT_BIT                                                ; Set as INPUT
  1624.         BSF             TRISA, RJOY_BIT                                                 ; Set as INPUT
  1625.         BCF             TRISA, RBUTT_BIT                                                ; Set as OUTPUT (AUDIO)
  1626. #ELSE   ;!_USE_THUMBSTICKS_                                                     ;
  1627.         BSF             TRISA, LBUTT_1_BIT                                              ; Set as INPUT
  1628.         BSF             TRISA, LBUTT_2_BIT                                              ; Set as INPUT
  1629.         BSF             TRISA, RBUTT_1_BIT                                              ; Set as INPUT
  1630.         BSF             TRISA, RBUTT_2_BIT                                              ; Set as INPUT
  1631. #ENDIF  ;_USE_THUMBSTICKS_                                                      ;
  1632.                                                                                                         ;
  1633.         BANKSEL PORTA                                                                   ;
  1634.         CLRF    PORTA                                                                   ;
  1635.         BCF             PORTA, VIDEO_0_BIT                                              ; Set LOW
  1636.         BCF             PORTA, VIDEO_1_BIT                                              ; Set LOW
  1637.         BSF             PORTA, AUDIO_BIT                                                ; Set HIGH
  1638. #IF     _USE_THUMBSTICKS_                                                               ;
  1639.         BSF             PORTA, LJOY_BIT                                                 ; Set HIGH
  1640.         BSF             PORTA, LBUTT_BIT                                                ; Set HIGH
  1641.         BSF             PORTA, RJOY_BIT                                                 ; Set HIGH
  1642.         BSF             PORTA, RBUTT_BIT                                                ; Set HIGH
  1643. #ELSE   ;!_USE_THUMBSTICKS_                                                     ;
  1644.         BSF             PORTA, LBUTT_1_BIT                                              ; Set HIGH
  1645.         BSF             PORTA, LBUTT_2_BIT                                              ; Set HIGH
  1646.         BSF             PORTA, RBUTT_1_BIT                                              ; Set HIGH
  1647.         BSF             PORTA, RBUTT_2_BIT                                              ; Set HIGH
  1648. #ENDIF  ;_USE_THUMBSTICKS_                                                      ;
  1649.         ;-----------------------------------------------;
  1650.                                                                                                         ;
  1651.         ;-----------------------------------------------;
  1652.         ; - Miscellaneous                                                               ;
  1653.         ;-----------------------------------------------;
  1654. _IS_Init_Misc:                                                                          ;
  1655.         BANKSEL INTCON                                                                  ;
  1656.         CLRF    INTCON                                                                  ;
  1657.                                                                                                         ;
  1658.         BANKSEL OPTION_REG                                                              ;
  1659.         CLRF    OPTION_REG                                                              ;
  1660.         ;-----------------------------------------------;
  1661.                                                                                                         ;
  1662.         ;-----------------------------------------------;
  1663.         ; - Timer0                                                                              ;
  1664.         ;-----------------------------------------------;
  1665. _IS_Init_Timer0:                                                                        ;
  1666.         BANKSEL OPTION_REG                                                              ;
  1667.         BCF             OPTION_REG, NOT_WPUEN                                   ;
  1668.         BCF             OPTION_REG, TMR0CS                                              ;
  1669.         BCF             OPTION_REG, PSA                                                 ; prescaler to timer0
  1670.         BCF             OPTION_REG, PS2                                                 ;
  1671.         BCF             OPTION_REG, PS1                                                 ; 000 - 250ns
  1672.         BCF             OPTION_REG, PS0                                                 ;
  1673.                                                                                                         ;
  1674.         BANKSEL TMR0                                                                    ;
  1675.         MOVLW   H'15'                                                                   ;
  1676.         MOVWF   TMR0                                                                    ;
  1677.         MOVWF   Vid_Timing                                                              ;
  1678.         MOVWF   Next_Vid_Timing                                                 ;
  1679.                                                                                                         ;
  1680.         BANKSEL INTCON                                                                  ;
  1681.         BCF             INTCON, TMR0IF                                                  ;
  1682.         BSF             INTCON, TMR0IE                                                  ;
  1683.         BSF             INTCON, GIE                                                             ;
  1684.         ;-----------------------------------------------;
  1685.                                                                                                         ;
  1686.         ;-----------------------------------------------;
  1687.         ; - Memory                                                                              ;
  1688.         ;-----------------------------------------------;
  1689. _IS_Init_Memory:                                                                        ;
  1690.         BANKSEL MEMORY                                                                  ;
  1691.         CLRF    System_Status                                                   ;
  1692.         BSF             System_Status, P1_SERVICE_BIT                   ;
  1693.         BSF             System_Status, P2_SERVICE_BIT                   ;
  1694.         BSF             System_Status, VERTICAL_SYNC_BIT                ;
  1695.         BCF             System_Status, BUZZ_BIT                                 ;
  1696.         MOVLW   0                                                                               ;
  1697.         MOVWF   Buzz_Count                                                              ;
  1698.         MOVWF   Buzz_Reload                                                             ;
  1699.         MOVLW   H'FF'                                                                   ;
  1700.         MOVWF   Buzz_Dur_LO                                                             ;
  1701.         MOVLW   H'FF'                                                                   ;
  1702.         MOVWF   Buzz_Dur_HI                                                             ;
  1703.         MOVLW   MAX_BALL_WAIT                                                   ;
  1704.         MOVWF   Ball_Wait                                                               ;
  1705.         MOVLW   0                                                                               ;
  1706.         MOVWF   Score_1                                                                 ;
  1707.         MOVLW   0                                                                               ;
  1708.         MOVWF   Score_2                                                                 ;
  1709.         MOVLW   20                                                                              ;
  1710.         MOVWF   Paddle_1_Y                                                              ;
  1711.         MOVLW   20                                                                              ;
  1712.         MOVWF   Paddle_2_Y                                                              ;
  1713.         MOVLW   15                                                                              ;
  1714.         MOVWF   Ball_X                                                                  ;
  1715.         MOVLW   27                                                                              ;
  1716.         MOVWF   Ball_Y                                                                  ;
  1717.         MOVLW   0                                                                               ;
  1718.         MOVWF   Ball_Dir_X                                                              ;
  1719.         MOVLW   0                                                                               ;
  1720.         MOVWF   Ball_Dir_Y                                                              ;
  1721.         ;-----------------------------------------------;
  1722.                                                                                                         ;
  1723.         ;-----------------------------------------------;
  1724.         ; - Video Buffer                                                                ;
  1725.         ;-----------------------------------------------;
  1726. _IS_Clear_Video:                                                                        ;
  1727.         PAGESEL _Clear_Screen                                                   ;
  1728.         CALL    _Clear_Screen                                                   ;
  1729.         PAGESEL $                                                                               ;
  1730.         ;-----------------------------------------------;
  1731.                                                                                                         ;
  1732.         ;-----------------------------------------------;
  1733.         ; - Other Subsystems                                                    ;
  1734.         ;-----------------------------------------------;
  1735.         ;-----------------------------------------------;
  1736.                                                                                                         ;
  1737.         ;-----------------------------------------------;
  1738.         ; This will shake loose the PICKIT, if attached ;
  1739.         ;-----------------------------------------------;
  1740. _IS_Shake_Loose_PICKIT:                                                         ;
  1741.         BANKSEL TRISA                                                                   ;
  1742.         BCF             TRISA, RBUTT_BIT                                                ;
  1743.         BANKSEL PORTA                                                                   ;
  1744.         BSF             PORTA, RBUTT_BIT                                                ;
  1745. _IS_SLP_Wait_For_Button:                                                        ;
  1746.         DELAY   255                                                                             ;
  1747.         DELAY   255                                                                             ;
  1748.         DELAY   255                                                                             ;
  1749.         DELAY   255                                                                             ;
  1750.         DELAY   255                                                                             ;
  1751.         DELAY   255                                                                             ;
  1752.         DELAY   255                                                                             ;
  1753.         DELAY   255                                                                             ;
  1754.         BANKSEL TRISA                                                                   ;
  1755.         BSF             TRISA, RBUTT_BIT                                                ;
  1756.         BANKSEL PORTA                                                                   ;
  1757.         BTFSS   PORTA, RBUTT_BIT                                                ;
  1758.         GOTO    _IS_SLP_Wait_For_Button                                 ;
  1759.         BANKSEL TRISA                                                                   ;
  1760.         BCF             TRISA, RBUTT_BIT                                                ;
  1761.         BANKSEL PORTA                                                                   ;
  1762.         BSF             PORTA, RBUTT_BIT                                                ;
  1763.         ;-----------------------------------------------;
  1764.                                                                                                         ;
  1765.         ;-----------------------------------------------;
  1766.         ; This will see if BUTTON 1 (left player) is    ;
  1767.         ; being pressed at power up. If so, PLAYER 2    ;
  1768.         ; will be flagged as a COMPUTER PLAYER.                 ;
  1769.         ;-----------------------------------------------;
  1770. _IS_Check_For_Computer_Option:                                          ;
  1771.         BTFSC   PORTA, LBUTT_BIT                                                ;
  1772.         GOTO    _IS_Exit                                                                ;
  1773.         BSF             System_Status, P2_COMPUTER_BIT                  ;
  1774.         BSF             System_Status, P1_PRESSED_BIT                   ;
  1775. ;       BTFSS   PORTA, LBUTT_BIT                                                ;
  1776. ;       GOTO    $-1                                                                             ;
  1777.         ;-----------------------------------------------;
  1778.                                                                                                         ;
  1779. _IS_Exit:                                                                                       ;
  1780. ;       PAGESEL _Next_Frame                                                             ;
  1781. ;       GOTO    _Next_Frame                                                             ;
  1782. ;---------------------------------------------------;
  1783.  
  1784. ;---------------------------------------------------;
  1785. _Next_Frame:                                                                            ;
  1786. ;---------------------------------------------------;
  1787.         ; VERTICAL SYNC PULSE Time                                              ;
  1788.         ; This consists of 5 blank half lines,                  ;
  1789.         ; 4 inverted half lines, and 5 more blank half  ;
  1790.         ; lines. This totals 7 full lines of 64us each. ;
  1791.         ; --------------------------------------------- ;
  1792.         ; NOTE: Timing is CRITICAL for a nice, clean    ;
  1793.         ; display. If you notice the top part of the    ;
  1794.         ; display is skewed or "tearing", your timings  ;
  1795.         ; are wrong and need to be adjusted. Make sure  ;
  1796.         ; you haven't inadvertently dropped a half frame;
  1797.         ;-----------------------------------------------;
  1798.         ; First, a special blank 30us line. If _DEBUG_  ;
  1799.         ; is enabled, it will produce a pulse on the    ;
  1800.         ; GPIO2 pin for debugging purposes (checking the;
  1801.         ; time elapsed for a single video frame).               ;
  1802.         ;-----------------------------------------------;
  1803.         PAGESEL _Vertical_Sync                                                  ;
  1804.         CALL    _Vertical_Sync                                                  ;
  1805.         PAGESEL $                                                                               ;
  1806.         ;-----------------------------------------------;
  1807.         ; Just a bunch of BLANK LINES, so that the video;
  1808.         ; data doesn't start in the non-display area.   ;
  1809.         ; Add or remove lines to adjust the vertical    ;
  1810.         ; position of your video. If you add or remove, ;
  1811.         ; make sure to adjust the number of BLANK LINES ;
  1812.         ; which follow the data lines, so that the video;
  1813.         ; stays at 60hz                                                                 ;
  1814.         ;-----------------------------------------------;
  1815.         MOVLW   13 + ((MAX_LINES - NUM_LINES) * 2)              ;
  1816.         MOVWF   Line_Count                                                              ;
  1817. _NF_Next_Black_60us_Line1:                                                      ;
  1818.         PAGESEL _Black_Line_60us                                                ;
  1819.         CALL    _Black_Line_60us                                                ;
  1820.         PAGESEL $                                                                               ;
  1821.         DECFSZ  Line_Count, F                                                   ;
  1822.         GOTO    _NF_Next_Black_60us_Line1                               ;
  1823.         ;-----------------------------------------------;
  1824.                                                                                                         ;
  1825.         ;-----------------------------------------------;
  1826.         ; 2 WHITE lines (for court sideline) + 1 BLACK  ;
  1827.         ; line (with court centerline) + 192 DATA lines ;
  1828.         ; (assuming NUM_LINES = 48) + 1 BLACK line (with;
  1829.         ; court centerline) + 2 WHITE lines (for court  ;
  1830.         ; sideline).                                                                    ;
  1831.         ;-----------------------------------------------;
  1832.         PAGESEL _Data_Lines                                                             ;
  1833.         CALL    _Data_Lines                                                             ;
  1834.         PAGESEL $                                                                               ;
  1835.         ;-----------------------------------------------;
  1836.                                                                                                         ;
  1837.         ;-----------------------------------------------;
  1838.         ; Display copyright and software version number.;
  1839.         ; 1 BLACK line + 8 DATA lines + 1 BLACK line +  ;
  1840.         ; 2 WHITE lines - 12 60us lines total                   ;
  1841.         ;-----------------------------------------------;
  1842.         PAGESEL _Copyright                                                              ;
  1843.         CALL    _Copyright                                                              ;
  1844.         PAGESEL $                                                                               ;
  1845.         ;-----------------------------------------------;
  1846.                                                                                                         ;
  1847.         ;-----------------------------------------------;
  1848.         ; More BLACK Lines:                                                             ;
  1849.         ;-----------------------------------------------;
  1850. #IF ((MAX_LINES - NUM_LINES) * 2) > 8                           ;
  1851.         MOVLW   ((MAX_LINES - NUM_LINES) * 2) - 8               ;
  1852.         MOVWF   Line_Count                                                              ;
  1853. _NF_Next_Black_60us_Line2:                                                      ;
  1854.         PAGESEL _Black_Line_60us                                                ;
  1855.         CALL    _Black_Line_60us                                                ;
  1856.         PAGESEL $                                                                               ;
  1857.         DECFSZ  Line_Count, F                                                   ;
  1858.         GOTO    _NF_Next_Black_60us_Line2                               ;
  1859. #ENDIF                                                                                          ;
  1860.         ;-----------------------------------------------;
  1861.  
  1862.         ;-----------------------------------------------;
  1863.         ; Clear the scores, paddles and ball from the   ;
  1864.         ; display - and draw the Title if necessary.    ;
  1865.         ; 2 60us lines                                                                  ;
  1866.         ;-----------------------------------------------;
  1867.         PAGESEL _Clear_Screen                                                   ;
  1868.         CALL    _Clear_Screen                                                   ; 2 BLACK 60us lines
  1869.         PAGESEL $                                                                               ; Screen Clear / Title Draw
  1870.         ;-----------------------------------------------;
  1871.                                                                                                         ;
  1872.         ;-----------------------------------------------;
  1873.         ; All of the game processing is done here, the  ;
  1874.         ; last 4 full 60us BLACK lines                                  ;
  1875.         ;-----------------------------------------------;
  1876.         PAGESEL _Update_Paddles                                                 ;
  1877.         CALL    _Update_Paddles                                                 ; 1 BLACK 60us line
  1878.         PAGESEL $                                                                               ; Paddles Computations
  1879.         PAGESEL _Update_Ball                                                    ;
  1880.         CALL    _Update_Ball                                                    ; 1 BLACK 60us line
  1881.         PAGESEL $                                                                               ; Ball Computations
  1882.         PAGESEL _Draw_Items                                                             ;
  1883.         CALL    _Draw_Items                                                             ; 2 BLACK 60us lines
  1884.         PAGESEL $                                                                               ; Scores/Paddles/Ball Display
  1885.         ;-----------------------------------------------;
  1886.                                                                                                         ;
  1887.         ;-----------------------------------------------;
  1888.         ; So, to summarize (with NUM_LINES = 48):               ;
  1889.         ; -   7 VERTICAL SYNC lines (14 30us lines)             ;
  1890.         ; -  30 BLANK LINES for screen centering                ;
  1891.         ; -   2 WHITE lines for COURT SIDELINE                  ;
  1892.         ; - 192 DATA lines for GAME FIELD                               ;
  1893.         ; -   2 WHITE lines     for COURT SIDELINE                      ;
  1894.         ; -   1 BLANK line between SIDELINE     & COPYRIGHT     ;
  1895.         ; -   8 DATA lines for COPYRIGHT                                ;
  1896.         ; -  12 BLANK lines for screen centering                ;
  1897.         ; -   2 BLANK lines for screen clear / title    ;
  1898.         ; -   4 BLANK lines for game processing                 ;
  1899.         ;                                                                                               ;
  1900.         ; For a total of 260 lines at 64us each, or     ;
  1901.         ; 16.637ms, or approximately 60hz. 16.666ms             ;
  1902.         ; would be _perfect_.                                                   ;      
  1903.         ;-----------------------------------------------;
  1904.                                                                                                         ;
  1905.         GOTO    _Next_Frame                                                             ;
  1906. ;---------------------------------------------------;
  1907.  
  1908. ;---------------------------------------------------;
  1909. _Vertical_Sync:                                                                         ;
  1910. ;---------------------------------------------------;
  1911.         ; Set the VERTICAL_SYNC flag, to keep audio from;
  1912.         ; audio from playing during this time and               ;
  1913.         ; possibly disrupting the video timing                  ;
  1914.         ;-----------------------------------------------;
  1915.         BSF             System_Status, VERTICAL_SYNC_BIT                ;
  1916.         ;-----------------------------------------------;
  1917.         ; The _Special_30us_Line will produce a pulse on;
  1918.         ; GPIO2 if the _DEBUG_ flag is set to TRUE. This;
  1919.         ; is for checking the timing of the entire video;
  1920.         ; frame (~60hz, ~16.66ms).                                              ;
  1921.         ;-----------------------------------------------;
  1922.         START_TIMING SIG_2US, SIG_30US                                  ;
  1923.         START_TIMING SIG_2US, SIG_30US                                  ;
  1924.         START_TIMING SIG_2US, SIG_30US                                  ;
  1925.         START_TIMING SIG_2US, SIG_30US                                  ;
  1926.         START_TIMING SIG_2US, SIG_30US                                  ;
  1927.         ;-----------------------------------------------;
  1928.         ; If _DEBUG_ is enabled, it will produce a pulse;
  1929.         ; on the GPIO2 pin for debugging purposes. This ;
  1930.         ; pulse is mainly to measure the time (in ms)   ;
  1931.         ; and frequency of a single video frame.                ;
  1932.         ;-----------------------------------------------;
  1933. #IF     _DEBUG_                                                                                 ;
  1934.         BANKSEL TRISA                                                                   ;
  1935.         BCF             TRISA, 2                                                                ;
  1936.         BANKSEL PORTA                                                                   ;
  1937.         BCF             PORTA, 2                                                                ;
  1938.         NOP                                                                                             ;
  1939.         BSF             PORTA, 2                                                                ;
  1940.         BANKSEL TRISA                                                                   ;
  1941.         BSF             TRISA, 2                                                                ;
  1942.         BANKSEL MEMORY                                                                  ;
  1943. #ENDIF  ; _DEBUG_                                                                       ;
  1944.         ;-----------------------------------------------;
  1945.         ; 4 inverted 30us lines                                                 ;
  1946.         ;-----------------------------------------------;
  1947.         START_TIMING SIG_30US, SIG_2US                                  ;
  1948.         START_TIMING SIG_30US, SIG_2US                                  ;
  1949.         START_TIMING SIG_30US, SIG_2US                                  ;
  1950.         START_TIMING SIG_30US, SIG_2US                                  ;
  1951.         ;-----------------------------------------------;
  1952.         ; 5 more blank 30us lines                                               ;
  1953.         ;-----------------------------------------------;
  1954.         START_TIMING SIG_2US, SIG_30US                                  ;
  1955.         START_TIMING SIG_2US, SIG_30US                                  ;
  1956.         START_TIMING SIG_2US, SIG_30US                                  ;
  1957.         START_TIMING SIG_2US, SIG_30US                                  ;
  1958.         START_TIMING SIG_2US, SIG_30US                                  ;
  1959.         ;-----------------------------------------------;
  1960.         ; Clear the VERTICAL_SYNC flag, so that audio   ;
  1961.         ; can continue playing                                                  ;
  1962.         ;-----------------------------------------------;
  1963.         BCF             System_Status, VERTICAL_SYNC_BIT                ;
  1964.         ;-----------------------------------------------;
  1965.         ; Increment the vertical sync count                             ;
  1966.         ;-----------------------------------------------;
  1967.         INCF    VSync_Count, F                                                  ;
  1968.         ;-----------------------------------------------;
  1969.         RETURN                                                                                  ;
  1970. ;---------------------------------------------------;
  1971.  
  1972. ;---------------------------------------------------;
  1973. _Data_Lines:                                                                            ;
  1974. ;---------------------------------------------------;
  1975. ; Note: This will generate 1 60us blank line, then      ;
  1976. ; 224 60us data lines, and finally a 60us blank line;
  1977. ;---------------------------------------------------;
  1978.         ;-----------------------------------------------;
  1979.         ; Two WHITE lines (for upper court sideline) and;
  1980.         ; one BLACK line (with the court centerline)    ;
  1981.         ;-----------------------------------------------;
  1982.         PAGESEL _White_Line_60us                                                ;
  1983.         CALL    _White_Line_60us                                                ;
  1984.         CALL    _White_Line_60us                                                ;
  1985.         PAGESEL $                                                                               ;
  1986.         ;-----------------------------------------------;
  1987.         PAGESEL _Black_Line_60us                                                ;
  1988.         CALL    _Black_Line_60us                                                ;
  1989.         PAGESEL $                                                                               ;
  1990.         DELAY   77                                                                              ;
  1991.         NOP                                                                                             ;
  1992.         BCF             PORTA, VIDEO_0_BIT                                              ;
  1993.         BCF             PORTA, VIDEO_0_BIT                                              ;
  1994.         BSF             PORTA, VIDEO_0_BIT                                              ;
  1995.         BSF             PORTA, VIDEO_0_BIT                                              ;
  1996.         BCF             PORTA, VIDEO_0_BIT                                              ;
  1997.         ;-----------------------------------------------;
  1998.                                                                                                         ;
  1999.         ;-----------------------------------------------;
  2000.         ; Set up of video buffer pointer and line count ;
  2001.         ;-----------------------------------------------;
  2002.         MOVLW   LOW VIDEO_BUFFER_START                                  ;
  2003.         MOVWF   FSR1L                                                                   ;
  2004.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  2005.         MOVWF   FSR1H                                                                   ;
  2006.                                                                                                         ;
  2007.         MOVLW   NUM_LINES                                                               ;
  2008.         MOVWF   DL_Count                                                                ;
  2009.         ;-----------------------------------------------;
  2010.                                                                                                         ;
  2011.         ;-----------------------------------------------;
  2012.         ; We repeat each line 4 times, since we don't   ;
  2013.         ; have a big enough video buffer for 192 lines  ;
  2014.         ;-----------------------------------------------;
  2015. _DL_Next_Line:                                                                          ;
  2016.         MOVLW   4                                                                               ;
  2017.         MOVWF   Repeat_Count                                                    ;
  2018. _DL_Repeat_Line:                                                                        ;
  2019.         MOVLW   H'FC'                                                                   ;
  2020.         ANDWF   FSR1L, F                                                                ;
  2021.         ;-----------------------------------------------;
  2022.                                                                                                         ;
  2023.         ;-----------------------------------------------;
  2024.         ; 60us Line Generation                                                  ;
  2025.         ;-----------------------------------------------;
  2026.         PAGESEL _Black_Line_60us                                                ;
  2027.         CALL    _Black_Line_60us                                                ;
  2028.         PAGESEL $                                                                               ;
  2029.         ;-----------------------------------------------;
  2030.                                                                                                         ;
  2031.         ;-----------------------------------------------;
  2032.         ; Front porch - shifts the data to the right    ;
  2033.         ; and hopefully centers it on the screen                ;
  2034.         ;-----------------------------------------------;
  2035.         DELAY   13                                                                              ;
  2036.         NOP                                                                                             ;
  2037.         ;-----------------------------------------------;
  2038.                                                                                                         ;
  2039.         ;-----------------------------------------------;
  2040.         ; This is where the 32 bits of data are actually;
  2041.         ; send out over the video signal                                ;
  2042.         ;-----------------------------------------------;
  2043.         DO_BIT  7, 8                                                                    ;
  2044.         DO_BIT  6, 8                                                                    ;
  2045.         DO_BIT  5, 8                                                                    ;
  2046.         DO_BIT  4, 8                                                                    ;
  2047.         DO_BIT  3, 8                                                                    ;
  2048.         DO_BIT  2, 8                                                                    ;
  2049.         DO_BIT  1, 8                                                                    ;
  2050.         DO_BIT  0, 7                                                                    ;
  2051.                                                                                                         ;
  2052.         ADDFSR  FSR1, 1                                                                 ;
  2053.                                                                                                         ;
  2054.         DO_BIT  7, 8                                                                    ;
  2055.         DO_BIT  6, 8                                                                    ;
  2056.         DO_BIT  5, 8                                                                    ;
  2057.         DO_BIT  4, 8                                                                    ;
  2058.         DO_BIT  3, 8                                                                    ;
  2059.         DO_BIT  2, 8                                                                    ;
  2060.         DO_BIT  1, 8                                                                    ;
  2061.         DO_BIT  0, 7                                                                    ;
  2062.                                                                                                         ;
  2063.         ADDFSR  FSR1, 1                                                                 ;
  2064.                                                                                                         ;
  2065. _DL_Center_Line:                                                                        ;
  2066.         BCF             PORTA, VIDEO_0_BIT                                              ;
  2067.         BCF             PORTA, VIDEO_0_BIT                                              ;
  2068.         BSF             PORTA, VIDEO_0_BIT                                              ;
  2069.         BSF             PORTA, VIDEO_0_BIT                                              ;
  2070.         BCF             PORTA, VIDEO_0_BIT                                              ;
  2071. _DL_Center_Line_Done:                                                           ;
  2072.                                                                                                         ;
  2073.         DO_BIT  7, 8                                                                    ;
  2074.         DO_BIT  6, 8                                                                    ;
  2075.         DO_BIT  5, 8                                                                    ;
  2076.         DO_BIT  4, 8                                                                    ;
  2077.         DO_BIT  3, 8                                                                    ;
  2078.         DO_BIT  2, 8                                                                    ;
  2079.         DO_BIT  1, 8                                                                    ;
  2080.         DO_BIT  0, 7                                                                    ;
  2081.                                                                                                         ;
  2082.         ADDFSR  FSR1, 1                                                                 ;
  2083.                                                                                                         ;
  2084.         DO_BIT  7, 8                                                                    ;
  2085.         DO_BIT  6, 8                                                                    ;
  2086.         DO_BIT  5, 8                                                                    ;
  2087.         DO_BIT  4, 8                                                                    ;
  2088.         DO_BIT  3, 8                                                                    ;
  2089.         DO_BIT  2, 8                                                                    ;
  2090.         DO_BIT  1, 8                                                                    ;
  2091.         DO_BIT  0, 7                                                                    ;
  2092.                                                                                                         ;
  2093.         ADDFSR  FSR1, 1                                                                 ;
  2094.                                                                                                         ;
  2095.         DECF    FSR1L, F                                                                ;
  2096.         ;-----------------------------------------------;
  2097.                                                                                                         ;
  2098.         ;-----------------------------------------------;
  2099.         ; Back porch - between this and the front porch,;
  2100.         ; this 'frames' the video on your TV (hopefully);
  2101.         ; --------------------------------------------- ;
  2102.         ; NOTE: this DELAY and NOPs fleshes out the     data;
  2103.         ; line to 60us                                                                  ;
  2104.         ;-----------------------------------------------;
  2105.         SET_DAC2BIT COLOR_BLACK                                                 ;
  2106.         ;-----------------------------------------------;
  2107.                                                                                                         ;
  2108.         DECFSZ  Repeat_Count, F                                                 ;
  2109.         GOTO    _DL_Repeat_Line                                                 ;
  2110.         GOTO    _DL_Next_Data                                                   ;
  2111.                                                                                                         ;
  2112.         ;-----------------------------------------------;
  2113.         ; 224 lines of information to transmit                  ;
  2114.         ; so the screen size is 32x224. But we transmit ;
  2115.         ; each line 4 times, so it's actually 32x56             ;
  2116.         ;-----------------------------------------------;
  2117. _DL_Next_Data:                                                                          ;
  2118.         ;-----------------------------------------------;
  2119.         ADDFSR  FSR1, 1                                                                 ;
  2120.         DECFSZ  DL_Count, F                                                             ;
  2121.         GOTO    _DL_Next_Line                                                   ;
  2122.                                                                                                         ;
  2123.         ;-----------------------------------------------;
  2124.         ; One BLACK line (with court centerline) and two;
  2125.         ; WHITE lines (for lower court sideline)                ;
  2126.         ;-----------------------------------------------;
  2127.         PAGESEL _Black_Line_60us                                                ;
  2128.         CALL    _Black_Line_60us                                                ;
  2129.         PAGESEL $                                                                               ;
  2130.         DELAY   77                                                                              ;
  2131.         NOP                                                                                             ;
  2132.         BCF             PORTA, VIDEO_0_BIT                                              ;
  2133.         BCF             PORTA, VIDEO_0_BIT                                              ;
  2134.         BSF             PORTA, VIDEO_0_BIT                                              ;
  2135.         BSF             PORTA, VIDEO_0_BIT                                              ;
  2136.         BCF             PORTA, VIDEO_0_BIT                                              ;
  2137.         ;-----------------------------------------------;
  2138.         PAGESEL _White_Line_60us                                                ;
  2139.         CALL    _White_Line_60us                                                ;
  2140.         CALL    _White_Line_60us                                                ;
  2141.         PAGESEL $                                                                               ;
  2142.         ;-----------------------------------------------;
  2143.                                                                                                         ;
  2144.         RETURN                                                                                  ;
  2145. ;---------------------------------------------------;
  2146.  
  2147. ;---------------------------------------------------;
  2148. _Copyright:                                                                                     ;
  2149. ;---------------------------------------------------;
  2150. ; Note: This is a 60us line routine. It will            ;
  2151. ; generate 8 60us data lines.                                           ;
  2152. ;---------------------------------------------------;
  2153.         ;-----------------------------------------------;
  2154.         ; One BLACK line                                                                ;
  2155.         ;-----------------------------------------------;
  2156.         PAGESEL _Black_Line_60us                                                ;
  2157.         CALL    _Black_Line_60us                                                ;
  2158.         PAGESEL $                                                                               ;
  2159.         ;-----------------------------------------------;
  2160.                                                                                                         ;
  2161.         ;-----------------------------------------------;
  2162.         ; Setup                                                                                 ;
  2163.         ;-----------------------------------------------;
  2164. _CR_Check_If_Time_To_Switch:                                            ;
  2165.         MOVLW   255                                                                             ; / 60 frames = secs
  2166.         XORWF   VSync_Count, W                                                  ;
  2167.         BTFSS   STATUS, Z                                                               ;
  2168.         GOTO    _CR_Determine_Copyright_To_Display              ;
  2169.                                                                                                         ;
  2170. _CR_Switch_Copyright:                                                           ;
  2171.         CLRF    VSync_Count                                                             ;
  2172.         MOVLW   WHICH_CR                                                                ;
  2173.         XORWF   System_Status, F                                                ;
  2174.                                                                                                         ;
  2175. _CR_Determine_Copyright_To_Display:                                     ;
  2176.         BTFSC   System_Status, WHICH_CR_BIT                             ;
  2177.         GOTO    _CR_Copyright_2                                                 ;
  2178.                                                                                                         ;
  2179. _CR_Copyright_1:                                                                        ;
  2180.         MOVLW   LOW COPYRIGHT_TABLE1_START                              ;
  2181.         MOVWF   FSR1L                                                                   ;
  2182.         MOVLW   HIGH COPYRIGHT_TABLE1_START                             ;
  2183.         MOVWF   FSR1H                                                                   ;
  2184.         MOVLW   (COPYRIGHT_TABLE1_END - COPYRIGHT_TABLE1_START) / 8
  2185.         MOVWF   Temp1                                                                   ;
  2186.         GOTO    _CR_Next_Line                                                   ;
  2187.                                                                                                         ;
  2188. _CR_Copyright_2:                                                                        ;
  2189.         MOVLW   LOW COPYRIGHT_TABLE2_START                              ;
  2190.         MOVWF   FSR1L                                                                   ;
  2191.         MOVLW   HIGH COPYRIGHT_TABLE2_START                             ;
  2192.         MOVWF   FSR1H                                                                   ;
  2193.         MOVLW   (COPYRIGHT_TABLE2_END - COPYRIGHT_TABLE2_START) / 8
  2194.         MOVWF   Temp1                                                                   ;
  2195.         ;-----------------------------------------------;
  2196.                                                                                                         ;
  2197.         ;-----------------------------------------------;
  2198.         ; 8 60us Data Lines Generation                                  ;
  2199.         ;-----------------------------------------------;
  2200. _CR_Next_Line:                                                                          ;
  2201.         ;-----------------------------------------------;
  2202.         ; 60us BLACK Line                                                               ;
  2203.         ;-----------------------------------------------;
  2204.         START_TIMING SIG_4US, SIG_60US                                  ;
  2205.         ;-----------------------------------------------;
  2206.                                                                                                         ;
  2207.         ;-----------------------------------------------;
  2208.         ; Xus Back Porch (Black Signal) Generation              ;
  2209.         ;-----------------------------------------------;
  2210.         DELAY   13                                                                              ;
  2211.         NOP                                                                                             ;
  2212.         ;-----------------------------------------------;
  2213.                                                                                                         ;
  2214.         ;-----------------------------------------------;
  2215.         ; Data Generation                                                               ;
  2216.         ;-----------------------------------------------;
  2217.         DO_BIT  7, 0                                                                    ;
  2218.         DO_BIT  6, 0                                                                    ;
  2219.         DO_BIT  5, 0                                                                    ;
  2220.         DO_BIT  4, 0                                                                    ;
  2221.         DO_BIT  3, 0                                                                    ;
  2222.         DO_BIT  2, 0                                                                    ;
  2223.         DO_BIT  1, 0                                                                    ;
  2224.         DO_BIT  0, 0                                                                    ;
  2225.         ADDFSR  FSR1, 1                                                                 ;
  2226.         DO_BIT  7, 0                                                                    ;
  2227.         DO_BIT  6, 0                                                                    ;
  2228.         DO_BIT  5, 0                                                                    ;
  2229.         DO_BIT  4, 0                                                                    ;
  2230.         DO_BIT  3, 0                                                                    ;
  2231.         DO_BIT  2, 0                                                                    ;
  2232.         DO_BIT  1, 0                                                                    ;
  2233.         DO_BIT  0, 0                                                                    ;
  2234.         ADDFSR  FSR1, 1                                                                 ;
  2235.         DO_BIT  7, 0                                                                    ;
  2236.         DO_BIT  6, 0                                                                    ;
  2237.         DO_BIT  5, 0                                                                    ;
  2238.         DO_BIT  4, 0                                                                    ;
  2239.         DO_BIT  3, 0                                                                    ;
  2240.         DO_BIT  2, 0                                                                    ;
  2241.         DO_BIT  1, 0                                                                    ;
  2242.         DO_BIT  0, 0                                                                    ;
  2243.         ADDFSR  FSR1, 1                                                                 ;
  2244.         DO_BIT  7, 0                                                                    ;
  2245.         DO_BIT  6, 0                                                                    ;
  2246.         DO_BIT  5, 0                                                                    ;
  2247.         DO_BIT  4, 0                                                                    ;
  2248.         DO_BIT  3, 0                                                                    ;
  2249.         DO_BIT  2, 0                                                                    ;
  2250.         DO_BIT  1, 0                                                                    ;
  2251.         DO_BIT  0, 0                                                                    ;
  2252.         ADDFSR  FSR1, 1                                                                 ;
  2253.         DO_BIT  7, 0                                                                    ;
  2254.         DO_BIT  6, 0                                                                    ;
  2255.         DO_BIT  5, 0                                                                    ;
  2256.         DO_BIT  4, 0                                                                    ;
  2257.         DO_BIT  3, 0                                                                    ;
  2258.         DO_BIT  2, 0                                                                    ;
  2259.         DO_BIT  1, 0                                                                    ;
  2260.         DO_BIT  0, 0                                                                    ;
  2261.         ADDFSR  FSR1, 1                                                                 ;
  2262.         DO_BIT  7, 0                                                                    ;
  2263.         DO_BIT  6, 0                                                                    ;
  2264.         DO_BIT  5, 0                                                                    ;
  2265.         DO_BIT  4, 0                                                                    ;
  2266.         DO_BIT  3, 0                                                                    ;
  2267.         DO_BIT  2, 0                                                                    ;
  2268.         DO_BIT  1, 0                                                                    ;
  2269.         DO_BIT  0, 0                                                                    ;
  2270.         ADDFSR  FSR1, 1                                                                 ;
  2271.         DO_BIT  7, 0                                                                    ;
  2272.         DO_BIT  6, 0                                                                    ;
  2273.         DO_BIT  5, 0                                                                    ;
  2274.         DO_BIT  4, 0                                                                    ;
  2275.         DO_BIT  3, 0                                                                    ;
  2276.         DO_BIT  2, 0                                                                    ;
  2277.         DO_BIT  1, 0                                                                    ;
  2278.         DO_BIT  0, 0                                                                    ;
  2279.         ADDFSR  FSR1, 1                                                                 ;
  2280.         DO_BIT  7, 0                                                                    ;
  2281.         DO_BIT  6, 0                                                                    ;
  2282.         DO_BIT  5, 0                                                                    ;
  2283.         DO_BIT  4, 0                                                                    ;
  2284.         DO_BIT  3, 0                                                                    ;
  2285.         DO_BIT  2, 0                                                                    ;
  2286.         DO_BIT  1, 0                                                                    ;
  2287.         DO_BIT  0, 0                                                                    ;
  2288.         ADDFSR  FSR1, 1                                                                 ;
  2289.         ;-----------------------------------------------;
  2290.                                                                                                         ;
  2291.         ;-----------------------------------------------;
  2292.         ; Xus Front Porch (Black Signal) Generation             ;
  2293.         ;-----------------------------------------------;
  2294.         NOP                                                                                             ;
  2295.         SET_DAC2BIT COLOR_BLACK                                                 ;
  2296.         ;-----------------------------------------------;
  2297.                                                                                                         ;
  2298.         ;-----------------------------------------------;
  2299.         ; All of this nonsense is just to get the timing;
  2300.         ; right between doing the next copyright line or;
  2301.         ; starting the series of blank lines.                   ;
  2302.         ;-----------------------------------------------;
  2303.         DECFSZ  Temp1, F                                                                ;
  2304.         GOTO    _CR_Next_Line                                                   ;
  2305.         ;-----------------------------------------------;
  2306.                                                                                                         ;
  2307.         ;-----------------------------------------------;
  2308.         ; One BLACK line and two WHITE lines:                   ;
  2309.         ;-----------------------------------------------;
  2310.         PAGESEL _Black_Line_60us                                                ;
  2311.         CALL    _Black_Line_60us                                                ;
  2312.         PAGESEL _White_Line_60us                                                ;
  2313.         CALL    _White_Line_60us                                                ;
  2314.         CALL    _White_Line_60us                                                ;
  2315.         PAGESEL $                                                                               ;
  2316.         ;-----------------------------------------------;
  2317.                                                                                                         ;
  2318.         RETURN                                                                                  ;
  2319. ;---------------------------------------------------;
  2320.  
  2321. ;---------------------------------------------------;
  2322. _Black_Line_30us:                                                                       ;
  2323. ;---------------------------------------------------;
  2324.         START_TIMING SIG_2US, SIG_30US                                  ;
  2325.         RETURN                                                                                  ;
  2326. ;---------------------------------------------------;
  2327.  
  2328. ;---------------------------------------------------;
  2329. _Black_Line_60us:                                                                       ;
  2330. ;---------------------------------------------------;
  2331.         START_TIMING SIG_4US, SIG_60US                                  ;
  2332.         RETURN                                                                                  ;
  2333. ;---------------------------------------------------;
  2334.  
  2335. ;---------------------------------------------------;
  2336. _White_Line_60us:                                                                       ;
  2337. ;---------------------------------------------------;
  2338.         PAGESEL _Black_Line_60us                                                ;
  2339.         CALL    _Black_Line_60us                                                ;
  2340.         PAGESEL $                                                                               ;
  2341.         BSF             PORTA, VIDEO_0_BIT                                              ;
  2342.         DELAY   149                                                                             ;
  2343.         BCF             PORTA, VIDEO_0_BIT                                              ;
  2344.         RETURN                                                                                  ;
  2345. ;---------------------------------------------------;
  2346.  
  2347. ;---------------------------------------------------;
  2348. _Clear_Screen:                                                                          ;
  2349. ;---------------------------------------------------;
  2350. ; This is a 2 60us BLACK lines routine                          ;
  2351. ;---------------------------------------------------;
  2352.         ;-----------------------------------------------;
  2353.         ; 60us BLACK Line                                                               ;
  2354.         ;-----------------------------------------------;
  2355.         START_TIMING SIG_4US, SIG_60US                                  ;
  2356.         ;-----------------------------------------------;
  2357.                                                                                                         ;
  2358. _CS_Top:                                                                                        ;
  2359.         ;-----------------------------------------------;
  2360.         ; Set up the pointer to the video buffer                ;
  2361.         ;-----------------------------------------------;
  2362.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  2363.         MOVWF   FSR1H                                                                   ;
  2364.         MOVLW   LOW VIDEO_BUFFER_START                                  ;
  2365.         MOVWF   FSR1L                                                                   ;
  2366.         ;-----------------------------------------------;
  2367.                                                                                                         ;
  2368.         ;-----------------------------------------------;
  2369.         ; Set up the pointer to the title table                 ;
  2370.         ;-----------------------------------------------;
  2371.         MOVLW   HIGH TITLE_TABLE                                                ;
  2372.         MOVWF   FSR0H                                                                   ;
  2373.         MOVLW   LOW TITLE_TABLE                                                 ;
  2374.         MOVWF   FSR0L                                                                   ;
  2375.         ;-----------------------------------------------;
  2376.                                                                                                         ;
  2377.         ;-----------------------------------------------;
  2378.         ; Set up the number of bytes to transfer                ;
  2379.         ;-----------------------------------------------;
  2380.         MOVLW   ((NUM_LINES * 4) /2) / 8                                ;
  2381.         MOVWF   Temp1                                                                   ;
  2382.         ;-----------------------------------------------;
  2383.                                                                                                         ;
  2384.         ;-----------------------------------------------;
  2385.         ; Transfer the data from the title table to the ;
  2386.         ; video buffer, 8 bytes at a time. Doing it in  ;
  2387.         ; groups of 8 in a loop, instead of 1 byte at a ;
  2388.         ; time in a     loop, speeds up the transfer as it      ;
  2389.         ; cuts out a lot of the instruction cycles for  ;
  2390.         ; the looping mechanism.                                                ;
  2391.         ;-----------------------------------------------;
  2392. _CS_T_Next_8_Bytes:                                                                     ;
  2393.         MOVIW   0[INDF0]                                                                ;
  2394.         MOVWI   0[INDF1]                                                                ;
  2395.         MOVIW   1[INDF0]                                                                ;
  2396.         MOVWI   1[INDF1]                                                                ;
  2397.         MOVIW   2[INDF0]                                                                ;
  2398.         MOVWI   2[INDF1]                                                                ;
  2399.         MOVIW   3[INDF0]                                                                ;
  2400.         MOVWI   3[INDF1]                                                                ;
  2401.         MOVIW   4[INDF0]                                                                ;
  2402.         MOVWI   4[INDF1]                                                                ;
  2403.         MOVIW   5[INDF0]                                                                ;
  2404.         MOVWI   5[INDF1]                                                                ;
  2405.         MOVIW   6[INDF0]                                                                ;
  2406.         MOVWI   6[INDF1]                                                                ;
  2407.         MOVIW   7[INDF0]                                                                ;
  2408.         MOVWI   7[INDF1]                                                                ;
  2409. _CS_T_Check_For_Title:                                                          ;
  2410.         BTFSC   System_Status, P1_SERVICE_BIT                   ; If SERVICE is clear for both
  2411.         BTFSS   System_Status, P2_SERVICE_BIT                   ; players, then it's the start
  2412.         GOTO    $+2                                                                             ; of a game. Draw the title.
  2413.         ADDFSR  FSR0, 8                                                                 ;
  2414.         ADDFSR  FSR1, 8                                                                 ;
  2415.         DECFSZ  Temp1, F                                                                ;
  2416.         GOTO    _CS_T_Next_8_Bytes                                              ;
  2417.         ;-----------------------------------------------;
  2418.                                                                                                         ;
  2419.         ;-----------------------------------------------;
  2420.         ; 60us BLACK Line                                                               ;
  2421.         ;-----------------------------------------------;
  2422.         START_TIMING SIG_4US, SIG_60US                                  ;
  2423.         ;-----------------------------------------------;
  2424.                                                                                                         ;
  2425. _CS_Bottom:                                                                                     ;
  2426.         ;-----------------------------------------------;
  2427.         ; Set up the pointer to the video buffer                ;
  2428.         ;-----------------------------------------------;
  2429.         MOVLW   HIGH VIDEO_BUFFER_START                                 ;
  2430.         MOVWF   FSR1H                                                                   ;
  2431.         MOVLW   LOW VIDEO_BUFFER_START                                  ;
  2432.         ADDLW   (NUM_LINES * 4) / 2                                             ;
  2433.         MOVWF   FSR1L                                                                   ;
  2434.         BTFSC   STATUS, C                                                               ;
  2435.         INCF    FSR1H, F                                                                ;
  2436.         ;-----------------------------------------------;
  2437.                                                                                                         ;
  2438.         ;-----------------------------------------------;
  2439.         ; Set up the pointer to the title table                 ;
  2440.         ;-----------------------------------------------;
  2441.         MOVLW   HIGH TITLE_TABLE                                                ;
  2442.         MOVWF   FSR0H                                                                   ;
  2443.         MOVLW   LOW TITLE_TABLE                                                 ;
  2444. _CS_B_Check_For_Title1:                                                         ;
  2445.         BTFSC   System_Status, P1_SERVICE_BIT                   ; If SERVICE is clear for both
  2446.         BTFSS   System_Status, P2_SERVICE_BIT                   ; players, then it's the start
  2447.         GOTO    $+2                                                                             ; of a game. Draw the title.
  2448.         ADDLW   (NUM_LINES * 4) / 2                                             ;
  2449.         MOVWF   FSR0L                                                                   ;
  2450.         BTFSC   STATUS, C                                                               ;
  2451.         INCF    FSR0H, F                                                                ;
  2452.         ;-----------------------------------------------;
  2453.                                                                                                         ;
  2454.         ;-----------------------------------------------;
  2455.         ; Set up the number of bytes to transfer                ;
  2456.         ;-----------------------------------------------;
  2457.         MOVLW   ((NUM_LINES * 4) /2) / 8                                ;
  2458.         MOVWF   Temp1                                                                   ;
  2459.         ;-----------------------------------------------;
  2460.                                                                                                         ;
  2461.         ;-----------------------------------------------;
  2462.         ; Transfer the data from the title table to the ;
  2463.         ; video buffer, 8 bytes at a time. Doing it in  ;
  2464.         ; groups of 8 in a loop, instead of 1 byte at a ;
  2465.         ; time in a     loop, speeds up the transfer as it      ;
  2466.         ; cuts out a lot of the instruction cycles for  ;
  2467.         ; the looping mechanism.                                                ;
  2468.         ;-----------------------------------------------;
  2469. _CS_B_Next_8_Bytes:                                                                     ;
  2470.         MOVIW   0[INDF0]                                                                ;
  2471.         MOVWI   0[INDF1]                                                                ;
  2472.         MOVIW   1[INDF0]                                                                ;
  2473.         MOVWI   1[INDF1]                                                                ;
  2474.         MOVIW   2[INDF0]                                                                ;
  2475.         MOVWI   2[INDF1]                                                                ;
  2476.         MOVIW   3[INDF0]                                                                ;
  2477.         MOVWI   3[INDF1]                                                                ;
  2478.         MOVIW   4[INDF0]                                                                ;
  2479.         MOVWI   4[INDF1]                                                                ;
  2480.         MOVIW   5[INDF0]                                                                ;
  2481.         MOVWI   5[INDF1]                                                                ;
  2482.         MOVIW   6[INDF0]                                                                ;
  2483.         MOVWI   6[INDF1]                                                                ;
  2484.         MOVIW   7[INDF0]                                                                ;
  2485.         MOVWI   7[INDF1]                                                                ;
  2486. _CS_B_Check_For_Title2:                                                         ;
  2487.         BTFSC   System_Status, P1_SERVICE_BIT                   ; If SERVICE is clear for both
  2488.         BTFSS   System_Status, P2_SERVICE_BIT                   ; players, then it's the start
  2489.         GOTO    $+2                                                                             ; of a game. Draw the title.
  2490.         ADDFSR  FSR0, 8                                                                 ;
  2491.         ADDFSR  FSR1, 8                                                                 ;
  2492.         DECFSZ  Temp1, F                                                                ;
  2493.         GOTO    _CS_B_Next_8_Bytes                                              ;
  2494.         ;-----------------------------------------------;
  2495.                                                                                                         ;
  2496.         RETURN                                                                                  ;
  2497. ;---------------------------------------------------;
  2498.  
  2499. ;---------------------------------------------------;
  2500. ; Numeric Characters (0-9) Scan Line Data                       ;
  2501. ;---------------------------------------------------;
  2502. CHARACTER_TABLE:                                                                        ;
  2503. ;---------------------------------------------------;
  2504.         ; These are the bitmaps for the score characters;
  2505.         ; 0-9, 4x5 pixels                                                               ;
  2506.         ;-----------------------------------------------;
  2507.         DT      B'11101110', B'01000100', B'11101110', B'11101110', B'10101010', B'11101110', B'11101110', B'11101110', B'11101110', B'11101110'
  2508.         DT      B'10101010', B'11001100', B'00100010', B'00100010', B'10101010', B'10001000', B'10001000', B'00100010', B'10101010', B'10101010'
  2509.         DT      B'10101010', B'01000100', B'11101110', B'11101110', B'11101110', B'11101110', B'11101110', B'00100010', B'11101110', B'11101110'
  2510.         DT      B'10101010', B'01000100', B'10001000', B'00100010', B'00100010', B'00100010', B'10101010', B'00100010', B'10101010', B'00100010'
  2511.         DT      B'11101110', B'01000100', B'11101110', B'11101110', B'00100010', B'11101110', B'11101110', B'00100010', B'11101110', B'00100010'
  2512. ;---------------------------------------------------;
  2513.  
  2514. ;---------------------------------------------------;
  2515. SERVICE_TABLE:                                                                          ;
  2516. ;---------------------------------------------------;
  2517.         ; These are the bitmaps for the 'SERVICE' arrow ;
  2518.         ; that shows up next to a score.                                ;
  2519.         ;-----------------------------------------------;
  2520. SERVICE_TABLE_START:                                                            ;
  2521.         DT      B'00000100'                                                                     ;
  2522.         DT      B'00000010'                                                                     ;
  2523.         DT      B'00000001'                                                                     ;
  2524.         DT      B'00000010'                                                                     ;
  2525.         DT      B'00000100'                                                                     ;
  2526.         DT      B'00100000'                                                                     ;
  2527.         DT      B'01000000'                                                                     ;
  2528.         DT      B'10000000'                                                                     ;
  2529.         DT      B'01000000'                                                                     ;
  2530.         DT      B'00100000'                                                                     ;
  2531. SERVICE_TABLE_END:                                                                      ;
  2532. ;---------------------------------------------------;
  2533.  
  2534. ;---------------------------------------------------;
  2535. COMPUTER_2_TABLE:                                                                       ;
  2536. ;---------------------------------------------------;
  2537.         ; These are the bitmaps for the 'SERVICE' arrow ;
  2538.         ; that shows up next to a score.                                ;
  2539.         ;-----------------------------------------------;
  2540. COMPUTER_2_TABLE_START:                                                         ;
  2541.         DT      B'00000010'                                                                     ;
  2542.         DT      B'00000111'                                                                     ;
  2543.         DT      B'00000101'                                                                     ;
  2544.         DT      B'00000100'                                                                     ;
  2545.         DT      B'00000101'                                                                     ;
  2546.         DT      B'00000111'                                                                     ;
  2547.         DT      B'00000010'                                                                     ;
  2548. COMPUTER_2_TABLE_END:                                                           ;
  2549. ;---------------------------------------------------;
  2550.  
  2551. ;---------------------------------------------------;
  2552. ; Title Title Scan Line Data                                            ;
  2553. ;---------------------------------------------------;
  2554. TITLE_TABLE:                                                                            ;
  2555. ;---------------------------------------------------;
  2556. TITLE_TABLE_START:                                                                      ;
  2557.         ;-----------------------------------------------;
  2558.         ; The first 6x4 lines should be 0 so that the   ;
  2559.         ; title graphic does not merge with the scores, ;
  2560.         ; and for the screen to clear the title properly;
  2561.         ;-----------------------------------------------;
  2562.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2563.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2564.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2565.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2566.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2567.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2568.         ;-----------------------------------------------;
  2569.         ; The next 42x4 lines contain the title graphic ;
  2570.         ;-----------------------------------------------;
  2571.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2572.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2573.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2574.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2575.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2576.         DT      B'00000111', B'10000000', B'01110000', B'00000000'
  2577.         DT      B'00000111', B'11000000', B'11111000', B'00000000'
  2578.         DT      B'00000111', B'11000000', B'11111000', B'00000000'
  2579.         DT      B'00000100', B'01000000', B'10001000', B'00000000'
  2580.         DT      B'00000100', B'01000000', B'10001000', B'00000000'
  2581.         DT      B'00000100', B'01001110', B'10001001', B'11000000'
  2582.         DT      B'00000111', B'11011111', B'10001011', B'11100000'
  2583.         DT      B'00000111', B'11011111', B'10001011', B'11100000'
  2584.         DT      B'00000111', B'10010001', B'10001010', B'00100000'
  2585.         DT      B'00000100', B'00010001', B'10001010', B'00000000'
  2586.         DT      B'00000100', B'00010001', B'10001010', B'00000000'
  2587.         DT      B'00000100', B'00010001', B'10001010', B'01100000'
  2588.         DT      B'00000100', B'00010001', B'10001010', B'01100000'
  2589.         DT      B'00000100', B'00010001', B'10001010', B'01100000'
  2590.         DT      B'00000100', B'00010001', B'10001010', B'00100000'
  2591.         DT      B'00000000', B'00010001', B'00000010', B'00100000'
  2592.         DT      B'00000000', B'00010001', B'00000010', B'00100000'
  2593.         DT      B'00000000', B'00011111', B'00000011', B'11100000'
  2594.         DT      B'00000000', B'00011111', B'00000011', B'11100000'
  2595.         DT      B'00000000', B'00001110', B'00000001', B'11000000'
  2596.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2597.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2598.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2599.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2600.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2601.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2602.         DT      B'00001110', B'11101110', B'01110101', B'01110000'
  2603.         DT  B'00001000', B'10101010', B'00100101', B'01000000'
  2604.         DT      B'00001100', B'10101100', B'00100111', B'01100000'
  2605.         DT      B'00001000', B'10101010', B'00100101', B'01000000'
  2606.         DT      B'00001000', B'11101010', B'00100101', B'01110000'
  2607.         DT      B'00000000', B'00000000', B'00000000', B'00000000'
  2608.         DT      B'00000101', B'11011101', B'11101010', B'11100000'
  2609.         DT  B'00000100', B'01010001', B'10101010', B'10100000'
  2610.         DT      B'00000101', B'11011001', B'11101110', B'10100000'
  2611.         DT      B'00000101', B'00010001', B'10100010', B'10100000'
  2612.         DT      B'00000101', B'11010001', B'11100010', B'11100000'
  2613. TITLE_TABLE_END:                                                                        ;
  2614. ;---------------------------------------------------;
  2615.  
  2616. ;---------------------------------------------------;
  2617. ; COPYRIGHT Scan Line Data                                                      ;
  2618. ;---------------------------------------------------;
  2619. COPYRIGHT_TABLE1_START:                                                         ;
  2620. ;---------------------------------------------------;
  2621.         ; this is the bitmap for the COPYRIGHT line             ;
  2622.         ; 64x8 pixels                                                                   ;
  2623.         ;-----------------------------------------------;
  2624.         DT      B'00110011', B'10111000', B'10010010', B'00111001', B'00010111', B'00000101', B'01010000', B'10001000'
  2625.         DT      B'00111011', B'10111001', B'00111001', B'00111011', B'10110111', B'00000101', B'01010001', B'11011000'
  2626.         DT  B'10101001', B'00010001', B'00101001', B'00001010', B'10010001', B'01010101', B'01010001', B'01001001'
  2627.         DT  B'10101001', B'00010001', B'00100001', B'00111010', B'10010111', B'01010101', B'01110001', B'01001001'
  2628.         DT  B'10101001', B'00010001', B'00100001', B'00111010', B'10010111', B'01010101', B'01110001', B'01001001'
  2629.         DT      B'10101001', B'00010001', B'00101001', B'00100010', B'10010100', B'01010101', B'00010001', B'01001001'
  2630.         DT      B'00111001', B'00111001', B'00111001', B'00111011', B'10010111', B'00000101', B'00010101', B'11001000'
  2631.         DT      B'00110001', B'00111000', B'10010010', B'00111001', B'00010111', B'00000010', B'00010100', B'10001000'
  2632. ;---------------------------------------------------;
  2633. COPYRIGHT_TABLE1_END:                                                           ;
  2634. ;---------------------------------------------------;
  2635. COPYRIGHT_TABLE2_START:                                                         ;
  2636. ;---------------------------------------------------;
  2637.         ; this is the bitmap for the COPYRIGHT line             ;
  2638.         ; 64x8 pixels                                                                   ;
  2639.         ;-----------------------------------------------;
  2640.         DT      B'01110101', B'10100010', B'01110101', B'01010011', B'10000010', B'00100110', B'01001110', B'01000100'
  2641.         DT      B'01110101', B'11110111', B'01110101', B'01010011', B'10000111', B'01110111', B'01001110', B'11101110'
  2642.         DT  B'00100101', B'01010101', B'00100101', B'01010010', B'00000101', B'01010101', B'01001000', B'10101010'
  2643.         DT  B'00100101', B'01010101', B'00100111', B'01110011', B'10000100', B'01110110', B'01001110', B'10101010'
  2644.         DT  B'00100101', B'01010101', B'00100111', B'00100011', B'10000100', B'01110111', B'01001110', B'10101010'
  2645.         DT      B'00100101', B'01010101', B'00100101', B'00100000', B'10000101', B'01010101', B'01000010', B'10101010'
  2646.         DT      B'00100101', B'01010111', B'00100101', B'00100011', B'10100111', B'01010101', B'01101110', B'11101010'
  2647.         DT      B'00100101', B'01010010', B'00100101', B'00100011', B'10100010', B'01010101', B'01101110', B'01001010'
  2648. ;---------------------------------------------------;
  2649. COPYRIGHT_TABLE2_END:                                                           ;
  2650. ;---------------------------------------------------;
  2651.  
  2652. ;---------------------------------------------------;
  2653. ;---------------------------------------------------;
  2654.         END                                                                                             ;
  2655. ;---------------------------------------------------;
  2656. ;---------------------------------------------------;
RAW Paste Data
Pastebin PRO Summer Special!
Get 60% OFF on Pastebin PRO accounts!
Top