Advertisement
aNdy-AL-Cosine

Unused Shmup Tunes

Jul 9th, 2019
1,652
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;
  2. ; 'Unused Shmup Music'
  3. ;
  4. ; Released by Cosine in 2019
  5. ;
  6. ; www.cosine.org.uk
  7. ;
  8. ; A simple music selector featuring unused
  9. ; music originally written for some
  10. ; shoot 'em up space type games!
  11. ;
  12. ; Code, graphics and music by aNdy/Cosine
  13. ;
  14. ; Thanks to T.M.R/Cosine for all your patience!
  15. ;
  16. ; This source is formatted for the ACME cross assembler
  17. ; which can be downloaded from...
  18. ; http://sourceforge.net/projects/acme-crossass/
  19. ;
  20. ; The final build was compressed and squished using
  21. ; Exomizer 2 which can be downloaded from...
  22. ; http://hem.bredband.net/magli143/exo/
  23. ;
  24. ; Questions about this code or about how the binaries
  25. ; were created can be asked by emailing aNdy...
  26. ; andy@cosine.org.uk
  27. ;
  28.  
  29. ; the name and file format for the assembled program
  30.  
  31.         !to "unused_shmups.prg",cbm
  32.  
  33. ; drag in some charset, sprite and music binaries! 
  34.  
  35.         * = $0900
  36. music5  !binary "data/killmusic.prg",,2
  37.  
  38.         * = $2000
  39.         !binary "data/charset.chr"
  40.  
  41.         * = $2800
  42.         !binary "data/sprites.spr"         
  43.        
  44.         * = $6000
  45. music1  !binary "data/title_tune.prg",,2
  46.  
  47.         * = $7000
  48. music3  !binary "data/level_tune.prg",,2
  49.  
  50.         * = $7d00
  51. music4  !binary "data/ready_over_tunes.prg",,2
  52.  
  53.  
  54.        
  55. ; position of the raster interrupt(s) on-screen
  56. ; 'rp' is short for 'raster position'! duh!
  57.  
  58. raster_1_pos    = $00           ; start of screen
  59. raster_2_pos    = $b6           ; end of logo and start of sprite starfield top section
  60. raster_3_pos    = $db           ; start of sprite starfield bottom section
  61.  
  62. ; some labels assignments (keyboard locations)
  63.  
  64. pra  =  $dc00                   ; cia#1 (port register a)
  65. prb  =  $dc01                   ; cia#1 (port register b)
  66.  
  67. ; some more label assignments (variables)
  68.  
  69. raster_num          = $50       ; raster counter stores which split we are working in
  70. sync                = $51       ; interupt sync variable
  71. print               = $52       ; print screen on/off variable
  72. colourwash_count    = $53       ; colour pulse counter for wash effect
  73. colourwash_timer    = $54       ; colour pulse timer for wash effect
  74. scroll_x            = $55       ; title scroller screen position
  75. scroll_pos          = $56       ; titles scroller position - $02 bytes used
  76. tune_num            = $58       ; tune number variable
  77. anim_timer          = $59       ; animation timer for top sprites
  78. msb_flag1           = $5a       ; flag for setting top starfield sprites msb
  79. msb_flag2           = $5b       ; flag for setting bottom starfield sprites msb
  80. msb_flag3           = $5c       ; flag for setting logo 'pulse' sprites msb
  81. pulse_timer         = $5d       ; logo pulse timer
  82. pulse_flag          = $5e       ; logo pulse flag (on/off)
  83.  
  84.  
  85. ; add a BASIC startline (SYS 16384) for auto-run after loading
  86.  
  87.         * = $0801
  88.         !word code_entry-2
  89.         !byte $00,$00,$9e
  90.         !text "16384"
  91.         !byte $00,$00,$00
  92.  
  93. ; entry point for the code
  94.  
  95.         * = $4000               ; hence sys 16384!
  96.  
  97. ; stop interrupts, disable the roms and set up nmi and irq interrupt pointers      
  98.                
  99. code_entry
  100.  
  101.         sei                     ; disable maskable IRQs
  102.        
  103.         lda #$35                ; kill EVERYTHING (MWHAHA!) except $f000-$ffff
  104.         sta $01
  105.        
  106. ; setup nmi
  107.  
  108.         lda #<nmi               ; some nmi stuff
  109.         sta $fffa
  110.         lda #>nmi
  111.         sta $fffb
  112.        
  113. ; setup irq's
  114.  
  115.         lda #<int               ; some irq stuff
  116.         sta $fffe
  117.         lda #>int
  118.         sta $ffff
  119.  
  120.         lda #$7f
  121.         sta $dc0d               ; disable timer interrupts which can be generated by the two CIA chips
  122.         sta $dd0d               ; the kernal uses such an interrupt to flash the cursor and scan
  123.                                 ; the keyboard, so we better stop it
  124.  
  125.         lda $dc0d               ; by reading this two registers we negate any pending CIA irqs.
  126.         lda $dd0d               ; if we don't do this, a pending CIA irq might occur after we
  127.                                 ; finish setting up our irq. we don't want that to happen.
  128.  
  129.         lda #raster_1_pos       ; starting point of raster on screen ($00)
  130.         sta $d012
  131.  
  132.         lda #$1b                ; as there are more than 256 rasterlines, the topmost bit of $d011 serves as
  133.         sta $d011               ; the 9th bit for the rasterline we want our irq to be triggered.
  134.        
  135.         lda #$01
  136.         sta $d019               ; clear interupt bit
  137.         sta $d01a               ; tell vicii to generate interupt
  138.  
  139.         lda #$35                ; turn off basic and kernal rom thus
  140.         sta $01                 ; c64 now sees RAM everywhere except at $d000-$e000
  141.        
  142.         lda #$18                ; use our custom font charset
  143.         sta $d018
  144.  
  145.         cli
  146.  
  147. ; first run screen setup =========================     
  148.    
  149. ; setup for the very first run by clearing the screen,
  150. ; then reading data from the screen and colour ram tables
  151. ; (at the bottom of this code) to print the the main
  152. ; display, on this occasion our PETSCII logo and text
  153.  
  154.         jsr clear_screen        ; clear screen with subroutine
  155.        
  156.         ldx #$00                ; zero x register
  157. printscrnram_loop               ; load up whatver is in the screen
  158.         lda screen_ram,x        ; ram table and write to the
  159.         sta $0400,x             ; screen ram
  160.         lda screen_ram+250,x
  161.         sta $0400+250,x
  162.         lda screen_ram+500,x
  163.         sta $0400+500,x
  164.         lda screen_ram+750,x
  165.         sta $0400+750,x
  166.         inx
  167.         cpx #$fa                ; done 250 writes?
  168.         bne printscrnram_loop   ; all written? no? loop back!
  169.                                 ; yes? then...
  170.         ldx #$00                ; zero x register
  171. printcolram_loop                ; load whatever is in the colour
  172.         lda colour_ram,x        ; ram table and write to the
  173.         sta $d800,x             ; colour ram
  174.         lda colour_ram+250,x
  175.         sta $d800+250,x
  176.         lda colour_ram+500,x
  177.         sta $d800+500,x
  178.         lda colour_ram+750,x
  179.         sta $d800+750,x
  180.         inx
  181.         cpx #$fa                ; done 250 writes?
  182.         bne printcolram_loop    ; all written? no? loop back!
  183.        
  184. ; reset the message scroller for first run
  185.  
  186.         jsr scroll_reset        ; reset 'scroller' subroutine
  187.        
  188.         lda #$50
  189.         sta scroll_x
  190.  
  191. ; prepare the music for first run      
  192.                
  193.         lda #$05                ; start with tune 1 (title)
  194.         sta tune_num            ; already selected
  195.        
  196.         lda #$00                ; setup the driver to
  197.         jsr music5+$00          ; play the title music
  198.        
  199. ; set up raster handler for first raster at the top of the screen
  200.        
  201.         lda #$01
  202.         sta raster_num
  203.        
  204. ; set up timer and flag for logo pulse on first run
  205.  
  206.         lda #$00                ; zero the accumalator
  207.         sta pulse_flag          ; pulse flag is '0' (off)
  208.        
  209.         lda #$fa                ; put 250 in...
  210.         sta pulse_timer         ; ...the pulse timer 'variable'
  211.        
  212. ; main loop code =========================================
  213.  
  214. ; now the main loop
  215.  
  216. mainloop
  217.                                 ; call these subroutines...
  218.         jsr sync_wait           ; wait until irq finishes!
  219.         jsr write_message       ; write the scroller message
  220.         jsr keycheck            ; check if keys are being pressed?
  221.        
  222.         jmp mainloop            ; now back to 'mainloop' up by there
  223.                                 ; and call the subroutines again!
  224.  
  225.                                        
  226. ; subroutines called from above code =====================     
  227.        
  228.  
  229. ; key press check subroutine -----------------------------         
  230.        
  231. keycheck
  232.                                 ; lets check some keys
  233.         lda #$7f                ; test $dc00 bit row 7 ($7F)
  234.         sta pra
  235.         lda prb
  236.        
  237.         cmp #$fe                ; key '1' pressed?
  238.         beq set_tune1           ; then set tune 1 routine
  239.        
  240.         cmp #$f7                ; key '2' pressed?
  241.         beq set_tune2           ; then set tune 2 routine
  242.        
  243.         cmp #$7f                ; key 'run/stop' pressed?
  244.         beq stop_music          ; then stop_music routine      
  245.  
  246.                                 ; now swap to different row!
  247.         lda #$fd                ; test $dc00 bit row 1 ($fd)
  248.         sta pra
  249.         lda prb
  250.        
  251.         cmp #$fe                ; key '3' pressed?
  252.         beq set_tune3           ; then set tune 3 routine
  253.  
  254.         cmp #$f7                ; key '4' pressed?
  255.         beq set_tune4           ; then set tune 4 routine      
  256.            
  257.         rts                     ; return to from where this was called
  258.  
  259. ; set the selected tune depending on keypress subroutine ---------         
  260.                
  261. set_tune1
  262.  
  263.         jsr key_debounce        ; wait for key release
  264.        
  265.         lda tune_num            ; is this tune already playing?
  266.         cmp #$01                ; if so, then don't set the
  267.         beq skip_set_tune       ; tune again, skip back to mainloop        
  268.                                 ; if not, then
  269.         lda #$01                ; select tune 1
  270.         sta tune_num
  271.        
  272.         lda #$00                ; the title music
  273.         jsr music1+$00
  274.  
  275.         jsr hilite_c            ; clear all hi-lites                   
  276.         jsr hilite_1            ; hilite the tune playing
  277.        
  278.         jmp mainloop
  279.        
  280. set_tune2
  281.  
  282.         jsr key_debounce        ; wait for key release
  283.  
  284.         lda tune_num            ; is this tune already playing?
  285.         cmp #$02                ; if so, then don't set the
  286.         beq skip_set_tune       ; tune again, skip back to mainloop        
  287.                                 ; if not, then             
  288.         lda #$02                ; select tune 1
  289.         sta tune_num
  290.        
  291.         lda #$01                ; the get ready music
  292.         jsr music4+$00
  293.        
  294.         jsr hilite_c            ; clear all hi-lites       
  295.         jsr hilite_2            ; hi-lite the tune playing
  296.  
  297.         jmp mainloop
  298.  
  299. set_tune3
  300.  
  301.         jsr key_debounce        ; wait for key release
  302.  
  303.         lda tune_num            ; is this tune already playing?
  304.         cmp #$03                ; if so, then don't set the
  305.         beq skip_set_tune       ; tune again, skip back to mainloop        
  306.                                 ; if not, then
  307.         lda #$03                ; select tune 3
  308.         sta tune_num
  309.        
  310.         lda #$00                ; the in-game music
  311.         jsr music3+$00
  312.            
  313.         jsr hilite_c            ; clear all hi-lites   
  314.         jsr hilite_3            ; hilite the tune playing      
  315.        
  316.         jmp mainloop
  317.        
  318. set_tune4
  319.  
  320.         jsr key_debounce        ; wait for key release
  321.  
  322.         lda tune_num            ; is this tune already playing?
  323.         cmp #$04                ; if so, then don't set the
  324.         beq skip_set_tune       ; tune again, skip back to mainloop        
  325.                                 ; if not, then     
  326.         lda #$04                ; select tune 4
  327.         sta tune_num
  328.        
  329.         lda #$00                ; the game over music
  330.         jsr music4+$00
  331.  
  332.         jsr hilite_c            ; clear all hi-lites   
  333.         jsr hilite_4            ; hilite the tune playing
  334.  
  335.         jmp mainloop
  336.  
  337. stop_music
  338.  
  339.         jsr key_debounce        ; wait for key release
  340.  
  341.         lda tune_num            ; has r/s already been pressed?
  342.         cmp #$05                ; if so, then don't stop
  343.         beq skip_set_tune       ; again, skip back to mainloop
  344.                                 ; if not, then     
  345.         lda #$05                ; select 'empty' music track
  346.         sta tune_num
  347.        
  348.         lda #$00                ; the 'empty' music track
  349.         jsr music5+$00          ; that stops music (cheat!)
  350.        
  351.         jsr hilite_c            ; clear all hi-lites           
  352.  
  353. skip_set_tune
  354.                
  355.         jmp mainloop       
  356.        
  357.  
  358. ; clear screen subroutine ----------------------------------       
  359.  
  360. clear_screen
  361.  
  362.         lda #$00                ; load 0 for black
  363.         sta $d021               ; store to background! change colour!
  364.         sta $d020               ; store to border! change colour!
  365.  
  366.         ldx #$00                ; zero x register      
  367.         lda #$20                ; value for 'empty space' in accum
  368.  
  369. clsloop                         ; clear screen loop!
  370.         sta $0400,x
  371.         sta $0500,x
  372.         sta $0600,x
  373.         sta $0700,x
  374.         inx
  375.         bne clsloop
  376.        
  377.         rts                     ; return to where this was called from
  378.        
  379.        
  380. ; key press debounce subroutine -------------------------------        
  381.  
  382. key_debounce
  383.  
  384.         lda prb                 ; check the keyboard...
  385.         cmp #$ff                ; an idiot is still pressing a key?
  386.         bne key_debounce        ; lock them in a loop till they stop!
  387.        
  388.         rts                     ; now go back to where from this was called
  389.  
  390.  
  391. ; irq sync wait subroutine ----------------------------------
  392.          
  393. sync_wait                       ; wait for sync update in irq code!
  394.         lda #$00                ; waits until the sync flag is
  395.         sta sync                ; set at the end of the interupt
  396. sw_loop                         ; code further down.
  397.         cmp sync                ; no code in the main loop above
  398.         beq sw_loop             ; is executed until the interupt
  399.                                 ; has run it's course!
  400.         rts
  401.  
  402.        
  403. ; update 'scrolling' message subroutine ---------------------
  404.        
  405. write_message
  406.    
  407.         ldx scroll_x
  408.         cpx #$28
  409.         bcs scroll_cnt
  410.  
  411. ; fetch a character from the text table
  412.  
  413. scroll_read
  414.  
  415.         ldy #$00
  416.         lda (scroll_pos),y
  417.         bne scroll_write
  418.        
  419.         jsr scroll_reset
  420.        
  421.         jmp scroll_read
  422.  
  423. ; write that character to the screen
  424.        
  425. scroll_write
  426.  
  427.         sta $07c0,x
  428.  
  429. ; update the text position
  430.  
  431.         inc scroll_pos+$00
  432.         bne *+$04
  433.         inc scroll_pos+$01
  434.  
  435. ; store the current text position      
  436.        
  437. scroll_cnt
  438.  
  439.         inx
  440.         stx scroll_x
  441.        
  442.         rts                     ; return to where this was called from
  443.  
  444. ; reset the scroll message     
  445.                
  446. scroll_reset
  447.  
  448.         lda #<mess_text
  449.         sta scroll_pos+$00
  450.         lda #>mess_text
  451.         sta scroll_pos+$01
  452.        
  453.         rts                     ; return to where this was called from
  454.        
  455.        
  456. ; tune 'arrow' highlight subroutines ---------------------------
  457.  
  458. ; tune 1 highlight
  459.  
  460. hilite_1
  461.  
  462.         ldx #$00                ; zero x register to count
  463. hilite1_loop
  464.         lda lefthilite,x        ; reversed close angle bracket
  465.         sta $06f8,x             ; disguised as a right pointing arrow!
  466.         lda righthilite,x       ; reversed open angle bracket
  467.         sta $06f8+34,x          ; disguised as a left pointing arrow
  468.         inx
  469.         cpx #$06                ; six arrows drawn yet?
  470.         bne hilite1_loop        ; no? go back up to loop start
  471.                                 ; yes?
  472.         rts                     ; go back to where this was called from!
  473.        
  474. ; tune 2 highlight
  475.  
  476. hilite_2
  477.  
  478.         ldx #$00
  479. hilite2_loop
  480.         lda lefthilite,x
  481.         sta $0720,x
  482.         lda righthilite,x
  483.         sta $0720+34,x
  484.         inx
  485.         cpx #$06
  486.         bne hilite2_loop
  487.        
  488.         rts
  489.        
  490. ; tune 3 highlight
  491.  
  492. hilite_3
  493.  
  494.         ldx #$00
  495. hilite3_loop
  496.         lda lefthilite,x
  497.         sta $0748,x
  498.         lda righthilite,x
  499.         sta $0748+34,x
  500.         inx
  501.         cpx #$06
  502.         bne hilite3_loop
  503.        
  504.         rts                        
  505.  
  506. ; tune 4 highlight
  507.  
  508. hilite_4
  509.  
  510.         ldx #$00
  511. hilite4_loop
  512.         lda lefthilite,x
  513.         sta $0770,x
  514.         lda righthilite,x
  515.         sta $0770+34,x
  516.         inx
  517.         cpx #$06
  518.         bne hilite4_loop
  519.        
  520.         rts
  521.        
  522. ; clear all tune highlights
  523.  
  524. hilite_c
  525.  
  526.         ldx #$00
  527.         lda #$20                ; use a space character to clear arrows!
  528. hilitec_loop
  529.         sta $06f8,x             ; first tune, left hand side arrow hilites!
  530.         sta $06f8+34,x          ; and the right hand side!
  531.         sta $0720,x             ; then the second tune, left hand side
  532.         sta $0720+34,x          ; and the right hand side
  533.         sta $0748,x             ; third tune, left
  534.         sta $0748+34,x          ; right
  535.         sta $0770,x             ; fourth tune, left
  536.         sta $0770+34,x          ; right
  537.         inx
  538.         cpx #$06                ; six spaces drawn on each side?
  539.         bne hilitec_loop        ; no? back to the start of the loop!
  540.                                 ; yes?
  541.         rts                     ; return to where this subrout was called from!
  542.                        
  543.        
  544. ; end subroutines =====================================    
  545.            
  546.  
  547. ; IRQ interrupt code =================================
  548.  
  549. int
  550.         pha  
  551.         txa
  552.         pha
  553.         tya
  554.         pha
  555.        
  556.         lda $d019
  557.         and #$01
  558.         sta $d019
  559.         bne intr_trigd
  560.        
  561.         jmp irq_exit            ; no interupt triggered? exit irq code!
  562.        
  563. ; an interrupt has triggered!?!
  564. ; which split should we run? let's check...
  565.  
  566. intr_trigd
  567.  
  568.         lda raster_num          ; load up the raster_num variable
  569.        
  570.         cmp #$02                ; is it set to '2'?
  571.         bne *+$05               ; no? then jump down to check for '3'
  572.         jmp irq_rout2           ; yes? jump down to irq_rout2!
  573.  
  574.         cmp #$03                ; is the raster_num set to '3'?
  575.         bne *+$05               ; no? jump down and run irq_rout1!
  576.         jmp irq_rout3           ; yes? jump down to irq_rout3!
  577.                
  578.  
  579. ; raster split 1 code -------------------------------
  580.  
  581. irq_rout1                       ; top section of the screen
  582.    
  583.         lda #$06                ; change colour to blue border
  584.         sta $d020               ; for top part of screen
  585.  
  586. ; set interrupt handler ready for split 2
  587.  
  588.         lda #$02                ; next run through this interupt code,
  589.         sta raster_num          ; split 2 should execute, a bit
  590.         lda #raster_2_pos       ; further down...
  591.         sta $d012
  592.        
  593. ; test to see if logo pulse should be displayed?
  594.  
  595.         lda pulse_flag          ; load up the pulse flag
  596.         cmp #$01                ; is it set to $01 (on)?
  597.         beq pulse_logo          ; if yes, go down to
  598.                                 ; 'pulse_logo'     
  599.         jmp play_music          ; if no, jump down to
  600.                                 ; 'play_music'
  601.    
  602. ; turn on and position 8 sprites for the logo pulse!
  603.  
  604. pulse_logo
  605.  
  606.         lda #$ff                ; turn on ...  
  607.         sta $d015               ; all 8 of dem sprite thangs!
  608.         sta $d01c               ; and make 'em all multicolour!
  609.         sta $d01b               ; AND put them behind the logo!
  610.        
  611.         lda #$0f                ; light grey...
  612.         sta $d025               ; ...into multicolour 1 register
  613.         lda #$0b                ; dark grey...
  614.         sta $d026               ; ...into multicolour 2 register
  615.        
  616.         ldx #$00                ; zero both the...
  617.         ldy #$00                ; ...x and y registers
  618. set_sprites
  619.         lda t_sprite_x,x        ; drag in the x coord for a sprite from table
  620.         sta $d000,y             ; store in sprites x position register
  621.         lda t_sprite_msb        ; load up sprite msb table
  622.         sta $d010               ; store to msb register
  623.         lda t_sprite_y,x        ; load in the y coord for a sprite from table
  624.         sta $d001,y             ; store in that sprite's y position register
  625.         lda t_sprite_cols,x     ; load a colour from the colour table
  626.         sta $d027,x             ; store in that sprite's colour register
  627.         lda t_sprite_def,x      ; and we need to load a definition for the sprite!
  628.         sta $07f8,x             ; and store it!
  629.         iny
  630.         iny
  631.         inx
  632.         cpx #$08                ; have we done all 8 sprites?
  633.         bne set_sprites         ; no? back to set_sprites then please!
  634.        
  635.         ldx #$00                ; reset x register to zero!
  636.         lda #$01                ; load 1 to accumaltor!
  637.         sta msb_flag3           ; set the temp value used for msb juggling
  638. reposition_sprites_t            ; lets move the sprites!
  639.         lda t_sprite_x,x        ; load x position from the table
  640.         clc                     ; clear carry flag!
  641.         adc t_sprite_speed,x    ; add whatever is in the sprite speed table
  642.         sta t_sprite_x,x        ; store new sprite x position!
  643.  
  644.         bcc no_msb_t            ; skip the msb wrangling if carry isn't set
  645.  
  646.         lda t_sprite_msb        ; read the current msb value
  647.         eor msb_flag3           ; toggle the bit for the sprite being processed
  648.         sta t_sprite_msb        ; write the current msb value
  649.  
  650. no_msb_t
  651.         asl msb_flag3           ; shift the bit used for toggling msb up for the next pass
  652.         inx
  653.         cpx #$08                    ; have we done all 8 sprites????
  654.         bne reposition_sprites_t    ; no? back to start of loop please!
  655.        
  656. ; update the sprite animation
  657.  
  658. ; note... altering the cpx value just below
  659. ; changes the animation speed by altering
  660. ; how many frames the timer waits for
  661. ; before executing the animation code!
  662. ; bigger value equals slower animation!
  663.  
  664.         ldx anim_timer          ; load up the anim_timer
  665.         inx                     ; increase it by '1'
  666.         cpx #$04                ; is the timer equal to '4' yet?
  667.         bne anim_skip           ; no? don't update animation!
  668.                                 ; yes? better do some animation then!
  669.         ldx #$00
  670. anim_update
  671.         lda t_sprite_def,x      ; load up the sprite's definition from the table
  672.         clc                     ; clear carry flag
  673.         adc #$01                ; add 1
  674.         cmp #$a8                ; is the value now $a8 (last animation frame)?
  675.         bne *+$04               ; no? jump down to inx instruction
  676.         lda #$a0                ; yes? reset value to $a0 (first animation frame)
  677.         sta t_sprite_def,x      ; store to sprite definition table
  678.         inx
  679.         cpx #$08                ; all 8 sprites done?
  680.         bne anim_update         ; no? back to start of the loop then!
  681.                                 ; yes?
  682.         ldx #$00                ; load x register with '0'
  683. anim_skip                       ; to reset anim_timer and...   
  684.         stx anim_timer          ; store x register to anim_timer
  685.        
  686. ; has the pulse travelled all the way across the screen?   
  687.  
  688.         lda t_sprite_msb        ; are the sprites in the msb?
  689.         and #$01                ; check sprite '0'
  690.         beq play_music          ; not in msb? play some music!
  691.                                 ; yes? then where in the msb?
  692.                                 ; let's check...
  693.         ldx #$00                       
  694.         lda t_sprite_x,x        ; load up sprite 0's current x position...
  695.         cmp #$58                ; futher than '88' off right hand side?
  696.         bcs pulse_off           ; yes? branch to 'pulse_off'
  697.                                 ; no?
  698.         jmp play_music          ; play some music!
  699.        
  700. pulse_off
  701.  
  702.         lda #$00                ; set the pulse flag to
  703.         sta pulse_flag          ; zero, which is 'off'
  704.        
  705.         ldx #$00
  706. reset_sprites_x    
  707.         lda t_sprite_xreset,x   ; copy the sprite reset table (all zero's)
  708.         sta t_sprite_x,x        ; to the sprite x table, to set the
  709.         inx                     ; sprites to the left hand side of the screen
  710.         cpx #$08                ; all 8 sprites done?
  711.         bne reset_sprites_x     ; no? loop back!
  712.        
  713.         lda #$00                ; reset the sprite msb table to zero so we
  714.         sta t_sprite_msb        ; can go back to the screens left hand side!
  715.                
  716. ; call music player and play dat choon!
  717.  
  718. play_music
  719.  
  720.         lda tune_num            ; which tune should be playing?
  721.        
  722.         cmp #$01                ; tune 1 (title)?
  723.         beq playtune1           ; then play tune 1!
  724.        
  725.         cmp #$02                ; tune 2 (get ready)?
  726.         beq playtune2           ; then play tune 2!
  727.        
  728.         cmp #$03                ; tune 3 (level in game)?
  729.         beq playtune3           ; then play tune 3!
  730.        
  731.         cmp #$04                ; tune 4 (game over)?
  732.         beq playtune4           ; then play tune 4!
  733.  
  734.         cmp #$05                ; stop music beep
  735.         beq stop_tunes          ; tune 1, sub-tune 2                   
  736.  
  737. playtune1
  738.    
  739.         jsr music1+$03          ; play tune 1!
  740.         jmp irq_exit            ; now exit the interupt!
  741.        
  742. playtune2
  743.    
  744.         jsr music4+$03          ; play tune 2!
  745.         jmp irq_exit       
  746.        
  747. playtune3
  748.    
  749.         jsr music3+$03          ; play tune 3!
  750.         jmp irq_exit
  751.        
  752. playtune4
  753.    
  754.         jsr music4+$03          ; play tune 4!
  755.         jmp irq_exit                           
  756.  
  757. stop_tunes
  758.    
  759.         jsr music5+$03          ; stop music with a
  760.         jmp irq_exit            ; sub-tune         
  761.        
  762.        
  763. ; raster split 2 code ------------------------------------
  764.  
  765. irq_rout2
  766.  
  767. ; set interrupt handler ready for split 3
  768.    
  769.         lda #$03
  770.         sta raster_num
  771.         lda #raster_3_pos
  772.         sta $d012
  773.  
  774.         lda #$00                ; change colour to black border
  775.         sta $d020               ; for bottom third of screen
  776.        
  777. ; recycle the 8 sprites in the bottom part of the screen
  778. ; which are being used for the top part of the starfield!
  779.  
  780.  
  781.         lda #$ff                ; turn on..
  782.         sta $d015               ; all 8 sprites!
  783.         lda #$00                ; make these sprites
  784.         sta $d01c               ; hires though!
  785.  
  786.         ldx #$00
  787.         ldy #$00
  788. draw_sprites_b1                 ; lets draw the top part of the starfield
  789.         lda b1_sprite_x,x       ; load in the x pos from the table
  790.         sta $d000,y             ; store in the sprites x register
  791.         lda b1_sprite_msb       ; check if we're in the MSB
  792.         sta $d010          
  793.         lda b1_sprite_y,x
  794.         sta $d001,y
  795.         lda b1_sprite_cols,x
  796.         sta $d027,x
  797.         lda b1_sprite_def,x
  798.         sta $07f8,x
  799.         iny
  800.         iny
  801.         inx
  802.         cpx #$08
  803.         bne draw_sprites_b1
  804.        
  805.        
  806.         ldx #$00
  807.         lda #$01
  808.         sta msb_flag1           ; set the temp value used for MSB juggling
  809. reposition_sprites_b1
  810.         lda b1_sprite_x,x
  811.         clc
  812.         adc b1_sprite_speed,x
  813.         sta b1_sprite_x,x
  814.  
  815.         bcc no_msb_b1           ; skip the MSB wrangling if carry isn't set
  816.  
  817.         lda b1_sprite_msb       ; read the current MSB value
  818.         eor msb_flag1           ; toggle the bit for the sprite being processed
  819.         sta b1_sprite_msb       ; write the current MSB value
  820.  
  821. no_msb_b1
  822.         asl msb_flag1           ; shift the bit used for toggling MSB up for the next pass
  823.         inx
  824.         cpx #$08
  825.         bne reposition_sprites_b1      
  826.        
  827.        
  828. ; split 2 is done, exit irq interrupt
  829.  
  830.         jmp irq_exit
  831.                
  832.        
  833. ; raster split 3 code ------------------------------------
  834.  
  835. irq_rout3
  836.  
  837. ; set interrupt handler ready for split 1
  838.        
  839.         lda #$01
  840.         sta raster_num
  841.         lda #raster_1_pos
  842.         sta $d012      
  843.        
  844.         lda #$00                ; change colour to black border
  845.         sta $d020               ; for bottom third of screen
  846.        
  847. ; recycle another 8 sprites in the very bottom part of the screen
  848. ; which are being used for the bottom half of the starfield
  849.  
  850.  
  851.         lda #$ff                ; turn on..
  852.         sta $d015               ; all 8 sprites!
  853.         lda #$00                ; make these sprites
  854.         sta $d01c               ; hires though!
  855.  
  856.         ldx #$00
  857.         ldy #$00
  858. draw_sprites_b2
  859.         lda b2_sprite_x,x
  860.         sta $d000,y
  861.         lda b2_sprite_msb
  862.         sta $d010      
  863.         lda b2_sprite_y,x
  864.         sta $d001,y
  865.         lda b2_sprite_cols,x
  866.         sta $d027,x
  867.         lda b2_sprite_def,x
  868.         sta $07f8,x
  869.         iny
  870.         iny
  871.         inx
  872.         cpx #$08
  873.         bne draw_sprites_b2
  874.  
  875.         ldx #$00
  876.         lda #$01
  877.         sta msb_flag2           ; set the temp value used for MSB juggling
  878. reposition_sprites_b2
  879.         lda b2_sprite_x,x
  880.         clc
  881.         adc b2_sprite_speed,x
  882.         sta b2_sprite_x,x
  883.  
  884.         bcc no_msb_b2           ; skip the MSB wrangling if carry isn't set
  885.  
  886.         lda b2_sprite_msb       ; read the current MSB value
  887.         eor msb_flag2           ; toggle the bit for the sprite being processed
  888.         sta b2_sprite_msb       ; write the current MSB value
  889.  
  890. no_msb_b2
  891.         asl msb_flag2           ; shift the bit used for toggling MSB up for the next pass
  892.         inx
  893.         cpx #$08
  894.         bne reposition_sprites_b2
  895.  
  896.        
  897. ; colour wash effect for bottom screen text lines
  898.  
  899. colour_wash
  900.  
  901.         ldx #$00
  902. colourwash_loop
  903.         lda colourwash_off,x
  904.         clc
  905.         adc colourwash_count
  906.         and #$0f
  907.         tay
  908.         lda colourwash_greys,y
  909.         sta $daa8,x
  910.         lda colourwash_rainbow,y       
  911.         sta $dbc0,x
  912.         lda colourwash_blues,y     
  913.         sta $daf8,x
  914.         sta $db48,x    
  915.         lda colourwash_browns,y    
  916.         sta $db20,x
  917.         sta $db70,x    
  918.         inx
  919.         cpx #$28
  920.         bne colourwash_loop
  921.  
  922.         ldx colourwash_timer
  923.         inx
  924.         cpx #$03
  925.         bcc exit_wash
  926.         inc colourwash_count
  927.         ldx #$00
  928. exit_wash  
  929.         stx colourwash_timer
  930.        
  931. ; test to see if logo pulse should be switched on
  932.  
  933.         dec pulse_timer         ; decrease the pulse_timer by 1!
  934.        
  935.         lda pulse_timer         ; load up the pulse timer!
  936.         cmp #$00                ; have we reached zero yet?
  937.         beq pulse_now           ; yes? go down to 'pulse_now'!
  938.                                 ; no?
  939.         jmp set_sync            ; jump down to 'set_sync_
  940.        
  941. pulse_now
  942.  
  943.         lda #01                 ; switch on pulse by setting the
  944.         sta pulse_flag          ; pulse flag to '1'
  945.  
  946.         lda #$fa                ; now reset our pulse timer to 250
  947.         sta pulse_timer         ; to wait another 5 seconds!
  948.        
  949. ; set sync variable for main line code synchronisation
  950.  
  951. set_sync
  952.    
  953.         lda #$01                ; set the sync flag to '1'     
  954.         sta sync                ; so the main code runs!
  955.        
  956. ; restore registers and exit irq interrupt
  957.  
  958. irq_exit
  959.  
  960.         pla
  961.         tay
  962.         pla
  963.         tax
  964.         pla
  965. nmi     rti
  966.  
  967. ; end irq interrupt code =============================
  968.  
  969.  
  970. ; all data tables live here! ===============================
  971.  
  972.  
  973. ; colour wash data tables for text colour cycling
  974.  
  975. colourwash_off
  976.         !byte $00,$01,$02,$01,$00,$01,$02,$01
  977.         !byte $08,$07,$06,$05,$04,$03,$02,$04
  978.         !byte $06,$08,$0a,$0c,$0e,$00,$0f,$0e
  979.         !byte $0d,$0c,$0b,$0a,$09,$08,$07,$06
  980.         !byte $0c,$0c,$0b,$0a,$0b,$0c,$0c,$0e      
  981.  
  982. colourwash_blues
  983.         !byte $06,$04,$0e,$0e,$03,$01,$0f,$03
  984.         !byte $0f,$01,$03,$0e,$0e,$04,$06,$0f
  985.        
  986. colourwash_browns
  987.         !byte $09,$0f,$02,$0e,$08,$07,$01,$0f
  988.         !byte $07,$0f,$01,$07,$08,$08,$02,$09
  989.        
  990. colourwash_greys
  991.         !byte $0b,$0b,$0c,$0f,$0f,$0d,$01,$0d
  992.         !byte $0d,$01,$01,$0d,$0f,$00,$0c,$0b
  993.                    
  994. colourwash_rainbow
  995.         !byte $06,$02,$04,$05,$03,$07,$01,$01
  996.         !byte $01,$01,$01,$07,$03,$05,$04,$06
  997.  
  998. ; text data for the rolling message
  999.  
  1000. mess_text
  1001.         !scr ">  *  C o s i n e    S y s t e m s  *  <"
  1002.         !scr ">         p r e s e n t s . . .        <"    
  1003.         !scr ">  the rather * awkwardly * monikered  <"
  1004.         !scr "> >> The Unused Shmup Tune Selector << <"
  1005.         !scr ">                                      <"
  1006.         !scr "> Please use an 8580 SIDney sound chip <"      
  1007.         !scr ">                                      <"
  1008.         !scr ">  Coding, graphics and music by aNdy  <"
  1009.         !scr ">                                      <"
  1010.         !scr "> Thanks goes to T.M.R, for letting me <"
  1011.         !scr ">  frolic in the Cosine Systems  6510  <"
  1012.         !scr ">  binary playground! Is that wise?!?  <"
  1013.         !scr ">                                      <"
  1014.         !scr "> Hopefully, I won't break anything... <"
  1015.         !scr ">   ...maybe only sprites in the MSB   <"    
  1016.         !scr ">                                      <"
  1017.         !scr "> As usual thanks goes to Moloch/Triad <"
  1018.         !scr ">   for his comments and suggestions   <"
  1019.         !scr ">                                      <"
  1020.         !scr "> Also on this occasion special thanks <"
  1021.         !scr ">  must be aimed and shot straight at  <"    
  1022.         !scr ">  Motion/Artstate, for his very kind  <"
  1023.         !scr ">  words of support and encouragement  <"
  1024.         !scr ">                                      <"
  1025.         !scr "> The tunes featured here were written <"
  1026.         !scr "> around 2 years ago at the request of <"
  1027.         !scr "> T.M.R, who wanted some new music for <"
  1028.         !scr "> the shooty shmup games he planned to <"
  1029.         !scr "> code as part of a rewrite of his old <"
  1030.         !scr "> assembly coding tutorial 'Hex Files' <"
  1031.         !scr ">                                      <"
  1032.         !scr ">  He *may* get round to rewriting it  <"
  1033.         !scr ">  one day...  breath not held...  ;)  <"        
  1034.         !scr ">                                      <"    
  1035.         !scr "> Cosine sends cordial salutations to: <"
  1036.         !scr ">  *  Absence  *  Abyss Connection  *  <"
  1037.         !scr ">   *  Arkanix Labs  *  Artstate  *    <"  
  1038.         !scr ">      *  Ate Bit  *  Atlantis  *      <"
  1039.         !scr ">    *  Booze Design  *  Camelot  *    <"            
  1040.         !scr ">    *  Censor Design  *  Chorus  *    <"
  1041.         !scr ">    *  Booze Design  *  Camelot  *    <"
  1042.         !scr ">    *  Chrome  *  CNCD  *  CPU  *     <"
  1043.         !scr ">       *  Crescent  *  Crest  *       <"                                    
  1044.         !scr ">  * Covert Bitops * Defence Force *   <"        
  1045.         !scr ">  *  Dekadence  *  Desire  *  DAC  *  <"
  1046.         !scr ">      *  DMAgic  *  Dual Crew  *      <"                
  1047.         !scr ">   *  Exclusive On  *  Fairlight  *   <"
  1048.         !scr ">    *  F4CG  * FIRE  *  Flat 3  *     <"                            
  1049.         !scr ">     *  Focus  *  French Touch  *     <"
  1050.         !scr ">  * Genesis Project * Gheymaid Inc *  <"
  1051.         !scr ">       *  Hitmen  *  Hoaxers  *       <"    
  1052.         !scr ">  * Hokuto Force * Legion Of Doom *   <"
  1053.         !scr "> *  Level 64  *  Maniacs Of Noise  *  <"            
  1054.         !scr ">      *  Mayday  *  Meanteam  *       <"        
  1055.         !scr ">     *  Metalvotze  *  Noname  *      <"        
  1056.         !scr ">      *  Nostalgia  *  Nuance  *      <"        
  1057.         !scr ">     *  Offence  *  Onslaught  *      <"        
  1058.         !scr ">    *  Orb  *  Oxyron  *  Padua  *    <"    
  1059.         !scr ">      *  Performers  *  Plush  *      <"        
  1060.         !scr ">       *  PPCS  *  Psytronik  *       <"            
  1061.         !scr ">      *  Reptilia  *  Resource  *     <"
  1062.         !scr ">    *  RGCD  *  Secure  *  SHAPE  *   <"        
  1063.         !scr ">      *  Side B  *  Singular  *       <"        
  1064.         !scr ">      *  Slash  *  Slipstream  *      <"        
  1065.         !scr ">   *  Success And TRC  *  Style  *    <"        
  1066.         !scr "> *  Suicyco Industries  *  Taquart  * <"        
  1067.         !scr ">   *  Tempest  *  TEK  *  Triad  *    <"                
  1068.         !scr ">  * Tristar And Red Sector * Viruz *  <"        
  1069.         !scr ">   * Vision * WOW * Wrath Designs *   <"
  1070.         !scr ">        *  Xenon  *  Xentax  *        <"
  1071.         !scr ">                                      <"
  1072.         !scr ">    Please visit...  cosine.org.uk    <"                    
  1073.         !scr ">                                      <"
  1074.         !scr ">   aNdy signing off in July 2019...   <"
  1075.         !scr ">                                      <"    
  1076.                                
  1077.         !byte $00       ; end of text marker           
  1078.  
  1079. ; data for the tune selected left hand side arrows indicator
  1080.        
  1081. lefthilite      !byte $be,$be,$be,$be,$be,$be
  1082.  
  1083. ; data for the tune selected right hand side arrows indicator
  1084.  
  1085. righthilite     !byte $bc,$bc,$bc,$bc,$bc,$bc
  1086.  
  1087. ; sprite tables for 'pulse' behind logo (in the top split)
  1088.  
  1089. t_sprite_x      !byte $00,$00,$00,$00,$00,$00,$00,$00
  1090. t_sprite_y      !byte $39,$4e,$63,$78,$8d,$00,$00,$00
  1091. t_sprite_cols   !byte $01,$01,$01,$01,$01,$01,$01,$01
  1092. t_sprite_def    !byte $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7
  1093. t_sprite_speed  !byte $0c,$0c,$0c,$0c,$0c,$00,$00,$00
  1094. t_sprite_msb    !byte $00,$00,$00,$00,$00,$00,$00,$00
  1095. t_sprite_xreset !byte $00,$00,$00,$00,$00,$00,$00,$00
  1096.  
  1097. ; sprite tables for first set of stars (second split)
  1098.  
  1099. b1_sprite_x     !byte $05,$64,$32,$f0,$e3,$b4,$a9,$e8
  1100. b1_sprite_y     !byte $ba,$c0,$c3,$c8,$c5,$c6,$c7,$c4
  1101. b1_sprite_cols  !byte $01,$01,$01,$0f,$0f,$0c,$0c,$0b
  1102. b1_sprite_def   !byte $a9,$a8,$a8,$a9,$a9,$a8,$aa,$aa
  1103. b1_sprite_speed !byte $07,$06,$08,$05,$04,$03,$03,$02
  1104. b1_sprite_msb   !byte $00,$00,$00,$00,$00,$00,$00,$00
  1105.  
  1106. ; sprite tables for second set of stars (third split)
  1107.  
  1108. b2_sprite_x     !byte $e9,$14,$fe,$0f,$a3,$09,$f0,$a1
  1109. b2_sprite_y     !byte $e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb
  1110. b2_sprite_cols  !byte $01,$01,$01,$0f,$0f,$0c,$0c,$0b
  1111. b2_sprite_def   !byte $a8,$a9,$a8,$a9,$a8,$a9,$aa,$aa
  1112. b2_sprite_speed !byte $08,$06,$07,$04,$05,$03,$03,$02
  1113. b2_sprite_msb   !byte $00,$00,$00,$00,$00,$00,$00,$00          
  1114.  
  1115.            
  1116. ; data for the screen/colour ram lives down here...
  1117.  
  1118. ; note: this data was generated using 'ChillED', a cross-dev
  1119. ; C64 screen editor coded by aNdy/AL/Cosine
  1120.  
  1121. screen_ram          ; the PETSCII logo and all the screen text
  1122. !byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$81,$CE,$84,$99,$A0
  1123. !byte $A0,$A0,$7E,$7B,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$A0,$A0,$7E,$7B,$E2,$E2,$E2,$E2,$6C,$7C,$A0,$E2,$E2,$E2,$E2,$E2,$E2,$A0,$A0,$7E,$7B,$E2,$E2,$E2,$E2,$A0
  1124. !byte $A0,$7E,$FE,$61,$69,$DC,$A2,$61,$7C,$69,$69,$DC,$A2,$FC,$7C,$7E,$FE,$61,$69,$DC,$A2,$61,$E1,$FC,$7C,$7C,$69,$69,$DC,$A2,$FC,$7C,$7E,$FE,$61,$69,$DC,$A2,$61,$DC
  1125. !byte $A0,$E1,$E9,$61,$7B,$FB,$EC,$6C,$FC,$20,$7B,$7B,$FB,$A5,$61,$E1,$E9,$61,$7B,$FB,$EC,$6C,$E1,$E9,$61,$FC,$20,$7B,$7B,$FB,$A5,$61,$E1,$E9,$61,$7B,$FB,$EC,$6C,$DC
  1126. !byte $A0,$E1,$A0,$61,$5E,$7C,$6C,$5E,$7E,$FE,$61,$5E,$E1,$AC,$61,$E1,$A0,$61,$5E,$7C,$6C,$5E,$E1,$A0,$61,$7E,$FE,$61,$5E,$E1,$AC,$61,$E1,$A0,$61,$DC,$7C,$6C,$DC,$A0
  1127. !byte $A0,$E1,$DC,$61,$5E,$5E,$5E,$5E,$E1,$DC,$61,$DC,$E1,$DC,$61,$E1,$DC,$61,$68,$68,$62,$7C,$E1,$DC,$61,$E1,$DC,$61,$5E,$E1,$DC,$61,$E1,$DC,$61,$68,$62,$20,$FB,$A0
  1128. !byte $A0,$7C,$E2,$7F,$7C,$E6,$A0,$DC,$7C,$E2,$7F,$7C,$7C,$E2,$7F,$20,$E2,$7E,$7C,$E2,$E2,$7F,$7C,$E2,$7E,$7C,$E2,$7F,$7C,$7C,$E2,$7F,$7C,$E2,$7F,$E2,$E2,$7F,$E1,$A0
  1129. !byte $A0,$E1,$A1,$61,$6C,$E2,$FB,$E8,$E1,$A1,$61,$FE,$E1,$A1,$61,$7C,$FB,$5E,$5C,$FB,$A1,$61,$E1,$A1,$61,$E1,$A1,$61,$FE,$E1,$A1,$61,$E1,$A1,$61,$FE,$E1,$20,$FE,$A0
  1130. !byte $A0,$E1,$AE,$61,$DC,$E1,$7C,$A0,$E1,$AE,$61,$DC,$E1,$AE,$61,$E1,$7C,$5E,$5E,$E1,$AE,$61,$E1,$AE,$61,$E1,$AE,$61,$5E,$E1,$AE,$61,$E1,$AE,$61,$5E,$E1,$FC,$7C,$A0
  1131. !byte $A0,$E1,$BB,$FC,$7C,$E1,$FC,$7C,$E1,$BB,$FC,$7C,$E1,$BA,$61,$E1,$FC,$7C,$E2,$E1,$BA,$61,$E1,$BB,$61,$E1,$BB,$61,$5E,$E1,$BA,$61,$E1,$BB,$61,$E2,$E1,$BA,$61,$A0
  1132. !byte $A0,$7B,$FB,$A2,$A0,$E1,$E9,$61,$7B,$FB,$A2,$A0,$E1,$E9,$61,$E1,$E9,$61,$A0,$A0,$EC,$6C,$E1,$E9,$61,$7B,$FB,$61,$5E,$E1,$E9,$61,$7B,$FB,$A2,$A0,$E1,$E9,$61,$A0
  1133. !byte $A0,$A0,$68,$68,$68,$7B,$FB,$61,$E8,$68,$68,$68,$E1,$EC,$6C,$7B,$FB,$61,$68,$68,$68,$A0,$E1,$EC,$6C,$5E,$68,$68,$5E,$E1,$EC,$6C,$5E,$68,$68,$68,$68,$FB,$61,$A0
  1134. !byte $A0,$A0,$A0,$A0,$A0,$A0,$7B,$7B,$DC,$A0,$A0,$A0,$6C,$6C,$DC,$A0,$7B,$7B,$DC,$A0,$A0,$A0,$6C,$6C,$A0,$A0,$A0,$A0,$A0,$6C,$6C,$DC,$A0,$A0,$A0,$A0,$A0,$7B,$7B,$A0
  1135. !byte $A0,$80,$A0,$A0,$A0,$A0,$FC,$68,$DC,$A0,$A0,$A0,$62,$FE,$A0,$A0,$FC,$68,$A0,$A0,$A0,$A0,$68,$FE,$A0,$A0,$A0,$A0,$A0,$68,$FE,$A0,$A0,$A0,$A0,$A0,$A0,$FC,$68,$DC
  1136. !byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0
  1137. !byte $A0,$ED,$C0,$BE,$A0,$94,$C8,$85,$A0,$95,$CE,$95,$A4,$85,$C4,$A0,$A4,$88,$8D,$D5,$90,$A0,$94,$D5,$8E,$9C,$A0,$93,$C5,$8C,$C5,$83,$D4,$B0,$92,$A0,$BC,$C0,$EE,$A0
  1138. !byte $E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2,$E2
  1139. !byte $4E,$15,$0D,$02,$05,$12,$20,$0B,$05,$19,$13,$20,$14,$0F,$20,$10,$0C,$01,$19,$20,$3C,$3E,$20,$52,$15,$0E,$53,$14,$0F,$10,$20,$0B,$05,$19,$20,$13,$14,$0F,$10,$13
  1140. !byte $7A,$20,$20,$20,$20,$20,$20,$20,$20,$FA,$20,$7A,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$FA,$20,$20,$20,$20,$20,$20,$20,$7A,$FA,$20,$20,$20,$20,$FA,$7A,$20
  1141. !byte $20,$20,$20,$20,$20,$20,$20,$1B,$31,$1D,$20,$55,$0E,$15,$13,$05,$04,$20,$54,$09,$14,$0C,$05,$20,$54,$12,$01,$03,$0B,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
  1142. !byte $20,$20,$20,$20,$20,$20,$20,$1B,$32,$1D,$20,$55,$0E,$15,$13,$05,$04,$20,$47,$05,$14,$20,$52,$05,$01,$04,$19,$20,$54,$12,$01,$03,$0B,$20,$20,$20,$20,$20,$20,$20
  1143. !byte $20,$20,$20,$20,$20,$20,$20,$1B,$33,$1D,$20,$55,$0E,$15,$13,$05,$04,$20,$49,$0E,$2D,$07,$01,$0D,$05,$20,$54,$12,$01,$03,$0B,$20,$20,$20,$20,$20,$20,$20,$20,$20
  1144. !byte $20,$20,$20,$20,$20,$20,$20,$1B,$34,$1D,$20,$55,$0E,$15,$13,$05,$04,$20,$47,$01,$0D,$05,$20,$0F,$16,$05,$12,$20,$54,$12,$01,$03,$0B,$20,$20,$20,$20,$20,$20,$20
  1145. !byte $20,$20,$FA,$7A,$20,$20,$7A,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$FA,$20,$20,$20,$20,$20,$20,$20,$20,$7A,$20,$20,$FA
  1146. !byte $3E,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$3C
  1147.  
  1148. colour_ram          ; colour data for the PETSCII logo and text
  1149. !byte $06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06
  1150. !byte $06,$06,$06,$0D,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$0D,$06,$06,$06,$06,$0D,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$0D,$06,$06,$06,$06,$06
  1151. !byte $06,$06,$0D,$03,$0D,$03,$0E,$04,$0D,$0D,$0D,$03,$0E,$04,$06,$06,$0D,$03,$0D,$03,$0E,$04,$0D,$03,$06,$0D,$0D,$0D,$03,$0E,$04,$06,$06,$0D,$03,$0D,$03,$0E,$04,$06
  1152. !byte $06,$0D,$03,$0E,$06,$0E,$04,$06,$06,$01,$0E,$06,$03,$0E,$04,$0D,$03,$0E,$06,$0E,$04,$06,$0D,$03,$0E,$06,$01,$0E,$06,$03,$0E,$04,$0D,$03,$0E,$06,$0E,$04,$06,$06
  1153. !byte $06,$03,$0E,$04,$06,$04,$06,$06,$06,$0E,$04,$06,$0E,$04,$04,$03,$0E,$04,$06,$04,$06,$06,$03,$0E,$04,$06,$0E,$04,$06,$0E,$04,$04,$03,$0E,$04,$06,$04,$06,$06,$06
  1154. !byte $06,$0E,$04,$06,$06,$06,$06,$06,$0E,$04,$06,$06,$04,$04,$06,$0E,$04,$06,$0E,$04,$04,$06,$0E,$04,$06,$0E,$04,$06,$06,$04,$04,$06,$0E,$04,$06,$0E,$04,$01,$06,$06
  1155. !byte $06,$04,$06,$01,$06,$06,$06,$06,$04,$06,$01,$06,$04,$06,$01,$06,$06,$06,$04,$04,$06,$01,$04,$06,$06,$04,$06,$01,$06,$04,$06,$01,$04,$06,$01,$04,$06,$01,$06,$06
  1156. !byte $06,$01,$07,$0A,$06,$06,$06,$06,$01,$07,$0A,$06,$01,$07,$0A,$06,$06,$06,$06,$01,$07,$0A,$01,$07,$0A,$01,$07,$0A,$06,$01,$07,$0A,$01,$07,$0A,$06,$01,$06,$06,$06
  1157. !byte $06,$07,$0A,$08,$06,$0A,$06,$06,$07,$0A,$08,$06,$07,$0A,$08,$0A,$06,$06,$06,$07,$0A,$08,$07,$0A,$08,$07,$0A,$08,$06,$07,$0A,$08,$07,$0A,$08,$06,$07,$0A,$06,$06
  1158. !byte $06,$0A,$08,$02,$06,$08,$08,$06,$0A,$08,$02,$06,$0A,$08,$02,$08,$08,$06,$06,$0A,$08,$02,$0A,$08,$02,$0A,$08,$02,$06,$0A,$08,$02,$0A,$08,$02,$06,$0A,$08,$02,$06
  1159. !byte $06,$06,$08,$02,$09,$02,$02,$09,$06,$08,$02,$09,$02,$02,$09,$02,$02,$09,$02,$08,$09,$06,$02,$02,$09,$06,$02,$09,$06,$02,$02,$09,$06,$08,$02,$09,$02,$02,$09,$06
  1160. !byte $06,$06,$06,$06,$06,$06,$09,$09,$06,$06,$06,$06,$09,$09,$06,$06,$09,$09,$06,$06,$06,$06,$09,$09,$06,$06,$06,$06,$06,$09,$09,$06,$06,$06,$06,$06,$06,$09,$09,$06
  1161. !byte $06,$06,$06,$06,$06,$06,$06,$09,$06,$06,$06,$06,$09,$06,$06,$06,$06,$09,$06,$06,$06,$06,$09,$06,$06,$06,$06,$06,$06,$09,$06,$06,$06,$06,$06,$06,$06,$06,$09,$06
  1162. !byte $06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06
  1163. !byte $06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06
  1164. !byte $06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06
  1165. !byte $06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06
  1166. !byte $06,$06,$06,$06,$06,$06,$00,$06,$06,$06,$06,$00,$06,$06,$00,$06,$06,$06,$06,$00,$06,$06,$0B,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$00,$06,$06,$06,$06,$06
  1167. !byte $0B,$00,$00,$00,$00,$0B,$00,$00,$00,$0B,$00,$0B,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0B,$00,$00,$00,$00,$00,$00,$00,$0B,$0B,$00,$00,$00,$00,$0B,$0B,$00
  1168. !byte $00,$00,$00,$00,$00,$00,$00,$06,$06,$06,$00,$06,$06,$06,$06,$06,$06,$00,$06,$06,$06,$06,$06,$00,$06,$06,$06,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1169. !byte $00,$00,$00,$00,$00,$00,$00,$06,$06,$06,$00,$06,$06,$06,$06,$06,$06,$0B,$06,$06,$06,$00,$06,$06,$06,$06,$06,$00,$06,$06,$06,$06,$06,$00,$00,$00,$00,$00,$00,$00
  1170. !byte $00,$00,$00,$00,$00,$00,$00,$06,$06,$06,$00,$06,$06,$06,$06,$06,$06,$00,$06,$06,$06,$06,$06,$06,$06,$00,$06,$06,$06,$06,$06,$00,$00,$00,$00,$0B,$00,$00,$00,$00
  1171. !byte $00,$00,$00,$00,$00,$00,$00,$06,$06,$06,$00,$06,$06,$06,$06,$06,$06,$0B,$06,$06,$06,$06,$00,$06,$06,$06,$06,$00,$06,$06,$06,$06,$06,$00,$00,$00,$00,$00,$00,$00
  1172. !byte $00,$00,$0B,$0B,$00,$00,$0B,$00,$00,$00,$00,$0B,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0B,$00,$00,$00,$00,$00,$00,$00,$00,$0B,$00,$00,$0B
  1173. !byte $06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06
  1174.  
  1175.  
  1176. ; end of code!!! ========================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement