# Apple IIgs Memory Map Tests ## Sample test: { "hires": false, "lcw": false, "80store": true, "shadow": 12, "state": 183, "read": [ [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] ], "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, If `hires` is true, access IO address `0x57`; otherwise access IO address `0x56`. "lcw": false, If `lcw` is true, write any value to IO address `0x81` twice; otherwise write to IO address `0x80` at least once. "80store": true, If `80store` is true, access IO address `0x01`; otherwise access IO address `0x00`. "shadow": 12, Store the value of `shadow` to IO address `0x35`. "state": 183, Store the value of `state` to IO address `0x68`. ## 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; * ...etc.