X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hexed%2Fsega_gcc.s;h=441d74c6de5c786b021024d3a886edb99626d5b1;hb=27d5cc886de3c3481bba02f83c52a471521b4dec;hp=a295692cea19a12425734a23ff6cb553058fc3fb;hpb=4db6e09fa46ca4eccb34069d815635dfb86065cf;p=megadrive.git diff --git a/hexed/sega_gcc.s b/hexed/sega_gcc.s index a295692..441d74c 100644 --- a/hexed/sega_gcc.s +++ b/hexed/sega_gcc.s @@ -18,10 +18,10 @@ dc.l INT,INT,INT,INT,INT,INT,INT,INT dc.l INT,INT,INT,INT,INT,INT,INT .ascii "SEGA GENESIS " - .ascii "notaz's Shadow / Hilight test " - .ascii "NOTAZ'S SHADOW HILIGHT TEST " + .ascii "hexed (c) notaz, 2009 " + .ascii "HEXED (C) NOTAZ, 2009 " .ascii "GM 00000000-00" - .byte 0xa5,0xfb + .byte 0x00,0x00 .ascii "JD " .byte 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00 .byte 0x00,0xff,0x00,0x00,0xff,0xff,0xff,0xff @@ -158,251 +158,10 @@ HBL: /* addq.l #1,htimer */ rte -VBL: - /* addq.l #1,vtimer */ - move.l #vtimer,a0 - addq.l #1,(a0) - rte - -*------------------------------------------------ -* -* Get a random number. This routine -* was found in TOS. -* -* Output -* ------ -* d0 = random number -* -*------------------------------------------------ - - .globl random - -random: - move.l rand_num,%d0 - tst.l %d0 - bne .L1 - moveq #16,%d1 - lsl.l %d1,%d0 - or.l htimer,%d0 - move.l %d0,rand_num -.L1: - move.l #-1153374675,-(%sp) - move.l rand_num,-(%sp) - bsr lmul - addq.w #8,%sp - addq.l #1,%d0 - move.l %d0,rand_num - - lsr.l #8,%d0 - and.l #16777215,%d0 - rts - - -*------------------------------------------------ -* -* Copyright (c) 1988 by Sozobon, Limited. Author: Johann Ruegg -* -* Permission is granted to anyone to use this software for any purpose -* on any computer system, and to redistribute it freely, with the -* following restrictions: -* 1) No charge may be made other than reasonable charges for reproduction. -* 2) Modified versions must be clearly marked as such. -* 3) The authors are not responsible for any harmful consequences -* of using this software, even if they result from defects in it. -* -*------------------------------------------------ - -ldiv: - move.l 4(%a7),%d0 - bpl ld1 - neg.l %d0 -ld1: - move.l 8(%a7),%d1 - bpl ld2 - neg.l %d1 - eor.b #0x80,4(%a7) -ld2: - bsr i_ldiv /* d0 = d0/d1 */ - tst.b 4(%a7) - bpl ld3 - neg.l %d0 -ld3: - rts - -lmul: - move.l 4(%a7),%d0 - bpl lm1 - neg.l %d0 -lm1: - move.l 8(%a7),%d1 - bpl lm2 - neg.l %d1 - eor.b #0x80,4(%a7) -lm2: - bsr i_lmul /* d0 = d0*d1 */ - tst.b 4(%a7) - bpl lm3 - neg.l %d0 -lm3: - rts - -lrem: - move.l 4(%a7),%d0 - bpl lr1 - neg.l %d0 -lr1: - move.l 8(%a7),%d1 - bpl lr2 - neg.l %d1 -lr2: - bsr i_ldiv /* d1 = d0%d1 */ - move.l %d1,%d0 - tst.b 4(%a7) - bpl lr3 - neg.l %d0 -lr3: - rts +* VBL: +* addq.l #1,(vtimer).l +* rte -ldivu: - move.l 4(%a7),%d0 - move.l 8(%a7),%d1 - bsr i_ldiv - rts - -lmulu: - move.l 4(%a7),%d0 - move.l 8(%a7),%d1 - bsr i_lmul - rts - -lremu: - move.l 4(%a7),%d0 - move.l 8(%a7),%d1 - bsr i_ldiv - move.l %d1,%d0 - rts -* -* A in d0, B in d1, return A*B in d0 -* -i_lmul: - move.l %d3,%a2 /* save d3 */ - move.w %d1,%d2 - mulu %d0,%d2 /* d2 = Al * Bl */ - - move.l %d1,%d3 - swap %d3 - mulu %d0,%d3 /* d3 = Al * Bh */ - - swap %d0 - mulu %d1,%d0 /* d0 = Ah * Bl */ - - add.l %d3,%d0 /* d0 = (Ah*Bl + Al*Bh) */ - swap %d0 - clr.w %d0 /* d0 = (Ah*Bl + Al*Bh) << 16 */ - - add.l %d2,%d0 /* d0 = A*B */ - move.l %a2,%d3 /* restore d3 */ - rts -* -*A in d0, B in d1, return A/B in d0, A%B in d1 -* -i_ldiv: - tst.l %d1 - bne nz1 - -* divide by zero -* divu #0,%d0 /* cause trap */ - move.l #0x80000000,%d0 - move.l %d0,%d1 - rts -nz1: - move.l %d3,%a2 /* save d3 */ - cmp.l %d1,%d0 - bhi norm - beq is1 -* AB and B is not 0 -norm: - cmp.l #1,%d1 - bne not1 -* B==1, so ret A, rem 0 - clr.l %d1 - move.l %a2,%d3 /* restore d3 */ - rts -* check for A short (implies B short also) -not1: - cmp.l #0xffff,%d0 - bhi slow -* A short and B short -- use 'divu' - divu %d1,%d0 /* d0 = REM:ANS */ - swap %d0 /* d0 = ANS:REM */ - clr.l %d1 - move.w %d0,%d1 /* d1 = REM */ - clr.w %d0 - swap %d0 - move.l %a2,%d3 /* restore d3 */ - rts -* check for B short -slow: - cmp.l #0xffff,%d1 - bhi slower -* A long and B short -- use special stuff from gnu - move.l %d0,%d2 - clr.w %d2 - swap %d2 - divu %d1,%d2 /* d2 = REM:ANS of Ahi/B */ - clr.l %d3 - move.w %d2,%d3 /* d3 = Ahi/B */ - swap %d3 - - move.w %d0,%d2 /* d2 = REM << 16 + Alo */ - divu %d1,%d2 /* d2 = REM:ANS of stuff/B */ - - move.l %d2,%d1 - clr.w %d1 - swap %d1 /* d1 = REM */ - - clr.l %d0 - move.w %d2,%d0 - add.l %d3,%d0 /* d0 = ANS */ - move.l %a2,%d3 /* restore d3 */ - rts -* A>B, B > 1 -slower: - move.l #1,%d2 - clr.l %d3 -moreadj: - cmp.l %d0,%d1 - bhs adj - add.l %d2,%d2 - add.l %d1,%d1 - bpl moreadj -* we shifted B until its >A or sign bit set -* we shifted #1 (d2) along with it -adj: - cmp.l %d0,%d1 - bhi ltuns - or.l %d2,%d3 - sub.l %d1,%d0 -ltuns: - lsr.l #1,%d1 - lsr.l #1,%d2 - bne adj -* d3=answer, d0=rem - move.l %d0,%d1 - move.l %d3,%d0 - move.l %a2,%d3 /* restore d3 */ - rts *---------------------------------------------------------- * * Z80 Sound Driver