[amirus] Re: AmiRUS2

  • From: Andy Parfenov <poweramiga@xxxxxxxxxx>
  • To: amirus@xxxxxxxxxxxxx
  • Date: Mon, 27 Jan 2003 17:59:35 +0500

Hello 
On 25/01/03, Vovka wrote:\n

V>> Ты в асмовых исходниках разбираешся? У меня что-то есть по этой
V> проблемме. Но в AP> исходниках.
V> давай!

Исходники пошли мылом.
А вот так сделано в blazewcp, а вооще судя по автодокам там всё просто. ;)

    moveq    #39,d0
    lea    (gfxname,pc),a1
    jsr    (_LVOOpenLibrary,a6)          ; OpenLibrary
    lea    (gfxbase,pc),a0
    move.l    d0,(a0)
    beq.b    nolibs

;ну это понятно открыли библу функцию которой будем патчить.

    move.l    #endpatch-patch,d0
    lea    (patch,pc),a0
    move.l    (newloc,pc),a1
    jsr    (_LVOCopyMem,a6)

;хм, скопировали новую фунуцию в newloc

    jsr    (_LVOForbid,a6)

;АГА, видимо ключевой момент! Рубанули мультитаск! Ты это делал?

    movea.l (gfxbase,pc),a1
    move.w    #_LVOWritePixelLine8,a0
    move.l    (newloc,pc),d0
    addq.l    #4,d0
    jsr    (_LVOSetFunction,a6)

;а теперь подменяем функцию. В a1 адрес патчиваемой библиотеки, в a0 адрес
функции, в d0 указатель на ноаую функцию

    movea.l (gfxbase,pc),a1
    move.w    #_LVOWritePixelArray8,a0
    move.l    (newloc,pc),d0
    add.l    #NewWritePixelArray8-patch,d0
    jsr    (_LVOSetFunction,a6)

    movea.l (gfxbase,pc),a1
    cmp.w    #40,(LIB_VERSION,a1)
    blt.b    noV40
    move.w    #_LVOWriteChunkyPixels,a0
    move.l    (newloc,pc),d0
    add.l    #NewWriteChunkyPixels-patch,d0
    jsr    (_LVOSetFunction,a6)

noV40    jsr    (_LVOCacheClearU,a6)
    jsr    (_LVOPermit,a6)
    moveq    #0,d0
    rts


Regards


Other related posts: