System Specification for C65 | Fred Bowen | March 1, 1991 |
It is possible, and likely, to have mapped, and unmapped memory at the same physical address. And, with offset registers set to zero, mapped addresses will match unmapped ones. The only difference is the NOMAP signal to tell whether the address is mapped or unmapped.
To program the mapper, the operating system must load the A, X, Y, and Z registers with the following information, and execute a MAP opcode,
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | BIT |
---|---|---|---|---|---|---|---|---|
LOWER OFF15 |
LOWER OFF14 |
LOWER OFF13 |
LOWER OFF12 |
LOWER OFF11 |
LOWER OFF10 |
LOWER OFF9 |
LOWER OFF8 |
A |
MAP BLK3 |
MAP BLK2 |
MAP BLK1 |
MAP BLK0 |
LOWER OFF19 |
LOWER OFF18 |
LOWER OFF17 |
LOWER OFF16 |
X |
UPPER OFF15 |
UPPER OFF14 |
UPPER OFF13 |
UPPER OFF12 |
UPPER OFF11 |
UPPER OFF10 |
UPPER OFF9 |
UPPER OFF8 |
Y |
MAP BLK7 |
MAP BLK6 |
MAP BLK5 |
MAP BLK4 |
UPPER OFF19 |
UPPER OFF18 |
UPPER OFF17 |
UPPER OFF16 |
Z |
After executing the MAP opcode, all interrupts are inhibited. This is done to allow the operating system to complete a mapping sequence without fear of getting an interrupt. An interrupt occurring before the proper stack-pointer is set will cause return address data to be written to an undesired area.
Upon completing the mapping sequence, the operating system must remove the interrupt inhibit by executing a EOM (formerly NOP) opcode. Note that application software may execute NOPs with no effect.
This page has been created by Sami Rautiainen. | |
Read the small print. | Last updated August 10, 2001. |