Added memory manager
This commit is contained in:
parent
0227bc634f
commit
b35d280f12
64
src/memory.c
Normal file
64
src/memory.c
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include "memory.h"
|
||||||
|
|
||||||
|
uint8_t read6502(uint16_t address){
|
||||||
|
switch (address){
|
||||||
|
case RAMLOC ... RAMLOC + RAMSIZE:
|
||||||
|
return ram[address - RAMLOC];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ROMLOC ... ROMLOC + ROMSIZE:
|
||||||
|
return rom[address - ROMLOC];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIDADDRS ... VIDADDRS + PAGESIZE:
|
||||||
|
if ((address - VIDADDRS) % 4 == 3) return readVideo();
|
||||||
|
else return 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0xBD00:
|
||||||
|
scanKeyboard();
|
||||||
|
return keyboardResult;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return NOP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void write6502(uint16_t address, uint8_t value){
|
||||||
|
switch (address){
|
||||||
|
case RAMLOC ... RAMLOC + RAMSIZE:
|
||||||
|
ram[address - RAMLOC] = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ROMLOC ... ROMLOC + ROMSIZE:
|
||||||
|
rom[address - ROMLOC] = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIDADDRS ... VIDADDRS + PAGESIZE:
|
||||||
|
switch ((address - VIDADDRS) % 4){
|
||||||
|
case 0: /* Video X Register */
|
||||||
|
videoX = value;
|
||||||
|
break;
|
||||||
|
case 1: /* Video Y Register */
|
||||||
|
videoY = value;
|
||||||
|
break;
|
||||||
|
case 2: /* Video M Register */
|
||||||
|
videoMode = value;
|
||||||
|
break;
|
||||||
|
case 3: /* Video A Register */
|
||||||
|
videoA = value;
|
||||||
|
writeVideo();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0xBC00:
|
||||||
|
systemRegister = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
21
src/memory.h
Normal file
21
src/memory.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
extern void scanKeyboard();
|
||||||
|
extern void writeVideo();
|
||||||
|
extern uint8_t readVideo();
|
||||||
|
extern uint8_t videoX;
|
||||||
|
extern uint8_t videoY;
|
||||||
|
extern uint8_t videoMode;
|
||||||
|
extern uint8_t videoA;
|
||||||
|
|
||||||
|
static int8_t ram[RAMSIZE + 1];
|
||||||
|
static int8_t rom[ROMSIZE + 1];
|
||||||
|
|
||||||
|
static uint8_t systemRegister;
|
||||||
|
static uint8_t keyboardResult;
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t read6502(uint16_t address);
|
||||||
|
void write6502(uint16_t address, uint8_t value);
|
Loading…
Reference in New Issue
Block a user