Annotation of generator/src/memz80.c, revision 1.1

1.1     ! root        1: /*****************************************************************************/
        !             2: /*     Generator - Sega Genesis emulation - (c) James Ponder 1997-1998       */
        !             3: /*****************************************************************************/
        !             4: /*                                                                           */
        !             5: /* memz80.c                                                                  */
        !             6: /*                                                                           */
        !             7: /*****************************************************************************/
        !             8: 
        !             9: #include <stdio.h>
        !            10: 
        !            11: #include "generator.h"
        !            12: #include "mem68k.h"
        !            13: #include "cpuz80.h"
        !            14: #include "memz80.h"
        !            15: #include "gensound.h"
        !            16: #include "ui.h"
        !            17: 
        !            18: /*** forward references ***/
        !            19: 
        !            20: uint8 memz80_fetch_bad_byte(uint32 addr);
        !            21: uint8 memz80_fetch_sram_byte(uint32 addr);
        !            22: uint8 memz80_fetch_yam_byte(uint32 addr);
        !            23: uint8 memz80_fetch_bank_byte(uint32 addr);
        !            24: uint8 memz80_fetch_mem_byte(uint32 addr);
        !            25: uint8 memz80_fetch_psg_byte(uint32 addr);
        !            26: 
        !            27: void memz80_store_bad_byte(uint32 addr,  uint8 data);
        !            28: void memz80_store_sram_byte(uint32 addr, uint8 data);
        !            29: void memz80_store_yam_byte(uint32 addr, uint8 data);
        !            30: void memz80_store_bank_byte(uint32 addr, uint8 data);
        !            31: void memz80_store_mem_byte(uint32 addr, uint8 data);
        !            32: void memz80_store_psg_byte(uint32 addr, uint8 data);
        !            33: 
        !            34: /*** file scope variables */
        !            35: 
        !            36: /*** memory map ***/
        !            37: 
        !            38: t_memz80_def memz80_def[] = {
        !            39:   { 0x00, 0x20,  memz80_fetch_sram_byte, memz80_store_sram_byte },
        !            40:   { 0x20, 0x40,  memz80_fetch_bad_byte,  memz80_store_bad_byte },
        !            41:   { 0x40, 0x41,  memz80_fetch_yam_byte,  memz80_store_yam_byte },
        !            42:   { 0x41, 0x60,  memz80_fetch_bad_byte,  memz80_store_bad_byte },
        !            43:   { 0x60, 0x61,  memz80_fetch_bank_byte, memz80_store_bank_byte },
        !            44:   { 0x61, 0x7F,  memz80_fetch_bad_byte,  memz80_store_bad_byte },
        !            45:   { 0x7F, 0x80,  memz80_fetch_psg_byte,  memz80_store_psg_byte },
        !            46:   { 0x80, 0x100, memz80_fetch_mem_byte,  memz80_store_mem_byte },
        !            47:   { 0, 0, NULL, NULL }
        !            48: };
        !            49: 
        !            50: uint8 (*memz80_fetch_byte[0x100])(uint32 addr);
        !            51: void (*memz80_store_byte[0x100])(uint32 addr, uint8 data);
        !            52: 
        !            53: /*** initialise memory tables ***/
        !            54: 
        !            55: int memz80_init(void)
        !            56: {
        !            57:   int i = 0;
        !            58:   int j;
        !            59: 
        !            60:   do {
        !            61:     for (j = memz80_def[i].start; j < memz80_def[i].end; j++) {
        !            62:       memz80_fetch_byte[j] = memz80_def[i].fetch_byte;
        !            63:       memz80_store_byte[j] = memz80_def[i].store_byte;
        !            64:     }
        !            65:     i++;
        !            66:   } while ((memz80_def[i].start != 0) || (memz80_def[i].end != 0));
        !            67:   return 0;
        !            68: }
        !            69: 
        !            70: /*** BAD fetch/store ***/
        !            71: 
        !            72: uint8 memz80_fetch_bad_byte(uint32 addr)
        !            73: {
        !            74:   LOG_CRITICAL(("[Z80] Invalid memory fetch (byte) 0x%X", addr));
        !            75:   return 0;
        !            76: }
        !            77: 
        !            78: void memz80_store_bad_byte(uint32 addr, uint8 data)
        !            79: {
        !            80:   LOG_CRITICAL(("[Z80] Invalid memory store (byte) 0x%X", addr));
        !            81: }
        !            82: 
        !            83: /*** SRAM fetch/store ***/
        !            84: 
        !            85: uint8 memz80_fetch_sram_byte(uint32 addr)
        !            86: {
        !            87:   return (*(uint8 *)(cpuz80_ram+addr));
        !            88: }
        !            89: 
        !            90: void memz80_store_sram_byte(uint32 addr, uint8 data)
        !            91: {
        !            92:   *(uint8 *)(cpuz80_ram+addr) = data;
        !            93:   return;
        !            94: }
        !            95: 
        !            96: /*** YAM fetch/store ***/
        !            97: 
        !            98: uint8 memz80_fetch_yam_byte(uint32 addr)
        !            99: {
        !           100:   addr-= 0x4000;
        !           101:   if (addr < 4) {
        !           102:     return sound_ym2612fetch(addr);
        !           103:   } else {
        !           104:     LOG_CRITICAL(("[Z80] invalid YAM fetch (byte) 0x%X", addr));
        !           105:     return 0;
        !           106:   }
        !           107: }
        !           108: 
        !           109: void memz80_store_yam_byte(uint32 addr, uint8 data)
        !           110: {
        !           111:   addr-= 0x4000;
        !           112:   /* LOG_USER(("[YAM] (z80) store (byte) 0x%X (%d)", addr, data)); */
        !           113:   if (addr < 4)
        !           114:     sound_ym2612store(addr, data);
        !           115:   else
        !           116:     LOG_CRITICAL(("[Z80] invalid YAM store (byte) 0x%X", addr));
        !           117: }
        !           118: 
        !           119: /*** BANK fetch/store ***/
        !           120: 
        !           121: uint8 memz80_fetch_bank_byte(uint32 addr)
        !           122: {
        !           123:   /* write only */
        !           124:   LOG_CRITICAL(("[Z80] Bank fetch (Byte) 0x%X", addr));
        !           125:   return 0;
        !           126: }
        !           127: 
        !           128: void memz80_store_bank_byte(uint32 addr, uint8 data)
        !           129: {
        !           130:   /* set bank */
        !           131:   cpuz80_bankwrite(data);
        !           132: }
        !           133: 
        !           134: /*** MEM (banked) fetch/store ***/
        !           135: 
        !           136: uint8 memz80_fetch_mem_byte(uint32 addr)
        !           137: {
        !           138:   return (fetchbyte(cpuz80_bank | (addr-0x8000)));
        !           139: }
        !           140: 
        !           141: void memz80_store_mem_byte(uint32 addr, uint8 data)
        !           142: {
        !           143:   /* LOG_USER(("WRITE whilst bank = %08X (%08X)", cpuz80_bank,
        !           144:      addr-0x8000)); */
        !           145:   storebyte(cpuz80_bank | (addr-0x8000), data);
        !           146: }
        !           147: 
        !           148: /*** PSG fetch/store ***/
        !           149: 
        !           150: uint8 memz80_fetch_psg_byte(uint32 addr)
        !           151: {
        !           152:   /* write only */
        !           153:   LOG_CRITICAL(("[Z80] Invalid memory read (byte) 0x%X", addr));
        !           154:   return 0;
        !           155: }
        !           156: 
        !           157: void memz80_store_psg_byte(uint32 addr, uint8 data)
        !           158: {
        !           159:   if (addr == 0x7f11)
        !           160:     sound_psgwrite(data);
        !           161:   else
        !           162:     LOG_CRITICAL(("[Z80] Invalid memory store (byte) 0x%X", addr));
        !           163: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.