home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
No Fragments Archive 4: The Falcon Archive
/
nf_archive_four_v1.0.iso
/
ARCHIVE
/
WORK
/
UTILITY
/
FUSS_V1.ZIP
/
FUSS_V1.S
next >
Wrap
Text File
|
1993-12-13
|
6KB
|
355 lines
; F030 universal screensaver
; version 1
; T.AL 93
output .ttp
text
move.l 4(sp),a3 base page pointer
move.l $c(a3),d0 p_tlen
add.l $14(a3),d0 +p_dlen
add.l $1c(a3),d0 +p_blen
add.l #256,d0
move.l d0,d3 sauve taille prog
pea prompt
move.w #9,-(sp)
trap #1
addq.l #6,sp
clr.l -(sp) super
move.w #$20,-(sp)
trap #1
addq.l #6,sp
move.l d0,-(sp) sauve oldstack
;-----------------------------------------------
;teste la presence d'une option sur la ligne de commande
move.b $80(a3),d0
beq.s nocmdline
;recupere le path sur la ligne de commande et le termine par un nul
lea $81(a3),a3
clr.b (a3,d0.w) nul à la fin du path
move.l a3,FileName
;teste si FUSS est deja installe
move.l $502.w,a0
lea sign-dump(a0),a1 a1.l adresse de la signature
cmp.l #'FUSS',(a1)
bne.s install
;deja installe, on donne le path à la version deja installee et on quitte
lea defaultfile-dump(a0),a1
filencpy move.b (a3)+,(a1)+
bne.s filencpy
;affiche la situation
pea newfname
move.w #9,-(sp)
trap #1
addq.l #6,sp
move.l FileName,-(sp)
move.w #9,-(sp)
trap #1
addq.l #6,sp
bra pterm
;-----------------------------------------------
;pas de ligne de commande
nocmdline lea defaultfile,a0
move.l a0,FileName
;teste si FUSS est deja installe
move.l $502.w,a0
lea sign-dump(a0),a1 a1.l adresse de la signature
cmp.l #'FUSS',(a1)
bne.s install
;si oui on restaure l'ancien vecteur et on quitte
move.l olddump-dump(a0),$502.w restaure ancien vecteur dump
;affiche la situation
pea wipe
move.w #9,-(sp)
trap #1
addq.l #6,sp
bra pterm
;-----------------------------------------------
;on installe FUSS
install pea waiting
move.w #9,-(sp)
trap #1
addq.l #6,sp
move.l FileName,-(sp)
move.w #9,-(sp)
trap #1
addq.l #6,sp
pea cr
move.w #9,-(sp)
trap #1
addq.l #6,sp
move.l $502.w,olddump
lea dump,a0 dump vector
move.l a0,$502.w
move.w #$20,-(sp) user
trap #1
addq.l #6,sp
move.w #1,-(sp)
trap #1
addq.l #2,sp
clr.w -(sp) keep process
move.l d3,-(sp)
move.w #$31,-(sp)
trap #1
;-----------------------------------------------
pterm pea cr
move.w #9,-(sp)
trap #1
addq.l #6,sp
move.w #1,-(sp)
trap #1
addq.l #2,sp
move.w #$20,-(sp) user
trap #1
addq.l #6,sp
clr.w -(sp)
trap #1
;-----------------------------------------------
dump bsr screensave
rts
;-----------------------------------------------
screensave movem.l d0-a6,-(sp)
;recupere l'adresse, le mode et la taille de l'ecran
move.w #2,-(sp) Physbase
trap #14
addq.l #2,sp
move.l d0,a3 a3.l screenbase
move.w #-1,-(sp)
move.w #88,-(sp) VsetMode(-1)
trap #14
addq.l #4,sp
move.w d0,d3 d3.w screenmode
move.w d0,-(sp) mode courant
move.w #91,-(sp) Vgetsize
trap #14
addq.l #4,sp
move.l d0,d4 d4.l screensize
;sauve la DTA du programme interrompu
move.w #$2f,-(sp)
trap #1
addq.l #2,sp
move.l d0,savDTA
;sauve le lecteur et le path courant
move.w #$19,-(sp)
trap #1
addq.l #2,sp
move.b d0,savPath
move.b #':',savPath+1
clr.w -(sp)
pea savPath+2
move.w #$47,-(sp)
trap #1
addq.l #8,sp
;installe DTA pour la sauvegarde
pea DTA
move.w #$1a,-(sp)
trap #1
addq.l #6,sp
;ouvre le fichier F30 et sauve le handle
clr.w -(sp)
move.l FileName,-(sp)
move.w #$3c,-(sp)
trap #1
addq.l #8,sp
move.w d0,d5 d5.w handle
;determine la structure du fichier, truecolor ou bitmap
; screenmode.bit2 on -> truecolor mode, off -> bitmap mode
btst #2,d3
bne.s savescrmode
;mode bitmap, determine l'adresse et la taille de la palette
; screenmode.bit7 on -> ST comptatible mode (palette $8240.w)
; off -> Falcon mode (palette $9800.w)
btst #7,d3
beq.s F30pal
lea $ffff8240.w,a0 adresse palette
move.w #32,d0 taille
bra.s savepalette
F30pal lea $ffff9800.w,a0
move.w #256*4,d0
;copie screenmode et la palette dans un buffer
savepalette lea savbuf,a1
moveq.l #0,d1
move.w d0,d1 bytecount pour la sauvegarde
addq.w #2,d1
lsr.w #2,d0
subq.w #1,d0
move.w d3,(a1)+ sauve screenmode
palcpy move.l (a0)+,(a1)+ sauve la palette
dbf d0,palcpy
bra.s savebuf
;sauve le screenmode en truecolor
savescrmode move.w d3,savbuf
moveq.l #2,d1
;sauve le buffer sur disque
savebuf pea savbuf
move.l d1,-(sp)
move.w d5,-(sp)
move.w #$40,-(sp)
trap #1
add.l #12,sp
;sauve l'ecran sur disque
saverawdata pea (a3)
move.l d4,-(sp)
move.w d5,-(sp)
move.w #$40,-(sp)
trap #1
add.l #12,sp
;ferme le fichier
move.w d5,-(sp)
move.w #$3e,-(sp)
trap #1
addq.l #4,sp
;restaure DTA et path
move.l savDTA,-(sp)
move.w #$1a,-(sp)
trap #1
addq.l #6,sp
pea savPath
move.w #$3b,-(sp)
trap #1
addq.l #6,sp
pea prompt
move.w #9,-(sp)
trap #1
addq.l #6,sp
pea work
move.w #9,-(sp)
trap #1
addq.l #6,sp
movem.l (sp)+,d0-a6
rts
;-----------------------------------------------
even
data
sign dc.b 'FUSS',0
prompt dc.b $1b,'E'
dc.b 'FUSS v1.0:',$a,$d,$a,$d
dc.b 'Falcon030 Universal Screen Saver',$a,$d
dc.b 'by T.AL 93',$a,$d,$a,$d
dc.b 0
waiting dc.b 'Installed',$a,$d
newfname dc.b 'Save image as: ',0
wipe dc.b 'Removed from memory',0
defaultfile dc.b '\SAVER.F30',0 nom par defaut
ds.b 200 un peu de place pour un autre fichier
cr dc.b $a,$d,0
work dc.b 'FUSS is working for you ?!',0
;-----------------------------------------------
even
bss
ds.b 256
DTA ds.b 44
FileName ds.l 1
olddump ds.l 1
savDTA ds.l 1
savPath ds.b 256
savbuf ds.b 2048
;-----------------------------------------------
end