home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga GigaPD 3
/
Amiga_GigaPD_v3_3of3.iso
/
fred_fish
/
fish_601-700_lha
/
fish_684.lha
/
CPUCLR
/
cpuclr.asm
< prev
next >
Wrap
Assembly Source File
|
1993-06-02
|
2KB
|
150 lines
;
; cpuclr.asm
; ----------
;
; replaces BltClear() with a CPU based function for speed on 68030-systems
; compatible to V36's new "fill" feature
;
; (C) 1991 Oliver Wagner
;
call MACRO
xref _LVO\1
jsr _LVO\1(a6)
ENDM
section "init",code
xref _LVOBltClear
;
; entry function
;
entry:
move.l 4,a6
lea gfxname(pc),a1
call OldOpenLibrary
move.l d0,a2
lea dosname(pc),a1
call OldOpenLibrary
move.l d0,a3
move.l d0,a6
call Output
move.l d0,d7
move.l d0,d1
lea head(pc),a0
move.l a0,d2
moveq #37,d3
call Write
move.l _LVOBltClear+2(a2),a5
cmp.l #'CPUC',-8(a5)
bne.s install
move.l 4,a6
move.l -4(a5),d0
move.w #_LVOBltClear,a0
move.l a2,a1
call SetFunction
lea -12(a5),a0
move.l a0,d1
ror.l #2,d1
move.l a3,a6
call UnLoadSeg
lea rem(pc),a0
bra.s exit
install:
lea entry-4(pc),a5
move.l (a5),d0
addq.l #3,d0
add.l d0,d0
add.l d0,d0
move.l d0,a4 ; pointer to new func
clr.l (a5) ; kill segment pointer
move.l a2,a1
move.w #_LVOBltClear,a0
move.l 4,a6
call SetFunction
move.l d0,-4(a4)
lea ins(pc),a0
exit:
move.l d7,d1
move.l a3,a6
move.l a0,d2
moveq #10,d3
call Write
moveq #0,d0
rts
gfxname:
dc.b "graphics.library",0
dosname:
dc.b "dos.library",0
head:
dc.b $9b,"1mCPUCLR",$9b,"0m (C) 1991 Oliver Wagner: "
ins:
dc.b "installed",10
rem:
dc.b "removed ",10
section "patch",data
id: dc.l 'CPUC'
oldfunc:
dc.l '(-:]'
;
; this is the new bltclear() routine entry
;
; a0 = block
; d0 = size
; d1 = flags
newclear:
move.l d2,a0
btst #1,d1
beq.s bytesize
; must calc size
move.l d0,d2
and.l #$ffff,d0
clr.w d2
swap d2
mulu d2,d0
bytesize:
moveq #0,d2
btst #2,d1
beq.s dataok
move.l d1,d2
swap d2
dataok:
btst #1,d0
subq.l #2,d0
loop1:
move.w d2,(a1,d0.l)
subq.l #2,d0
bpl.s loop1
move.l a0,d2
rts
;
; more efficent clear
; if size%4 == 0
;
doloop2:
subq.l #4,d0
move.w d2,d1
swap d2
move.w d1,d2
swap d2
loop2:
move.l d2,(a1,d0.l)
subq.l #4,d0
bpl.s loop2
move.l a0,d2
rts
END