cleanup and vbl a0 corruption fix
authornotaz <notasas@gmail.com>
Tue, 17 Mar 2009 23:09:51 +0000 (23:09 +0000)
committernotaz <notasas@gmail.com>
Tue, 17 Mar 2009 23:09:51 +0000 (23:09 +0000)
hexed/hexed.s
hexed/sega_gcc.s

index 6ca711a..18ea5c2 100644 (file)
 .endm
 
 
-# make VDP word from address adr to d0
-# destroys d7
-.macro VRAM_ADDR_var adr
+.macro CRAM_ADDR reg adr
+       move.l  #(((0xc000 + (\adr & 0x3fff)) << 16) + (\adr >> 14)),\reg
+.endm
+
+
+# make VDP word from address adr and store in d0
+.macro XRAM_ADDR_var adr
        move.l \adr,d0
-       move.l \adr,d7
-       and.w #0x3fff,d0
-       lsr.w #7,d7
-       lsr.w #7,d7
-       add.w #0x4000,d0
-       lsl.l #7,d0
-       lsl.l #7,d0
-       lsl.l #2,d0
-       or.l d7,d0
+       lsl.l #8,d0
+       lsl.l #8,d0
+       rol.l #2,d0
+       lsl.b #2,d0
+       lsr.l #2,d0
 .endm
 
 
-.macro CRAM_ADDR reg adr
-       move.l  #(((0xc000 + (\adr & 0x3fff)) << 16) + (\adr >> 14)),\reg
+.macro VRAM_ADDR_var adr
+       XRAM_ADDR_var \adr
+       or.l #0x40000000,d0
 .endm
 
 
-/* For indirect (variable) addresses */
-.macro CRAM_ADDR_var reg adr
-       move.l \adr,d6
-       move.l \adr,d7
-       and.w #0x3fff,d6
-       lsr.w #7,d7
-       lsr.w #7,d7
-       add.w #0xc000,d6
-       lsl.l #7,d6
-       lsl.l #7,d6
-       lsl.l #2,d6
-       or.l d7,d6
-       move.l d6,\reg
+.macro CRAM_ADDR_var adr
+       XRAM_ADDR_var \adr
+       or.l #0xc0000000,d0
 .endm
 
 
@@ -146,46 +137,46 @@ main:
        jsr             init_gfx
 
        /* Load color data */
-       movea.l         #0,a3
-       movea.l         #colors,a4
-       moveq.l         #(colors_end-colors)/2,d4
+       movea.l         #0,a0
+       movea.l         #colors,a1
+       moveq.l         #(colors_end-colors)/2,d0
        jsr             load_colors
 
        /* load patterns */
-       movea.l         #0,a3
-       movea.l         #font,a4
-       move.l          #128,d4
+       movea.l         #0,a0
+       movea.l         #font,a1
+       move.l          #128,d0
        jsr             load_tiles
 
        /* generate A layer map */
        movea.l         #0xe000,a6
        move.l          #28-1,d4
 lmaploop0:
-       movea.l         a6,a3
+       movea.l         a6,a0
        jsr             load_prepare
 
        move.l          #64/2-1,d3
-0:     move.l          #0x00000000,(a3)
+0:     move.l          #0x00000000,(a0)
        dbra            d3,0b
 
        add.l           #64*2,a6
        dbra            d4,lmaploop0
 
        /* generate B layer map */
-       movea.l         #0xc000,a3
+       movea.l         #0xc000,a0
        jsr             load_prepare
 
        move.l          #64*28/2-1,d3
-0:     move.l          #0x00000000,(a3)
+0:     move.l          #0x00000000,(a0)
        dbra            d3,0b
 
        /* upload sprite data */
-       movea.l         #0xfc00,a3
+       movea.l         #0xfc00,a0
        jsr             load_prepare
-       movea.l         #sprite_data,a0
+       movea.l         #sprite_data,a1
 
        move.l          #(sprite_data_end-sprite_data)/2-1,d3
-0:     move.l          (a0)+,(a3)
+0:     move.l          (a1)+,(a0)
        dbra            d3,0b
 
        jsr             wait_vsync
@@ -236,95 +227,80 @@ init_gfx:
        rts
 
 
-
-#################################################
-#                                               #
-#        Load tile data from ROM                #
-#                                               #
-# Parameters:                                   #
-#  a3: VRAM base                                # 
-#  a4: pattern address                          #
-#  d4: number of tiles to load                  #
-#  Destroys a2,d0,d7...                         #
-#                                               #
-#################################################
+# Load tile data from ROM
+#  a0: VRAM base
+#  a1: pattern address
+#  d0: number of tiles to load
+#  destroys d1
 
 load_tiles:
-       move.l          #GFXCNTL,a2
-       VRAM_ADDR_var   a3
-       move.l          d0,(a2)
-       lsl             #3,d4
+       move.l          d0,d1
+       VRAM_ADDR_var   a0
+       move.l          d0,(GFXCNTL).l
        
-       move.l          #GFXDATA,a3
-       subq.l          #1,d4
-_copy_tile_data:
-       move.l          (a4)+,(a3)
-       dbra            d4,_copy_tile_data
+       move.l          #GFXDATA,a0
+       lsl.w           #3,d1
+       subq.l          #1,d1
+0:
+       move.l          (a1)+,(a0)
+       dbra            d1,0b
 
        rts
 
 
 # Prepare to write to VDP RAM @a3
-#  a3: VRAM base
-#  a3 set to VDP data port for convenience
-#  destroys a2,d0,d7
+# sets a0 to VDP data port for convenience
+#  a0: VRAM base
+#  destroys d0
 
 load_prepare:
-       move.l          #GFXCNTL,a2
-       VRAM_ADDR_var   a3
-       move.l          d0,(a2)
-       move.l          #GFXDATA,a3
-
+       VRAM_ADDR_var   a0
+       move.l          d0,(GFXCNTL).l
+       move.l          #GFXDATA,a0
        rts
 
 
-#################################################
-#                                               #
-#        Load color data from ROM               #
-#                                               #
-# Parameters:                                   #
-#  a3: CRAM base                                # 
-#  a4: color list address                       #
-#  d4: number of colors to load                 #
-#                                               #
-#################################################
+# Load color data from ROM
+#  a0: CRAM base
+#  a1: color list address
+#  d0: number of colors to load
+#  destroys d1
 
 load_colors:
-       move.l          #GFXCNTL,a2
-       CRAM_ADDR_var   d0,a3
-       move.l          d0,(a2)
+       move.l          d0,d1
+       CRAM_ADDR_var   a0
+       move.l          d0,(GFXCNTL).l
 
-       move.l          #GFXDATA,a3
-       subq.w          #1,d4
-_copy_color_data:
-       move.w          (a4)+,(a3)
-       dbra            d4,_copy_color_data
+       move.l          #GFXDATA,a0
+       subq.w          #1,d1
+0:
+       move.w          (a1)+,(a0)
+       dbra            d1,0b
 
        rts
 
-#################################################
-##
-## print
-#   a0 - string
-#   d0 - x
-#   d1 - y 
+
+# print
+#  a0 - string
+#  d0 - x
+#  d1 - y 
+#  destroys a1
 
 print:
+       move.l          a0,a1
        lsl.w           #6,d1
        add.w           d1,d0
-       movea.l         #0xe000,a6
        lsl.w           #1,d0
-       add.w           d0,a6
-       moveq.l         #0,d1
+       movea.l         #0xe000,a0
+       add.w           d0,a0
+       jsr             load_prepare
+       moveq.l         #0,d0
 
 _print_loop:
-       move.b          (a0)+,d1
+       move.b          (a1)+,d0
        beq             _print_end
 
-       move.l          a6,a3
-       jsr             load_prepare
-       move.w          d1,(a3)
-       addq.l          #2,a6
+       move.w          d0,(a0)
        jmp             _print_loop
 
 _print_end:
index a295692..8b201d5 100644 (file)
@@ -18,8 +18,8 @@
         dc.l INT,INT,INT,INT,INT,INT,INT,INT\r
         dc.l INT,INT,INT,INT,INT,INT,INT\r
         .ascii "SEGA GENESIS                    "\r
-        .ascii "notaz's Shadow / Hilight test                   "\r
-        .ascii "NOTAZ'S SHADOW HILIGHT TEST                     "\r
+        .ascii "hex editor (c) notaz                            "\r
+        .ascii "HEX EDITOR (C) NOTAZ                            "\r
         .ascii "GM 00000000-00"\r
         .byte 0xa5,0xfb\r
         .ascii "JD              "\r
@@ -159,250 +159,9 @@ HBL:
        rte\r
 \r
 VBL:\r
-        /* addq.l   #1,vtimer */\r
-        move.l #vtimer,a0\r
-        addq.l #1,(a0)\r
+       addq.l #1,(vtimer).l\r
        rte\r
 \r
-*------------------------------------------------\r
-*\r
-*       Get a random number.  This routine\r
-*       was found in TOS.\r
-*\r
-*       Output\r
-*       ------\r
-*       d0 = random number\r
-*\r
-*------------------------------------------------\r
-\r
-        .globl  random\r
-\r
-random:\r
-                move.l      rand_num,%d0\r
-                tst.l       %d0\r
-                bne         .L1\r
-                moveq       #16,%d1\r
-                lsl.l       %d1,%d0\r
-                or.l        htimer,%d0\r
-                move.l      %d0,rand_num\r
-.L1:\r
-                move.l      #-1153374675,-(%sp)\r
-                move.l      rand_num,-(%sp)\r
-                bsr         lmul\r
-                addq.w      #8,%sp\r
-                addq.l      #1,%d0\r
-                move.l      %d0,rand_num\r
-\r
-                lsr.l       #8,%d0\r
-                and.l       #16777215,%d0\r
-                rts\r
-\r
-\r
-*------------------------------------------------\r
-*\r
-* Copyright (c) 1988 by Sozobon, Limited.  Author: Johann Ruegg\r
-*\r
-* Permission is granted to anyone to use this software for any purpose\r
-* on any computer system, and to redistribute it freely, with the\r
-* following restrictions:\r
-* 1) No charge may be made other than reasonable charges for reproduction.\r
-* 2) Modified versions must be clearly marked as such.\r
-* 3) The authors are not responsible for any harmful consequences\r
-*    of using this software, even if they result from defects in it.\r
-*\r
-*------------------------------------------------\r
-\r
-ldiv:\r
-        move.l  4(%a7),%d0\r
-       bpl     ld1\r
-        neg.l   %d0\r
-ld1:\r
-        move.l  8(%a7),%d1\r
-       bpl     ld2\r
-        neg.l   %d1\r
-        eor.b   #0x80,4(%a7)\r
-ld2:\r
-       bsr     i_ldiv          /* d0 = d0/d1 */\r
-        tst.b   4(%a7)\r
-       bpl     ld3\r
-        neg.l   %d0\r
-ld3:\r
-       rts\r
-\r
-lmul:\r
-        move.l  4(%a7),%d0\r
-       bpl     lm1\r
-        neg.l   %d0\r
-lm1:\r
-        move.l  8(%a7),%d1\r
-       bpl     lm2\r
-        neg.l   %d1\r
-        eor.b   #0x80,4(%a7)\r
-lm2:\r
-       bsr     i_lmul          /* d0 = d0*d1 */\r
-        tst.b   4(%a7)\r
-       bpl     lm3\r
-        neg.l   %d0\r
-lm3:\r
-       rts\r
-\r
-lrem:\r
-        move.l  4(%a7),%d0\r
-       bpl     lr1\r
-        neg.l   %d0\r
-lr1:\r
-        move.l  8(%a7),%d1\r
-       bpl     lr2\r
-        neg.l   %d1\r
-lr2:\r
-       bsr     i_ldiv          /* d1 = d0%d1 */\r
-        move.l  %d1,%d0\r
-        tst.b   4(%a7)\r
-       bpl     lr3\r
-        neg.l   %d0\r
-lr3:\r
-       rts\r
-\r
-ldivu:\r
-        move.l  4(%a7),%d0\r
-        move.l  8(%a7),%d1\r
-       bsr     i_ldiv\r
-       rts\r
-\r
-lmulu:\r
-        move.l  4(%a7),%d0\r
-        move.l  8(%a7),%d1\r
-       bsr     i_lmul\r
-       rts\r
-\r
-lremu:\r
-        move.l  4(%a7),%d0\r
-        move.l  8(%a7),%d1\r
-       bsr     i_ldiv\r
-        move.l  %d1,%d0\r
-       rts\r
-*\r
-* A in d0, B in d1, return A*B in d0\r
-*\r
-i_lmul:\r
-        move.l  %d3,%a2           /* save d3 */\r
-        move.w  %d1,%d2\r
-        mulu    %d0,%d2           /* d2 = Al * Bl */\r
-\r
-        move.l  %d1,%d3\r
-        swap    %d3\r
-        mulu    %d0,%d3           /* d3 = Al * Bh */\r
-\r
-        swap    %d0\r
-        mulu    %d1,%d0           /* d0 = Ah * Bl */\r
-\r
-        add.l   %d3,%d0           /* d0 = (Ah*Bl + Al*Bh) */\r
-        swap    %d0\r
-        clr.w   %d0              /* d0 = (Ah*Bl + Al*Bh) << 16 */\r
-\r
-        add.l   %d2,%d0           /* d0 = A*B */\r
-        move.l  %a2,%d3           /* restore d3 */\r
-       rts\r
-*\r
-*A in d0, B in d1, return A/B in d0, A%B in d1\r
-*\r
-i_ldiv:\r
-        tst.l   %d1\r
-       bne     nz1\r
-\r
-*       divide by zero\r
-*       divu    #0,%d0           /* cause trap */\r
-        move.l  #0x80000000,%d0\r
-        move.l  %d0,%d1\r
-       rts\r
-nz1:\r
-        move.l  %d3,%a2           /* save d3 */\r
-        cmp.l   %d1,%d0\r
-       bhi     norm\r
-       beq     is1\r
-*       A<B, so ret 0, rem A\r
-        move.l  %d0,%d1\r
-        clr.l   %d0\r
-        move.l  %a2,%d3           /* restore d3 */\r
-       rts\r
-*       A==B, so ret 1, rem 0\r
-is1:\r
-        moveq.l #1,%d0\r
-        clr.l   %d1\r
-        move.l  %a2,%d3           /* restore d3 */\r
-       rts\r
-*       A>B and B is not 0\r
-norm:\r
-        cmp.l   #1,%d1\r
-       bne     not1\r
-*       B==1, so ret A, rem 0\r
-        clr.l   %d1\r
-        move.l  %a2,%d3           /* restore d3 */\r
-       rts\r
-*  check for A short (implies B short also)\r
-not1:\r
-        cmp.l   #0xffff,%d0\r
-       bhi     slow\r
-*  A short and B short -- use 'divu'\r
-        divu    %d1,%d0           /* d0 = REM:ANS */\r
-        swap    %d0              /* d0 = ANS:REM */\r
-        clr.l   %d1\r
-        move.w  %d0,%d1           /* d1 = REM */\r
-        clr.w   %d0\r
-        swap    %d0\r
-        move.l  %a2,%d3           /* restore d3 */\r
-       rts\r
-* check for B short\r
-slow:\r
-        cmp.l   #0xffff,%d1\r
-       bhi     slower\r
-* A long and B short -- use special stuff from gnu\r
-        move.l  %d0,%d2\r
-        clr.w   %d2\r
-        swap    %d2\r
-        divu    %d1,%d2           /* d2 = REM:ANS of Ahi/B */\r
-        clr.l   %d3\r
-        move.w  %d2,%d3           /* d3 = Ahi/B */\r
-        swap    %d3\r
-\r
-        move.w  %d0,%d2           /* d2 = REM << 16 + Alo */\r
-        divu    %d1,%d2           /* d2 = REM:ANS of stuff/B */\r
-\r
-        move.l  %d2,%d1\r
-        clr.w   %d1\r
-        swap    %d1              /* d1 = REM */\r
-\r
-        clr.l   %d0\r
-        move.w  %d2,%d0\r
-        add.l   %d3,%d0           /* d0 = ANS */\r
-        move.l  %a2,%d3           /* restore d3 */\r
-       rts\r
-*       A>B, B > 1\r
-slower:\r
-        move.l  #1,%d2\r
-        clr.l   %d3\r
-moreadj:\r
-        cmp.l   %d0,%d1\r
-       bhs     adj\r
-        add.l   %d2,%d2\r
-        add.l   %d1,%d1\r
-       bpl     moreadj\r
-* we shifted B until its >A or sign bit set\r
-* we shifted #1 (d2) along with it\r
-adj:\r
-        cmp.l   %d0,%d1\r
-       bhi     ltuns\r
-        or.l    %d2,%d3\r
-        sub.l   %d1,%d0\r
-ltuns:\r
-        lsr.l   #1,%d1\r
-        lsr.l   #1,%d2\r
-       bne     adj\r
-* d3=answer, d0=rem\r
-        move.l  %d0,%d1\r
-        move.l  %d3,%d0\r
-        move.l  %a2,%d3           /* restore d3 */\r
-       rts\r
 *----------------------------------------------------------        \r
 *\r
 *       Z80 Sound Driver\r