mirror of
https://github.com/ArthurFerreira2/puce65c02.git
synced 2024-12-28 02:29:18 +00:00
initial commit
first public release
This commit is contained in:
parent
de98383c13
commit
e3c852d64f
2813
puce65c02.cpp
Normal file
2813
puce65c02.cpp
Normal file
File diff suppressed because it is too large
Load Diff
88
puce65c02.h
Normal file
88
puce65c02.h
Normal file
@ -0,0 +1,88 @@
|
||||
/*
|
||||
puce65c02, a WDC 65c02 cpu emulator, based on puce6502 by the same author
|
||||
Last modified 1st of July 2021
|
||||
|
||||
Copyright (c) 2021 Arthur Ferreira (arthur.ferreira2@gmail.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions :
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _PUCE65C02_H
|
||||
#define _PUCE65C02_H
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
typedef enum {run, step, stop, wait} status;
|
||||
|
||||
#define CARRY 0x01
|
||||
#define ZERO 0x02
|
||||
#define INTR 0x04
|
||||
#define DECIM 0x08
|
||||
#define BREAK 0x10
|
||||
#define UNDEF 0x20
|
||||
#define OFLOW 0x40
|
||||
#define SIGN 0x80
|
||||
|
||||
|
||||
class puce65c02 {
|
||||
public:
|
||||
|
||||
unsigned long long int ticks;
|
||||
// private:
|
||||
status state;
|
||||
uint16_t PC; // Program Counter
|
||||
uint8_t A, X, Y, SP; // Accumulator, X and y indexes and Stack Pointer
|
||||
union {
|
||||
uint8_t byte;
|
||||
struct {
|
||||
uint8_t C : 1; // Carry
|
||||
uint8_t Z : 1; // Zero
|
||||
uint8_t I : 1; // Interupt disabled
|
||||
uint8_t D : 1; // Decimal
|
||||
uint8_t B : 1; // Break
|
||||
uint8_t U : 1; // Undefined
|
||||
uint8_t V : 1; // Overflow
|
||||
uint8_t S : 1; // Sign
|
||||
};
|
||||
} P; // Processor Status
|
||||
|
||||
public:
|
||||
puce65c02() { ticks = 0; RST(); }
|
||||
puce65c02(uint16_t address) { ticks = 0; RST(); PC = address; }
|
||||
~puce65c02();
|
||||
|
||||
uint16_t getPC() { return PC; };
|
||||
void setPC(uint16_t address) { PC = address; };
|
||||
|
||||
void RST();
|
||||
void IRQ();
|
||||
void NMI();
|
||||
uint16_t exec(unsigned long long int cycleCount);
|
||||
|
||||
#if __TESTS__
|
||||
void dasm(uint16_t address);
|
||||
void printRegs();
|
||||
int getRegs(char* buffer);
|
||||
int getCode(uint16_t address, char* buffer, int size, int numLines);
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user