вот что я заметил, во всех комбинациях что я пробовал.(везде эмуль и и игра работают нормально)
программа записи в "новую память" помещает данные в старые 64кб. ,
вот док-во: (глюк на бордюре)
программа проверки:
cmpi.l #$0, $F00000
bne.w XUICI
cmpi.l #$0, $F12345
bne.w XUICI
cmpi.l #$0, $F25000
bne.w XUICI
cmpi.l #$0, $F34000
bne.w XUICI
cmpi.l #$0, $F43000
bne.w XUICI
cmpi.l #$0, $F52000
bne.w XUICI
cmpi.l #$0, $FE1000
bne.w XUICI
rts
XUICI:
cmpi.l #$ffffffff, $F00000
bne.w XUICI2
rts
XUICI2:
move.l #$12345678, $F00000
cmpi.l #$12345678, $F00000
bne.w XUICI3
cmpi.l #$12345678, $FF0000
bne.w XUICI3
rts
XUICI3:
nop
rts
результат:
10:0000 0C B9 CMPI.L #$00000000,($00F00000) - не равно 0
10:000A 66 00 BNE #$0058 [10:0064]
10:0064 0C B9 CMPI.L #$FFFFFFFF,($00F00000) -не равно ff
10:006E 66 00 BNE #$0004 [10:0074]
10:0074 23 FC MOVE.L #$12345678,($00F00000) пишем 12345678 в F00000
10:007E 0C B9 CMPI.L #$12345678,($00F00000) да, равно 12345678
10:0088 66 00 BNE #$0012 [10:009C]
10:008C 0C B9 CMPI.L #$12345678,($00FF0000) FF0000 тоже равно 12345678
10:0096 66 00 BNE #$0004 [10:009C]
10:009A 4E 75 RTS
Добавлено позже:
еще одна проверка:
10:0074 23 FC MOVE.L #$12345678,($00F10002)
10:007E 0C B9 CMPI.L #$12345678,($00F10002) ; - ok
10:0088 66 00 BNE #$0012 [10:009C]
10:008C 0C B9 CMPI.L #$12345678,($00FF0002) ; F10002=FF0002
10:0096 66 00 BNE #$0004 [10:009C]
10:009A 4E 75 RTS
получается , что FFxxxx=F0xxxx=F1xxxx=F2xxxx и т.д.
Добавлено позже:
я кое-что нашел:
ALIGN64
;unsigned char M68K_RB(unsigned int Adr)
DECL M68K_RB
mov eax, [esp + 4]
push ebx
mov ebx, eax
and eax, 0xF80000 < ?
shr eax, 17
and ebx, 0xFFFFFF <?
jmp [M68K_Read_Byte_Table + eax]
ещё что-то.
ALIGN64
;void M68K_WB(unsigned int Adr, unsigned char Data)
DECL M68K_WB
push ebx
push ecx
mov ecx, [esp + 12]
mov eax, [esp + 16]
mov ebx, ecx
and ecx, 0xF00000
and eax, 0xFF
shr ecx, 18
and ebx, 0xFFFFFF
call [M68K_Write_Byte_Table + ecx]
mov ecx, [esp + 12]
push dword 1
and ecx, 0xFFFFFF
push ecx
call _Fix_Codes
add esp, byte 8
pop ecx
pop ebx
ret