`8NNNNh7p NNNNNNNNNNNNNNNNNNNNNNNNNNNNNuONNNNNNNNNNNNNNNNNNNNNNO@o^  @`! #@%`')+-/1 3@5`79;=?A C@E`GIKMO/OU`WY[]@_a ce`gikmoq s@u`wy{}  @` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @` @`]_a!cAogikmoqsAuawy{}!A!a!Aa " B b  !"!B!b!!!!!"!""#B"%b"'")"+"-"/#1"#3B#5b#7#9#;#=#?$A"$CB$Eb$G$I$KM$O%Q"%SB%Ub%W%Y%%]%_&a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y''}'("(B(b((((()")B)b)))@o^  @`! #@%`')+-/1 3@5`79;=?A C@E`GIKMO/OU`WY[]@_a ce`gikmoq s@u`wy{}  @` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @` @`]_a!cAogikmoqsAuawy{}!A!a!Aa " B b  !"!B!b!!!!!"!""#B"%b"'")"+"-"/#1"#3B#5b#7#9#;#=#?$A"$CB$Eb$G$I$KM$O%Q"%SB%Ub%W%Y%%]%_&a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y''}'("(B(b((((()")B)b)))1PLANE AJBN CORKPIC3PC1BLOCKY8 TFBREXTRA ,LOADER PI1(B}HOWPIC2PRG8DECADE S HvECADE TOS 8DAVE PC1&n 12 DAT13 DAT  14 DAT <SPRITE TECTABLE140DATTABLE60 DAT15 DAT (10 DAT ]ANDREW PC1['11 DATb(LB DATg)ACOLIN PC1es#16 DAT  GRAHAM PC1Dr&PAUL PC1[|;'17 DAT 18 DAT " 19 DAT &?"SINGLE16TFBr~PIC_PT1 PC1+PIC_PT2 PC1/+LOADER mFB_NYD90SRCi ~?~?~?~?~??~~~~?~~~~~~~~~~~~~~~~~~~~~~~~?~~~~>?~~~~~~>>~?~?~?~?~?~?~?~?~?~?~?????~~~~~?~?~?~??~~~~~~~~?~~~>~>~~~~~~?~|||||||?~?~~~>~>~~~~~~?|?>~~~~~~~~~~~~~~~~~~~~?~~~~~~~~~~~~~~??~?~?~?~?~?~?~?~?~?~?~?~?~~~~~~~~~~~~~~~?πππππ ~???`|08<`??~~~~~~~~~????~?????????~??>?>?p8<<?~~~<~~~???????????~~~~~~~~~~~~~~~~~??~~~~~~????~~~~??~~~~???~~~~?~~U"UD"V3C"6w?? DG?D @C?@ ,$@$`b`   @ '8 ppq88ppp!8p$p2r88p0pq 'w!      'DDDD! DDDP 'wowwwww ' (D@,@@  @ @@' H 0`,`b $00`a  0` `` 00``  ,D  @  ,0 ? @@ @  , `   '   @ `,    ???@ @  `,    ???@    '`,   ? ???@ wwww~~~?~?~w~<wg<~~|x|<<|xww88xww><<>w<w>>~~w>>~p~w><888>w>w>>w?><<8<<px<w>IIAc>>www~w~w~>wppw>|~ww~|p~~pp~~ppp?pwws?wwwwww>>>>w>w~||~wppppppwww>wwww>~w~ppp>ww?~w~ww>p~?>wwwwww?wwwww>ww>>wwwww>>>  ????>>>>~>>>  ????????  $>>>>???? $>>>>~ $>>>>~ >>>~~~000000008888?x>>>|>|>|>|~~~||||~~~~>>>>>>>><<<<<<<<~>>><<<<~>>>>>>><<<<<<<<>||||~~~~>>>>>>>>|||pppp>>>>~~~~~~~~????8888>>>>>>>>>>>>>>>>>>>>pppp~~~~~~~~~~~~????>>>>>>>>~>>>>>>>>>>>>>>>~~~~>>>>>>>~~~~~>>>>|||~~~~>>>>????????<<<<????pppp????>>>>x<???????x|x>>>ppppx>>>>>>>>>>>~~~~~~~~~x~x~x~~~~~????>>>>>>>>>>>>~~~~?~~~~???>>>>>>>>>>>>~>>>????~~~~~~~~>>>>>>>>>>>>~~~xxx~~~~>>>>~~~~????>>>>>>>>>>>>????????xxx>>>>>>>>>>>>>>>>????>>>>>>>>>>>>xxx>~~~~>~~~~>>>>>>>>pxxx>>>>>>>>>>>>>>>>pxpxpx~>>>~~~~>...>>>>>~~~~????????~~~~????xxx~>>>~ddd>~~~~~~~~|||~>>>ppp????>>>????~~~~~>>><<<>>>???~~~~????~>>>~|||??????????~~~~~~~~x0 ?00   ?`` 00006000  00  00   `` 00003000  00  00  `` 00003000  ?000   00?010?0? ?000? 00``? ? `` 0000```` 0000`0`0`` 00000?0`` 00000?0`` 0000  0?@@@? 0??xGG?x p 11D0!! y66< ww<epE @ ww"x{{Upaa7E 8 vv<x MpE  ׯׯ(PxD0,, y6600x &   xGGx??xGx}ppۏ$pwwy GׯP(HE x????//0뷇Hx__O ????DׯP(뷻HD@? ?``?@ `4ʰ۰O$ppxp@? ?``?@ `? ;?``?@ `?? ??``?@ `? UU?U@?``?@ `?? UU?U@?``?@ ` @? ?@?``?@ `߻ Bc/ # 7????;!Aap# ????;"@`# ?``?@ `;$w@H`p# ??``?@ `;"@`# s?``?@ `;!Aa# ??``?@ `߻ Bs/'# ??``?@ ` @# `?``?@ `?O'# `?``?@ `# `????# ????? $ >xx s}}Gx ?G x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  T*; ; Fingerbobs New Year Demo Source Code ; ------------------------------------ ; ; From THE DEMO CLUB ; ; DO *NOT* COPY THIS, BUY IT FROM EITHER THE FINGERBOBS ; OR THE DEMO CLUB OR THE LOST BOYS PD LIBRARY! ; ********************************************************* * * * The Fingerbobs New Year Demo * * * * Version 1.7 * * * * (c)1989/90 The FingerBOBS * * * * Written by Oberje' * * * * Released on 12/01/90 * * and 23/01/90 * * * ********************************************************* * * NOTE: * This source does NOT contain any of the music, as it * was all hacked from games/Automation intros! * If you want the music you will have to find some other way * to get it! * I don't think it is fair to the Musicians to make * the music be freely available. If you disagree then tough * 'cos this is my source and I'll do what I like! * * This demo will mean nothing if you do not have a reasonable * understanding of 68000 assembly language. * * Many of the effects in this demo ( Most actually! ) rely * on Bitplane tricks, so It would be advisable to read up * on and understand, how the ST screen is organised. * * I tried ( as much as possible ) to write this demo, in * a logical structured way, I am not sure I have succeeded! * * All of the demo screens are present in this listing, except * for the loader, which can be found in the folder LOADER, * * ALTHOUGH I HAVE TRIED TO COMMENT THIS SOURCE TO A REASONABLE * LEVEL THERE ARE CERTAIN THINGS I CANNOT EXPLAIN , AND SOME * STUFF I CAN'T REMEMBER! * * Demo Stats: * ----------- * This demo was developed mostly over my Xmas/New Year * Holidays although many of the routines existed in * semi-finished ( i.e Bugged ) forms previously * ( I should have been doing research on AI, but y'know * how it is.... ) * * The following products were used during this demos * development. * * Hisoft Devpac II * Degas Elite * Fast Basic ( For Sine Tables ) * Russ Paynes Bytestomper v2.1 * Mastersound sampler * ST Internals * The Concise Atari ST 68000 Programmers Reference Guide * VIDI-AMIGA Digitiser - Amiga * James Dads Video camera! * Deluxe Paint III - Amiga * DOS-2-DOS - Amiga * Becks Bier * Peach Schapps * Smirnoff Vodka * Lots of Coffee * MUSIC - Propaganda - The Secret Wish * Madonna - Like a prayer * Duran Duran - Decade * Skin Games - Blood Rush * Belinda Carlisle - Runaway Horses * Various assorted 12"s !!! * etc............. * ( I filled about 14 disks with stuff during the development of this! ) * * Good luck!............. * * REMEMBER! * You can contact the Fingerbobs by writing to * * OBERJE' * 6 CARRON TERRACE * STONEHAVEN * KINCARDINESHIRE * SCOTLAND * AB3 2HX * * or by leaving a message for the WIZOP of The Batcave BBS * * The Batcave * 03586 89049 * Most Speeds * Most times! * * nospr equ 26 ;Number of sprites plane equ 0 ;Scroller plane! ********************** * 2 Bit scroll macro * ********************** scr2 macro ;Macro for move.l \1+(\2*2)(a0),d0 ;Scroller routine move.w \1+8+(\2*2)(a0),d0 ; lsl.l #2,d0 ; swap d0 ; move.w d0,\1+(\2*2)(a0) ; endm ; *********************** * Nibble Scroll macro * *********************** scr macro move.l \1+(plane*2)(a0),d0 move.w \1+8+(plane*2)(a0),d0 lsl.l #4,d0 swap d0 move.w d0,\1+(plane*2)(a0) endm *************** * Nibble puts * *************** nib1 macro move.b plane*2(a0),d5 andi.b #$f,d5 move.b plane*2(a1),d6 andi.b #$f0,d6 or.b d5,d6 move.b d6,plane*2(a1) endm nib2 macro move.b plane*2(a0),d5 lsr.b #4,d5 andi.b #$f,d5 move.b plane*2(a1),d6 andi.b #$f0,d6 or.b d5,d6 move.b d6,plane*2(a1) endm ;MFP Register equates iea equ $fffa07 ;Interrupt Enable A ieb equ $fffa09 ;Interrupt Enable B ipa equ $fffa0b ;Interrupt Pending A ipb equ $fffa0d ;Interrupt Pending B isa equ $fffa0f ;Interrupt In-service A isb equ $fffa11 ;Interrupt In-service B ima equ $fffa13 ;Interrupt Mask A imb equ $fffa15 ;Interrupt Mask B vector equ $fffa17 ;Vector Register tacr equ $fffa19 ;Timer A Control tbcr equ $fffa1b ;Timer B Control tadr equ $fffa1f ;Timer A Data tbdr equ $fffa21 ;Timer B Data ********************************************************* * * * THE MAIN SCREEN * * * ********************************************************* *************************** * Begin program Execution * *************************** start movea.l a7,a5 ;Keep old SP lea ustack,a7 ;install our own stack movea.l 4(a5),a5 ;Get Base Page address move.l $c(a5),d0 ;Find Text Section Size add.l $14(a5),d0 ;Add Data Section Size add.l $1c(a5),d0 ;Add BBS Section Size add.l #$100,d0 ;Add 256 bytes for Base Page move.l d0,-(a7) ; move.l a5,-(a7) ;Call Mshrink, give area move.w d0,-(a7) ;d0 long back to GEMDOS move.w #$4a,-(a7) ; trap #1 ; lea $c(a7),a7 ; move.w #$f,d0 ; p_pause move.w #-1,d1 ;Wait a bit..... pauselp dbra d1,pauselp ;To make sure drive stops spinning. dbra d0,p_pause ; dc.w $a00a ;Hide Mouse move.l #old_spr1,old_sprites move.l #old_spr2,other ;Set Sprite save pointers move.l #message,here ;Set up scroller move.b #0,slice ;for main screen move.l #bounce_tab1,curr_bounce move.l #bar2,do_cols2 ;Set up scroll bounce & move.w #3,wait ;Colour Banding move.l #scrolltext,crkscrl jsr crk_restart ;Set up Corkscrew Scroller variables sf.b stopped ;Scroller not stopped! jsr super_on ;Enter Supervisor mode, set screens etc move.l #$31415926,$426 ;Reset Trap move.l #codex,$42a move.w #4,track ;Install music move.w #4,playing ;Track 2 * jsr m6_init ; * move.l #m6_int,mus_int ;Which is Renegade jsr cut_table ;Create table for music screen jsr make_sprites ;Create sprite data jsr make_sets ;Generate Character Sets for corkscrew jsr change_disp ;Initialise sprite variables jsr do_sprites ;Set sprites jsr screen_swap ;ready jsr do_sprites ;to roll... jsr screen_swap ; jsr res_bounce ;Restart bounce move.l scrollpos,a2 ; jsr display_scroll ;Restart Scroller move.l #$31415926,$426 ;Reset Trap move.l #codex,$42a jsr new_vectors ;Install our vectors jsr main_loop ;Do whatever must be done jsr old_vectors ;Get back old vectors jsr super_off ;Set user mode clr.w -(a7) ;Pterm - Exit Program trap #1 ******************************** * The Demo Never Reaches Here! * ******************************** ***************************************** * * * Demo Main Screen Interrupt Routines * * * ***************************************** *************************** * Main Screen VBL routine * *************************** new_vbl addq.w #1,$466.w ;Bump the frame count clr.b tbcr ;Timer B off move.b #1,tbdr ;Wait 1 HBL move.b #8,tbcr ;Timer B on move.w #$0,$ff8240 ;Border -> Black move.l #killtop,$120 ;First HBL address move.b #0,$ffff820a.w ;Set 60Hz move.l #bar2,at2 ;Set pointer for banding rte ;Lower border must be killed at line 227! ;Kill the Top Border killtop move.b #2,$ffff820a.w ;Set 50Hz -> Top now gone! move.l #hbl_2,$120 ; clr.b tbcr ;Timer B off move.b #128,tbdr ;Wait until colour banding move.b #8,tbcr ;Timer B on move.w #24,nlines ;24 lines of colour bclr #0,isa ;end of interrupt rte ; hbl_2 move.l a0,-(a7) ;Do colours for scroller move.l at2,a0 ;Get pointer to colour table move.w (a0),$ffff8242 ;Colour 1 ( Scroller ) adda.l #2,a0 ; move.l a0,at2 ;Advance colour table pointer subq.w #1,nlines ;Decrement no of lines to do beq.s end_hbl_2 ;Last l  |T*w GGp0S#}Y8{eQ>, ~wpjd^YTOKGC?;852/,*'%#!)39CMWaku                     ! 36WV` 0$ )-H @0%$$ )-0 xv @$000!c$ .* * * OBERJE'S 24X16 CHARACTER SET GENERATOR * * 11/07/89 - 1:37AM * * ( JESUS! THATS A BIT LATE! ) * * TAKES DEGAS PIC AND PRODUCES CONTINUES SINGLE BIT PLANE * CHARACTER SET, EACH CHARACTER ( 3*16 ) BYTES OF BIT IMAGE * * * USE BINARY SAVE FROM MONST2 TO SAVE SET. * * section text lea char_data,a1 lea picture,a0 move.w #5-1,d2 4 Rows ugga move.w #16-1,d1 16 lines per row ooga move.l a0,a3 move.l a1,a2 move.w #6-1,d0 13 chars a line ( 12 in loop ) round move.b (a0),(a1) move.b 1(a0),1(a1) move.b 8(a0),2(a1) adda.l #(3*16),a1 move.b 9(a0),(a1) move.b 16(a0),1(a1) move.b 17(a0),2(a1) adda.l #(3*16),a1 adda.l #24,a0 dbra d0,round move.b (a0),(a1) move.b 1(a0),1(a1) move.b 8(a0),2(a1) move.l a2,a1 add.l #3,a1 move.l a3,a0 adda.l #$a0,a0 dbra d1,ooga adda.l #576,a1 dbra d2,ugga move.w #0,-(a7) move.l #-1,-(a7) move.l #-1,-(a7) move.w #5,-(a7) trap #14 add.l #12,a7 move.l #(5*13)-1,d2 move.l #"A"-"A",d3 again move.l d3,d0 mulu #(3*16),d0 test lea char_data,a0 adda.l d0,a0 lea $78000+6,a1 WE WANT TO SHOW IN BLUE move.w #15,d1 loope move.b (a0)+,(a1) move.b (a0)+,1(a1) move.b (a0)+,8(a1) adda.l #$a0,a1 dbra d1,loope move.w #8,-(a7) trap #1 addq.l #2,a7 addq.l #1,d3 dbra d2,again move.w #1,-(a7) move.l #-1,-(a7) move.l #-1,-(a7) move.w #5,-(a7) trap #14 add.l #12,a7 clr.w -(a7) trap #1 rts section data pic incbin "nyd_set1.pi1" picture equ pic+34 piccols equ pic+2 section bss char_data ds.b (4*13*16*3) end_data equ * (>gR|`F(>g@!|F!hFB(>g@!|F!hFB(>g@!| F!hFB`@H$|$rN  (PgS(Rg hSRS((@gTB$hB f @` f0(/9BB|-@`d f*(/ wppwU33ss77w>>>>~~~~????????????~~~~????~~~~~~~~~~~~pppp~~~~????~~~~~~~~~~~~~~~~pppp~~~~~~~~~~~~~~~~~~~~pppp~~~~~~~~~~~~~~~~~~~~pppp~~~~~~~~~~~~~~~~~~~~~~~~?p?p?p?p~~~~????~~~~~~~~~~~~~~~~~~~~~~~~?p?p?p?p~~~~????~~~~~~~~~~~~>>>>~~~~~~~~?p?p?p?p~~~~????~~~~~~~~~~~~~~~~?p?p?p?p~~~~~~~~?p?p?p?p~~~~~~~~?p?p?p?p????~~~~????~~~~?p?p?p?p~~~~>>>>~~~~?p?p?p?p~~~~????~~~~~~~~~~~~~~~~~~~~????~~~~?~?~?~?~~~~~pppp~~~~????????????????~~~~~~~~~~~~~~~~~~~~????~~~~~~~~pppp????~~~~~~~~~~~~~~~~~~~~????~~~~~~~~pppp????~~~~~~~~~~~~~~~~~~~~????~~~~~~~~pppp????~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~????pppp????~~~~>~>~>~>~~~~~>|>|>|>|~~~~~~~~~~~~~~~~~~~~????pppp~~~~~~~~~~~~>|>|>|>|||||~~~~>>>>~~~~~~~~~~~~~~~~~~~~????pppp~~~~~~~~~~~~~|~|~|~|||||~~~~~~~~~~~~~~~~~~~~????pppp~~~~~~~~~~~~||||||||????~~~~~~~~????~~~~????pppp~~~~~~~~~~~~||||????~~~~~~~~????~~~~pppp~~~~~~~~>>>>~~~~pppp~~~~~~~~????pppp~~~~????~~~~~~~~~~~~pppp~~~~????~~~~~~~~~~~~pppp~~~~????????~~~~????~~~~????~~~~pppp~~~~????~~~~~~~~~~~~????~~~ine ? Yes-> move.b #0,tbcr ; move.b #3,tbdr ;Wait 3 lines move.b #8,tbcr ; bclr.b #0,isa ;Clear in-service bit move.l (a7)+,a0 rte end_hbl_2 move.l #killborder,$120 ;Install border kill move.b #0,tbcr ;Wait until line 227 move.b #227-128-72+3,tbdr move.b #8,tbcr bclr.b #0,isa ;Clear in-service bit move.w #$777,$ffff8242 ;Colour 1 back to normal move.l (a7)+,a0 ; bsr play rte ; ;Kill the Lower Border killborder clr.b tbcr ;Timer B off movem.l d0/a1,-(a7) ;Save regs move.w #$fa21,a1 ;Timer B Data Register move.b #200,(a1) ;Make sure is enough lines! move.b #8,tbcr ;Timer B on move.b (a1),d0 ; time cmp.b (a1),d0 ;Wait for Last Scanline beq time ; clr.b $ffff820a.w ;Set 60 Hz moveq #4,d0 ;This Time delay is VERY exact noploop nop ;Do NOT CHANGE dbra d0,noploop ; move.b #2,$ffff820a.w ;Set 50 Hz movem.l (a7)+,d0/a1 ;Restore Regs clr.b tbcr ;Timer B off bclr #0,isa ;end of interrupt rte ; ***************** * Null Routines * ***************** ; Used whilst between ; the various demo screens ; null_vbl move.b #2,$ffff820a.w ;Set 50 Hz addq.w #1,$466.w ;Bump the frame count clr.b tbcr ;Timer B off move.l #0,$ff8240 ;Palette -> Black move.l #0,$ff8244 ; move.l #0,$ff8248 ; move.l #0,$ff824c ; move.l #0,$ff8250 ; move.l #0,$ff8254 ; move.l #0,$ff8258 ; move.l #0,$ff825c ; bsr play ;Still play music rte ; tween_vbl move.b #2,$ffff820a.w ;Set 50 Hz addq.w #1,$466.w ;Bump the frame count clr.b tbcr ;Timer B off move.l #$00000777,$ff8240 move.l #$07770777,$ff8244 move.l #$07770777,$ff8248 move.l #$07770777,$ff824c move.l #$07770777,$ff8250 move.l #$07770777,$ff8254 move.l #$07770777,$ff8258 move.l #$07770777,$ff825c bsr play ;Keep music going rte ; ***************** * MUSIC ROUTINE * ***************** ; Calls current music routine ; and changes the drive light ; according to the volume of ; Channel C on the sound chip ; ; Drive light flash is created ; merely by selecting/deselecting ; the drive! ; play movem.l d0-d7/a0-a6,-(a7) ;Save Regs move.b #14,$ff8800 ; ori.b #%00000010,$ff8802 ;Drive light off jump jsr no_int ;Call Music move.b #$a,$ff8800 ; move.b $ff8800,d0 ;Get Chan C Volume andi.b #$f,d0 ; cmpi.b #$f,d0 ;Is MAX ? bne leave_light ;No -> move.b #14,$ff8800 ; andi.b #%11111101,$ff8802 ;Drive light on leave_light movem.l (a7)+,d0-d7/a0-a6 ;Restore Regs rts ;Exit mus_int equ jump+2 ;Address of music interrupt ************ * No Music * ************ ; Null Music Routine ; no_int rts ****************** * Keyboard patch * ****************** kybd move.w #$2300,sr ;Lower IPL to 3 goop jmp $80000 ;Jump through old vector ******************************** * The Music Screen VBL routine * ******************************** ;Alters colour banding ;Sets up HBL ; mus_vbl addq.w #1,$466.w ;Bump the frame count move.w #$77,$ffff8240.w move.l #mus_hbl,$120.w ;Install HBL move.b #0,$fffffa1b.w ;Turn Timer B off move.b #1,$fffffa21.w ;1 line between HBLs move.b #8,$fffffa1b.w ;Turn Timer B on move.l do_cols,at3 ;Letter colours subi.w #1,wait tst.w wait bne end_vbl move.w #3,wait ;Only change cols every 4th frame addq.l #2,do_cols cmpi.l #end_cols,do_cols bne end_vbl move.l #letter_cols,do_cols end_vbl move.l #sky_cols,at ;Colours for sky bsr play ;Do music rte ;End of VBL ******************** * Music Screen HBL * ******************** ;Colour banding, Bouncy Sprites ;And the VU Meter are all run from ;this interrupt ; mus_hbl move.l a0,-(a7) ;Save Reg move.l at,a0 ;Address of sky colour data move.w (a0),$ffff8240 ;Change border colour addq.l #2,at ;Point to next sky colour move.l at3,a0 ;Letter colour data address move.w (a0),$ffff8244 ;Change appropriate colour addq.l #2,at3 ;Point to next letter colour move.l (a7)+,a0 ;Restore reg cmpi.l #water,at ;All Bars displayed ? beq hb2 ;Yes -> safe to display letters move.b #4,$fffffa21.w ;4 lines until next interrupt bclr.b #0,$fffffa0f.w ;Clear in-service bit rte hb2 movem.l d0-d7/a0-a6,-(a7) move.w #$777,$ffff8244 ;Change Inside Letter colour to white bsr delete_letters ;Remove old letters from screen bsr display_letters ;Display new letters bsr update_letters ;Calculate new position bsr draw_meter ;Do VU Meter movem.l (a7)+,d0-d7/a0-a6 move.b #0,$fffffa1b.w ;Turn HBLs off bclr.b #0,$fffffa0f.w rte ***************************** * The CorkScrew VBL routine * ***************************** ; crk_vbl addq.w #1,$466.w ;Bump the frame count move.w #0,$ffff8240.w ;Set Border colour to black move.b #0,$fffffa1b.w ;Turn Timer B off move.b #103,$fffffa21.w move.l #barcols,at ;Bar colours move.w #15,lines ;Lines in bar move.l #crk_hbl,$120.w move.b #8,$fffffa1b.w ;Turn Timer B on jsr play sub.w #1,wait tst.w wait bne gnome move.w #3,wait add.l #2,do_cols2 cmpi.l #bar2_end,do_cols2 bne gnome move.l #bar2,do_cols2 gnome rte crk_hbl move.l a0,-(a7) ;Save Reg move.l at,a0 ;Get bar address move.w (a0),$ffff8240 ;Set Border to colour move.w (a0),$ffff8244 ;Set Back of scroll to this colour move.l (a7)+,a0 ;Restore reg addi.l #2,at ;Point to next bar col subi.w #1,lines ;Count down lines tst lines beq endcrkvbl ;Last line ? move.b #0,$fffffa1b.w ;Turn Timer B off move.b #1,$fffffa21.w ;1 line between crk_hbls move.b #8,$fffffa1b.w bclr.b #0,$fffffa0f.w ;Clear in-service bit rte endcrkvbl move.w #$322,$ffff8244 ;Restore back of scroll colour move.l #crk_hbl_2,$120.w move.b #1,$fffffa21.w move.b #8,$fffffa1b.w move.l do_cols2,at2 bclr.b #0,$fffffa0f.w ;Clear in-service bit rte crk_hbl_2 m ?  @`, H  ? ???@  @ @`,  (    ???@   @`,@"@ @   ?@ @ $$@`,B @  ?@  DD@`,   ? @   @@ ,@@ @    @@ ,@  @     @@ ,@ @@   @?D?D! ,@  @@   @$@$@,B@!   @ @',"@ @ @@    ,@ @? @ @   @,?? '8 pq#q88q# p'8p,rrD88r@p'=w=w_p'    @@ 'D$DDD$E@"@'DZ$DDQP "'wow;ww;?w  ' D  D@ @,@@ @? ?@ @@ @" 0 "  0`bb00b `? ???0```00` ` @ @A   @$" ??$"    @ @A  @?? @A  @   ???                 D @D @$  $       ` 0 ` 0 ` 0 ` 0 ? ? ? ?` 0` 0` p0` p0 9? 9? ? ? ? ? ` 06 ` 067~7 ` 6 ` q6 ;9   T*~~~~~~~~>>>>>>>>>>>>~~~xxx~~~~>>>>~~~~????>>>>>>>>>>>>????????xxxove.l a0,-(a7) move.l at2,a0 move.w (a0),$ffff8250 ;Colour8 move.w (a0),$ffff8252 ;Colour9 add.l #2,at2 move.l (a7)+,a0 move.b #0,$fffffa1b.w move.b #3,$fffffa21.w move.b #8,$fffffa1b.w bclr.b #0,$fffffa0f.w ;Clear in-service bit rte *********************************** * Who Are Thes People? Screen VBL * *********************************** ; who_vbl addq.w #1,$466.w ;Bump the frame count move.b #0,$fffffa1b.w ;Turn Timer B off movem.l d0-d7/a0-a6,-(a7) movem.l p1pal,d0-d7 ;Install correct palette movem.l d0-d7,$ff8240 bsr p_scroll ;Call scroller jsr play ;Call music movem.l (a7)+,d0-d7/a0-a6 rte ;End of VBL ************************************** * The Extra Big Scroller VBL routine * ************************************** ;Kill borders! ; big_vbl addq.w #1,$466.w ;Bump the frame count clr.b tbcr ;Timer B off move.b #1,tbdr ;Wait 1 HBL move.b #8,tbcr ;Timer B on move.l #bigtop,$120.w ;First HBL address move.b #0,$ffff820a.w ;Set 60Hz move.w #$0,$ff8240 ;Border -> Black move.l do_cols2,at2 move.b #56,nlines sub.w #1,wait tst.w wait bne harry move.w #2,wait add.l #2,do_cols2 cmpi.l #bar2_end,do_cols2 bne harry move.l #bar2,do_cols2 harry rte ;Lower border must be killed at line 227! bigtop move.b #2,$ffff820a.w ;Set 50Hz -> Top now gone! move.l #bands1,$120 ; clr.b tbcr ;Timer B off move.b #4,tbdr ;Wait until colour banding move.b #8,tbcr ;Timer B on bclr #0,isa ;end of interrupt rte ; bands1 move.l a0,-(a7) move.l at2,a0 move.w (a0),$ff8242 add.l #2,at2 move.l (a7)+,a0 sub.b #1,nlines tst.b nlines beq end_bands1 bclr #0,isa ;end of interrupt rte end_bands1 move.b #0,tbcr move.b #3,tbdr ;? move.b #8,tbcr move.l #killbig,$120.w bclr #0,isa ;end of interrupt rte killbig clr.b tbcr ;Timer B off movem.l d0/a1,-(a7) ;Save regs move.l at2,a1 move.w (a1),$ff8242 add.l #2,at2 move.w #$fa21,a1 ;Timer B Data Register move.b #200,(a1) ;Make sure is enough lines! move.b #8,tbcr ;Timer B on move.b (a1),d0 ; timex cmp.b (a1),d0 ;Wait for Last Scanline beq timex ; clr.b $ffff820a.w ;Set 60 Hz moveq #4,d0 ;This Time delay is VERY exact noplop nop ;Do NOT CHANGE dbra d0,noplop ; move.b #2,$ffff820a.w ;Set 50 Hz movem.l (a7)+,d0/a1 ;Restore Regs clr.b tbcr ;Timer B off move.b #4,tbdr ; move.b #8,tbcr ; move.b #6,nlines ; move.l #bands2,$120.w ; bclr #0,isa ;end of interrupt rte ; bands2 move.l a0,-(a7) move.l at2,a0 move.w (a0),$ff8242 add.l #2,at2 move.l (a7)+,a0 sub.b #1,nlines tst.b nlines beq end_bands2 bclr #0,isa ;end of interrupt rte end_bands2 move.b #0,tbcr bclr #0,isa ;end of interrupt rte ************** * Reset Trap * ************** ; ;Just hang ; codex bsr hotblack ;Black move.b #$2,$ffff820a move.b #$8,$ff8800 move.b #$0,$ff8802 ;PSG off move.b #$9,$ff8800 move.b #$0,$ff8802 move.b #$a,$ff8800 move.b #$0,$ff8802 p_machinery bra p_machinery even ********************** * * * General Routines * * * ********************** ********************************* * Print Out a message * * a0=text addr, a1=screen * ********************************* ;Prints a message to the screen ;using the 16x16 font ; ;This gives a screen size of 20x12 chars ; printline moveq.l #0,d0 ;Clear move.b (a0)+,d0 ;Get Char cmpi.b #0,d0 ;End? beq bog_off ; cmpi.b #13,d0 ;Newline? bne.s checking1 ; clr.l d1 ;Back to left hand side! bra.s printline ; checking1 cmpi.b #10,d0 ;Linefeed? bne wbk1 ; add.l #2560,a1 ;Next line bra.s printline ; wbk1 subi.b #32,d0 ;ASCII -> Char no. sweet lea sixteen,a2 ;Base of char data lsl.l #5,d0 ;Offset ( 32 bytes per letter ) adda.l d0,a2 ;a2=char data move.l a1,a3 ;Screen addr add.l d1,a3 ;Plus X offset move.w #16-1,d3 ;16 lines printloop move.w (a2),(a3) ;Copy character to bitplanes move.w (a2),4(a3) move.w (a2),6(a3) add.l #2,a2 ;Next line of char data add.l #$a0,a3 ;Next Screen line dbf d3,printloop ; add.l #8,d1 ;Increase X offset 1 char bra printline ; bog_off rts ; ***************** * Clear Screens * ***************** ; hotclear clr.l $24 ;Trace vector demolish move.l screen_2,a5 ; move.l screen_1,a6 ;Clear screens move.w #(50000/4)-1,d0 ;to wipe out any hotlp move.l #0,(a6)+ ;garbage move.l #0,(a5)+ ; dbra d0,hotlp ; rts *************************************** * Copy Main Screen Picture to Screens * *************************************** hotcopy lea picture,a0 ;Depack data onto move.l screen_1,a1 ;Screen1 adda.l #leave*$a0,a1 bsr undo_picture move.l screen_1,a1 adda.l #leave*$a0,a1 adda.l #32000,a1 lea picture2,a0 bsr undo_picture move.l screen_1,a0 ; move.l screen_2,a1 ; adda.l #leave*$a0,a0 ; adda.l #leave*$a0,a1 ; move.w #11000,d0 ; hotlp1 move.l (a0)+,(a1)+ ; dbra d0,hotlp1 ; rts ; ********************************************************* * Delay : Wait a few secs ( Used when changing screen ) * ********************************************************* ; delay move.w #40,d7 ;Wait <1 sec del bsr vbl ; dbf d7,del ; rts ; ************************ * Set Palette to Black * ************************ ; hotblack move.l #0,$ff8240 ;Palette -> Black move.l #0,$ff8244 move.l #0,$ff8248 move.l #0,$ff824c move.l #0,$ff8250 move.l #0,$ff8254 move.l #0,$ff8258 move.l #0,$ff825c desiado rts ********************************** * Set Palette for credit screen * ********************************** ; hotcols move.l #$00000777,$ff8240 ;Palette -> Black move.l #$07770777,$ff8244 move.l #$07770777,$ff8248 move.l #$07770777,$ff824c move.l #$07770777,$ff8250 move.l #$07770777,$ff8254 move.l #$07770777,$ff8258 ;Except col 15 move.l #$07770777,$ff825c rts ******************************************** * Display credits, wait 5 secs or keypress * ******************************************** * Enter, a0=addr of text ; hotcredits bsr hotblack ;Blank colours bsr hotclear ;Clear Screens move.l screen_1,a1 ; clr.l d1 ; bsr printline ;Print Credits/Instructions bsr hotcols ;Text Colours move.w #$2700,sr ; move.l #tween_vbl,$70.w move.w #$2300,sr ;Install correct VBL bsr vbl ;Wait move.w #8,-(a7) ;Wait for a Keypress trap #1 ; addq.l #2,a7 ; bsr hotblack ;Blank colours move.w #$2700,sr ; move.l #null_vbl,$70.w ;Blank VBL again move.w #$2300,sr ; bsr hotclear ;Clear Screens rts ; ****************** * * * HOUSEKEEPING * * * ****************** leave equ 10 ;Unusable lines at top of screen super_on clr.l -(a7) ;Set to SUPERVISOR mode move.w #$20,-(a7) ; trap #1 ; addq.l #6,a7 ; move.l d0,old_stack ;Save old SP move.w #2,-(a7) ; trap #14 ; addq.l #2,a7 ; move.l d0,old_physbase ;Find and save physbase move.w #4,-(a7) ; trap #14 ; addq.l #2,a7 ; move.w d0,old_res ;Find and save resolution move.l #screen_area1,d0 addi.l #512,d0 ; andi.l #$ffffff00,d0 ; move.l d0,screen_1 ;Set pointer to screen 1 move.l #screen_area2,d0 addi.l #512,d0 ; andi.w #$ffffff00,d0 ; move.l d0,screen_2 ;Set pointer to screen 2 clr.w -(a7) ; move.l screen_1,-(a7) ; move.l screen_2,-(a7) ; move.w #5,-(a7) ;Change to Low resolution trap #14 ;and screen to correct lea $c(a7),a7 ;address lea $ff8240,a0 ;Copy current lea old_palette,a1 ;hardware palette move.w #7,d0 ;and install col_lp1 move.l (a0),(a1)+ ;a black palette move.l #0,(a0)+ ; dbra d0,col_lp1 ; jsr hotclear ;Clear both screens jsr hotcopy ;Copy picture to both screens lea $ff8240,a0 ; lea new_palette,a2 ; move.w #7,d0 ;Install col_lpw move.l (a2)+,(a0)+ ;main screen colours dbra d0,col_lpw ; pea m_off ;Mouse off move.w #1,-(a7) ; move.w #$19,-(a7) ; trap #14 ; addq.l #8,a7 ; move.l #$31415926,$426 ;Reset Trap move.l #codex,$42a rts ;Exit routine super_off move.l old_physbase,d0 ;Return screen to move.w old_res,-(a7) ;old resolution move.l d0,-(a7) ;and address move.l d0,-(a7) ; move.w #5,-(a7) ; trap #14 ; lea $c(a7),a7 ; lea $ff8240,a1 ;Copy lea old_palette,a0 ;old palette move.w #7,d0 ;to hardware col_lp2 move.l (a0)+,(a1)+ ;palette dbra d0,col_lp2 ; pea m_on ;Mouse on move.w #0,-(a7) ; move.w #$19,-(a7) ; trap #14 ; addq.l #8,a7 ; move.l old_stack,-(a7) ;Get back to USER mode move.w #$20,-(a7) ;with old stack trap #1 ; addq.l #6,a7 ; rts ; new_vectors move sr,-(a7) ;Save SR ori.w #$700,sr ;Raise IPL to 7 lea vector_store,a0 ;Save old MFP values here... move.b ieb,(a0)+ ;MFP Enable B move.b iea,(a0)+ ;MFP Enable A move.b ima,(a0)+ ;MFP I-mask A adda.l #1,a0 ; move.l $118.w,(a0)+ ;Keybd move.l $120.w,(a0)+ ;HBL - Timer B move.l $70.w,(a0)+ ;Vblank move.l $118.w,goop+2 ;Revector move.l #kybd,$118.w ;keyboard routine andi.b #$fe,iea ;Enable A - Timer B off andi.b #$df,ieb ;Enable B - Timer C off move.l #killtop,$120.w ;Install HBL ori.b #1,iea ;Enable A - Timer B on ori.b #1,ima ;I-Mask A - Timer B on move.l #new_vbl,$70.w ;Install VBL move.w (a7)+,sr ;Restore SR rts ; old_vectors move sr,-(a7) ;Save SR ori.w #$700,sr ;Raise IPL to 7 lea vector_store,a0 ;Get vectors from here move.b (a0)+,ieb ;MFP Enable B move.b (a0)+,iea ;MFP Enable A move.b (a0)+,ima ;MFP I-Mask A adda.l #1,a0 ; move.l (a0)+,$118.w ;Keyboard move.l (a0)+,$120.w ;HBL move.l (a0)+,$70.w ;Vblank move.w (a7)+,sr ; move.b #2,$ffff820a.w ;Make sure 50Hz rts ; ************************* * * * THE MAIN PROGRAM LOOP * * * ************************* main_loop bsr blank_out ;Delete old sprites bsr do_sprites ;Draw new sprites bsr screen_swap ;Swap screens bsr display ;Update Scroll buffer move.l oldpos,a2 ; bsr clear_scroll ;Delete old scroll move.l scrollpos,a2 ; bsr display_scroll ;Show New Scroll tst.b stopped ;Paused ? beq.s running ;If not do scroll subq.b #1,stopleft ;Dec wait var bne.s obervb ;if still to wait do so sf stopped ;Take pause off running bsr check_char ; bsr scroll ;Scroll the buffer obervb bsr update_scroll ;Calculate Scroller Bounce move.w #37,-(a7) ;Wait for Screen Switch trap #14 ; addq.l #2,a7 ; move.w #$ff,-(a7) ;Check the Keyboard move.w #6,-(a7) ; trap #1 ; addq.l #4,a7 ; tst.w d0 ; beq main_loop ;No key then loop cmpi.b #"m",d0 ;M - Music bne over1 ; bsr music_screen ; clr.l d0 ; bra.s main_loop ;Round again over1 cmpi.b #"w",d0 ;W - Who are these people bne over2 ; jsr person_screen ; clr.l d0 ; bra main_loop ; over2 cmpi.b #"c",d0 ;C - Corkscrew bne over3 ; bsr cork_screen ; clr.l d0 ; bra main_loop ; over3 cmpi.b #"e",d0 ;E - Extra Big Scroller bne main_loop ; bsr big_screen ; clr.l d0 ; bra main_loop ; exit_lp rts ;Leave main loop : Not Used ********************************* * * * The SPRITE Service Routines * * * ********************************* ; ;The sprite movement is determined by adding ;two sine waves together, each sine wave has ;a different amplitude and the frequencies can ;be varied. As can the separation along ;both waves between the sprites ;Although this sounds quite natural, some ;really wicked and un-natural looking waves can ;be defined in this way! ; ***************** * Sprite MACROS * ***************** ; ;Takes a sprite and ;Places the sprite on screen at ;the correct X,Y position. ; pon macro ;Place sprite ON screen clr.w d0 ;Zero regs clr.w d2 ; clr.w d3 ; clr.w d4 ; move.b (a4),d0 ;X offset move.b 2(a4),d2 ;Y offset move.b 4(a4),d3 ;X2 offset move.b 6(a4),d4 ;Y2 offset add.w #256,d3 ;Make X2 and Y2 add.w #256,d4 ;Point to second table addq.l #8,a4 ;Ready table for next sprite move.b (a6,d0.w),d0 ;X coord move.b (a6,d2.w),d2 ;Y coord move.b (a6,d3.w),d3 ;X2 coord move.b (a6,d4.w),d4 ;Y2 coord add.b d3,d0 ;Final X coord add.b d4,d2 ;Final Y coord lea sprite_data,a0 ;Base of Sprite data move.l screen_2,a2 ;Base os Screen data adda.l #(leave+3)*$a0,a2 ;Dont use top lines! move.w d2,d3 \ This replaces mulu #$a0,d2 lsl.w #7,d2 | It may be faster, lsl.w #5,d3 | I don't know....? add.w d3,d2 / add.l d2,a2 ;address of y addi.l #40,d0 ;Add X constant offset ( Center 'bobs') move.l d0,d1 ;X andi.l #$f,d1 ;0-15 asl #8,d1 ;256 Bytes per sprite data add.l d1,a0 ;a0=sprite we want andi.b #$f0,d0 ;\ Equivalent to d0=d0/16 asr.w #1,d0 ;/ d0=d0*8 add.l d0,a2 ;a2=screen address we want move.l a0,a3 ;Save a1 move.l a2,(a5)+ ;Save screen pos rept 16 ;16 Lines of Sprite Data move.l (a3)+,d0 ;Mask screen for sprite and.l d0,4(a2) ; move.l (a3)+,d0 ; and.l d0,12(a2) ; move.l (a3)+,d0 ;Put sprite on screen or.l d0,4(a2) ; move.l (a3)+,d0 ; or.l d0,12(a2) ; adda.l #$a0,a2 ; endr endm blank macro ;Blank out old sprites move.l (a6)+,a4 ; cnt set 4 ;For some reason ( unexplained ) ;the REPT directive clr.l cnt(a4) ;wouldn't work, so I had clr.l cnt+8(a4) ;to type ALL this in! cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 clr.l cnt(a4) clr.l cnt+8(a4) cnt set cnt+$a0 endm *************************** * The Main Sprite Routine * *************************** ; do_sprites clr.l d0 lea vertical,a6 ;a6=base of sine table 1 move.w Xinc,d0 ;Get sprite wave move.w Yinc,d2 ;variables move.w X2inc,d3 ; move.w Y2inc,d4 ; lea x1,a0 ; cnt set 0 ;Update sprites rept nospr ;All of 'em! add.b d0,cnt(a0) ; add.b d2,cnt+2(a0) ; add.b d3,cnt+4(a0) ; add.b d4,cnt+6(a0) ; cnt set cnt+8 ; endr move.l old_sprites,a5 ;Place all sprites on screen lea x1,a4 ;and save sprite positions for later pon 1 ; pon 2 ; pon 3 ; pon 4 ; pon 6 ; pon 7 ; pon 8 ; pon 9 ; pon 10 ; pon 11 ; pon 12 ; pon 13 ; pon 14 ; pon 15 ; pon 16 ; pon 16 ; pon 16 ; pon 16 ; pon 16 ; pon 16 ; pon 16 ; pon 16 ; pon 16 ; pon 16 ; pon 16 ; pon 16 ; out rts ;Exit ;Remove Sprites from Screen blank_out move.l old_sprites,a6 blank 16 blank 16 blank 16 blank 16 blank 16 blank 16 blank 16 blank 16 blank 16 blank 16 blank 16 blank 15 blank 14 blank 13 blank 12 blank 11 blank 10 blank 9 blank 8 blank 7 blank 6 blank 5 blank 4 blank 3 blank 2 blank 1 rts ********************************** * Change distance between 'BOBS' * ********************************** ; This routine recalculates ; The Table Pointers for each ; Sprite with The First Sprite ; Being used as a base value ; change_disp lea x1,a0 ;Point to table pointers move.w XDisp,d0 ;Get displacement move.w YDisp,d3 ; move.b (a0),d1 ;Get Start X move.b 2(a0),d2 ;Get Start Y rept nospr ;26 Sprites move.b d1,(a0) ;New X move.b d2,2(a0) ;New Y add.b d0,d1 ;Calc Next X add.b d3,d2 ;Calc Next Y addq.l #8,a0 ;Next Pointers endr lea x1,a0 ;Point to table pointers move.w X2Disp,d0 ;Get displacement move.w Y2Disp,d3 ; move.b 4(a0),d1 ;Get Start X move.b 6(a0),d2 ;Get Start Y arooga rept nospr ;32 Sprites move.b d1,4(a0) ;New X move.b d2,6(a0) ;New Y add.b d0,d1 ;Calc Next X add.b d3,d2 ;Calc Next Y addq.l #8,a0 ;Next Pointers endr rts ***************************************** * Swap over Screens and Sprite pointers * ***************************************** ; screen_swap move.w #-1,-(a7) ;Display new screen move.l screen_2,-(a7) ; move.l screen_1,-(a7) ; move.w #5,-(a7) ; trap #14 ; lea $c(a7),a7 ; move.l screen_1,d0 ;Swap screen pointers move.l screen_2,screen_1 move.l d0,screen_2 ; move.l other,d0 ;Swap sprite pointers move.l old_sprites,other move.l d0,old_sprites ; rts ; *********************** * * * Main Screen Bouncy * * Scroller Routines * * * *********************** ; ;The scroller is scrolled in a buffer and ;copied to the screen each frame, at a position ;determined by the bounce tables ; check_char cmpi.b #0,slice ;New char? bne chk_xit ;Nope-> addq.l #1,here ;Get next char chk_xit rts ;Go restart move.l #message,here ;Start of message move.b #0,slice ;Zero slice bsr display ;Show slice rts scroll lea scroll_data,a0 ;Buffer move.w #16-1,d1 ;16 lines scloop scr $0 scr $8 scr $10 scr $18 scr $20 scr $28 scr $30 scr $38 scr $40 scr $48 scr $50 scr $58 scr $60 scr $68 scr $70 scr $78 scr $80 scr $88 scr $90 scr $98 add.l #$a0,a0 dbra d1,scloop rts * * Display : here = addr of char to print * display lea char_set,a0 ;Base of Char Data move.l here,a1 ; clr.l d0 ; move.b (a1),d0 ;Get Character cmpi.b #0,d0 ;Is End-of-text ? beq restart ; cmp.b #65,d0 ;Is it alphabetic blt symbols ; subi.b #65,d0 ;Turn from ASCII to char no. trim andi.l #$ff,d0 ;Mask off rubbish mulu.w #(16*3),d0 ;Get offset add.l d0,a0 ;a0=addr of chars pix data move.b slice,d0 ; andi.l #%110,d0 ; lsr.b #1,d0 ;Find which slice of the character adda.l d0,a0 ;is to be displayed btst #0,slice ; beq nibble2 ; nibble1 lea put_data,a1 ; move.w #16-1,d0 ; nl1 nib1 ; add.l #$a0,a1 ; addq.l #$3,a0 ; dbra d0,nl1 ; nib_xit addq.b #1,slice ; cmpi.b #6,slice ; beq nib_xit2 ; rts ; nib_xit2 move.b #0,slice ; rts ; nibble2 lea put_data,a1 ; move.w #16-1,d0 ; nl2 nib2 ; add.l #$a0,a1 ; addq.l #$3,a0 ; dbra d0,nl2 ; bra nib_xit ; symbols cmpi.b #13,d0 ; beq space ; cmpi.b #" ",d0 ; beq space ; cmpi.b #1,d0 ;Next sprite wave beq getsprwave ; cmpi.b #21,d0 ;Bounce #1 beq b1 ; cmpi.b #22,d0 ;Bounce #2 beq b2 ; cmpi.b #23,d0 ;Bounce #3 beq b3 ; cmpi.b #24,d0 ;Bounce #4 beq b4 ; cmpi.b #25,d0 ;Bounce #5 beq b5 ; cmpi.b #26,d0 ;Bounce #6 beq b6 ; cmpi.b #9,d0 ;Pause 1 sec beq s1 ; cmpi.b #10,d0 ;Pause 3 secs beq s2 ; cmpi.b #"+",d0 ; bgt above ; subi.b #32,d0 ; addi.b #26,d0 ; bra trim ; space move.b #26,d0 ; bra trim ; above subi.b #32,d0 ; addi.b #25,d0 ; bra trim b1 move.l #bounce_tab1,curr_bounce bra except b2 move.l #bounce_tab2,curr_bounce bra except b3 move.l #bounce_tab3,curr_bounce bra except b4 move.l #bounce_tab4,curr_bounce bra except b5 move.l #bounce_tab5,curr_bounce bra except b6 move.l #bounce_tab6,curr_bounce bra except s1 move.b #50,stopleft ;( 1 second ) st stopped ;Pause bra except ; s2 move.b #150,stopleft ;( 3 seconds ) st stopped ;Pause bra except ; res_wave move.l #spr_wave_tab,spr_wave ; ;Get the values for the next sprite wave in the list ; getsprwave move.l spr_wave,a0 ; cmpi.w #$ffff,(a0) ; beq.s res_wave ; move.w (a0)+,Xinc ; move.w (a0)+,Yinc ; move.w (a0)+,XDisp ; move.w (a0)+,YDisp ; move.w (a0)+,X2inc ; move.w (a0)+,Y2inc ; move.w (a0)+,X2Disp ; move.w (a0)+,Y2Disp ; move.w (a0)+,d0 ; cmpi.w #$ffff,d0 ;If X coord is -1 beq noxy ;Then do not change move.b d0,x1 ;Bob coords, just move.w (a0)+,d0 ;its variables move.b d0,y1 ; move.w (a0)+,d0 ; move.b d0,cx1 ; move.w (a0)+,d0 ; move.b d0,cy1 ; noxy bsr change_disp ; addi.l #24,spr_wave ; except lea char_set,a0 ; addq.l #1,here ; bra space ; rts ; * Bounce ; ;Get next scroller position from ;bounce list ; res_bounce move.l curr_bounce,bounce_at update_scroll move.l bounce_at,a0 ; clr.l d0 ; move.w (a0)+,d0 ; cmpi.w #$ffff,d0 ; beq res_bounce ; move.l screen_2,a1 ; adda.l #130*$a0,a1 ;** Pos of scroll base! adda.l d0,a1 ; move.l a1,scrollpos ; move.l a0,bounce_at ; rts ; * Routine to print scroll buffer * to addr a2 display_scroll move.l a2,oldpos ; lea scroll_data,a0 ; move.l #16-1,d7 ;16 lines next_word1 move.w $0(a0),$0(a2) ; move.w $8(a0),$8(a2) ; move.w $10(a0),$10(a2) ; move.w $18(a0),$18(a2) move.w $20(a0),$20(a2) move.w $28(a0),$28(a2) move.w $30(a0),$30(a2) move.w $38(a0),$38(a2) move.w $40(a0),$40(a2) move.w $48(a0),$48(a2) move.w $50(a0),$50(a2) move.w $58(a0),$58(a2) move.w $60(a0),$60(a2) move.w $68(a0),$68(a2) move.w $70(a0),$70(a2) move.w $78(a0),$78(a2) move.w $80(a0),$80(a2) move.w $88(a0),$88(a2) move.w $90(a0),$90(a2) move.w $98(a0),$98(a2) adda.l #$a0,a2 ; adda.l #$a0,a0 ; dbra d7,next_word1 ; rts ; * Routine to clear screen of scroller data * a2=screen address clear_scroll move.l #16-1,d7 ;16 lines next_word2 clr.w $0(a2) ; clr.w $8(a2) ; clr.w $10(a2) ; clr.w $18(a2) clr.w $20(a2) clr.w $28(a2) clr.w $30(a2) clr.w $38(a2) clr.w $40(a2) clr.w $48(a2) clr.w $50(a2) clr.w $58(a2) clr.w $60(a2) clr.w $68(a2) clr.w $70(a2) clr.w $78(a2) clr.w $80(a2) clr.w $88(a2) clr.w $90(a2) clr.w $98(a2) adda.l #$a0,a2 ; dbra d7,next_word2 ; rts ; ***************************************************************** * * * THE MUSIC SCREEN * * * ***************************************************************** music_screen move.b #2,$ffff820a.w ;Set 50 Hz bsr hotblack ;Blank colours move.w #$2700,sr ;Put in duff interrupts move.l #null_vbl,$70.w ; move.w #$2300,sr ; jsr vbl ;Wait a frame lea music_credits,a0 bsr hotcredits ;Display credits move.w #3,wait ;3 Frames before HBL scroll move.l #letter_cols,do_cols bsr display_letters ;Ensure display variables initialised lea mus_picture+35*$a0,a0 move.l screen_1,a1 ; adda.l #125*$a0,a1 ; move.w #3400,d0 ; picloop ; move.l (a0)+,(a1)+ ;Copy some picture data to dbra d0,picloop ;Screen e.g. "Instructions & VU Meter" bsr delay ;*** WAIT *** move.w #$2700,sr ;Put in music scrn interrupts move.l #mus_vbl,$70.w ; move.l #mus_hbl,$120.w ; move.w #$2300,sr ; lea $ff8240,a0 ;Install new screens palette lea mus_palette,a2 ; move.w #7,d0 ; col_lp4 move.l (a2)+,(a0)+ ; dbra d0,col_lp4 ; bsr show_track ;Show Current track ***************** * Music Handler * ***************** ;Acts on keyboard events, ;Screen bouncy sprites are ;run from the HBL routine! ; readkey move.w #8,-(a7) ;Wait for a key trap #1 ; addq.l #2,a7 ; cmpi.b #" ",d0 ;" " : Exit screen beq f10 ; cmpi.b #13,d0 ;Enter : Change Tune beq change_tune ; swap d0 ;Get Other Word cmpi.b #$4b,d0 ;"<-" : Track Down beq track_down ; cmpi.b #$4d,d0 ;"->" : Track Up beq track_up ; bra readkey ; top_track equ 47+27 track_up addq.w #1,track ;Increase Track no. cmpi.w #top_track+1,track bne back_to_loop move.w #0,track bra back_to_loop track_down subq.w #1,track ;Decrease Track no. cmpi.w #-1,track bne back_to_loop move.w #top_track,track bra back_to_loop back_to_loop bsr show_track ;Display track no. & name. bra readkey ;Back to loop.... change_tune move.w track,d0 ;Change move.w d0,playing ;Track playing cmpi.w #0,d0 ; beq cosmic1 cmpi.w #1,d0 beq cosmic2 cmpi.w #2,d0 beq cosmic3 cmpi.w #3,d0 beq cosmic4 cmpi.w #4,d0 beq ren cmpi.w #5,d0 beq heli1 cmpi.w #6,d0 beq heli2 cmpi.w #7,d0 beq heli3 cmpi.w #8,d0 beq heli4 cmpi.w #9,d0 beq heli5 cmpi.w #10,d0 beq cats cmpi.w #11,d0 beq hawk cmpi.w #12,d0 beq xen1 cmpi.w #13,d0 beq xen2 cmpi.w #14,d0 beq xen3 cmpi.w #15,d0 beq ramp1 cmpi.w #16,d0 beq ramp2 cmpi.w #17,d0 beq neck1 cmpi.w #18,d0 beq neck2 cmpi.w #19,d0 beq out1 cmpi.w #20,d0 beq out2 cmpi.w #21,d0 beq gold1 cmpi.w #22,d0 beq gold2 cmpi.w #23,d0 beq enduro1 cmpi.w #24,d0 beq enduro2 cmpi.w #25,d0 beq enduro3 cmpi.w #26,d0 beq retg cmpi.w #27,d0 beq speed1 cmpi.w #28,d0 beq speed2 cmpi.w #29,d0 beq speed3 cmpi.w #30,d0 beq speed4 cmpi.w #31,d0 beq speed5 cmpi.w #32,d0 beq speed6 cmpi.w #33,d0 beq speed7 cmpi.w #34,d0 beq weird1 cmpi.w #35,d0 beq weird2 cmpi.w #36,d0 beq weird3 cmpi.w #37,d0 beq weird4 cmpi.w #38,d0 beq verm1 cmpi.w #39,d0 beq verm2 cmpi.w #40,d0 beq verm3 cmpi.w #41,d0 beq verm4 cmpi.w #42,d0 beq verm5 cmpi.w #43,d0 beq verm6 cmpi.w #44,d0 beq star1 cmpi.w #45,d0 beq star2 cmpi.w #46,d0 beq star3 cmpi.w #47,d0 beq star4 cmpi.w #48,d0 beq custo1 cmpi.w #49,d0 beq custo2 cmpi.w #50,d0 beq custo3 cmpi.w #51,d0 beq custo4 cmpi.w #52,d0 beq custo5 cmpi.w #53,d0 beq custo6 cmpi.w #54,d0 beq obli1 cmpi.w #55,d0 beq obli2 cmpi.w #56,d0 beq obli3 cmpi.w #57,d0 beq obli4 cmpi.w #58,d0 beq plat1 cmpi.w #59,d0 beq plat2 cmpi.w #60,d0 b  0 008$$$Ā?~>>>?????~>?~~??~~x<~~~~?~~~<>>?>>?~>~~>~??>>?>>ppp8p>|<<<<???~>>>>>>|<|~>~??~>>>~?~~>?x<~~~~~~~~x<?????p?x|x||||~~~~~~~~~~~~?~>>>~?~>>~?~>>>>~??>~???~?>>??p>>>>>>>>>~?>>>>>>>>>~?p>>>>>>~x<x<~??~x<x<~??xs_int bsr show_track bra readkey speed2 move.l #no_int,mus_int move.w #1,d0 jsr m10 move.l #m10_int,mus_int bsr ~????~~~~pppppppp~~~~????ppppπ????????ppppπ````????~~~~>>>>ppppπ~~~~????ppppπ0000~~~~????ppppπ????8888~~~~????pppp????<<<<~~~~????pppp????````~~~~????pppp||||~~~~????pppp    ~~~~????pppp~~~~????pppp~~~~????pppp????~~~~????pppp????????>>>>????pppp????pppp8888pppppppp????pppp????????????????pppp????????pppp~~~~pppp<<<<~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~pppp<<<<~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~pppp~~~~~~~~~~~~~~~~????pppp~<~<~<~<~~~~????pppp~~~~~~~~????????pppp????????~~~~~~~~~~~~~~~~~~~~~~~~~~~~pppp????~~~~~~~~~~~~~~~~~~~~~~~~~~~~pppp????~~~~pppp????~~~~????????pppp????????????~~~~????????pppp????~~~~pppppppppppppppp<<<<pppp<<<<pppp<<<<<<<<pppp<<<<xxxx<<<<ppppxxxxpppppppp<<<<<<<<pppp<<<<xxxx<<<<pppp xxxxpppp pppp0000pppp0000pppp  T*ane 2 adda.l #16,a3 dbra d6,shift ;Shift next line lea work,a3 ; dbra d7,next_sprite ;Do next copy of sprite rts ********************************* * Print Out a message * * a0=text addr, a1=screen * ********************************* printline moveq.l #0,d0 move.b (a0)+,d0 cmpi.b #0,d0 beq bog_off cmpi.b #13,d0 bne.s checking1 clr.l d1 bra.s printline checking1 cmpi.b #10,d0 bne wbk1 add.l #2560,a1 bra.s printline wbk1 subi.b #32,d0 sweet lea sixteen,a2 lsl.l #5,d0 adda.l d0,a2 move.l a1,a3 add.l d1,a3 move.w #15,d3 printloop move.w (a2),(a3) move.w (a2),4(a3) move.w (a2),6(a3) add.l #2,a2 add.l #$a0,a3 dbf d3,p* * Create 16x16 Single plane character set * from .pi1 file * * By Oberje' for Fingerbobs New Year Demo '89/90 * * * Binary Save fname, CHAR_SET,CHAR_SET+$780 * start lea char_set,a1 lea picture,a0 move.w #4-1,d7 ;4 rows nxt_row move.w #20-1,d6 ;20 Chars on each nxt_char move.w 0*$a0(a0),(a1)+ move.w 1*$a0(a0),(a1)+ move.w 2*$a0(a0),(a1)+ move.w 3*$a0(a0),(a1)+ move.w 4*$a0(a0),(a1)+ move.w 5*$a0(a0),(a1)+ move.w 6*$a0(a0),(a1)+ move.w 7*$a0(a0),(a1)+ move.w 8*$a0(a0),(a1)+ move.w 9*$a0(a0),(a1)+ move.w 10*$a0(a0),(a1)+ move.w 11*$a0(a0),(a1)+ move.w 12*$a0(a0),(a1)+ move.w 13*$a0(a0),(a1)+ move.w 14*$a0(a0),(a1)+ move.w 15*$a0(a0),(a1)+ addq.l #8,a0 ;Next char on line dbf d6,nxt_char adda.l #15*$a0,a0 dbf d7,nxt_row move.w #80,d1 move.w #0,d5 test lea char_set,a0 lea $78000,a1 move.l d5,d0 addq.l #1,d5 asl.l #5,d0 add.l d0,a0 move.w #16-1,d2 disp move.w (a0)+,(a1) add.l #$a0,a1 dbra d2,disp move.w #8,-(a7) trap #1 addq.l #2,a7 dbra d1,test clr -(a7) trap #1 even pic incbin "\16x16.pi1" picture equ pic+34 piccols equ pic+2 even char_start ds.w 16 char_set ds.b 32128 f8250 move.l #$07770777,$ff8254 move.l #$07770777,$ff8258 ;Except col 15 move.l #$07770777,$ff825c rts ******************************************** * Display credits, wait 5 secs or keypress * ******************************************** * Enter, a0=addr of text hotcredits bsr hotblack bsr hotclear move.l screen_1,a1 clr.l d1 bsr printline bsr hotcols move.w #$2700,sr move.l #tween_vbl,$70.w move.w #$2300,sr bsr vbl move.w #8,-(a7) trap #1 addq.l #2,a7 bsr hotblack move.w #$2700,sr move.l #null_vbl,$70.w move.w #$2300,sr bsr hotclear rts ***************************************************************** * THE MUSIC SCREEN * ***************************eq plat3 cmpi.w #61,d0 beq plat4 cmpi.w #62,d0 beq plat5 cmpi.w #63,d0 beq plat6 cmpi.w #64,d0 beq plat7 cmpi.w #65,d0 beq emp1 cmpi.w #66,d0 beq emp2 cmpi.w #67,d0 beq emp3 cmpi.w #68,d0 beq emp4 cmpi.w #69,d0 beq emp5 cmpi.w #70,d0 beq emp6 cmpi.w #71,d0 beq emp7 cmpi.w #72,d0 beq emp8 cmpi.w #73,d0 beq tune1 cmpi.w #74,d0 beq xen4 ;The following routines stop the previous song ;playing, initialise the new tune and start it ;playing. ; cosmic1 move.l #no_int,mus_int * move.l #0,d0 * jsr m4 * move.l #m4_int,mus_int bsr show_track bra readkey cosmic2 move.l #no_int,mus_int * move.l #1,d0 * jsr m4 * move.l #m4_int,mus_int bsr show_track bra readkey cosmic3 move.l #no_int,mus_int * move.l #2,d0 * jsr m4 * move.l #m4_int,mus_int bsr show_track bra readkey cosmic4 move.l #no_int,mus_int * move.l #3,d0 * jsr m4 * move.l #m4_int,mus_int bsr show_track bra readkey ren move.l #no_int,mus_int * jsr m6_init * move.l #m6_int,mus_int bsr show_track bra readkey heli1 move.l #no_int,mus_int * move.l #0,d0 * jsr m9 * move.l #m9_int,mus_int bsr show_track bra readkey heli2 move.l #no_int,mus_int * move.l #1,d0 * jsr m9 * move.l #m9_int,mus_int bsr show_track bra readkey heli3 move.l #no_int,mus_int * move.l #2,d0 * jsr m9 * move.l #m9_int,mus_int bsr show_track bra readkey heli4 move.l #no_int,mus_int * move.l #3,d0 * jsr m9 * move.l #m9_int,mus_int bsr show_track bra readkey heli5 move.l #no_int,mus_int * move.l #4,d0 * jsr m9 * move.l #m9_int,mus_int bsr show_track bra readkey cats move.l #no_int,mus_int * jsr mx+$0 * move.l #mx+$64,mus_int bsr show_track bra readkey hawk move.l #no_int,mus_int * jsr mx+$17be * move.l #mx+$181e,mus_int bsr show_track bra readkey thrust move.l #no_int,mus_int * jsr mx+$2b9c * move.l #mx+$2bfc,mus_int bsr show_track bra readkey xen1 move.l #no_int,mus_int * move.w #0,d0 * jsr mx+$3e3c * move.l #mx+$3f4e,mus_int bsr show_track bra readkey xen2 move.l #no_int,mus_int * move.w #1,d0 * jsr mx+$3e3c * move.l #mx+$3f4e,mus_int bsr show_track bra readkey xen3 move.l #no_int,mus_int * move.w #2,d0 * jsr mx+$3e3c * move.l #mx+$3f4e,mus_int bsr show_track bra readkey ramp1 move.l #no_int,mus_int * move.w #0,d0 * jsr mx+$4d3c * move.l #mx+$4e42,mus_int bsr show_track bra readkey ramp2 move.l #no_int,mus_int * move.w #1,d0 * jsr mx+$4d3c * move.l #mx+$4e42,mus_int bsr show_track bra readkey neck1 move.l #no_int,mus_int * move.w #0,d0 * jsr mx+$5b02 * move.l #mx+$5c0c,mus_int bsr show_track bra readkey neck2 move.l #no_int,mus_int * move.w #1,d0 * jsr mx+$5b02 * move.l #mx+$5c0c,mus_int bsr show_track bra readkey out1 move.l #no_int,mus_int * move.w #0,d0 * jsr mx+$6bd8 * move.l #mx+$66ba,mus_int bsr show_track bra readkey out2 move.l #no_int,mus_int * move.w #1,d0 * jsr mx+$6bd8 * move.l #mx+$66ba,mus_int bsr show_track bra readkey gold1 move.l #no_int,mus_int * move.w #0,d0 * jsr mx+$7842 * move.l #mx+$794c,mus_int bsr show_track bra readkey gold2 move.l #no_int,mus_int * move.w #2,d0 * jsr mx+$7842 * move.l #mx+$794c,mus_int bsr show_track bra readkey enduro1 move.l #no_int,mus_int * move.w #0,d0 * jsr mx+$85da * move.l #mx+$86f0,mus_int bsr show_track bra readkey enduro2 move.l #no_int,mus_int * move.w #1,d0 * jsr mx+$85da * move.l #mx+$86f0,mus_int bsr show_track bra readkey enduro3 move.l #no_int,mus_int * move.w #2,d0 * jsr mx+$85da * move.l #mx+$86f0,mus_int bsr show_track bra readkey retg move.l #no_int,mus_int * move.w #0,d0 * jsr mx+$970a * move.l #mx+$9810,mus_int bsr show_track bra readkey speed1 move.l #no_int,mus_int * move.w #0,d0 * jsr m10 * move.l #m10_int,mus_int bsr show_track bra readkey speed2 move.l #no_int,mus_int * move.w #1,d0 * jsr m10 * move.l #m10_int,mus_int bsr show_track bra readkey speed3 move.l #no_int,mus_int * move.w #2,d0 * jsr m10 * move.l #m10_int,mus_int bsr show_track bra readkey speed4 move.l #no_int,mus_int * move.w #3,d0 * jsr m10 * move.l #m10_int,mus_int bsr show_track bra readkey speed5 move.l #no_int,mus_int * move.w #4,d0 * jsr m10 * move.l #m10_int,mus_int bsr show_track bra readkey speed6 move.l #no_int,mus_int * move.w #5,d0 * jsr m10 * move.l #m10_int,mus_int bsr show_track bra readkey speed7 move.l #no_int,mus_int * move.w #6,d0 * jsr m10 * move.l #m10_int,mus_int bsr show_track bra readkey weird1 move.l #no_int,mus_int * move.w #0,d0 * jsr m11 * move.l #m11_int,mus_int bsr show_track bra readkey weird2 move.l #no_int,mus_int * move.w #1,d0 * jsr m11 * move.l #m11_int,mus_int bsr show_track bra readkey weird3 move.l #no_int,mus_int * move.w #2,d0 * jsr m11 * move.l #m11_int,mus_int bsr show_track bra readkey weird4 move.l #no_int,mus_int * move.w #3,d0 * jsr m11 * move.l #m11_int,mus_int bsr show_track bra readkey verm1 move.l #no_int,mus_int * move.w #0,d0 * jsr m12 * move.l #m12_int,mus_int bsr show_track bra readkey verm2 move.l #no_int,mus_int * move.w #1,d0 * jsr m12 * move.l #m12_int,mus_int bsr show_track bra readkey verm3 move.l #no_int,mus_int * move.w #2,d0 * jsr m12 * move.l #m12_int,mus_int bsr show_track bra readkey verm4 move.l #no_int,mus_int * move.w #3,d0 * jsr m12 * move.l #m12_int,mus_int bsr show_track bra readkey verm5 move.l #no_int,mus_int * move.w #4,d0 * jsr m12 * move.l #m12_int,mus_int bsr show_track bra readkey verm6 move.l #no_int,mus_int * move.w #5,d0 * jsr m12 * move.l #m12_int,mus_int bsr show_track bra readkey star1 move.l #no_int,mus_int * move.l #0,d0 * jsr m13 * move.l #m13_int,mus_int bsr show_track bra readkey star2 move.l #no_int,mus_int * move.l #1,d0 * jsr m13 * move.l #m13_int,mus_int bsr show_track bra readkey star3 move.l #no_int,mus_int * move.l #2,d0 * jsr m13 * move.l #m13_int,mus_int bsr show_track bra readkey star4 move.l #no_int,mus_int * move.l #3,d0 * jsr m13 * move.l #m13_int,mus_int bsr show_track bra readkey custo1 move.l #no_int,mus_int * move.l #0,d0 * jsr m14 * move.l #m14_int,mus_int bsr show_track bra readkey custo2 move.l #no_int,mus_int * move.l #1,d0 * jsr m14 * move.l #m14_int,mus_int bsr show_track bra readkey custo3 move.l #no_int,mus_int * move.l #2,d0 * jsr m14 * move.l #m14_int,mus_int bsr show_track bra readkey custo4 move.l #no_int,mus_int * move.l #3,d0 * jsr m14 * move.l #m14_int,mus_int bsr show_track bra readkey custo5 move.l #no_int,mus_int * move.l #4,d0 * jsr m14 * move.l #m14_int,mus_int bsr show_track bra readkey custo6 move.l #no_int,mus_int * move.l #5,d0 * jsr m14 * move.l #m14_int,mus_int bsr show_track bra readkey obli1 move.l #no_int,mus_int * move.l #0,d0 * jsr m15 * move.l #m15_int,mus_int bsr show_track bra readkey obli2 move.l #no_int,mus_int * move.l #1,d0 * jsr m15 * move.l #m15_int,mus_int bsr show_track bra readkey obli3 move.l #no_int,mus_int * move.l #2,d0 * jsr m15 * move.l #m15_int,mus_int bsr show_track bra readkey obli4 move.l #no_int,mus_int * move.l #3,d0 * jsr m15 * move.l #m15_int,mus_int bsr show_track bra readkey plat1 move.l #no_int,mus_int * move.l #0,d0 * jsr m16 * move.l #m16_int,mus_int bsr show_track bra readkey plat2 move.l #no_int,mus_int * move.l #1,d0 * jsr m16 * move.l #m16_int,mus_int bsr show_track bra readkey plat3 move.l #no_int,mus_int * move.l #2,d0 * jsr m16 * move.l #m16_int,mus_int bsr show_track bra readkey plat4 move.l #no_int,mus_int * move.l #3,d0 * jsr m16 * move.l #m16_int,mus_int bsr show_track bra readkey plat5 move.l #no_int,mus_int * move.l #4,d0 * jsr m16 * move.l #m16_int,mus_int bsr show_track bra readkey plat6 move.l #no_int,mus_int * move.l #5,d0 * jsr m16 * move.l #m16_int,mus_int bsr show_track bra readkey plat7 move.l #no_int,mus_int * move.l #6,d0 * jsr m16 * move.l #m16_int,mus_int bsr show_track bra readkey emp1 move.l #no_int,mus_int * move.l #0,d0 * jsr m17 * move.l #m17_int,mus_int bsr show_track bra readkey emp2 move.l #no_int,mus_int * move.l #1,d0 * jsr m17 * move.l #m17_int,mus_int bsr show_track bra readkey emp3 move.l #no_int,mus_int * move.l #2,d0 * jsr m17 * move.l #m17_int,mus_int bsr show_track bra readkey emp4 move.l #no_int,mus_int * move.l #3,d0 * jsr m17 * move.l #m17_int,mus_int bsr show_track bra readkey emp5 move.l #no_int,mus_int * move.l #4,d0 * jsr m17 * move.l #m17_int,mus_int bsr show_track bra readkey emp6 move.l #no_int,mus_int * move.l #5,d0 * jsr m17 * move.l #m17_int,mus_int bsr show_track bra readkey emp7 move.l #no_int,mus_int * move.l #6,d0 * jsr m17 * move.l #m17_int,mus_int bsr show_track bra readkey emp8 move.l #no_int,mus_int * move.l #7,d0 * jsr m17 * move.l #m17_int,mus_int bsr show_track bra readkey tune1 move.l #no_int,mus_int * move.l #0,d0 * jsr m18 * move.l #m18_int,mus_int bsr show_track bra readkey xen4 move.l #no_int,mus_int * move.l #0,d0 * jsr m19 * move.l #m19_int,mus_int bsr show_track bra readkey f10 nop ;Exit : Key not known! ;End of music screen, finish up ;and back to the main screen! ; move.w #$2700,sr ;Put in duff interrupts move.l #null_vbl,$70.w ; move.w #$2300,sr ; bsr delay ;*** WAIT *** jsr hotcopy ;Copy main screen picture to screens move.w #$2700,sr ;Put in main screen interrupts move.l #new_vbl,$70.w ; move.l #killtop,$120.w ; move.w #$2300,sr ; lea $ff8240,a0 ;Install main screen palette lea new_palette,a2 ; move.w #7,d0 ; col_lp3 move.l (a2)+,(a0)+ ; dbra d0,col_lp3 ; rts ;---> ************ * VU Meter * ************ ; The VU meter is drawn on plane 3 ; draw_meter move.b #$8,$ff8800 move.b $ff8800,d0 ;Channel A move.b #$9,$ff8800 move.b $ff8800,d1 ;Channel B move.b #$a,$ff8800 move.b $ff8800,d2 ;Channel C and.l #$f,d0 and.l #$f,d1 and.l #$f,d2 ;Channel A lea vol_data,a0 ;Base of pixel data asl.l #4,d0 ;x16 adda.l d0,a0 move.l screen_1,a1 adda.l #172*$a0+4*18,a1 ;Screen address bsr print_level ;Channel B lea vol_data,a0 ;Base of pixel data asl.l #4,d1 ;x16 adda.l d1,a0 move.l screen_1,a1 adda.l #178*$a0+4*18,a1 ;Screen address bsr print_level ;Channel C lea vol_data,a0 ;Base of pixel data asl.l #4,d2 ;x16 adda.l d2,a0 move.l screen_1,a1 adda.l #184*$a0+4*18,a1 ;Screen address bsr print_level rts ; Print Strip ( 8 wide ) pointed at by a0 ; At screen line a1, on plane 2 print_level move.w #4,d7 pl_lp move.w (a0),$0+6(a1) move.w 2(a0),$8+6(a1) move.w 4(a0),$10+6(a1) move.w 6(a0),$18+6(a1) move.w 8(a0),$20+6(a1) move.w 10(a0),$28+6(a1) move.w 12(a0),$30+6(a1) move.w 14(a0),$38+6(a1) adda.l #$a0,a1 dbf d7,pl_lp rts ************** * Show Track * ************** ; Displays current track ; on LED Display ; show_track clr.l d0 ;Clean 'em! clr.l d1 clr.l d2 lea mus_picture,a0 ;Music Picture data adda.l #113*$a0,a0 ;First line of LED no.s move.l screen_1,a1 adda.l #(168*$a0)+8,a1 ;Where to put LEDs move.w track,d0 ;Get track! * move.w d0,d1 divu #10,d1 ;Divide by ten = d1 = tens move.w d1,d2 mulu #10,d2 sub d2,d0 ;Get Modulus = d0 = Units andi.l #$ffff,d0 ;Paranoid! andi.l #$ffff,d1 * * First Digit * move.l a0,a4 ;Src move.l a1,a5 ;Dest. asl.w #3,d1 ;Point to correct LED adda.l d1,a4 ; move.w #21,d7 ;20 lines led_loop_a move.l (a4),(a5) move.l 4(a4),4(a5) adda.l #$a0,a4 adda.l #$a0,a5 dbf d7,led_loop_a * * Second Digit * move.l a0,a4 ;Src move.l a1,a5 ;Dest. adda.l #8,a5 ;Remeber is 2nd word asl.w #3,d0 ;Point to correct LED adda.l d0,a4 ; move.w #21,d7 ;20 lines led_loop_b move.l (a4),(a5) move.l 4(a4),4(a5) adda.l #$a0,a4 adda.l #$a0,a5 dbf d7,led_loop_b ***** rts ********** ******************* * Show Track Name * ******************* ; Prints name of ; in name box, ; inverted if is current ; track! ; show_track_name move.l screen_1,a1 ;Address of name box ? adda.l #(148*$a0)+(9*8)+6,a1 move.w track,d0 ;Get track! mulu #20,d0 ;Point to description andi.l #$ffff,d0 ; lea track_names,a0 ; adda.l d0,a0 ; move.w #7,d7 ;Do 16 Chars worth name_loop clr.l d5 clr.l d6 move.b (a0)+,d5 ;Get 2 chars at a time move.b (a0)+,d6 subi.b #32,d6 subi.b #32,d5 asl.w #3,d5 asl.w #3,d6 ;Get offset lea in_set,a5 ; lea in_set,a6 ; adda.l d5,a5 ;a5=addr of first adda.l d6,a6 ;a6=addr of second ;Print! move.b 0(a5),(a1) move.b 0(a6),1(a1) move.b 1(a5),1*$a0(a1) move.b 1(a6),1*$a0+1(a1) move.b 2(a5),2*$a0(a1) move.b 2(a6),2*$a0+1(a1) move.b 3(a5),3*$a0(a1) move.b 3(a6),3*$a0+1(a1) move.b 4(a5),4*$a0(a1) move.b 4(a6),4*$a0+1(a1) move.b 5(a5),5*$a0(a1) move.b 5(a6),5*$a0+1(a1) move.b 6(a5),6*$a0(a1) move.b 6(a6),6*$a0+1(a1) move.b 7(a5),7*$a0(a1) move.b 7(a6),7*$a0+1(a1) adda.l #8,a1 ;Next word dbf d7,name_loop move.w track,d0 cmp.w playing,d0 bne exit_name move.l screen_1,a1 ;Address of name box ? adda.l #(148*$a0)+(9*8)+6,a1 move.w #7,d7 inv_loop ;Invert songname not 0*$a0(a1) ;since is selected. not 1*$a0(a1) not 2*$a0(a1) not 3*$a0(a1) not 4*$a0(a1) not 5*$a0(a1) not 6*$a0(a1) not 7*$a0(a1) adda.l #8,a1 dbf d7,inv_loop exit_name rts *********** * LETTERS * *********** ; ;The Letters ( FINGERBOBS ) are treated as ;four plane sprites and copied directly from ;a .PI1 file 'incbinned' into the code ; update_letters lea letter1,a2 move.w #9,d7 up_loop move.w (a2),d0 addq.w #2,d0 ;Update value andi.w #$ff,d0 move.w d0,(a2) addq.l #4,a2 dbra d7,up_loop rts display_letters move.w #9,d7 ;10 Letters lea sine_table,a3 lea letter1,a2 lea letter_save,a4 loop clr.l d1 move.w (a2)+,d0 move.b (a3,d0.w),d1 ;Value from sine table addi.w #21,d1 ;Constant mulu #$a0,d1 ;Screen line movea.l #0,a1 move.w (a2),a1 adda.l d1,a1 adda.l screen_1,a1 ;Destination move.l a1,(a4)+ ;Save for Rubout! movea.l #0,a0 move.w (a2)+,a0 adda.l #mus_picture,a0 cnt set 0 door rept 32 ;PUT a complete letter move.l cnt(a0),cnt(a1) move.l cnt+4(a0),cnt+4(a1) move.l cnt+8(a0),cnt+8(a1) move.l cnt+12(a0),cnt+12(a1) cnt set $a0+cnt endr dbra d7,loop rts delete_letters move.w #9,d7 ;10 Letters lea letter_save,a4 ;to remove from screen loop2 move.l (a4)+,a0 cnt set 0 door2 rept 32 clr.l cnt(a0) clr.l cnt+4(a0) clr.l cnt+8(a0) clr.l cnt+12(a0) cnt set $a0+cnt endr dbra d7,loop2 rts ;Get the sine table and half its amplitute, ;This saved using Fast Basic to generate yet another ;table for me! ; cut_table lea sine_table,a0 move.w #255,d0 cut_loop move.b (a0),d1 asr.l #1,d1 move.b d1,(a0)+ dbra d0,cut_loop rts ***************************************************************** * * * THE CORKSCREW SCREEN * * * ***************************************************************** ; ;This effect is achieved quite simply! ;It is done by doing a diagonal scroller into a buffer and ;then wrapping the buffer round an imaginary buffer by ;only copying certain lines of the buffer to the screen ;To save the complications of actually having to scroll ;the buffer, 8 copies of the character set are created, ;one for each of the 8 possible positions ( horizontaly ) a ;character can be. ;And 8 tables are used to give the exact positions for ;each of the letters on screen, ( there are 40 ) so that ;practically no calculations need be done at run-time. ; ;The buffer is wrapped round a ( imaginary ) barrel twice ;first, the top half of the buffer is copied to the first ;bitplane, the correct way up, then the bottom half of the ;buffer is copied upside-down-ways to the next bitplane. ; ;By defining the colours correctly, the front of the scroller ;always shows where the front and back intersect! ; cork_screen move.b #2,$ffff820a.w ;Set 50 Hz bsr hotblack move.w #$2700,sr ;Put in duff interrupts move.l #null_vbl,$70.w ; move.w #$2300,sr ; jsr vbl ;Wait a frame lea cork_credits,a0 bsr hotcredits ; move.l #bar2,do_cols2 ;Colour cycling variables move.w #3,wait ; move.l screen_1,a1 ;Clear screen move.w #(50000/4)-1,d0 ;to wipe out any plm move.l #0,(a1)+ ;garbage dbra d0,plm ; move.l #data,a1 ;Clear buffer area move.w #(32000/4)-1,d0 ;to wipe out any plg move.l #0,(a1)+ ;garbage dbra d0,plg ; lea crk_picture,a0 ;Depack data onto move.l screen_1,a1 ;Screen1 bsr undo_picture move.l screen_1,a0 ;Copy Screen 1 to Screen 2 move.l screen_2,a1 ; move.w #(32000/4),d0 ; hotlp2 move.l (a0)+,(a1)+ ; dbra d0,hotlp2 ; bsr delay ;*** WAIT *** move.w #$2700,sr ;Put in music scrn interrupts move.l #crk_vbl,$70.w ; move.l #crk_hbl,$120.w move.w #$2300,sr ; lea $ff8240,a0 ;Install new screens palette lea crk_cols,a2 ; move.w #7,d0 ; col_lp6 move.l (a2)+,(a0)+ ; dbra d0,col_lp6 ; bsr do_scroll ;DO IT! move.w #$2700,sr ;Put in duff interrupts move.l #null_vbl,$70.w ; move.w #$2300,sr ; jsr hotcopy ;Copy main screen pictures to screens lea data,a0 ;Clear out character set move.w #(32000/4)-1,d0 ;area. carron ; move.l #0,(a0)+ dbf d0,carron bsr delay ;*** WAIT *** move.w #$2700,sr ;Put in main screen interrupts move.l #new_vbl,$70.w ; move.l #killtop,$120.w ; move.w #$2300,sr ; lea $ff8240,a0 ;Install main screen palette lea new_palette,a2 ; move.w #7,d0 ; col_lp9 move.l (a2)+,(a0)+ ; dbra d0,col_lp9 ; rts ;---> bar_line equ 85 ;Line for scroller bar_size equ 50 ;Size of scroller ( Height ) ***************************** * * * THE MAIN PROGRAM ROUTINES * * * ***************************** ;SCROLLER CONTROL LOOP ;> Scrolls 8 pixels of each character, prints ; scroll"line" . Watches for end of scroller etc... ; do_scroll move.l set,a4 ;Address of current char_set move.l Table,a5 ;Address of current Table move.l crkscrl,a6 ;Address of scroller data bsr do_table ;Calculate the Diagonal scroll bsr draw_bar ;Wrap it round a barrel bsr screen_swap ;Now display it move.l Table,a5 ;Clear out bsr clear_screen ;The Diagonal Scroll data subi.l #60*8*2,set ;Point to next set addi.l #40*4,Table ;Pint to next Table addi.b #1,count ;Count up pixels cmpi.b #8,count ;Was Last pixel ? bne.s cont ;No -> Branch over bsr.s crk_restart ;Last pix so set up for next char cont move.w #$ff,-(a7) ;Test for a key move.w #6,-(a7) trap #1 addq.l #4,a7 tst.w d0 bne.s cork_end bsr.s vbl bra.s do_scroll cork_end rts ;Keypress = EXIT crk_restart move.l #set_7,set ;Initial Set move.l #Table_0,Table ;Initial Table move.b #0,count ;Zero pixels addq.l #1,crkscrl ;Next char cmpi.l #scroll_end-39,crkscrl beq go_scroll ;End of message ? rts ; End of message -> Back to start of message go_scroll move.l #scrolltext,crkscrl rts ;Wait for a VBL vbl move.w #37,-(a7) trap #14 addq.l #2,a7 rts ************************ * Draw Complete Barrel * ************************ draw_bar lea data,a0 ;Print Front move.l screen_1,a1 ;Of Barrel adda.l #(bar_line*$a0),a1 bsr show_barrel lea data+($a0*80),a6 ;Print Back move.l screen_1,a1 ;Of Barrel adda.l #((bar_size+bar_line-1)*$a0),a1 bsr show_barrel2 rts ; ;Display Front of Barrel ; show_barrel lea table,a2 ;Point to Barrel Table move.w #bar_size-1,d7 ;No of line in Barrel barrel_lp1 move.l a0,a3 ;a3 = Data to barrel clr.l d0 move.b (a2),d0 ;Get Barrel Line Offset mulu #$a0,d0 ;Make into actual offset add.l d0,a3 ;Add for actual address of Data move.b $0(a3),$99(a1) ;Copy a complete line of move.b $1(a3),$0(a1) ;Data onto screen (a1) move.b $8(a3),$1(a1) move.b $9(a3),$8(a1) move.b $10(a3),$9(a1) move.b $11(a3),$10(a1) move.b $18(a3),$11(a1) move.b $19(a3),$18(a1) move.b $20(a3),$19(a1) move.b $21(a3),$20(a1) move.b $28(a3),$21(a1) move.b $29(a3),$28(a1) move.b $30(a3),$29(a1) move.b $31(a3),$30(a1) move.b $38(a3),$31(a1) move.b $39(a3),$38(a1) move.b $40(a3),$39(a1) move.b $41(a3),$40(a1) move.b $48(a3),$41(a1) move.b $49(a3),$48(a1) move.b $50(a3),$49(a1) move.b $51(a3),$50(a1) move.b $58(a3),$51(a1) move.b $59(a3),$58(a1) move.b $60(a3),$59(a1) move.b $61(a3),$60(a1) move.b $68(a3),$61(a1) move.b $69(a3),$68(a1) move.b $70(a3),$69(a1) move.b $71(a3),$70(a1) move.b $78(a3),$71(a1) move.b $79(a3),$78(a1) move.b $80(a3),$79(a1) move.b $81(a3),$80(a1) move.b $88(a3),$81(a1) move.b $89(a3),$88(a1) move.b $90(a3),$89(a1) move.b $91(a3),$90(a1) move.b $98(a3),$91(a1) move.b $99(a3),$98(a1) addq.l #1,a2 ;Next Table entry adda.l #$a0,a1 ;Next screen line dbra d7,barrel_lp1 ;DO next line of Barrel rts ; ;Display Back of Barrel ; ;Same as front except screen addresses ;run backwards. ; show_barrel2 lea table,a2 move.w #bar_size-1,d7 barrel_lp2 move.l a6,a3 clr.l d0 move.b (a2),d0 mulu #$a0,d0 add.l d0,a3 *move.b $0(a3),$99+2(a1) ;These two bytes *move.b $1(a3),$0+2(a1) ;are usually garbage so don't print! move.b $8(a3),$1+2(a1) move.b $9(a3),$8+2(a1) move.b $10(a3),$9+2(a1) move.b $11(a3),$10+2(a1) move.b $18(a3),$11+2(a1) move.b $19(a3),$18+2(a1) move.b $20(a3),$19+2(a1) move.b $21(a3),$20+2(a1) move.b $28(a3),$21+2(a1) move.b $29(a3),$28+2(a1) move.b $30(a3),$29+2(a1) move.b $31(a3),$30+2(a1) move.b $38(a3),$31+2(a1) move.b $39(a3),$38+2(a1) move.b $40(a3),$39+2(a1) move.b $41(a3),$40+2(a1) move.b $48(a3),$41+2(a1) move.b $49(a3),$48+2(a1) move.b $50(a3),$49+2(a1) move.b $51(a3),$50+2(a1) move.b $58(a3),$51+2(a1) move.b $59(a3),$58+2(a1) move.b $60(a3),$59+2(a1) move.b $61(a3),$60+2(a1) move.b $68(a3),$61+2(a1) move.b $69(a3),$68+2(a1) move.b $70(a3),$69+2(a1) move.b $71(a3),$70+2(a1) move.b $78(a3),$71+2(a1) move.b $79(a3),$78+2(a1) move.b $80(a3),$79+2(a1) move.b $81(a3),$80+2(a1) move.b $88(a3),$81+2(a1) move.b $89(a3),$88+2(a1) move.b $90(a3),$89+2(a1) move.b $91(a3),$90+2(a1) move.b $98(a3),$91+2(a1) move.b $99(a3),$98+2(a1) addq.l #1,a2 suba.l #$a0,a1 dbra d7,barrel_lp2 rts ; ;This routine clears the characters off the ;Diagonal scroll work area ; ;a5 is appropriate table ; clear_screen move.w #39,d7 ;40 chars to do! round2 move.l (a5)+,a0 ;Screen Address move.w a0,d0 btst #0,d0 bne second2 ;If not even jump move.l a4,a1 clr.b 0*$a0+0(a0) ;Do blank for two clr.b 0*$a0+1(a0) ;Bytes in same word clr.b 1*$a0+0(a0) clr.b 1*$a0+1(a0) clr.b 2*$a0+0(a0) clr.b 2*$a0+1(a0) clr.b 3*$a0+0(a0) clr.b 3*$a0+1(a0) clr.b 4*$a0+0(a0) clr.b 4*$a0+1(a0) clr.b 5*$a0+0(a0) clr.b 5*$a0+1(a0) clr.b 6*$a0+0(a0) clr.b 6*$a0+1(a0) clr.b 7*$a0+0(a0) clr.b 7*$a0+1(a0) dbra d7,round2 rts second2 move.l a4,a1 clr.b 0*$a0+0(a0) ;Do blank clr.b 0*$a0+7(a0) ;for two bytes clr.b 1*$a0+0(a0) ;in different words clr.b 1*$a0+7(a0) clr.b 2*$a0+0(a0) clr.b 2*$a0+7(a0) clr.b 3*$a0+0(a0) clr.b 3*$a0+7(a0) clr.b 4*$a0+0(a0) clr.b 4*$a0+7(a0) clr.b 5*$a0+0(a0) clr.b 5*$a0+7(a0) clr.b 6*$a0+0(a0) clr.b 6*$a0+7(a0) clr.b 7*$a0+0(a0) clr.b 7*$a0+7(a0) dbra d7,round2 rts ; ;Prints Characters as specified by table ;Enter with Table address in a5 ; and char_set address in a4 ; and text address in a6 ; do_table move.w #39,d7 ;40 to do! round move.l (a5)+,a0 ;Screen Address move.w a0,d0 btst #0,d0 bne second ;If not even then jump move.l a4,a1 clr.l d0 move.b (a6)+,d0 ;Get Letter subi.b #32,d0 ;Get Char offset bsr print_character ;Print the character dbra d7,round rts second move.l a4,a1 clr.l d0 move.b (a6)+,d0 subi.b #32,d0 mulu #16,d0 ;Char offset add.l d0,a1 ;Correct data move.b 0(a1),0*$a0+0(a0) ;Print char move.b 1(a1),0*$a0+7(a0) ;of 2 bytes move.b 2(a1),1*$a0+0(a0) ;in different words move.b 3(a1),1*$a0+7(a0) move.b 4(a1),2*$a0+0(a0) move.b 5(a1),2*$a0+7(a0) move.b 6(a1),3*$a0+0(a0) move.b 7(a1),3*$a0+7(a0) move.b 8(a1),4*$a0+0(a0) move.b 9(a1),4*$a0+7(a0) move.b 10(a1),5*$a0+0(a0) move.b 11(a1),5*$a0+7(a0) move.b 12(a1),6*$a0+0(a0) move.b 13(a1),6*$a0+7(a0) move.b 14(a1),7*$a0+0(a0) move.b 15(a1),7*$a0+7(a0) dbra d7,round rts ; ;Prints a character at the address specified in a0 ;Prints character d0, from set in a1 ; print_character mulu #16,d0 ;Char offset add.l d0,a1 ;Correct data move.b 0(a1),0*$a0+0(a0) move.b 1(a1),0*$a0+1(a0) move.b 2(a1),1*$a0+0(a0) move.b 3(a1),1*$a0+1(a0) move.b 4(a1),2*$a0+0(a0) move.b 5(a1),2*$a0+1(a0) move.b 6(a1),3*$a0+0(a0) move.b 7(a1),3*$a0+1(a0) move.b 8(a1),4*$a0+0(a0) move.b 9(a1),4*$a0+1(a0) move.b 10(a1),5*$a0+0(a0) move.b 11(a1),5*$a0+1(a0) move.b 12(a1),6*$a0+0(a0) move.b 13(a1),6*$a0+1(a0) move.b 14(a1),7*$a0+0(a0) move.b 15(a1),7*$a0+1(a0) rts ********************************************************************* * * * DIGITISED FINGERBOBS SCREEN * * * ********************************************************************* ; ;An unspectacular screen.... ; person_screen move.b #2,$ffff820a.w ;Set 50 Hz bsr hotblack move.w #$2700,sr ;Put in duff interrupts move.l #null_vbl,$70.w ; move.w #$2300,sr ; jsr vbl ;Wait a frame lea person_credits,a0 bsr hotcredits jsr delay ;*** WAIT *** move.l screen_1,a0 ;Where to scroll adda.l #175*$a0,a0 move.l a0,pscrl_data move.l #ptext1,txt_addr move.b #0,pslice ;Init scroller jsr prestart move.w #0,person ;Draw fist piccy bsr oberje move.w #$2700,sr ;Put in interrupts/scroller move.l #who_vbl,$70.w ; move.w #$2300,sr ; bsr readkey2 ;DO IT! move.w #$2700,sr ;Put in duff interrupts move.l #null_vbl,$70.w ; move.w #$2300,sr ; bsr hotclear jsr hotcopy ;Copy main screen pictures to screens jsr delay ;*** WAIT *** move.w #$2700,sr ;Put in main screen interrupts move.l #new_vbl,$70.w ; move.l #killtop,$120.w ; move.w #$2300,sr ; lea $ff8240,a0 ;Install main screen palette lea new_palette,a2 ; move.w #7,d0 ; col_lpk move.l (a2)+,(a0)+ ; dbra d0,col_lpk ; rts ;---> readkey2 move.w #8,-(a7) ;Get key trap #1 addq.l #2,a7 cmpi.b #" ",d0 ;Space = Exit beq p_end swap d0 ;Look at scancode cmpi.b #$4d,d0 ;-> = Up 1 person beq up_person cmpi.b #$4b,d0 ;<- = Down 1 person beq down_person bra readkey2 up_person addq.w #1,person cmpi.w #5,person bne up1 move.w #0,person up1 bsr do_person bra readkey2 down_person subq.w #1,person cmpi.w #-1,person bne down1 move.w #4,person down1 bsr do_person bra readkey2 do_person move.w person,d0 cmpi.w #0,d0 beq oberje cmpi.w #1,d0 beq creeper cmpi.w #2,d0 beq the_count cmpi.w #3,d0 beq zen cmpi.w #4,d0 beq shades oberje move.l #null_vbl,$70.w bsr clear_area move.l #p1data,a0 ;Address of .pc1 data move.l screen_2,a1 ;Address of buffer to decompress into bsr undo_picture ;Decompact bsr copy2screen move.l #ptext1,txt_addr move.b #0,pslice jsr prestart move.l #who_vbl,$70.w rts creeper move.l #null_vbl,$70.w bsr clear_area move.l #p2data,a0 ;Address of .pc1 data move.l screen_2,a1 ;Address of buffer to decompress into bsr undo_picture ;Decompact bsr copy2screen move.l #ptext2,txt_addr move.b #0,pslice jsr prestart move.l #who_vbl,$70.w rts the_count move.l #null_vbl,$70.w bsr clear_area move.l #p3data,a0 ;Address of .pc1 data move.l screen_2,a1 ;Address of buffer to decompress into bsr undo_picture ;Decompact bsr copy2screen move.l #ptext3,txt_addr move.b #0,pslice jsr prestart move.l #who_vbl,$70.w rts zen move.l #null_vbl,$70.w bsr clear_area move.l #p4data,a0 ;Address of .pc1 data move.l screen_2,a1 ;Address of buffer to decompress into bsr undo_picture ;Decompact bsr copy2screen move.l #ptext4,txt_addr move.b #0,pslice jsr prestart move.l #who_vbl,$70.w rts shades move.l #null_vbl,$70.w bsr clear_area move.l #p5data,a0 ;Address of .pc1 data move.l screen_2,a1 ;Address of buffer to decompress into bsr undo_picture ;Decompact bsr copy2screen move.l #ptext5,txt_addr move.b #0,pslice jsr prestart move.l #who_vbl,$70.w rts copy2screen move.l screen_2,a0 move.l screen_1,a1 adda.l #5*$a0+(5*8),a1 move.w #127,d0 digi_loop rept 10 move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ endr add.l #(10*8),a0 add.l #(10*8),a1 dbf d0,digi_loop rts **************** * Exit Screen * **************** p_end rts ********************************* * Picture Decompression Routine * ********************************* ; Uncompress a Degas Compressed Picture ; This routine is very slow, due to the method used to ; calculate the address of the next byte. ; It does however work, so whos complaining ? ; undo_picture move.l a1,scween move.w #0,finished move.w #0,d3 ;Byte currently on move.l #0,a2 ;Start Scan line move.w #0,d4 ;Plane 0 move.w #0,d5 ;Which word ( when = 20 -> new plane ) ;a0=address of next byte value cmpi.w #-1,finished ; beq finish_undo ; clr.l d0 ;Clear reg move.b (a0),d0 ;Next value tst.b d0 ;Compare with 0 bgt copybytes ; 0...127 = Copy next n+1 bytes cmpi.b #-128,d0 ; -128 = Ignore bne repeatbyte ;-1..-127 = Copy next byte -n+1 times ignore addq.l #1,a0 ;Add one to address bra value ;Next value *********************** * Copy next n+1 bytes * *********************** ;d0 not adjusted since a dbra must be n-1 anyway copybytes addq.l #1,a0 ;Point to first data byte bsr get_address ;Return address for byte in a1 move.b (a0),(a1) ;Copy byte to screen dbra d0,copybytes ;Next byte to copy addq.l #1,a0 ;Update Pointer bra value ;Next value ***************************** * Copy next byte -n+1 times * ***************************** repeatbyte neg.b d0 ;Change sign addq.l #1,a0 ;Point to byte to repeat move.b (a0),d1 ;Put in d1 repeatloop bsr get_address ;Return address for byte in a1 move.b d1,(a1) ;Copy byte to screen dbra d0,repeatloop ;Next copy addq.l #1,a0 ;Update Pointer bra value ;Next value *************** finish_undo rts *************** * Get Address * *************** ;This routine returns in A1 the ;screen address for the next byte ;Addresses are genarated one scanline ;at a time, plane 0 first then ;plane 1,2 and finally 3, then on to ;the next scanline. get_address move.l scween,a1 ;Base of screen clr.l d7 ;Clear working regs clr.l d2 ; adda.l a2,a1 ;Correct screen line move.w d5,d7 ;Current Word (1 Plane offset) move.w d4,d2 ;Current Plane mulu #8,d7 ;Get actual word offset add.w d2,d7 ;Add on current plane add.w d3,d7 ;Add on current byte adda.l d7,a1 ;a1=Correct address of byte addq.w #1,d3 ;Update byte cmpi.w #2,d3 ;Last byte in word beq next_word ;Yes ----> rts ;No -> Exit next_word move.w #0,d3 ;Point to first byte again addq.w #1,d5 ;Point to next word cmpi.w #20,d5 ;Last word in plane ? beq next_plane ;Yes ----> rts ;No -> Exit next_plane move.w #0,d5 ;Point to first word again addq.w #2,d4 ;Point to next plane cmpi.w #8,d4 ;Last Plane on scanline ? beq nxt_line ;Yes ----> rts ;No -> Exit nxt_line move.w #0,d4 ;Point to first plane again add.l #$a0,a2 ;Point to next scanline cmpa.l #$a0*200,a2 ;Last scanline ? beq end_undo ;Yes ----> Exit decompression loop rts ;No -> Exit end_undo move.w #$ffff,finished rts ************************ * 8x8 2 Pixel Scroller * ************************ p_scroll movem.l d0-d7/a0-a6,-(a7) move.l #this_char,a1 ;Point to character move.l pscrl_data,a0 ;Scroll scroll data move.w #8-1,d7 ;8 lines p_sclp scr2 $0,3 ;Do all words in line scr2 $8,3 ;except last one! scr2 $10,3 scr2 $18,3 scr2 $20,3 scr2 $28,3 ;Only working with scr2 $30,3 ;Bitplane 0 this time scr2 $38,3 scr2 $40,3 scr2 $48,3 scr2 $50,3 scr2 $58,3 scr2 $60,3 scr2 $68,3 scr2 $70,3 scr2 $78,3 scr2 $80,3 scr2 $88,3 scr2 $90,3 move.w $98+(2*3)(a0),d1 ;Get last word move.b (a1),d0 roxl.b d0 ;Scroll on new bit roxl.w d1 roxl.b d0 ;Scroll on new bit roxl.w d1 move.w d1,$98+(2*3)(a0) ;Save both move.b d0,(a1)+ ;values adda.l #$a0,a0 ;Next screen line dbra d7,p_sclp addq.b #1,pslice ;Increment slice andi.b #%11,pslice ;Counter tst.b pslice beq next_letter ;8 slices in a letter return movem.l (a7)+,d0-d7/a0-a6 rts next_letter bsr do_letter ;Deal with letter bra return ;back to scroller prestart move.l txt_addr,phere ;Point to character before sub.l #1,phere ; do_letter addq.l #1,phere ;Point to next char move.l phere,a0 ; clr.l d0 ; move.b (a0),d0 ;Get letter cmpi.b #0,d0 ;Is it Restart? beq prestart ;Yes then restart!! cmpi.b #13,d0 ;CR beq do_letter cmpi.b #10,d0 ;LF beq do_letter do_it subi.w #32,d0 ;Take away ascii offset asl.w #3,d0 ;Multiply by 8 to get table offset lea in_set,a0 ;Get base of char data adda.l d0,a0 ;Find letter we want lea this_char,a1 ;Copy it to move.l (a0)+,(a1)+ ;This_char move.l (a0)+,(a1)+ ;buffer rts clear_area ;Clear out scroll area move.l pscrl_data,a0 move.w #7,d0 ;8 lines arealoop clr.l $00+6(a0) clr.l $08+6(a0) clr.l $10+6(a0) clr.l $18+6(a0) clr.l $20+6(a0) clr.l $28+6(a0) clr.l $30+6(a0) clr.l $38+6(a0) clr.l $40+6(a0) clr.l $48+6(a0) clr.l $50+6(a0) clr.l $58+6(a0) clr.l $60+6(a0) clr.l $68+6(a0) clr.l $70+6(a0) clr.l $78+6(a0) clr.l $80+6(a0) clr.l $88+6(a0) clr.l $90+6(a0) clr.l $98+6(a0) adda.l #$a0,a0 dbf d0,arealoop rts ************************************************************* * * * THE BIG SCROLLER SCREEN * * * ************************************************************* ; ;This scroller really is BIG! ;Both Top and Bottom borders are used, the characters are ;256x256 however only 256x240 is actually printed since ;the bottom line was never used by the character set. ; ;The trick to this screen, is that the character set is enlarged ;to its final size ( from 16x16 ) horizontally, before the screen ;begins. i.e set becomes 256x16 ;The screen then just scrolls a 320x16 buffer, and just copies ;each line of the buffer to the screen 16 times, and thus the ;big scroller is done! ; ;It took me 45 minutes to code this! ; big_screen move.b #2,$ffff820a.w ;Set 50 Hz bsr hotblack move.w #$2700,sr ;Put in duff interrupts move.l #null_vbl,$70.w ; move.w #$2300,sr ; jsr vbl ;Wait a frame move.l #bar2,do_cols2 move.w #2,wait lea big_credits,a0 bsr hotcredits lea buffer,a0 ;Clear out scroll buffer move.w #(40*16)-1,d0 bloop move.b #0,(a0)+ dbf d0,bloop bsr delay ;*** WAIT *** move.w #$2700,sr ;Put in music scrn interrupts move.l #big_vbl,$70.w ; move.w #$2300,sr ; lea $ff8240,a0 ;Install new screens palette lea big_cols,a2 ; move.w #7,d0 ; col_lpr move.l (a2)+,(a0)+ ; dbra d0,col_lpr ; bsr make_large_set bsr start_scroll jsr vbl bsr bigscroll move.w #$2700,sr ;Put in duff interrupts move.l #null_vbl,$70.w ; move.w #$2300,sr ; jsr hotclear ;Clear screens jsr hotcopy ;Copy main screen pictures to screens lea data,a0 ;Clear out character set move.w #(32000/4)-1,d0 ;since same area is needed by kim ;Corkscrew scroller move.l #0,(a0)+ dbf d0,kim jsr delay ;*** WAIT *** move.w #$2700,sr ;Put in main screen interrupts move.l #new_vbl,$70.w ; move.l #killtop,$120.w ; move.w #$2300,sr ; lea $ff8240,a0 ;Install main screen palette lea new_palette,a2 ; move.w #7,d0 ; coldlp9 move.l (a2)+,(a0)+ ; dbra d0,coldlp9 ; rts ;---> ******************** * Restart Scroller * ******************** start_scroll move.l #bigtext,text_ptr move.w #1,bslice rts ************ * Scroller * ************ ; Scrolling is by 8-pixels, no shifting is involved ;just losts of MOVE.B instructions! ; scroll_it tst.w bslice ;Need a new char? beq new_character go_on_then lea buffer,a0 move.w #16-1,d0 ;16 lines of byte scroll byte_it move.b 1(a0),0(a0) move.b 2(a0),1(a0) move.b 3(a0),2(a0) move.b 4(a0),3(a0) move.b 5(a0),4(a0) move.b 6(a0),5(a0) move.b 7(a0),6(a0) move.b 8(a0),7(a0) move.b 9(a0),8(a0) move.b 10(a0),9(a0) move.b 11(a0),10(a0) move.b 12(a0),11(a0) move.b 13(a0),12(a0) move.b 14(a0),13(a0) move.b 15(a0),14(a0) move.b 16(a0),15(a0) move.b 17(a0),16(a0) move.b 18(a0),17(a0) move.b 19(a0),18(a0) move.b 20(a0),19(a0) move.b 21(a0),20(a0) move.b 22(a0),21(a0) move.b 23(a0),22(a0) move.b 24(a0),23(a0) move.b 25(a0),24(a0) move.b 26(a0),25(a0) move.b 27(a0),26(a0) move.b 28(a0),27(a0) move.b 29(a0),28(a0) move.b 30(a0),29(a0) move.b 31(a0),30(a0) move.b 32(a0),31(a0) move.b 33(a0),32(a0) move.b 34(a0),33(a0) move.b 35(a0),34(a0) move.b 36(a0),35(a0) move.b 37(a0),36(a0) move.b 38(a0),37(a0) move.b 39(a0),38(a0) move.b 40(a0),39(a0) adda.l #40,a0 dbf d0,byte_it ; Now lets get character to print clr.l d0 move.l text_ptr,a0 move.b (a0),d0 subi.b #32,d0 ; asl.w #4,d0 asl.w #5,d0 ;Mulu #512 lea large_set,a0 adda.l d0,a0 ;a0=addr of char data clr.l d0 move.w bslice,d0 subi.w #1,d0 ;Slice is always 1 more! adda.l d0,a0 ;a0=slice of char data add.l #2,d0 andi.w #%11111,d0 move.w d0,bslice ;Now put slice in scroll buffer lea buffer,a1 move.b 0*32(a0),39+0*40(a1) ;All 16 lines move.b 1*32(a0),39+1*40(a1) move.b 2*32(a0),39+2*40(a1) move.b 3*32(a0),39+3*40(a1) move.b 4*32(a0),39+4*40(a1) move.b 5*32(a0),39+5*40(a1) move.b 6*32(a0),39+6*40(a1) move.b 7*32(a0),39+7*40(a1) move.b 8*32(a0),39+8*40(a1) move.b 9*32(a0),39+9*40(a1) move.b 10*32(a0),39+10*40(a1) move.b 11*32(a0),39+11*40(a1) move.b 12*32(a0),39+12*40(a1) move.b 13*32(a0),39+13*40(a1) move.b 14*32(a0),39+14*40(a1) move.b 15*32(a0),39+15*40(a1) rts ;All done! new_character move.l text_ptr,a0 adda.l #1,a0 tst.b (a0) beq end_of move.l a0,text_ptr move.w #1,bslice bra go_on_then end_of move.l #bigtext,text_ptr move.w #1,bslice bra go_on_then *********************** * Draw the Shit then! * *********************** draw_it move.l screen_2,a1 adda.l #(10*$a0),a1 ;Put on plane 0 lea buffer,a0 ;Set is 16 pixels high but last line ;is always blank! ;So we need only do 15, which is just as well ;'cos time is pretty short on this screen! ; rept 15 bsr draw_line ;1 adda.l #$a0,a1 bsr draw_line ;2 adda.l #$a0,a1 bsr draw_line ;3 adda.l #$a0,a1 bsr draw_line ;4 adda.l #$a0,a1 bsr draw_line ;5 adda.l #$a0,a1 bsr draw_line ;6 adda.l #$a0,a1 bsr draw_line ;7 adda.l #$a0,a1 bsr draw_line ;8 adda.l #$a0,a1 bsr draw_line ;9 adda.l #$a0,a1 bsr draw_line ;10 adda.l #$a0,a1 bsr draw_line ;11 adda.l #$a0,a1 bsr draw_line ;12 adda.l #$a0,a1 bsr draw_line ;13 adda.l #$a0,a1 bsr draw_line ;14 adda.l #$a0,a1 bsr draw_line ;15 adda.l #$a0,a1 bsr draw_line ;16 adda.l #$a0,a1 adda.l #40,a0 endr rts ****************** * Make Large Set * ****************** make_large_set lea orig_set,a0 lea large_set,a1 move.w #(16*60)-1,d6 this_line move.w (a0)+,d0 move.w #16-1,d7 this_word rol.w d0 bcc nofill move.w #$ffff,(a1)+ pooka dbf d7,this_word dbf d6,this_line rts nofill move.w #$0000,(a1)+ bra pooka ********************************* * Draw 1 line of data to screen * ********************************* draw_line ; a0=data, a1=screen move.w 0(a0),$0(a1) move.w 2(a0),$8(a1) move.w 4(a0),$10(a1) move.w 6(a0),$18(a1) move.w 8(a0),$20(a1) move.w 10(a0),$28(a1) move.w 12(a0),$30(a1) move.w 14(a0),$38(a1) move.w 16(a0),$40(a1) move.w 18(a0),$48(a1) move.w 20(a0),$50(a1) move.w 22(a0),$58(a1) move.w 24(a0),$60(a1) move.w 26(a0),$68(a1) move.w 28(a0),$70(a1) move.w 30(a0),$78(a1) move.w 32(a0),$80(a1) move.w 34(a0),$88(a1) move.w 36(a0),$90(a1) move.w 38(a0),$98(a1) rts ************************** * BIGSCROLL CONTROL LOOP * ************************** bigscroll bsr scroll_it ;Scroll buffer bsr draw_it ;Put onto screen bsr switch_screens ;Give it to the public! jsr play move.w #37,-(a7) trap #14 addq.l #2,a7 move.w #$ff,-(a7) ;Test keyboard move.w #6,-(a7) trap #1 addq.l #4,a7 tst.w d0 beq bigscroll ;Exit upon keypress rts *********************************** * Swap round screens and pointers * *********************************** switch_screens move.l screen_2,d0 ;Write directly asr.l #8,d0 ;to hardware, screw move.b d0,$ff8203 ;the bios! asr.l #8,d0 move.b d0,$ff8201 move.l screen_1,d0 move.l screen_2,screen_1 move.l d0,screen_2 rts ******************************************* * Create 16 preshifted copies of a sprite * ******************************************* * * Sprite is held in memory as 4 planes of 16x16 pixels * i.e 1 word along by 16 lines ( 16 words ) x 4 planes * = 1 x 16 x 4 = 64 words = 128 bytes ( $80 ) * This is my standard 16x16 Character set format. * * The sprite data is stored at sprite_data 16 times * one after another ( 4096 bytes ) each one shifted along * one pixel to the right * * The actual sprite data and the mask are held together * and are interleaved. * * The format is 1x.L First Word Mask * 1x.L Second Word Mask * 1x.L First Word Data * 1x.L Second Word Data * * Because of this preshifting, the sprite routine does * not have to shift every sprite it prints, but just * refers to the preshifted sprite it requires. * make_sprites lea sprite_data,a1 ;Sprite area lea char,a0 ;Address of original sprite data lea work,a3 ;Work Area move.w #16-1,d0 ;Copy copy_it move.w (a0)+,(a3) ;the sprite to move.w (a0)+,2(a3) ;the sprite work move.w (a0)+,4(a3) ;area move.w (a0)+,6(a3) add.l #16,a3 dbra d0,copy_it lea work,a3 ;Work Area move.w #16-1,d7 ;16 copies of sprite next_sprite move.w #16-1,d6 ;16 lines per sprite next_line move.w (a3),d0 ;Create mask or.w 2(a3),d0 ;By oring the two planes not.w d0 ;and taking the complement move.w d0,(a1)+ ;Store mask move.w d0,(a1)+ ;in sprite data move.w 8(a3),d0 ;Get second words from work area or.w 10(a3),d0 ;do the not.w d0 ;same move.w d0,(a1)+ ; move.w d0,(a1)+ ;Mask stored move.w (a3),(a1)+ ;Copy work sprite (32x16) move.w 2(a3),(a1)+ ;into sprite area move.w 8(a3),(a1)+ ; move.w 10(a3),(a1)+ ;Sprite data stored add.l #16,a3 ; dbra d6,next_line ;Next line of current sprite ************** * Now shift! * ************** lea work,a3 ;Work area move.w #16-1,d6 ;16 lines shift move.l (a3),d0 ;Mask move.w 8(a3),d0 ;d0 = Word1 Plane 1 | Word2 Plane 1 lsr.l #1,d0 ;Shift move.w d0,8(a3) ;Replace Word2 Plane 1 swap d0 ; move.w d0,(a3) ;Replace Word1 Plane 1 move.l 2(a3),d0 ;Mask move.w 10(a3),d0 ;d0= Word1 Plane 2 | Word2 Plane 2 lsr.l #1,d0 ;Shift move.w d0,10(a3) ;Replace Word2 Plane 2 swap d0 ; move.w d0,2(a3) ;Replace Word1 Plane 2 move.l 4(a3),d0 ;Sprite move.w 12(a3),d0 ;d0= Word1 Plane 1 | Word2 Plane 1 lsr.l #1,d0 ;Shift move.w d0,12(a3) ;Replace Word2 Plane 1 swap d0 ; move.w d0,4(a3) ;Replace Word1 Plane 1 move.l 6(a3),d0 ;Sprite move.w 14(a3),d0 ;d0= Word1 Plane 2 | Word2 Plane 2 lsr.l #1,d0 ;Shift move.w d0,14(a3) ;Replace Word2 Plane 2 swap d0 ; move.w d0,6(a3) ;Replace Word1 Plane 2 adda.l #16,a3 dbra d6,shift ;Shift next line lea work,a3 ; dbra d7,next_sprite ;Do next copy of sprite rts **************************************** ; ;Generates character sets required from ;a standard 8x8 font ; **************************************** ;Used for Corkscrew ; make_sets lea in_set,a0 ;Basic Set lea set_0,a1 ;First New Set move.l a1,a2 ;Save a1 move.w #60-1,d7 ;60 Characters first_set move.b (a0),(a1) ;Create First Set move.b 1(a0),2(a1) move.b 2(a0),4(a1) move.b 3(a0),6(a1) move.b 4(a0),8(a1) move.b 5(a0),10(a1) move.b 6(a0),12(a1) move.b 7(a0),14(a1) add.l #8,a0 add.l #16,a1 dbra d7,first_set move.w #7-1,d7 ;7 Set to do next_set move.l a2,a0 bsr copy_set add.l #60*2*8,a2 ;Point next set move.l a2,a0 bsr shift_set ;Shift it dbra d7,next_set rts ;Takes set at a0, for 60 characters and shifts each one place to ;the right shift_set move.w #60-1,d0 ;60 chars next_char lsr.w (a0) ;Shift RIGHT 1 bit lsr.w 2(a0) lsr.w 4(a0) lsr.w 6(a0) lsr.w 8(a0) lsr.w 10(a0) lsr.w 12(a0) lsr.w 14(a0) add.l #16,a0 dbra d0,next_char rts ;Copys set 60*2*8 long from a0 to a0+60*2*8 copy_set move.l a0,a1 add.l #60*2*8,a1 move.w #60*2*8-1,d0 copy_loop move.b (a0)+,(a1)+ dbra d0,copy_loop rts ************** * The Sprite * ************** char incbin "\sprite.tec" ;Stored as a 16x16 Character Set! ************************** * The background picture *; Main Screen ************************** even pic incbin "\pic_pt1.pc1" picture equ pic+34 new_palette equ pic+2 pic2 incbin "\pic_pt2.pc1" picture2 equ pic2+34 ******************************** * The Two 256 byte Sine Tables * ******************************** even vertical incbin "\table140.dat" vertical2 incbin "\table60.dat" m_on dc.b $08 ;Mouse on m_off dc.b $12,$1a ;Mouse off x1 dc.b 0,0 ;X,Y Displacements for y1 dc.b 64,0 ;both tables cx1 dc.b 0,0 ;For each sprite cy1 dc.b 64,0 ds.w (nospr-1)*4 Xinc dc.w 2 ;Wave control Yinc dc.w 2 ;Variables X2inc dc.w 1 Y2inc dc.w 2 XDisp dc.w 8 YDisp dc.w 8 X2Disp dc.w 0 Y2Disp dc.w 0 spr_wave dc.l spr_wave_tab * * Xinc,Yinc,XDisp,YDisp,X2inc,Y2inc,X2Disp,Y2Disp,x1,y1,cx1,cy1 * * If x1 = $ffff => Ignore x1,y1,cx1,cy1, use old values * spr_wave_tab dc.w $fffe,$fffe,$fffe,$fffe,$2,$2,$ffe6,$ffe6,$32,$7f,$4f,$91 dc.w $0001,$0001,$0040,$0040,$0000,$0000,$0000,$0000,$fb,$3c,$ec,$7f dc.w $0001,$0001,$0020,$0020,$0000,$0000,$0000,$0000,$ffff,$0,$0,$0 dc.w $0001,$0001,$0013,$0013,$0000,$0000,$0000,$0000,$ffff,$0,$0,$0 dc.w $0001,$fffe,$0009,$0009,$0000,$fff8,$000b,$0013,$44,$18,$00,$58 dc.w $0002,$fffe,$fffd,$0004,$0005,$fffa,$fffb,$fff6,$fa,$2b,$5f,$33 dc.w $0003,$ffff,$fff2,$fffd,$0009,$fffd,$fffb,$fff6,$42,$e5,$f7,$c0 dc.w $0000,$0000,$0000,$0000,$fff9,$0005,$fff9,$0005,$f9,$7c,$76,$e1 dc.w $0000,$0000,$0000,$0000,$fffe,$fffe,$fff9,$0005,$ffff,$0,$0,$0 dc.w $0000,$0000,$000a,$000a,$0000,$0000,$0000,$0000,$00,$40,$00,$40 dc.w $0002,$0002,$000a,$000a,$0000,$0000,$0000,$0000,$ffff,$0,$0,$0 dc.w $fffe,$fffe,$ffe7,$ffe8,$0002,$0002,$ffe6,$ffe6,$da,$09,$c5,$07 dc.w $fffe,$fffe,$00e4,$00e3,$0003,$0002,$ffe6,$ffe6,$c0,$0d,$e1,$19 dc.w $fffe,$fffe,$0068,$0067,$0002,$0002,$ffe6,$ffe6,$aa,$f7,$d7,$19 dc.w $00fb,$00f9,$ffa8,$ffa6,$fff8,$fffd,$fffb,$fffc,$7f,$07,$09,$b7 dc.w $fffc,$fffd,$0003,$0004,$fff8,$fffd,$fffb,$fffc,$81,$24,$a9,$f3 dc.w $fffc,$ffff,$005d,$ffde,$0006,$fff9,$000d,$0011,$96,$1b,$42,$5f dc.w $0000,$0000,$0000,$0000,$fffe,$fffe,$fff9,$0005,$00,$75,$99,$ed dc.w $0000,$0000,$fffe,$0002,$fffe,$fffe,$fff9,$0005,$ffff,$0,$0,$0 dc.w $fffd,$fffe,$fffe,$0002,$fffe,$fffe,$fff9,$0005,$ffff,$0,$0,$0 dc.w $fffe,$fffe,$ffff,$ffff,$0000,$0000,$0000,$0000,$27,$cd,$00,$72 dc.w $0000,$0000,$fff2,$fffa,$0006,$fff8,$000d,$fff9,$44,$91,$5a,$17 dc.w $0000,$0000,$000a,$000a,$0001,$0001,$000a,$000a,$57,$99,$83,$c7 dc.w $0000,$0000,$000a,$000a,$fffd,$fffd,$000a,$000a,$ffff,0,0,0 dc.w $0001,$0001,$000a,$000a,$ffff,$ffff,$000a,$000a,$ffff,0,0,0 dc.w $0001,$0001,$000a,$000a,$fffe,$fffe,$0005,$0005,$25,$68,$ea,$31 dc.w $fffe,$fffd,$0008,$0008,$0003,$fffc,$fff1,$fffe,$f9,$8f,$73,$e2 dc.w $0002,$0002,$0008,$0008,$0003,$fffb,$0007,$0018,$5a,$e8,$41,$64 dc.w $0000,$0004,$0153,$0152,$0000,$fff8,$0007,$0018,$de,$a3,$14,$15 dc.w $fffd,$0000,$0153,$0152,$fff8,$0000,$0007,$0018,$4d,$7f,$ce,$e1 dc.w $fffd,$fffc,$0008,$0003,$000a,$fffb,$ffff,$0004,$0c,$a7,$68,$53 dc.w $0001,$0001,$000a,$000a,$ffff,$ffff,$0014,$0014,$31,$70,$2a,$70 dc.w $0002,$fffe,$0008,$0008,$fffd,$fffd,$00ea,$00e9,$dd,$e9,$c9,$1c dc.w $fffe,$fffe,$0006,$fffc,$0008,$fffa,$ffe8,$0010,$36,$83,$70,$8f dc.w $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff ********************************************* * Tables for Bounce scroller on main screen * ********************************************* * Each table describe the shape & speed of * one bounce, by specifying the screen location * of the scroller for each frame. * bounce_tab1 dc.w 0*$a0,0*$a0 dc.w $ffff bounce_tab2 dc.w 45*$a0,45*$a0 dc.w $ffff bounce_tab3 dc.w 0*$a0,1*$a0,2*$a0,4*$a0,6*$a0,8*$a0,11*$a0,15*$a0,20*$a0,26*$a0,33*$a0 dc.w 38*$a0,45*$a0 dc.w 38*$a0 dc.w 26*$a0,20*$a0,15*$a0,11*$a0,8*$a0,6*$a0,4*$a0,2*$a0,1*$a0,0*$a0 dc.w $ffff bounce_tab4 dc.w 0*$a0,1*$a0,2*$a0,4*$a0,6*$a0,8*$a0,11*$a0,15*$a0,20*$a0,26*$a0 dc.w 38*$a0,45*$a0 dc.w 38*$a0,36*$a0,30*$a0,25*$a0,21*$a0,18*$a0,16*$a0,14*$a0,12*$a0,11*$a0,10*$a0 dc.w 10*$a0,11*$a0,12*$a0,14*$a0,16*$a0,18*$a0,21*$a0,25*$a0,30*$a0,36*$a0 dc.w 38*$a0,45*$a0 dc.w 38*$a0,26*$a0,20*$a0,15*$a0,11*$a0,8*$a0,6*$a0,4*$a0,2*$a0,1*$a0,0*$a0 dc.w $ffff bounce_tab5 dc.w 0*$a0,1*$a0,2*$a0,4*$a0,5*$a0,7*$a0,9*$a0,11*$a0,14*$a0,17*$a0,22*$a0 dc.w 25*$a0,28*$a0,34*$a0 dc.w 38*$a0,45*$a0,38*$a0 dc.w 34*$a0,28*$a0,25*$a0 dc.w 22*$a0,17*$a0,14*$a0,11*$a0,9*$a0,7*$a0,5*$a0,4*$a0,2*$a0,1*$a0,0*$a0 dc.w 0*$a0,0*$a0,0*$a0,0*$a0 dc.w $ffff bounce_tab6 dc.w 45*$a0,38*$a0 dc.w 34*$a0,28*$a0,25*$a0 dc.w 22*$a0,17*$a0,14*$a0,11*$a0,9*$a0,7*$a0,5*$a0,4*$a0,2*$a0,1*$a0,0*$a0 dc.w 0*$a0,0*$a0,0*$a0,0*$a0 dc.w 0*$a0,1*$a0,2*$a0,4*$a0,5*$a0,7*$a0,9*$a0,11*$a0,14*$a0,17*$a0,22*$a0 dc.w 25*$a0,28*$a0,34*$a0 dc.w 38*$a0 dc.w $ffff * Colour table used by Main Screen & * Corkscrew scroller bar2 dc.w $700,$710,$720,$730 Red -> Yellow dc.w $740,$750,$760,$770 dc.w $671,$572,$473,$374 Yellow -> Cyan dc.w $275,$176,$077 dc.w $067,$057,$047,$037 Cyan -> Blue dc.w $027,$017,$007 dc.w $107,$207,$307,$407 Blue -> Purple dc.w $507,$607,$707 dc.w $706,$705,$704,$703 Purple -> Red dc.w $702,$701,$700 bar2_end equ * dc.w $700,$710,$720,$730 Red -> Yellow dc.w $740,$750,$760,$770 dc.w $671,$572,$473,$374 Yellow -> Cyan dc.w $275,$176,$077 dc.w $067,$057,$047,$037 Cyan -> Blue dc.w $027,$017,$007 dc.w $107,$207,$307,$407 Blue -> Purple dc.w $507,$607,$707 dc.w $706,$705,$704,$703 Purple -> Red dc.w $702,$701,$700 dc.w $700,$710,$720,$730 Red -> Yellow dc.w $740,$750,$760,$770 dc.w $671,$572,$473,$374 Yellow -> Cyan dc.w $275,$176,$077 dc.w $067,$057,$047,$037 Cyan -> Blue dc.w $027,$017,$007 dc.w $107,$207,$307,$407 Blue -> Purple dc.w $507,$607,$707 dc.w $706,$705,$704,$703 Purple -> Red dc.w $702,$701,$700 dc.w $700,$710,$720,$730 Red -> Yellow dc.w $740,$750,$760,$770 dc.w $671,$572,$473,$374 Yellow -> Cyan dc.w $275,$176,$077 dc.w $067,$057,$047,$037 Cyan -> Blue dc.w $027,$017,$007 dc.w $107,$207,$307,$407 Blue -> Purple dc.w $507,$607,$707 dc.w $706,$705,$704,$703 Purple -> Red dc.w $702,$701,$700 ************************** * MAIN SCREEN SCROLLTEXT * ************************** ;CONTROL CODES nsw equ 1 ;Get next sprite wave bn1 equ 21 ;Bounce 1 : top bn2 equ 22 ;Bounce 2 : bottom bn3 equ 23 ;Bounce 3 : standard bounce bn4 equ 24 ;Bounce 4 : double bounce bn5 equ 25 ;Bounce 5 : glide bounce bn6 equ 26 ;Bounce 5 : glide bounce ( start at bottom ) p1 equ 9 ;Pause 1 sec p3 equ 10 ;Pause 3 secs ; message dc.b bn1," FINGERBOBS PRESENT ",bn2,nsw," NEW YEAR DEMO ",bn1,nsw dc.b " CODED BY ",bn2," OBERJE ",p1,bn6,p1," ",nsw dc.b " THIS DEMOS HAS FOUR ADDITIONAL SCREENS....",nsw,bn5," 1 ",p1," " dc.b " THE MUSIC SELECTION SCREEN - " dc.b "PRESS 'M' TO ACCESS, USE CURSOR KEYS TO CHOOSE TUNE, AND RETURN TO PLAY IT, GO BACK TO THIS " dc.b "SCREEN BY PRESSING SPACE. ",nsw dc.b " 2 ",p1," " dc.b " THE CORKSCREW SCROLLER SCREEN - " dc.b "PRESS 'C' TO ACCESS, SIT AND WATCH, PRESS ANY KEY TO RETURN TO THIS SCREEN ",nsw dc.b " 3 ",p1," " dc.b " THE EXTRA BIG SCROLLER SCREEN - " dc.b "PRESS 'E' TO ACCESS, SIT AND WATCH, PRESS ANY KEY TO RETURN TO THIS SCREEN ",nsw dc.b " OUR CONTACT ADDRESS IS IN THE BIG SCROLLER ",nsw dc.b " 4 ",p1," " dc.b " THE WHO ARE THESE PEOPLE SCREEN - " dc.b "PRESS 'W' TO ACCESS, USE CURSORS TO SELECT, AND SPACE TO RETURN TO THIS SCREEN ",nsw dc.b " " dc.b " " dc.b " WELL BEFORE I GO ANY FURTHER I'LL JUST WISH THE FOLLOWING PEOPLE A HAPPY NEW YEAR... ",nsw dc.b bn1," THE CAPED CRUSADER " dc.b bn2," BRUNO " dc.b bn1," ROZEL ",nsw dc.b bn2," TOM " dc.b bn1," MATTHEW MILES " dc.b bn2," TIM " dc.b bn1," GORDON COULTER ( SYSOP OF JUSAVO BB ) " dc.b bn2," MARTIN ",nsw dc.b bn1," GRAHAME SUPREME OVERLORD OF THE UNIVERSE " dc.b bn2," FROSTY THE SNOWMAN " dc.b bn1," ARKANGEL " dc.b bn2," JOE 90 " dc.b bn1," BOOTS ",nsw dc.b bn2," D.WATT " dc.b bn1," FLASH " dc.b bn2," ORM! " dc.b bn1," ALAN OF THE TARTAN ARMY " dc.b bn2," SPAZ,SPROG,MANIKIN AND SAMMY JOE (THE LOST BOYS) " dc.b bn1," THE UNION ",nsw dc.b bn2," THE EXCEPTIONS " dc.b bn1," THE CAREBEARS " dc.b bn2," AUTOMATION ",nsw," " dc.b bn1," AND EVERYONE ELSE!.......... ",nsw," " dc.b bn4," " DC.B " WELL, WHY DON'T I TELL YOU A BIT ABOUT MYSELF ( OBERJE' ) " DC.B " I AM 19 , INCREDIBLY HANDSOME , AND VERY VERY MODEST..... ",nsw DC.B " I HAVE HAD A COMPUTER SINCE I WAS 13, WHEN MY UNCLE ( BLESS HIS LITTLE HEART ) ",nsw DC.B " GAVE ME A ZX81 FOR MY BIRTHDAY!, - THANKS UNCLE! - I WAS HOOKED! " DC.B " IT WAS A FAITHFUL LITTLE MACHINE, EVEN IF IT DID CRASH ON AVERAGE EVERY 10 MINUTES, " DC.B "AND TAKE 3 WEEKS TO TRY TO LOAD A PROGRAM AND THEN FAIL 3 SECONDS BEFORE THE END! ",nsw DC.B " NEXT ( PREDICTABLY ) CAME THE SPECTRUM, A 48K ONE! AND I ALSO HAD A LOAN OF A BBC B " DC.B "FOR A WHILE! BUT AFTER SEVERAL YEARS, I.E IN 1988 I DECIDED MY SPECTRUM " DC.B "DESERVED ITS RETIREMENT, SO I WENT AND BOUGHT AN ST! WOW I WAS IMPRESSED! ",nsw DC.B " I STARTED PROGRAMMING THE ST IN FAST BASIC, AND THROUGH EXPERIMENTS WITH THE IN-LINE " DC.B "ASSEMBLER I CAME TO LEARN SOME 68000 ASSEMBLY CODE, SO I BOUGHT DEVPAC 2 AND THE REST, ",nsw DC.B "AS THEY SAY, IS HISTORY...... " DC.B " HAVE YOU NOTICED THAT THIS SCROLLTEXT HAS NO STRUCTURE OR FORM, IT JUST APPEARS " DC.B "IN NO SPECIFIC ORDER AT ALL.... WELL ITS BECAUSE I AM JUST WAFFLING, ITS THE EASIEST WAY ",nsw DC.B "TO WRITE SCROLLTEXT, JUST START TYPING AND KEEP GOING......HOWEVER ITS 9.15 , AND I THINK " DC.B "I'LL JUST BREAK FOR COFFEE........................." ,nsw DC.B "BACK! DAMN! I HAVE JUST REALISED I WILL HAVE TO DEVICE SOME MORE WAVES FOR " DC.B " THE SPRITES BECAUSE THIS AMOUNT OF TEXT IS BOUND TO USE UP ALL THE WAVES I HAVE DEFINED " DC.B "SO FAR! OH WELL NEVER MIND........... ",nsw DC.B " OH THE BELINDA CARLISLE CD IS FINISHED NOW, I'LL JUST CHANGE IT FOR SOME PROPAGANDA!........" DC.B "....DONE! ""THE MAN WITHOUT SHADOW, PROMISES YOU THE WORLD...."" " dc.b "- DR MABUSE -",p3," ",bn1," A FAB SONG! " DC.B " I THINK THAT I WILL LET YOU READ THE CAPED CRUSADERS SCROLLTEXT NOW....... ",nsw * * Caped Crusader text here! * dc.b " A BIG HAND PLEASE FOR THE CAPED CRUSADER.......... ",nsw *-----------------------------------------------* * The Caped Crusader, Scroll Text for Oberjes...* * New Year Demo..... (C) T.C.C. 01-01-90........* *-----------------------------------------------* dc.b bn4 dc.b " GREETS THANX TO OBERJE, FOR LETTING ME HAVE THIS SCROLL SPACE. RIGHT WHAT WILL I SAY THEN, WELL I'M LISTENING TO THE WALL BY PINK FLOYD." dc.b " AND ITS ABOUT 10 TO 8 AND NIGHT ON THE 1ST OF JANUARY 1990, HAPPY NEW YEAR EVERYONE... RIGHT THATS IT BYE............ NO BUT SERIOUSLY THOUGH",nsw dc.b " WHAT AM I DOING, AT THE MOMENT CODING WISE, WELL I'M IN THE MIDDLE OF WRITTING MY NEW DEMO, NOT AS GOOD AS THIS BUT I LIKE IT, ITS CALLED THE" dc.b " S******** DEMO AND HAS LOTS OF GRAFIX AND SOME NICE VERTICAL SCROLLING IT ALSO HAS A FEW SURPRISES IN THE SCROLLTEXT. OTHER THAN THAT ITS JUST A DEMO",nsw dc.b "... WELL BEFORE I FORGET I HAD BETTER SAY HI TO MASTER, MATRIX AND THE LOST BOYZ, WHO HAVE HOPEFULLY FINISHED THEIR NEW YEAR DEMO, WHICH WAS BEING WRITTEN" dc.b " AT THEIR COPY PARTY WHICH LASTED ABOUT 3 OR 4 DAYS. FROM LAST THURSDAY FRIDAY TILL TODAY... I HEARD VARIOUS REPORTS ABOUT IT FROM MATRIX, INSTEAD OF MASTER COZ HE",nsw dc.b " WAS OUT OF HIS SKULL... I WOULD ALSO LIKE TO SAY THAT THE LOSTBOYS NEW DEMO IS GOING TO BE THE BEST WRITTEN THIS NEW YEAR, ITS GOT A FULL SCREEN DEMO," dc.b " I'M NOT TALKING ABOUT A DEMO LIKE THE CAREBEARS CUDDLY DEMO ONE, THIS ONE SCROLLS THE WHOLE SCREEN ALL THE BORDERS ARE GONE. AND ITS PARALLAX, THE BACKGROUND",nsw dc.b " ISN'T THE SAME CHARACTERS DISPLAYED OVER AND OVER AGAIN. HOLD ON A SEC BACK IN A MO......................................SORRY ABOUT THAT HAD TO GO AND WASH THE" dc.b " DISHES, ITS THE MOST I CAN DO FOR ME FOLKS AT NEW YEAR.... RIGHT HOLD ON WHILE I PUT PINK FLOYD OFF AND PUT THE TV SO I CAN WATCH ROWAN ATKINSON IN MR. BEAN....",nsw dc.b ".............MR. BEAN WAS TOTALLY BRILL, I LIKED THE BIT AT THE BEACH BEST.. WITH THE BLIND MAN.... RIGHT WHAT BACK ON WITH PINK FLOYD.....HELLO AGAIN, WHAT WILL I SAY " dc.b " NOW, OH YEAH JUST A QUICK GREET TO THE GUYS ON HACKERNET, BAUDERLINE, MIKE BOURNE, BATMAN, THE JOKER, RUSS PAYNE, ACME AND THE OTHERS, OK.",nsw dc.b " RIGHT LADS I HOPE YOU ENJOY THE DEMO, OK NOW WHAT I KNOW HOW ABOUT ME MENTIONING MY BBS " dc.b bn1," THE BATCAVE ",p3," ",bn2 dc.b " WHAT A NICE NAME EH, WELL ITS FOR ST, AMIGA AND PC OWNERS OUT" dc.b " WHO ENJOY PROGRAMMING, DRAWING GRAFIX AND WRITTING MUSIC, ALSO FOR ALL THE LATEST SOFTWARE AND DEMOS, THERE IS ALSO A SHOP WHERE YOU CAN BUY ALL THE LATEST S/WARE AND",nsw dc.b " HARDWARE, RIGHT,",bn6," WHATS THE NUMBER I HEAR YOU CRY, WELL ITS," dc.b " 03586 89049 ",p3," AND ITS TIMES ARE THE FOLLOWING, WEEKNIGHTS FROM 10:00 PM TO 8:45 NEXT DAY, EXCEPT ON" dc.b " FRIDAYS WHEN IT RUNS FROM 7:30PM TO MONDAY 8:45AM... SO IF YA GOT A MODEM THEN GIVE US A BELL, IT RUNS AT 2400/1200 ALL SPEEDS...SO PLEASE PHONE... ANYWAY THATS",nsw dc.b " ALL I CAN THINK OF JUST NOW SO I'LL POP OFF AND POP BACK LATER................I'M BACK JUST TO SAY THAT I AM A BIG HEADED SON OF A BITCH, COS I RIPPED MOST OF THE" dc.b " OF THE MUSIC FOR THIS DEMO, IE. SPEEDBALL, MR HELI, PLATOON, WEIRD DREAMS, VERMINATOR, OBLITERATOR, THE EMPIRE STRIKES BACK, XENON II, THE TUNE, CUSTODIAN, STARRAY,",nsw dc.b ". ",bn3," ALSO SINCE I DID THE FIRST PART OF THE SCROLL TEXT I'VE SEEN MOST OF THE DEMO IT SELF AND WHAT CAN I SAY " dc.b " OBERJE HAS EXCELED HIMSELF, THE EXTRA BIG SCROLLER IS TOTALLY MEGA, AND BIG!!!!! WHAT ELSE, THE MUSIC SELECTION SCREEN IS VERY NICE I LIKE THOSE BOBS (THE FINGER BOBS",nsw dc.b " THAT IS) WHAT ELSE, WELL THERE IS A WHOLE LOT OF OTHER EXCITING THINGS. OH YEAH AND I'VE ALSO SEEN A DEMO TO THE LOST BOYS MINDBOMB DEMO AND WHAT CAN I SAY, BUT THOSE" dc.b " VECTOR BALLS AR AMAZING. COME OBERJE, YOU CAN DO BETTER. (I THINK) NA OF COURSE HE CAN. RIGHT I HAD BETTER SIGN OFF ACTUALLY COS THATS ABOUT 4K I'VE JUST TYPED IN AND",nsw dc.b " I'VE GOT SORE FINGERS. OH WELL I THINK OF ANY MORE I'LL BE BACK..........OH BEFORE I GO HAS ANYONE SEEN 'THE NINJA WARRIORS' YET IT IS PROBABLY THE BEST ARCADE CONVERSION" dc.b " I'VE EVER SEEN IN MY WHOLE LIFE. WELL ABOUT THE SAME QUALITY AS SUPER HANG-ON. OK, I'M OFF...BYE... SE YA IN THE NEXT DEMO WHICH WILL PROBABLY BE MY SPEEDBALL DEMO.",nsw dc.b " DUE FOR RELEASE WITHIN THE NEXT MONTH.. OK AND DON'T FORGET THAT THERE IS A MULTI-TUDE OF DEMOS COMING OUT THIS MONTH (JANUARY). SO THERE WILL BE PLENTY FOR YOU TO" dc.b " READ, LISTEN TOO AND WATCH OVER THE COMING WEEKS..... TOOO DAAAA LOOOOOO..............THE ONE AND ONLY CAPED CRUSADER.....TIME IS 11:40 ON THE NIGHT OF THE 9TH OF",nsw dc.b " JANUARY 1990......................." * * * dc.b " ",bn5," " dc.b "YIPPE, THIS IS OBERJE BACK AT THE HELM, WELL TCC HAD QUITE A BIT TO SAY, RATHER MORE THAN I HAD ACTUALLY " dc.b "SUSPECTED, I JUST SAID WRITE SOME SCROLLTEXT....AND HE DID! AMAZING...... ",nsw dc.b " AND NOW AS A SPECIAL TREAT I'M GOING TO SHOW YOU THE SCROLLTEXT I WROTE " dc.b "ON NEW YEARS WHEN I WAS DRUNK!................ ",nsw,bn3," " dc.b " YES!, HERE IT IS !..................OFFICIAL NEW YEAR SCROLLTEXT , I.E I'M JUST A LITTLE " DC.B "BIT PISSED!, WELL QUITE A BIT ACTUALLY, IN FACT THIS TYPING MALARKY IS PROVING TO BE DIFFICULT " DC.B "AND I HAVE MADE MANY CORRRECTIONS ALREADY! PEACH SCHNAPS",p1," THATS WHAT IT IS MATEY, ITS BLOODY " DC.B "BRUTAL! TASTES LIKE FRUIT JUICE, WASTES THE BRAIN PRETTY QUICK!..............",nsw DC.B "WELL THE TIME IS 1.56 ON 1/1/90 AND I'M IN MY BEDROOM WITH BRUNO WAITING FOR SOME " DC.B "OF MY FRIENDS TO APPEAR.......................WILL THEY COME , GOOD QUESTION...........WELL IT " DC.B "IS POSSIBLE, BUT SEVERAL PLANS FOR THE CELEBRATION HAVE FALLEN THROUGH ALREADY, WHERE THE HELL IS " DC.B "MARK THATS WHAT I WANT TO KNOW, HE SAID HE'D BE HERE AT 10PM, HES PRETTY LATE, PROBABLY BOGGED OFF ",nsw DC.B "TO ABERDEEN INSTEAD THE COMPLETE POOP! OH OH ITS 2 NOW! GOSH, THAT MEANS THAT THE COUNT AND " DC.B "HIS FRIENDS ARE LATE! LOOKS LIKE I'LL HAVE TO FINISH THE SCHNAPPS MEESELF!..............." DC.B "OH NOT FORGETTING BRUNO!.................... " DC.B " OH OH ITS THE DOOR, ITS MY SISTER AND .............. SHE IS WASTED! , WHOA! ",nsw DC.B " SHE SAYS SHE HAS JUST BEEN PUKING UP AND FALLS ASLEEP ON MY BED, THATS HANDY............." DC.B " YEP, SHES WASTED, OH OH " DC.B " SHES WOKEN UP AGAIN............AND NOW SHES RUNNING FOR THE BATHROOM.........BRROOUGHAARGH!..." DC.B " YUK! ",nsw DC.B "RING RING, RING RING...........THAT WAS THE COUNT ON THE PHONE!, HIS HOUSE 15 MINUTES - PARTY!" DC.B " YEAHH! GORRA GO, ILL FINISH THIS TEXT TOMORROW! " DC.B " 1ST OF JANUARY 1990, THE TIME IS NOW 3.15 ( IN THE AFTERNOON ), I HAVE JUST" DC.B " WOKEN UP, I DIDNT GET TO MY BED UNTIL 6.15 IN THE MORNING........ I FEEL FAIRLY OK, " DC.B "A LITTLE BIT QUEEZY, BUT I THINK I COULD HANDLE SOME BREAKFAST! THE PARTY! " DC.B "WELL WE ALL DANCED ABOUT THE COUNTS BEDROOM TO THE SOUND OF DURAN DURAN RECORDS ( AND SOME ",nsw DC.B "PROPAGANDA AND SOME FRONT 242 ! ) AT ABOUT THREE QUARTERS OF HIS STEREOS 80 WATTS! " DC.B " HIS PARENTS CAME INTO THE ROOM AND MADE FOOLS OF THEMSELVES BY SAYING ARENT WE ULTRA " DC.B "TRENDY AND DANCING ABOUT TO ULTRA MODERN ELECTRONIC MUSIC, ESPECIALLY SINCE THEY USUALLY ONLY " DC.B "LISTEN TO CRAP LIKE 'WEE JEANIE MCCOL' !!!! STILL WE GOT RID OF THEM PRETTY QUICK AND BACK ",nsw DC.B "TO SOME REAL CELEBRATION!" DC.B " HMMMMM WELL, I WAS DRUNK!.......... " DC.B " WATCH OUT FOR MORE FINGERBOBS ST DEMOS, THERE ARE BOUND TO BE SOME! " DC.B " " dc.b " AND NOW I'M AFRAID WE MUST WRAP THE SCROLLER! BOO HOO , SOB , ETC.... " dc.b " BUT DON'T WORRY THERE IS SOME MORE TEXT IN THE OTHER SCREENS! " DC.B 0 even *********************** * 24x16 Character Set * *********************** char_set incbin "\1plane.ajb" here ds.l 1 slice ds.b 1 even even track ds.l 1 ;Track on display playing ds.l 1 ;Current Track ******************************************* * Letter Table for Music Selection Screen * ******************************************* letter1 dc.w 000,0*16 dc.w 025,1*16 dc.w 050,2*16 dc.w 075,3*16 dc.w 100,4*16 dc.w 125,5*16 dc.w 150,6*16 dc.w 175,7*16 dc.w 200,8*16 dc.w 225,9*16 letter_cols dc.w $700,$710,$720,$730 Red -> Yellow dc.w $740,$750,$760,$770 dc.w $671,$572,$473,$374 Yellow -> Cyan dc.w $275,$176,$077 dc.w $067,$057,$047,$037 Cyan -> Blue dc.w $027,$017,$007 dc.w $107,$207,$307,$407 Blue -> Purple dc.w $507,$607,$707 dc.w $706,$705,$704,$703 Purple -> Red dc.w $702,$701,$700 end_cols equ * dc.w $700,$710,$720,$730 Red -> Yellow dc.w $740,$750,$760,$770 dc.w $671,$572,$473,$374 Yellow -> Cyan dc.w $275,$176,$077 dc.w $067,$057,$047,$037 Cyan -> Blue dc.w $027,$017,$007 dc.w $107,$207,$307,$407 Blue -> Purple dc.w $507,$607,$707 dc.w $706,$705,$704,$703 Purple -> Red dc.w $702,$701,$700 sky_cols dc.w $267 dc.w $267 dc.w $367 dc.w $367 dc.w $567 dc.w $567 dc.w $667 dc.w $667 dc.w $767 dc.w $767 dc.w $767 dc.w $667 dc.w $667 dc.w $567 dc.w $567 dc.w $367 dc.w $367 dc.w $267 dc.w $267 dc.w $077 dc.w $077 dc.w $166 dc.w $166 dc.w $165 dc.w $165 dc.w $265 dc.w $265 dc.w $264 dc.w $264 dc.w $363 dc.w $363 dc.w $226 water dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 dc.w $226 mus_pic incbin "\loader.pi1" mus_picture equ mus_pic+34 mus_palette equ mus_pic+2 even track_names dc.b "COSMIC PIRATE #1 " dc.b "COSMIC PIRATE #2 " dc.b "COSMIC PIRATE #3 " dc.b "COSMIC PIRATE #4 " dc.b "RENEGADE " dc.b "MR HELI #1 " dc.b "MR HELI #2 " dc.b "MR HELI #3 " dc.b "MR HELI #4 " dc.b "MR HELI #5 " dc.b "THUNDERCATS " dc.b "WARHAWK " dc.b "XENON #1 " dc.b "XENON #2 " dc.b "XENON #3 " dc.b "RAMPAGE #1 " dc.b "RAMPAGE #2 " dc.b "LEATHERNECK #1 " dc.b "LEATHERNECK #2 " dc.b "OUTRUN #1 " dc.b "OUTRUN #2 " dc.b "GOLDRUNNER II #1 " dc.b "GOLDRUNNER II #2 " dc.b "ENDURO RACER #1 " dc.b "ENDURO RACER #2 " dc.b "ENDURO RACER #3 " dc.b "RETURN 2 GENESIS " <-- Max Length ( 17 Chars! ) dc.b "SPEEDBALL #1 " dc.b "SPEEDBALL #2 " dc.b "SPEEDBALL #3 " dc.b "SPEEDBALL #4 " dc.b "SPEEDBALL #5 " dc.b "SPEEDBALL #6 " dc.b "SPEEDBALL #7 " dc.b "WEIRD DREAMS #1 " dc.b "WEIRD DREAMS #2 " dc.b "WEIRD DREAMS #3 " dc.b "WEIRD DREAMS #4 " dc.b "VERMINATOR #1 " dc.b "VERMINATOR #2 " dc.b "VERMINATOR #3 " dc.b "VERMINATOR #4 " dc.b "VERMINATOR #5 " dc.b "VERMINATOR #6 " dc.b "STAR RAY #1 " dc.b "STAR RAY #2 " dc.b "STAR RAY #3 " dc.b "STAR RAY #4 " dc.b "CUSTODIAN #1 " dc.b "CUSTODIAN #2 " dc.b "CUSTODIAN #3 " dc.b "CUSTODIAN #4 " dc.b "CUSTODIAN #5 " dc.b "CUSTODIAN #6 " dc.b "OBLITERATOR #1 " dc.b "OBLITERATOR #2 " dc.b "OBLITERATOR #3 " dc.b "OBLITERATOR #4 " dc.b "PLATOON #1 " dc.b "PLATOON #2 " dc.b "PLATOON #3 " dc.b "PLATOON #4 " dc.b "PLATOON #5 " dc.b "PLATOON #6 " dc.b "PLATOON #7 " dc.b "EMPIRE #1 " dc.b "EMPIRE #2 " dc.b "EMPIRE #3 " dc.b "EMPIRE #4 " dc.b "EMPIRE #5 " dc.b "EMPIRE #6 " dc.b "EMPIRE #7 " dc.b "EMPIRE #8 " dc.b "MILLENIUM 2.2 " dc.b "XENON II " dc.b "-* THE END *- " even ************************* * Graphics for VU Meter * ************************* vol_data dc.w $ff00,$0000,$0000,$0000,$0000,$0000,$0000,$0000 dc.w $ffff,$0000,$0000,$0000,$0000,$0000,$0000,$0000 dc.w $ffff,$ff00,$0000,$0000,$0000,$0000,$0000,$0000 dc.w $ffff,$ffff,$0000,$0000,$0000,$0000,$0000,$0000 dc.w $ffff,$ffff,$ff00,$0000,$0000,$0000,$0000,$0000 dc.w $ffff,$ffff,$ffff,$0000,$0000,$0000,$0000,$0000 dc.w $ffff,$ffff,$ffff,$ff00,$0000,$0000,$0000,$0000 dc.w $ffff,$ffff,$ffff,$ffff,$0000,$0000,$0000,$0000 dc.w $ffff,$ffff,$ffff,$ffff,$ff00,$0000,$0000,$0000 dc.w $ffff,$ffff,$ffff,$ffff,$ffff,$0000,$0000,$0000 dc.w $ffff,$ffff,$ffff,$ffff,$ffff,$ff00,$0000,$0000 dc.w $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$0000,$0000 dc.w $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ff00,$0000 dc.w $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$0000 dc.w $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ff00 dc.w $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff sine_table DC.B $4B,$49,$47,$46,$44,$43,$41,$3F DC.B $3E,$3C,$3B,$39,$38,$36,$35,$33 DC.B $32,$30,$2F,$2D,$2C,$2A,$29,$28 DC.B $26,$25,$24,$22,$21,$20,$1F,$1E DC.B $1C,$1B,$1A,$19,$18,$17,$16,$15 DC.B $14,$13,$13,$12,$11,$10,$10,$F DC.B $E,$E,$D,$D,$C,$C,$B,$B DC.B $B,$A,$A,$A,$A,$A,$A,$A DC.B $A,$A,$A,$A,$A,$A,$A,$B DC.B $B,$B,$C,$C,$C,$D,$D,$E DC.B $F,$F,$10,$11,$11,$12,$13,$14 DC.B $15,$16,$17,$18,$19,$1A,$1B,$1C DC.B $1D,$1E,$1F,$21,$22,$23,$24,$26 DC.B $27,$28,$2A,$2B,$2C,$2E,$2F,$31 DC.B $32,$34,$35,$37,$38,$3A,$3B,$3D DC.B $3F,$40,$42,$43,$45,$46,$48,$4A DC.B $4B,$4D,$4F,$50,$52,$53,$55,$56 DC.B $58,$5A,$5B,$5D,$5E,$60,$61,$63 DC.B $64,$66,$67,$69,$6A,$6B,$6D,$6E DC.B $6F,$71,$72,$73,$74,$76,$77,$78 DC.B $79,$7A,$7B,$7C,$7D,$7E,$7F,$80 DC.B $81,$82,$83,$84,$84,$85,$86,$86 DC.B $87,$88,$88,$89,$89,$89,$8A,$8A DC.B $8A,$8B,$8B,$8B,$8B,$8B,$8B,$8B DC.B $8B,$8B,$8B,$8B,$8B,$8B,$8B,$8A DC.B $8A,$8A,$89,$89,$88,$88,$87,$87 DC.B $86,$85,$85,$84,$83,$82,$82,$81 DC.B $80,$7F,$7E,$7D,$7C,$7B,$7A,$79 DC.B $77,$76,$75,$74,$73,$71,$70,$6F DC.B $6D,$6C,$6B,$69,$68,$66,$65,$63 DC.B $62,$60,$5F,$5D,$5C,$5A,$59,$57 DC.B $56,$54,$52,$51,$4F,$4E,$4C,$4B ********************* * The Music Modules * ********************* even *m4 incbin "b:\m4.dat" ;Pos Independant * *m4_int equ m4+$e even *m9 incbin "b:\m9.dat" ;Pos Independant * *m9_int equ m9+$e even *m10 incbin "\m10.dat" ; " * *m10_int equ m10+$e even *m11 incbin "\m11.dat" ; " * *m11_int equ m11+$e even *m12 incbin "\m12.dat" ; " * *m12_int equ m12+$e even *m13 incbin "\m13.dat" ; " * *m13_int equ m13+$e even *m14 incbin "\m14.dat" ; " * *m14_int equ m14+$e even *m15 incbin "\m15.dat" ; " * *m15_int equ m15+$e even *m16 incbin "\m16.dat" ; " * *m16_int equ m16+$e even *m17 incbin "\m17.dat" ; " * *m17_int equ m17+$e even *m18 incbin "\m18.dat" ; " * *m18_int equ m18+$e even *m19 incbin "\m19.dat" ; " * *m19_int equ m19+$e even *mx incbin "\tlb.dat" ; All the Power Demo tunes ! ; Hope you dont mind TLB ! even **************************************** * Character Set for Corkscrew Scroller * **************************************** in_set incbin "b:\blocky8.tfb" ;8x8 Char Set ( 640 bytes ) large_set ds.b 8*$a0 ;Blank area data ds.b 32000 ;Diagonal Scroll workspace ; Bouncy Scroll scroll_data ds.b $a0*17 put_data equ scroll_data+$99 even ******** CORKSCREW SCROLLER ********* ; ;Table of addresses used to print characters ;onto work area - Used for speed. ; top set data data_bottom equ data+159*$a0 bottom set data_bottom Table_0 dc.l bottom+-1*(8*$a0)+0*8+0 dc.l top+00*(8*$a0)+0*8+1 dc.l top+01*(8*$a0)+1*8+0 dc.l top+02*(8*$a0)+1*8+1 dc.l top+03*(8*$a0)+2*8+0 dc.l top+04*(8*$a0)+2*8+1 dc.l top+05*(8*$a0)+3*8+0 dc.l top+06*(8*$a0)+3*8+1 dc.l top+07*(8*$a0)+4*8+0 dc.l top+08*(8*$a0)+4*8+1 dc.l top+09*(8*$a0)+5*8+0 dc.l top+10*(8*$a0)+5*8+1 dc.l top+11*(8*$a0)+6*8+0 dc.l top+12*(8*$a0)+6*8+1 dc.l top+13*(8*$a0)+7*8+0 dc.l top+14*(8*$a0)+7*8+1 dc.l top+15*(8*$a0)+8*8+0 dc.l top+16*(8*$a0)+8*8+1 dc.l top+17*(8*$a0)+9*8+0 dc.l top+18*(8*$a0)+9*8+1 dc.l top+19*(8*$a0)+10*8+0 dc.l top+00*(8*$a0)+10*8+1 dc.l top+01*(8*$a0)+11*8+0 dc.l top+02*(8*$a0)+11*8+1 dc.l top+03*(8*$a0)+12*8+0 dc.l top+04*(8*$a0)+12*8+1 dc.l top+05*(8*$a0)+13*8+0 dc.l top+06*(8*$a0)+13*8+1 dc.l top+07*(8*$a0)+14*8+0 dc.l top+08*(8*$a0)+14*8+1 dc.l top+09*(8*$a0)+15*8+0 dc.l top+10*(8*$a0)+15*8+1 dc.l top+11*(8*$a0)+16*8+0 dc.l top+12*(8*$a0)+16*8+1 dc.l top+13*(8*$a0)+17*8+0 dc.l top+14*(8*$a0)+17*8+1 dc.l top+15*(8*$a0)+18*8+0 dc.l top+16*(8*$a0)+18*8+1 dc.l top+17*(8*$a0)+19*8+0 dc.l top+18*(8*$a0)+19*8+1 bottom set $a0+bottom top set top-$a0 Table_1 dc.l bottom+-1*(8*$a0)+0*8+0 dc.l top+00*(8*$a0)+0*8+1 dc.l top+01*(8*$a0)+1*8+0 dc.l top+02*(8*$a0)+1*8+1 dc.l top+03*(8*$a0)+2*8+0 dc.l top+04*(8*$a0)+2*8+1 dc.l top+05*(8*$a0)+3*8+0 dc.l top+06*(8*$a0)+3*8+1 dc.l top+07*(8*$a0)+4*8+0 dc.l top+08*(8*$a0)+4*8+1 dc.l top+09*(8*$a0)+5*8+0 dc.l top+10*(8*$a0)+5*8+1 dc.l top+11*(8*$a0)+6*8+0 dc.l top+12*(8*$a0)+6*8+1 dc.l top+13*(8*$a0)+7*8+0 dc.l top+14*(8*$a0)+7*8+1 dc.l top+15*(8*$a0)+8*8+0 dc.l top+16*(8*$a0)+8*8+1 dc.l top+17*(8*$a0)+9*8+0 dc.l top+18*(8*$a0)+9*8+1 dc.l top+19*(8*$a0)+10*8+0 dc.l top+00*(8*$a0)+10*8+1 dc.l top+01*(8*$a0)+11*8+0 dc.l top+02*(8*$a0)+11*8+1 dc.l top+03*(8*$a0)+12*8+0 dc.l top+04*(8*$a0)+12*8+1 dc.l top+05*(8*$a0)+13*8+0 dc.l top+06*(8*$a0)+13*8+1 dc.l top+07*(8*$a0)+14*8+0 dc.l top+08*(8*$a0)+14*8+1 dc.l top+09*(8*$a0)+15*8+0 dc.l top+10*(8*$a0)+15*8+1 dc.l top+11*(8*$a0)+16*8+0 dc.l top+12*(8*$a0)+16*8+1 dc.l top+13*(8*$a0)+17*8+0 dc.l top+14*(8*$a0)+17*8+1 dc.l top+15*(8*$a0)+18*8+0 dc.l top+16*(8*$a0)+18*8+1 dc.l top+17*(8*$a0)+19*8+0 dc.l top+18*(8*$a0)+19*8+1 bottom set $a0+bottom top set top-$a0 Table_2 dc.l bottom+-1*(8*$a0)+0*8+0 dc.l top+00*(8*$a0)+0*8+1 dc.l top+01*(8*$a0)+1*8+0 dc.l top+02*(8*$a0)+1*8+1 dc.l top+03*(8*$a0)+2*8+0 dc.l top+04*(8*$a0)+2*8+1 dc.l top+05*(8*$a0)+3*8+0 dc.l top+06*(8*$a0)+3*8+1 dc.l top+07*(8*$a0)+4*8+0 dc.l top+08*(8*$a0)+4*8+1 dc.l top+09*(8*$a0)+5*8+0 dc.l top+10*(8*$a0)+5*8+1 dc.l top+11*(8*$a0)+6*8+0 dc.l top+12*(8*$a0)+6*8+1 dc.l top+13*(8*$a0)+7*8+0 dc.l top+14*(8*$a0)+7*8+1 dc.l top+15*(8*$a0)+8*8+0 dc.l top+16*(8*$a0)+8*8+1 dc.l top+17*(8*$a0)+9*8+0 dc.l top+18*(8*$a0)+9*8+1 dc.l top+19*(8*$a0)+10*8+0 dc.l top+00*(8*$a0)+10*8+1 dc.l top+01*(8*$a0)+11*8+0 dc.l top+02*(8*$a0)+11*8+1 dc.l top+03*(8*$a0)+12*8+0 dc.l top+04*(8*$a0)+12*8+1 dc.l top+05*(8*$a0)+13*8+0 dc.l top+06*(8*$a0)+13*8+1 dc.l top+07*(8*$a0)+14*8+0 dc.l top+08*(8*$a0)+14*8+1 dc.l top+09*(8*$a0)+15*8+0 dc.l top+10*(8*$a0)+15*8+1 dc.l top+11*(8*$a0)+16*8+0 dc.l top+12*(8*$a0)+16*8+1 dc.l top+13*(8*$a0)+17*8+0 dc.l top+14*(8*$a0)+17*8+1 dc.l top+15*(8*$a0)+18*8+0 dc.l top+16*(8*$a0)+18*8+1 dc.l top+17*(8*$a0)+19*8+0 dc.l top+18*(8*$a0)+19*8+1 bottom set $a0+bottom top set top-$a0 Table_3 dc.l bottom+-1*(8*$a0)+0*8+0 dc.l top+00*(8*$a0)+0*8+1 dc.l top+01*(8*$a0)+1*8+0 dc.l top+02*(8*$a0)+1*8+1 dc.l top+03*(8*$a0)+2*8+0 dc.l top+04*(8*$a0)+2*8+1 dc.l top+05*(8*$a0)+3*8+0 dc.l top+06*(8*$a0)+3*8+1 dc.l top+07*(8*$a0)+4*8+0 dc.l top+08*(8*$a0)+4*8+1 dc.l top+09*(8*$a0)+5*8+0 dc.l top+10*(8*$a0)+5*8+1 dc.l top+11*(8*$a0)+6*8+0 dc.l top+12*(8*$a0)+6*8+1 dc.l top+13*(8*$a0)+7*8+0 dc.l top+14*(8*$a0)+7*8+1 dc.l top+15*(8*$a0)+8*8+0 dc.l top+16*(8*$a0)+8*8+1 dc.l top+17*(8*$a0)+9*8+0 dc.l top+18*(8*$a0)+9*8+1 dc.l top+19*(8*$a0)+10*8+0 dc.l top+00*(8*$a0)+10*8+1 dc.l top+01*(8*$a0)+11*8+0 dc.l top+02*(8*$a0)+11*8+1 dc.l top+03*(8*$a0)+12*8+0 dc.l top+04*(8*$a0)+12*8+1 dc.l top+05*(8*$a0)+13*8+0 dc.l top+06*(8*$a0)+13*8+1 dc.l top+07*(8*$a0)+14*8+0 dc.l top+08*(8*$a0)+14*8+1 dc.l top+09*(8*$a0)+15*8+0 dc.l top+10*(8*$a0)+15*8+1 dc.l top+11*(8*$a0)+16*8+0 dc.l top+12*(8*$a0)+16*8+1 dc.l top+13*(8*$a0)+17*8+0 dc.l top+14*(8*$a0)+17*8+1 dc.l top+15*(8*$a0)+18*8+0 dc.l top+16*(8*$a0)+18*8+1 dc.l top+17*(8*$a0)+19*8+0 dc.l top+18*(8*$a0)+19*8+1 bottom set $a0+bottom top set top-$a0 Table_4 dc.l bottom+-1*(8*$a0)+0*8+0 dc.l top+00*(8*$a0)+0*8+1 dc.l top+01*(8*$a0)+1*8+0 dc.l top+02*(8*$a0)+1*8+1 dc.l top+03*(8*$a0)+2*8+0 dc.l top+04*(8*$a0)+2*8+1 dc.l top+05*(8*$a0)+3*8+0 dc.l top+06*(8*$a0)+3*8+1 dc.l top+07*(8*$a0)+4*8+0 dc.l top+08*(8*$a0)+4*8+1 dc.l top+09*(8*$a0)+5*8+0 dc.l top+10*(8*$a0)+5*8+1 dc.l top+11*(8*$a0)+6*8+0 dc.l top+12*(8*$a0)+6*8+1 dc.l top+13*(8*$a0)+7*8+0 dc.l top+14*(8*$a0)+7*8+1 dc.l top+15*(8*$a0)+8*8+0 dc.l top+16*(8*$a0)+8*8+1 dc.l top+17*(8*$a0)+9*8+0 dc.l top+18*(8*$a0)+9*8+1 dc.l top+19*(8*$a0)+10*8+0 dc.l top+00*(8*$a0)+10*8+1 dc.l top+01*(8*$a0)+11*8+0 dc.l top+02*(8*$a0)+11*8+1 dc.l top+03*(8*$a0)+12*8+0 dc.l top+04*(8*$a0)+12*8+1 dc.l top+05*(8*$a0)+13*8+0 dc.l top+06*(8*$a0)+13*8+1 dc.l top+07*(8*$a0)+14*8+0 dc.l top+08*(8*$a0)+14*8+1 dc.l top+09*(8*$a0)+15*8+0 dc.l top+10*(8*$a0)+15*8+1 dc.l top+11*(8*$a0)+16*8+0 dc.l top+12*(8*$a0)+16*8+1 dc.l top+13*(8*$a0)+17*8+0 dc.l top+14*(8*$a0)+17*8+1 dc.l top+15*(8*$a0)+18*8+0 dc.l top+16*(8*$a0)+18*8+1 dc.l top+17*(8*$a0)+19*8+0 dc.l top+18*(8*$a0)+19*8+1 bottom set $a0+bottom top set top-$a0 Table_5 dc.l bottom+-1*(8*$a0)+0*8+0 dc.l top+00*(8*$a0)+0*8+1 dc.l top+01*(8*$a0)+1*8+0 dc.l top+02*(8*$a0)+1*8+1 dc.l top+03*(8*$a0)+2*8+0 dc.l top+04*(8*$a0)+2*8+1 dc.l top+05*(8*$a0)+3*8+0 dc.l top+06*(8*$a0)+3*8+1 dc.l top+07*(8*$a0)+4*8+0 dc.l top+08*(8*$a0)+4*8+1 dc.l top+09*(8*$a0)+5*8+0 dc.l top+10*(8*$a0)+5*8+1 dc.l top+11*(8*$a0)+6*8+0 dc.l top+12*(8*$a0)+6*8+1 dc.l top+13*(8*$a0)+7*8+0 dc.l top+14*(8*$a0)+7*8+1 dc.l top+15*(8*$a0)+8*8+0 dc.l top+16*(8*$a0)+8*8+1 dc.l top+17*(8*$a0)+9*8+0 dc.l top+18*(8*$a0)+9*8+1 dc.l top+19*(8*$a0)+10*8+0 dc.l top+00*(8*$a0)+10*8+1 dc.l top+01*(8*$a0)+11*8+0 dc.l top+02*(8*$a0)+11*8+1 dc.l top+03*(8*$a0)+12*8+0 dc.l top+04*(8*$a0)+12*8+1 dc.l top+05*(8*$a0)+13*8+0 dc.l top+06*(8*$a0)+13*8+1 dc.l top+07*(8*$a0)+14*8+0 dc.l top+08*(8*$a0)+14*8+1 dc.l top+09*(8*$a0)+15*8+0 dc.l top+10*(8*$a0)+15*8+1 dc.l top+11*(8*$a0)+16*8+0 dc.l top+12*(8*$a0)+16*8+1 dc.l top+13*(8*$a0)+17*8+0 dc.l top+14*(8*$a0)+17*8+1 dc.l top+15*(8*$a0)+18*8+0 dc.l top+16*(8*$a0)+18*8+1 dc.l top+17*(8*$a0)+19*8+0 dc.l top+18*(8*$a0)+19*8+1 bottom set $a0+bottom top set top-$a0 Table_6 dc.l bottom+-1*(8*$a0)+0*8+0 dc.l top+00*(8*$a0)+0*8+1 dc.l top+01*(8*$a0)+1*8+0 dc.l top+02*(8*$a0)+1*8+1 dc.l top+03*(8*$a0)+2*8+0 dc.l top+04*(8*$a0)+2*8+1 dc.l top+05*(8*$a0)+3*8+0 dc.l top+06*(8*$a0)+3*8+1 dc.l top+07*(8*$a0)+4*8+0 dc.l top+08*(8*$a0)+4*8+1 dc.l top+09*(8*$a0)+5*8+0 dc.l top+10*(8*$a0)+5*8+1 dc.l top+11*(8*$a0)+6*8+0 dc.l top+12*(8*$a0)+6*8+1 dc.l top+13*(8*$a0)+7*8+0 dc.l top+14*(8*$a0)+7*8+1 dc.l top+15*(8*$a0)+8*8+0 dc.l top+16*(8*$a0)+8*8+1 dc.l top+17*(8*$a0)+9*8+0 dc.l top+18*(8*$a0)+9*8+1 dc.l top+19*(8*$a0)+10*8+0 dc.l top+00*(8*$a0)+10*8+1 dc.l top+01*(8*$a0)+11*8+0 dc.l top+02*(8*$a0)+11*8+1 dc.l top+03*(8*$a0)+12*8+0 dc.l top+04*(8*$a0)+12*8+1 dc.l top+05*(8*$a0)+13*8+0 dc.l top+06*(8*$a0)+13*8+1 dc.l top+07*(8*$a0)+14*8+0 dc.l top+08*(8*$a0)+14*8+1 dc.l top+09*(8*$a0)+15*8+0 dc.l top+10*(8*$a0)+15*8+1 dc.l top+11*(8*$a0)+16*8+0 dc.l top+12*(8*$a0)+16*8+1 dc.l top+13*(8*$a0)+17*8+0 dc.l top+14*(8*$a0)+17*8+1 dc.l top+15*(8*$a0)+18*8+0 dc.l top+16*(8*$a0)+18*8+1 dc.l top+17*(8*$a0)+19*8+0 dc.l top+18*(8*$a0)+19*8+1 bottom set $a0+bottom top set top-$a0 Table_7 dc.l bottom+-1*(8*$a0)+0*8+0 dc.l top+00*(8*$a0)+0*8+1 dc.l top+01*(8*$a0)+1*8+0 dc.l top+02*(8*$a0)+1*8+1 dc.l top+03*(8*$a0)+2*8+0 dc.l top+04*(8*$a0)+2*8+1 dc.l top+05*(8*$a0)+3*8+0 dc.l top+06*(8*$a0)+3*8+1 dc.l top+07*(8*$a0)+4*8+0 dc.l top+08*(8*$a0)+4*8+1 dc.l top+09*(8*$a0)+5*8+0 dc.l top+10*(8*$a0)+5*8+1 dc.l top+11*(8*$a0)+6*8+0 dc.l top+12*(8*$a0)+6*8+1 dc.l top+13*(8*$a0)+7*8+0 dc.l top+14*(8*$a0)+7*8+1 dc.l top+15*(8*$a0)+8*8+0 dc.l top+16*(8*$a0)+8*8+1 dc.l top+17*(8*$a0)+9*8+0 dc.l top+18*(8*$a0)+9*8+1 dc.l top+19*(8*$a0)+10*8+0 dc.l top+00*(8*$a0)+10*8+1 dc.l top+01*(8*$a0)+11*8+0 dc.l top+02*(8*$a0)+11*8+1 dc.l top+03*(8*$a0)+12*8+0 dc.l top+04*(8*$a0)+12*8+1 dc.l top+05*(8*$a0)+13*8+0 dc.l top+06*(8*$a0)+13*8+1 dc.l top+07*(8*$a0)+14*8+0 dc.l top+08*(8*$a0)+14*8+1 dc.l top+09*(8*$a0)+15*8+0 dc.l top+10*(8*$a0)+15*8+1 dc.l top+11*(8*$a0)+16*8+0 dc.l top+12*(8*$a0)+16*8+1 dc.l top+13*(8*$a0)+17*8+0 dc.l top+14*(8*$a0)+17*8+1 dc.l top+15*(8*$a0)+18*8+0 dc.l top+16*(8*$a0)+18*8+1 dc.l top+17*(8*$a0)+19*8+0 dc.l top+18*(8*$a0)+19*8+1 ;***** CORKSCREW ******** ; ; The Scrolly message ; Ends at label : scroll_end ; scrolltext DC.B " " dc.b " THE ST CORKSCREW SCROLLER BY THE " dc.b "FINGERBOBS " DC.B " CODED BY OBERJE ( ME! ). INSPIRED BY THE CORKSCREW SCROLLER" DC.B " IN THE VORTEX 42 MEGADEMO 2 ON THE AMIGA! " DC.B " STOP PRESS STOP PRESS STOP PRESS " DC.B " THERE IS A 'CHEAT' MODE IN ST BASIC! TO ENTER CHEAT" DC.B " MODE YOU MUST PRESS ALL FUNCTION KEYS ( F1 TO F10 ) WHEN" DC.B " THE 'LISTING' WINDOW IS ACTIVE. " DC.B " THE CHEAT MODE OFFERS A SPEED INCREASE" DC.B " OF AROUND 65% AND GIVES A NEW MENU OPTION > COMPILE !" DC.B " THANX GO TO ROZEL FOR THAT INTERESTING TIP! " DC.B " AAAAAAAAAAARRRRRRRRRRRRRGGGGG! " DC.B " JUST LIKE ALL OTHER DEMO SCREENS I HAVE CODED THIS ONE " DC.B " IS DEDICATED TO PATSY KENSIT. " DC.B " COR BLIMEY.... DOESN'T SHE LOOK NICE IN LETHAL WEAPON 2 ? " DC.B "............ SHE CERTAINLY DOES!!!! " DC.B " WELL Y'KNOW SINCE I STARTED WRITING DEMOS I'VE HAD TO " DC.B " WRITE A LOT OF SCROLLTEXT! AT FIRST I DIDN'T KNOW WHAT " DC.B " ON EARTH TO WRITE! NOW HOWEVER , I REALISE YOU CAN " DC.B " WAFFLE WHATEVER YOU LIKE!!!!!! FEW PEOPLE EVER READ " DC.B " PAST THE FIRST 5-6 KILOBYTES OF TEXT. " DC.B " TIPS FOR POTENTIAL SCROLLTEXT WRITERS " DC.B " 1. GET DRUNK ( THIS IS PARTICULARLY EFFECTIVE AT LETTING " DC.B " YOUR LITERARY TALENT LOOSE! ) " DC.B " 2. GET SOMEONE ELSE TO WRITE IT! ( ANOTHER EXCELLENT SOLUTION " DC.B ", JUST SIT AT YOUR COMPUTER AND WAIT FOR YOUR DRUNK FRIENDS TO ARRIVE " DC.B " AND THEN LET THEM TYPE THE TEXT!!! ) " DC.B " 3. SPEAK BULL ( I.E AT BASIC CHEAT MODE!!!! ) " DC.B " 4. TRY NOT TO GET BORED HALF WAY THROUGH A SENTE.......ZZZZZZZZZ" DC.B "ZZZZZZZZZZZZZZZZZZZZZ OH OOPS SORRY! " DC.B " 5. DON'T FOLLOW ANYONES TIPS!! " DC.B " SADLY I FAILED MISERABLY TO GET OTHER PEOPLE TO WRITE SCROLLTEXT IN " DC.B "THIS DEMO, THE CAPED CRUSADER DEMANDED ( YES, DEMANDED! ) SCROLLTEXT SPACE" DC.B " IN THIS DEMO, BUT NOBODY ELSE GIVES TWO JOTS OF A TURTLES WILLY! " DC.B " WHO ARE THE FINGERBOBS ? WELL THE FINGERBOBS ARE " DC.B " OBERJE ( ME! ) , I DO JUST ABOUT ALL THE ST CODING/GRAPHIX/SOUND ETC " DC.B " THE CREEPER , HE IS QUITE QUITE MAD, AND WRITES MOST OF THE " DC.B " AMIGA CODE, BUT DOES GRAPHICS AND SOUND TOO. THE COUNT , " DC.B " DOES A BIT OF EVERYTHING. ZEN , DOES SOME GRAPHIX AND SOUND" DC.B " ON AMIGA. SHADES , DOES AMIGA MUSIC AND GRAPHICS AND WILL MOVE ONTO CODING WHEN HE CAN " DC.B "BE BOTHERED TO SIT DOWN AND LEARN 68000! " DC.B " IF YOU'VE GOT A REALLY STRONG STOMACH YOU CAN ACTUALLY SEE WHAT " DC.B "WE LOOK LIKE IN THE 'WHO ARE THESE PEOPLE?' SCREEN, EXCEPT FOR SHADES, 'COS WE" DC.B " COULDN'T FIND HIM WHILE WE HAD THE VIDEO CAMERA! SO WE DECIDED TO DIGITISE " DC.B "SOMETHING ON HIS BEHALF.....FIRST WE DID SOME TENNENTS LAGER CANS, BUT THE" DC.B " RESEMBLENCE WAS MINIMAL, NEXT WE TRIED A SMIRNOFF BOTTLE, THAT LOOKED MORE LIKE HIM!, " DC.B "THEN THE CREEPERS ( FAMOUS ) OVERFLOWING ASHTRAY BUT ALAS IT TOO WAS NOT A GOOD LIKENESS, " DC.B "FINALLY WE DIGITISED A LITTLE BUST THINGY, IT STILL WASN'T A GOOD MATCH , BUT AT LEAST " DC.B "THEY BOTH LOOK STUPID.................OOPS! I DIDN'T SAY THAT! I DON'T SLAG OFF " DC.B "MEMBERS OF MY OWN GROUP! HMMMMM OH MY LOVE, ITS YOU THAT I DREAM OF, OH MY LOVE, " DC.B "SINCE THAT DAY, SOMEWHERE IN MY HEART I'M ALWAYS, DANCING WITH YOU IN THE SUMMER RAIN......" DC.B " OH SORRY, CAN'T HELP SINGING ALONG WITH BELINDA CARLISLE! IT IS 9.00PM EXACTLY ON " DC.B " THE NIGHT BEFORE THIS DEMOS RELEASE DATE! JUST SOME TWEAKING TO DO, AND MASSES OF SCROLLTEXT " DC.B " I THINK THERE IS ENOUGH TEXT FOR THIS SCREEN, I JUST HAVE TO DO SOME MORE TEXT FOR THE " DC.B "MAIN SCREEN BOUNCY SCROLLER HERE IS OUR CONTACT ADDRESS AGAIN OBERJE, 6 CARRON TERRACE, " DC.B "STONEHAVEN, AB3 2HX, WRITE TO SWAP DEMOS, CHAT , WHATEVER! " DC.B " OH WELL END OF SCROLLER, LETS JUST WATCH SOME DOTS BEFORE " DC.B "WE LOOP ................................." DC.B ".........................................." dc.b " " scroll_end DC.B 0 table dc.b 0,4,9,14,16 ;Barrel Table of Offsets dc.b 18,20,22,23,24 dc.b 25,26,27,28,29 dc.b 30,31,32,33,34 dc.b 35,36,37,38,39 dc.b 40,41,42,43,44 dc.b 45,46,47,48,49 dc.b 50,51,52,53,54 dc.b 55,56,57,59,61 dc.b 63,65,68,73,79 barcols dc.w $111,$222,$333,$444,$555,$666,$777 dc.w $777,$666,$555,$444,$333,$222,$111 dc.w $000 even crk_pic incbin "b:\corkpic3.pc1" ;Picture crk_picture equ crk_pic+34 crk_cols equ crk_pic+2 letter_save ds.l 10 do_cols ds.l 1 at3 ds.l 1 at ds.l 1 stopped ds.b 1 stopleft ds.b 1 even do_cols2 ds.l 1 at2 ds.l 1 wait ds.w 1 nlines ds.w 1 curr_bounce ds.l 1 ;Address of current bounce table bounce_at ds.l 1 at_sprite ds.l 1 work ds.b 8*32 ;Work Area sprite_data ds.b 4096 ;Sprite Data old_spr1 ds.l nospr old_spr2 ds.l nospr old_sprites ds.l 1 ;Addresses of old sprites 1 other ds.l 1 ;Addresses of old sprites 2 oldpos ds.l 1 scrollpos ds.l 1 screen_1 ds.l 1 screen_2 ds.l 1 set_0 ds.b 60*2*8 ;Storage for the \ set_1 ds.b 60*2*8 ;Character sets / CORKSCREW set_2 ds.b 60*2*8 set_3 ds.b 60*2*8 set_4 ds.b 60*2*8 set_5 ds.b 60*2*8 set_6 ds.b 60*2*8 set_7 ds.b 60*2*8 Table ds.l 1 ;Current Tables address set ds.l 1 ;Current Sets address count ds.w 1 ;Current pixel crkscrl ds.l 1 ;Current position in scrolltext lines ds.w 1 even ************** * 16x16 Font * ************** sixteen incbin "\single16.tfb" orig_set equ sixteen ;For big scroller even music_credits dc.b " ",13,10 dc.b " THE MUSIC SCREEN ",13,10 dc.b " ",13,10 dc.b " MUSIC HACKS BY ",13,10 dc.b " OBERJE ",13,10 dc.b " CAPED CRUSADER ",13,10 dc.b " ",13,10 dc.b " READ MAIN SCROLLING",13,10 dc.b " MESSAGE FOR KEYS ",13,10 dc.b " ",13,10 dc.b " ",13,10 dc.b " PRESS ANY KEY ",13,10 even cork_credits dc.b " ",13,10 dc.b " CORKSCREW SCROLLER ",13,10 dc.b " ",13,10 dc.b " BY OBERJE ",13,10 dc.b " ",13,10 dc.b " ",13,10 dc.b "INSPIRED BY SCROLLER",13,10 dc.b "ON AMIGA IN THE DEMO",13,10 dc.b "BY VORTEX 42 ",13,10 dc.b " ",13,10 dc.b " ",13,10 dc.b " PRESS ANY KEY ",0 even person_credits dc.b " ",13,10 dc.b "WHO ARE THESE PEOPLE",13,10 dc.b " ",13,10 DC.B " ",13,10 dc.b "THEY ARE FINGERBOBS ",13,10 dc.b "LOOKING SEXY, THEY ",13,10 dc.b "ALWAYS DO! ",13,10 dc.b " ",13,10 dc.b " USE CURSOR KEYS ",13,10 dc.b " SPACE TO EXIT ",13,10 dc.b " ",13,10 dc.b " PRESS ANY KEY ",0 even big_credits dc.b " ",13,10 dc.b " EXTRA ",13,10 dc.b " BIG SCROLLER ",13,10 dc.b " ",13,10 dc.b " BY OBERJE ",13,10 dc.b " ",13,10 dc.b " ",13,10 dc.b " ",13,10 dc.b " ",13,10 dc.b " ",13,10 dc.b " ",13,10 dc.b " PRESS ANY KEY ",0 even finished dc.l 1 scween ds.l 1 person ds.w 1 even pic1 incbin "b:\andrew.pc1" ;Picture File p1data equ pic1+34 ;Picture Data p1pal equ pic1+2 ;Palette info. even ppic2 incbin "b:\paul.pc1" ;Picture File p2data equ ppic2+34 ;Picture Data p2pal equ ppic2+2 ;Palette info. even pic3 incbin "b:\graham.pc1" ;Picture File p3data equ pic3+34 ;Picture Data p3pal equ pic3+2 ;Palette info. even pic4 incbin "b:\colin.pc1" ;Picture File p4data equ pic4+34 ;Picture Data p4pal equ pic4+2 ;Palette info. even pic5 incbin "b:\dave.pc1" ;Picture File p5data equ pic5+34 ;Picture Data p5pal equ pic5+2 ;Palette info. even *************************************** * The Digi-picture Scrolling Captions * *************************************** ptext1 dc.b " OBERJE THE MAN WITH THE HAT! ST MEGA-CODING, GRAPHIX, SAMPLING, ETC..... " dc.b " HI!, WELL AS YOU HAVE VERY PROBABLY FIGURED OUT, WE MANAGED TO GET HOLD OF A VIDEO CAMERA! WHAT A WASTE OF TIME " DC.B " THAT WAS, WE SPENT MOST OF THE TIME VIDEO-ING FAG PACKETS, AND BEER CANS. THE PICTURES WE DIGITISED ON THE CREEPERS " DC.B " AMIGA USING VIDI-AMIGA ( OR SOMETHING?! ) , THE CAMERAMAN WAS OUR GOOD FRIEND ..... JAMES! " DC.B " THEY MADE ME TAKE THE TINSEL OFF MY HAT B*****DS! I'M NOT SWEARING SINCE I DECIDED " DC.B "TO WRITE THIS DEMO USING 'NUTRASWEAR' WHICH WAS INVENTED BY FLASH! THE EDITOR OF 'THE SCUMDAY SPORT' ON MY COLLEGES " DC.B "SUN MINI-COMPUTER! WELL FLASH! I WISH YOU ALL THE BEST RESURRECTING 'SCUMDAY SPORT' AFTER ITS HURRIED ABOLITION, " DC.B " DURING THE 'OBSCENE E-MAIL SCANDAL' OF '89 !!! " DC.B " A MESSAGE TO D.WATT IF YOU ARE READING THIS! 'GET YOURSELF A HANDLE SO I DON'T HAVE TO GREET YOU AS D.WATT IN DEMOS!' " DC.B " AND THE SAME APPLIES TO YOU M.MILES!!!! " dc.b " ",0 even ptext2 dc.b " THE CREEPER 'I SMOKE TABS, ME!' AMIGA CODING, GRAPHIX, MUSIC ETC..... " DC.B " I.M IN LIVERPOOL RIGHT NOW, SO I CAN'T WRITE ANYTHING.... NOT EVEN THIS!............. " dc.b " ",0 even ptext3 dc.b " THE COUNT '1...2...3...4... EHHH?!! SHIT!!!!! AMIGA CODING,GRAPHIX, MUSIC ETC....... " DC.B " YIBBLE! " dc.b " ",0 even ptext4 dc.b " ZEN NOTHING TO DO WITH BUDDA! AMIGA GRAPHIX, MUSIC ETC...... " DC.B " GEE, DOSEN'T HE LOOK FOREIGN, GERMAN OR SWEDISH, OR MAYBE EVEN DUTCH! " DC.B " BUT NO, HE ISN'T" " dc.b " ",0 even ptext5 dc.b " SHADES GOOD LIKENESS PAH! AMIGA MUSIC MASTER, GRAPHICS WIZARD AND PROGRAMMER TO BE.......... " dc.b " ",0 even txt_addr ds.l 1 ;Start address of message phere ds.l 1 ;Pointer to current char in message this_char ds.b 8 ;Copy of current char ( Bit-map ) pslice ds.w 1 ;Count of pixels in current char shown pscrl_data ds.l 1 ;Address of start of scroll area bslice ds.w 1 ;Slice counter for Big scroller even ************************* * Big Scroll Scrolltext * ************************* bigtext dc.b " " dc.b "FINGERBOBS BIG SCROLLER SCREEN " dc.b " TO CONTACT FINGERBOBS WRITE TO " DC.B "OBERJE, 6 CARRON TERRACE, STONEHAVEN, AB3 2HX. " dc.b " WELL ISN'T THIS SIMPLY THE BIGGEST SCROLLER YOU'VE " dc.b "SEEN ON THE HUMBLE 'OL ST ?....NO?..... WELL PERHAPS NOT, " dc.b "IT IS CERTAINLY THE BIGGEST I'VE EVER SEEN! ITS HUGE! ITS GINORMOUS! " DC.B "ITS LARGE!... " DC.B "I SHOULD IMAGINE THAT YOUR EYES ARE QUITE SORE BY NOW, UNLESS YOU ARE" DC.B " STANDING ABOUT 4-5 METRES AWAY! " DC.B "......""FINGERBOBS, CHEWY-ER THAN A MULTI-STOREY BUILDING""...." DC.B "NOW A BULLETIN BOARD AD... JUSAVO - 0324 32414 - V21,V23 MNP PERHAPS?, " DC.B "V22? HE JUST CHANGED HIS MODEM! I DONT KNOW WHAT IT DOES! - 0324 32414 - " DC.B " CALL UP, LOOK AROUND, DOWNLOAD STUFF, THE USUAL THINGS! " DC.B " HAVE YOU SEEN ""WHEN HARRY MET SALLY"" YET?, IT IS A FANTASTICALLY " DC.B "BRILLIANT FILM, IT IS EXCELLENT!, WATCH IT AT ONCE! " dc.b " I AM LISTENING TO ""DEF,DUMB AND BLONDE"" BY DEBBIE HARRY JUST NOW, " DC.B "ITS HURTING MY HEAD I THINK ILL CHANGE IT FOR SOMETHING ELSE...." DC.B "..AHH THATS BETTER BELINDA CARLISLE!.....WELL ITS THE EVE OF THIS " DC.B "DEMOS RELEASE, SO ID BETTER GO WRITE SOME SCROLLTEXT FOR THE OTHER " DC.B "SCROLLERS! " DC.B " I'M DONE HERE SO I'LL JUST SAY THE BLUE RONDO CREW ARE A BUNCH" DC.B " OF LAMER B*****DS! THERE SAID IT! " dc.b "NOW LETS WRAP ( OR LOOP, IF YOU" DC.B " PREFER )..... -> " dc.b 0 even big_cols dc.w $0,$777,$777,$777 dc.w $777,$777,$777,$777 dc.w $777,$777,$777,$777 dc.w $777,$777,$777,$777 even text_ptr ds.l 1 buffer ds.b 40*16 vector_store ds.b 4 ds.l 3 old_physbase ds.l 1 old_res ds.w 1 old_palette ds.w 16 old_stack ds.l 1 colour ds.w 1 ds.l 100 ustack ds.l 1 screen_area1 ds.b 1 screen_area2 equ screen_area1+45000 *********** * THE END * *********** ; No doubt there will be more................. 8*$a0)+11*8+0 dc.l top+02*(8*$a0)+11*8+1 dc.l top+03*(8*$a0)+12*8+0 dc.l top+04*(8*$a0)+12*8+1 dc.l top+05*(8*$a0)+13*8+0 dc.l top+06*(8*$a0)+13*8+1 dc.l top+07*(8*$a0)+14*8+0 dc.l top+08*(8*$a0)+14*8+1 dc.l top+09*(8*$a0)+15*8+0 dc.l top+10*(8*$a0)+15*8+1 dc.l top+11*(8*$a0)+16*8+0 dc.l top+12*(8*$a0)+16*8+1 dc.l top+13*(8*$a0)+17*8+0 dc.l top+14*(8*$a0)+17*8+1 dc.l top+15*(8*$a0)+18*8+0 dc.l top+16*(8*$a0)+18*8+1 dc.l top+17*(8*$a0)+19*8+0 dc.l top+18*(8*$a0)+19*8+1 bottom set $a0+bottom top set top-$a0 Table_1 dc.l bottom+-1*(8*$a0)+0*8+0 dc.l top+00*(8*$a0)+0*8+1 dc.l top+01*(8*$a0)+1*8+0 dc.l top+02*(8*$a0)+1*8+1 dc.l top+03*(8*$a0)+2*8+0 dc.l top+04*(8*$a0)+2*8+1 dc.l top+05*(8*$a0)+3*8+0 dc.l top+06*(8*$a0)+3*8+1 dc.l top+07*(8*$a0)+4*8+0 dc.l top+08*(8*$a0)+4*8+1 dc.l top+09*(8*$a0)+5*8+0 dc.l top+10*(8*$a0)+5*8+1 dc.l `+.*O.|8R*m - ЭЭм// ??<JNA N/<NA"/0<NBNu#4JNA/94JNuNVBBJlDRBJ lD RB0. -@0.2. An=@ .gDN^NuNVH?BCB..,. f#4N <`hlDRCJlDRCn8fzB`0l :HGH`xe`Jge`|fD#4N D`#4N JLN^NuNV .ao-yaJo*./. /9]NPP .a .ѹ] .N^NuNVHN&(.^F/<^D/<^&/<^$N' 3^B/</91NZPм-#`/</91NZPм-#` y-h| BG`0м- @  l.0м- @2Ҽ-"A"i -!Q 0м- @0(^$1@0м- @0(^&1@0м- @0(^$1@0м- @0(^&1@RG|!mB> N$3X3XBG`(09XyXgBW?TW/9`a\XRG|m>N$#8b>N$#8f>N$3aBG`$0Ga/??9^BN*TBW?9^BN+ T.a/<a?<?<?9^BN* >?9^BN(T#88V/</98VNPr #8V 98Vм~#8Z 98Zм~#8^.h?<N$T 98^r3a 98^3aBG`0G3BPRG|mN\>N$3^BW?9^TW/9`a\BW?< /9`a\BG`0G3BPRG|m.aBgN'TBW?9^BN*bT.`aV>bB?9^@?9_Z?9^>?<Bg/9`N'BW/9`N&X|3bDafBW?9bD/9`a\> /9`aHX|3a> /9`a.X|3a09ayag> /9`aX|3^X.`a>bB?9^@?9_Z?9^>?<Bg/9`N'BW/9`N&X|3bD ybDg By^"BG`2>TW/9`aX|g0|A2y^"b0Ry^"RG|m |b02y^"Ba>BW?9bD/9`a\Jy^"g,>^BN)\#8V8r#8Z8n>a/98n/98n?<N$ By3ByaByb@` P |b02yb@1.3/<Sa X3\By^/<1?<NN$\#``>ON$#`3^X09_ мS./<Sa X.3/<Sa X.3/<Sa XByaJyafBW/<S?<NN$\#``>ON$#`J`f Rya~`*0Gh .f0Hмh./<b\a fX`RG|*m 9Pb]fVJyaoN3 aZ 9Ib^g 9Cb^fZ yaf 93b_fD` 91b_g 92b_f,`X 9Bb]fJ 9Lb^f@Jyao83 aZ yaf 93b_f` 91b_g 92b_f``.1/<8za XB98|Jy_oB.3/<8za X09_ мS./<8za vX.3/<8za dX./<8za RXBW/<8z?<=N$\3aJyam : y aZfT.bF/<?9a?<?N$P.`/< ?9a?<?N$P./<@?9a?<?N$P#a#]>a?<>N$T yafH ybFf.8r/<}aPX`& ybFf>bFW/98ra XJ@md`JybFg ybFf.8r/<}aX`0 ybFg ybFf>bFW/98ra XJ@m BG`0G`0RG|m.]/<aX.\|/<aX.`/<a~X.a\/<alXBG`0G]JPmj0G] PnZ0G\|JPmL0G\| Pn<0G`JPm.0G` Pn0Ga\JPm0Ga\ Po@BF`40F]BP0F\|BP0F`00Fa\BPRF|m` RG|m@` y aZfzBG`0G`0RG|m 98rr3_r 98r3_t 91b_f(3@_v3_x3_z3_~BybF`\ 92b_f*3_v3_x3(_z3_~3bF`(3_v3_x3(_z3_~3bFB@3_3_3_3_|~`0Ga2G_r0RG| m.a?9aNTJ@m09ay_vo3_va3_za 09ay_xo 3_xa3_~a.a?9aN LTJ@mR>a?<>N$TBG`0G`2Ga:0RG|mB@3^J3^H09aS@3^L09aS@3^N09_vH29aHA3^P09_xH29aHA3^R09^PyaS@3^T09^RyaS@3^V.8rNd._r/<a/<^H?<?9^BN* > N$J@g>N$#\ 9\ag 9\bftBG`0G3BPRG|m>a/98r/98r?<N$ .a?<N$T>/98f/98b?<N$ `N`0 9\9 f>N$#\ 9\agB 9\bfrBG`0G3BPRG|m>a/98r/98r?<N$ .a?<N$T>/98f/98b?<N$ `` 9\9 fR`lBG`b0G"|1* 0\fH31 yaf$0y1"|100H33`0y1133RG| mJy3n3a>bFW/98n/98n?<N$ BG`0G3BPRG|mBG`0G`2G`0RG|m.`?<N$T>/98r/98r?<N$ Jy^Xgz09bF||f.?<?<@?9^BN(\`J09bF||f.?<?<@?9^BN(\`.?<?<?9^BN(\ yalBG`0G32G]00G32G\|00G3BP0G"|3002G32A2G320G`JPf0G30`0G300<2Ga\2A2G320G3BP0G` Pg0G30RG|m$#8n8v#8r8n#8v8r yaf$0y1"|100H33`0y1133`Ry_09_y\mnRyb@09b@y^"mJyanBG`0G3BPRG|m>a/98r/98r?<N$ .a?<N$T>/98f/98b?<N$ BW?9^BN*bT.1R?<N'T`>^BN(N>a/98f/98b?<N$ BW?9^BN*bT.a?<N$TN&BWN$JLN^NuNV.bB/<^@/<_Z/<^>/.N':>bB?9^@?9_Z?9^>BgBgBgBgBgN&N^NuNV>bB?9^@?9_Z?9^>BgBgBgBg?<N&N^NuNV n H"nR RJ@fN^NuNV`R nJf n H"nR RJ@fN^NuNV>Bg?9bB?9^@?9_Z?9^>Bg?. /.N(2N^NuNV>?<?9bB?9^@?9_Z?9^>Bg?. /.N(2N^NuNV n2. 00 N^NuNVH .r3^( .3^*0n 13^,0n 13^.0n 13^00n 13^43^,bHBG`4BF`&.???</<^(?9aa. J@mRFy^4mRGy^.mp`pJLN^NuNVH09bH|@@3XByX`.YR/<aXlp`J9YRm\R9YR9YRHyX <X29XHЁ.9YRHH/aX9YRHHlp`9YRHyX`n 9YRgd9YRHD@R@YR9YRHyX.YT/<adXJlp`^BG`0yXXYTRyXRG9YRH@mJyXfJng"./<X?.?./. NN pJLN^Nu/<l?<&NN\Nu#pL#pNu/<?<&NN\Nu#LpNuH3Jy3gSy3B@ |3JpgvJp8gSp8`h10820p(p oBA`JAj20 1406Aplp RC` pop SC"|@$|`8L:M3@PRBpoT@|f|L3N o"o / SfNu o2<BBBBBBBBSAfNuNV.`/<?.?<?N$PfB@`pN^NuNVH 9`<BG`.Y^/<?.?<?N$Plp`9Y^H@|9Y_HA|pA9Y`HA|A2Ga:29Y^H@|2G42Ҽa"A29Y_H@|2G42Ҽa"A3@9Y`H@|2G42Ҽa"A3@RGW`J`o|m>?.0Hй`/?<BN$PB@JLN^NuNVH09bH|@@3YbByYd`.Z/<?.?<?N$Plp` J9ZmhR9Z9ZHyYb <Yh29YdHЁ.9ZHH/?.?<?N$P9ZHHlp`9ZHyYd`~ 9Zgr9ZHD@R@Z9ZHyYb.Z /<?.?<?N$Plp`\BG`0yYdYhZ RyYdRG9ZH@mJyYbfJng ./<Yh?.?./. a B@JLN^NuNV09bH|@@=@.Z 0n/?.?<?N$P0nlp`(Jng ./<Z ?.?./. az B@N^NuNV09bH|@@H-@./<Z?.?./. a .Z/.?.?<@N$Plp` .ѹYVB@N^NuNV n0(@3[N n0( @3[R nB@0( [N BA2.IA3[PBy[L`T n2y[Pɒ2y[LRy[L n2y[Pɒ2y[LQRy[LB@09[Ry[PB@09[Ly[NeN^NuNV n0(@3[V n0( @3[Z nB@0( [V BA2.IA3[XBy[T`T0y[T"n4y[XRy[T0y[T"n4y[XRy[TB@09[Zy[XB@09[Ty[VeN^NuNV>aJ@lp`v 9`4gp`b>?./<?<BN$P>azJ@lp`6 9`4g>?./9`?<BN$P`.bH/<?.?<?N$Plp`3bTad yadoByad>aJ@lp` 9`4f>a J@lp```* 9`4 g>?./9`?<BN$P` n p1@"n 3@"n 3@"n 3@ n 1ybH n 1ybJ n 0(|H"n 3@9bPH"n 3@ B@N^NuNVH? n 0Hr"n 2)H¼*@ n :( n 0: n 0 :EBG` M2GBRGEmBD`BC`r n h d|`BF 9bRf$.???/. ?.a J@lp`P`0J9bRf$.???/. ?.al J@lp`$`p`RC9bPH@eRD n herB@JL N^NuNVHBYV.4/<?.?<@N$P.YV/<?.?<@N$P.4/<?.?<@N$P.4/<?.?<@N$P.4:/<?.?<@N$P n 0(3bX3bH n 0(3bZ3bJB@3bTbSbQ3bN3bL n 0( bPB9bR0n"|4>00bV bW.bH/<?.?<@N$Plp`.4/<?.?<@N$P0n"|4D00-@./<?.?<@N$P#(YVBG`l n2G00@|[` n2G00@|[a n2G00@|[b.[`/<?.?<@N$PVYVRG0n4DPm.4 /<?.?<@N$P n 0(|H"n "n @H-@.Q/<?.?<@N$PPYV n 0Hr"n 2)H¼-@Bn`BBn`*.?.?./. ?.a J@lp`ZRn n 0( nbRn n 0(nbBW?./<?<BN$P.YV/<?.?<@N$PB@JLN^Nu#[dNN/9[dNu#[dNM/9[dNu#[dNA/9[dNu?/?<LNANu#a[h"<[hpsNBNu0/2/ҀgV 4<eHA4<|cRBA`B6<c4BfSB2C|gAC8be0Nu4`6`0Nur0/jDA4/BjDADB/&HCCjDCCBmA&Nu0/@kR@`S@@Nu0/@R@@Nu#aNu#aNu o aNuNV3af0.|Hм+-@=|` nH2naf2RRn nm.aN>B@09aN^NuNV#af^ #`^#an^#a^#a^#bb^#^ a> aF3aapN^NuNV>a*pN^NuNV#a3 an>2N%N^NuNV3an3 ap3 ar3at3av3ax3az3a|3a~>3N%N^NuNV3an# a>4N%N^NuNV#a>6N% n 0a n0a n0a n0aB@09aN^NuNV>MN% n0a n 0a n0a n0aB@09aN^NuNV3an# a>NN%N^NuNV#a3 an3ap3ar3at3av3ax>*N%N^NuNV#a3 an3ap3ar3at3av3ax3az3a|>/N%N^NuNV3 [|3 aBya3a3aN$09\N^NuNV3eaByaBya3aN$N^NuNV3 ^Z3 ^\Bn nH|2n[|2RRnJ@f3a3aSn3a3aN$N^NuNV3{aByaBya3aN$N^NuNV#[l#[t .мZ#[x3daBya3 a n 3aN$ n 0a#[|[l#\[t#_[x#^Z[pN^NuNV3 [|.N%.N%# [p3ma3a3a3aN$#^Z[pN^NuNV3 [|3zaBya3a3aN$N^NuNV3 [|3 [~3'aBya3a3aN$ n0\ n0\N^NuNV3 [|3aBya3a3aN$09\N^NuNV3 [|3jaBya3a3aN$09\N^NuNVBy^Z3 ^\3 a3aBya3aN$ n 0_ n0_ n0_ n0_N^Nu 12 222$2,242<2D2L2T2\2d2l2t2|222222223303H3V3d3p3'                  %  '#            ' A:*.* ` ;<=>?@ABCD[1][There are no picture files on|the specified drive(s).|Please select a drive that|contains .PIn, .PCn or .BLn|files.][ OK ]@((Pick the drive(s) to show from:Drive ADrive BDrive CDrive DDrive EDrive FDrive GDrive HDrive IDrive JDrive KDrive LDrive MDrive NDrive ODrive PRun ShowAbortDEGAS Elite Picture Show 2Copyright @ 1986 Batteries Includedby Tom HudsonKeyboard controls:F1-F10: Picture display timeHelp: Change settingsUndo: Exit to desktopSpace: PauseShow PicturesShow BlocksDisplay FilenamesContinue\\*.*\\FORMBODYBMHDCMAPILBM     .vf                                                                   "                                     l8           f(B"         ,&    "   0 ",2. (  D  $              f CRUSADER ",13,10 dc.b " ",13,10 dc.b " READ MAIN SCROLLING",13,10 dc.b " MESSAGE FOR KEYS ",13,10 dc.b " ",13,10 dc.b " ",13,10 dc.b " PRESS ANY KEY ",13,10 even cork_credits dc.b " ",13,10 dc.b " CORKSCREW SCROLLER ",13,10 dc.b " ",13,10 dc.b " BY OBERJE ",13,10 dc.b " ",13,10 dc.b " ",13,10 dc.b "INSPIRED BY SCROLLER",13,10 dc.b "ON AMIGA IN THE DEMO",13,10 dc.b "BY VORTEX 42 ",13,10 dc.b " ",13,10 dc.b " ",13,10 dc.b " PRESS ANY KEY ",0 even person_credits dc.b " ",13,10 dc.b "WHO ARE THESE PEOPLE",13,10 dc.b " ",13,10 DC.B " ",13,10 dc.b "THEY ARE FINGERBOBS ",13,10 dc.b "LOOKING SEXY, THEY ",13,10 dc.b "ALWAYS DO! ",13,10 dc.b " ",13*OO6*m - ЭЭ// ??<JNAO 0<2yBDJyBDf,3BDB< BLNsRxfB9!!X  3@#B<B@8BFyBDJyBDf,3BDB< B<(aiRQNu#@#D#H#L#P#T#X#\Nu#w@#wwD#wwH#wwL#wwP#wwT#wwX#ww\NuaZa"yT4Ba\aF'!pF#ah|?<NATa&F'!rpF#aNuB?< NA\#4|?<NNT#4V?<NNT34Z <6#T4 <@#T8Bg/9T4/9T8?<NNO A@C4\0<" QNPNxA@E~0< QHy7?<?<NNP#1AY&&#*Nu 94V?94Z//?<NNO C@A4\0<"QHy6?<?<NNP/94|?< NA\Nu@|A4F    p#!99 !r 99!4pFNu@|A4F !! !pF Nua>haaNtaP:$yT,aSR$yT0aRJ9B:gS9B;fQB:aNaNaR\?<%NNT?<?<NAXJ@g mf aSbB` wfNvB`~ cf ad0B`l efdaoB`ZNuBM609 49 6989A9(((((( ( (((((((((( ("($(&(((*(,(.(0(2(4(6(8(:(<(>(@(B(D(F(H(J(L(N(P(R(T(V(X(Z(\(^(`(b(d(f(h(j(l(n(p(r(t(v(x(z(|(~((((((((((((((((((((((((((((((((((((((((*yT$I9B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 B@BBBCBD,,,CDP66 606@ACT$yT8 6JKC("A@&H*                                                                 Nu,yT$(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB l(^BB BBBDBLBBBBB$B,BBBdBlBB BBBDBLBBBBB$B,BBB dB lNuA90969(BPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPA90969((ABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPABPNu?g @?g @@g @Ag @Bg @Cg @Dg @Eg @Fg @Gg* @Hg4 @Ig> @JgH#Tab`#TaP`#Ta>`#Ta,`#Ta`#Ta`#Ta`#Ta`#Ta`#Ta`x#Ta`f#Ta`T#Ta`B#Tax`0#Taf`#TaT` #TaB`#Ta0`#Ta`#Ta `#Ta`#Ta`#Ta`#Ta`|#Ta`j#Ta`X#Ta`F#Ta|`4#Taj`"#TaX`#TaF`#Ta4`#Ta"`#Ta`#Ta`#Ta`#Ta`#Ta`#Ta`n#Ta`\#Ta`J#Ta`8#Tan`&#Ta\`#TaJ`#Ta8`#Ta&`#Ta`#Ta`#Ta`#Ta`#Ta`#Ta`r#Ta``#Ta`N#Ta`<#Tar`*#Ta``#TaN`#Ta<`#Ta*`#Ta`#Ta`#Ta`#Ta`#Ta`#Ta`v#Ta`d#Ta`R#Ta`@#Tav`.#Tad`#TaR` #Ta@`#Ta.`#Ta`NqF'!rpF#aNxF'!4p!r F#A@E~0< QNu9 9 9A}"yT4ka8A}"yT4oaA}"yT4sHaNu><3P3h3h3h3h&3h .3h 63h>QNuBBBA~F"yT4i0962 4 B(H*IA><*+lQ(H*I@><*+lQ"yT4\096Aw><BB  EFKMnmnm@nAmnmnm n!mnm`naQv096y:f<"yT4\><FiFiFi@FiFiFi FiFi`QNuE>>< 0T@@4XQNu>< G~E>IBB03A"|2RT4( |0Z~#h#h#h#h #h#h#h#h#h@@#hDD#hHH#hLL#h#h#h#h#h#h#h#h#h  #h$$#h((#h,,#h#h#h#h#h``#hdd#hhh#hll#h#h#h#h  #h#h#h#h#h@@#hDD#hHH#hLL#h#h#h#h#h#h#h#h#h  #h$$#h((#h,,#h#h#h#h#h ` `#h d d#h h h#h l l#h #h  #h  #h #h #h #h #h #h @ @#h D D#h H H#h L L#h #h #h #h #h #h #h #h #h #h $ $#h ( (#h , ,#h #h #h #h #h``#hdd#hhh#hll#h#h#h#h  #h#h#h#h#h@@#hDD#hHH#hLL#h#h#h#h#h#h#h#h#h  #h$$#h((#h,,#h#h#h#h#h``#hdd#hhh#hllQNu>< IB \BBBB BBBBB@BDBHBLBBBBBBBBB B$B(B,BBBBB`BdBhBlBBBB BBBBB@BDBHBLBBBBBBBBB B$B(B,BBBBB `B dB hB lB B B B B B B B B @B DB HB LB B B B B B B B B B $B (B ,B B B B B`BdBhBlBBBB BBBBB@BDBHBLBBBBBBBBB B$B(B,BBBBB`BdBhBlQNuA~0<QNu apF'!rpF#Nr&Aza#ĊB<3BD"yT40<0"Q"|0<?"QA#b"yT4aD yT4"yT80<@"QaF'!|p! F#A@E#B0< Qa`F'!rpF#NxA0<? Qa~F'!4p!r F#A@E~0< QNu(yr@*yr<,yrFaaa*yr<1&HBkkkk k kkkk k! k(!k)(k0)k10k81k98k@9kA@kHAkIHkPIkQPkXQkYXk`Yka`khakihkpikqpkxqkyxkykkkkkkkRQNuE"><1&NBkk k kkkk k!"k(#k)*k0+k12k83k9:k@;kABkHCkIJkPKkQRkXSkYZk`[kabkhckijkpkkqrkxskyzk{kkkkkkkRQNu><' ]0fJ"LB(B(B(B(B(@B(AB(B(B(B(B( B(!B(B(B(`B(aQNu"LB(B(B(B(B(@B(GB(B(B(B(B( B('B(B(B(`B(gQhNu><' ]0f"LB a~QNu"LB iiiii@iGiiii i  i 'i i i`igQnNuiiiii@iAiiii i  i !i i i`iaNu aF'!rpF#Nr&A{a4BCRC CgNu6<RE EgNu:<TD DgNu8<}gNu3}NuH"|, y,>< (0(H@1@ (0(H@1@ (0(H@1@ (0(&H@1@ (&0(.H@1@& (.0(6H@1@. (60(>H@1@6 (>0(FH@1@> (F0(NH@1@F (N0(VH@1@N (V0(^H@1@V (^0(fH@1@^ (f0(nH@1@f (n0(vH@1@n (v0(~H@1@v (~0(H@1@~ (0(H@1@ (0(H@1@ (0(H@1@2(QQ1AQR9,9,J9,gLNua`#,,,R, y,B g g g@ @AC,""Nu y,0<BBBBB&B.B6B>BFBNBVB^BfBnBvB~BBBBQNu aF'!rpF#Nr&#ĊB<3BDA|aA10<QaLF'!pF#A@E10< Qa @arNr&a F'!rpF#NPNxA0<? QNF'!4p!r F#A@E~0< QNu#,13,NuJy,gA10<hhhhhhhhh h h h h h hhhhhhhhhhhhhhhhhh h! h"!h#"h$#h%$h&%h'&h('(QB y1 @@AB09,@@3,C1h'h Oh@wh`hhhh?hgh h@h`hh/hWhNu y1Jg#13,`:#,13,`$"yT8@A1a a a a a a a a a a a a ~a ta ja `a V(a Fa <a 2a (a a a a aaaaaaaa(aaaaaxanadaZaPaFa<a2a(aaa (aaaaaaaaaaaaaaxanad(aTaJa@a6a,a"aaaaaaaaaa(aaaaaa|araha^aTaJa@a6a,a"a(aaaaaaaaaaaaaaa|ar(abaXaNaDa:a0a&aaaaaaaaa(aaaaaaaavalabaXaNaDa:a0a&(aa aaaaaaaaaaaaaa(apafa\aRaHa>a4a*a aa aaaaa(aaaaaaaaazapafa\aRaHa>a4(a$aaaaaaaaaaaaaaa(a~ataja`aVaLaBa8a.a$aaaaaa(aaaaaaaaaa~ataja`aVaLaB(NuArLC<<0><Xd2QQNu2`3h3h3h3h3h 3h (3h 03h83h@3hH3hP3hX3h`3hh3hp3hx3h 3h"3h$3h&Nuaaa$N>?<%NNT?<?<NAXJ@gNu 9T8 9T4#T8T4#T8NuCCTAzGBT0<67X7X7XQGBT><<<0kF@220+k F@222222 QGBT<< 0+7@H@6 +0+ 7@ H@7@ +0+ 7@ H@7@ +0+7@H@7@QGBTQbNuACT<$I><;hhhhh h hQ>< JaB JaQNu0<; QNu"H0<QNu? <<8?x?????  p??? ? ?? p0  ` ``WG$$$$sn : 79pZ0ff}C>_ ac ns qC3t/@t0`<  8>6A@\ c!0]c``N>I A0 8.0n0 0@_ x`' F0 ׀ 8@` 0ۀ|<`  0/00 0}'~8 0v=?>Ù 0zΗ>  8p.Wnj1` @=:SNCp ^۷a^P!a^?@.`0 1X\?@b@0^_G v ? y0_]K? 8?o ? p N@>?3 q! @0` 9|||xx\`c~so8@xx  T*gF$"wGDDDD8||y!DQ@AEQ!Dxxy^!ÀDT@@AP!À8S|}A=@ 0`   Bg7ȟ@ @ 8 _ @c 8 `?_@3 0 ?_ @ 0@ @ @? @? ~ ? B// 30 0@B//70 0@?B/?<  0B_@< B< ` B/ < >00 B? < x>0 B_?/w? 7 0 Boӿ/WC 30 BWп/ A@_ `0 0x ` BKп/? A_ `0 08 `` BEп/ A_ `0 0  ` BBп/_ A@_ `0 0 ` ` BBп// A_ `0 0 0 @`` >~B߿/ `??  0@ @B?/? `  0@?B/`  0@B?/_`` 00B?/_`` 00 B__/ ` 0 ` Bg/ȟ@ ` 08@@ 0` ? ??|y!9@xx}|y!9@xx}@D@EQ!D@DDEQA@D@EQ!D@DDEQAxD@y^!GxDyyxD@y^!GxDyy@D@AP!D@DD@EA@F@D@AP!D@DD@EA@F|CA=8D@xx}7|CA=8D@xx}7  T*FGIKLNPQSUWXZ[]_`bcefhiklnoqrsuvwxy{|}~~}|{yxwvusrqonlkihfecb`_][ZXWUSQPNLKIGFDB@?=;:864310.,+)(&%#"    "#%&()+,.013468:;=?@BD !"##$%&&'(()**+,,-..//01122334455666778889999::::;;;;;;;;;;<;;;;;;;;;;::::99998887766655443322110//..-,,+**)(('&&%$##"!   @@2O@@<  DX+_3 B|v @@   hg $] B_u'r DZ  W   %h1sZAdSRSRM  hS 1p*p6p  @ ` @ @ `@@ ` @  @ @@ @  @ `@@ ` @ @ ` @ @ ` @@ ` @ 0@P`pqrstuvwgWG7' 0@P`pqrstuvwgWG7' 0@P`pqrstuvwgWG7' 0@P`pqrstuvwgWG7' FINGERBOBS PRESENT  NEW YEAR DEMO  CODED BY  OBERJE   THIS DEMOS HAS FOUR ADDITIONAL SCREENS.... 1 THE MUSIC SELECTION SCREEN - PRESS 'M' TO ACCESS, USE CURSOR KEYS TO CHOOSE TUNE, AND RETURN TO PLAY IT, GO BACK TO THIS SCREEN BY PRESSING SPACE.  2 THE CORKSCREW SCROLLER SCREEN - PRESS 'C' TO ACCESS, SIT AND WATCH, PRESS ANY KEY TO RETURN TO THIS SCREEN  3 THE EXTRA BIG SCROLLER SCREEN - PRESS 'E' TO ACCESS, SIT AND WATCH, PRESS ANY KEY TO RETURN TO THIS SCREEN  OUR CONTACT ADDRESS IS IN THE BIG SCROLLER  4 THE WHO ARE THESE PEOPLE SCREEN - PRESS 'W' TO ACCESS, USE CURSORS TO SELECT, AND SPACE TO RETURN TO THIS SCREEN  WELL BEFORE I GO ANY FURTHER I'LL JUST WISH THE FOLLOWING PEOPLE A HAPPY NEW YEAR...  THE CAPED CRUSADER  BRUNO  ROZEL  TOM  MATTHEW MILES  TIM  GORDON COULTER ( SYSOP OF JUSAVO BB )  MARTIN  GRAHAME SUPREME OVERLORD OF THE UNIVERSE  FROSTY THE SNOWMAN  ARKANGEL  JOE 90  BOOTS  D.WATT  FLASH  ORM!  ALAN OF THE TARTAN ARMY  SPAZ,SPROG,MANIKIN AND SAMMY JOE (THE LOST BOYS)  THE UNION  THE EXCEPTIONS  THE CAREBEARS  AUTOMATION   AND EVERYONE ELSE!..........   WELL, WHY DON'T I TELL YOU A BIT ABOUT MYSELF ( OBERJE' ) I AM 19 , INCREDIBLY HANDSOME , AND VERY VERY MODEST.....  I HAVE HAD A COMPUTER SINCE I WAS 13, WHEN MY UNCLE ( BLESS HIS LITTLE HEART )  GAVE ME A ZX81 FOR MY BIRTHDAY!, - THANKS UNCLE! - I WAS HOOKED! IT WAS A FAITHFUL LITTLE MACHINE, EVEN IF IT DID CRASH ON AVERAGE EVERY 10 MINUTES, AND TAKE 3 WEEKS TO TRY TO LOAD A PROGRAM AND THEN FAIL 3 SECONDS BEFORE THE END!  NEXT ( PREDICTABLY ) CAME THE SPECTRUM, A 48K ONE! AND I ALSO HAD A LOAN OF A BBC B FOR A WHILE! BUT AFTER SEVERAL YEARS, I.E IN 1988 I DECIDED MY SPECTRUM DESERVED ITS RETIREMENT, SO I WENT AND BOUGHT AN ST! WOW I WAS IMPRESSED!  I STARTED PROGRAMMING THE ST IN FAST BASIC, AND THROUGH EXPERIMENTS WITH THE IN-LINE ASSEMBLER I CAME TO LEARN SOME 68000 ASSEMBLY CODE, SO I BOUGHT DEVPAC 2 AND THE REST, AS THEY SAY, IS HISTORY...... HAVE YOU NOTICED THAT THIS SCROLLTEXT HAS NO STRUCTURE OR FORM, IT JUST APPEARS IN NO SPECIFIC ORDER AT ALL.... WELL ITS BECAUSE I AM JUST WAFFLING, ITS THE EASIEST WAY TO WRITE SCROLLTEXT, JUST START TYPING AND KEEP GOING......HOWEVER ITS 9.15 , AND I THINK I'LL JUST BREAK FOR COFFEE.........................BACK! DAMN! I HAVE JUST REALISED I WILL HAVE TO DEVICE SOME MORE WAVES FOR THE SPRITES BECAUSE THIS AMOUNT OF TEXT IS BOUND TO USE UP ALL THE WAVES I HAVE DEFINED SO FAR! OH WELL NEVER MIND...........  OH THE BELINDA CARLISLE CD IS FINISHED NOW, I'LL JUST CHANGE IT FOR SOME PROPAGANDA!............DONE! "THE MAN WITHOUT SHADOW, PROMISES YOU THE WORLD...." - DR MABUSE -  A FAB SONG! I THINK THAT I WILL LET YOU READ THE CAPED CRUSADERS SCROLLTEXT NOW.......  A BIG HAND PLEASE FOR THE CAPED CRUSADER..........  GREETS THANX TO OBERJE, FOR LETTING ME HAVE THIS SCROLL SPACE. RIGHT WHAT WILL I SAY THEN, WELL I'M LISTENING TO THE WALL BY PINK FLOYD. AND ITS ABOUT 10 TO 8 AND NIGHT ON THE 1ST OF JANUARY 1990, HAPPY NEW YEAR EVERYONE... RIGHT THATS IT BYE............ NO BUT SERIOUSLY THOUGH WHAT AM I DOING, AT THE MOMENT CODING WISE, WELL I'M IN THE MIDDLE OF WRITTING MY NEW DEMO, NOT AS GOOD AS THIS BUT I LIKE IT, ITS CALLED THE S******** DEMO AND HAS LOTS OF GRAFIX AND SOME NICE VERTICAL SCROLLING IT ALSO HAS A FEW SURPRISES IN THE SCROLLTEXT. OTHER THAN THAT ITS JUST A DEMO... WELL BEFORE I FORGET I HAD BETTER SAY HI TO MASTER, MATRIX AND THE LOST BOYZ, WHO HAVE HOPEFULLY FINISHED THEIR NEW YEAR DEMO, WHICH WAS BEING WRITTEN AT THEIR COPY PARTY WHICH LASTED ABOUT 3 OR 4 DAYS. FROM LAST THURSDAY FRIDAY TILL TODAY... I HEARD VARIOUS REPORTS ABOUT IT FROM MATRIX, INSTEAD OF MASTER COZ HE WAS OUT OF HIS SKULL... I WOULD ALSO LIKE TO SAY THAT THE LOSTBOYS NEW DEMO IS GOING TO BE THE BEST WRITTEN THIS NEW YEAR, ITS GOT A FULL SCREEN DEMO, I'M NOT TALKING ABOUT A DEMO LIKE THE CAREBEARS CUDDLY DEMO ONE, THIS ONE SCROLLS THE WHOLE SCREEN ALL THE BORDERS ARE GONE. AND ITS PARALLAX, THE BACKGROUND ISN'T THE SAME CHARACTERS DISPLAYED OVER AND OVER AGAIN. HOLD ON A SEC BACK IN A MO......................................SORRY ABOUT THAT HAD TO GO AND WASH THE DISHES, ITS THE MOST I CAN DO FOR ME FOLKS AT NEW YEAR.... RIGHT HOLD ON WHILE I PUT PINK FLOYD OFF AND PUT THE TV SO I CAN WATCH ROWAN ATKINSON IN MR. BEAN.................MR. BEAN WAS TOTALLY BRILL, I LIKED THE BIT AT THE BEACH BEST.. WITH THE BLIND MAN.... RIGHT WHAT BACK ON WITH PINK FLOYD.....HELLO AGAIN, WHAT WILL I SAY NOW, OH YEAH JUST A QUICK GREET TO THE GUYS ON HACKERNET, BAUDERLINE, MIKE BOURNE, BATMAN, THE JOKER, RUSS PAYNE, ACME AND THE OTHERS, OK. RIGHT LADS I HOPE YOU ENJOY THE DEMO, OK NOW WHAT I KNOW HOW ABOUT ME MENTIONING MY BBS  THE BATCAVE  WHAT A NICE NAME EH, WELL ITS FOR ST, AMIGA AND PC OWNERS OUT WHO ENJOY PROGRAMMING, DRAWING GRAFIX AND WRITTING MUSIC, ALSO FOR ALL THE LATEST SOFTWARE AND DEMOS, THERE IS ALSO A SHOP WHERE YOU CAN BUY ALL THE LATEST S/WARE AND HARDWARE, RIGHT, WHATS THE NUMBER I HEAR YOU CRY, WELL ITS, 03586 89049 AND ITS TIMES ARE THE FOLLOWING, WEEKNIGHTS FROM 10:00 PM TO 8:45 NEXT DAY, EXCEPT ON FRIDAYS WHEN IT RUNS FROM 7:30PM TO MONDAY 8:45AM... SO IF YA GOT A MODEM THEN GIVE US A BELL, IT RUNS AT 2400/1200 ALL SPEEDS...SO PLEASE PHONE... ANYWAY THATS ALL I CAN THINK OF JUST NOW SO I'LL POP OFF AND POP BACK LATER................I'M BACK JUST TO SAY THAT I AM A BIG HEADED SON OF A BITCH, COS I RIPPED MOST OF THE OF THE MUSIC FOR THIS DEMO, IE. SPEEDBALL, MR HELI, PLATOON, WEIRD DREAMS, VERMINATOR, OBLITERATOR, THE EMPIRE STRIKES BACK, XENON II, THE TUNE, CUSTODIAN, STARRAY,.  ALSO SINCE I DID THE FIRST PART OF THE SCROLL TEXT I'VE SEEN MOST OF THE DEMO IT SELF AND WHAT CAN I SAY OBERJE HAS EXCELED HIMSELF, THE EXTRA BIG SCROLLER IS TOTALLY MEGA, AND BIG!!!!! WHAT ELSE, THE MUSIC SELECTION SCREEN IS VERY NICE I LIKE THOSE BOBS (THE FINGER BOBS THAT IS) WHAT ELSE, WELL THERE IS A WHOLE LOT OF OTHER EXCITING THINGS. OH YEAH AND I'VE ALSO SEEN A DEMO TO THE LOST BOYS MINDBOMB DEMO AND WHAT CAN I SAY, BUT THOSE VECTOR BALLS AR AMAZING. COME OBERJE, YOU CAN DO BETTER. (I THINK) NA OF COURSE HE CAN. RIGHT I HAD BETTER SIGN OFF ACTUALLY COS THATS ABOUT 4K I'VE JUST TYPED IN AND I'VE GOT SORE FINGERS. OH WELL I THINK OF ANY MORE I'LL BE BACK..........OH BEFORE I GO HAS ANYONE SEEN 'THE NINJA WARRIORS' YET IT IS PROBABLY THE BEST ARCADE CONVERSION I'VE EVER SEEN IN MY WHOLE LIFE. WELL ABOUT THE SAME QUALITY AS SUPER HANG-ON. OK, I'M OFF...BYE... SE YA IN THE NEXT DEMO WHICH WILL PROBABLY BE MY SPEEDBALL DEMO. DUE FOR RELEASE WITHIN THE NEXT MONTH.. OK AND DON'T FORGET THAT THERE IS A MULTI-TUDE OF DEMOS COMING OUT THIS MONTH (JANUARY). SO THERE WILL BE PLENTY FOR YOU TO READ, LISTEN TOO AND WATCH OVER THE COMING WEEKS..... TOOO DAAAA LOOOOOO..............THE ONE AND ONLY CAPED CRUSADER.....TIME IS 11:40 ON THE NIGHT OF THE 9TH OF JANUARY 1990.......................  YIPPE, THIS IS OBERJE BACK AT THE HELM, WELL TCC HAD QUITE A BIT TO SAY, RATHER MORE THAN I HAD ACTUALLY SUSPECTED, I JUST SAID WRITE SOME SCROLLTEXT....AND HE DID! AMAZING......  AND NOW AS A SPECIAL TREAT I'M GOING TO SHOW YOU THE SCROLLTEXT I WROTE ON NEW YEARS WHEN I WAS DRUNK!................  YES!, HERE IT IS !..................OFFICIAL NEW YEAR SCROLLTEXT , I.E I'M JUST A LITTLE BIT PISSED!, WELL QUITE A BIT ACTUALLY, IN FACT THIS TYPING MALARKY IS PROVING TO BE DIFFICULT AND I HAVE MADE MANY CORRRECTIONS ALREADY! PEACH SCHNAPS THATS WHAT IT IS MATEY, ITS BLOODY BRUTAL! TASTES LIKE FRUIT JUICE, WASTES THE BRAIN PRETTY QUICK!..............WELL THE TIME IS 1.56 ON 1/1/90 AND I'M IN MY BEDROOM WITH BRUNO WAITING FOR SOME OF MY FRIENDS TO APPEAR.......................WILL THEY COME , GOOD QUESTION...........WELL IT IS POSSIBLE, BUT SEVERAL PLANS FOR THE CELEBRATION HAVE FALLEN THROUGH ALREADY, WHERE THE HELL IS MARK THATS WHAT I WANT TO KNOW, HE SAID HE'D BE HERE AT 10PM, HES PRETTY LATE, PROBABLY BOGGED OFF TO ABERDEEN INSTEAD THE COMPLETE POOP! OH OH ITS 2 NOW! GOSH, THAT MEANS THAT THE COUNT AND HIS FRIENDS ARE LATE! LOOKS LIKE I'LL HAVE TO FINISH THE SCHNAPPS MEESELF!...............OH NOT FORGETTING BRUNO!.................... OH OH ITS THE DOOR, ITS MY SISTER AND .............. SHE IS WASTED! , WHOA!  SHE SAYS SHE HAS JUST BEEN PUKING UP AND FALLS ASLEEP ON MY BED, THATS HANDY............. YEP, SHES WASTED, OH OH SHES WOKEN UP AGAIN............AND NOW SHES RUNNING FOR THE BATHROOM.........BRROOUGHAARGH!... YUK! RING RING, RING RING...........THAT WAS THE COUNT ON THE PHONE!, HIS HOUSE 15 MINUTES - PARTY! YEAHH! GORRA GO, ILL FINISH THIS TEXT TOMORROW! 1ST OF JANUARY 1990, THE TIME IS NOW 3.15 ( IN THE AFTERNOON ), I HAVE JUST WOKEN UP, I DIDNT GET TO MY BED UNTIL 6.15 IN THE MORNING........ I FEEL FAIRLY OK, A LITTLE BIT QUEEZY, BUT I THINK I COULD HANDLE SOME BREAKFAST! THE PARTY! WELL WE ALL DANCED ABOUT THE COUNTS BEDROOM TO THE SOUND OF DURAN DURAN RECORDS ( AND SOME PROPAGANDA AND SOME FRONT 242 ! ) AT ABOUT THREE QUARTERS OF HIS STEREOS 80 WATTS! HIS PARENTS CAME INTO THE ROOM AND MADE FOOLS OF THEMSELVES BY SAYING ARENT WE ULTRA TRENDY AND DANCING ABOUT TO ULTRA MODERN ELECTRONIC MUSIC, ESPECIALLY SINCE THEY USUALLY ONLY LISTEN TO CRAP LIKE 'WEE JEANIE MCCOL' !!!! STILL WE GOT RID OF THEM PRETTY QUICK AND BACK TO SOME REAL CELEBRATION! HMMMMM WELL, I WAS DRUNK!.......... WATCH OUT FOR MORE FINGERBOBS ST DEMOS, THERE ARE BOUND TO BE SOME! AND NOW I'M AFRAID WE MUST WRAP THE SCROLLER! BOO HOO , SOB , ETC.... BUT DON'T WORRY THERE IS SOME MORE TEXT IN THE OTHER SCREENS! ~?~?~?~?~??~~~~?~~~~~~~~~~~~~~~~~~~~~~~~?~~~~>?~~~~~~>>~?~?~?~?~?~?~?~?~?~?~?????~~~~~?~?~?~??~~~~~~~~?~~~>~>~~~~~~?~|||||||?~?~~~>~>~~~~~~?|?>~~~~~~~~~~~~~~~~~~~~?~~~~~~~~~~~~~~??~?~?~?~?~?~?~?~?~?~?~?~?~~~~~~~~~~~~~~~?πππππ ~???`|08<`??~~~~~~~~~????~?????????~??>?>?p8<<?~~~<~~~???????????~~~~~~~~~~~~~~~~~??~~~~~~????~~~~??~~~~???~~~~?~~2 K0d@}P`p 0@P`pqrstuvwgWG7' 0@P`pqrstuvwgWG7'gggggggggggggggggggwwffeeeeddcc&&&&&&&&&&&&&&&&&&&&wGU3fU3fU3??????   `` <0  `` `` `` `` @ @?@ ?  ???? ??`` 0? ? ? ?0? ?0?`` 00000000  00  00  00`` 00000000  00  00  00`` 0000?0?000  ?0?0`` 0000? ? 00  ? `` 003000  `` 003000  `` 0030000  0`` 003000  0`` 002100  `` 0003 <?00  ??`` 0000>0 ?00   ?`` 00006000  00  00   `` 00003000  00  00  `` 00003000  ?000   00?010?0? ?000? 00``? ? `` 0000```` 0000`0`0`` 00000?0`` 00000?0`` 0000  0?@@@? 0??xGG?x p 11D0!! y66< ww<epE @ ww"x{{Upaa7E 8 vv<x MpE  ׯׯ(PxD0,, y6600x &   xGGx??xGx}ppۏ$pwwy G!"23CDTUefvww'_譲<&?OP9_@$Pw?p}@p ?cw h_@4??`Z Xv} `?AE wH4"gȀ0 ?Ww/~)2 @M_ ~(gpx?9Pހg!x???~#u{ ~ 01fMXr 0~>@8Dpd;sD2u 8Cnx@?8 rᤴ4QP+8{x:/D>L`A+@vW8>C~p_x? _?'nVz`x)E?6 ߓ `H6h`x7;Hi`# `7n;%bh|psp`GD ;E0 w~ w@退@8>?H˓%'A>B\< ?v"MA@>]0iB$gn?O*D?eT% 03-qB  n ?dpl? b?F <wP`BD? ?up(;2P w)@L ?|P ??B( _@{B  0B@ _z H X!8 hSgGO``F? _a}SM `{ |A@??@ 8 8@ np} `  o;@?|?@8?`? oylW Ώۢ !@ /ѧ `'[ @ ?ާ@ o@X<P@@ w=` ? @ ռHf_ȃ $@l px~(s0  w% $a{ xCn~Dt! #~",CopO >L_ʹ?xuW5Ls |` @   <x޿hK̀y-ϡ?!< ?*| N|@ ??i=PmxXv"?=?2>G3:YBh&eDb?ǂ}??pE$oup@$f"@$BY7]:< ~B2> EG0?Ǿ`@5W Ǿ# a?8A ?^X% #A56p<HwHI|8@?Bd$0.Uh.` < dgw?@HE|?ώmQ ͸p~OWh|fа8 Ph@9ce öhy"`|PF `9΀Aͣh#AF >9u$AC %Xt$xBK 4;o1'+I|y ` 0'Cx  9?X$J, 8?<&?, ƀ`~>,#RaX  < "?#  Ø#`nK5\y ozw\ ᇀ~x08DJ+0  # Gycxr$1@#|&Avp 0@8y|&AvϿǏpp1@ s` 0@ Ͽo / Y)WXbY8bO?'< `'`)8mKC'`88}KG? M0 x){b|y7M0 x8y7G߇z>`8A) t`8A8X|` pGD| ?84a)}5_{84a81( {'˞ <0"z>v>) )y1[|v>8P#0\ `fm7SG"Ѽ?o"G/*4 ?7ԋ)0 0$%j?ԋ8@!0%j+t?ڕ#r@ ۞M#@ :$;<=T`?`p>w??? ?@@Gw_c}@_@/6+@b 7b@??@1lPZr ?@PzrwP?`7 j_? 7z@0H!߯ x,/@'?7&~?O 3~?@B Y ?gE@&?  i7z5bou? #u@ @/L@#  @-.| -$OV!   kt 6;. UJ->.vGn?@7v@vtCo~˜r!?'0c^HZ< ^ % k 1>g~~g@Cлrc?>gk ?_px~r @ a O?o}{8巃HK N 1@?xX~2 _ .@>'' 푠u}xRx f 9yqjOa>BF€_-CRX=09 x㣕>r? IP @w@ | 0}~eq! ?4~@ ?o 8{V-1W ; }? 3 ^߀  A'ȼ6 ( @ <ݿ1  ?54 jB9G1  G?  /o,~T/ r8< E2i | 2#yLeh3+|9MN0$sH/ Ёw>bb<ă7ȹ0q$]9+|cFρB4?t0O@)Ч Nh=$ /G@p7?A=E% qfq@} p0@@!1C}2`DH!55.2c @30~Qڇ'D pA06o3hp?I?xq_:hGΏvpp!^ 10p{}߇~>l.#/*\~__ɞlwc]6br^$! iC?~|1~cs0>>#?}g<>BϿ co՞>! w=-?n0' gd X3o?`yWo8gʽxU |o<?7V./ tV?(6jݿ@?_g fٔ 0j@_?_ -'ahso_{&~ 9ĺ2v?,O?_| e^dX_P+@_??oxOic:?BD ܜo!?OzaOpPshQl! b C~?ǁ_WZC?~R >w|R1h[w#w π51@x_.05A>>9Q/Zø84 ʀb҇w?}6<ؽ~P<$& ` 84?ZHWG6oy8 hOvpt&"94C@tb =0^_{ ?`|??zQ!FP4 ~|?Be} A/~ L<&g _;_9x`^^6{:4 suCF|?`cX+l`St10 1d BӶ0# ϛr7p0C3BS02J ͋790pFA`|FcDb+.¹{^<@~7TMp%'* ǟSg̀8` Al r ,ij5sE= ߟ|wNBp$#GI`9|Wܸ  }g)H$ P A ш;v߾A?|'TrI .C3dž }g2 b0S p#Ϭ @A?gѓ$4<g I  / g  N}7gD@(0 ^0C  >4ȏŁ@&P,1 @@~`?vA`3 Q 17@ v#K> t`  [@'?[ : +ŏ~-(203?}-1  5?`%h }EI2 D@ u *pS-N  Ղ~ cCߐLD    _{,MH`0ndx E 3+X`o[@x?Hg? J+o4?@ɚX7!@S ?=gW( 1]B  > =`|AN  _D O |@ Bx01@ @80? }`<T  sČ? 0 ?$ p0phœ?W>؞HHp?( ϠH`pa0@g(v )F`,N`.=N`>?`??O5JF!Ωx N\@PL @| w`?^fMa[:_ c#X < cxÀp| 4XpXSQ']K0 Py|0 pCp @7`S f~IDqqp M^`28 }>y 03@ 0s?x?S.1 )H,U&-?=08 @t@?08@?? D@A<3 a.l`@9h@88:F/` '>} OП6K-8E=&‚h`98<F?8 <yS|Yx8)P_9?@ 8 ??08s ?LXP8PD'ĸW=cF:&@?0F@a ;̫LDf~?J|C^}ADb?_em)ҀQd`@ ,`}@ 0}N@ a  ]xc ]h00~J2 @<', &δ?7@ `$@//NO 4Mـ' r]0?_*SmL?X P/P!SX x? ?`_ ?W8?wT? # ;\àC?8 |@@p)Sx\PHYp8?\\0mmnnn nnnnnn       n5n=nEnM     nrnnnnoo@nnoookpoooopoooዉዉ ዉ  ዉ ዉዉዉዉ402+402(*+$-+*+-/+*(*+$#$&-*!&!&*!&*-&*-2467097679;764670/0296&*-!"23CDTUefvww`DK94>%>e CDLC cO@@لA Js?~!< s? &G@W }( } "߂? -Gt5/t  ]a߀0(  a _9M3O {?O3{>9: #? }DLy ~F6 ' ~2 9q'?w ^pF@HxY)1g 'E _/>?t Ψq)[ X/ _uv&`!I. <; @ @]0" O~>\[@X`$@L0F _?R0 , 5?bA O;@? ?=y `?? DPx({D (?M{; `DR@?~I{ `+?B>y [?= @x@D@?ZMg/$>y?? ~ bOJ~2 „>L@~w={@AxN|@ A p>q>o@ sa_:qW$ ~X(}uq`$c2 ~}| pM(9@ҀƃBGb ?}8X8pٓT)8Nw >}0@0y',  >}$ϑ8 |` KX G7?6Q8|^ Z_7<8b|$ɷ:|``2& 9 Gx#.7Fn'8x`48"Q  P6p` T:@J VؼAH BL? i +B.? `p C # @  UB^  Hi"㐀    hE"Y@ l  6>80g=$ t > ? ?I@!|n $BPp`$$Qs@~z>L@2@ 2   i@6o4Ar`UɀL q   痲 -t=!xdA^]F  8  }b 5!!_?0A|@a78P׫_T׿x T0%@0u8~[c~ҥϳWz$Y44H0q|8T0  xHNI+0   0 pO_ H 0HfH H@G7 Fc 8Lh m'}&Ѐ@ Ā2@ 2@SGڬ7D `c$2"8 ` 0 `zo@#0 LP P fb8@-T 4 8- 48-2 "& @5@A ! 4>  Yp僀87+R0 7#0+40+4ZĀ  8w/t)p/w p/u8\( M]F 4 =7?2@8U@;@ cB߾v$``Bw?`B?  <gtW@ n N%6&Ę@t@BpL0w0?=1@X z@@Q"~ 2@`PQ3Gà^Q?8!_\ <_h4<@<2@Hh@3$O@8bpހ< y '2B 2h? ?? @<!x\0CYf& Dq E_gq38@_g~@8q 4XexrfwBp@;p@@m0< pUpk`qmFeePpP {qo}plo}@OW< ;8sV0 p<;? p< ?D (lDWhLB>pp@Ol?pp O?^,`]鱬v] ^ _p~{_ pApJx@Ȟ EpPNpp~O?`ge@]]b ` ~3Pp>ρp>`ρ0~\Ep ˁ |pˁ|p`ˁ@4~@M@@pӳ>@0۳@p۳O@$L B@\qcu_A@xX@u@xqu`hl !@W.q3x` @pP3`x` @p@q3߿.00@Gb@'E0@`{0@`@bϿ}?pXF0@Wy 0@p@ry0@p@ryϿ? 0pWx?쀛pp@q`pp@qx`z@npp@xpp@x~ |(@2m;8`@u8`@u/ >>-cq?--=c==c}(2 c7ƴ7<`?<`a ?Ƿy:w}݄?=݄?@x"{"֒ 72wЄ? ????@xi$Ԁ >ִf?_ֿ??ֿ()@) ĿitJ Ƹv?ƿ@@9@$?0 2"  /8?<@  0  o?@( @[  @3x@ @G(x5 `@@`5t BCh^ 8u_p_ @ +cۿ|0@M'ʀ8p@nYO|a0@Bq9@q@@ ? $-p%?a? P a@,( A(@`@P~00@ {qE@ g 8% ?pX?~0@ @0N0U`_R߶  7-2({\(0_q0@pz6$`7p0 ` !p`<```@8? @;@<?G;<8k/;-< \@< ?^~?{߄?a߀?!"23CDTUefvww߿[Ͼr? &~[?}|}~}|>}$<N}b|߿?}$??w}}7=W?= 9߼?) < {G>4?W~ y  ?^? 9OR $ ? oyy_L(΍a?FO?OP4b?)?=; "#??ߏ@?20c?_?~< 3?O?"<~2?/z ?(3C?@~?}: ~ D ЙP0wo  ~3nȀD N>%[RD_ @K 1T _?_R߰J_M~ @b`AGsY G@w_(D<z\柏~@RWNt$ـaM㟏D@bE D$C@߼ ,? C/@ f_ K`ɿm|sx6@/@?.02V ^ks`O ?| LRNM @߿q @ ? ?y@)ߚ1Ə"?` `5?!  W*ݸ_8BO? @ ?!MA :ļCB6?A`@ <?D)ɽw?Cy',>@@?wĿ :H}A~+dmh@ ?w ë:@ӵ7YIE>C >$<@` xŶ `sNXDAoƌ" 8h0 xa(fw-CA,a*xwr8@$#,#4 hz@iǿ7,:cn|<a Ckzp3:~_|?ad]/M~DtxC0 |~_so|y,PǠ/DvAD8\Aa<;(l_GuXHWAh@ZH$ doU3휼d)c}~wACc@띰9$o@>+,hʹByr[4qӇd2c~ y>w&`?G_\0×{ss@p|hp0s@9^o7jbhxNoS03c* @W~\XO[C~50gw6-XWn=q|l& B /G~5Fq^dpH@ A{? xϿ<D t;SkfdLBOY>xp  ^C  C3?a 1m8`bHs8H0>讇 x_  oV>H~ y  | #N):$p0? Ȕ= ? 1?0ܘ5iN~0H<; c7?@ l- y wMh1 { c2?|֛3EjA0>P|qaOJC0#~d j>! !Op??!TA_"e x>ee O@{G? ?WD+m|^@|VoM@ Ps/LjE LrZ(4~o|izD>:@肸2 |= @C~x<8󨯣 u$ CcO>@ ےq_U5n^#ydlaa|A:xua|0$ |0$ _0DbyY ཆNi2qբ'ήiJٛ3`G@ٛ &d??+׺B߭L߾s@!߿   @Mxݰ3:!B6q.# /0@) %r?97p:@C ?< ~ UCfDG #60x@`  8  ?? NLD|P7~p8 P y1Et@ᒙrȺ>n= {r bo?8L@1x~l0? &?JG7dPpoG(ZA8H|?(z /8ׅW?rniyb|H>y ``C ͔4@yy4^w@q|QD C}~w 8mCaD Q|f5j~g_tCQ@Ǵc8ykp2ǰ xar OC `8oG6c:+>F(cX>(89gA @ffB-!⪄sy~g  7YeLiÆHh%ZDO#oy3;#  bf@ L.Ƿ~_ ~s83  ??&ȷhr&$gd~ڊNO=w?cۀ3@  nwlL1$ge= d} pe01@dc,|_ !|LCu?}71/8@@M#q_s5;6] a2 Ó>@*oHC:>_@>=" T8+1:? xc$rT^OV#~Sw灁h@ x~~?*m‰À Q{}ğ)|篟~"Vj??&rz`1*$ UrRw8?R y'.}Q?Q([`_k$K/z?Aod{} ~??& GF\ޔoJ /N;Ao?}?' ?~??*"$KrxXFNx!|q?ۀ}@?'~?bK zNG\7BWoxW~Dz_?wyǀH0~??(eHu'cYfQ[^?~ ykw?n8|~??OI:x񤐆(/{D6' {0z 33V??Gř:b8a|;x?`" ytLF1T>??>#009> ` n 6?ߒ}#w튷ȼ>@0A~P~??#l!wd hXD>kfbCR> >J?1(Iz wD~>irj$ϐcv=$>>!P ?~?0 z(xY6AC@ /7#Q? '><?~8] vhҲ'@@<3G:?> D ?~ ? c!׆R/4|b0f0# D~~hgaUft^@xx s}}Gx ?G x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  T*COSMIC PIRATE #1 COSMIC PIRATE #2 COSMIC PIRATE #3 COSMIC PIRATE #4 RENEGADE MR HELI #1 MR HELI #2 MR HELI #3 MR HELI #4 MR HELI #5 THUNDERCATS WARHAWK XENON #1 XENON #2 XENON #3 RAMPAGE #1 RAMPAGE #2 LEATHERNECK #1 LEATHERNECK #2 OUTRUN #1 OUTRUN #2 GOLDRUNNER II #1 GOLDRUNNER II #2 ENDURO RACER #1 ENDURO RACER #2 ENDURO RACER #3 RETURN 2 GENESIS SPEEDBALL #1 SPEEDBALL #2 SPEEDBALL #3 SPEEDBALL #4 SPEEDBALL #5 SPEEDBALL #6 SPEEDBALL #7 WEIRD DREAMS #1 WEIRD DREAMS #2 WEIRD DREAMS #3 WEIRD DREAMS #4 VERMINATOR #1 VERMINATOR #2 VERMINATOR #3 VERMINATOR #4 VERMINATOR #5 VERMINATOR #6 STAR RAY #1 STAR RAY #2 STAR RAY #3 STAR RAY #4 CUSTODIAN #1 CUSTODIAN #2 CUSTODIAN #3 CUSTODIAN #4 CUSTODIAN #5 CUSTODIAN #6 OBLITERATOR #1 OBLITERATOR #2 OBLITERATOR #3 OBLITERATOR #4 PLATOON #1 PLATOON #2 PLATOON #3 PLATOON #4 PLATOON #5 PLATOON #6 PLATOON #7 EMPIRE #1 EMPIRE #2 EMPIRE #3 EMPIRE #4 EMPIRE #5 EMPIRE #6 EMPIRE #7 EMPIRE #8 MILLENIUM 2.2 XENON II -* THE END *- KIGFDCA?><;9865320/-,*)(&%$"!  !"#$&'(*+,./124578:;=?@BCEFHJKMOPRSUVXZ[]^`acdfgijkmnoqrstvwxyz{|}~~}|{zywvutsqpomlkihfecb`_]\ZYWVTRQONLKwwww~~~?~?~w~<wg<~~|x|<<|xww88xww><<>w<w>>~~w>>~p~w><888>w>w>>w?><<8<<px<w>IIAc>>www~w~w~>wppw>|~ww~|p~~pp~~ppp?pwws?wwwwww>>>>w>w~||~wppppppwww>wwww>~w~ppp>ww?~w~ww>p~?>wwwwww?wwwww>ww>>wwwww> COMPILE ! THANX GO TO ROZEL FOR THAT INTERESTING TIP! AAAAAAAAAAARRRRRRRRRRRRRGGGGG! JUST LIKE ALL OTHER DEMO SCREENS I HAVE CODED THIS ONE IS DEDICATED TO PATSY KENSIT. COR BLIMEY.... DOESN'T SHE LOOK NICE IN LETHAL WEAPON 2 ? ............ SHE CERTAINLY DOES!!!! WELL Y'KNOW SINCE I STARTED WRITING DEMOS I'VE HAD TO WRITE A LOT OF SCROLLTEXT! AT FIRST I DIDN'T KNOW WHAT ON EARTH TO WRITE! NOW HOWEVER , I REALISE YOU CAN WAFFLE WHATEVER YOU LIKE!!!!!! FEW PEOPLE EVER READ PAST THE FIRST 5-6 KILOBYTES OF TEXT. TIPS FOR POTENTIAL SCROLLTEXT WRITERS 1. GET DRUNK ( THIS IS PARTICULARLY EFFECTIVE AT LETTING YOUR LITERARY TALENT LOOSE! ) 2. GET SOMEONE ELSE TO WRITE IT! ( ANOTHER EXCELLENT SOLUTION , JUST SIT AT YOUR COMPUTER AND WAIT FOR YOUR DRUNK FRIENDS TO ARRIVE AND THEN LET THEM TYPE THE TEXT!!! ) 3. SPEAK BULL ( I.E AT BASIC CHEAT MODE!!!! ) 4. TRY NOT TO GET BORED HALF WAY THROUGH A SENTE.......ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ OH OOPS SORRY! 5. DON'T FOLLOW ANYONES TIPS!! SADLY I FAILED MISERABLY TO GET OTHER PEOPLE TO WRITE SCROLLTEXT IN THIS DEMO, THE CAPED CRUSADER DEMANDED ( YES, DEMANDED! ) SCROLLTEXT SPACE IN THIS DEMO, BUT NOBODY ELSE GIVES TWO JOTS OF A TURTLES WILLY! WHO ARE THE FINGERBOBS ? WELL THE FINGERBOBS ARE OBERJE ( ME! ) , I DO JUST ABOUT ALL THE ST CODING/GRAPHIX/SOUND ETC THE CREEPER , HE IS QUITE QUITE MAD, AND WRITES MOST OF THE AMIGA CODE, BUT DOES GRAPHICS AND SOUND TOO. THE COUNT , DOES A BIT OF EVERYTHING. ZEN , DOES SOME GRAPHIX AND SOUND ON AMIGA. SHADES , DOES AMIGA MUSIC AND GRAPHICS AND WILL MOVE ONTO CODING WHEN HE CAN BE BOTHERED TO SIT DOWN AND LEARN 68000! IF YOU'VE GOT A REALLY STRONG STOMACH YOU CAN ACTUALLY SEE WHAT WE LOOK LIKE IN THE 'WHO ARE THESE PEOPLE?' SCREEN, EXCEPT FOR SHADES, 'COS WE COULDN'T FIND HIM WHILE WE HAD THE VIDEO CAMERA! SO WE DECIDED TO DIGITISE SOMETHING ON HIS BEHALF.....FIRST WE DID SOME TENNENTS LAGER CANS, BUT THE RESEMBLENCE WAS MINIMAL, NEXT WE TRIED A SMIRNOFF BOTTLE, THAT LOOKED MORE LIKE HIM!, THEN THE CREEPERS ( FAMOUS ) OVERFLOWING ASHTRAY BUT ALAS IT TOO WAS NOT A GOOD LIKENESS, FINALLY WE DIGITISED A LITTLE BUST THINGY, IT STILL WASN'T A GOOD MATCH , BUT AT LEAST THEY BOTH LOOK STUPID.................OOPS! I DIDN'T SAY THAT! I DON'T SLAG OFF MEMBERS OF MY OWN GROUP! HMMMMM OH MY LOVE, ITS YOU THAT I DREAM OF, OH MY LOVE, SINCE THAT DAY, SOMEWHERE IN MY HEART I'M ALWAYS, DANCING WITH YOU IN THE SUMMER RAIN...... OH SORRY, CAN'T HELP SINGING ALONG WITH BELINDA CARLISLE! IT IS 9.00PM EXACTLY ON THE NIGHT BEFORE THIS DEMOS RELEASE DATE! JUST SOME TWEAKING TO DO, AND MASSES OF SCROLLTEXT I THINK THERE IS ENOUGH TEXT FOR THIS SCREEN, I JUST HAVE TO DO SOME MORE TEXT FOR THE MAIN SCREEN BOUNCY SCROLLER HERE IS OUR CONTACT ADDRESS AGAIN OBERJE, 6 CARRON TERRACE, STONEHAVEN, AB3 2HX, WRITE TO SWAP DEMOS, CHAT , WHATEVER! OH WELL END OF SCROLLER, LETS JUST WATCH SOME DOTS BEFORE WE LOOP ...........................................................................   !"#$%&'()*+,-./0123456789;=?ADIO"3DUfwwfUD3"U"UD"V3C"6w?? DG?D @C?@ ,$@$`b`   @ '8 ppq88ppp!8p$p2r88p0pq 'w!      'DDDD! DDDP 'wowwwww ' (D@,@@  @ @@' H 0`,`b $00`a  0` `` 00``  ,D  @  ,0 ? @@ @  , `   '   @ `,    ???@ @  `,    ???@    '`,   ? ???@  ?  @`, H  ? ???@  @ @`,  (    ???@   @`,@"@ @   ?@ @ $$@`,B @  ?@  DD@`,   ? @   @@ ,@@ @    @@ ,@  @     @@ ,@ @@   @?D?D! ,@  @@   @$@$@,B@!   @ @',"@ @ @@    ,@ @? @ @   @,?? '8 pq#q88q# p'8p,rrD88r@p'=w=w_p'    @@ 'D$DDD$E@"@'DZ$DDQP "'wow;ww;?w  ' D  D@ @,@@ @? ?@ @@ @" 0 "  0`bb00b `? ???0```00` ` @ @A   @$" ??$"    @ @A  @?? @A  @   ???                 D @D @$  $       ` 0 ` 0 ` 0 ` 0 ? ? ? ?` 0` 0` p0` p0 9? 9? ? ? ? ? ` 06 ` 067~7 ` 6 ` q6 ;9   T*  0 008$$$Ā?~>>>?????~>?~~??~~x<~~~~?~~~<>>?>>?~>~~>~??>>?>>ppp8p>|<<<<???~>>>>>>|<|~>~??~>>>~?~~>?x<~~~~~~~~x<?????p?x|x||||~~~~~~~~~~~~?~>>>~?~>>~?~>>>>~??>~???~?>>??p>>>>>>>>>~?>>>>>>>>>~?p>>>>>>~x<x<~??~x<x<~??x THE MUSIC SCREEN MUSIC HACKS BY OBERJE CAPED CRUSADER READ MAIN SCROLLING MESSAGE FOR KEYS PRESS ANY KEY CORKSCREW SCROLLER BY OBERJE INSPIRED BY SCROLLER ON AMIGA IN THE DEMO BY VORTEX 42 PRESS ANY KEY WHO ARE THESE PEOPLE THEY ARE FINGERBOBS LOOKING SEXY, THEY ALWAYS DO! USE CURSOR KEYS SPACE TO EXIT PRESS ANY KEY EXTRA BIG SCROLLER BY OBERJE PRESS ANY KEY !"23CDTUefvww'_譲<&?OP9_@$Pw?p}@p ?cw h_@4??`Z Xv} `?AE wH4"gȀ0 ?Ww/~)2 @M_ ~(gpx?9Pހg!x???~#u{ ~ 01fMXr 0~>@8Dpd;sD2u 8Cnx@?8 rᤴ4QP+8{x:/D>L`A+@vW8>C~p_x? _?'nVz`x)E?6 ߓ `H6h`x7;Hi`# `7n;%bh|psp`GD ;E0 w~ w@退@8>?H˓%'A>B\< ?v"MA@>]0iB$gn?O*D?eT% 03-qB  n ?dpl? b?F <wP`BD? ?up(;2P w)@L ?|P ??B( _@{B  0B@ _z H X!8 hWG$$$$sn : 79pZ0ff}C>_ ac ns qC3t/@t0`<  8>6A@\ c!0]c``N>I A0 8.0n0 0@_ x`' F0 ׀ 8@` 0ۀ|<`  0/00 0}'~8 0v=?>Ù 0zΗ>  8p.Wnj1` @=:SNCp ^۷a^P!a^?@.`0 1X\?@b@0^_G v ? y0_]K? 8?o ? p N@>?3 q! @0` 9|||xx\`c~so8@xx  T*4(a4),d3 ;X2 offset move.b 6(a4),d4 ;Y2 offset add.w #256,d3 ;Make X2 and Y2 add.w #256,d4 ;Point to segF$"wGDDDD8||y!DQ@AEQ!Dxxy^!ÀDT@@AP!À8S|}A=@ 0`   Bg7ȟ@ @ 8 _ @c 8 `?_@3 0 ?_ @ 0@ @ @? @? ~ ? B// 30 0@B//70 0@?B/?<  0B_@< B< ` B/ < >00 B? < x>0 B_?/w? 7 0 Boӿ/WC 30 BWп/ A@_ `0 0x ` BKп/? A_ `0 08 `` BEп/ A_ `0 0  ` BBп/_ A@_ `0 0 ` ` BBп// A_ `0 0 0 @`` >~B߿/ `??  0@ @B?/? `  0@?B/`  0@B?/_`` 00B?/_`` 00 B__/ ` 0 ` Bg/ȟ@ ` 08@@ 0` ? ??|y!9@xx}|y!9@xx}@D@EQ!D@DDEQA@D@EQ!D@DDEQAxD@y^!GxDyyxD@y^!GxDyy@D@AP!D@DD@EA@F@D@AP!D@DD@EA@F|CA=8D@xx}7|CA=8D@xx}7  T* move.l screen_2,screen_1 move.l d0,screen_2 ; move.l other,d0 ;Swap sprite pointers move.l old_sprites,other move.l d0,old_sprites ; rts ; *********************** * * * Main Screen Bouncy * * Scroller Routines * * * *********************** check_char cmpi.b #0,slice ;New char? bne chk_xit ;Nope-> addq.l #1,here ;Get next char chk_xit rts ;Go restart move.l #message,here ;Start of message . m.. mLFB_BONGSAMLOAD S L7:NYD PI1[B}NYD2 PI1{B}master 柜Z׎{җoۡl|D#2KVOP/+,F/ov{Gnc|l}h}qo__ionbX?agA_iÇ{owېŧՅYS?L/PJ?P6Jϫߢۿίgl{hCmPEf?IoK(R,'W/DE#W*Q#>cy5UwYU|sŜ뷴ߟ߯ۧեƧ߮ծ|pV~nyoMjCSbB!OS )((02_=AWHk[5{wkS`KgZoKlwksψkjKrhww}Aou{hUC?ldwMW'J)Nc7pc_{jrYKLO#b S`QPk=3U a>S<[Xpkhgɩ߱ӫwI|Ǔ͕_ws97k}K`zxGn[o"4= .8s%i_xʓߟpo_x]L-~TE]uk3egyrofO`AT^PGRgMlr)[ktgϚҘWz~wpoCxgKvn}rڧƗ̛țfg|E+n~ _4k-_?H\D_RRljg[to_dOQU\kgmnYsbdmy`@cp_=A%c]W`<{SmڟʟԺĻқӂwwfsmhQyn}{qqstp~gkcpQk[wopu~ijaZD3CG*=>OE!bO%w\\w|owvjrszgkc|wؾۄvSwO_TS/mKOMAcgSPrskz|@~c3H.]D>c7^ELFbCRI)[;EwkmKAj~TSsOtXjvvϼ̫߾۾׵ҷz~}Kכג`JGosdetEoxR_)QWH [7FO3[KNjqXuOLDWnuo\}}{{{zk[h</Y=rc=Ǵ߷罻Ŷ¿ocӲٮkweECOQ-155(O#M45K?T>AwC]semuw6Qw^,0L`WXetƌCwVdOmCQ_?P+o[d@O_Ǖɽɪ缻Ǜn{mo`[HR`C,?!9+SX84E%F7O}3Ekwf͠ömqc^b_bOCB,OCMO=Lb{gƧڨppOqpCn@HOnkihngiOw\e?oC/f8RERZSBBsezqqmowzmjjtolâ~ÀƘZ%swWl5c[\rVogsqg|iTY@oX_|{lps[jmqz?d[OcgfVw_pzm_kgo?p[ќ׷׻ק޸yp{^K`K2Q`-+[8Ug^c^sIkCf[mR(Hg_}Cs7j[smrsKwzrcPpWexokzqgt{wGbv~uGocp{}um}qYN]~`]otkimskw}[C^SLeokcG_+xgӋmk9{~[tbPobGkgOtjlAoZqǖpzftpj|\9ws^?uq[JNTxT?_YI~GWlswYy_johAU3F?itrsG˟OgY~v}pTskG|AVspnKpP2oSutQy;kotwutwDgmlooycpDc7tixblM_fq_Tws{`?9W[^OsWw£Ñwi|_sgm`wTCabhe_qwUxoja]aJJAHG7cJC][zpcoX{#{x`]zk}ZRxIcasy﷟|o}xo¥xcasfWsQk`ccjndDaIfToWj_or^Q{~ku`@`wlV\9ol6wEUc_te=z}atcvcq~v~wyǛ}ҸˣxuuCqkHGc|OSTo`VuWm@ySgW)_KdWT}|=IeG}Z|G~ZEvuspMxlM~uw]m{ulyhmoO|hxjnrqgMlsyzoz1GweoO]_d_fqm"o_`CiSKcqWzIxbwhVo“eqXy}{vdoc4WkGW;M]CQJGZJ?IxY=Cv;jRHpkkrFSi{}u~dYyWqrwlP|{rtuxwo}qszxi\wldmwpTzapffQXC\oLgdhgGx1~_`Ð3e}Wj]%evonrpx_nnWvslxWN5UjMW;WPzhCfwz[WOeXOY`XF`,}`kTmo|gn^mghun~u˺²đ~woesiplNWleL%7STCYAHeSGtqoo}ez]saYtjhYgq`oopwkzrvy|Nyuzvo{vqvngzfoN_eYZac`R_j{pvhsr{w|sviy^gukrjn[tm~{omy}rwuug~qw~mwxu{}zdLhp]3a_[J5WUdgi]ug\{~thq~csmop[sZyvkxokqlqw}nvqsygs}nRscpejeqWX]fhgtr}m{}xt{lfkSjeda^v?ocWs[cdxjwi]srpkZytkUys~gwvws~o~vwlv|mrmoxl]ixUcV]_vl_hwmdctuodo|vylyttllbuXennanhomqkq|}{w{}vyxysouz~pfcgoaOjSbNA^ZXX[WkZ[Ytuimrwrdkhouwsu|anugyxiq~u{|}usxq~u~krr}{v~{m~ptvd[VegU[\Vhhhi|vyts{yimwxd|eywwx{~~~~||{m{ck`plfKTcmdVkksTWiqqQa_djL_skXihrn~zya~rv~|s{pxtqrhy~m~nnw}uyyjix}uls]qtqbvymgmfnY[etdpX_`Y^[i_kkb\vo{xxqmirw{u|mluyknsoogi}sfqp~tq^pp{_\qmfhcjbmonq}sy{gz|sy`{~}tjfux}p|~}xzk~sst}}y{{qrequwxksylxp]s_ibekmZjmamhrndhqppbmxz~ssvxsu~{}~{yr}xqurudmyqwi_lwi\oq}cbvnypwuxuwvuyly}{v{}|xz{xrwpozyuke~}q}t~xxrs}njzg{tjXvyqseubok|ftorwumnqypmzkdnmt`qxnmquizu~{{zrtsq|fywyxz{xwwsu}y~}qvvmhjyl_ecnurqqtqw~|{}iq{xq{}sftvpv~zktxvvu|~x~~~tzw}oty|{{{zx}|zq}y~~{{~wpz}mov~yutq}{exuwspwor}|gmppxfspfqotsowu|o|{w}xt{wl}~{oz{z~x}xqu{rz{mloukfdoxoiprfqqrrt^sq~~t|}}xn{t}{x~xyzi~~syxz~}}~x|swl{{s|vhu{xovtirwuwopsah_+03wytpgh{nuuoyyɯW{r_sG^c`^aq]{}}yt{x}u`Da\qk4_|";m9[MWwzƢƭuqqwYQ;J;=:.1,#=2*-1<:EPCbZnmx˹ִ׵IhkhfnYWVE%aN%>%'3E?,B2P8>I>6xUOz-Eny԰ѩ\s< EbM/B&17i*9B@W=WIs]FFxkzs{ͼԫ߫ȋ׭˱}xju|qrcrng]OUAGgD3SO<0e9GRV;mAgSifdsovbWUUXj|veەukmOgsuubg[\`srzPbs]Svvxl[rRXipf}S~yzhjVnq|n:K]s\fbEPvB/`grgNlml]oipiq~P]}\j[i{Co_YNEfhg}ןͽˤϼOuǣi[qHin+szny^w~j|{|eĨw~cxgkY\tzlk[^syvW}^Lmrp`^gpMZglghpksyTumkycQbivuwnN~~h}`{cap[j~i#zeh~nndGuFLOvg_hk{uzz_[hwfijtv{}hy}|yvpro]Ye|tov}siwkyy:soi~kLOQxYUM~v@Y~mt{tVwN\pp}}bjhYMgc]jmpzaqzv_yrmqWKwe]pwsvesdhY]w7ga;ZTfMVL^gkoyqgltiY\_`kY_eYf{hMjIo[c3gbjI_K>OW_߷Psu?{;dQE^_¸X`-7 /ar̨֐{7ZcGt8FCTYoTPaI,' !A8;+Ej8W_Wߝ۾zTua*st¸ўctoMIE&E3a#_'VtocuS_wg]M=^~ak,aˇȲ߈SpQR90J#F'Lkhױmyyw`Tuc:agodWGX/GT80_jKcvЪ߷矩ߝwk7dyZpOshgo7aay/qgbOo\7$bsopgW_XEd+MD=gP`ߍG$$e7t`YGbWk_\gy\y7G?MM*G>E*EIZqgLjƽ߶g{qq?jd["LIPUSunіx{a5L/s'3;jil[=[xOQiϳiwǫdz׃Oo{:{MTsA+E;XMBNh]|ÚͳɥoM_mM:N>N=DG@nIrGn_KS|co3}_?mqGrto\xb״Ġxz[ds!KI4CJ$/@BX_0g{ȋγ_m{Hk~Rc3V}~ǥ̟ﬠ`S2354F#${[+yɡ̷|ّ_`F~pSOZOG6O14g@C3Qsigziqgpw}KlYkOg[q]kWYeDZðx|rRy`gIh)ZCRW@{Z,Ot{ǹǿ׻ݷ}iu|rGw`mpXM[T/QUG'l_9nNZ'H7B#MA[oIgwۃt??}itk㏧׉=oYoDg;%0WIwjoٴǵʫڂOwuegTHouvuqr?dI =A5IoKP7aK`Ia!Rxۣwӊp_qw_`;u|ϰGW`sNC/H1'kE^P[ۑѲĠǨ|wsxdJcg:I<:`C/g`(^k^Ovlèpӷ|׊o_Vch]N5w/\-B7)0 ,/%Q{[㓴նsRh7CoRjoUyrtw[Xw/L5k#OKSD5WH{+kJ]g{ͳkߗՋNw{زw{uS.[`Dh?E(s:w`@_w7io[KS?QgOp+tjgċÜ]ߥu{W[lq/ĪmWױ?iPhcT?j{7VXQP]K`s7y/qa_zO7s;gdRnl׷R椆1PlM,KOAWK?DFj7c?k`dWB{_?OkוwΨ祢χڤeCŗSg|dPc7Oe|Wlmp]LWcM_+v}hkdk]w]sZ\WcPzqdwmgPc>Z[??ǣﴱˬwӁYXr`h_`gnPd/pg>AJk]mBGo\yMu{ǫm;ooo8Di?wjaVkXShMPh`PegvOt7kcuS_L{wqcsdsحߦKfG,He?@Hp_UnpgUkÜs뜤kKyqMraA;./_JSSKm}qu_ykhpgYzuONӘmqŽ]wmzՓ[·lEm}Dv`Ktc{@SrXj¡Soo]/A5M2WOZqq18yREy)g;S:5x=OcMO_zPE/{f_wϛWKZt%Zls[jK\]uCje[snuv~|s\gocthYw~\ouǟmxCw͂glrd?w-M[j(tgYtu`S,CuzDGxSmc=}Qq^Ye}pttί墫ռ|rIrLcQ{QOIP=Sqh7=EpeKDh..Gs[cojmrǙhwҹͼucvySw^Muj^t^9ZIj_wMvT5}mrchKc}c}k?mKUqrwz]{vg]}wj~{x|gwn|oqut{Wufnn_pyuoc=e;\tWuilSzpAkPW%t8F6D,I%'%?%S0;ijos“ʟ{xyyzjtObJGeZiMKq'RaNqbCQ^|Oxoyvvh~jMgt?[^NaanicRzezcwg{~pehWR~HHWtXN_yQW{gru}}pu`KfoG`CO\V7MQfRfT]]j~k~~wxzs}r}nwyzoombz{~hqrsweks`}yq|eu{pru{sysb`^[VXISjqV[etocv}{ocnqswhkx}}ivyza|xu{oWqkxdk{wooks~zowxruxubV}dl^zc]zwvU[o]~U~wsn~{|chsuwicdmyot}}~yo}w|nuwwsncxiywkmxsyuqupgkrizGa{}~Nko|wqr}xszw}mmweuvxyv{mWe_`vyiktzkjssqe|aqysqw~vothkwpy{x|tqyr|lwpko{rsrm`{ugy}nz^uu_y~fqhvdsqztsttbt~|lngposzx}~mquurjziZrv|WrUgUx_mgZg{xu{wgwvjmzwv|iu~pr]~rkvvuqyvole|h\_qSc{Zgnr}wo{v}yo{}}{n|zso{tz||qe[q{{uuwyivrw~h{z{mszoy||{rjsslzprqn~kjmq~dizgfm}`eo^qczmgysuysd~zvzy|WxdnMm`e_UTsYgde^|dmlr]t}s~wt|||zpzrzlvvk~mpzx`sam^ikkxgw{{{ukroTys]l[l]mju_ljYszu\tzj{lyozesdw_pyylxtw{vw{|oy}}u}|}ryu~xvhzi\zopyYnh}eXiwsgupwtmopu}{}u}szztuqsmmzukuicr{uq|s}~s}~~yuupc}trktwumnwWvoSwo{hkuiqkx`xskh|yryrxk}|r~rvtwbi|epppcvggutnr{~{yy{{dzx||{trwzztgpnq~oxzxy|ymqnx{xowtjwx~wmu{x_yziwwx{r}~|wf|ntdjh~cbjsqpoduhmmfnbm_scr_zlswt|~uzzz|pqwc}gqtjwnnok{yetyqsyv|~vyzpvrqpy}~idrgwvwyntt|y{~us{~||||{xyps|v|zu}zsywu}wmqpu|{pw{}}qm{zzt|s}{}}{~|{vswk~lj{v|w{wq|noujvsvmyzyn}uu{}zv~u~toxvvlzm}ovytiksc}us}{wu{xmpxwuxusuyv}zs{{}}twwok}vuwsqym~}}~|vwmuy\ytrj{cpsskqvwhs}pp~pxs{z~trzqq~z|s|rtvzp{opm{uksqwxxtx{}}w|~}|wx|y{{zunm}{wqpxmzvmsvuop{wqvp{{wy~xyys~zsytwzzxst~zntroplqgqjjlcrntpjwo|q}~x}~t|xq}v~qpvvs{}{z|}}yzplxpztzzqp}~mysutq{ezws~u~yy{}wx{|zuz~zy}{vvvxq~}{zwsw~~{}~~yx{vv}wuvyxv{zy|zzyzu{wu{vywwzusywxynzlxswuuzvwx{~x{uuqzyw{}{w|x{y~}|{{{v}}szyxvxw~xv{s|p}wv}swzqwv~o|ssyuww{pvz|z{}zz|}}|}||y}x|o{vpv{xrt{rwzxzxyu{xvz~|zvy~~}}{zx~y{|{{~{}ywtposfklkhmekgkhipkngljpllutyq|~}}|}y}}}}{{{{vztvutmtsuszxxu|vzy}~~}{}{~vvyvvzwvxxuvtuyszpzkvuqtwtt|qsyuvu|~|}|||y~|yx|~x~u|z{}~~}}}}}}zwzr|uwurtvxvw|yz}}{xy{~}}|{xvyqplqkjpjrkuomruuozusxvyxy{}~x|~}{{~{~}|~y}x|xx}w~z{}y|z}xxyyyvwy||w}|{~~~~{y}usrspsmplolllmpmkroltrpqrsplnprornqtqptxtwzxxzuuuvxtuv{zu|y{~z~~||{|ywys|yyw{zvyvz}|z}z}~y}}}z|~z}~{}{{||}}z~yzz{{|yvzwvwwyw|||{{~}~||wuuuspsqqnmomnpqswvyxz{zyz|xywxy~{{~~~|||{|}}xzy{x{{z|wywvwuvtvwwwvx|}z~{}~~}~z{{wxuzw{||}~|~~|}}{{y{zvxxyvuvuxwz{{}y|~|~~{{{yvttstpuuvuwwwuwutuuwuxxzww|{~~||wyxyy{{{{{z|y{y|z{z{{|{~{}{~}|{{{{|{zyyxzyw|{{wtuvvsrppqolrnqotvw{}}xwvutwrwttvrtrssrxsvrustssrssrsqpprrqoqnoinnolomonpoktpoouryvyz{}~~{||{yzwwwyuvvstnutrqtrutvpusrsoppqnrpruvvxwxwzw{{~~|}y}{|{}zyz|{|~y}|{}}|zyz|uuqrpqslsnrrqpsprtttwvy{{z~~~|~~~z{zyw|uy{yvwyxwywwxw{zy|{wzyxxzywz{z{|{{y~{}|~{}|||~||~~~~|}{}~}}~}~}~~~|zxy{wyvy{uyvuustopssswrrrrqojonqrpmsqtwy~|~~~~{z{~z}~~z}{{xw{wzvzuuvswptwuwxv{y{vyxw|uzvxwvqttvtotruqtuvwx|{}zzyxz||~|{|yvuqsqptrupxnurvww{xy|{}~~~~}~{yxzywwttsuvrxwtytwrupvwurwsvtwuw|wu}zxyxy}}{}~}~~}~~}z{yxuxyuwyyvyxzwz}~{~|}|{{y{zxyyzy{|~x~wzvvvrxssuwztxwxswuuuusxwwxx{wy{y}~}~{}~}y}|v{{wxyyvxwvswxvxyxuturwrursqqutvwtxwxz}{~~~||}zyz~x|{{{yzyyz~y||}}}~~|z|zy{xywxx{}~~{~~}~~}y{xw{uxzxx{~}~|z{xy|tywwuryswtssprporrsututuvvxxwutuuxvusyxy{y}}~~|~{~~~{y|y|x{z|xz|zz{zyy{yy{x}{|{y{z{|}z|z}~{|}}~~}z~z~~~||~~z{~}}~{~~z{|z|{{xzxvurtrtpswvz}|~{~~~}w{wwxsqsqnssruqtuxtyyzvxttxqsrqonjokhiiillgieeeedbaaadbbgiedggjlmonopopqrrpustsuwvw}~{yqokfb_YSQLHDD=B==;45524*0++++)&(%)$+%'&,)'+*+021;7>?>BFGIOJSUV]X`_``bbgehgjknmopqstuusvstwsxzvx~yy{{{z~|{}{}}~||~~{w{uxuttuvsxruvuwtsvptrropmppknmtuurv~xz}}vx|zuxxwxq}xzzvy{ww}{|~}yw|ptwrzszzzz{}|w{zxy}}{~}~}}{xx|twutqqpjpmnpposrxy{~~x{~{}~~~}~z{|{}xxzvztutxyvwrxrrwwtxtsrrwrtrrttsutxuz{y||~|||v}ywu}yyvxuyzqzywxwxwx~{v}x{yywuqrqqnuvvxy~}|{|wyuytssqvorwvuyy|~}~~xzv||~~~~~|}{uyyzy|zzwusvyvvutkrigjikcgnjllquryz{~}zz{u|srnuoponqpuutwy}~}z|}{~}y}z}w}}z~y{}|x~|}z{xx|~}z}~{{y{}|~~~~}~|}|{~~~z~{~{}vwvvrttvutslqtpvqvwuxxzz{{w~~{z{~z{gt}~czzxzwv|z~}yqnxmnhnnovu{wvqqsosjonznwzwt|rox||~|{wzsvwyz{|y|x~xnultytoy|pv|~|xnqt\kchYbjdnelwiz|}}wwwsnuiqjwhlqrqrouvkjz}yvzus|wuy{tx~ww{|yvwrnujwn~rxyz{}|}{}}{{zwvs|prsvoqpputswpw|uyx{w|{z}{~{xwxvsxttyrvtuv{vzu~{|}xw}zwxxwzuxx}~||qffsq|yh_yul[}qrotxp}p{{z{~ujwhsSndqltv}qval`k]ie\^krdqwwostkbyy|utuupqha`ZaQYZbpe|m|~ntfl|skq}vXtV?b?]#KNOTPfkikĹۨ|ptncv}odgxri[}z`msv`fhkefe}Gehzqw}qyzswxqnjnmmofc`giecfidlgvosqu|||{y~{~utz}|vwxzzrhewp}jkqlsm{l}|tx~{|~ww~ttxyuq{t|wvyzleil_v@LoO/XkÿgcOe/G0;]rKV_TaQ? GA/o ~廫{Mu+e e 25FQRGZc;'s\PeGr@{OPb/uc,O/[7kUgȻty~a]o[a_mPJJTVG0/XCf?DMLVPqSloo}vouSkiUdhmgkwgpyp}|r~oX77cixo~xW\?vSk[OqapAZwlO?dA$) G.Tooƻ{Um83*5+G#gwgctTybd]sqpsk]o4G  OB_gkWůoq}MTS`S0p7Pg# ?/'C(kCƶwZU:A+<G X0Tj/c %g`ojc@W,0Hsz?Ocoߏgykc]N[/+ %$'A@@VXa]y{zֹxTGeOl@174*$EJI/-oUaGJhsGz{w{|pww{ksr}r@c?Ql _?y S_o[K[mUcpG׏xhwuV?c8_A.JS_ϸpt3N-NK4GT?gѷߜOSMJ0Rokox`_`a423<;Jtkⱳenx?BOL?j/l3Qso%&'SLgƿoWP= #W A[@GJ%kq4MWc'7\/LQQ NPOAiדo닽oqgq|s~YZJQ?,9-$6*J&->_h_epyyzDzƶ}~jfQbVNLD]WHENbIQU[`]^W`f_lYunq|w{~uxsw~[Nci}lRY_I[\LbnW[iecxg{yw{z_lmoq}jZOqjwvywǹ|d0g_oRkOoc_{cs^QzevK_~orL?r=(#-E7Xkpһ`l8<'>+=! j'`pŸ_WRK/Vodb|`]k[H=  :UIW|{ڷrzelUx_/QjiߛZ<?/ ! %S^otůz]EE54"6(11AERGVfkkkm]^g_aXL?DPD@@E>FpIpٻӬ}rnobMwwusmlqgdPI:+(" 1CDc`pۮuswfn[x_G{VpV`y|cuy{{h\uF/O#A*.A*@Y]oqúof`^P@G_8KcOmFOXtkWMztNQkxoQxg`ZRYJc8l_k|}yrlha^XXSONMKGHHILLRNVZ]cchouw-_wK`/&[eW߀~_t3SW[^`r؄xGk߰ 縕Өw{8(Uwwury(;wEvKX47   c27Yȫir#/+ 5<_*{uKǀ$K,%B!DSD ;0ut#IWҌϟH1L,RVH7,swѤV GZ?m/[/>#\.[h  DyE;R$'IѿEϏӋr:ttQc_UM/acKtŸsruIE4(+ C PKvcֽĈY@ O/J.$(/2,0+ Kp{w 7zJOp =WH1kҺiwV"UR410 "C?shF#qrwx9ǀ+?ak` 7rHiV_Ŀ`'ہ}'0D罓U tHpX5MBǤg{uYUkw͉xZP;縞sXOeLwQiu8%__41{#5t!\E _W ?ʐ@Ռo*={j^'$Gʝ$m怗(My[CP `lʜ{NJ2+# #`_P+Kk9Ex?_ޮs'8'<G0H/̪'EF/N= *_uߥotopGhAx7/Do}'-3XjC'\U ?(G#Sր\o?]+L[(ϡtH_#s&l]x/2gֈ囫oo['=o[ %/߾\~Z?sG񜟶w%( Kx1+Sר9#"nCޘ!`oӨǴ_,O9?Z %?{dFs$-8؏߀k9ud?SWmnO`_pL@w@0;p0h1Wŋh#K;z/7 ]̬k0Dp,~?뵨eLj 6%dCc҈׈kXq㤍!*s']m/dЖ1([68Ƞ_Sv'ȃKקZ//D?!gD0CmpKz8uSۗuip`ICgctK|l7ӣ , @)ߘE#_f:]$-wkn}SML( ?=MZ1W`Qxsg;⴫G;%G(?t[ M?ȝ)WqDz{ SՏYaMZvdHN(00WCٹ=\McLH?(3T}*+?C 8=T|w?ggXw؀GؓVz9pD?ސ={)8#3טLT]̈JMO_Ⓑ(c_ ?`?vk@/XW|Ui /`&UT@C(UX?\o[rr3i +˕@+jϡS8k߬K@aa;2770qS_fKcm$!Xu@Gcp0O}*sˣ(/0pdE`s`(gXCc?ں_;(8O礊Ot\x0k?WQuч:hcOa'sS߄oo߿Yh7``/|7{o-K@OX`HEg?ﳿ/)#[Ct?x'w(h/ //e/Om`㪽UC@{\p?x(?ykp|[#STpEs0p0/͏\ 5H+hl/gp:c7VCnĕvu|XmSgooTcwgXmgM?yo_}]vcaqY~r7Rl{{toymcsxoY}oJWc|OlVCXOPc[os_yFfimwSGEohb/w?xy/oT/v_Uo0'f+|mh_p]t]}@WlPRU/WP+Sl;Iqb_yg}oY`kiqfkfTq4Jm;wH5AGYkyITTk]fyv_|zύݗGuednrG\wSKUH&!7]ECoK>To\mbgqRϋϣП֏њy?ld?GaO+;WG?CF%R!aapV6G~Sȼۡw{\kau|XdZ_uMb?`OB_AaTMkYZ %I@=8DKOTZ9Kg?T`b{zϳջ°kxeiry_}ozmLYZOO:ES\3XGMK0\US?oAN;FROn9mIoyY0' K"a`ģó~φoկO\_7H $P0zGl]w_\wvuXo{g~okqCOK/0}5W]f{ї׊ֿ͓iB?N5;#&aWvߺȲzHs$6J/ @O7EkN* - !(2 D(-SS;oQԶ͏ߔponr{fKJ&YK-2?WwOo/}swkw[$GIQbWsӿœ_ow咿tWON,W/sfˣИ~?X@' *S3sOÛkcab,OGfCSL)RvEYLKG?73 )LYIWֿ߿ڦIĺÙUmgSiuc~fU8?9# =CJcoߟ声7eWXJ ?j8_E=/x#c7?sH_B Iu%PV;z7ySoȥNj粿{~gqK3mc8l_oӃɟukL{2ToP'.o;K.HQ@[PEkqm_hxf?`0{?+LdQ]gCiFz`ea]}G8fFo13fMrNj䷺ϙ\SeRhrkgsǹ͚}xDkd{a{sn|cMB0!#  ,C1c?skOqZ~ww]Ӣ{z_[oנʇivBzMWofDR?g_Rwd0pK ?&1S'O*ss?PK0''9]k HxP`WW+g)Xckm߽߯ÏȐGqv7{qoϽ׻ثpe{Jd?gI{]q#a;YNW#0O%_O@wNgyvuSAtvepBE\OyGb_edSwvӰpYLy_uYxv?t^_Y_TObBC5AWphW}wFQRq#g8@0{0"8%k]eJsۂ`_bs+o(7'_'s˥ȾĘɼ۔gk׽gp_/%5C /C6"K%L?sGXvuko}kPOo{J]`VZcQfu)[Ո£FUWC3J;->7"/]k=Yh~ׇgKeg(7MOqKH`{tZOt\{?Fjp#[ś5Džuogǣ_WXOoDz~RėbvS^y_G?VJA'd/dOJ{/sW3_gGueuEo)cp!{)4N{SeBwl1V?}rdDWzmzj_lkԔ^CWoc; @1F"w7oAJcz83}H\@TRr,'g9;Oomxdoǃ˂c;[ӖlgVO׀{gQCOWnU;}p}|r[osx[ea{TvP?kFEwTUcHgauDqbVs]Ȕ|zې/{RGYlpo'woGm{gs#K^xwӸֈSW;Ոdvke_b_b9Q/;[7NHLbD3?]+9jג>2anap{A}WӺRuw}vozI߅GuK_u,nW~tդzǜot{snGvo^bx/s}pcXKOo`OHyJ5^EKp5ZxlzT7WPq6aDomSi\_Mh_uǖwէe`omQojWu=#=E$;2(\@Bgkcqk}sho]hxqTlkWwy{[]xjrrgugodmq}v~{izx^YUdgE[\KfWfqvrsywwwYeirGptVqwSxuihv{p{ewgqe~—ap~sVMh`dE4KQsE?qNP*QaV];C;_K1yWYNcijmox_gtu~tmǞ۹˧v~sxq`osricmthlu{wsw\|RosskzwhugqW\kz`wO[XM_E_RTffArg~okoQZX{qlizvb}}sua^tx_dkg_Xcws[ivroXvai|tkmktgusuuu~c~szW{^lyyz{~|prviomt{tf^rr|pzgZwrvm{myttzg|z{|nukznOyUn^ckrOhlZldu\[`kepReok}hpr~oo~}w~u|oxu~fd{s}_Zm{kXqqe]|poww}urw|uqw~{s|yps~mi{ueWqgq_m{pkLbwy`oyuhipzkowl|Nmogndq[wa}uw}|p}yrwnozjotonzhnx~osh|g`wvjn}qqs|{kvlmot|dywxz}~u~myxnjnoW`Wmsmnmrpuvy|yYcuxtj|jww|{}vuz|zsw}g{wk}t{~xwsxspzuzx~}wyuqzowf\{mauzzzyx}~txzzqm~~|{wwszkl`yzy|}y{~k|k{wz_vsygyq]eGab^DMDJOBCETEJ5,8OwGd}dlqW"?q97_ojW9[xO;۔?ȧW˽ǫ{=oq5u3ZLE[[m YGRYGk=|g[ŗOuϡkL7e,@KgX?6oCg?oϟeSouyPokDϝvnA˾YkhS_swχmqkhbbHk$KO\!5jMGw[ϔF__cG0S\#jgpoðo;oaoqc@]0)ap¯dQqopk}ӷg}\)ebDTgUADO {GiApCW>jWa/sDWRpX7\)s?crC}~XgVF~kq{_wq@g眬iĈl7X;cnI'Xzls`_O]?eHxilN_[hkTlCxXuᤣڶᴉUoK6? 3z!G7a=/o@WW77B7_@eZ_gw^wn߷heߠӵ|glS{wHgM]Hg=f+^WSzk`gjkPmr?Qqh_gk=aPulguwRrjGM}[ux}mm{}?aWW5U3abZERkWwmoo[Useg_gop~ou{__`espvxch[shk}mGsiKo{pzwo}ecg`g{^\NdsoWkZ]swjOQOw7uyfvwo{v{]KhO_wi{}lgimzxw{jaysfWxgwwokwq_tg~~g{wUw|[e[S0]e1uckgSx|SyUWsgsnoiwo}z{xe_?vKlZpoOw{obfYkgomU_nV{Ypg[]dpkV]ecOotoe_whas~wwrowcpns}xwQzniw[omzZwrg~p{yzycnwxc\ukfW_CqqIpFeN{[wmcAo~hpwgl}xj{kzlmkMxgv_w`mqeowebowgi^go{{|vw~ku|t`eeuueimuFwklumwk~~yO}wSbwuz}xelo}zqgwuvoyeszo~j_sw_v_xnu{rw`m}|crwq^tiwnq]xkssowszwup}tyRskSh@_ISQR9`SB`WNu[`qa_yytyzws}sqxzuraYX{W`_RVHVKVlOwuoumsz{~yxs}xfcp]jAq{nWxerowQrkpieyfn_n{o~shqgwr{oy}ksox|w}lxyc~}fWmjcQskwhrkuqinkiq|ztmr{hnenyuazodh_~afkwpjq^hpytssyyz{sv{mcslnlqm]auIeaw?mko_qmltpvb}tor|xp|{gm~lsvvbUikezWw^]publntqiwxow|}uW~{nmxvwncusts{~wrz|q}zvjnpzqXuse|dypuk_sjuqscozt^zkx{yx}ywg|txsq{kiredl_wb`tppzerql{||k~mnpjqqnmjcvjxivkghzolhqmcyqj_iz_fwpboczmicpqyrlyriio}{xtu|ux{onxzkxq]nkjqwu}a{{zjxv~}~p|q{wztqwwwxs{w}|z}s}~w}s}s~}u|y|rr{{rrszo~}z}t~yvgsq~{|{{uox|{yotlkxoc}mt{{ygtk}zqviqs~wvh~iqr|mrgm|z}uxk}ysux}y{ugz}utlt~p}}w|{z|w|{{~x|wv{w}ionsvsgri{xwx~uoy}w|~zu~}m~xq{swktuoruopvyvvsvx~w{k~u|{nxzfuyqlw{kuuttnqiqzu||m}v_cno\fehb_pg`p_tgqeqdtjolgxrkk{snqmyunsytkyv{pvqnn{potrprkyprmmtqospptjtfqumt\ymrpsyts{}zy}z|w}}x{tu}wv{{zx}zyquopzr{w|us}|~~~||zzsyu~w|trxuzxl|{ouztx{xwyy}{~~|y}}x~}}zpzw|y}xzy|yswrtjwtvppoyxs|qty~}|{{|yyzw|y~~~z}|xsw|wmtmsonqopmmipuqsxu{wryx|{qyyxyy{|}~~~~}|}~yzy}|s{szt{nxvpzmxprvrxqstxqwuvn{mxrqssutvvvzurysy{|y{~x|{z~yvx{vq|z{tuwxsyqzuvwsv|vzz}{|y|z}|~~~~}~||}~v}xpst{qxxupyzvvuw{yuuqy{x|z~{yu|o{rs{suwuurutwv{wx~~~zxyyvwwrwszsvuqxn~vrvutsyru{vsyx}{{||{~{y}{{yyzw{z{||{z~{}}|w~~w~uuwrojoklkikflgjmplququzx|~~|}zx}xyzxxyx{}|{|}x}}z|~~{uvzuwyw{w|{ww~{zyx}xyyvztwwxxwx~}}|~}y~|z|y~{zy{y{~y|{|xzzy~{|||wz~y|~vywzy}|~|~}}}}w|z~zy{z{x~yzxyxvxz{{x{~}}rvqtsosqrksrksuyv{}}{~{yuu}xvy}x}z|~}~~|z}~u~yryruupomommkljpomtwwv}~~}~~{}y~o{s{w}|t~|xz}rz}wz{{yz~}|w|yq|~zyx}{yvzwppspmclxq{ul|}|u~||y{snvnmvyv|}zu~}xwwt{txy{slutootpuqwtxx||p{lvyo{wn|pyszswv{{u~suujngfqlikqcj_fb\^a`]hbihmosr{quwzs{otpphegecdda`e_ahfbdihplktupulovuttzvvqvw~yzq{zx}pxtwptz|xyy{wwtvy}r~u~vzx|oq~{}~|}}w}|~~~}u~z~}z|}}}u}y|}ro}z}u{}}{~~x{zzzpx}~~y~}y{~v}y}w}u|y{uzzyuwxtw{qxzzp~}upz{z{x}}w}~z~~~{|~|v|~yww{}}~p{x~}xwyy||{}|rrwswvt|uotxu}y{{y~xs}~|z}{}}~}~vyozwv|w|tvluhpsy{~z~}{y}vv{wysulwqwtsunputurnvrrv|ry{|zt|z}z~}}ztuturwsuqsussos{ytyrnxux{ststy|{zs|~yw|szvrsttvnouqszxswzuww}vp~upv}~y}{{~v{|km|xvq}z|vxp{u|}posu}oorfokchwumydrvvdcwxyxxwmvvt~swqvup||v~}v{~{z|w{|~{}y|wk|o}pz~umpnu{quyz~xywo~ukqxv{~}}~yzmmtvkmrjjbpos|yvfgliilftthtzguyt~wz{zq}{k{~{v||~{}u}ztlt||vn{|uwzwl{~wzxx~~z~urqw{}wvyzxz{||vt|w{~syxq|t}z{zfv~otrrs~t|yz~{xtr{t~rywu~z}zj}}wuk}sc{}y{{~|uuy~u}totyw|u~tzx|v|zuzuznhxyyyyz{{~z{}x{~z~wz|x~z{o~xzu|xts~uzyyzyy|{xzx}z~yvswrvsrifhet|{{vqhx~w{vviu{~tt|sluxzwy|}{{xoswrOiQrucc{}b_jjrY}i~rnqq|oxh]xvygoszzl~lGmtWszmoq}{giewws{{qw{_tucqnbwbK|zusprqjmxconsZ{{`}o{|t|m~wow\emsw~}}yqswlvxmtgi|oryjqtO|gk{rogmy{vw|Wkyp{m{zzxo{tost}sYocz{qiq{cy~vlrrih{{t}n|}jioqyvqworWua}ynowe|zxs{es]]qw~k_gyqzwvYv{xquyzjow]vuczbh~}rsYilrjwm{xuw|~oxt_|qt|nu|mnktu}Sz|pmpg{w{rntptuzkq{{qlyo~~jwt^wqwv\s}{|exus||jrrrysuwWLrv}um|l_eyqamst{nyoe|n{sj{ulsxrsyvwg]|ion}yzXfjlwgefvd]qntp{otxotzd|orqspon{wxcSgdzfoy}{w}zr|{|}}}~|z}}}}yuwu~kjy|kd}yxvsr|vsny|xh{r}cnmHk_rniIkMQMZRO]Wbcgtq}\oCZ]gq㓝cwFEgW~k~QmKy||iW_umWQ}JowݐkR%}}zwsC_WCd`CxW[l\9hSwpnoszuoyXk[Gk|mon_hvgwQzet~v7kgsoGmOshWWoy?pcde[fYypdQfujdž`pzsvrg}vUkg{qj[l||phzqXhTyulkfi]Xu~uel+ghszr~o|?S{tboa}ltGv~L=fqgMYa_fp7giqjl{{mtv_r^`gpsJ~]ok]{kz{q~xWwznxwhku4vj_h^TOulvYgaefemjog_o|n_Mho^xsYgh4mro[w{uWqshheqpw~oF7{uq]{cKOvlQfohl|rW{cpWjp_tT]dz|Xu|kuqvdRaoo]zzzuop{eLle}np}whpmajmGygejpag`{{uS?QTw|Telkweifru_}Ok`g~ôz_y}wtu|ywqzzl~mlmwaUuEt^I~SWj_}fGv^gFhybwzbCtko?qbő~owoyD"QTy3tgk[wtgtQ^hjccmoKi\S\vW~RE|oozq͓duoQ}pVoǷtWtgxyk`ijw@?Cguara]rwknukghn\VW[sykxake]ol@pY[~[[]Fg^|XEZvtvԇcuy|x`i|ygoqAocwupRroSrvsjQLeI[kÇwtk]UzsyAo{}u}lGr_{cigApto`_svPGcv\9c`__d)e~}Zva^zkqnK{wPE[z{gb>xzL[SA_Smlmiw\suiG{{swe|{9szLRi]{}vi}`kz_r}|YLe}y[{ipnc}qxU't}lZoZ|zhNpwsy7?wgt]TOvt|Oa[lupIjM`KbkSmBU^y{qC{rw]ohoXCbdjGdcvolcdlW=kWnmqu}kwWu_|ivUBGZgPVgmonw_[nbpis|oukltxyywbl~l[vh|xzx`daxhXpSnmyyʜ]a/AWg|cĥLimfkehwvkj{~_oewrqlOcj%S$p{T/}טH]cUp@dU_qrLcQ2tP9mtWۜUw]$K?j&vÀsS}P^*cbr^GWpfC2o)woBcÇ?_f¤D]^'qAKTXLu&cgO}OWaSgVkw?O;k祽{qcgc|/pϾs@[byko8N?MatN`S}wWXo3|G)$F{PՏpgscdLk|jgk{o^KPOYuZgK{{|uh_cwkc(dqGKiwzʟ`usd;hShoŢsq{DJ?^|sews]n\.MXIi鼿׃?c~4)v{n{\etmKot7qZA{{|x9LoLo{{rxgg~]gpK76{gҸtwosvgqI{_߅;iiwpCiB_\?BT|6uLIitSG|Q3uL7#SvVÏtckfh|HsvmokgUpwqlG~աc|r{a?8kkˇ߃zaZ?rV`hmjqqsyx[jTOsX_}\qwzYkWӠZCq|t`l3ğƺǚn_rQ;/iq_^XU{rwe|IeE8vgop_>O|bXрuGEr3sbgh`\~ueuMqyhy|`o7rwpke[m{׉hpohsOao}hB3Oo7]_OST6[Wmc7pzo?W_uXydSg_otmkq_|p_{Q5/gnG`shp~lS|ZuSowkȗFI[Ӡq9[kDgNop44nh9|RwPrh\یcGcu|l[Zzzyyu~gwquvt{d6G_qܬ}?qypvbWPjx_yVasIvvV_lgx;yq{K`fsRSue,MGoR;wOHT=`OOgg@k{AsB v'NW[}mįOliQucR#~n͟oϑՍ&JA[ia3Wob" UOe׋$o%~v݊G}k΃Gi){PGr00{8iwtw[YpGsQwPEQОƷYop_w^dQg/GKz.|SW~?q66pgZz۽RU_ll8/xSI@WwzS"Kw@۾ϓGd{_kj?æséҔ˫HoYr\8ri;hiK@UXPNkoU?6*>ssiOT{j{K&h _t/TPG_vȐ5"p[Y`g< yۯڿtrhS{dVJkƏwnk;e:>OѢQJgv']E.O?h`oSnzJ[jY(xyjmZegxkrKp7P;winl񎷘SxKl[:Ag\-A.uG;ƪ@gޖMP 3G}mFؤqus;7_o_W$Әnst< 7وd-/anTcOP|UXcUOpQ_?g`ߢv7Oֵ̹5,NL(IQBL̤HO]oda{8~OVgtgS@[7xsКmZr9c>Wך\=/kɻ Rfdc|ṣ[9sJ;2/yV~ԛtWv~khpQqIl}Ljq|s?æ_]{ސ_\GAowcYZmzٚ{g][uGgM{7P{ksԯOumt)wpwHHiz|yzsu!=Iec]GXzo_6;g;rTb!mpuPlgi@`a3càfP0eQIx_^WjIsQm{`4.k_gue{ahWk>k_˾㊈4k]mt?l?Wj]ϻSc{6nS_ΖoWU8mQOsrᤝ[ggjlj|ENroygmgm/hSwcIUrq^w~[T\?T*{jRSKYwk_NշͿu`Pm*z/wrG_E{^r1DzyǏ7*Ygdc5!ҫͫjxxyO7qx_|c@CTtWkPCMO\VhYXUwTSuíAה_i,jyoXTɨ_2w^geK7soieH'yG20VvzUMGOb[cVpZ?c{uˢg!;0+ǿw@o3`z_r[^{pcƋu]QE&x[¤w|sCqQacƈGJGy]tkʠ{^[-FuWqήtoiZo#Uc}8K`$ekgWt]zK9sƺIw&x<ɂNDiiLq=koen}s̺өjFc@*soǰtwuabc_hft盇X4UweojYO_xLsC+Kkq\'^M\%?C6~p8C;UV>K)?s`?YtfNBWSzVUmԨwryu-Sh`v֯l(mtcgoynC|qƯ{oPMsun_hבA_PL|~rT_^FDxqTwwчwowaP\ff] 5r#=LWHonƳ]K/OCK7nδ+[ou5;ot[go|LZqxƧO_.?ìm46gUכ-BY=]p+@}ߊ[Cvu]X}ݠ#-˾zo`)R}ɛo'$'滌FKB_PX`NqˀPUL _\gJ-κfKowܾ=CO`3oxOR[V%cykWIbOH9{ߏC[tFiwcoo(lX|O_OerOeTR UͰTQN?Tw<AtnNO_'#مהX;67g֘? 5u+컦Ϗ?_wGZX+yV~׵_O{k2GgXOqnS8J#Ei΃]<8-2o㈇GLwT{w(_* S%I;Wވ(K@;߾=7_wor8Int|xTGarJIIx['O7υT1VTb?mOt4o_PU(4feW՘^y0?Ga﫣e]ϡ׼^/| 6qvCgm]V$&0g)S0ocHCauHOsORwT[0K0mϰWXGo#lGcwP1G߭χU{lMyMV9WC?rT-Wo1PG8/29< ;sR<mM0 ]Bo۠Sk[w\$Ot\ɮtǽsHxTnW]e4]kPOG{Sͧk=#[Y]V/`f{Jn ',3Ӹ2;{x׾Ywq紭0/X.i`+4?ӿwxo`GY߿_3 1iW@07XLB7%s_[x_``)XSk5;8H$7pEYgװ@+ oQhC|[ϭ'{z'ogP/@e!40?`r8?nd'$y0xL`X-ϊm}ak0gy4Uh.##㈇G6CXIwUG_[GWp%\G@?H/ޥGWϿYUVky/G7HtUoc[à`gpgH@vtːYf)q`gnn\ƞZ?+oh/g'Q.ODc(wԠOi#rG\qM m[O_͏$?jVg Go8{x.{S= ˆIM==(054Gyy n^j@-2_ķ(mTM8g[}F_ۗl&sʃsa{GarX&~uPFbxkPGm烢XChHlS? c /61\ &_P_`B QZT Kw'tIW+yxcDQ}P S4 tQMZFR5΃Lv$ {5cj/>p_)6ё[`K@:sps~gX[+k`@((ؼ7B ,i)Y%0tQX*[P; M$3|s*'449St55*)_bg˰ɰ۵dzh~ƀ;r͌Hgx}n>f10 ]B:WaXNkG}D!t`UՏoM~oTnN S˗qCqۿh!vALS^}ga?sθ;g\ꈛeֈݬ кvjF(?s6W%/( ft`{d3#'l+llAȲᐢƞ\ "3ίǐ)xox}"[(0Jb`.IPcJlP#W(MQ( +!Æ\~pѡx\ %-kU, >8;yr񾹊jc̎ʄdptg?EJ+;#NQ{qL ;$2]98KgxQ}=餓xidѧJIB'.~v#vڦK˼(w@: SCeg`o5~UN򶁅RWǴ'}m<'_w4_j%͸Bej=eJ16o2{d`7u?`[畳hMĘhZsXKڽl?}8+ 9{|/i۵otwδnSHGD#koƯr2"CDlezWuPMFO4ܦt?fc/kƈfmػܗZT)Gc_̈́V^ɸfƙΔE@Ud9菱 !إ׾͍SF)BdR8TaQmRWRWeۘe{xQkW?Ǭ⨗G [EOE+??edGµۣý˒ood=?m{conMgOPgGim@wgpIsj/;XjOf`ȉųʯٓ[{v{gWoȋ-sg?kU(@I(3'C/~~qsrbioweppjF}{swKolEqQsO(9/_B[ɋɽ]VN[?/w/O TC9kcGP]? ;V_gˢ̹p׾ⱺd?cseTl'&+(.W  1(K/cM7KFYKdGc߾ګߧr[_,/._(7, 6(,'8$R11C`s!gªﶴ޿Ysp[RE$cX#H'J /KB%M651@u[*REmWO~\Gjow7`Grkt5>ȥ`bСӼ֗׽ȁΠ߸Ac&7Yho[ɀOio2319]W`eI==bqHN8=084# i@QYHBeq׹Čڭ͘x磗\ol̿oRqǫ׭pg3V8??ʓuceq[pe`6ut%wh'S!?mxE^=@'[0ks<91Kwjuʜ5.3'//|y㰞ͼ԰簊Ƹroڼh{ܡC|ˋv#WTSyE35Eu6D;Dc]p`F`sj(WsxS]:d4a|j~3ȇxXcl6RU1Dee{|_jشw਷ϨƝ`~ֻ˼X}vX^n`9";BIr8gǛa,',/@.AcJC0S^ 0(PqqjNNK^B()Gf2/g]GY԰ɭy`.p_ΝU?/o(AE4&ApIu~ZRQv?_kt O+:\|V,d,7plz\AQf}g[\(L7"_Ԩиɼ˺lﰦyݤIoÑЍQb`3pl4?@Yg-15PKsvV}ДN/mváI̤k+Qv}N[r9ྞsͰZw@3P@*bdAprox6gŷlYēpV [gX?IMf<"ZO|9H!3 Ozd+j|_LO_xd͆+t{ΑR_9'l([`Ml#qnw|qaypɶrepM= 1,& mqY3Dc]yad8UL3~l4{D ㋇Ҋ΀QO5FSgb:ՔAU *?FR͠03ף:[d _#[X[ȴ̖}hh@&7оawaK' 9.?v5729**s̬ʀЎRKQQ:!g}{ΎTD3-2$s-bFܢ.cha?=PGđAqqgifb?w|EptxjGPY$^ 'waTo_wcXsZivntufİ׺]xMgxLO43tEowˬ™wwLB>>Lb,387#1 "I8LMg]X6+#qwἝk\maC6 #"7-&\$,?FW2A:FpV3M}k?[P笿ʟϩȕuu=;5!nP352* ,, F+;Vurh8`ּowpakzE'}y%_f9O!3E>92*ObAGHh?Fb=FWzv^f@:LQ\axҍפˈGؽڤЏ鹕t~:7?bd]m$ew@)>9Y"Awh C5!AQui\]gU1>IDo]>UbWBgļ ԼߧĚkT{[ްS7_ʚhR ;/2.o˘ycxuhsqo?!cy)k-S;1UzyCF\4W{jsoJ /@q_Ƴ,w>/771èپm۸qt֠7{r'[TOL+NL{(7<ERLasusb{s1$CǨKxFKday4똃nj?ֆ.;J0Qk|vfqspAֻtyóغCݦs$qux=45@??[bu$13Z@Eu?ءjj 7}dYSnBa GuF _z?rtcpğrȲn_pSr#Ko".N3KUha@JYaSZ@/D']eBG>kϸHX_HWϯVeh8niƂ3 +(fhTcԲkCݬpPkLF@-[v #h8`ZX!M\@:P9]|n]FExvbHjv0[͸ۭp8tN)sap)ƫHsL(E? NmsXwԴ_cʆ|t7E1T]Ac{PS~(ҾHOexmJ'7Ie2k׶[wT3aZudY`Ւ栮7wpSŢ! +n>%\-7sސ튢̅}㠆4Y41lVrd#4YVl( kw+Q?@_ĺňOS=[,UnǪP& H=~eb{{ҘVhՏSx̐ȚN:.aTW  'ҩζSoxN%.]R,)f^oaH_}^]SҊmx[?;s|c#YQ[N43n`AvqАvmo{' .Qrgv`~PY6UYRjHQtcsk}tUcA`坟ċp{ӥ̯}۸z;#?VO/>3'  sңۑϻϝտѽe}Xx_-P1!'V`[iy}x_PV  2  -'g.UqrȵYPennW~IscYT{dH***;9Qrtʝ߷磞~lxdG?S)K!5jD;iRu_WtXWM?" .=s4E679N?9uSD=jlto|r߼̴wO_mkn_crkwc(ew;_,8 *|RaJEӒԷכi3X??s}cINh0S&;UB,@'YYQKOzsg?FCty{壹go\dUtkעu͆GV5.$7 ) ;Fs\[ͧﳶǯrӠtjM;76<e !"#I_3A6%s=w·yuuOIm[^GwѹZoS/c_@6k Oq{{ރߟmohɵ]eY}yc$%6!Ycvw5ǨϥNcL[v304VRU?vtئ̣۶pWqkkY#|D=13jczI?JΐoρB,.Kgceqr{VN9zaoV/RgIL\7YUL8w̘_#8>8 7GhSocyߧowng1zBsvozo0Wmyerᅬ]ximM*;Y: Q!(@?l"`MVʨA5V0B=-/ 2KkO{fRqkhxبJ]{x\SETs(zwkr/S?AINGoMrWéT9<3CO?}cdMA2ۺkw?@ */*]9qVoYu,% 1Dh_S# 3/\m_hV>GɛÊ8A 8vGi絣ί͎p> HW{iAe*Nzd3,Cܢﬓ>+++WotA9%b^d@<#'3,49P[gss돞zoqnY;XAA)7lM0_nWwWqucgOH03# ?cҿsp9?! 4  B s'Rw@/kׇLJp{qԥϯ׏zy?K}W`}fWkxO@O?LA ,09_Qtg[Ϙٵ߫}k}OG_O_]#}\rCw3[Ot|jPO_HAcϮ٬ςuu]L}W{OϗScP7 _Y/8(?pc+O߰χϯ߻ǿ_ۿzw|c? _2c? p;GS^71@?/ǟqǿppUoeK\7 _qGPǟӪէsWK5ob$ur_ߩunl%_g]nMjljejgyowΊW+WZa{w?M@kzߪj&3031Ww߫uGrlL5iIS|[xBuQ[m[jC#;;coφogћ㹋՟xqk0+ _/w 7\f`a]HE[aUW_͠Ӡ߽sxY>=;ANGKO˪LJӱ﮲Ո}S'J7#5uNmO#s*:??q̈́;cׁeݼҜߟ֤:wH@w7_wOsG{uy?d,eU{esΗw]_/G9  ?'P{<w\ç׍ϯ{S{PtG'cɯUw~5 o?yopq/dWiԬI_qϢ]@ #gh20._8yscƳxWev?R # QERlcr^𭲛ӥ߬ǁ"I *(_e5q; `ĕpuzd6kuRFjQ> )56lMS_ĠòtWwlHG(.Snr>٦Ѯř{yteeLCS=("U]F[FJzdgVʎ|g+#V9C>cs[۰zĴs_{7oovnH?pucuֹØ\{|mH88)#H;= O,!YGp,eRiǤ?=o.9O0(KZkOgpQa}tkѬyL\waLWH)mlƷG?gakqkǝniݪǒ×;+EKl81:H;-[~иrcMB1:U!cBO{zQ38V[kP";M^pg/ȧҫT:@Oմ֠jw릻ӵqbN%;VcTt /9l]$NLum ?G|v2-> E_LZ$#/!9pa`l.KsepF,qiGZ7ˉxWآjwto,0C\ufN037PXf\}kkPF6;]{¼˺بžp„oǬ85P]a;NnKvlQt4 E-+?J#ji}z_gz;$7w`fuG\:Y:4}Y!)}X汰}to/)3Cd^YY^}`{x洬]ͬӷ)oԨ}L$>&sno|4>q9XJ>~n^[J !D&4;I[ih=wƻޒ_' Cnr`oyܦC3(W=-X?<`d3~obwaqǗQkռ}xgKȨτqp0Op" PKY[YSL8OlbJ67U8wmp#pb^+w͌ٴ'33E45ߕs}DAm׶E4+$ +/kHoø\uޚm~t9DQKG-GaJ:[P#E|hScZwψ~[X$WÐ?J?UrɌWޞzT8`Ey@5@ EWD)֌g5!+m2nypd"gN(fd7oMoܿ߈#ε΄7WVp{E׸ݴ5_( !2Ch׶ԟǘ@,dhOsKG[~l}l71*6Cvg߃p*WbVRћ̄е畟^!n~=67~ؒkysm('i~۹٬Nwn/t?Nt h;_u[cTn{?1G #b`{¹he Z,31`vz‚xd 3>  ` %"3Egd*zD=~{Ӡ4;F')J.uĸRkdwk]|:sJIN`3gp݈1V;J?tTwp;͔֮po]" lr߳PMxVI`cl !{̺٘XUT%.YJ GQc cbӚdLcwE6Fe~̚ڠx\ c4#&0uw;;ww0Q:5@;]~bohO2>HqmmhsN)- CVxdqʵa듡f*G4?JSp6bV-8ojKK gv{H=bT3wo܆swƄMw(9X+/Y1(FZ(Ur.K0w`O =O7}ݠ@`kô`SDҲn$glI?% [f;CKҢԂ|Xk=AtӍthRz3B%:v1seAڨ.3  )ߐEvrowUZ+C~t髡棜lZ6S:2c$4x?[(yQXm:۟d8^eCq6TE阧HCY,VtbsR^tqrgN Oh1UYý@OV /,M@=$N-mK=achChzXU;hQ?wrL G`_v(A?̼CjփFwp9Vm@[wsJߌ#z嘚Ŝ 6?a91WT?gXˈWC mD{7_TOx-0?_1ʨ)۠?wH-z$+ (=,oْlܡSLc@mYHlSéT1G7rEV49|)N-w93l+ʵcP cf|Vd|mpSɵo4#g\//p@OKՂYgKwng,=Ϥwҭz[ 5$ 1y/@EK$ NIJugy/W$BLjpHXwݜj󮈑\LDFNcX#Zq$UʀqnBl;6MsO=[X7߮ߩaa,0KVZF#>bT-Eu٨78_2*&?@o8CRY8[\֓ϻɍa3O}u`Q^lGfqUgwVM1 QRnUAbxOcOnrD63E31?o0UlNSњE:G^{tSkϩƣDD-$E_l[c7qDcVk}ytUZ270)56KQYqIi{‰pIE_}޻zKØO9 "5zz.3wxUT~vTl-Szf%!Db[]ķ|rbr`H?8Wu]ިwkXB N`ug{eڶxyn~8j6IuUELkx^xt]aHR/' SnlRY?͔{p{壭̠Z~A? .erᒁ}Ԯrj_> "g}Wza}rȱ?wӘot/mt_{PSo7փbA~X(RXUuC4pMZtH}~(6'mjYi[Nq^pBpjt4<<'p%0!_PLagx@ͼBkM/9rhIh1obg:e4BA3w|{l̄Iތ}d]`jxY3sȬB oJ U;aQ 7XCKа`)D._bluѦUuh3._I}Kx_ŲVx[16{82MJ>i뾾›;hRQfp[ʃrh/gt8 VQ1irocX6fPKIJjb`Ɵ֜W٘Iwhs/ZT 7k"+T?HwB03L"`7s]kݦc}uϨE{xcssx7|gـ/$||_(sa p 'l(v@/B-W,97Zo\mCFyoРO}tOXG7>gɬv?mp;:c0+49ظ*g/o0]j#g8'aW^P@ޤ7+FEOt^lHwhg>@b̷p[poKO.8B +rnu\Az-p*H=uhQEhd!h64<+IԚP[lAI6] d+Qڎ(Q0?B G\$^'*x k [0/hkIp3w'7sб}lnR%Cq$ Awza(Gh CЪx KcT?G6.xOvyixNL )`*x W~Df@; _5wnO̐)[O=4=wϰDG_E񦛱(WȘ[@6!pFgՌ_CUh>{^Q&x'E07.Ti7Bcxb.W~Ԙ$7y ;K3>Q͕ԪLOdGn`L]"'pl cmeV H/@Gp?tJ 3ƐfL֩z8+i䥌PMF#UR0R{VڌР94ڰFC&CZI ?HAـEE]mm$ ʫH,/qgy}0^߼(gtftuk|ԐOea^p,  +]Igh'?~ucX\@,+oh=rQѸ0@39sj=kLghۯрqRI\FcuMiؑРw.QH:cWhl薂vh4 I:[`BmBWj_ŏ4mx^ʾzE}>/&%H!@p;CAcmftj~eeG]Bo^ Gy]<C*ΓhVLOt'븾;x$_* m\Oՠr:RFEv(cz`7瑠hod0$ }ho,NP;ugD-\*=ir\,olsAKbMbGЊlD=qpsϘ MhѼf>X={1EF6xpg{'_h0bȸ%Rpۺ`O9etWB/{ЅD*=)_neD?p3H!9u{ WQwbtv,)gX(Kznc)O`$9be`EQu̀YhƞL5\~`\v]֤ǜg]O~Ĵw{`?{ErdW9Qv[(FumzWgɗbF]k=G[]Bk,1w{jiTqX2{Y;@m[8Mv*0O|lbՐ˨9EUUI2IBkcřsUۤV?ޤbWawƧڠmt\_ұf-wh}i/Q=A_MDtNˈ.9Ye: ?O+?eC6r:/|Cn~08$xWy[ K_)}x/@oh_;_t S܈iukۡL ^Bo՘5I?ǘx̪r>3O?gKTw].]|fYP1mȧ_owL#3UϘ'yM?XuHyۑXYV h#CӬy.?Νפ\=Gsf?~UflZ*[r`7ɘIЪe1 p6SgQq߲H ~c+['Y(GtW,)t떡X7jzHwG?pQ۝Ox~h ߐτ!KUkiR 3[BmEDw/vGmz~;x1K_t2UR%}=li|O3xH}f*Iwՠ6I/"7ׇ4S| =IOrϫgDD|uU4&筠ZsE,[dM7{\CK`.d7Isl7%@Iƺq$-b1_~bQֶz$Yx}y*]l gH>l ;!UX[pXZD>aIE;69wFvܤbKmЈP7a>Ox +~]a"#sjKCH<3Gw&G;YB3VI3~jRyajaQ,+|_4Jh;4Jrxk$xl-We[U75C[ڴR2#nh_/e9?X1d|;CUPc9@[¥RE[rWv7e_5S}fĉypf{};`b$ cVàA]ۋ=qg@ r4/jXyӮVCbqťN#KzZ{#H W~lsgSO`Yү]T˶7~h.X~Roj?\V4;ZI3CkqgI"Xm/Aol(hMzP`]Xe{Ґ|gWsI2҇fiKVxCFDbrNQ>w3HȋY9r:5kn5Ǔvy;?ctW6Qi⡇\͢RapwgZqdGk]=Zmhv|WnvOPq5F,|uyf#sqsOu4LLS`@~9⠃cMYѐp|0-\Əs~ѳӕsxrwdqL‹XoxB1( Cy?EoA^>'J+,\8&qocfaH|H@J\lōvy|jGũŗxɖHSigxSD}MN]|N.It^Uk[CX@dxRSXhp=a{yf{ck!f{Ih^%Σ{inb{]=3irϦkzgXLQјP7ZƦw6T~%s}!!w+R;L۱V9͞z_phB(%\_}XNfĽ͡j?IjdD{ԛiY0<~yڙQ[{sfA(^њu`pZx~g"'׻MfvԺceULerdL/!u>Q~jcsc4A˲aM8}Q!rQT]^Ya뷱{bdP#E3DtJI~ֻq~{mtoco`]ʠ|[m͐xT$f}`m}xoB\cueh7-fܷaxdMmt?Ѧk`5sy Ch^:Cef{ue8K޾YF:Yu|q!$iҏ3Zc'jG?XąTir4Lq=M[b4V߮l\A(ݏ@M'*ϳ[dyO䶬hIPkWBn{ʜϷkwwkwaQZAF15o{_tʺ}fzrrUewX0عS(hҋ7AzHzi}¶Qx_CsFuur=0O_e(?c.k}i[UI[had<`wiŽeԛPYrsT+1C;w:DȶسbV,SЯO8# ~{:LTߺogy{|yq]}# LI~L]pWgݧF4OpexR;wpəQp{kqtE:dpn]Ź^ *w(b3uĤvhqlgsP<#:vjvl|zU= gy^ƹi=xoX˱̒fu=OS)Q^8X‘թPak![bu˧fYVI<"otUb`TZQjuhvQyxbbCAXi\}Qvma28/4FmOfG~qEpeurQY`ˡWXJeyν\jӮgOИ|ayj^YXJ=Yyy@R]s]j9.ML5?E]ooLw9HٴN[YVKWttblf4Uvzsҁxw\]}fQO˴}V7"q}xzsvTC~sPjI"UgylID}dM`ɥyIssouG(,0YE9p׹okfkĞ9Sypjɋ~;QMG@P]F^vq(Whc궂\WsP)H<* 5NRcKad?KjzfC][htKUql`Z|t_FesoUc]?Wlv_??O?Xf|gBVSQjag}pwVuyuKO?CoL@slU?OzuPEF[|hC?ZR?O`^hfAowk}ZJ{|}zyUiaQie}wXCPjw{wcg}S??Ii{zCEqPG_^MGm{VyxI?_}`[w}|\knersdyX}Zby\a{c?[~oxsiIj?Cnt\}i@??gyouJcy[ihU??\UOt\Wtc~omyZePk|s}}TR}mjlyjx}daiPZj`NiiUar\bx`>|LWdoKHepuRfwvpwljdвnUq{u{rYS^zqkRes6FqUj~{Z4MgWhlMIqzZenWtiajyKJujpu~to`|sjshDĕH3+:nhVwx|dl{oNUZjxlf_oRQUfa~{ymciqvp|n~tzrcLYWjeU_~jSwsqJ?Oia\san_eljE8YssavA19lziz}|yz_MJ`x`NũyrxY`rjonsjamh^fnoGHez[usYl|d)4pfwW~US`Mb]woagdyY[ja?Ntrk`N[kmUou}yy\RpwnYp|iqzqOnj[zlEKx`qxyewr[h|wUMq|nzX[|k`ry\I{xxJDfnmnPax`Lgv_ӰsvkRhkwyurjnb|uwhfr|oVhedlreyxk`txgp]LqqTvzf~wkvRXGbsza7&^p}sXikPMssF.HfetuvyucTahjyb[oykqowxcVhpEmyts[xqZM`zP9FX_\rBP^=OhcbXf{UCqtWb`_p~sO~@J\kNDvoqsx|{_xiX\opit`^S3by:O~߼fOnŲxITdb[dHdqSKcwoiFhopz~}ŨjlkmW\T{|lalSgo|^rn||ubXJek/K|PWsr|{[oiwZ+|msgp{aqi^ý{]m~uvH?ceoq]RJDM_T_}vvse̪pyxZo|oktnXrW@X˹yvQ;Oz`PCg][_Zjqv}ppzag{nwmamxppQ\[iΡ^Q`}uA?Kl_dslk\KDZtuc`VNbwGRl~cai3Xvrd{_vbKPrjtk^aksU2WЕo~iZdbejpVq|iQSrclCKa\n0,]vPdguyopuclp?[]u]m}w_`}}p{ZLUTMvmlsZX\@DCSeztwz~qgpw`d_rv`VXij|x|e{|gZzvgl][uqaf|q_m}\bVs~z|vrW@FBfmOeEN}ĹfQfp[Q\oxjxz}~[WdugnsȠlbjZRW~W=8>ezǚ}c_vrvx\=Pd\Tjgo~R\P|bnOSdpe|x?cIVXiYWVmt}~YWrkYDM`Y~ɰpgobYktaz[n_ŴIZ_MOk{kReb{~|VNT]wkjuW]ichl{}rW/Nwmjt0y -\<MQA[f=Wm﮿+S_h Fִh)몉̩Զ~EFJjT!^ZP ?tƻfbd0؆7{|/bq[vYTߴ;#]@ nX:5i2}cLVDm=;;\&S{tHBRuaI߀h泃zm>Eէ֘<QTG'*<[i\{cᴖ~/Iy$,9wXNѡ(xQ$zjd5_}roLjv8 &enjRJzk~L?m`/irL !jFHYj6n{<-= -ZoXI]˨bv9JfXOptB4+oڸʰe7BʤzeC{J}\&M\WV O~r:gozM8>78MɦۀOz}zd?h;Ц|DH%` 9X齘twftC𰁕F9eY~B8SHc +鸱a[}w;-W}r(Y|9>0jݨqt&Dl]lx1\asԶuC;紌ruoUoPelsձWl+(FgJ7/{Կ뚑4$T\lOjҫ|CƖ,_Ȝ_M/AihLbgcĂYwuyU#S}$}͢zZ[zKgNWİ|qKikXr:[}gd@nt^aPV{ԔPhcl\4XL.:irK*8ة|:9VL׼󹩂~>$h;rf o:7㔙l%&at\B WecxaM9wZO|rr(#MX2QpHgdaShh8,I]}]Ubmmjvuʔ^r@ WôbSiwjBF)[ǁv70MX˺`Cp42"tCumrwp,:?6R G͢rA]dA0#)G?,EJstbnqf~w광pDSxytaxq{= Ex]]~umwY}xktPEmw1"kdDZ}aeP>C9:3$Arual̰wpXbyxW5Kymqxl̥PG{a> +>==bpkfIW}vyScu|xjzu1P|teuƹspP,!5;6GdxQx,7cJ_L)'y,g`EclbSw^Vr|kbҤtd|}T)304?74Uli`Ns¦V;/EyЈ;0o͢dvRGrynxve\\xkPXnxz|k=-K(6(1–VJtֽime`j|n`XNNq{n,1bQ1*!+1Fni8|QSsfJQ~tHqĸppzbltrrjoܼҷfQ6&, *+7^N(So@(IJؙ\mơQJׄNZEotHaʦzhbPеŴpMRRh- ;Vq:Bae:C{nOKPZIMt_P2{Ɛ˜szoHHeHm(*VxPU&_eXs[̂d7AG -erJGPj_oiftL04>ˡriլtbV'&MrV>[xu͔2>SouhTeVRsf81474]w͵Ϸx*7 dJJqqQ6Ss[ެvj47>lSrH<> +2MtgWJ+U8[rNXUq`Lxeej;ri%!4a>>Qݞ_3diX<4-: :,!u?[pm@8AПZ2UoJioz%yR1ìܱ|/YlB,&\&&RosâȻP0wz}R4GPȾdj]JUdjeyܚbKGdWDCP'n< &AvxfLcvYR`twlVFǡھ«f6Z:.2Wj=2!7Ro`Yz`KTttjipRgFDdcj``䗕ZE{΢Ժ|tb"8"=R 1% EjfZc09Twzmr{ZUhRH2.cFoϱٴ¦Õ{ynMxh_|ϾPCYD8^yL "op #.o^9MِtA Kt&?Ƒ׼D0cžmtValqn2AF?Τ|lqjoPE<=_r5e`#T5Ot0M39>]U3H<˔[׸jNY`)+9dK0GQ2KWh.]oTwKС` Wߪgu!'gäwd{sɨ/US{\Z8wxl ;y23d3UA?N?`)wdR.8{0 kp `E r>ZʅISr8MNx_WɟdXŹ|Q|;(bL;yodZ>h7Z(9DD@oW8|R}ﱯQHQo|{J#)wr6Iߺ~ʸʩ\%XWQo8 7o}PW$_ԢjϭdrZKv;٠ìk _ɀqT|UE"10g.6KAR℟) _]Lf4?D$.NS#iqb:Idtd`F|lꐓВ_p qʲѨj2AaKB+"25h\`_DzYd8O8Omwnj6]W]52в`PӐy3JF[f]^tpp/guB-!i]>WX?ȩtv@guc@@FOs-%cBb4i~TQzoħk\;ЬX?W˴ڭUstwP3qR(篱j_DB<)GishKHf䞡֩` AYkO@"SmTEe\_`Kerh4pn)*t@=لźb/Zb˷ĬӺڠA6_xL\̢_aJ<`^~nC6/of&.=hh^uTk}Vdh3-FW~UOZhg`g}rֹjJkd! )sܼ}u_jv{L%Zo^ttRrwgtsW༦z…mmnnoE(BeV[d_ujVrfgo?3umy~e{qud::9#0eu[]}qwrfrdKRrsrmquv~y]1Iomtgʟ^IlL.$&5ON?\ìvdLMwSbivtie8@up`qŷ~uI56Tf`W?spH87J~up.*~|d{OUrwr\joXduywf6=Y&C&(, O筐Ycɸrtipwne_Og~~m~yX"SZ>>/!37@V~TFtR`ydZw_kȨn֌`purpok}ĮʱhME&)))5WO%(HqH &"{ԏZkT6˄ET@[rHMskaV̸´]hSuD% -NjP/QltDSvVT[cUZxmY=ĉwykIEvbNh-&Np|OW1MkVwz]Ƃg<QemRRmL@KheZbtĔttuXNW7GZa]d|tȖ\Wкȩȴ~zT)3B1RU9??.5cvuhi56Ply^Z|ÞUJ?MnXܿů˰|bWth]qƮ{NAKBIZk}:5dh (.moKMŚkMDR;:ݩUCm͹t[^n2(wd0OI[ˬ{wqVRIUkyHaqR-^|6c\;O̘&*6TnH&;G̨c̭̾rOkX'"8NWljtwgfY:@_xyvvJ,?e{k\kup{qtnomllpnuvz||||}{}|{zz||zx~{~{xvqrmmllklklidgdjnh[a|fpvg^qohT?ţ9=nPe΋="cf?g| pw6Wo{<&wO 5sp*ZvJ[sfw4[pfP'{|v{oqW̓=r0iop=`_@(eY4]NAW /fA8mSۼw@7߰ds`0 w7p %t0Y;טT<`h-WiQ}v 3<SyY~t+YxCdzsP^b um[RL8)݄qD[X5m[l=E0ZxdVYMuz!dh9MwGL#CCctS:,*߯ P<3Eg-oP x%@C2ݰ@*At' Qnv gOŤ+[djyuRj0O.gٸ 3r<{̘E 9vPJ1G$3eTORJ}|Onm7uD_|owEC3ZH"=4XjsoT>DsPW "gShE¬_ h=d7Xg('PҨB'sA5l 3`]_JGKPq,oAqx(Nt-)G˳l_cKWytªH'xyH%g7ڨ{{}/nKeND;BK^Hmw`DWg#x[̸{ZkuUT5q se{`E{\';"3{ΰZNH7B#MY`: ˸>O̲f:{h[Nmu?alP PerdrGa01x6{c?FwaObYǤP#Ǩ 1|/'c Iv;wtoScg`Vtro1aq5LۤP7eKjwD$EYCMkDWcQqdC-źr6-{нPE_fp {ˋժ 3I]_E[GG#7fJPwPkwA6dԗIϼۈ$+k{ӫl$π2RGhOZ{]-?XAO|š@Ct ;_4.onj?e3_z)|݀??c@7|ASsGed?3/(_Bc6Iw*Z`Joۄ&X ۮ@7>YJ}3QpMP$!WQߊNgh!{h7EGp"=\1alHj]Rgd:\:c|pCNeJdcyH+ʐ'g`IC-ohUiU7P:KØ$Sþ[ez/XN*G3CV[Qo`9mî2;B*N:ߢOx#Y?z9WB}P!yg4E0g߾?kT&iIA?,q9_e}N]d/jWm~`UhyHH'wy}PNwz*sjhI_e8bh"xsdjt*:kѝu7x>t(uʤSYa0-z ?}x)s|72/Ĉj>`ec>C+wEu~w,/'Su}`4^6vCjRCVE_X6lwS/Eɛ`sX_[Yrq/,k`22jPVr?r`M_gTQwgYаq;Pl@2_ɯެA .>T!SЊQW/l 'FGP ;oP%F4XHsXyzy,KI{P;u,0cd(sJI'gڴPlT{LRkrCcp4 Q#%5spSNNG/?d|DxkkTJqpfՐ5kDO:llHvcxê#Z5XFGx<`Q,X?wKy[ѝK5;@5]Ho˒}KBTm{iv_llkXJ$cPiF=L3D{'SELAHʿ8):8+ySxPLZa2Dw|%O^X@/tlKt%A< Kr0'ho?dJzFw$?oR;XuN`0aYH9|]o`W(COtmt~BC?S{'qhw֠gHK{|-wR̚jV-+ě^QL7vkFu\'5װ_c&;2Ewo^ YBPGXSߘ?\w!Xwpĺ;p[aQ\vsY͐ɬ()mq{٬(=[WSLYfo=C8g㬜`qoy}йg~v9_D%.:(Czx2.rNHl:O鿂}z:CDDRjzj8sb` [n8-qngähsrII,WxW8C_{VNkx?XX8 0Sme/s҆FX@).{ͬ$}Otc>ct6vo>1>o\/ZxgQd*'k&%DeoЁ@s eE_oP+cL51z˘K~М"?0q[(kGwAbdn|qkēRUVZ$㘸L3n#fJ'Cqc3 shETc/Ǵ&%sX_hU'S}w`{01].6T!xLX ^w~8AW`ɝϳx0rtp*1xQhK\eWCRHW7sdG#yZT)V?yl ߨ?\1_ݷd[tCe+<;`23>;s\O|D[ې1SC`Jvg̀nVZ:I.6Wj06:'O͚f ]PTGV?uźӖH}}< td4W֫6?ͯFo#QQ{jyawtHumzg`_F=p"®d'vohSu2 ?p$3`b~g_L^[R;+ܛ r}pkô%oװF6 ejo?wh&̨ dk@媽ࠛ(iagrƲ@'}Ot [AUDNgSPoXC`WбxUx_݌#8`zR^wR1?_WwR27pbZc碥Ԣln_k_oT_y^hhP?{|@Y]xGdNJodI~u{< AiϯnOjD+ ]J0g}lGh>ex'6sfwt(ghڊ(9$)gÑ}Օb6 2}Ɠly4:A#oU­D7AiIeZ:GrȘYJP7s̜xkx?fI{ۙIފ~[GZdQXE@qeN{MKkamrgtxM¹MOtJE9wvTWw}bxl[x}fcFLAZ[?i|'EjdiwrzhgζVtVGobCL5裏H/oʰÒQ8Wj;}\{hŞLeaƂh!nĠTOEbPHUF0oՐ)2zشpRؚ:GSH[έ,9mfyzН"ҷѻ?{x)™fT[`ٗhVW$-=;dX/驉(,fm{t‘~@{|~ZFon̾h5)@A#eMSXX$D3ŠWߒ~VFad?ɀ+H_`0s0wߙ7_8GYMt>%oϩ`E`!zrX /uĤvpP+IiXjzɬFgnv_w#S7QL"F[,=݈ozoK74gɹ`ZEDoDJr[xmT:8pqdk> k% rɏt8͈q{0o`8SqLqX^iXq[!MǴ\);H_ȑw2Q:?ʽ\$0lҌ{[khmZSD~t'okPGŦlo3JYcFSca=wzca@CB_|XG؛v2_t\7%_GszWgq~TIJɮ|xE&:Ds~Ӂem]TlYtMͤt#cf?|!`I_CȲH,,NlFL֨t:szǻ2 zn/u^[l/usnr:f՚};W0EƀQ_9Sӕ?shVdetwǓzkmCu:"Sբڇ̈.?XKczCeVcN[`-;|8jZyZȽ}uDŽy\|`enXF\DMY\BomWZȥuН\7@'6=U^MbT2O}5*HoiqdC'JItZEwtLb^}rr>%` yU8OӨUbie;uwo dGBi/fsgxzaXuٙfnN]mTLZslG`>`HT41=B9qLC1GXzCE]ttdh͖6Ar\x4O"6NOiXj|D73`W҈Wk807cZpkMėuxpO~zkݴ_٪[Z#TTC氅H~ qɁqlar#FQH^ڣXpVuDBOiJuRA-I{9Y]XGSLQQ\-o0/xmJD1[Ŕg(/\XA4'cq =fsx`O;N7_lRN؈F9iZbP3W¥T[WVrb\NȲBBfc}PI]Mo\d]uwvqR_Wnj[ʚ.BcfkpycՆ]vrdDzfY~nlZ%ywi|LF)rq~lp~36oheذǹ[}x'?\aWqLoɚGaliy~hutPyzrXm7Q=Kl' Un|ewaN9p=h䔆recb[vȺll_{@5hlrkad=/qv`Sfbg}P]ZY{Ǣb'E`PszR^you9HSҒmljd_\`n~}tt|w}zx|{rs{umpnqmrwqxvyxw}{z||q{~lozuzwp|{v|urqvmqvjrkuxz~rzmzxkoy{qxyw~}y~rwxclygwW[lvokjgw|hKUCE"**1move.l txt_addr,phere ;Point to character before sub.l #1,phere ; do_letter addq.l #1,phere ;Point to next char move.l phere,a0 ; clr.l d0 ; move.b (a0),d0 ;Get letter cmpi.b #0,d0 ;Is it Restart? beq prestart ;Yes then restart!! cmpi.b #13,d0 ;CR beq do_letter cmpi.b #10,d0 ;LF beq do_letter do_it subi.w #32,d0 ;Take away ascii offset asl.w #3,d0 ;Multiply by 8 to get table offset lea in_set,a0 ;Get base of char data adda.l d0,a0 ;Find letter we want lea this_char,a1 ;Copy it*************************************** * * * Fingerbobs New Year Demo Loader * * * * By Oberje' * * * * Plays Sample and displays pictures * * whilst loading and relocating the * * demo! * * * *************************************** ln equ 99087 go move.l a7,a5 ;Need this! move.l #mystack,a7 move.l 4(a5),a5 move.l $c(a5),d0 add.l #$100,d0 move.l d0,-(a7) move.l a5,-(a7) move d0,-(a7) move.w #$4a,-(a7) trap #1 add.l #$c,sp dc.w $a00a ;Mouse off clr -(a7) ;Low Res pea $78000 pea $78000 move.w #5,-(a7) trap #14 add.l #12,a7 clr.l -(a7) ;Super mode move.w #$20,-(a7) trap #1 addq.l #6,a7 move.l d0,oldstack move.l #0,$ff8240 ;Blank Palette move.l #0,$ff8244 move.l #0,$ff8248 move.l #0,$ff824c move.l #0,$ff8250 move.l #0,$ff8254 move.l #0,$ff8258 move.l #0,$ff825c lea bs,a0 ;Copy sample to top of memory lea $5f960,a1 move.l #(100000/4)-1,d0 smploop move.l (a0)+,(a1)+ dbf d0,smploop lea pic2,a0 ;Copy first picture to screen lea $78000,a1 move.l #(32000/4)-1,d0 picloop move.l (a0)+,(a1)+ dbf d0,picloop movem.l cols2,d0-d7 ;Picture palette movem.l d0-d7,$ff8240 move.l oldstack,-(a7) ;Back to user mode move.w #$20,-(a7) trap #1 addq.l #6,a7 lea vars,a6 ;Start playing sample move.l #$5f960,start(a6) move.l #ln,len(a6) move.w #$ffff,loop(a6) move.w #2,speed(a6) jsr play ;Start sample move.w #8,-(a7) ;Wait Key trap #1 addq.l #2,a7 clr.l -(a7) ;Super mode move.w #$20,-(a7) trap #1 addq.l #6,a7 move.l d0,oldstack move.l #0,$ff8240 ;Blank Palette move.l #0,$ff8244 move.l #0,$ff8248 move.l #0,$ff824c move.l #0,$ff8250 move.l #0,$ff8254 move.l #0,$ff8258 move.l #0,$ff825c lea picture,a0 ;Copy second picture to screen lea $78000,a1 move.l #(32000/4)-1,d0 picloop2 move.l (a0)+,(a1)+ dbf d0,picloop2 movem.l cols,d0-d7 ;Picture palette movem.l d0-d7,$ff8240 move.l oldstack,-(a7) move.w #$20,-(a7) trap #1 addq.l #6,a7 pea env ;Load demo pea env ;But do not execute pea name move.w #3,-(a7) move.w #$4b,-(a7) trap #1 add.l #16,a7 move.l d0,progstart jsr halt ;Stop sample run clr.l d0 ;Best start with clr.l d1 ;a clean slate! clr.l d2 clr.l d3 clr.l d4 clr.l d5 clr.l d6 clr.l d7 movea.l #0,a0 movea.l #0,a1 movea.l #0,a2 movea.l #0,a3 movea.l #0,a4 movea.l #0,a5 movea.l #0,a6 move.l progstart,a0 ;Execute demo! ( No Return! ) move.l a0,4(a7) ;Must give Base Page move.l #run,(a7) ;And a Return Address! add.l #256,a0 jmp (a0) even oldstack ds.l 1 vars dc.w 0 ;Speed of Sample speed rs.w 1 ;4=20KHz,3=15KHz,2=10KHz,1=7.5KHz,0=5KHz dc.w 0 ;Looping ? 0=Looping off loop rs.w 1 dc.l 0 ;Start of Sample start rs.l 1 dc.l 0 ;Length of sample len rs.l 1 dc.l 0 ;Low position in sample begin rs.l 1 dc.l 0 ;High position in sample end rs.l 1 dc.l 0 ;SP store save_sp rs.l 1 dc.w 0 ;SR store save_sr rs.w 1 dc.b 0 ;Sample $ff=on $00=off s_on rs.b 1 ;>>Routines only RESET this, set yourself dc.b 0 ;HEAR $ff=off $00=on s_hear rs.b 1 ;>>When on cause WAIT to exit instantly dc.b 0 ; Useful for when sample has finished! dc.b 0 ********************************************** * Dummy Routine for non-implemented routines * ********************************************** dud rts ************************** * Wait for Sample to End * ************************** wait movem.l d0/a0,-(a7) lea vars(pc),a0 tst.b s_hear(a0) ;Test for Hear option beq.s endwait ;0=Hear ON st s_on(a0) ;Siganl Sample ON check tst.b s_on(a0) ;Is it still playing ? bne.s check ;Yes, check again endwait movem.l (a7)+,d0/a0 rts *************** * Halt Sample * *************** halt movem.l d0-d7/a0-a6,-(a7) ;Save Regs clr.l -(a7) ; move.w #$20,-(a7) ; trap #1 ; addq.l #6,a7 ;Enter Super mode lea vars(pc),a0 ;Base of variables move.l d0,save_sp(a0) ;Save SP move SR,d0 ;Save SR ori.w #$700,SR ;Raise IPL to 7 (Stop all interrupts ) bclr #5,$FFFFFa07.w ;Turn Interrupts off (IERA) bclr #5,$FFFFFa0B.w ;(IPRA) bclr #5,$FFFFFa0F.w ;(ISRA) Bit 5 = Timer A bclr #5,$FFFFFa13.w ;(IMRA) move.w d0,SR ;Restore SR sf s_hear(a0) ;Hear ON sf s_on(a0) ;Siganl Sample OFF move.l save_sp(a0),-(a7) move.w #$20,-(a7) ; trap #1 ; addq.l #6,a7 ;Back to user mode and exit movem.l (a7)+,d0-d7/a0-a6 rts ; *************** * Play Sample * *************** play movem.l d0-d7/a0-a6,-(a7) ;Save Regs lea vars(pc),a0 ;Base of variables move.l start(a0),d7 ;Get Sample Start move.l d7,begin(a0) ;Put in Begin address add.l len(a0),d7 ;Add on length move.l d7,end(a0) ;Put in End address clr.l -(a7) ; move.w #$20,-(a7) ; trap #1 ; addq.l #6,a7 ;Enter super mode lea vars(pc),a0 ; move.l d0,save_sp(a0) ;Save SP move SR,save_sr(a0) ;Save SR clr.b $484 ;*** Keyclick OFF! *** ori.w #$700,SR ;IPL=7 : Stop all interrupts bsr setsnd ;Set up sound channels lea freq(pc),a1 ;Base of Speed table move.w speed(a0),d0 ;Get Speed andi.w #7,d0 ;Mask off Rubbish lsl.w #2,d0 ;Multiply since is Longword Table move.l (a1,d0.w),d0 ;Get Timer Presets from table pea I_play(pc) ;Timer A (Sample) Interrupt Routine move.w d0,-(a7) ;Timer A - Data swap d0 ; move.w d0,-(a7) ;Timer A - Control move.w #0,-(a7) ;Select Timer A move.w #$1F,-(a7) ; trap #14 ;XBTIMER adda.l #$C,a7 ; lea vars(pc),a0 ;Base of variables st s_hear(a0) ;Hear OFF sf s_on(a0) ;Sample OFF - Only used by WAIT move.w save_sr(a0),SR ; move.l save_sp(a0),-(a7) move.w #$20,-(a7) ; trap #1 ;Return to User mode and Exit! addq.l #6,a7 ; movem.l (a7)+,d0-d7/a0-a6 rts ; ************************* * Set up Sound Channels * ************************* setsnd pea snddata(pc) ;Sound commands move.w #$20,-(a7) ;Call DOSOUND trap #14 ; addq.l #6,a7 ; lea vars(pc),a0 ;Restore a0 rts ; ******************** * INTERRUPT : Play * ******************** I_play movem.l d6-d7/a5-a6,-(a7) ;Save regs lea vars(pc),a5 ;Base of variables movea.l begin(a5),a6 ;Get Begin clr.w d7 ;Ensure d7 is clean move.b (a6)+,d7 ;Get Byte to play andi.l #$ff,d7 addi.b #$80,d7 cmpa.l end(a5),a6 ;Are we at End ? bgt.s Looptst ;Yes, Branch and test for looping move.l a6,begin(a5) ;Update Begin Address bra I_out ;Jump to output section ;Sample is finished and doesn't loop I_End move SR,d7 ;Save SR ori.w #$700,SR ;IPL 7 bclr #5,$FFFFFa07.w ; bclr #5,$FFFFFa0B.w ;Timer A, tidy bclr #5,$FFFFFa0F.w ;up registers bclr #5,$FFFFFa13.w ; sf s_hear(a5) ;Hear ON sf s_on(a5) ;Signal Sample OFF move.w d7,SR ;Restore SR movem.l (a7)+,d6-d7/a5-a6 ;Restore Regs rte ;End of Interrupt ;Sample is finished, check for looping Looptst sf s_on(a5) ;Signal Sample OFF tst.w loop(a5) ;Test for looping beq.s I_End ;No, Jump and finish off move.l start(a5),d7 ;Get Sample start move.l d7,begin(a5) ;Place in Begin add.l len(a5),d7 ;Add on Length move.l d7,end(a5) ;Place in End movem.l (a7)+,d6-d7/a5-a6 ;Restore Regs bclr #5,$FFFFFa0F.w ;End Interrupt rte I_out add.w d7,d7 ;Get 2 * .L add.w d7,d7 ;offset add.w d7,d7 ;offset move.l sndtab(pc,d7.W),d6 move.w sndtab+4(pc,d7.W),d7 movea.l #$FFFF8800,a6 ; movep.l D6,(a6) ; movep.w d7,(a6) ;Output Sound movem.l (a7)+,d6-d7/a5-a6 ;Restore Regs bclr #5,$FFFFFa0F.w ;End Interrupt rte ; *********************** * SOUND LOOKUP TABLES * *********************** * * 3 words for each of 255 possible volumes * ( Runs Loud -> Quiet ) * * 3 channels gives 16+15+15 volumes ??? * sndtab dc.w $80C,$90B,$A09,0,$80C,$90B,$A09,0 dc.w $80D,$908,$A08,0,$80B,$90B,$A0B,0 dc.w $80D,$909,$A05,0,$80C,$90B,$A08,0 dc.w $80D,$909,$A02,0,$80D,$908,$A06,0 dc.w $80C,$90B,$A07,0,$80D,$907,$A07,0 dc.w $80C,$90B,$A06,0,$80C,$90A,$A09,0 dc.w $80B,$90B,$A0A,0,$80C,$90B,$A02,0 dc.w $80C,$90B,$A00,0,$80C,$90A,$A08,0 dc.w $80D,$906,$A04,0,$80D,$905,$A05,0 dc.w $80D,$905,$A04,0,$80C,$909,$A09,0 dc.w $80D,$904,$A03,0,$80B,$90B,$A09,0 dc.w $80C,$90A,$A05,0,$80B,$90A,$A0A,0 dc.w $80C,$909,$A08,0,$80B,$90B,$A08,0 dc.w $80C,$90A,$A00,0,$80C,$90A,$A00,0 dc.w $80C,$909,$A07,0,$80B,$90B,$A07,0 dc.w $80C,$909,$A06,0,$80B,$90B,$A06,0 dc.w $80B,$90A,$A09,0,$80B,$90B,$A05,0 dc.w $80A,$90A,$A0A,0,$80B,$90B,$A02,0 dc.w $80B,$90A,$A08,0,$80C,$907,$A07,0 dc.w $80C,$908,$A04,0,$80C,$907,$A06,0 dc.w $80B,$909,$A09,0,$80C,$906,$A06,0 dc.w $80A,$90A,$A09,0,$80C,$907,$A03,0 dc.w $80B,$90A,$A05,0,$80B,$909,$A08,0 dc.w $80B,$90A,$A03,0,$80A,$90A,$A08,0 dc.w $80B,$90A,$A00,0,$80B,$909,$A07,0 dc.w $80B,$908,$A08,0,$80A,$90A,$A07,0 dc.w $80A,$909,$A09,0,$80C,$901,$A01,0 dc.w $80A,$90A,$A06,0,$80B,$908,$A07,0 dc.w $80A,$90A,$A05,0,$80A,$909,$A08,0 dc.w $80A,$90A,$A02,0,$80A,$90A,$A01,0 dc.w $80A,$90A,$A00,0,$809,$909,$A09,0 dc.w $80A,$908,$A08,0,$80B,$908,$A01,0 dc.w $80A,$909,$A06,0,$80B,$907,$A04,0 dc.w $80A,$909,$A05,0,$809,$909,$A08,0 dc.w $80A,$909,$A03,0,$80A,$908,$A06,0 dc.w $80A,$909,$A00,0,$809,$909,$A07,0 dc.w $809,$908,$A08,0,$80A,$908,$A04,0 dc.w $809,$909,$A06,0,$80A,$908,$A01,0 dc.w $809,$909,$A05,0,$809,$908,$A07,0 dc.w $808,$908,$A08,0,$809,$909,$A02,0 dc.w $809,$908,$A06,0,$809,$909,$A00,0 dc.w $809,$907,$A07,0,$808,$908,$A07,0 dc.w $809,$907,$A06,0,$809,$908,$A02,0 dc.w $808,$908,$A06,0,$809,$906,$A06,0 dc.w $808,$907,$A07,0,$808,$908,$A04,0 dc.w $808,$907,$A06,0,$808,$908,$A02,0 dc.w $807,$907,$A07,0,$808,$906,$A06,0 dc.w $808,$907,$A04,0,$807,$907,$A06,0 dc.w $808,$906,$A05,0,$808,$906,$A04,0 dc.w $807,$906,$A06,0,$807,$907,$A04,0 dc.w $808,$905,$A04,0,$806,$906,$A06,0 dc.w $807,$906,$A04,0,$807,$905,$A05,0 dc.w $806,$906,$A05,0,$806,$906,$A04,0 dc.w $806,$905,$A05,0,$806,$906,$A02,0 dc.w $806,$905,$A04,0,$805,$905,$A05,0 dc.w $806,$905,$A02,0,$805,$905,$A04,0 dc.w $805,$904,$A04,0,$805,$905,$A02,0 dc.w $804,$904,$A04,0,$804,$904,$A03,0 dc.w $804,$904,$A02,0,$804,$903,$A03,0 dc.w $803,$903,$A03,0,$803,$903,$A02,0 dc.w $803,$902,$A02,0,$802,$902,$A02,0 dc.w $802,$902,$A01,0,$801,$901,$A01,0 dc.w $802,$901,$A00,0,$801,$901,$A00,0 dc.w $801,$900,$A00,0,$800,$900,$A00,0 dc.w $80E,$90D,$A0C,0,$80F,$903,$A00,0 dc.w $80F,$903,$A00,0,$80F,$903,$A00,0 dc.w $80F,$903,$A00,0,$80F,$903,$A00,0 dc.w $80F,$903,$A00,0,$80E,$90D,$A0B,0 dc.w $80E,$90D,$A0B,0,$80E,$90D,$A0B,0 dc.w $80E,$90D,$A0B,0,$80E,$90D,$A0B,0 dc.w $80E,$90D,$A0B,0,$80E,$90D,$A0B,0 dc.w $80E,$90D,$A0A,0,$80E,$90D,$A0A,0 dc.w $80E,$90D,$A0A,0,$80E,$90D,$A0A,0 dc.w $80E,$90C,$A0C,0,$80E,$90D,$A00,0 dc.w $80D,$90D,$A0D,0,$80D,$90D,$A0D,0 dc.w $80D,$90D,$A0D,0,$80D,$90D,$A0D,0 dc.w $80D,$90D,$A0D,0,$80D,$90D,$A0D,0 dc.w $80E,$90C,$A0B,0,$80E,$90C,$A0B,0 dc.w $80E,$90C,$A0B,0,$80E,$90C,$A0B,0 dc.w $80E,$90C,$A0B,0,$80E,$90C,$A0B,0 dc.w $80E,$90C,$A0B,0,$80E,$90C,$A0B,0 dc.w $80E,$90C,$A0A,0,$80E,$90C,$A0A,0 dc.w $80E,$90C,$A0A,0,$80E,$90C,$A0A,0 dc.w $80D,$90D,$A0C,0,$80D,$90D,$A0C,0 dc.w $80E,$90C,$A09,0,$80E,$90C,$A09,0 dc.w $80E,$90C,$A05,0,$80E,$90C,$A00,0 dc.w $80E,$90C,$A00,0,$80E,$90B,$A0B,0 dc.w $80E,$90B,$A0B,0,$80E,$90B,$A0B,0 dc.w $80E,$90B,$A0B,0,$80E,$90B,$A0A,0 dc.w $80E,$90B,$A0A,0,$80E,$90B,$A0A,0 dc.w $80D,$90D,$A0B,0,$80D,$90D,$A0B,0 dc.w $80D,$90D,$A0B,0,$80E,$90B,$A09,0 dc.w $80E,$90B,$A09,0,$80E,$90B,$A09,0 dc.w $80D,$90C,$A0C,0,$80D,$90D,$A0A,0 dc.w $80E,$90B,$A07,0,$80E,$90B,$A00,0 dc.w $80E,$90B,$A00,0,$80D,$90D,$A09,0 dc.w $80D,$90D,$A09,0,$80E,$90A,$A09,0 dc.w $80D,$90D,$A08,0,$80D,$90D,$A07,0 dc.w $80D,$90D,$A04,0,$80D,$90D,$A00,0 dc.w $80E,$90A,$A04,0,$80E,$909,$A09,0 dc.w $80E,$909,$A09,0,$80D,$90C,$A0B,0 dc.w $80E,$909,$A08,0,$80E,$909,$A08,0 dc.w $80E,$909,$A07,0,$80E,$908,$A08,0 dc.w $80E,$909,$A01,0,$80C,$90C,$A0C,0 dc.w $80D,$90C,$A0A,0,$80E,$908,$A06,0 dc.w $80E,$907,$A07,0,$80E,$908,$A00,0 dc.w $80E,$907,$A05,0,$80E,$906,$A06,0 dc.w $80D,$90C,$A09,0,$80E,$905,$A05,0 dc.w $80E,$904,$A04,0,$80D,$90C,$A08,0 dc.w $80D,$90B,$A0B,0,$80E,$900,$A00,0 dc.w $80D,$90C,$A06,0,$80D,$90C,$A05,0 dc.w $80D,$90C,$A02,0,$80C,$90C,$A0B,0 dc.w $80C,$90C,$A0B,0,$80D,$90B,$A0A,0 dc.w $80D,$90B,$A0A,0,$80D,$90B,$A0A,0 dc.w $80D,$90B,$A0A,0,$80C,$90C,$A0A,0 dc.w $80C,$90C,$A0A,0,$80C,$90C,$A0A,0 dc.w $80D,$90B,$A09,0,$80D,$90B,$A09,0 dc.w $80D,$90A,$A0A,0,$80D,$90A,$A0A,0 dc.w $80D,$90A,$A0A,0,$80C,$90C,$A09,0 dc.w $80C,$90C,$A09,0,$80C,$90C,$A09,0 dc.w $80D,$90B,$A06,0,$80C,$90B,$A0B,0 dc.w $80C,$90C,$A08,0,$80D,$90B,$A00,0 dc.w $80D,$90B,$A00,0,$80C,$90C,$A07,0 dc.w $80C,$90C,$A06,0,$80C,$90C,$A05,0 dc.w $80C,$90C,$A03,0,$80C,$90C,$A01,0 dc.w $80C,$90B,$A0A,0,$80D,$90A,$A05,0 dc.w $80D,$90A,$A04,0,$80D,$90A,$A02,0 dc.w $80D,$909,$A08,0,$80D,$909,$A08,0 ************************* * Speed/Frequency Table * ************************* ;First word = control - Event count mode divider ;second = data - Events to wait before generating interrupt freq dc.w $03,$1F ;Divide by 16, Wait 31 - 5 KHz (4166Hz?) dc.w $01,$52 ;Divide by 4 , Wait 82 - 7.5 KHz (6172Hz?) dc.w $01,$3E ;Divide by 4 , Wait 62 - 10 KHz (8196Hz?) dc.w $01,$29 ;Divide by 4 , Wait 41 - 15 KHz (12500Hz?) dc.w $01,$1F ;Divide by 4 , Wait 31 - 20 KHz (16666Hz?) dc.w $01,$1F ;Divide by 4 , Wait 31 - " dc.w $01,$1F ;Divide by 4 , Wait 31 - " dc.w $01,$1F ;Divide by 4 , Wait 31 - " ************************** * Sound Channel Commands * ************************** snddata dc.w $0200 ; load reg2,$00 Chan B - Fine Tune dc.w $0300 ; load reg3,$00 Chan B - Coarse Tune dc.w $0400 ; load reg4,$00 Chan C - Fine Tune dc.w $0500 ; load reg5,$00 Chan C - Coarse Tune dc.w $07FF ; load reg7,$ff Everything off! dc.w $0900 ; load reg9,$00 Chan B - Amplitude dc.w $0a00 ; load reg10,$00 Chan C - Amplitude dc.w $FF00 ; End sound commands even env dc.l 0 name dc.b "\decade.dat",0 even progstart ds.l 1 ds.l 100 Declare storage required mystack ds.l 1 for stack 101 .L ( 404 bytes ) ************ * THE END! * ************ section data smp incbin "\lfb_bong.sam" bs equ smp+12 even pic incbin "\nyd.pi1" picture equ pic+34 cols equ pic+2 even zzz incbin "\nyd2.pi1" pic2 equ zzz+34 cols2 equ zzz+2 A1)+,$19(A0) BRA read nz_freq MOVE.B (A1)+,nz_f BRA read vibe_set MOVE.B (A1)+,$2A(A0) MOVE.B (A1),$29(A0) MOVE.B (A1)+,$2B(A0) BRA read gl_up BSET #7,0(A0) gl_dn BSET #3,0(A0) BRA read vibe_0 CLR.B $2C(A0) BRA read vibe_1 MOVE.B #$40,$2C(A0) BRA read vibe_2 MOVE.B #$C0,$2C(A0) BRA read toggle BSET #1,0(A0) BRA read pause CLR.B $1E(A0) BRA valued mz_ch SUBQ.B #1,$1B(A0) BNE gliss_it CLR.!"23CDTUefvww0&ᇁ6>x  ?nx``g3Hb ɼXp  ???< p 8%0.x``g3 `o΀ JL ???Jn,(@F_< !G10~x`B$cЀRY@?  r3 0?Da "~a @D{<@?0?00`f{|0xD `&'?$ \1?~a !co}̈́| O?<?xaW`rxyop IA,O0O?<?xaQ@ʍ ?4Thlxyo1<ߨ T}^?D38C0>~ ?X  d" @OO7J` Nl, 38C0>~āH*GTRP??7Bu]au.@??<||$@PH$ @ ~`?? P#p?@|@???||@~L C@r`#~`??^]'"N0?J=xx||?Oa1Ϗ %T{_tw?xx|| 2nlra#*A3Ǡl?????`O?__z0?"/'_,n/Kx>??`O?Nj2'1>>v6 7?|lV)0d @x ]|@0 ?<<-l'`W t@x eO@#*\z{?<2)k>b{#ܕ=>@?~x@+5@\3 gx <_=3nB1^@?~*gv_@3 gx <~VO{?T''g@?žaVmDad2 o#?p00?~a`xxF C*^y@+9[7:@?ƞa8$@E f"(|@'*g qV #>@>?x???x??<LNI(W=h F#P???j?DeT}v# > `  ` fx0p@{@~@? `  =??5&y???<`8??~ ?`){.?p???<`x<~A?x`fg@AAn  !dP+PsP|[8~d~}@L>c_a~ ~AFAAǾ8@D? 6?8X%@Qqq0?9~*>FE=Ǟc?~ ~-|d\#azLu5 A8?~bS|eN ??X(hG !xa~`qPUP7?????0`~`yga`5Xc\Q`Fm@AVC׆(|?`a`cPi`ɡPz e?0 0y~#~P%6 P` ?8I>A'X)F>C?`a`e !x g?0 0y~G~b 0 J|:7x&9ϟeXALx!c`H"%?=#0<?~J/~@ \}Tol*s2_hu Dc`T B ?`?=|0<?~G?U  @Lv >?~P60Ag~CB@`pp #?$? 1 A $ 0 h`FqO ?,ŐA #@(g~ oHeqJ``p^p?? 1eEW4bb?51%E (  ,)A>g矘`fa!DDxC~`? < ?`d`A@  #?96|{E%Ai,(~g矘`f D DBxA~`? < ?`a A`D@A!]}bHBQ١ .a@AG`?0xNByp30 ??~~@a@A!  #@и=h:H G`?0xJ LJ}@p ??~~)1 ن'g9i(&0A*H RIAɇ Q~y<B@G`p? 9) $ t ? ?!ƃ]@RAH@~y,؄G`p? t9:2 :?p@u4MLBāxb  td ;u~aaol``x0?!87x>hKa0? '>z~x|Ж ~aaӯo`x0?487x ߏ-:F1e fKѾ>yNDZu`0/I4`l??? >??0n~"O `G!?"- Ey`0o`l???<??0 Q\<@7EGO?%ǽ@Fy-=LJ`~|I1 <<<>``Z|k𔜀csp{%%6'9)9`~| <<<>` ` g}nbj'.! P?? @"??4`0? ?>̇3GH؆y/`ϧ03~}? Cf??_d/`0? 9wKq# !Az~5M - rhEPi~p&'``g`g< `z ]a>$_$/!WC 8?`  $~pc'``g`g< `~ nl~v}@~x[$8(/`&,i4Cyx@p`~ ~ ~ya????h\s^NO!>A()/` ACIyx@p@~~0~ya????HlInn?π{$D: X7 "$($@@ xx0??~ͽ>/~|z!u|3|o@ z}_  Axx0??~@/|<uGba_%:0;_ y(X0 xc0?=</7g OO?01?zyxAH0 xc0?@(4>qA;3@.ϰ0P? i}t 0`~~<|`y``?WB7<Da1AЎ#|  Qs1xЀx??~~?` A9C@ 0@  QB  Ox ??>%$ e` _>a7oI@$2JHq"R@P@& Ox ??>ak @pOǰ<@?y@5 "a` 08 7 |`??xb0C0 #'a 08 7 |~x? /,d  ?!?A??O ^X8 &@0 ~?a?~x??YH%@>,!= _;A`BIJ J%0PPkĀ~?a?g~`o ???<<0@AD@!  D;;@B@x`g~`o ???<|0%A;wމ#~/cB |q@JkP@ qx@x``???@>C9?'ۓ1/?C0* OU'bz͹0@+ 8O_`?=?>C9?np+#cz$WG'x|8$A~ ><<@ '0&:x>1???  ?d<X w`~|9~0!,@1= `A>p ,@0?~a`???0@0H ?A@??7xqG1 `?Qp(x` >?@a`???0P 2 v8?͐oq ~@d.g x߀(@d~?!` ?p7/?&1A"$C >"`?C> ??0Cs Dg@x?cB%9;~ǐ1 ?` 84LOH` 3?x  <00?|qw?8@x/2<?Õx@/?x yc Q`g~p~=OTio@8M~82o8@I~s  ?0??Z$/ 0?<[@C O*H~@PȵH*~s >?0??S…=@?I~w ~pk_8$RP:? z<(Tz ?`=g??@?0AA9>pp| ?@` `?`g?Á>~ƀ{vg|r Ew$5.  w5.O 0gg~??  <.$=9 XxO0~?? y #?~y@<?`09a?x??m@<^3<~pp|pvPr!  |\IC <?`0p zw0 c ƀ `,> 0 m `@hgL0m  ~ '`/w$x ǼvC? O(ߤ _x~@  0_x~ /c~nxaq xǃ@<__Ġ&? 9! _0W?& 003LN<ޝz|8zwbs>.wx.d˜ǃ?tCxxw.s<278KY&`? ~w| Fe@Ⱦh3M+@Eo_2|ز'M3+@ 1<678@<=;|x> ?<|<lcnd; p<{xcdn|1?π@h`ppsr _vؘ $<. > tK?>H0 tx ~gS:`|q|ϳ@<h2@w.=~sw.~=y?aÜ??c?<!#8;.xx^ < ^` ^y?aÜ??cF?<v@+@ AHw< ~W`t3gd;x tg3d~a![0'O>dF C+"@0`Yz-C0`zYF ~aN,+0 4O0?o `k DPpY@V "hr>@'qrP>@ǸÊAgIl~a>p-F| { ph3{P8fx@3$Z 3Pf{8xF@ +@b@[8<1=`dF Q5 K"`2>PNY;MR'q2P>N;YF ~{*C'L sC<ӀÀl|@8@TOC"b" 89!&Pp"8 9@~/Ld]0?HD _g4º AB0+: &.Y2B@0+:H~Z(l-҃ '8@t?pp tDB PZ"` /r(x0@ `r/B(0/qgXq`tyv< kVD  1_L I'0gLA8 8@I'0Dg0$&"1FZ9{n  ` V(LHM#Db@Ba#oJzP:a@Bo#JL><<"qCf~#@?0\f@ yD`1 P;g`!3أ:@P ;g@ >> ?@G/;ǐ?N<# {P4L8,~ ^ac  EhHapc L3 /B :g8?DQЅ1mNlL`^Au+`lb ![[d b۝d"b! [[dL3 /3 *?ѱpߎ??5JR@ ^fAUb* `0+APj wZ`0 A+RP =aa :yp??! com o@t8d`y'=8d`y =aa^#C3@`6x@3$~ & <F6~r 3/ M@xr3 `x`g0|Ay`hY%|+,F'@ Z5y:g< ѳK9Zy g5:<`x`"0A1?o wvpqπ0@-tHETlZ@__? *ҢbV[ ?* b0 wc'Z,`a - ` m}>fx h1m>}f-xA?P3?11 p_`~<  =??`~ (p`~ ` xC|<{=)O`?`` {9O?```)`< /!|>h_ |?A?x0Y`|pȫTVX_G |***հVX_?0609{;??S7f?900ΰA@?͈|Qp~UL?*/&/gUy~S<0 gULy~?3xg`Y`ݜ=@AA~n kgw```P+PsP|[8{|[w`P`P`P+ns|3x<3;07p|?9O}AFAAǾ8@D? 2?&> PPPQqq0|p PQPqPqD?<À`w!$}K{-|d\#h#w" A8Z] " Ad'?2L v 8JOOa2 vL&?`xg?@?8|s h?4`@f@!c 0'g!c??`xg@@o>p `!1 r?0cpsyGc` c;~`` cc33 4? 0 1-|88Io&Hc0Qhx2GczFL8#L7: `zFcL33 0? 00?cxl4#T a`K X(hG<=5 ;aX~3?9?у` l>5Xc\Q`*zt~AVC׆(|* j1@tAC~VcQ(~3?A;,%6 P`(4d(ɇt>A'X)F>J l25(:tA̓>'PXx~~<? 08<kEzC< Gb 0 J|;y`OQ?x!`$"Q;؃?J|xx~~<? 40 x}K4J/~@ \}UՀ+z R_hu D^`$R@_ }hyy`g <: G?U  @Lv ?!cOP60A@`O6Pv yy`g <?d  A $ 0 h`AH !cBEA #@H(AaB EA #h~``~0003?H 7߿ eEW($(DA%E (  ,)@8A %E(~``~0003?Pa!B4dA@  #$" !`E%Ai,$(@ `IE%A i#`x0 00'0 a AD@A! ""! Q!A.a@ABpQ!A.a@`x0 0&x @4$@a@A!  # '! @` P!Ah:H B@AP!:AhH#?<< $)0 M%&H%!I"i9 A(&0A*H RIAɂ R0" @ i(90A*&A0H?<?. ) $ t!!I H I H]@R@H@ IH]!@?~~x??37Q:2 :?p@14Q.BAx pb  td ;uh bp1 ?M< `<>hK<sB7X! ~x|Ж  ~<x@?(<^" ߏ-:FNi7ׂcw>NDZuw Nѿ>NDxD10?^hn~"{+@qCۈ_ "- Eyi_ "{-+xL'10o Q\<j:CTO?(%ǽ@Fy-=T(O%?j:@l<???p `Z|kc ;_!V% 6'9)9V %'6 9;-<???2P ( g}n @`[+;q_d P?? @"_ ۈdP?[?+?~~xd??h>̇!3A.?fas3~}? Cfs3?~.}??~~xd?&_94@(7/@Ʋ=A~5M - rhEQi~M5 7-/??`??<.y| LO0]`d*;p !WC 8?`  $W C8`*?;L?`??<.z|ƔHO0 nl4@ဠk;@p`Ҙ [$8(/`&,i4C[yۀ$8`(k/;m. ygHO0V R@B'7@±Ғ: !>A()/` ACI>yAП(`)'/7M0yg H,oTy`cD8 [$D: X7 "$($D@:X 78 yya?<??ͽ>/~|^m`A~; o@ z}_  _ z};E yya?<??@/|<lP 9P ba_%:0;_ y(_0%:_  ;9~~xag?<0???`=<@h9 3@.ϰ0P? i}t 0.P ?9`x <0?؀x??,?9`608?~~X ?~08?9#`x 40?x'' ?)<`8nǑaGI6<3r? ON)~I6r<3)?b?f0|<?WB?(9&@(1Da1AЎ#|  Qs1xЀA|"& f0|< ?  (!Hp|FC@ 0@  QB @0p~ ?4 a`$~@8) ( \8AYI@$2JHq"R@P@$J2H8c~ ?8 ` a~H00zF@X@5 "a` 08 5"z xy~~ < s`\0rx0 #'a 08 0#r' large_set ds.b 8*$a0 ;Blank area data ds.b 32000 ;Diagonal Scroll workspace ; Bouncy Scroll scroll_data equ data put_data equ scroll_data+$99 ******** CORKSCREW SCROLLER ********* ; ;Table of addresses used to print characters ;onto work area - Used for speed. ; top set data data_bottom equ data+159*$a0 bottom set data_bottom Table_0 dc.l bottom+-1*(8*$a0)+0*8+0 dc.l top+00*(8*$a0)+0*8+1 dc.l top+01*(8*$a0)+1*8+0 dc.l top+02*(8*$a0)+1*8+1 dc.l top+03*(8*$a0)+2*8+0 dc.l top+04*(8*$a0)+2*8+1 dc.l top+05*(8*$a0)+3*8+0 dc.l top+06*(8*$a0)+3*8+1 dc.l top+07*(8*$a0)+4*8+0 dc.l top+08*(8*$a0)+4*8+1 dc.l top+09*(8*$a0)+5*8+0 dc.l top+10*"&33Cs77wwaa11aa1111aaaa11٘aaaa11aaaapppp``aa``aaaa8888``aa``aa 11``11``aa11``11``aa````aa``````xxLJ>πϞϞχχ>>>ggggggxxggxx||xx<<xxxxxxxxxxxπππxxxxxxxxxxx????cvcvcvcvCCCC00005555uuuu____UUUUÐÐÐ eeeeuuuu}}}}<<<a>avvvv|sss   ????????0? ?`0@8`@xPߐ@x@@`p0?@8?? 00Ϗ̈?;? ?#???`#?0 ????9? t 1?`a  j ```π  b8? ? 0  @@ `>? ./pp8@@,8'x`  s ```Xx_0?{`@0@DLWwv\vfVfwFrFsFbFc  T*08,$fffa,$ffe8,$0010,$36,$83,$70,$8f dc.w $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff ********************************************* * Tables for Bounce scroller on main screen * ********************************************* * Each table describe the shape & speed of * one bounce, by specifying the screen location * of the scroller for each frame. * bounce_tab1 dc.w 0*$a0,0*$a0 dc.w $ffff bounce_tab2 dc.w 45*$a0,45*$a0 dc.w $ffff bounce_tab3 dc.w 0*$a0,1*$a0,2*$a0,4*$a0,6*$a0,8*$a0,11*$a0,15*$a0,20*$a0,26*$a0,33*$a0 dc.w 38*$a0,45*$a0 dc.w 38*$a0 dc.w 26*$a0,20*$a0,15*$a0,11*$a0,8*$a0,6*$a0,4*$a0,2*$a0,1*$a0,0*$a0 dc.w $ffff bouncSgGO``F? _a}SM `{ |A@??@ 8 8@ np} `  o;@?|?@8?`? oylW Ώۢ !@ /ѧ `'[ @ ?ާ@ o@X<P@@ w=` ? @ ռHf_ȃ $@l px~(s0  w% $a{ xCn~Dt! #~",CopO >L_ʹ?xuW5Ls |` @   <x޿hK̀y-ϡ?!< ?*| N|@ ??i=PmxXv"?=?2>G3:YBh&eDb?ǂ}??pE$oup@$f"@$BY7]:< ~B2> EG0?Ǿ`@5W Ǿ# a?8A ?^X% #A56p<HwHI|8@?Bd$0.Uh.` < dgw?@HE|?ώmQ ͸p~OWh|fа8 Ph@9ce öhy"`|PF `9΀Aͣh#AF >9u$AC %Xt$xBK 4;o1'+I|y ` 0'Cx  9?X$J, 8?<&?, ƀ`~>,#RaX  < "?#  Ø#`nK5\y ozw\ ᇀ~x08DJ+0  # Gycxr$1@#|&Avp 0@8y|&AvϿǏpp1@ s` 0@ Ͽo / Y)WXbY8bO?'< `'`)8mKC'`88}KG? M0 x){b|y7M0 x8y7G߇z>`8A) t`8A8X|` pGD| ?84a)}5_{84a81( {'˞ <0"z>v>) )y1[|v>8P#0\ `fm7SG"Ѽ?o"G/*4 ?7ԋ)0 0$%j?ԋ8@!0%j+t?ڕ#r@ ۞M#@ :$;<=T`?`p>w??? ?@@Gw_c}@_@/6+@b 7b@??@1lPZr ?@PzrwP?`7 j_? 7z@0H!߯ x,/@'?7&~?O 3~?@B Y ?gE@&?  i7z5bou? #u@ @/L@#  @-.| -$OV!   kt 6;. UJ->.vGn?@7v@vtCo~˜r!?'0c^HZ< ^ % k 1>g~~g@Cлrc?>gk ?_px~r @ a O?o}{8巃HK N 1@?xX~2 _ .@>'' 푠u}xRx f 9yqjOa>BF€_-CRX=09 x㣕>r? IP @w@ | 0}~eq! ?4~@ ?o 8{V-1W ; }? 3 ^߀  A'ȼ6 ( @ <ݿ1  ?54 jB9G1  G?  /o,~T/ r8< E2i | 2#yLeh3+|9MN0$sH/ Ёw>bb<ă7ȹ0q$]9+|cFρB4?t0O@)Ч Nh=$ /G@p7?A=E% qfq@} p0@@!1C}2`DH!55.2c @30~Qڇ'D pA06o3hp?I?xq_:hGΏvpp!^ 10p{}߇~>l.#/*\~__ɞlwc]6br^$! iC?~|1~cs0>>}$<N}b|߿?}$??w}}7=W?= 9߼?) < {G>4?W~ y  ?^? 9OR $ ? oyy_L(΍a?FO?OP4b?)?=; "#??ߏ@?20c?_?~< 3?O?"<~2?/z ?(3C?@~?}: ~ D ЙP0wo  ~3nȀD N>%[RD_ @K 1T _?_R߰J_M~ @b`AGsY G@w_(D<z\柏~@RWNt$ـaM㟏D@bE D$C@߼ ,? C/@ f_ K`ɿm|sx6@/@?.02V ^ks`O ?| LRNM @߿q @ ? ?y@)ߚ1Ə"?` `5?!  W*ݸ_8BO? @ ?!MA :ļCB6?A`@ <?D)ɽw?Cy',>@@?wĿ :H}A~+dmh@ ?w ë:@ӵ7YIE>C >$<@` xŶ `sNXDAoƌ" 8h0 xa(fw-CA,a*xwr8@$#,#4 hz@iǿ7,:cn|<a Ckzp3:~_|?ad]/M~DtxC0 |~_so|y,PǠ/DvAD8\Aa<;(l_GuXHWAh@ZH$ doU3휼d)c}~wACc@띰9$o@>+,hʹByr[4qӇd2c~ y>w&`?G_\0×{ss@p|hp0s@9^o7jbhxNoS03c* @W~\XO[C~50gw6-XWn=q|l& B /G~5Fq^dpH@ A{? xϿ<D t;SkfdLBOY>xp  ^C  C3?a 1m8`bHs8H0>讇 x_  oV>H~ y  | #N):$p0? Ȕ= ? 1?0ܘ5iN~0H<; c7?@ l- y wMh1 { c2?|֛3EjA0>P|qaOJC0#~d j>! !Op??!TA_"e x>ee O@{G? ?WD+m|^@|VoM@ Ps/LjE LrZ(4~o|izD>:@肸2 |= @C~x<8󨯣 u$ CcO>@ ےq_U5n^#ydlaa|A:xua|0$ |0$ _0DbyY ཆNi2qբ'ήiJٛ3`G@ٛ &d??+׺B߭L߾s@!߿   @Mxݰ3:!B6q.# /0@) %r?97p:@C ?< ~ UCfDG #60x@`  8  ?? NLD|P7~p8 P y1Et@ᒙrȺ>n= {r bo?8L@1x~l0? &?JG7dPpoG(ZA8H|?(z /8ׅW?rniyb|H>y ``C ͔4@yy4^w@q|QD C}~w 8mCaD Q|f5j~g_tCQ@Ǵc8ykp2ǰ xar OC `8oG6c:+>F(cX>(89gA @ffB-!⪄sy~g  7YeLiÆHh%ZDO#oy3;#  bf@ L.Ƿ~_ ~s83  ??&ȷhr&$gd~ڊNO=w?cۀ3@  nwlL1$ge= d} pe01@dc,|_ !|LCu?}71/8@@M#q_s5;6] a2 Ó>@*oHC:>_@>=" T8+1:? xc$rT^OV#~Sw灁h@ x~~?*m‰À Q{}ğ)|篟~"Vj??&rz`1*$ UrRw8?R y'.}Q?Q([`_k$K/z?Aod{} ~??& GF\ޔoJ /N;Ao?}?' ?~??*"$KrxXFNx!|q?ۀ}@?'~?bK zNG\7BWoxW~Dz_?wyǀH0~??(eHu'cYfQ[^?~ ykw?n8|~??OI:x񤐆(/{D6' {0z 33V??Gř:b8a|;x?`" ytLF1T>??>#009> ` n 6?ߒ}#w튷ȼ>@0A~P~??#l!wd hXD>kfbCR> >J?1(Iz wD~>irj$ϐcv=$>>!P ?~?0 z(xY6AC@ /7#Q? '><?~8] vhҲ'@@<3G:?> D ?~ ? c!׆R/4|b0f0# D~~hgaUft^@%>e CDLC cO@@لA Js?~!< s? &G@W }( } "߂? -Gt5/t  ]a߀0(  a _9M3O {?O3{>9: #? }DLy ~F6 ' ~2 9q'?w ^pF@HxY)1g 'E _/>?t Ψq)[ X/ _uv&`!I. <; @ @]0" O~>\[@X`$@L0F _?R0 , 5?bA O;@? ?=y `?? DPx({D (?M{; `DR@?~I{ `+?B>y [?= @x@D@?ZMg/$>y?? ~ bOJ~2 „>L@~w={@AxN|@ A p>q>o@ sa_:qW$ ~X(}uq`$c2 ~}| pM(9@ҀƃBGb ?}8X8pٓT)8Nw >}0@0y',  >}$ϑ8 |` KX G7?6Q8|^ Z_7<8b|$ɷ:|``2& 9 Gx#.7Fn'8x`48"Q  P6p` T:@J VؼAH BL? i +B.? `p C # @  UB^  Hi"㐀    hE"Y@ l  6>80g=$ t > ? ?I@!|n $BPp`$$Qs@~z>L@2@ 2   i@6o4Ar`UɀL q   痲 -t=!xdA^]F  8  }b 5!!_?0A|@a78P׫_T׿x T0%@0u8~[c~ҥϳWz$Y44H0q|8T0  xHNI+0   0 pO_ H 0HfH H@G7 Fc 8Lh m'}&Ѐ@ Ā2@ 2@SGڬ7D `c$2"8 ` 0 `zo@#0 LP P fb8@-T 4 8- 48-2 "& @5@A ! 4>  Yp僀87+R0 7#0+40+4ZĀ  8w/t)p/w p/u8\( M]F 4 =7?2@8U@;@ cB߾v$``Bw?`B?  <gtW@ n N%6&Ę@t@BpL0w0?=1@X z@@Q"~ 2@`PQ3Gà^Q?8!_\ <_h4<@<2@Hh@3$O@8bpހ< y '2B 2h? ?? @<!x\0CYf& Dq E_gq38@_g~@8q 4XexrfwBp@;p@@m0< pUpk`qmFeePpP {qo}plo}@OW< ;8sV0 p<;? p< ?D (lDWhLB>pp@Ol?pp O?^,`]鱬v] ^ _p~{_ pApJx@Ȟ EpPNpp~O?`ge@]]b ` ~3Pp>ρp>`ρ0~\Ep ˁ |pˁ|p`ˁ@4~@M@@pӳ>@0۳@p۳O@$L B@\qcu_A@xX@u@xqu`hl !@W.q3x` @pP3`x` @p@q3߿.00@Gb@'E0@`{0@`@bϿ}?pXF0@Wy 0@p@ry0@p@ryϿ? 0pWx?쀛pp@q`pp@qx`z@npp@xpp@x~ |(@2m;8`@u8`@u/ >>-cq?--=c==c}(2 c7ƴ7<`?<`a ?Ƿy:w}݄?=݄?@x"{"֒ 72wЄ? ????@xi$Ԁ >ִf?_ֿ??ֿ()@) ĿitJ Ƹv?ƿ@@9@$?0 2"  /8?<@  0  o?@( @[  @3x@ @G(x5 `@@`5t BCh^ 8u_p_ @ +cۿ|0@M'ʀ8p@nYO|a0@Bq9@q@@ ? $-p%?a? P a@,( A(@`@P~00@ {qE@ g 8% ?pX?~0@ @0N0U`_R߶  7-2({\(0_q0@pz6$`7p0 ` !p`<```@8? @;@<?G;<8k/;-< \@< !"23CDTUefvww_k?I? '  l@S^gSN??$?? ??h`\6nGYy`A ,O<'CiwkEN?p~/~a q}#p{d7zo~~cYa2O|` |_0 z  s3`? xp?@? x`@?? t?? }x ???@? |<`I?? x3uD`@-?@??xrIB_ })``x@?? };?do4 _x!??x8[q  pg_? ? xnM0_ ~? ?z#?}g<>BϿ co՞>! w=-?n0' gd X3o?`yWo8gʽxU |o<?7V./ tV?(6jݿ@?_g fٔ 0j@_?_ -'ahso_{&~ 9ĺ2v?,O?_| e^dX_P+@_??oxOic:?BD ܜo!?OzaOpPshQl! b C~?ǁ_WZC?~R >w|R1h[w#w π51@x_.05A>>9Q/Zø84 ʀb҇w?}6<ؽ~P<$& ` 84?ZHWG6oy8 hOvpt&"94C@tb =0^_{ ?`|??zQ!FP4 ~|?Be} A/~ L<&g _;_9x`^^6{:4 suCF|?`cX+l`St10 1d BӶ0# ϛr7p0C3BS02J ͋790pFA`|FcDb+.¹{^<@~7TMp%'* ǟSg̀8` Al r ,ij5sE= ߟ|wNBp$#GI`9|Wܸ  }g)H$ P A ш;v߾A?|'TrI .C3dž }g2 b0S p#Ϭ @A?gѓ$4<g I  / g  N}7gD@(0 ^0C  >4ȏŁ@&P,1 @@~`?vA`3 Q 17@ v#K> t`  [@'?[ : +ŏ~-(203?}-1  5?`%h }EI2 D@ u *pS-N  Ղ~ cCߐLD    _{,MH`0ndx E 3+X`o[@x?Hg? J+o4?@ɚX7!@S ?=gW( 1]B  > =`|AN  _D O |@ Bx01@ @80? }`<T  sČ? 0 ?$ p0phœ?W>؞HHp?( ϠH`pa0@g(v )F`,N`.=N`>?`??O5JF!Ωx N\@PL @| w`?^fMa[:_ c#X < cxÀp| 4XpXSQ']K0 Py|0 pCp @7`S f~IDqqp M^`28 }>y 03@ 0s?x?S.1 )H,U&-?=08 @t@?08@?? D@A<3 a.l`@9h@88:F/` '>} OП6K-8E=&‚h`98<F?8 <yS|Yx8)P_9?@ 8 ??08s ?LXP8PD'ĸW=cF:&@?0F@a ;̫LDf~?J|C^}ADb?_em)ҀQd`@ ,`}@ 0}N@ a  ]xc ]h00~J2 @<', &δ?7@ `$@//NO 4Mـ' r]0?_*SmL?X P/P!SX x? ?`_ ?W8?wT? # ;\àC?8 |@@p)Sx\PHYp8?\\0 OBERJE THE MAN WITH THE HAT! ST MEGA-CODING, GRAPHIX, SAMPLING, ETC..... HI!, WELL AS YOU HAVE VERY PROBABLY FIGURED OUT, WE MANAGED TO GET HOLD OF A VIDEO CAMERA! WHAT A WASTE OF TIME THAT WAS, WE SPENT MOST OF THE TIME VIDEO-ING FAG PACKETS, AND BEER CANS. THE PICTURES WE DIGITISED ON THE CREEPERS AMIGA USING VIDI-AMIGA ( OR SOMETHING?! ) , THE CAMERAMAN WAS OUR GOOD FRIEND ..... JAMES! THEY MADE ME TAKE THE TINSEL OFF MY HAT B*****DS! I'M NOT SWEARING SINCE I DECIDED TO WRITE THIS DEMO USING 'NUTRASWEAR' WHICH WAS INVENTED BY FLASH! THE EDITOR OF 'THE SCUMDAY SPORT' ON MY COLLEGES SUN MINI-COMPUTER! WELL FLASH! I WISH YOU ALL THE BEST RESURRECTING 'SCUMDAY SPORT' AFTER ITS HURRIED ABOLITION, DURING THE 'OBSCENE E-MAIL SCANDAL' OF '89 !!! A MESSAGE TO D.WATT IF YOU ARE READING THIS! 'GET YOURSELF A HANDLE SO I DON'T HAVE TO GREET YOU AS D.WATT IN DEMOS!' AND THE SAME APPLIES TO YOU M.MILES!!!! THE CREEPER 'I SMOKE TABS, ME!' AMIGA CODING, GRAPHIX, MUSIC ETC..... I.M IN LIVERPOOL RIGHT NOW, SO I CAN'T WRITE ANYTHING.... NOT EVEN THIS!............. THE COUNT '1...2...3...4... EHHH?!! SHIT!!!!! AMIGA CODING,GRAPHIX, MUSIC ETC....... YIBBLE! ZEN NOTHING TO DO WITH BUDDA! AMIGA GRAPHIX, MUSIC ETC...... GEE, DOSEN'T HE LOOK FOREIGN, GERMAN OR SWEDISH, OR MAYBE EVEN DUTCH! BUT NO, HE ISN'T SHADES GOOD LIKENESS PAH! AMIGA MUSIC MASTER, GRAPHICS WIZARD AND PROGRAMMER TO BE.......... FINGERBOBS BIG SCROLLER SCREEN TO CONTACT FINGERBOBS WRITE TO OBERJE, 6 CARRON TERRACE, STONEHAVEN, AB3 2HX. WELL ISN'T THIS SIMPLY THE BIGGEST SCROLLER YOU'VE SEEN ON THE HUMBLE 'OL ST ?....NO?..... WELL PERHAPS NOT, IT IS CERTAINLY THE BIGGEST I'VE EVER SEEN! ITS HUGE! ITS GINORMOUS! ITS LARGE!... I SHOULD IMAGINE THAT YOUR EYES ARE QUITE SORE BY NOW, UNLESS YOU ARE STANDING ABOUT 4-5 METRES AWAY! ......"FINGERBOBS, CHEWY-ER THAN A MULTI-STOREY BUILDING"....NOW A BULLETIN BOARD AD... JUSAVO - 0324 32414 - V21,V23 MNP PERHAPS?, V22? HE JUST CHANGED HIS MODEM! I DONT KNOW WHAT IT DOES! - 0324 32414 - CALL UP, LOOK AROUND, DOWNLOAD STUFF, THE USUAL THINGS! HAVE YOU SEEN "WHEN HARRY MET SALLY" YET?, IT IS A FANTASTICALLY BRILLIANT FILM, IT IS EXCELLENT!, WATCH IT AT ONCE! I AM LISTENING TO "DEF,DUMB AND BLONDE" BY DEBBIE HARRY JUST NOW, ITS HURTING MY HEAD I THINK ILL CHANGE IT FOR SOMETHING ELSE......AHH THATS BETTER BELINDA CARLISLE!.....WELL ITS THE EVE OF THIS DEMOS RELEASE, SO ID BETTER GO WRITE SOME SCROLLTEXT FOR THE OTHER SCROLLERS! I'M DONE HERE SO I'LL JUST SAY THE BLUE RONDO CREW ARE A BUNCH OF LAMER B*****DS! THERE SAID IT! NOW LETS WRAP ( OR LOOP, IF YOU PREFER )..... -> wwwwwwwwwwwwwww>  ,",dL    \   ,2&  , ,L >    ,D D4:LLLLLLLLLLLLLLLLLLLLLLLLLVF  X* ,             B  b