parallax distorter. It was first meant to be an independant distorter on 2 playfields,
only later it became the parallax distorter. This version features just hardware scroller with overscan. Use numpad to move around.master
commit
a3bb82c6fd
Binary file not shown.
|
@ -0,0 +1,21 @@
|
||||||
|
#a000000
|
||||||
|
#b000000
|
||||||
|
#c7770007000600070055200505552220770557075055507703111103
|
||||||
|
#d
|
||||||
|
#E FB 02
|
||||||
|
#W 00 00 20 01 15 17 09 D:\*.*@
|
||||||
|
#W 00 00 0A 01 15 17 00 @
|
||||||
|
#W 00 00 0E 09 2A 0B 00 @
|
||||||
|
#W 00 00 0F 0A 2A 0B 00 @
|
||||||
|
#M 00 02 00 FF D DISKSTATION@ `@
|
||||||
|
#M 00 00 00 FF A DISKSTATION@ @
|
||||||
|
#M 00 01 00 FF B DISKSTATION@ @
|
||||||
|
#T 00 03 02 FF PAPIERKORB@ @
|
||||||
|
#F FF 04 @ *.*@
|
||||||
|
#D FF 01 @ *.*@
|
||||||
|
#G 03 FF *.PRG@ @
|
||||||
|
#G 03 FF *.APP@ @
|
||||||
|
#F 03 04 *.TOS@ @
|
||||||
|
#P 03 04 *.TTP@ @
|
||||||
|
#G 03 04 GENST2.PRG@ *.S@
|
||||||
|
|
|
@ -0,0 +1,509 @@
|
||||||
|
|
||||||
|
; screen # by The Fate of ULM (c) 1989 and for all eternity...
|
||||||
|
|
||||||
|
demo: equ 10 ;demo = 0 => assemble for demo
|
||||||
|
;demo <> 0 => assemble for devpack
|
||||||
|
test: equ 10
|
||||||
|
|
||||||
|
ifne demo
|
||||||
|
|
||||||
|
;please leave all section indications unchanged...
|
||||||
|
;simple loader to get into supervisor-mode
|
||||||
|
;this part can be removed when started from bootsector
|
||||||
|
go:
|
||||||
|
move.l y-x+$10000,d0 ;length
|
||||||
|
move.l $80000-(y-x+$10000),d0 ;memory left on ST with half-a-meg
|
||||||
|
|
||||||
|
pea start
|
||||||
|
move.w #38,-(sp)
|
||||||
|
trap #14
|
||||||
|
addq.l #6,sp
|
||||||
|
|
||||||
|
clr.w -(sp)
|
||||||
|
trap #1
|
||||||
|
|
||||||
|
start:
|
||||||
|
move sr,in_oldsr
|
||||||
|
move #$2700,sr
|
||||||
|
|
||||||
|
move.b $ffff8260.w,in_oldres
|
||||||
|
bsr waitvbl
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
|
||||||
|
movem.l $ffff8240.w,d0-d7
|
||||||
|
movem.l d0-d7,in_oldpal
|
||||||
|
movem.l black,d0-d7
|
||||||
|
movem.l d0-d7,$ffff8240.w
|
||||||
|
|
||||||
|
lea $ffff8201.w,a0
|
||||||
|
movep.w 0(a0),d0
|
||||||
|
move.w d0,in_screenad
|
||||||
|
|
||||||
|
move.b #26,$fffffc02.w
|
||||||
|
bsr waitvbl
|
||||||
|
move.b #18,$fffffc02.w
|
||||||
|
|
||||||
|
bsr in_psginit
|
||||||
|
|
||||||
|
move.l $0604.w,in_old604
|
||||||
|
move.l sp,$0604.w
|
||||||
|
move usp,a0
|
||||||
|
move.l a0,in_oldusp
|
||||||
|
move.l sp,in_oldsp
|
||||||
|
move.l $0600.w,in_old600
|
||||||
|
move.l #back,$0600.w
|
||||||
|
;here we go... to the real screen...
|
||||||
|
jmp screen
|
||||||
|
back:
|
||||||
|
move.l in_old600,$0600.w
|
||||||
|
move.l in_old604,$0604.w
|
||||||
|
movea.l in_oldusp,a0
|
||||||
|
move a0,usp
|
||||||
|
movea.l in_oldsp,sp
|
||||||
|
|
||||||
|
movem.l black,d0-d7
|
||||||
|
movem.l d0-d7,$ffff8240.w
|
||||||
|
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
bsr waitvbl
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
bsr waitvbl
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
|
||||||
|
movem.l in_oldpal,d0-d7
|
||||||
|
movem.l d0-d7,$ffff8240.w
|
||||||
|
|
||||||
|
move.b in_oldres,$ffff8260.w
|
||||||
|
lea $ffff8201.w,a0
|
||||||
|
move.w in_screenad,d0
|
||||||
|
movep.w d0,0(a0)
|
||||||
|
|
||||||
|
bsr.s in_psginit
|
||||||
|
|
||||||
|
bsr waitvbl
|
||||||
|
move.b #20,$fffffc02.w
|
||||||
|
bsr waitvbl
|
||||||
|
move.b #8,$fffffc02.w
|
||||||
|
|
||||||
|
move in_oldsr,sr
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
in_psginit:
|
||||||
|
lea in_psginittab,a0
|
||||||
|
in_nextinit:
|
||||||
|
move.b (a0)+,d0
|
||||||
|
cmp.b #$ff,d0
|
||||||
|
beq.s in_initend
|
||||||
|
move.b (a0)+,d1
|
||||||
|
move.b d0,$ffff8800.w
|
||||||
|
move.b d1,$ffff8802.w
|
||||||
|
bra.s in_nextinit
|
||||||
|
in_initend:
|
||||||
|
rts
|
||||||
|
|
||||||
|
in_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
|
||||||
|
|
||||||
|
in_screenad: ds.w 1
|
||||||
|
in_oldpal: ds.l 16
|
||||||
|
in_oldres: ds.w 1
|
||||||
|
in_old600: ds.l 1
|
||||||
|
in_old604: ds.l 1
|
||||||
|
in_oldsr: ds.w 1
|
||||||
|
in_oldsp: ds.l 1
|
||||||
|
in_oldusp: ds.l 1
|
||||||
|
endc
|
||||||
|
|
||||||
|
;
|
||||||
|
; systemadresses: $600.w = return address (see exit)
|
||||||
|
; $604.w = stackpointer (copy to sp if needed
|
||||||
|
; ex. move.l $604.w,sp)
|
||||||
|
;
|
||||||
|
; from here on, no stackpointer is present, if you need one, just
|
||||||
|
; get the address of space for stack in $604.w (see also sys. $604.w)
|
||||||
|
;
|
||||||
|
; you can use all registers, even usp (move an,usp or move usp,an)
|
||||||
|
;
|
||||||
|
; sr is set to $2700 and must (!!!!) be $2700 when returning to main menu
|
||||||
|
;
|
||||||
|
; waitvbl can be used to wait for the end of the displayed(!!!!) screen
|
||||||
|
; normal mode and overscan (with opened lowr border...)
|
||||||
|
; waitvbl uses d0-d1/a0
|
||||||
|
;
|
||||||
|
|
||||||
|
;this part is the real screen...
|
||||||
|
|
||||||
|
ifeq demo
|
||||||
|
org $010000
|
||||||
|
endc
|
||||||
|
|
||||||
|
x:
|
||||||
|
screen:
|
||||||
|
lea bss_start,a0
|
||||||
|
lea bss_end,a1
|
||||||
|
movem.l black,d1-d7/a2-a6
|
||||||
|
clear_loop:
|
||||||
|
movem.l d1-d7/a2-a6,(a0)
|
||||||
|
movem.l d1-d7/a2-a6,12*4(a0)
|
||||||
|
movem.l d1-d7/a2-a6,24*4(a0)
|
||||||
|
lea 36*4(a0),a0
|
||||||
|
cmpa.l a0,a1
|
||||||
|
bpl.s clear_loop
|
||||||
|
|
||||||
|
move.l #screenmem,d0
|
||||||
|
add.l #255,d0
|
||||||
|
and.l #$ffff00,d0
|
||||||
|
move.l d0,screenad1
|
||||||
|
ror.l #8,d0
|
||||||
|
lea $ffff8201.w,a0
|
||||||
|
movep.w d0,0(a0)
|
||||||
|
|
||||||
|
move.l screenad1,a6
|
||||||
|
movem.l black,d1-a2
|
||||||
|
movem.l d1-a2,(a6)
|
||||||
|
movem.l d1-a2,40(a6)
|
||||||
|
movem.l d1-a2,80(a6)
|
||||||
|
movem.l d1-a2,120(a6)
|
||||||
|
lea 160(a6),a6
|
||||||
|
lea graphic,a5
|
||||||
|
movem.l (a5),d1-d2
|
||||||
|
movem.l (a5),d3-d4
|
||||||
|
movem.l (a5),d5-d6
|
||||||
|
movem.l (a5),d7-a0
|
||||||
|
movem.l (a5),a1-a2
|
||||||
|
move.w #290,d0
|
||||||
|
graphiccop:
|
||||||
|
movem.l d1-a2,(a6)
|
||||||
|
movem.l d1-a2,40(a6)
|
||||||
|
movem.l d1-a2,80(a6)
|
||||||
|
movem.l d1-a2,120(a6)
|
||||||
|
movem.l d1-a2,160(a6)
|
||||||
|
movem.l d1-a2,200(a6)
|
||||||
|
lea 230(a6),a6
|
||||||
|
dbra d0,graphiccop
|
||||||
|
|
||||||
|
lea farbtab,a0
|
||||||
|
lea hsin,a1
|
||||||
|
moveq #0,d1
|
||||||
|
move.w #599,d0
|
||||||
|
fill_loop:
|
||||||
|
move.b (a1)+,d1
|
||||||
|
move.w d1,(a0)+
|
||||||
|
cmp.l #hsinend,a1
|
||||||
|
bne.s fill_ok
|
||||||
|
lea hsin,a1
|
||||||
|
fill_ok:
|
||||||
|
dbf d0,fill_loop
|
||||||
|
move.l a1,aktinhsin
|
||||||
|
|
||||||
|
movea.l $0604.w,sp
|
||||||
|
|
||||||
|
testl:
|
||||||
|
bsr waitvbl
|
||||||
|
|
||||||
|
lea $ffff8209.w,a0
|
||||||
|
moveq #0,d0
|
||||||
|
moveq #20,d2
|
||||||
|
sync2:
|
||||||
|
move.b (a0),d0
|
||||||
|
beq.s sync2
|
||||||
|
sub.w d0,d2
|
||||||
|
lsl.l d2,d2
|
||||||
|
|
||||||
|
bsr waitvbl
|
||||||
|
|
||||||
|
move.w #1500,d0
|
||||||
|
wait_border:
|
||||||
|
dbf d0,wait_border
|
||||||
|
|
||||||
|
dcb $4e71,188+6
|
||||||
|
|
||||||
|
loop:
|
||||||
|
lea $ffff8260.w,sp
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
lea coltab,a2
|
||||||
|
codmodvsin equ *+2
|
||||||
|
add.w #0,a2
|
||||||
|
lea farbtab,a1
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
|
||||||
|
codmodhsin equ *+2
|
||||||
|
add.w #0,a1
|
||||||
|
btst #6,$fffffa0d.w
|
||||||
|
bne exit
|
||||||
|
|
||||||
|
lea $ffff8209.w,a0
|
||||||
|
moveq #0,d0
|
||||||
|
moveq #30,d2
|
||||||
|
sync:
|
||||||
|
move.b (a0),d0
|
||||||
|
beq.s sync
|
||||||
|
sub.w d0,d2
|
||||||
|
lsl.l d2,d2
|
||||||
|
|
||||||
|
dcb $4e71,24+24+1
|
||||||
|
move.w (a1)+,d2
|
||||||
|
movem.l 0(a2,d2.w),d2-d5
|
||||||
|
|
||||||
|
moveq #48,d0
|
||||||
|
lo0001:
|
||||||
|
dcb $4e71,5
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
movem.l d2-d5,$ffff8250.w
|
||||||
|
move.b #2,(sp)
|
||||||
|
move.b #0,(sp)
|
||||||
|
dcb $4e71,46+24
|
||||||
|
lea 32(a2),a2
|
||||||
|
move.w (a1)+,d2
|
||||||
|
movem.l 0(a2,d2.w),d2-d5
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
dbf d0,lo0001
|
||||||
|
|
||||||
|
dcb $4e71,4
|
||||||
|
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
movem.l d2-d5,$ffff8250.w
|
||||||
|
move.b #2,(sp)
|
||||||
|
move.b #0,(sp)
|
||||||
|
dcb $4e71,46+24
|
||||||
|
lea 32(a2),a2
|
||||||
|
move.w (a1)+,d2
|
||||||
|
movem.l 0(a2,d2.w),d2-d5
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
dcb $4e71,1
|
||||||
|
|
||||||
|
move.w #110+50,d0
|
||||||
|
lo0004:
|
||||||
|
dcb $4e71,5
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
movem.l d2-d5,$ffff8250.w
|
||||||
|
move.b #2,(sp)
|
||||||
|
move.b #0,(sp)
|
||||||
|
dcb $4e71,46+24
|
||||||
|
lea 32(a2),a2
|
||||||
|
move.w (a1)+,d2
|
||||||
|
movem.l 0(a2,d2.w),d2-d5
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
dbf d0,lo0004
|
||||||
|
|
||||||
|
dcb $4e71,4
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
movem.l d2-d5,$ffff8250.w
|
||||||
|
move.b #2,(sp)
|
||||||
|
move.b #0,(sp)
|
||||||
|
dcb $4e71,59-11+24
|
||||||
|
move.w (a1)+,d2
|
||||||
|
movem.l 32(a2,d2.w),d2-d5
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
lea 64(a2),a2
|
||||||
|
dcb $4e71,10
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
movem.l d2-d5,$ffff8250.w
|
||||||
|
move.b #2,(sp)
|
||||||
|
move.b #0,(sp)
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
|
||||||
|
dcb $4e71,44+24
|
||||||
|
move.w (a1)+,d2
|
||||||
|
movem.l 0(a2,d2.w),d2-d5
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
|
||||||
|
dcb $4e71,2
|
||||||
|
moveq #13,d0
|
||||||
|
lo0002:
|
||||||
|
dcb $4e71,5
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
movem.l d2-d5,$ffff8250.w
|
||||||
|
move.b #2,(sp)
|
||||||
|
move.b #0,(sp)
|
||||||
|
dcb $4e71,46+24
|
||||||
|
lea 32(a2),a2
|
||||||
|
move.w (a1)+,d2
|
||||||
|
movem.l 0(a2,d2.w),d2-d5
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
dbf d0,lo0002
|
||||||
|
|
||||||
|
dcb $4e71,4
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
movem.l d2-d5,$ffff8250.w
|
||||||
|
move.b #2,(sp)
|
||||||
|
move.b #0,(sp)
|
||||||
|
dcb $4e71,48+24
|
||||||
|
move.w (a1)+,d2
|
||||||
|
movem.l 32(a2,d2.w),d2-d5
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
lea 64(a2),a2
|
||||||
|
dcb $4e71,10
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
movem.l d2-d5,$ffff8250.w
|
||||||
|
move.b #2,(sp)
|
||||||
|
move.b #0,(sp)
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
|
||||||
|
dcb $4e71,44+24
|
||||||
|
move.w (a1)+,d2
|
||||||
|
movem.l 0(a2,d2.w),d2-d5
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
|
||||||
|
dcb $4e71,2
|
||||||
|
moveq #43,d0
|
||||||
|
lo0003:
|
||||||
|
dcb $4e71,5
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
movem.l d2-d5,$ffff8250.w
|
||||||
|
move.b #2,(sp)
|
||||||
|
move.b #0,(sp)
|
||||||
|
dcb $4e71,46+24
|
||||||
|
lea 32(a2),a2
|
||||||
|
move.w (a1)+,d2
|
||||||
|
movem.l 0(a2,d2.w),d2-d5
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
dbf d0,lo0003
|
||||||
|
|
||||||
|
dcb $4e71,4
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
|
||||||
|
move.w #137,d0
|
||||||
|
wait_border3:
|
||||||
|
dcb $4e71,32
|
||||||
|
dbf d0,wait_border3
|
||||||
|
|
||||||
|
dcb $4e71,25
|
||||||
|
|
||||||
|
move.w pointdist,d0
|
||||||
|
move.w d0,d1
|
||||||
|
addq.w #4,d0
|
||||||
|
cmp.w #300*4,d0
|
||||||
|
bne.s pointdis_ok
|
||||||
|
moveq #0,d0
|
||||||
|
pointdis_ok:
|
||||||
|
move.w d0,pointdist
|
||||||
|
move.w d0,codmodhsin
|
||||||
|
|
||||||
|
moveq #0,d0
|
||||||
|
move.l aktinhsin,a0
|
||||||
|
move.b (a0)+,d0
|
||||||
|
swap d0
|
||||||
|
move.b (a0)+,d0
|
||||||
|
cmp.l #hsinend+2,a0
|
||||||
|
bne.s hsin_ok
|
||||||
|
lea hsin,a0
|
||||||
|
move.b (a0)+,d0
|
||||||
|
swap d0
|
||||||
|
move.b (a0)+,d0
|
||||||
|
bra.s hsin_nok
|
||||||
|
hsin_ok:
|
||||||
|
dcb $4e71,11
|
||||||
|
hsin_nok:
|
||||||
|
move.l a0,aktinhsin
|
||||||
|
lea farbtab,a0
|
||||||
|
add.w d1,a0
|
||||||
|
move.l d0,(a0)
|
||||||
|
move.l d0,1200(a0)
|
||||||
|
|
||||||
|
move.l aktinvsin,a0
|
||||||
|
move.w (a0)+,d0
|
||||||
|
move.w (a0)+,d1
|
||||||
|
cmp.l #vsinend+4,a0
|
||||||
|
bne.s vsin_ok
|
||||||
|
lea vsin,a0
|
||||||
|
move.w (a0)+,d0
|
||||||
|
move.w (a0)+,d1
|
||||||
|
bra.s vsin_nok
|
||||||
|
vsin_ok:
|
||||||
|
dcb $4e71,10
|
||||||
|
vsin_nok:
|
||||||
|
move.w d0,codmodvsin
|
||||||
|
move.l a0,aktinvsin
|
||||||
|
add.w d1,codmodhsin
|
||||||
|
|
||||||
|
move.l $604.w,sp
|
||||||
|
|
||||||
|
move.w #1911,$ffff8240.w
|
||||||
|
move.w #$00,$ffff8240.w
|
||||||
|
|
||||||
|
dcb $4e71,16
|
||||||
|
|
||||||
|
bra loop
|
||||||
|
|
||||||
|
exit:
|
||||||
|
movea.l $0600.w,a0
|
||||||
|
jmp (a0)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
;here starts the data section
|
||||||
|
|
||||||
|
black:
|
||||||
|
dc.l 0,0,0,0,0,0,0,0
|
||||||
|
dc.l 0,0,0,0,0,0,0,0
|
||||||
|
graphic:
|
||||||
|
dc.l %01010101010101010011001100110011
|
||||||
|
dc.l %00001111000011111111111111111111
|
||||||
|
pal:
|
||||||
|
dc.w $000,$221,$332,$443,$554,$665,$110,$020
|
||||||
|
hsin:
|
||||||
|
incbin 'c:\includes\hsin.bin'
|
||||||
|
hsinend:
|
||||||
|
aktinvsin:
|
||||||
|
dc.l vsin
|
||||||
|
vsin:
|
||||||
|
incbin 'c:\includes\vsin.bin'
|
||||||
|
vsinend:
|
||||||
|
|
||||||
|
coltab:
|
||||||
|
incbin 'c:\includes\coltab.bin'
|
||||||
|
incbin 'c:\includes\coltab.bin'
|
||||||
|
incbin 'c:\includes\coltab.bin'
|
||||||
|
incbin 'c:\includes\coltab.bin'
|
||||||
|
incbin 'c:\includes\coltab.bin'
|
||||||
|
incbin 'c:\includes\coltab.bin'
|
||||||
|
|
||||||
|
;end of data section
|
||||||
|
|
||||||
|
section bss
|
||||||
|
;please leave all section indications unchanged...
|
||||||
|
bss_start: ;here starts the bss
|
||||||
|
|
||||||
|
stack: ds.l 1
|
||||||
|
screenad1: ds.l 1
|
||||||
|
pointdist: ds.w 1
|
||||||
|
aktinhsin: ds.l 1
|
||||||
|
farbtab: ds.l 600
|
||||||
|
|
||||||
|
screenmem:
|
||||||
|
ds.l $2000
|
||||||
|
ds.l $2000
|
||||||
|
ds.l $500
|
||||||
|
bss_end: ;here ends the bss
|
||||||
|
y:
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,353 @@
|
||||||
|
|
||||||
|
; screen # by The Fate of ULM (c) 1989 and for all eternity...
|
||||||
|
|
||||||
|
demo: equ 10 ;demo = 0 => assemble for demo
|
||||||
|
;demo <> 0 => assemble for devpack
|
||||||
|
test: equ 10
|
||||||
|
|
||||||
|
ifne demo
|
||||||
|
|
||||||
|
;please leave all section indications unchanged...
|
||||||
|
;simple loader to get into supervisor-mode
|
||||||
|
;this part can be removed when started from bootsector
|
||||||
|
x:
|
||||||
|
pea start
|
||||||
|
move.w #38,-(sp)
|
||||||
|
trap #14
|
||||||
|
addq.l #6,sp
|
||||||
|
|
||||||
|
clr.w -(sp)
|
||||||
|
trap #1
|
||||||
|
|
||||||
|
start:
|
||||||
|
move sr,in_oldsr
|
||||||
|
move #$2700,sr
|
||||||
|
|
||||||
|
move.b $ffff8260.w,in_oldres
|
||||||
|
bsr waitvbl
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
|
||||||
|
movem.l $ffff8240.w,d0-d7
|
||||||
|
movem.l d0-d7,in_oldpal
|
||||||
|
movem.l black,d0-d7
|
||||||
|
movem.l d0-d7,$ffff8240.w
|
||||||
|
|
||||||
|
lea $ffff8201.w,a0
|
||||||
|
movep.w 0(a0),d0
|
||||||
|
move.w d0,in_screenad
|
||||||
|
|
||||||
|
move.b #18,$fffffc02.w
|
||||||
|
bsr waitvbl
|
||||||
|
move.b #26,$fffffc02.w
|
||||||
|
|
||||||
|
bsr in_psginit
|
||||||
|
|
||||||
|
move.l $0604.w,in_old604
|
||||||
|
move.l sp,$0604.w
|
||||||
|
move usp,a0
|
||||||
|
move.l a0,in_oldusp
|
||||||
|
move.l sp,in_oldsp
|
||||||
|
move.l $0600.w,in_old600
|
||||||
|
move.l #back,$0600.w
|
||||||
|
;here we go... to the real screen...
|
||||||
|
jmp screen
|
||||||
|
back:
|
||||||
|
move.l in_old600,$0600.w
|
||||||
|
move.l in_old604,$0604.w
|
||||||
|
movea.l in_oldusp,a0
|
||||||
|
move a0,usp
|
||||||
|
movea.l in_oldsp,sp
|
||||||
|
|
||||||
|
movem.l black,d0-d7
|
||||||
|
movem.l d0-d7,$ffff8240.w
|
||||||
|
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
bsr waitvbl
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
bsr waitvbl
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
|
||||||
|
movem.l in_oldpal,d0-d7
|
||||||
|
movem.l d0-d7,$ffff8240.w
|
||||||
|
|
||||||
|
move.b in_oldres,$ffff8260.w
|
||||||
|
lea $ffff8201.w,a0
|
||||||
|
move.w in_screenad,d0
|
||||||
|
movep.w d0,0(a0)
|
||||||
|
|
||||||
|
bsr.s in_psginit
|
||||||
|
|
||||||
|
move.b #20,$fffffc02.w
|
||||||
|
bsr waitvbl
|
||||||
|
move.b #8,$fffffc02.w
|
||||||
|
|
||||||
|
move in_oldsr,sr
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
in_psginit:
|
||||||
|
lea in_psginittab,a0
|
||||||
|
in_nextinit:
|
||||||
|
move.b (a0)+,d0
|
||||||
|
cmp.b #$ff,d0
|
||||||
|
beq.s in_initend
|
||||||
|
move.b (a0)+,d1
|
||||||
|
move.b d0,$ffff8800.w
|
||||||
|
move.b d1,$ffff8802.w
|
||||||
|
bra.s in_nextinit
|
||||||
|
in_initend:
|
||||||
|
rts
|
||||||
|
|
||||||
|
in_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
|
||||||
|
|
||||||
|
in_screenad: ds.w 1
|
||||||
|
in_oldpal: ds.l 16
|
||||||
|
in_oldres: ds.w 1
|
||||||
|
in_old600: ds.l 1
|
||||||
|
in_old604: ds.l 1
|
||||||
|
in_oldsr: ds.w 1
|
||||||
|
in_oldsp: ds.l 1
|
||||||
|
in_oldusp: ds.l 1
|
||||||
|
endc
|
||||||
|
|
||||||
|
;
|
||||||
|
; systemadresses: $600.w = return address (see exit)
|
||||||
|
; $604.w = stackpointer (copy to sp if needed
|
||||||
|
; ex. move.l $604.w,sp)
|
||||||
|
;
|
||||||
|
; from here on, no stackpointer is present, if you need one, just
|
||||||
|
; get the address of space for stack in $604.w (see also sys. $604.w)
|
||||||
|
;
|
||||||
|
; you can use all registers, even usp (move an,usp or move usp,an)
|
||||||
|
;
|
||||||
|
; sr is set to $2700 and must (!!!!) be $2700 when returning to main menu
|
||||||
|
;
|
||||||
|
; waitvbl can be used to wait for the end of the displayed(!!!!) screen
|
||||||
|
; normal mode and overscan (with opened lowr border...)
|
||||||
|
; waitvbl uses d0-d1/a0
|
||||||
|
;
|
||||||
|
|
||||||
|
;this part is the real screen...
|
||||||
|
|
||||||
|
ifeq demo
|
||||||
|
org $010000
|
||||||
|
endc
|
||||||
|
|
||||||
|
screen:
|
||||||
|
lea bss_start,a0
|
||||||
|
lea bss_end,a1
|
||||||
|
movem.l black,d1-d7/a2-a6
|
||||||
|
clear_loop:
|
||||||
|
movem.l d1-d7/a2-a6,(a0)
|
||||||
|
movem.l d1-d7/a2-a6,12*4(a0)
|
||||||
|
movem.l d1-d7/a2-a6,24*4(a0)
|
||||||
|
lea 36*4(a0),a0
|
||||||
|
cmpa.l a0,a1
|
||||||
|
bpl.s clear_loop
|
||||||
|
|
||||||
|
move.l #screenmem,d0
|
||||||
|
add.l #255,d0
|
||||||
|
and.l #$ffff00,d0
|
||||||
|
move.l d0,screenad1
|
||||||
|
ror.l #8,d0
|
||||||
|
lea $ffff8201.w,a0
|
||||||
|
movep.w d0,0(a0)
|
||||||
|
|
||||||
|
lea graphic,a6
|
||||||
|
movem.l (a6),d1-d2
|
||||||
|
movem.l (a6),d3-d4
|
||||||
|
movem.l (a6),d5-d6
|
||||||
|
movem.l (a6),d7-a0
|
||||||
|
movem.l (a6),a1-a2
|
||||||
|
movea.l screenad1,a6
|
||||||
|
lea 160(a6),a6
|
||||||
|
move.w #299,d0
|
||||||
|
graphiccop:
|
||||||
|
movem.l d1-a2,(a6)
|
||||||
|
movem.l d1-a2,40(a6)
|
||||||
|
movem.l d1-a2,80(a6)
|
||||||
|
movem.l d1-a2,120(a6)
|
||||||
|
movem.l d1-a2,160(a6)
|
||||||
|
movem.l d1-a2,200(a6)
|
||||||
|
lea 230(a6),a6
|
||||||
|
dbra d0,graphiccop
|
||||||
|
|
||||||
|
movem.l pal,d0-d3
|
||||||
|
movem.l d0-d3,$ffff8240+4*4.w
|
||||||
|
|
||||||
|
movea.l $0604.w,sp
|
||||||
|
|
||||||
|
testl:
|
||||||
|
bsr waitvbl
|
||||||
|
|
||||||
|
lea $ffff8209.w,a0
|
||||||
|
moveq #0,d0
|
||||||
|
moveq #20,d2
|
||||||
|
sync2:
|
||||||
|
move.b (a0),d0
|
||||||
|
beq.s sync2
|
||||||
|
sub.w d0,d2
|
||||||
|
lsl.l d2,d2
|
||||||
|
|
||||||
|
bsr waitvbl
|
||||||
|
|
||||||
|
move.w #1500,d0
|
||||||
|
wait_border:
|
||||||
|
dbf d0,wait_border
|
||||||
|
|
||||||
|
dcb $4e71,196
|
||||||
|
|
||||||
|
loop:
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
dcb $4e71,8
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
|
||||||
|
btst #6,$fffffa0d.w
|
||||||
|
bne exit
|
||||||
|
|
||||||
|
lea $ffff8209.w,a0
|
||||||
|
moveq #0,d0
|
||||||
|
moveq #30,d2
|
||||||
|
sync:
|
||||||
|
move.b (a0),d0
|
||||||
|
beq.s sync
|
||||||
|
sub.w d0,d2
|
||||||
|
lsl.l d2,d2
|
||||||
|
|
||||||
|
dcb $4e71,79
|
||||||
|
move.w #210,d0
|
||||||
|
lo0001:
|
||||||
|
dcb $4e71,6
|
||||||
|
move.b #2,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
dcb $4e71,87
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
dcb $4e71,8
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
dbf d0,lo0001
|
||||||
|
|
||||||
|
dcb $4e71,5
|
||||||
|
move.b #2,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
dcb $4e71,87
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
dcb $4e71,12
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
dcb $4e71,9
|
||||||
|
move.b #2,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
|
||||||
|
dcb $4e71,83
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
dcb $4e71,8
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
|
||||||
|
dcb $4e71,2
|
||||||
|
moveq #13,d0
|
||||||
|
lo0002:
|
||||||
|
dcb $4e71,6
|
||||||
|
move.b #2,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
dcb $4e71,87
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
dcb $4e71,8
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
dbf d0,lo0002
|
||||||
|
|
||||||
|
dcb $4e71,5
|
||||||
|
move.b #2,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
dcb $4e71,87
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
dcb $4e71,12
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
dcb $4e71,9
|
||||||
|
move.b #2,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
|
||||||
|
dcb $4e71,83
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
dcb $4e71,8
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
|
||||||
|
dcb $4e71,2
|
||||||
|
moveq #43,d0
|
||||||
|
lo0003:
|
||||||
|
dcb $4e71,6
|
||||||
|
move.b #2,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
dcb $4e71,87
|
||||||
|
move.b #0,$ffff820a.w
|
||||||
|
move.b #2,$ffff820a.w
|
||||||
|
dcb $4e71,8
|
||||||
|
move.b #1,$ffff8260.w
|
||||||
|
move.b #0,$ffff8260.w
|
||||||
|
dbf d0,lo0003
|
||||||
|
|
||||||
|
bsr waitvbl
|
||||||
|
move.w #1488,d0
|
||||||
|
wait_border2:
|
||||||
|
dbf d0,wait_border2
|
||||||
|
|
||||||
|
dcb $4e71,194
|
||||||
|
move.w #1911,$ffff8240.w
|
||||||
|
move.w #$00,$ffff8240.w
|
||||||
|
dcb $4e71,23
|
||||||
|
|
||||||
|
bra loop
|
||||||
|
|
||||||
|
exit:
|
||||||
|
movea.l $0600.w,a0
|
||||||
|
jmp (a0)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
;please leave all section indications unchanged...
|
||||||
|
;here starts the data section
|
||||||
|
|
||||||
|
black:
|
||||||
|
dc.l 0,0,0,0,0,0,0,0
|
||||||
|
dc.l 0,0,0,0,0,0,0,0
|
||||||
|
graphic:
|
||||||
|
dc.l %01010101010101010011001100110011
|
||||||
|
dc.l %00001111000011111111111111111111
|
||||||
|
pal:
|
||||||
|
dc.w $000,$0221,$0332,$0443,$0554,$0665,$0110,$20
|
||||||
|
|
||||||
|
;end of data section
|
||||||
|
|
||||||
|
section bss
|
||||||
|
;please leave all section indications unchanged...
|
||||||
|
bss_start: ;here starts the bss
|
||||||
|
|
||||||
|
stack: ds.l 1
|
||||||
|
screenad1: ds.l 1
|
||||||
|
|
||||||
|
|
||||||
|
screenmem: ds.l 14300
|
||||||
|
bss_end: ;here ends the bss
|
||||||
|
end
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
Reference in New Issue