312 lines
5.6 KiB
ArmAsm
312 lines
5.6 KiB
ArmAsm
overscan:equ 0
|
|
; Double Megadistorter by Gunstick (c) ULM 1990
|
|
; we know! it's long, but it works ! And it's from ULM !!!
|
|
|
|
parallax equ 0
|
|
parallay equ 0
|
|
|
|
bus equ 10
|
|
|
|
|
|
|
|
pea start(pc)
|
|
move.w #38,-(sp)
|
|
trap #14
|
|
addq.l #6,sp
|
|
|
|
clr.w -(sp)
|
|
trap #1
|
|
|
|
noswreset:
|
|
rts
|
|
start:
|
|
move #$2700,sr
|
|
move.l #noswreset,$46e.w
|
|
bsr waitvbl
|
|
|
|
lea $ffff8240.w,a2
|
|
lea oldpal,a3
|
|
|
|
movem.l (a2),d0-d7
|
|
movem.l d0-d7,(a3)
|
|
movem.l hwpalette,d0-d7
|
|
movem.l d0-d7,(a2)
|
|
|
|
lea $ffff8201.w,a0
|
|
movep.w 0(a0),d0
|
|
lea screenad1,a2
|
|
move.w d0,(a2)
|
|
|
|
move.l #screen,d0
|
|
add.l #255,d0
|
|
and.l #$ffff00,d0
|
|
lea screenad2,a2
|
|
move.l d0,(a2)
|
|
movea.l d0,a2
|
|
ror.l #8,d0
|
|
movep.w d0,0(a0)
|
|
|
|
move.w #0,-(sp)
|
|
move.l a2,-(sp)
|
|
move.l a2,-(sp)
|
|
move.w #5,-(sp)
|
|
trap #14
|
|
lea 12(sp),sp
|
|
|
|
move.l screenad2,d0
|
|
sub.l #160*6,d0
|
|
move.l d0,screenadr
|
|
; addi.l #8*5-64,screenadr
|
|
|
|
movea.l screenad2,a0
|
|
move.l #9999,d0
|
|
clear_loop:
|
|
clr.l (a0)+
|
|
dbra d0,clear_loop
|
|
|
|
movea.l screenad2,a0
|
|
; movem.l graphic,d6-d7
|
|
movem.l black,d6-d7
|
|
move.w #285,d2
|
|
allline:
|
|
ifne overscan
|
|
move.w #20,d1
|
|
endc
|
|
ifeq overscan
|
|
move.w #27,d1
|
|
endc
|
|
|
|
alles:
|
|
move.l d6,(a0)+
|
|
move.l d7,(a0)+
|
|
dbra d1,alles
|
|
ifeq overscan
|
|
addq.l #6,a0
|
|
endc
|
|
|
|
dbra d2,allline
|
|
|
|
pea message
|
|
move.w #9,-(sp)
|
|
trap #1
|
|
addq.w #6,sp
|
|
|
|
bsr psginit
|
|
|
|
lea oldres,a0
|
|
move.b $ffff8260.w,(a0)
|
|
bsr waitvbl
|
|
move.b #0,$ffff8260.w
|
|
|
|
move.b #18,$fffffc02.w
|
|
bsr waitvbl
|
|
move.b #26,$fffffc02.w
|
|
|
|
move.l usp,a0
|
|
move.l a0,savusp
|
|
bsr screen2
|
|
move.l savusp,a0
|
|
move.l a0,usp
|
|
|
|
move.b #20,$fffffc02.w
|
|
bsr.s waitvbl
|
|
move.b #8,$fffffc02.w
|
|
|
|
bsr.s waitvbl
|
|
move.b #2,$ffff820a.w
|
|
bsr.s waitvbl
|
|
move.b #2,$ffff820a.w
|
|
move.b oldres,$ffff8260.w
|
|
lea $ffff8201.w,a0
|
|
moveq #0,d0
|
|
move.w screenad1,d0
|
|
movep.w d0,0(a0)
|
|
lsl.l #8,d0
|
|
|
|
move.w #0,-(sp)
|
|
move.l d0,-(sp)
|
|
move.l d0,-(sp)
|
|
move.w #5,-(sp)
|
|
trap #14
|
|
lea 12(sp),sp
|
|
|
|
bsr.s psginit
|
|
|
|
lea oldpal,a0
|
|
lea $ffff8240.w,a1
|
|
movem.l (a0),d0-d7
|
|
movem.l d0-d7,(a1)
|
|
|
|
bsr.s waitvbl
|
|
move #$2300,sr
|
|
|
|
rts
|
|
savusp: ds.l 1
|
|
|
|
waitvbl:
|
|
|
|
move.b $ffff8203.w,d0
|
|
lsl.w #8,d0
|
|
lea $ffff8207.w,a0
|
|
no_vbl:
|
|
movep.w 0(a0),d1
|
|
cmp.w d0,d1
|
|
bne.s no_vbl
|
|
|
|
rts
|
|
|
|
psginit:
|
|
lea psginittab,a0
|
|
nextinit:
|
|
move.b (a0)+,d0
|
|
cmp.b #$ff,d0
|
|
beq.s initend
|
|
move.b (a0)+,d1
|
|
move.b d0,$ffff8800.w
|
|
move.b d1,$ffff8802.w
|
|
bra.s nextinit
|
|
initend:
|
|
rts
|
|
|
|
;--------------------------------------------------------
|
|
|
|
screen2:
|
|
|
|
;free d0 d1 d2 d3 d4 d5 d6 d7 a0 a1 a2 a3 a4 a5 a6 usp
|
|
move sr,-(sp)
|
|
move #$2700,sr
|
|
move.l sp,stack
|
|
; clr.b lowbyte
|
|
|
|
move.w #5000,d0
|
|
aaa dbf d0,aaa
|
|
|
|
loop:
|
|
not.w $ffff8240.w
|
|
|
|
move.b #0,$fffffa19.w ;stop timer
|
|
move.b #245,$fffffa1f.w ;244
|
|
asd equ 7
|
|
move.b #32,$fffffa07.w
|
|
move.b #0,$fffffa0b.w ;clr pending
|
|
not.w $ffff8240.w
|
|
|
|
dcb $4e71,87
|
|
move.b #asd,$fffffa19.w
|
|
|
|
|
|
btst #0,$fffffc00.w
|
|
beq no_key
|
|
|
|
move.b $fffffc02.w,d0
|
|
|
|
cmpi.b #57,d0
|
|
bne.s no_key
|
|
|
|
movea.l stack,sp
|
|
move (sp)+,sr
|
|
rts
|
|
|
|
no_key:
|
|
|
|
move.b #0,$fffffa0b.w ;clr pending
|
|
no_int:
|
|
btst #5,$fffffa0b.w
|
|
beq.s no_int
|
|
|
|
bra loop
|
|
|
|
|
|
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,$7f,8,7,9,7,10,7,$ff,0
|
|
even
|
|
hwpalette:
|
|
dc.w $0700,$0707,$0474,$0777,$0606,$0505,$0404,$303
|
|
dc.w $777,$666,$555,$444,$333,$222,$111,$002
|
|
graphic:
|
|
dc.w $d555,$3333,$0f0f,$ff
|
|
message:
|
|
dc.b "Mfp clock detektor:",13,10,"by gunstick from U L M",13,10
|
|
dc.b "The line should move",13,10,"this way : --->",13,10
|
|
dc.b "with bytespeed",13,10,"and down one line after",13,10
|
|
dc.b "each passage on the screen.",13,10,"Some flickering if a key",13,10
|
|
dc.b "is pressed is normal",13,10,"Exit with space",13,10,13,10
|
|
dc.b "Mfp clock detektor:",13,10,"by gunstick from U L M",13,10
|
|
dc.b "The line should move",13,10,"this way : --->",13,10
|
|
dc.b "with bytespeed",13,10,"and down one line after",13,10
|
|
dc.b "each passage on the screen.",13,10,"Some flickering if a key",13,10
|
|
dc.b "is pressed is normal",13,10,"Exit with space",13,10,13,10
|
|
dc.b "Mfp clock detektor:",13,10,"by gunstick from U L M",13,10
|
|
dc.b "The line should move",13,10,"this way : --->",13,10
|
|
dc.b "with bytespeed",13,10,"and down one line after",13,10
|
|
dc.b "each passage on the screen.",13,10,"Some flickering if a key",13,10
|
|
dc.b "is pressed is normal",13,10,"Exit with space",13,10,0
|
|
even
|
|
lowbyte:
|
|
dc.b 0
|
|
|
|
|
|
hwscrolldat:
|
|
|
|
even
|
|
black:
|
|
ds.l 8
|
|
|
|
section bss
|
|
stack: ds.l 1
|
|
oldpal: ds.w 16
|
|
oldres: ds.w 1
|
|
screenad1:ds.w 1
|
|
screenad2:ds.l 1
|
|
screenadr:ds.l 1
|
|
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
|
|
|
|
|
|
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:
|
|
screen:
|
|
ds.l 8000
|
|
end |