Revision 486579de

b/hw/sh7750.c
60 60
    uint16_t periph_portdirb;	/* Direction seen from the peripherals */
61 61
    sh7750_io_device *devices[NB_DEVICES];	/* External peripherals */
62 62

  
63
    uint16_t icr;
64 63
    /* Cache */
65 64
    uint32_t ccr;
66 65

  
......
222 221
	return porta_lines(s);
223 222
    case SH7750_PDTRB_A7:
224 223
	return portb_lines(s);
225
    case 0x1fd00000:
226
        return s->icr;
227 224
    default:
228 225
	error_access("word read", addr);
229 226
	assert(0);
......
328 325
	    assert(0);
329 326
	}
330 327
	return;
331
    case 0x1fd00000:
332
        s->icr = mem_value;
333
	return;
334 328
    default:
335 329
	error_access("word write", addr);
336 330
	assert(0);
......
687 681
    sh7750_io_memory = cpu_register_io_memory(0,
688 682
					      sh7750_mem_read,
689 683
					      sh7750_mem_write, s);
690
    cpu_register_physical_memory_offset(0x1c000000, 0x04000000,
691
                                        sh7750_io_memory, 0x1c000000);
684
    cpu_register_physical_memory_offset(0x1f000000, 0x1000,
685
                                        sh7750_io_memory, 0x1f000000);
686
    cpu_register_physical_memory_offset(0x1f800000, 0x1000,
687
                                        sh7750_io_memory, 0x1f800000);
688
    cpu_register_physical_memory_offset(0x1fc00000, 0x1000,
689
                                        sh7750_io_memory, 0x1fc00000);
692 690

  
693 691
    sh7750_mm_cache_and_tlb = cpu_register_io_memory(0,
694 692
						     sh7750_mmct_read,
b/hw/sm501.c
638 638
    &sm501_system_config_write,
639 639
};
640 640

  
641
static uint32_t sm501_palette_read(void *opaque, target_phys_addr_t addr)
642
{
643
    SM501State * s = (SM501State *)opaque;
644
    SM501_DPRINTF("sm501 palette read addr=%x\n", (int)addr);
645

  
646
    /* TODO : consider BYTE/WORD access */
647
    /* TODO : consider endian */
648

  
649
    assert(0 <= addr && addr < 0x400 * 3);
650
    return *(uint32_t*)&s->dc_palette[addr];
651
}
652

  
653
static void sm501_palette_write(void *opaque,
654
				target_phys_addr_t addr, uint32_t value)
655
{
656
    SM501State * s = (SM501State *)opaque;
657
    SM501_DPRINTF("sm501 palette write addr=%x, val=%x\n",
658
		  (int)addr, value);
659

  
660
    /* TODO : consider BYTE/WORD access */
661
    /* TODO : consider endian */
662

  
663
    assert(0 <= addr && addr < 0x400 * 3);
664
    *(uint32_t*)&s->dc_palette[addr] = value;
665
}
666

  
641 667
static uint32_t sm501_disp_ctrl_read(void *opaque, target_phys_addr_t addr)
642 668
{
643 669
    SM501State * s = (SM501State *)opaque;
......
719 745
	ret = s->dc_crt_hwc_addr;
720 746
	break;
721 747

  
748
    case SM501_DC_PANEL_PALETTE ... SM501_DC_PANEL_PALETTE + 0x400*3 - 4:
749
        ret = sm501_palette_read(opaque, addr - SM501_DC_PANEL_PALETTE);
750
        break;
751

  
722 752
    default:
723 753
	printf("sm501 disp ctrl : not implemented register read."
724 754
	       " addr=%x\n", (int)addr);
......
823 853
	s->dc_crt_hwc_addr = value & 0x0000FFFF;
824 854
	break;
825 855

  
856
    case SM501_DC_PANEL_PALETTE ... SM501_DC_PANEL_PALETTE + 0x400*3 - 4:
857
        sm501_palette_write(opaque, addr - SM501_DC_PANEL_PALETTE, value);
858
        break;
859

  
826 860
    default:
827 861
	printf("sm501 disp ctrl : not implemented register write."
828 862
	       " addr=%x, val=%x\n", (int)addr, value);
......
842 876
    &sm501_disp_ctrl_write,
843 877
};
844 878

  
845
static uint32_t sm501_palette_read(void *opaque, target_phys_addr_t addr)
846
{
847
    SM501State * s = (SM501State *)opaque;
848
    SM501_DPRINTF("sm501 palette read addr=%x\n", (int)addr);
849

  
850
    /* TODO : consider BYTE/WORD access */
851
    /* TODO : consider endian */
852

  
853
    assert(0 <= addr && addr < 0x400 * 3);
854
    return *(uint32_t*)&s->dc_palette[addr];
855
}
856

  
857
static void sm501_palette_write(void *opaque,
858
				target_phys_addr_t addr, uint32_t value)
859
{
860
    SM501State * s = (SM501State *)opaque;
861
    SM501_DPRINTF("sm501 palette write addr=%x, val=%x\n",
862
		  (int)addr, value);
863

  
864
    /* TODO : consider BYTE/WORD access */
865
    /* TODO : consider endian */
866

  
867
    assert(0 <= addr && addr < 0x400 * 3);
868
    *(uint32_t*)&s->dc_palette[addr] = value;
869
}
870

  
871
static CPUReadMemoryFunc *sm501_palette_readfn[] = {
872
    &sm501_palette_read,
873
    &sm501_palette_read,
874
    &sm501_palette_read,
875
};
876

  
877
static CPUWriteMemoryFunc *sm501_palette_writefn[] = {
878
    &sm501_palette_write,
879
    &sm501_palette_write,
880
    &sm501_palette_write,
881
};
882

  
883

  
884 879
/* draw line functions for all console modes */
885 880

  
886 881
#include "pixel_ops.h"
......
1070 1065
    SM501State * s;
1071 1066
    int sm501_system_config_index;
1072 1067
    int sm501_disp_ctrl_index;
1073
    int sm501_palette_index;
1074 1068

  
1075 1069
    /* allocate management data region */
1076 1070
    s = (SM501State *)qemu_mallocz(sizeof(SM501State));
......
1098 1092
    sm501_disp_ctrl_index = cpu_register_io_memory(0, sm501_disp_ctrl_readfn,
1099 1093
						   sm501_disp_ctrl_writefn, s);
1100 1094
    cpu_register_physical_memory(base + MMIO_BASE_OFFSET + SM501_DC,
1101
				 0x400, sm501_disp_ctrl_index);
1102

  
1103
    sm501_palette_index = cpu_register_io_memory(0, sm501_palette_readfn,
1104
						   sm501_palette_writefn, s);
1105
    cpu_register_physical_memory(base + MMIO_BASE_OFFSET
1106
				 + SM501_DC + SM501_DC_PANEL_PALETTE,
1107
				 0x400 * 3, sm501_palette_index);
1095
                                 0x1000, sm501_disp_ctrl_index);
1108 1096

  
1109 1097
    /* bridge to serial emulation module */
1110 1098
    if (chr)

Also available in: Unified diff