home *** CD-ROM | disk | FTP | other *** search
- ;*************************************************************************
- ;** HCE 1.0 & NorthC 1.2 MUL(S)/DIV(S)/MOD(S) **
- ;** Contributor: L.Lucius Sept 23rd 1995 **
- ;** Modified for HOp: Thomas Richter (thor) Nov 1st 1997 **
- ;** Function: Modify 68000 math routines to use 68020+ instructions. **
- ;*************************************************************************
-
-
-
- ;*************************************************************************
- ;
- ; Divs
- ;
- #match
- #code
- 202F 0004 ; MOVE.L 0004(A7),D0
- 6A02 ; BPL.B 0008
- 4480 ; NEG.L D0
- 222F 0008 ; MOVE.L 0008(A7),D1
- 6A08 ; BPL.B 0016
- 4481 ; NEG.L D1
- 0A2F 0080 0004 ; EORI.B #80,0004(A7)
- 6100 008E ; BSR.W 00A6
- 4A2F 0004 ; TST.B 0004(A7)
- 6A02 ; BPL.B 0022
- 4480 ; NEG.L D0
- 4E75 ; RTS
- ;
- ; MULS()
- ;
- 202F 0004 ; MOVE.L 0004(A7),D0
- 6A02 ; BPL.B 002C
- 4480 ; NEG.L D0
- 222F 0008 ; MOVE.L 0008(A7),D1
- 6A08 ; BPL.B 003A
- 4481 ; NEG.L D1
- 0A2F 0080 0004 ; EORI.B #80,0004(A7)
- 614E ; BSR.B 008A
- 4A2F 0004 ; TST.B 0004(A7)
- 6A02 ; BPL.B 0044
- 4480 ; NEG.L D0
- 4E75 ; RTS
- ;
- ; MODS()
- ;
- 202F 0004 ; MOVE.L 0004(A7),D0
- 6A02 ; BPL.B 004E
- 4480 ; NEG.L D0
- 222F 0008 ; MOVE.L 0008(A7),D1
- 6A02 ; BPL.B 0056
- 4481 ; NEG.L D1
- 614E ; BSR.B 00A6
- 2001 ; MOVE.L D1,D0
- 4A2F 0004 ; TST.B 0004(A7)
- 6A02 ; BPL.B 0062
- 4480 ; NEG.L D0
- 4E75 ; RTS
- ;
- ; DIVU()
- ;
- 202F 0004 ; MOVE.L 0004(A7),D0
- 222F 0008 ; MOVE.L 0008(A7),D1
- 6138 ; BSR.B 00A6
- 4E75 ; RTS
- ;
- ; MULU()
- ;
- 202F 0004 ; MOVE.L 0004(A7),D0
- 222F 0008 ; MOVE.L 0008(A7),D1
- 6110 ; BSR.B 008A
- 4E75 ; RTS
- ;
- ; MODU()
- ;
- 202F 0004 ; MOVE.L 0004(A7),D0
- 222F 0008 ; MOVE.L 0008(A7),D1
- 6120 ; BSR.B 00A6
- 2001 ; MOVE.L D1,D0
- 4E75 ; RTS
- XXXX ; MOVEA.L D3,A2 | MOVE.L D3,-(A7)
- 3401 ; MOVE.W D1,D2
- C4C0 ; MULU.W D0,D2
- 2601 ; MOVE.L D1,D3
- 4843 ; SWAP D3
- C6C0 ; MULU.W D0,D3
- 4840 ; SWAP D0
- C0C1 ; MULU.W D1,D0
- D083 ; ADD.L D3,D0
- 4840 ; SWAP D0
- 4240 ; CLR.W D0
- D082 ; ADD.L D2,D0
- XXXX ; MOVE.L A2,D3 | MOVE.L (A7)+,D3
- 4E75 ; RTS
- 4A81 ; TST.L D1
- 660E ; BNE.B 00B8
- 80FC 0000 ; DIVU.W #0000,D0
- 203C 8000 0000 ; MOVE.L #80000000,D0
- 2200 ; MOVE.L D0,D1
- 4E75 ; RTS
- XXXX ; MOVEA.L D3,A2 | MOVE.L D3,-(A7)
- B081 ; CMP.L D1,D0
- 6212 ; BHI.B 00D0
- ;
- ;
- #replace
- ;
- ; DIVS()
- ;
- 202F 0004 ; MOVE.L 0004(A7),D0
- 222F 0008 ; MOVE.L 0008(A7),D1
- 4C41 0801 ; DIVSL.L D1,D1:D0
- 4E75 ; RTS
- 4481 ; NEG.L D1
- 0A2F 0080 0004 ; EORI.B #80,0004(A7)
- 6100 008E ; BSR.W 00A6
- 4A2F 0004 ; TST.B 0004(A7)
- 6A02 ; BPL.B 0022
- 4480 ; NEG.L D0
- 4E75 ; RTS
- ;
- ; MULS()
- ;
- 202F 0004 ; MOVE.L 0004(A7),D0
- 4C2F 0800 0008 ; MULS.L 0008(A7),D0
- 4E75 ; RTS
- 6A08 ; BPL.B 003A
- 4481 ; NEG.L D1
- 0A2F 0080 0004 ; EORI.B #80,0004(A7)
- 614E ; BSR.B 008A
- 4A2F 0004 ; TST.B 0004(A7)
- 6A02 ; BPL.B 0044
- 4480 ; NEG.L D0
- 4E75 ; RTS
- ;
- ; MODS()
- ;
- 202F 0004 ; MOVE.L 0004(A7),D0
- 222F 0008 ; MOVE.L 0008(A7),D1
- 4C41 0801 ; DIVSL.L D1,D1:D0
- C141 ; EXG D0,D1
- 4E75 ; RTS
- 614E ; BSR.B 00A6
- 2001 ; MOVE.L D1,D0
- 4A2F 0004 ; TST.B 0004(A7)
- 6A02 ; BPL.B 0062
- 4480 ; NEG.L D0
- 4E75 ; RTS
- ;
- ; DIVU()
- ;
- 202F 0004 ; MOVE.L 0004(A7),D0
- 222F 0008 ; MOVE.L 0008(A7),D1
- 6138 ; BSR.B 00A6
- 4E75 ; RTS
- ;
- ; MULU()
- ;
- 202F 0004 ; MOVE.L 0004(A7),D0
- 222F 0008 ; MOVE.L 0008(A7),D1
- 6110 ; BSR.B 008A
- 4E75 ; RTS
- ;
- ; MODU()
- ;
- 202F 0004 ; MOVE.L 0004(A7),D0
- 222F 0008 ; MOVE.L 0008(A7),D1
- 6120 ; BSR.B 00A6
- 2001 ; MOVE.L D1,D0
- 4E75 ; RTS
- 4C01 0000 ; MULU.L D1,D0
- 4E75 ; RTS
- 2601 ; MOVE.L D1,D3
- 4843 ; SWAP D3
- C6C0 ; MULU.W D0,D3
- 4840 ; SWAP D0
- C0C1 ; MULU.W D1,D0
- D083 ; ADD.L D3,D0
- 4840 ; SWAP D0
- 4240 ; CLR.W D0
- D082 ; ADD.L D2,D0
- 260A ; MOVE.L A2,D3
- 4E75 ; RTS
- 4A81 ; TST.L D1
- 660E ; BNE.B 00B8
- 80FC 0000 ; DIVU.W #0000,D0
- 203C 8000 0000 ; MOVE.L #80000000,D0
- 2200 ; MOVE.L D0,D1
- 4E75 ; RTS
- 4C41 0001 ; DIVUL.L D1,D1:D0
- 4E75 ; RTS
- #end
-
-