Tried some more "commands":
Code: Select all
;mov a,00h // mov [002400h],a ;-NP_CMD_00h RESET and map GAME14 ? (issues /RESET pulse) (and ONCE: did held /RESET=LOW forever) (somehow IGNORED when followed by further 240xh writes?)
;mov a,01h // mov [002400h],a ;-NP_CMD_01h causes always 8x7D
;mov a,02h // mov [002400h],a ;-NP_CMD_02h /WP=1 causes 2A,04,2A,2A instead of 2A,00,2A,2A --- and does set /WP=HIGH
;mov a,03h // mov [002400h],a ;-NP_CMD_03h /WP=0 no effect? but ONCE caused 2A,E0,2A,2A,FF,FF,FF,FF and /WP=LOW
;mov a,04h // mov [002400h],a ;-NP_CMD_04h HIROM:ALL ("MENU" at 40:7FC0h) causes FE,61,A5,00 instead of 03,AA,AA,00 ;and remaps ROM: eg. ..IJKL...RSTU... at 10FFC0h <-- part of GAME1 (though MENU is ar 407FC0)
mov a,05h // mov [002400h],a ;-NP_CMD_05h HIROM:MENU ("MENU" at 40:7FC0h) causes 83 D5 7F 00 instead of 03,AA,AA,00 ;and remaps ROM: all ................ at 10FFC0h (no ASCII) <-- MENU-only (if if GAME1 is selected)
;mov a,06h // mov [002400h],a ;-NP_CMD_06h causes always 8x7D (aka, undoes toggle?)
;mov a,07h // mov [002400h],a ;-NP_CMD_07h causes always 8x7D
;mov a,08h // mov [002400h],a ;-NP_CMD_08h causes always 8x7D
;mov a,09h // mov [002400h],a ;-NP_CMD_09h no effect ;\sending BOTH does have effect (remaps ROM) (happened only ONCE though)
;mov a,0ah // mov [002400h],a ;-NP_CMD_0ah no effect ;/
;mov a,0bh // mov [002400h],a ;-NP_CMD_0bh causes always 8x7D
;mov a,0ch // mov [002400h],a ;-NP_CMD_0ch causes always 8x7D
;mov a,0dh // mov [002400h],a ;-NP_CMD_0dh causes always 8x7D
;mov a,0eh // mov [002400h],a ;-NP_CMD_0eh causes always 8x7D
;mov a,0fh // mov [002400h],a ;-NP_CMD_0fh causes always 8x7D
;mov a,10h // mov [002400h],a ;-NP_CMD_10h causes always 8x7D
;mov a,14h // mov [002400h],a ;-NP_CMD_14h causes always 8x7D
;mov a,24h // mov [002400h],a ;-NP_CMD_24h causes always 8x7D
;mov a,44h // mov [002400h],a ;-NP_CMD_44h no effect (once caused crash with green rectange)
;mov a,81h // mov [002400h],a ;-NP_CMD_81h RESET and map GAME1 ;/
;mov a,84h // mov [002400h],a ;-NP_CMD_84h RESET and map GAME4 ;\works even if MENU was already deselected
;mov a,85h // mov [002400h],a ;-NP_CMD_85h RESET and map GAME5 ; odd: MENU in bank 48h, GAME1 in bank 50h (probably because BASE is FFh aka -1)
;mov a,89h // mov [002400h],a ;-NP_CMD_89h RESET and map GAME9 ;
;mov a,8fh // mov [002400h],a ;-NP_CMD_8Fh RESET and map GAME15 ;/
;mov a,0c5h // mov [002400h],a ;-NP_CMD_C5h causes always 8x7D
Some odd effects happened only once (that might have been unintended/unstable effects for whatever reason).
Some commands might do something when adding whatever parameters (eg. as known for commands 09h and 06h).
There stable/interesting commands are:
- 80h..8Fh: RESET and map GAME0..15 (aka 80h=MENU)
- 02h,03h: Controls /WP pin
- 04h/05h: Force HIROM mapping (either ALL memory, or only MENU)
With the "HIROM:ALL" command (04h) it should be possible to write the whole FLASH memory, so programming cartridges should be solved; unless there are some hidden configuration bits required for different games.
With different mappings (MENU, GAME's, or special HIROM modes), Port 2400h..2407h return different values (this on a cart with MENU and one 3MByte LOROM game (FIGHTING ELEVEN) installed):
Code: Select all
;MENU: 2A,04,2A,2A,03,AA,AA,00
;GAME1: 2A,14,2A,2A,15,29,4A,10
;GAME4: 2A,44,2A,2A,FF,FF,FF,FF
;GAME5: 2A,54,2A,2A,FF,FF,FF,FF
;HIROM:ALL: 2A,04,2A,2A,FE,61,A5,00
;HIROM:MENU:2A,04,2A,2A,83,D5,7F,00
Port 2400h,2402h,2403h are always 2Ah.
Port 2401h.bit4-7 is the selected GAME number (or 0=MENU).
Port 2401h.bit2 is the /WP pin state.
Port 2404h..2407h are "strange values". The FFh's for the empty game slots would suggest that they are simply read somewhere from FLASH memory (either from the GAME memory, or from the DIRECTORY entries). For the other mappings, they are just "strange values", I can't find those values being stored anywhere in FLASH (at least not in continous 4-byte memory blocks, and they don't seem to match for separate bytes in the directory region).
Can somebody dump those values on other carts? Would be interesting if you are getting the same values.
Concerning hidden stuff, I have dumped the "sector protect" bytes for the MENU sectors, and for the first some sectors of the GAME.
The first sector (lorom banks 00h..03h) of the MENU returns C2h (which should mean "protected", although I
can write to that sector). The other three MENU sectors, and all GAME sectors are returning 00h (which should mean "unprotected") (and yes, writing to those sectors does work, too).
So, those bytes are apparently having a different meaning as described in the MX29F1610A/B datasheet. So they might contain hidden info about game mapping. Or they are just garbage because the "write protect" feature isn't implemented in MX29F1601 chip, though then it would be odd that different "write protect" have different values.
When dumping those bytes on other cartridges, are you getting the same results, first sector C2h, other sectors zero?