; The Paralax distorter by Gunstick from Unlimited Matricks parallax equ 0 parallay equ 0 bus equ 10 digitest equ 10 ; config: def_version equ 10 d0_for_mcp equ 0 mcp_adr equ $500 keyboard set 10 test equ 10 ifeq def_version opt d- org $2500 keyboard set 0 endc section text ifne def_version pea start(pc) move.w #38,-(sp) trap #14 addq.l #6,sp clr.w -(sp) trap #1 endc start: lea oldcpu(pc),a0 move.l sp,(a0)+ lea my_stack,sp move.w sr,(a0)+ move.w #$2700,sr move.l usp,a1 move.l a1,(a0)+ ifne def_version moveq #$12,d0 bsr ikbd_wrt moveq #$1a,d0 bsr ikbd_wrt move.l $408.w,old_408 move.l #exit_with_408,$408.w endc lea oldvideo(pc),a0 move.b $ffff8260.w,(a0)+ move.b $ffff820a.w,(a0)+ move.l $ffff8200.w,(a0)+ movem.l $ffff8240.w,d0-d7 movem.l d0-d7,(a0) movem.l black(pc),d0-d7 movem.l d0-d7,$ffff8240.w lea oldvectors(pc),a0 move.l $68.w,(a0)+ move.l $70.w,(a0)+ move.l $114.w,(a0)+ move.l $118.w,(a0)+ move.l $120.w,(a0)+ move.l $134.w,(a0)+ move.l #nix,$68.w move.l #nix,$70.w move.l #nix,$114.w ifeq keyboard move.l #nix,$118.w endc move.l #nix,$120.w move.l #nix,$134.w lea oldmfp(pc),a0 move.b $fffffa07.w,(a0)+ move.b $fffffa09.w,(a0)+ move.b $fffffa13.w,(a0)+ move.b $fffffa15.w,(a0)+ move.b $fffffa17.w,(a0)+ move.b $fffffa19.w,(a0)+ move.b $fffffa1b.w,(a0)+ move.b $fffffa1d.w,(a0)+ bclr #3,$fffffa17.w clr.b $fffffa07.w ifeq keyboard clr.b $fffffa09.w endc ifne keyboard move.b #%01000000,$fffffa09.w endc bsr waitvbl1 move.b #0,$ffff8260.w move.b #2,$ffff820a.w bsr psginit bsr mfp_test ; jmp screen back: lea my_stack,sp bsr psginit lea oldmfp(pc),a0 move.b (a0)+,$fffffa07.w move.b (a0)+,$fffffa09.w move.b (a0)+,$fffffa13.w move.b (a0)+,$fffffa15.w move.b (a0)+,$fffffa17.w move.b (a0)+,$fffffa19.w move.b (a0)+,$fffffa1b.w move.b (a0)+,$fffffa1d.w lea oldvectors(pc),a0 move.l (a0)+,$68.w move.l (a0)+,$70.w move.l (a0)+,$114.w move.l (a0)+,$118.w move.l (a0)+,$120.w move.l (a0)+,$134.w move.b #2,$ffff820a.w bsr.s waitvbl1 move.b #0,$ffff820a.w bsr.s waitvbl1 move.b #2,$ffff820a.w bsr.s waitvbl1 lea oldvideo(pc),a0 move.b (a0)+,$ffff8260.w move.b (a0)+,$ffff820a.w move.l (a0)+,$ffff8200.w movem.l (a0),d0-d7 movem.l d0-d7,$ffff8240.w ifne def_version moveq #$14,d0 bsr.s ikbd_wrt moveq #$8,d0 bsr.s ikbd_wrt endc lea oldcpu(pc),a0 move.l (a0)+,sp move.w (a0)+,sr move.l (a0)+,a1 move.l a1,usp ifne def_version move.l old_408(pc),$408.w rts endc ifeq def_version moveq #d0_for_mcp,d0 jsr mcp_adr+0.w endc psginit: moveq #15,d0 lea psginittab,a1 lea $ffff8800.w,a0 nextinit: move.b (a1)+,(a0) move.b (a1)+,2(a0) dbf d0,nextinit ; move.b #7,(a0) ; move.b #$7f,2(a0) ; move.b #14,(a0) ; move.b #$26,2(a0) rts waitvbl1: move.w #9000,d0 waitvbl2: dbf d0,waitvbl2 waitvbl: lea $ffff8209.w,a0 movep.w -8(a0),d0 waitvbl3: tst.b (a0) bne.s waitvbl3 movep.w -4(a0),d1 cmp.w d0,d1 bne.s waitvbl3 rts ikbd_wrt: lea $fffffc00.w,a0 ik_wait: move.b (a0),d1 btst #1,d1 beq.s ik_wait move.b d0,2(a0) rts mfp_test: move.w #$2700,sr bsr.s waitvbl bsr.s waitvbl move.b #0,$fffffa19.w move.b #255,$fffffa1f.w move.b #$20,$fffffa07.w move.b #0,$fffffa13.w moveq #30,d1 lea $ffff8209.w,a0 check_mfp_s1: move.b (a0),d0 beq.s check_mfp_s1 sub.w d0,d1 lsl.w d1,d1 move.b #0,$fffffa0b.w move.b #1,$fffffa19.w moveq #-1,d0 mfp_test_loop: dbf d0,mfp_test_loop moveq #0,d0 move.b $fffffa1f.w,d0 move.b #0,$fffffa19.w cmp.w #$9b,d0 ble.s mfp_of_my_st move.w #-1,mfp_type mfp_of_my_st: rts ifne def_version dc.l 'XBRA' dc.l 'TFSY' old_408: dc.l 0 exit_with_408: bsr.s exit move.l old_408(pc),a0 jmp (a0) endc exit: movem.l black(pc),d0-d7 movem.l d0-d7,$ffff8240.w bra back nix: rte oldcpu: ds.w 4 oldvideo: ds.w 19 oldvectors: ds.l 6 oldmfp: ds.w 5 mfp_type: ds.w 1 black: ds.l 16 **************************************************************** ;overscan:equ 0 ; Double Megadistorter by Gunstick (c) ULM 1990 ; we know! it's long, but it works ! And it's from ULM !!! ; dc.w $c8*4 ; dc.w 138*4 dc.w 195*4 ; dc.w 167*4 ; dc.w 197*4 ; dc.w 167*4 ; dc.w 255*4 dc.w 128*4 digisound: ; incbin "includes\telgraph.dmn" ; incbin "includes\jasy75.dmn" ; incbin "includes\senn_l1.dmn" ; incbin "includes\senn_l2.dmn" ; incbin "includes\luna.dmn" ; incbin "includes\luna2.dmn" ; incbin "includes\infinity.dmn" digiend: dc.w 159*4 digisound2: digiend2: even font: even fontend: kotz: dc.l 0 noswreset: rts ;-------------------------------------------------------- calc_mdist MACRO move.w (a3)+,d6 sub.w (a4)+,d6 movem.l (a5,d6),d3/d4/d5/d6 ENDM do_mdist MACRO lea 64(a5),a5 move.b #1,$ffff8260.w ;GunsticK's right border end switch move.b #0,$ffff8260.w movem.l d3/d4/d5,$ffff8250.w ;mdist ; move.l buffer,buffer ; dcb 9,$4e71 move.b #2,$ffff8260.w ;Open left border move.b #0,$ffff8260.w move.l d6,$ffff825c.w ;mdist ; dcb 4,$4e71 ENDM calc_mdist2 MACRO move.w (a3)+,d6 sub.w (a4)+,d6 movem.l (a5,d6),d4/d5/d6/a2 ENDM do_mdist2 MACRO lea 64(a5),a5 move.b #1,$ffff8260.w ;GunsticK's right border end switch move.b #0,$ffff8260.w movem.l d4/d5/d6,$ffff8250.w ;mdist ; move.l buffer,buffer ; dcb 9,$4e71 move.b #2,$ffff8260.w ;Open left border move.b #0,$ffff8260.w move.l a2,$ffff825c.w ;mdist ; dcb 4,$4e71 ENDM calc_mdist02 MACRO move.w (a3)+,d6 sub.w (a4)+,d6 movem.l (a5,d6),d2/d4/d5/d6 ENDM do_mdist02 MACRO lea 64(a5),a5 move.b #1,$ffff8260.w ;GunsticK's right border end switch move.b #0,$ffff8260.w movem.l d2/d4/d5,$ffff8250.w ;mdist ; dcb 9,$4e71 move.b #2,$ffff8260.w ;Open left border move.b #0,$ffff8260.w move.l d6,$ffff825c.w ;mdist ; dcb 4,$4e71 ENDM dcb 17-1-11,$4e71 moveq #0,d7 ; megadistorter test ; lea 0(a0,d7),a0 movem.l (a0),d4/d5/d6/d7 digi1 MACRO ; not.w kotz ; bne.s *+4 ; illegal ifne digitest moveq #-1,d6 ;~1 move.b (a6),d6 ;~2 add.w d6,d6 ;~1 add.w (a7,d6),d7 ;~4 endc ifeq digitest move.w #$700,$ffff8240.w move.w #$200,$ffff8240.w endc andi.w #$ff*4,d7 ;~2 move.l (a7,d7),d6 movep.l d6,$ffff8800-512-downthere(a7) ;~7 ENDM digi2 MACRO ; not.w kotz ; beq.s *+4 ; illegal ifne digitest moveq #-1,d6 ;~1 move.b (a6)+,d6 ;~2 add.w d6,d6 ;~1 add.w 2(a7,d6),d7 ;~4 endc ifeq digitest move.w #$070,$ffff8240.w move.w #$020,$ffff8240.w endc andi.w #$ff*4,d7 ;~2 move.l (a7,d7),d6 ;~5 movep.l d6,$ffff8800-512-downthere(a7) ;~7 ENDM even ;********************************************************** prt: dc.b 27,"Y",32+20,32+1," 000" str: dc.b "0 ",0 even psginittab:dc.b 0,$ff,1,$ff,2,$ff,3,$ff,4,$ff,5,$ff,6,0 dc.b 7,%11111111,8,16,9,0,10,0,11,60,12,0,13,14,$ff,0 even hwpalette: dc.w $000,$227,$005,$654,$543,$432,$321,$777 ; dc.w $000,$227,$005,$740,$730,$720,$710,$777 dc.w $777,$666,$555,$444,$333,$222,$111,$002 dc.w $0700,$0707,$0474,$0777,$0606,$0505,$0404,$303 graphic: dc.w $d555,$3333,$0f0f,$ff cheatcodepos: dc.l cheatcode cheatcode: ; B U S cr dc.b 48,22,48+$80,31,22+$80,28,31+$80,28+$80,0 even lowbyte: dc.b 0 even hwscrolldat: even section bss bss_start: ;here starts the bss screenad: ds.l 1 ds.l 20 my_stack: stack: ds.l 1 oldpal: ds.w 16 oldres: ds.w 1 screenad1:ds.w 1 screenad2:ds.l 1 screenadr:ds.l 1 resync: ds.w 1 digswitch: ds.w 1 ;use digi1 or digi2 logbase: ds.l 1 ;screen where to put scroll tabentry: ds.l 1 ;for hwscroll cpybufdest: ds.l 1 ;copy from (this+4buffers-1scroll) to (this) shiftcnt: ds.w 1 ;counter for shifter count: ds.l 1 ;for some dbf without register nextscrn: ds.l 1 ;points to next screenadress to be used distcalc: ds.w 1 distwaveptr: ds.l 1 ;pointer in one distwave wavetabptr: ds.l 1 ;pointer to the next wave to be played disttableptr: ds.l 1 ;pointer to scrolldisttable disttable: ds.w 20*2 ;scrolldisttable digiptr: ds.l 1 ;ptr to begin digi after vbl predigi: ds.l 40 ;40 lines predigitized (20*2 values) mactcurv: ds.l 1 ;ptr in active curve mnextcurv: ds.l 1 ;next mdist curv mdistcurvval: ds.w 1 ;curve mdistcurvptr: ds.l 1 mdistadjustptr: ds.l 1 ;pointer to the distorter adjust table mdistadjust: ds.w 300*2 ;adjusttable for the two distorters linebuffbegin: textptr: ds.l 1 ;letter not completly copied into buffer (forward) bufptr: ds.l 1 ;pos where graphic is added in preshift 0 bufcnt: ds.w 1 ;which one of the 26 routs to be used to copy shift: ds.w 1 ;which preshift to copy buffer: ds.l 2*26*16 ;16 shifts of the 1st line of the scrolling linebuffend: ; ds.l 1 ; ds.l 1 ; ds.w 1 ; ds.w 1 ds.l 2*26*16+1+1+1 screenmem: ds.w 230*6 ecran: rept 5 ds.l 15700 endr endprg: bss_end: ;here ends the bss end