1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-25 16:31:42 +00:00
CLK/OSBindings/Mac/Clock SignalTests/IIgs Memory Map
2023-05-12 14:16:39 -04:00
..
mm.json Fix test generator: IO state can be cleared. 2022-06-29 14:57:14 -04:00
readme.md Eliminate all whitespace-only lines. 2023-05-12 14:16:39 -04:00

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 03);
  • it was then marked as [shadowed/IO] until page 12 (i.e. pages 411);
  • it was then un-[shadowed/IO] to page 32;
  • ...etc.