Fixed a slight mess with the Amstrad PC1512 and PC1640 memory mappings.
This commit is contained in:
@@ -32,7 +32,7 @@
|
|||||||
* in alpha mode, but in highres ("ECD350") mode, it displays
|
* in alpha mode, but in highres ("ECD350") mode, it displays
|
||||||
* some semi-random junk. Video-memory pointer maybe?
|
* some semi-random junk. Video-memory pointer maybe?
|
||||||
*
|
*
|
||||||
* Version: @(#)m_amstrad.c 1.0.6 2018/01/24
|
* Version: @(#)m_amstrad.c 1.0.7 2018/01/28
|
||||||
*
|
*
|
||||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -85,8 +85,6 @@
|
|||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
mem_mapping_t cga_map; /* 1512/1640/200 */
|
|
||||||
mem_mapping_t ega_map; /* 1640 */
|
|
||||||
rom_t bios_rom; /* 1640 */
|
rom_t bios_rom; /* 1640 */
|
||||||
cga_t cga; /* 1640/200 */
|
cga_t cga; /* 1640/200 */
|
||||||
ega_t ega; /* 1640 */
|
ega_t ega; /* 1640 */
|
||||||
@@ -527,7 +525,7 @@ vid_init_1512(amstrad_t *ams)
|
|||||||
vid->cgamode = 0x12;
|
vid->cgamode = 0x12;
|
||||||
|
|
||||||
timer_add(vid_poll_1512, &vid->vidtime, TIMER_ALWAYS_ENABLED, vid);
|
timer_add(vid_poll_1512, &vid->vidtime, TIMER_ALWAYS_ENABLED, vid);
|
||||||
mem_mapping_add(&vid->cga_map, 0xb8000, 0x08000,
|
mem_mapping_add(&vid->cga.mapping, 0xb8000, 0x08000,
|
||||||
vid_read_1512, NULL, NULL, vid_write_1512, NULL, NULL,
|
vid_read_1512, NULL, NULL, vid_write_1512, NULL, NULL,
|
||||||
NULL, 0, vid);
|
NULL, 0, vid);
|
||||||
io_sethandler(0x03d0, 16,
|
io_sethandler(0x03d0, 16,
|
||||||
@@ -599,28 +597,28 @@ vid_out_1640(uint16_t addr, uint8_t val, void *priv)
|
|||||||
case 0x03db:
|
case 0x03db:
|
||||||
vid->cga_enabled = val & 0x40;
|
vid->cga_enabled = val & 0x40;
|
||||||
if (vid->cga_enabled) {
|
if (vid->cga_enabled) {
|
||||||
mem_mapping_enable(&vid->cga_map);
|
mem_mapping_enable(&vid->cga.mapping);
|
||||||
mem_mapping_disable(&vid->ega_map);
|
mem_mapping_disable(&vid->ega.mapping);
|
||||||
} else {
|
} else {
|
||||||
mem_mapping_disable(&vid->cga_map);
|
mem_mapping_disable(&vid->cga.mapping);
|
||||||
switch (vid->ega.gdcreg[6] & 0xc) {
|
switch (vid->ega.gdcreg[6] & 0xc) {
|
||||||
case 0x0: /*128k at A0000*/
|
case 0x0: /*128k at A0000*/
|
||||||
mem_mapping_set_addr(&vid->ega_map,
|
mem_mapping_set_addr(&vid->ega.mapping,
|
||||||
0xa0000, 0x20000);
|
0xa0000, 0x20000);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x4: /*64k at A0000*/
|
case 0x4: /*64k at A0000*/
|
||||||
mem_mapping_set_addr(&vid->ega_map,
|
mem_mapping_set_addr(&vid->ega.mapping,
|
||||||
0xa0000, 0x10000);
|
0xa0000, 0x10000);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x8: /*32k at B0000*/
|
case 0x8: /*32k at B0000*/
|
||||||
mem_mapping_set_addr(&vid->ega_map,
|
mem_mapping_set_addr(&vid->ega.mapping,
|
||||||
0xb0000, 0x08000);
|
0xb0000, 0x08000);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xC: /*32k at B8000*/
|
case 0xC: /*32k at B8000*/
|
||||||
mem_mapping_set_addr(&vid->ega_map,
|
mem_mapping_set_addr(&vid->ega.mapping,
|
||||||
0xb8000, 0x08000);
|
0xb8000, 0x08000);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -688,9 +686,9 @@ vid_init_1640(amstrad_t *ams)
|
|||||||
vid->cga_enabled = 1;
|
vid->cga_enabled = 1;
|
||||||
cga_init(&vid->cga);
|
cga_init(&vid->cga);
|
||||||
|
|
||||||
mem_mapping_add(&vid->cga_map, 0xb8000, 0x08000,
|
mem_mapping_add(&vid->cga.mapping, 0xb8000, 0x08000,
|
||||||
cga_read, NULL, NULL, cga_write, NULL, NULL, NULL, 0, &vid->cga);
|
cga_read, NULL, NULL, cga_write, NULL, NULL, NULL, 0, &vid->cga);
|
||||||
mem_mapping_add(&vid->ega_map, 0, 0,
|
mem_mapping_add(&vid->ega.mapping, 0, 0,
|
||||||
ega_read, NULL, NULL, ega_write, NULL, NULL, NULL, 0, &vid->ega);
|
ega_read, NULL, NULL, ega_write, NULL, NULL, NULL, 0, &vid->ega);
|
||||||
io_sethandler(0x03a0, 64,
|
io_sethandler(0x03a0, 64,
|
||||||
vid_in_1640, NULL, NULL, vid_out_1640, NULL, NULL, vid);
|
vid_in_1640, NULL, NULL, vid_out_1640, NULL, NULL, vid);
|
||||||
@@ -825,7 +823,7 @@ vid_init_200(amstrad_t *ams)
|
|||||||
cga->vram = malloc(0x4000);
|
cga->vram = malloc(0x4000);
|
||||||
cga_init(cga);
|
cga_init(cga);
|
||||||
|
|
||||||
mem_mapping_add(&vid->cga_map, 0xb8000, 0x08000,
|
mem_mapping_add(&vid->cga.mapping, 0xb8000, 0x08000,
|
||||||
cga_read, NULL, NULL, cga_write, NULL, NULL, NULL, 0, cga);
|
cga_read, NULL, NULL, cga_write, NULL, NULL, NULL, 0, cga);
|
||||||
io_sethandler(0x03d0, 16,
|
io_sethandler(0x03d0, 16,
|
||||||
vid_in_200, NULL, NULL, vid_out_200, NULL, NULL, vid);
|
vid_in_200, NULL, NULL, vid_out_200, NULL, NULL, vid);
|
||||||
|
Reference in New Issue
Block a user