home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
554b.lha
/
PBlanker_v1.3
/
pbl.s
< prev
next >
Wrap
Text File
|
1991-09-09
|
6KB
|
263 lines
*****************************************
* PAULS BLANKER *
* by Paul Hayter (C)1991 *
* *
* based on Blanker2 on Amigan 17 *
* by Joe Hitchens *
* V1.0 910406 *
* V1.1 910407 default blank in 2 mins *
* optional screen blank time *
* auto ptr blank in 10 secs *
* mouse parabolic accelerator *
* V1.2 910413 Uses actual timestamp *
* info in working out whether *
* to blank or not *
* V1.3 910418 Processes all input *
* events in the chain
*****************************************
* USAGE:
* pbl [time]
* time = time before blanking in seconds
* eg. pbl 180 {3 minutes}
* NB: Does not need to be RUN
* Also there is no way of changing settings or removing the blanker
include "PHAD:defs/exec.defs"
include "PHAD:offs/exec.i"
include "PHAD:defs/devices.defs"
include "PHAD:defs/hardware.defs"
privatestore equ 0
PTblack equ privatestore 0=not blank
SCblack equ PTblack+1 0=not blank
last_ptr_secs equ SCblack+1
last_scr_secs equ last_ptr_secs+4
ptr_secs equ last_scr_secs+4
scr_secs equ ptr_secs+4
first_time equ scr_secs+4
SIZEOF_PS equ first_time+2
custom equ $dff000
DEFAULT_PTR_BLANK equ 10 10 seconds
DEFAULT_SCR_BLANK equ 120 2 minutes
START move.l #DEFAULT_SCR_BLANK,d7
sub.w #$2,d0
blt START2
moveq #0,d7
moveq #0,d1
move.b (a0)+,d1
loop2 cmp.b #$20,d1
beq.s START2
sub.b #$30,d1
mulu #$A,d7
add.l d1,d7
move.b (a0)+,d1
dbra d0,loop2
START2 move.l 4,a6
bsr createport34
move.l d0,msgport
move.l d0,a0
bsr createio48
move.l d0,ioreq
lea inputname(pc),a0
move.l d0,a1
moveq #0,d0
moveq #0,d1
jsr _LVOOpenDevice(a6) OPEN INPUT.DEVICE
move.l #MEMF_CLEAR,D1
move.l #endhandler-myhandler+IS_SIZE+SIZEOF_PS,d0
jsr _LVOAllocMem(a6)
MOVE.L D0,A3
lea myhandler(pc),a0
lea endhandler(pc),a1
move.l d0,a2
loop_1 move.b (a0)+,(a2)+ COPY HANDLER CODE
cmp.l a0,a1
bne.s loop_1
lea privatepos(a3),a0
move.l d7,scr_secs(a0)
move.l #DEFAULT_PTR_BLANK,ptr_secs(a0)
move.l a0,IS_DATA+intpos(a3)
move.l a3,IS_CODE+intpos(a3)
move.b #51,IS_NODE+LN_PRI+intpos(a3)
* handlerStuff->is_Node.ln_Name = p->Name;
move.l ioreq(pc),a4
move.w #IND_ADDHANDLER,io_Command(a4)
lea intpos(a3),a1
move.l a1,io_Data(a4)
move.l a4,a1
jsr _LVODoIO(a6)
move.l a4,a1
jsr _LVOCloseDevice(a6)
move.l a4,a0
bsr deleteio
move.l msgport(pc),a0
bsr deleteport
moveq #0,d0
rts
createport34 moveq #34,d0
sub.l a0,a0
createport movem.l d2/a2-a3,-(sp) in: d0 = SIZEOF; out: d0 = port
move.l a0,a3 name*
addq.l #4,d0 space for SIZEOF
move.l d0,d2
move.l #MEMF_PUBLIC!MEMF_CLEAR,d1
jsr _LVOAllocMem(a6)
move.l d0,a2
tst.l d0
beq.s creaport1 -> no mem
move.l d2,(a2)+ save SIZEOF
moveq #-1,d0
jsr _LVOAllocSignal(a6)
move.b d0,MP_SIGBIT(a2)
bmi.s creaporte -> no sigbit
sub.l a1,a1
jsr _LVOFindTask(a6)
move.l d0,MP_SIGTASK(a2)
move.b #NT_MSGPORT,LN_TYPE(a2)
move.l a3,LN_NAME(a2)
move.b #PA_SIGNAL,MP_FLAGS(a2)
lea MP_MSGLIST(a2),a0
; NEWLIST A0:
move.l a0,(a0)
addq.l #LH_TAIL,(a0)
clr.l LH_TAIL(a0)
move.l a0,(LH_TAIL+LN_PRED)(a0)
; ;
move.l a2,d0
bra.s creaport1
deleteport movem.l d2/a2-a3,-(sp) In: port in a0
move.l a0,d0
beq.s creaport1 -> no port to delete
move.l a0,a2
moveq.l #0,d0
move.b MP_SIGBIT(a2),d0
bmi.s creaporte -> no sigbit to free
jsr _LVOFreeSignal(a6)
creaporte move.l -(a2),d0 SIZEOF
move.l a2,a1
jsr _LVOFreeMem(a6)
moveq.l #0,d0
creaport1 movem.l (sp)+,d2/a2-a3
move.l d0,a0
rts
createio48 moveq #48,d0
createio movem.l d2/a2,-(sp) in: d0=SIZEOF, a0=MsgPort; out: d0=ioreq
move.l a0,a2 save msgport*
addq #4,d0 space for SIZEOF
move.l d0,d2
move.l #MEMF_PUBLIC!MEMF_CLEAR,d1
jsr _LVOAllocMem(a6)
move.l d0,a0
tst.l d0
beq.s createio_e -> no mem
move.l d2,(a0)+ save SIZEOF
move.l a2,MN_REPLYPORT(a0)
move.b #NT_MESSAGE,LN_TYPE(a0)
subq #4,d2 subtract SIZEOF(SIZEOF)
move.w d2,MN_LENGTH(a0)
move.l a0,d0
createio_e movem.l (sp)+,d2/a2
rts
deleteio move.l a0,d0 in: a0 = ioreq
beq.s deleteio0 -> nothing to delete
move.l a0,a1
move.l -(a1),d0 get SIZEOF
jsr _LVOFreeMem(a6)
deleteio0 rts
** my input handler, on entry A0=input event, A1=private data
myhandler
movem.l a0/a2,-(sp)
lea custom+dmacon,a2
LOOPY move.b ie_Class(a0),d1
cmp.b #IECLASS_TIMER,d1
bne.s try_rawmouse
move.l ie_TimeStamp(a0),d0 READ SECONDS COUNT
tst.b first_time(a1)
bne.s 2$
move.l d0,last_ptr_secs(a1)
move.l d0,last_scr_secs(a1)
move.b #1,first_time(a1)
2$
sub.l last_scr_secs(a1),d0 d0=timeelapsed in seconds
cmp.l scr_secs(a1),d0
blo.s bump_ptr_stuff
move.w #0+DMAF_RASTER+DMAF_COPPER,(a2)
clr.w color-dmacon(a2) SET BLACK SCREEN
clr.l spr+sd_dataa-dmacon(a2) MAKE SURE SPRITE GOES
move.b #1,SCblack(a1) set blackflag
bump_ptr_stuff
move.l ie_TimeStamp(a0),d0
sub.l last_ptr_secs(a1),d0 d0=timeelapsed in seconds
cmp.l ptr_secs(a1),d0
blo.s quit_hdl
move.w #0+$20,(a2) turn sprites off.
clr.l spr+sd_dataa-dmacon(a2)
move.b #1,PTblack(a1)
quit_hdl move.l (a0),d0 get next event
move.l d0,a0
bne.s LOOPY
movem.l (sp)+,a0/a2
move.l a0,d0
rts
try_rawmouse
cmp.b #IECLASS_RAWMOUSE,d1
bne.s try_rawkey
acc_x move.w ie_X(a0),d1 MOUSE ACCELERATION
muls d1,d1
tst.w ie_X(a0)
bpl 1$
neg.w d1
1$
move.w d1,ie_X(a0)
acc_y move.w ie_Y(a0),d1
muls d1,d1
tst.w ie_Y(a0)
bpl 2$
neg.w d1
2$
move.w d1,ie_Y(a0)
ptr_on move.w #$8000+$20,(a2) sprite on
clr.b PTblack(a1)
move.l ie_TimeStamp(a0),last_ptr_secs(a1)
lites_on move.w #$8000+DMAF_RASTER+DMAF_COPPER,(a2) screen on
clr.b SCblack(a1)
move.l ie_TimeStamp(a0),last_scr_secs(a1)
bra.s quit_hdl
try_rawkey
cmp.b #IECLASS_RAWKEY,d1
beq.s lites_on
bra.s quit_hdl
endhandler
**positions in code block
codepos equ 0
privatepos equ endhandler-myhandler
intpos equ privatepos+SIZEOF_PS
** DATA
ioreq dc.l 0
msgport dc.l 0
inputname dc.b 'input.device',0
END