Great work decoding this. I was looking to RE the PALs in the carriers of my Spellmaster and InterWord, but it's a bit difficult due to the fact the PALs are registered, so the info you've provided is a big help. The logic you describe above would be quite simple to implement in the PAL.Pernod wrote: ↑Thu Jan 03, 2019 1:13 amSpellMaster and Mega3 both use the same carrier board, switching zones are:It seems to only be able to switch into higher banks from bank 0, without that condition it runs code in the switching zones which causes havoc.
Code: Select all
/* switching zones for SpellMaster */ if (offset == 0x3f00 && m_bank == 0) m_bank = 7; if (offset == 0x3f20 && m_bank == 0) m_bank = 6; if (offset == 0x3f40 && m_bank == 0) m_bank = 5; if (offset == 0x3f60 && m_bank == 0) m_bank = 4; if (offset == 0x3f80 && m_bank == 0) m_bank = 3; if (offset == 0x3fa0 && m_bank == 0) m_bank = 2; if (offset == 0x3fc0 && m_bank == 0) m_bank = 1; if (offset == 0x3fe0) m_bank = 0;
I notice from your code that you've only applied this logic (to only switch to higher bank if already in bank 0) to the ccispell ROM type. I wonder if this logic should also apply to the other CC PALs (eg ccibase)?
I've traced the wiring of the cciword carrier board, and note that nOE & nCE are both wire into the PAL. I also note that the CLK input is wired to output pin 19 of the PAL (I've called this CLKO). On this basis, I'm guessing the PAL coding would be something like this:
Code: Select all
OPALjr Example Copyright National Semiconductor Corp, 1993. Computer Concepts - 32K PALPROM CHIP CCPALPROM GAL16V8 A12=2 A7=3 A6=4 A8=5 A9=6 A5=7 A11=8 A10=9 GND=10 nCE=12 nOE=13 A14=17 A13=18 CLKO=19 VCC=20 @define 0x8040 "/A13* /A12* /A11* /A10* /A9* /A8* /A7* A6* /A5" @define 0x8060 "/A13* /A12* /A11* /A10* /A9* /A8* /A7* A6* A5" EQUATIONS A14 := 0x8040* /nCE* /nOE CLKO = 0x8040* /A14 + 0x8060 + nCE + nOE