[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Writing emulator...



Mike Guidero <mike@bogus.net> wrote in message news:<untv67922ste37@corp.supernews.com>...
> Dosius wrote:
> > The Z80's memory accesses are directly to the corresponding 65C02
> > addresses, according to the manual quote you provided.  A variable,
> > cpuinuse, is set to emu6502 or emuZ80, and the opcode fetch-and-run is
> > executed for the proper CPU, although this needs work.  Also, CPU
> > switching doesn't seem to work right because I still get "CAN'T FIND
> > Z80 SOFTCARD" (or, in the hack, "CAN'T FIND STUPID CARD.")
> 
> I took a look at your code (0.70) as I posted a bit earlier, and I think 
> I've got your CPU switching bug figured out:
> 
> DAPPLE.C: line 697
> if (Addr>=49360 && Addr<=49375)
>  {
>   if (Addr==49360) cpuinuse=(!cpuinuse);
>   return 96; /* CP/M card */
>  }
> 
> DAPPLE.C: line 711
>  if (Addr>=50432 && Addr<=50687) return Z80ROM[Addr-50432];
> 
> Okay, the M$ Z80 SoftCard doesn't have any ROM at Cx00 (mine returns zeros), 
> but that shouldn't be an issue here.  What your problem is: if the code at 
> line 697 is your switching code, it's at the wrong address.  The switching 
> is performed by a _write_ to the Cx00 space.  Thus, the code at DAPPLE.C 
> line 711 can just return zeros (or the contents of the rom file as it is 
> now), and the the code at line 697 needs to be removed.
> 
> The following (or equivalent, correct code) needs to go somewhere in Wr6502:
> /* Toggle Z80/6502 microprocessor *
>  * M$ SoftCard responds to write in Cx00 space */
> if (Addr>=50432 && Addr<=50687)  /* C500-C5FF */
>  {
>   cpuinuse=(!cpuinuse);
>  }
> 
> That ought to clear it up.
> 
> If I read it properly, as soon as the next instruction is fetched, the Z80 
> will be active.
> 
> Let me know how it works out.
> 
> Mike

Ok, thx, will check out. :)