OSDN Git Service

[VM][FM77AV][DISPLAY] VRAM : Use alu before read/write , if enabled.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Wed, 1 Apr 2015 22:22:46 +0000 (07:22 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Wed, 1 Apr 2015 22:22:46 +0000 (07:22 +0900)
source/src/vm/fm7/77av_alu.cpp
source/src/vm/fm7/display.cpp

index abaa12b..4a7a095 100644 (file)
@@ -269,7 +269,7 @@ uint8 FMALU::do_compare(uint32 addr)
 
 uint8 FMALU::do_alucmds(uint32 addr)
 {
-  printf("ALU: ADDR=%04x, cmd = %02x", addr, command_reg);
+  //  printf("ALU: ADDR=%04x, cmd = %02x\n", addr, command_reg);
        if(addr >= 0x8000) {
                mask_reg = 0xff;
                return 0xff;
@@ -500,7 +500,6 @@ void FMALU::write_data8(uint32 id, uint32 data)
 
 uint32 FMALU::read_data8(uint32 id)
 {
-  //if((command_reg & 0x80) == 0) return 0xff;
   
        switch(id) {
                case ALU_CMDREG:
index c9a4bc3..8670d40 100644 (file)
@@ -1420,6 +1420,9 @@ uint32 DISPLAY::read_data8(uint32 addr)
                        if((multimode_accessmask & (1 << color)) != 0) {
                                return 0xff;
                        } else {
+                               if(use_alu) {
+                                       return alu->read_data8((((addr + offset) & mask) | (pagemod << 13)) + page_offset + ALU_WRITE_PROXY);
+                               }
                                retval = gvram[(((addr + offset) & mask) | (pagemod << 13)) + page_offset];
                                return retval;
                        }
@@ -1429,6 +1432,9 @@ uint32 DISPLAY::read_data8(uint32 addr)
                        if((multimode_accessmask & (1 << pagemod)) != 0) {
                                return 0xff;
                        } else {
+                               if(use_alu) {
+                                       return alu->read_data8((((addr + offset) & mask) | (pagemod << 14)) + page_offset + ALU_WRITE_PROXY);
+                               }
                                retval = gvram[(((addr + offset) & mask) | (pagemod << 14)) + page_offset];
                                return retval;
                        }
@@ -1767,7 +1773,8 @@ void DISPLAY::write_data8(uint32 addr, uint32 data)
                        pagemod = (addr & 0xe000) >> 13;
                        if((multimode_accessmask & (1 << color)) == 0) {
                                if(use_alu) {
-                                       dummy = alu->read_data8(((addr + offset) & mask) + ALU_WRITE_PROXY + page_offset);
+                                        dummy = alu->read_data8((((addr + offset) & mask) | (pagemod << 13)) + page_offset + ALU_WRITE_PROXY);
+                                        //dummy = alu->read_data8(((addr + offset) & mask) + ALU_WRITE_PROXY + page_offset);
                                        return;
                                }
                                //gvram[(((addr + offset) & mask) | (pagemod << 13)) + page_offset] = val8;
@@ -1779,7 +1786,8 @@ void DISPLAY::write_data8(uint32 addr, uint32 data)
                        pagemod = (addr & 0xc000) >> 14;
                        if((multimode_accessmask & (1 << pagemod)) == 0) {
                                if(use_alu) {
-                                       dummy = alu->read_data8(((addr + offset) & mask) + ALU_WRITE_PROXY + page_offset);
+                                       dummy = alu->read_data8((((addr + offset) & mask) | (pagemod << 14)) + page_offset + ALU_WRITE_PROXY);
+                                        //                                     dummy = alu->read_data8(((addr + offset) & mask) + ALU_WRITE_PROXY + page_offset);
                                        return;
                                }
                                gvram[(((addr + offset) & mask) | (pagemod << 14)) + page_offset] = val8;