home *** CD-ROM | disk | FTP | other *** search
- Path: oreig.uji.es!ii202
- From: ii202@rossegat.uji.es (Jorge Acereda Macia)
- Newsgroups: comp.sys.amiga.programmer
- Subject: Re: Qblit intereference again
- Date: 23 Feb 1996 18:22:56 GMT
- Organization: Universitat Jaume I. Castell≤ de la Plana. Spain
- Distribution: world
- Message-ID: <4gl0m0$r6s@oreig.uji.es>
- References: <4gb6om$104@sunsystem5.informatik.tu-muenchen.de>
- NNTP-Posting-Host: @rossegat.uji.es
- X-Newsreader: TIN [version 1.2 PL2]
-
- Juergen "Rally" Fischer (fischerj@Informatik.TU-Muenchen.DE) wrote:
- > My Qblit function still locks up if OS does small blits between it.
- > help please.
-
- > Best is IMHO I post the source:
-
- > * === THE QBLIT CALL
- > move.w #1,_bltbsy ;MY FLAG TELLING THAT QBLIT SEQUENCE IS WORKING.
-
- > move.l bltnode,a0
-
-
- > clr.l (a0)+ : move.l #function,(a0)+
- ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
- I never do this. I don't touch the bltnode.next field and I change the
- pointer to the function in the bltnode.function code.
-
-
- > move.w #$4000,(a0)+ ;do cleanup
- > move.w #$2020,(a0)+ ;DUMMY SIZE. HOW TO DO LARGE BLIT IN A .W ? HUH HUH
-
- ??? I don't use the size field. I write directly to bltsiz(h/v) in
- the bltnode.function. I don't know what this field is for. But I
- don't touch it and my routine works :-) Just poke the bltsize fields
- yourself to do large blits.
-
- > clr.w (a0)+
- > move.l #cleanup,(a0)+
-
- > move.l bltnode,a1 : move.l _GfxBase,a6 : jsr -276(a6)
-
- > * NO I WON'T TOUCH THIS BLTNODE UNTIL MY cleanup: WAS CALLED.
-
- > *===== THE FUNCTIONS
- > function:
- > * DO I MISS CLEARING THE BLITTER INTREQ BIT HERE ?
-
- No (I think).
-
- > movem.l d1/a6,-(sp)
- > move.l bltpc(pc),a6
-
- What's bltpc? Your structure defining the contents of bltxxx?
-
- > bltsetreg:
- > move.l (a6)+,d0 : move.w d0,d1 : swap d0
- > move.w d0,0(a0,d1.w)
- > * ^------- ??? $DFF000 BY OS ???
- ^^^^^^^^^^^^^
- Yes.
-
- > cmp.w #$5e,d1 : beq.s bltstarted
- > cmp.w #$58,d1 : bne.s bltsetreg
- > * ---
- > bltstarted:
- > move.l a6,bltpc
- > cmp.l #0,(a6) : beq bltintend
- > movem.l (sp)+,d1/a6
- > move.l #1,d0 ;TO BE RECALLED
- > rts
-
- > bltintend:
- > movem.l (sp)+,d1/a6
- > move.l #0,d0 ;ALL DONE
- > rts
-
- > cleanup:
- > clr.w _bltbsy
-
- Why don't you use Signal()? (like in c2p8.s... Good example (Peter?)!)
- You don't busywait... Do you?
-
-
- > moveq #0,d0
- > rts
-
- > *===============================
-
- > The bugs:
-
- > blitter lockup most likely if lots of small blits are done
- > by other programs, while mine does quite large blits.
-
- > if I just let the function run without any pokes to blitter,
- > the lockup is also caused!
-
- Do you start the blitter?
- Just an idea. It could be due to QBlit() _requiring_ you to start
- the blitter.
-
- > It's just a lockup, no memory trashed.
-
-
-
-
-
-
-
- --
- ---------------------------- --------------------------------------------
- | Jorge Acereda | Dream the same thing everynight |
- | ii202@rossegat.uji.es | I see our freedom in my sight |
- | Intel Outside | No locked doors, no windows barred |
- | Amiga Rules | No things to make my brain seem scarred |
- ---------------------------- --------------------------------------------
-