2022-06-25 20:46:57 +00:00
# Apple IIgs Memory Map Tests
## Sample test:
{
"hires": false,
"lcw": false,
"80store": true,
"shadow": 12,
"state": 183,
"read": [
2022-06-28 21:12:38 +00:00
[0, 192, 256, 448],
[193, 208, 65473, 65488],
[209, 256, 465, 512],
[257, 448, 0, 0],
[449, 464, 65473, 65488],
[465, 512, 465, 512],
[513, 57537, 0, 0],
[57538, 57552, 65474, 65488],
[57553, 57600, 57553, 57600],
[57601, 57793, 0, 0],
[57794, 57808, 65474, 65488],
[57809, 57856, 57809, 57856],
[57857, 65536, 0, 0]
2022-06-25 20:46:57 +00:00
],
"write": [
[0, 192, 256, 448],
[193, 256, 65473, 65536],
[257, 448, 0, 0],
[449, 512, 65473, 65536],
[513, 57537, 0, 0],
[57538, 57600, 65474, 65536],
[57601, 57793, 0, 0],
[57794, 57856, 65474, 65536],
[57857, 65536, 0, 0]
],
"shadowed": [4, 12, 32, 64, 260, 268, 288, 320, 352, 416, 65535],
"io": [192, 193, 448, 449, 57536, 57537, 57792, 57793, 65535]
}
## Application
Perform, in the order listed:
"hires": false,
2022-06-29 19:04:21 +00:00
If `hires` is true, access IO address `0x57` ; otherwise access IO address `0x56` .
2022-06-25 20:46:57 +00:00
"lcw": false,
2022-06-29 19:04:21 +00:00
If `lcw` is true, write any value to IO address `0x81` twice; otherwise write to IO address `0x80` at least once.
2022-06-25 20:46:57 +00:00
"80store": true,
2022-06-29 19:04:21 +00:00
If `80store` is true, access IO address `0x01` ; otherwise access IO address `0x00` .
2022-06-25 20:46:57 +00:00
"shadow": 12,
2022-06-29 19:04:21 +00:00
Store the value of `shadow` to IO address `0x35` .
2022-06-25 20:46:57 +00:00
"state": 183,
2022-06-29 19:04:21 +00:00
Store the value of `state` to IO address `0x68` .
2022-06-25 20:46:57 +00:00
## Test
**Only memory areas which are subject to paging are recorded with valid physical addresses.**
### `read` and `write`
Each entry looks like:
[0, 192, 256, 448]
Which is of the form:
[logical start, logical end, physical start, physical end]
Where all numbers are page numbers, i.e. address / 256.
So e.g. the entry above means that between logical addresses `$00:0000` and `$00:C000` you should find the physical RAM located between addresses `$01:0000` and `$01:C0000` .
If physical end == physical start then the same destination is used for all logical addresses; if that destination is `0` then the area is unmapped.
### `shadowed ` and `io`
An example chain looks like:
[4, 12, 32, 64, 260, 268, 288, 320, 352, 416, 65535]
Starting from a default value of `false` , that means:
* memory remained un-[shadowed/IO] for until page 4 (i.e. pages 0– 3);
* it was then marked as [shadowed/IO] until page 12 (i.e. pages 4– 11);
* it was then un-[shadowed/IO] to page 32;
2023-05-12 18:16:39 +00:00
* ...etc.