BASIC compiler/interpreter for PIC32MX/MZ-80K (suspended)
| Revision | 151 (tree) |
|---|---|
| Time | 2016-08-08 10:07:41 |
| Author | kmorimatsu |
48K RAM in MZ-80 emulator, for PIC32MX170F128B.
| @@ -5,10 +5,8 @@ | ||
| 5 | 5 | #ifndef KMZ80_PROFILE_H |
| 6 | 6 | #define KMZ80_PROFILE_H |
| 7 | 7 | |
| 8 | -#define PROGRAM_FLASH_END_ADRESS 0x9D01F7FF | |
| 8 | +#define KMZ80_RAMSIZE 0xC000 // 48 KB RAM | |
| 9 | 9 | |
| 10 | -#define KMZ80_RAMSIZE 0x7000 // 28 KB RAM | |
| 11 | - | |
| 12 | 10 | // Config setting(s) specific to this chip |
| 13 | 11 | #ifdef KMZ80_MAIN |
| 14 | 12 | #pragma config ICESEL = ICS_PGx1 |
| @@ -21,7 +21,6 @@ | ||
| 21 | 21 | unsigned char RAM[KMZ80_RAMSIZE]; |
| 22 | 22 | volatile unsigned char VRAM[0x0400]; |
| 23 | 23 | volatile unsigned char read825x[0x10]; |
| 24 | - char g_use_ram_last20k=0; | |
| 25 | 24 | unsigned long g_ntscVisible; |
| 26 | 25 | unsigned long g_Vsync; |
| 27 | 26 | unsigned long g_timer1; |
| @@ -43,7 +42,6 @@ | ||
| 43 | 42 | extern unsigned char RAM[KMZ80_RAMSIZE]; |
| 44 | 43 | extern volatile unsigned char VRAM[0x0400]; |
| 45 | 44 | extern volatile unsigned char read825x[0x10]; |
| 46 | - extern char g_use_ram_last20k; | |
| 47 | 45 | extern unsigned long g_ntscVisible; |
| 48 | 46 | extern unsigned long g_Vsync; |
| 49 | 47 | extern unsigned long g_timer1; |
| @@ -16,20 +16,15 @@ | ||
| 16 | 16 | ?(\ |
| 17 | 17 | monitor[(z80PC++)]\ |
| 18 | 18 | ):(\ |
| 19 | - (z80PC<(KMZ80_RAMSIZE+0x1000))\ | |
| 19 | + (z80PC<0xD000)\ | |
| 20 | 20 | ?(\ |
| 21 | 21 | RAM[(z80PC++)-0x1000]\ |
| 22 | 22 | ):(\ |
| 23 | - (z80PC<0xD000)\ | |
| 23 | + (z80PC<0xE000)\ | |
| 24 | 24 | ?(\ |
| 25 | - g_use_ram_last20k?RAM[(z80PC++)-0x6000]:0xC7\ | |
| 25 | + VRAM[(z80PC++)&0x03FF]\ | |
| 26 | 26 | ):(\ |
| 27 | - (z80PC<0xE000)\ | |
| 28 | - ?(\ | |
| 29 | - VRAM[(z80PC++)&0x03FF]\ | |
| 30 | - ):(\ | |
| 31 | - 0xC7\ | |
| 32 | - )\ | |
| 27 | + 0xC7\ | |
| 33 | 28 | )\ |
| 34 | 29 | )\ |
| 35 | 30 | )) |
| @@ -42,8 +37,7 @@ | ||
| 42 | 37 | unsigned char readMemory(UINT16 addr){ |
| 43 | 38 | addr&=0xffff; |
| 44 | 39 | if (addr<0x1000) return monitor[addr]; |
| 45 | - if (addr<(KMZ80_RAMSIZE+0x1000)) return RAM[addr-0x1000]; | |
| 46 | - if (addr<0xD000) return g_use_ram_last20k?RAM[addr-0x6000]:0xC7; | |
| 40 | + if (addr<0xD000) return RAM[addr-0x1000]; | |
| 47 | 41 | if (addr<0xE000) return VRAM[addr & 0x03FF]; |
| 48 | 42 | if (addr<0xE004) { |
| 49 | 43 | // 8255 |
| @@ -72,14 +66,10 @@ | ||
| 72 | 66 | addr&=0xffff; |
| 73 | 67 | data&=0xff; |
| 74 | 68 | if (addr<0x1000) return; // ROM region cannot be written. |
| 75 | - if (addr<(KMZ80_RAMSIZE+0x1000)) { | |
| 69 | + if (addr<0xD000) { | |
| 76 | 70 | RAM[addr-0x1000] = data; |
| 77 | 71 | return; |
| 78 | 72 | } |
| 79 | - if (addr<0xD000) { | |
| 80 | - if (g_use_ram_last20k) RAM[addr-0x6000] = data; | |
| 81 | - return; | |
| 82 | - } | |
| 83 | 73 | if (addr<0xE000) { |
| 84 | 74 | VRAM[addr & 0x03FF] = data; |
| 85 | 75 | return; |
| @@ -102,29 +102,13 @@ | ||
| 102 | 102 | start<<=8; |
| 103 | 103 | start|=RAM[0x0104]; |
| 104 | 104 | // Check format |
| 105 | - if (start<0x1200 || 0x6DFF<size) { | |
| 105 | + if (start<0x1000 || 0xBDFF<size) { | |
| 106 | 106 | g_error_str="FORMAT MZF"; |
| 107 | 107 | return; |
| 108 | 108 | } |
| 109 | - if (0x7FFF<start || 0x7FFF<start+size) { | |
| 110 | - // If program size is less than 20 KB, locate such program | |
| 111 | - // in any RAM address area between 0x1200 and 0xCFFF. | |
| 112 | - // Share the same physical RAM area as follows: | |
| 113 | - // 0x3000 - 0x7FFF (20 kb) | |
| 114 | - // 0x8000 - 0xCFFF (20 kb) | |
| 115 | - if (size<=0x5000 && start+size<=0xD000) { | |
| 116 | - g_use_ram_last20k=1; | |
| 117 | - } else { | |
| 118 | - g_error_str="FORMAT MZF"; | |
| 119 | - return; | |
| 120 | - } | |
| 121 | - }//*/ | |
| 122 | 109 | // Load body |
| 123 | 110 | start-=0x1000; |
| 124 | 111 | while (128<=size) { |
| 125 | - while(0x7000<=start) { | |
| 126 | - start-=0x5000; | |
| 127 | - } | |
| 128 | 112 | res=pf_read(&RAM[start],128,&len); |
| 129 | 113 | if (res || len<128) { |
| 130 | 114 | g_error_str="LOAD MZF"; |
| @@ -134,9 +118,6 @@ | ||
| 134 | 118 | start+=128; |
| 135 | 119 | } |
| 136 | 120 | if (0<size) { |
| 137 | - while(0x7000<=start) { | |
| 138 | - start-=0x5000; | |
| 139 | - } | |
| 140 | 121 | res=pf_read(&RAM[start],size,&len); |
| 141 | 122 | if (res || len<size) { |
| 142 | 123 | g_error_str="LOAD MZF"; |
| @@ -228,7 +209,7 @@ | ||
| 228 | 209 | start<<=8; |
| 229 | 210 | start|=RAM[0x0104]; |
| 230 | 211 | // Check format |
| 231 | - if (start<0x1000 || 0x7FFF<start || 0x7FFF<start+size) { | |
| 212 | + if (start<0x1000 || 0xCFFF<start || 0xCFFF<start+size) { | |
| 232 | 213 | g_error_str="FORMAT MZ2"; |
| 233 | 214 | return 0; |
| 234 | 215 | } |