#ifndef SPC700_H
#define SPC700_H

#include "../types.h"

extern void SPCRegF0();
extern void SPCRegF1();
extern void SPCRegF2();
extern void SPCRegF3();
extern void SPCRegF4();
extern void SPCRegF5();
extern void SPCRegF6();
extern void SPCRegF7();
extern void SPCRegF8();
extern void SPCRegF9();
extern void SPCRegFA();
extern void SPCRegFB();
extern void SPCRegFC();
extern void SPCRegFD();
extern void SPCRegFE();
extern void SPCRegFF();

extern void RSPCRegF0();
extern void RSPCRegF1();
extern void RSPCRegF2();
extern void RSPCRegF3();
extern void RSPCRegF4();
extern void RSPCRegF5();
extern void RSPCRegF6();
extern void RSPCRegF7();
extern void RSPCRegF8();
extern void RSPCRegF9();
extern void RSPCRegFA();
extern void RSPCRegFB();
extern void RSPCRegFC();
extern void RSPCRegFD();
extern void RSPCRegFE();
extern void RSPCRegFF();

extern void Invalidopcode();
extern void Op00();
extern void Op01();
extern void Op02();
extern void Op03();
extern void Op04();
extern void Op05();
extern void Op06();
extern void Op07();
extern void Op08();
extern void Op09();
extern void Op0A();
extern void Op0B();
extern void Op0C();
extern void Op0D();
extern void Op0E();
extern void Op0F();
extern void Op10();
extern void Op11();
extern void Op12();
extern void Op13();
extern void Op14();
extern void Op15();
extern void Op16();
extern void Op17();
extern void Op18();
extern void Op19();
extern void Op1A();
extern void Op1B();
extern void Op1C();
extern void Op1D();
extern void Op1E();
extern void Op1F();
extern void Op20();
extern void Op21();
extern void Op22();
extern void Op23();
extern void Op24();
extern void Op25();
extern void Op26();
extern void Op27();
extern void Op28();
extern void Op29();
extern void Op2A();
extern void Op2B();
extern void Op2C();
extern void Op2D();
extern void Op2E();
extern void Op2F();
extern void Op30();
extern void Op31();
extern void Op32();
extern void Op33();
extern void Op34();
extern void Op35();
extern void Op36();
extern void Op37();
extern void Op38();
extern void Op39();
extern void Op3A();
extern void Op3B();
extern void Op3C();
extern void Op3D();
extern void Op3E();
extern void Op3F();
extern void Op40();
extern void Op41();
extern void Op42();
extern void Op43();
extern void Op44();
extern void Op45();
extern void Op46();
extern void Op47();
extern void Op48();
extern void Op49();
extern void Op4A();
extern void Op4B();
extern void Op4C();
extern void Op4D();
extern void Op4E();
extern void Op4F();
extern void Op50();
extern void Op51();
extern void Op52();
extern void Op53();
extern void Op54();
extern void Op55();
extern void Op56();
extern void Op57();
extern void Op58();
extern void Op59();
extern void Op5A();
extern void Op5B();
extern void Op5C();
extern void Op5D();
extern void Op5E();
extern void Op5F();
extern void Op60();
extern void Op61();
extern void Op62();
extern void Op63();
extern void Op64();
extern void Op65();
extern void Op66();
extern void Op67();
extern void Op68();
extern void Op69();
extern void Op6A();
extern void Op6B();
extern void Op6C();
extern void Op6D();
extern void Op6E();
extern void Op6F();
extern void Op70();
extern void Op71();
extern void Op72();
extern void Op73();
extern void Op74();
extern void Op75();
extern void Op76();
extern void Op77();
extern void Op78();
extern void Op79();
extern void Op7A();
extern void Op7B();
extern void Op7C();
extern void Op7D();
extern void Op7E();
extern void Op7F();
extern void Op80();
extern void Op81();
extern void Op82();
extern void Op83();
extern void Op84();
extern void Op85();
extern void Op86();
extern void Op87();
extern void Op88();
extern void Op89();
extern void Op8A();
extern void Op8B();
extern void Op8C();
extern void Op8D();
extern void Op8E();
extern void Op8F();
extern void Op90();
extern void Op91();
extern void Op92();
extern void Op93();
extern void Op94();
extern void Op95();
extern void Op96();
extern void Op97();
extern void Op98();
extern void Op99();
extern void Op9A();
extern void Op9B();
extern void Op9C();
extern void Op9D();
extern void Op9E();
extern void Op9F();
extern void OpA0();
extern void OpA1();
extern void OpA2();
extern void OpA3();
extern void OpA4();
extern void OpA5();
extern void OpA6();
extern void OpA7();
extern void OpA8();
extern void OpA9();
extern void OpAA();
extern void OpAB();
extern void OpAC();
extern void OpAD();
extern void OpAE();
extern void OpAF();
extern void OpB0();
extern void OpB1();
extern void OpB2();
extern void OpB3();
extern void OpB4();
extern void OpB5();
extern void OpB6();
extern void OpB7();
extern void OpB8();
extern void OpB9();
extern void OpBA();
extern void OpBB();
extern void OpBC();
extern void OpBD();
extern void OpBE();
extern void OpBF();
extern void OpC0();
extern void OpC1();
extern void OpC2();
extern void OpC3();
extern void OpC4();
extern void OpC5();
extern void OpC6();
extern void OpC7();
extern void OpC8();
extern void OpC9();
extern void OpCA();
extern void OpCB();
extern void OpCC();
extern void OpCD();
extern void OpCE();
extern void OpCF();
extern void OpD0();
extern void OpD1();
extern void OpD2();
extern void OpD3();
extern void OpD4();
extern void OpD5();
extern void OpD6();
extern void OpD7();
extern void OpD8();
extern void OpD9();
extern void OpDA();
extern void OpDB();
extern void OpDC();
extern void OpDD();
extern void OpDE();
extern void OpDF();
extern void OpE0();
extern void OpE1();
extern void OpE2();
extern void OpE3();
extern void OpE4();
extern void OpE5();
extern void OpE6();
extern void OpE7();
extern void OpE8();
extern void OpE9();
extern void OpEA();
extern void OpEB();
extern void OpEC();
extern void OpED();
extern void OpEE();
extern void OpEF();
extern void OpF0();
extern void OpF1();
extern void OpF2();
extern void OpF3();
extern void OpF4();
extern void OpF5();
extern void OpF6();
extern void OpF7();
extern void OpF8();
extern void OpF9();
extern void OpFA();
extern void OpFB();
extern void OpFC();
extern void OpFD();
extern void OpFE();
extern void OpFF();

extern u1 SPCRAM[65472]; // Pointer to the SPC's RAM
extern u1 spcA; // The A register (general purpose)
extern u1 spcNZ; // The processor NZ flag (little speed up hack :) )
extern u1 spcP; // The processor status byte (Removed for each flags), NZ are not always processed...
extern u1 spcX; // The X register (general purpose)
extern u1 spcY; // The Y register (general purpose)
extern u1* spcPCRam; // Program Counter (with SPCRAM added)
extern u1* spcRamDP; // The direct page pointer
extern u4 spcS; // The stack pointer (always from 100 to 1FF) (added Ram)

#endif
