ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/Frodo4/Src/CPUC64_SC.cpp
(Generate patch)

Comparing Frodo4/Src/CPUC64_SC.cpp (file contents):
Revision 1.6 by cebix, 2005-06-27T19:55:48Z vs.
Revision 1.7 by cebix, 2009-01-11T11:21:01Z

# Line 1 | Line 1
1   /*
2   *  CPUC64_SC.cpp - Single-cycle 6510 (C64) emulation
3   *
4 < *  Frodo (C) 1994-1997,2002-2005 Christian Bauer
4 > *  Frodo (C) 1994-1997,2002-2009 Christian Bauer
5   *
6   *  This program is free software; you can redistribute it and/or modify
7   *  it under the terms of the GNU General Public License as published by
# Line 179 | Line 179 | void MOS6510::SetState(MOS6510State *s)
179  
180          ddr = s->ddr;
181          pr = s->pr;
182 +        pr_out = 0;  // FIXME: should be saved in MOS6510State
183          new_config();
184  
185          pc = s->pc;
# Line 201 | Line 202 | void MOS6510::SetState(MOS6510State *s)
202  
203   void MOS6510::new_config(void)
204   {
205 <        uint8 port = ~ddr | pr;
205 >        pr_out = (pr_out & ~ddr) | (pr & ddr);
206 >        uint8 port = pr | ~ddr;
207  
208          basic_in = (port & 3) == 3;
209          kernal_in = port & 2;
# Line 279 | Line 281 | inline uint8 MOS6510::read_byte_io(uint1
281   uint8 MOS6510::read_byte(uint16 adr)
282   {
283          if (adr < 0xa000) {
284 <                if (adr >= 2)
284 >                if (adr >= 2) {
285                          return ram[adr];
286 <                else if (adr == 0)
286 >                } else if (adr == 0) {
287                          return ddr;
288 <                else
289 <                        return (ddr & pr) | (~ddr & 0x17);
288 >                } else {
289 >                        uint8 byte = (pr | ~ddr) & (pr_out | 0x17);
290 >                        if (!(ddr & 0x20))
291 >                                byte &= 0xdf;
292 >                        return byte;
293 >                }
294          } else
295                  return read_byte_io(adr);
296   }
# Line 546 | Line 552 | void MOS6510::Reset(void)
552                  ram[0x8004] = 0;
553  
554          // Initialize extra 6510 registers and memory configuration
555 <        ddr = pr = 0;
555 >        ddr = pr = pr_out = 0;
556          new_config();
557  
558          // Clear all interrupt lines

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines