*/
Love this site? Hate it? Leave us some comments.
*/

View MC68010\DECIGEL.ASM

Fitting an 68010 to the Amiga

Submitted By: WEBMASTER
Rating: (Not rated) (Rate It)


;***************************************************************
;                                                              *
;       DeciGEL (Relief from MC68010 pains on the Amiga)       *
;                                                              *
; Copyright 1986 by Scott Turner                               *
; Program may be copied and used for non-commercial uses only. *
; Requests for commercial use should be directed to:           *
;                                                              *
; Scott Turner                                                 *
; 12311 Maplewood Avenue                                       *
; Edmonds, Wa 98020-1115                                       *
;                                                              *
; Execute file to install patch. May be executed over and over *
; again. You lose about 40 bytes of memory each time you       *
; execute it though. Reboot your AMiga (Ctrl-Amiga-AMiga) to   *
; remove the patch.                                            *
;                                                              *
; EXECUTE DeciGEL.make                                         *
; Assembles and links a new DeciGEL                            *
; Program should work with MC68000/MC68008/MC68012/MC68020     *
; as well (ie. it won't die on MC68000/MC68008).               *
;***************************************************************

; Some handy constants
SysBase EQU      4
AlcMem  EQU      -6*33
PrivVect EQU      $20               ; Address of Privlege error vector

Main     movea.l  SysBase,A6
         move.l   CodeSize,D0
         moveq    #0,D1             ; PUBLIC
         jsr      AlcMem(A6)        ; Get the memory
         tst.l    D0                ; Did we get it?
         bne.s    GotIt
         moveq    #100,D0           ; Return Error # 100
         rts                        ; Back to AmigaDOS with error

GotIt    move.l   D0,A0             ; Move to work reg
         move.l   D0,A2             ; Save copy for patching vector
         lea      MoveMe,A1         ; Get address of our code
         move.l   CodeSize,D0       ; Number of bytes to move
         subq.l   #5,D0             ; Correct for DBF and one long word
Loop     move.b   (A1)+,(A0)+       ; Move byte
         dbf      D0,Loop
         move.l   PrivVect,(A0)+    ; Patch opcode at end
         move.l   A2,PrivVect       ; Patch us into the vector
         moveq    #0,D0             ; Good return code
         rts                        ; Back to AmigaDOS, no error

MoveMe   movem.l  D0/A0,-(SP)       ; Save registers
         move.l   8+2(SP),A0        ; Pointer to opcode
         move.w   (A0),D0           ; Pickup opcode
         andi.w   #~%111111,D0      ; Mask out EA field
         cmpi.w   #$40C0,D0         ; Is it a MOVE SR,ea?
         bne.s    NotOne
         bset     #1,(A0)           ; Convert it to MOVE CCR,ea
         movem.l  (SP)+,D0/A0       ; Restore regs
         rte                        ; Rerun new opcode

NotOne   movem.l  (SP)+,D0/A0       ; Restore regs
         jmp      $FC0000           ; To previous handler, patched on
                                    ; installation of this routine
CodeEnd
CodeSize DC.L     CodeEnd-MoveMe    ; Size of routine
         end

corner
© 1996-2008 CommunityHeaven LLC. All rights reserved. Reproduction in whole or in part, in any form or medium without express written permission is prohibited.
Violators of this policy may be subject to legal action. Please read our Terms Of Use and Privacy Statement for more information.
North American business development: Nicolai Wadstrom. Publisher: Lars Hagelin.