case 0: update nothing (overhead)
case 1: update row
case 2: update column
case 3: update wide column
case 4: update row and column
case 5: update wide row and wide column
case 6: update rectangle
case 7: update random tiles
case 8: update all tiles

alg 0: (current)
42 cycles per byte
map/attributes double counted
	0: 0
	1: 32*2*42
	2: 32*2*42
	3: 64*2*42
	4: 64*2*42
	5: 128*2*42
	6: W*H*2*42
	7: T*2*42
	8: 2048*2*42

alg 1: (write list)
uses any amount you want, probably 512 bytes
;hypothetical code for storing into table
ldr r1,some_cursor
ldr r2,some_limit
cmp r1,r2
strhlt addy,[r1],#2
strlt r1,some_cursor


~13 cycles each byte to store into table
32+~5 cycles every 2 bytes to store into table
~32 cycles per byte for doubles
~56 cycles if not using 2 byte writes
~64 cycles per byte for singles
map/attributes double counted
	0: <16
	1: 32*2*32
	2: 32*2*64
	3: 32*2*32
	4: 32*2*32+32*2*64
	5: 64*2*32+64*2*32
	6: W*H*2*32
	7: T*2*64
	8: 2048*32

alg 2: (4x4 megatiles)
;hypothetical code for storing into table
;reminder, base 0x9800, size 0x400
;x_offset = (addr >> 2) & 7
;y_offset = (addr >> 4) & 38 [78]
;offset = (addr>>2)&7 + (addr>>4)&38 [78]
;uses 64 bytes of storage per tilemap (128 total)
;mov r1,addy,lsr#2
;and r1,r1,#7
;mov r2,addy,lsr#4
;and r2,r2,#0x38
;add r1,r1,r2
;ldr r2,=base
;strb r2,[r2,r1]
;11 cycles to store byte into table

~32+~6 cycles per two bytes


map/attributes double counted for storing into table, not for using table
	0: 6*128
	1: 11*32*2+ 8*16*32
	2: 11*32*2+ 8*16*32
	3: 11*64*2+ 8*16*32
	4: 11*64*2+ 2*8*16*32
	5: 11*128*2+ 2*8*16*32
	6: 11*W*H*2+ 32*16*W/4*H/4
	7: 11*T*2+ 8*32*T
	8: 2048*32

alg 3: (2x2 megatiles)
;hypothetical code for storing into table
;reminder, base 0x9800, size 0x400
;x_offset = (addr >> 1) & 0F
;y_offset = (addr >> 4) & F0 [1F0]
;uses 256 bytes of storage per tilemap (512 total)
;mov r1,addy,lsr#1
;and r1,r1,#0x0F
;mov r2,addy,lsr#4
;and r2,r2,#0xF0
;add r;y_offset = (addr >> 4) & F0 [1F0]
;uses 256 bytes of storage per tilemap (512 total)
;mov r1,addy,lsr#1
;and r1,r1,#0x0F
;mov r2,addy,lsr#4
;and r2,r2,#0xF0
;add r;y_offset = (addr >> 4) &512
	1: 11*32*2+ 32*2*16
	2: 11*32*2+ 32*2*16
	3: 11*64*2+ 32*2*16
	4: 11*64*2+ 32*2*2*16
	5: 11*128*2+ 32*2*2*16
	6: 11*W*H*2+ 32*2*W/4*H/4
	7: 11*T*2+ 8*32*T
	8: 2048*32


