1
0
mirror of https://github.com/pevans/erc-c.git synced 2024-11-24 14:32:08 +00:00

Copy system rom into $C800..$CFFF; document.

Things are getting a little hairy...at least, as to my own
comprehension. Documentation is a must.
This commit is contained in:
Peter Evans 2018-01-04 19:53:12 -06:00
parent 45f5975cdf
commit 700bc31465

View File

@ -104,27 +104,61 @@ int
apple2_mem_init_disk2_rom(apple2 *mach) apple2_mem_init_disk2_rom(apple2 *mach)
{ {
int err; int err;
vm_8bit *diskrom;
err = vm_segment_copy_buf(mach->memory, objstore_apple2_disk2_rom(), diskrom = objstore_apple2_disk_rom();
// Copy into the first peripheral page for disk ROM.
err = vm_segment_copy_buf(mach->memory, diskrom,
APPLE2_DISK2_ROM_OFFSET, 0, APPLE2_DISK2_ROM_OFFSET, 0,
APPLE2_DISK2_ROM_SIZE); APPLE2_DISK2_ROM_SIZE);
if (err != OK) { if (err != OK) {
log_critical("Could not acquire apple2 disk2 rom"); log_critical("Could not copy apple2 disk2 rom");
return ERR_BADFILE;
}
// This second copy will copy into the next slot over, which is
// essentially the second disk drive. It's all the same ROM.
err = vm_segment_copy_buf(mach->memory, diskrom,
APPLE2_DISK2_ROM_OFFSET + 0x100, 0,
APPLE2_DISK2_ROM_SIZE);
if (err != OK) {
log_critical("Could not copy apple2 disk2 rom");
return ERR_BADFILE; return ERR_BADFILE;
} }
return OK; return OK;
} }
/*
* I'm still a bit hazy on how this _should_ work, but this function
* will copy as much as we can from the system rom into both main memory
* and into the rom segment.
*/
int int
apple2_mem_init_sys_rom(apple2 *mach) apple2_mem_init_sys_rom(apple2 *mach)
{ {
int err; int err;
vm_8bit *sysrom;
err = vm_segment_copy_buf(mach->rom, objstore_apple2_sys_rom(), sysrom = objstore_apple2_sys_rom();
0, 0, APPLE2_ROM_SIZE);
// The first two kilobytes of system rom are copied into memory
// beginning at $C800 (which is just after all of the peripheral ROM
// locations).
err = vm_segment_copy_buf(mach->memory, sysrom,
0xC800, 0x800, 0x800);
if (err != OK) { if (err != OK) {
log_critical("Could not acquire apple2 system rom"); log_critical("Could not copy apple2 system rom");
return ERR_BADFILE;
}
// The last 12k of sysrom (which is APPLE2_ROM_SIZE) are copied into
// the rom segment.
err = vm_segment_copy_buf(mach->rom, sysrom,
0, 0x1000, APPLE2_ROM_SIZE);
if (err != OK) {
log_critical("Could not copy apple2 system rom");
return ERR_BADFILE; return ERR_BADFILE;
} }