
;	---------------------
;	AmiPC-Engine Emulator		(Diseño Basado en AmiNES Emulator)
;	---------------------

;	Diseñado y Programado por: Juan Antonio Gómez Gálvez
;	1997 © RED Soft S.L.  Barcelona, Spain
;	(Viernes 20 de Junio de 1997) => (???)

;	PC = A5
;	D3 = SR
;	D4 = X
;	D5 = Y
;	SP = D6 y A6
;	D7 = A

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

	BRA.S	Vamos
	MOVEM.L	DEBUG,D0-D7/A0-A6

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

	BRA.S	Vamos
	DC.B	"$VER:AmiPC-Engine Emulator v0.1 (31.9.97)",0,0
	DC.B	"By: Juan Antonio Gómez Gálvez.",0,0
	CNOP	0,8
Vamos:

	JSR	InitSistema

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

;;;	jmp	empieza

NF_Menu:INCLUDE	"AmiPC-Engine_Menu_Alpha.asm"
	TST.L	D7
	BMI.S	EsContinuar

empieza:

	MOVE.L	#Bucle,DirContinua
	CLR.W	DirFlags
EsContinuar:

; -=-=-
	LEA	DirPrefs,A5
	MOVE.B	$08(A5),D0
	AND.W	#$0003,D0
	MOVE.L	(JoyControlPrg.W,PC,D0.W*4),JoyControlRut
; -=-=-

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

; ---------------------------------------=> Clear Caches.
	MOVE.L	$4.W,A6
	JSR	-$27C(A6)	; ClearCacheU
; ---------------------------------------<=

; ---------------------------------------=> Parche para MC68060.
	TST.B	EsUn060
	BPL.S	NoMC060
	MOVE.B	#$80,Mtr0+3
	MOVE.B	#$80,Mtr1+3
NoMC060:
; ---------------------------------------<=

	JSR	CongelaAMIGA
	BSR	InitPSG


	MOVE.L	SP,PILA

	BRA	M6510

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

;	-=========-
;	 Variables
;	-=========-

PagRead=-$40
PagWrite=-$20
Restas=-$80
Desbor=-$C0-Restas

NesIntR=$7
TipoIntOr=$11

DirVRAM=$4
DirSRAM=$6

VFF=$0
BFF=$1
DFF=$2
IFF=$3

ModoTraza=$8
LeeVROMSkip=$9

JoyCnt=$A
JoyX=$B
KeyX=$10

CoorS=$C
CoorX=$D
CoorY=$E

SalirMenu=$F

MapROMBase=$14
MaskROM=$18
MaskROM2=$1A
MaskVROM=$1C

TabMap=$20


;	-=========-

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

	CNOP	0,8
JoyControlPrg:
	DC.L	LeeJoyStick
	DC.L	LeeTeclado
	DC.L	LeeCD32Joypad
	DC.L	LeeJoypad

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

	CNOP	0,8
InitSistema:
;;	BSR	ArrTabInst

	LEA	Regs,A3
	BSR	CreaTablaFlags

	BSR	CreaTabOBJ


	RTS

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
	CNOP	0,8
CreaTabOBJ:
	LEA	TablaOBJFlip0,A0
	LEA	TablaOBJFlip1,A1

	MOVEQ	#0,D1
	MOVEQ	#0,D3
	MOVE.W	#($100)-1,D0
CrTaOBJBuc:
	MOVE.W	D1,D2
	MOVE.W	D2,(A0)+
	REPT	8
	LSR.B	#1,D2
	ADDX.B	D3,D3
	ENDR
	MOVE.W	D3,(A1)+
	ADDQ.B	#1,D1
	DBF	D0,CrTaOBJBuc
	RTS
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

; ------------------------------------> Borra memoria. (A0=Dir.MEM) D0.w=(x/4)-1
	CNOP	0,4
BorraMem:
	CLR.L	(A0)+
	DBF	D0,BorraMem
	RTS
; ------------------------------------<

; ------------------------------------> Inicializa PSG
InitPSG:
	LEA	$DFF000,A6
	BSET	#1,$BFE001		; Datos Musica.

	MOVE.L	#Onda,$A0(A6)	; wave
	MOVE.L	#Onda,$B0(A6)
	MOVE.L	#Onda,$C0(A6)
	MOVE.L	#Onda,$D0(A6)

	MOVE.W	#1,$A4(A6)	; Size
	MOVE.W	#1,$B4(A6)
	MOVE.W	#1,$C4(A6)
	MOVE.W	#1,$D4(A6)

	MOVE.W	#0,$A8(A6)	; Volumen
	MOVE.W	#0,$B8(A6)
	MOVE.W	#0,$C8(A6)
	MOVE.W	#0,$D8(A6)

	MOVE.W	#$800F,$96(A6)

;	CLR.L	SounVol1
;	CLR.L	SounVol3
;	CLR.W	SounVol5
;	CLR.L	SounTim1
;	CLR.L	SounTim3
;	CLR.W	SounTim5
;	CLR.L	SounEnv1
;	CLR.B	SounEnv5

	RTS
; ------------------------------------<

; ------------------------------------> Crea Tablas de Paginación.
	CNOP	0,4
CreaTabPag:
	LEA	PagRead(A3),A0
	LEA	Restas(A3),A1
	LEA	Desbor(A1),A2	; (CUIDADO: Según Puntero "Restas")
	MOVEQ	#0,D1
	MOVEQ	#(8-1),D0
CreaTabPagBuc:
	MOVE.L	(A0)+,D2	; Punteros de Restas.
	MOVE.W	D2,(A1)+
	ADDQ	#$6,A1

;;;	MOVE.L	(A0)+,D2	; Punteros de Desbordamiento.
	ADD.L	D1,D2
	ADDQ.L	#$1,D2
	MOVE.L	D2,(A2)+
	ADD.L	#$1FFF,D2
	MOVE.L	D2,(A2)+

	ADD.L	#$2000,D1
	DBF	D0,CreaTabPagBuc
	RTS
; ------------------------------------<

; ------------------------------------> Crea Tablas para Flags.

CreaTablaFlags:
	LEA	Flags_Push,A0
	LEA	Flags_Pop,A1
	MOVE.W	#256-1,D6
	MOVEQ	#0,D0
FLAGSBUC:
	MOVE.B	D0,D1
	MOVEQ	#0,D2
	BFINS	D1,D2{31:1}	; C	(Ami-b0 => NES-b0)
	LSR.B	#1,D1
	BFINS	D1,D2{25:1}	; V	(Ami-b1 => NES-b6)
	LSR.B	#1,D1
	BFINS	D1,D2{30:1}	; Z	(Ami-b2 => NES-b1)
	LSR.B	#1,D1
	BFINS	D1,D2{24:1}	; N	(Ami-b3 => NES-b7)
;	---
	LSR.B	#1,D1
	BFINS	D1,D2{26:1}	; 1	(Ami-b4 => NES-b5)
	LSR.B	#1,D1
	BFINS	D1,D2{27:1}	; B	(Ami-b5 => NES-b4)
	LSR.B	#1,D1
	BFINS	D1,D2{28:1}	; D	(Ami-b6 => NES-b3)
	LSR.B	#1,D1
	BFINS	D1,D2{29:1}	; I	(Ami-b7 => NES-b2)
;	---
	MOVE.B	D2,(A0)+
;	----
	MOVE.B	D0,D1
	MOVEQ	#0,D2
	BFEXTU	D1{24:1},D3	; N	(NES-b7 => Ami-b3)
	BFINS	D3,D2{28:1}
	BFEXTU	D1{25:1},D3	; V	(NES-b6 => Ami-b1)
	BFINS	D3,D2{30:1}
	BFEXTU	D1{26:1},D3	; 1	(NES-b5 => Ami-b4)
	BFINS	D3,D2{27:1}
	BFEXTU	D1{27:1},D3	; B	(NES-b4 => Ami-b5)
	BFINS	D3,D2{26:1}
;	---
	BFEXTU	D1{28:1},D3	; D	(NES-b3 => Ami-b6)
	BFINS	D3,D2{25:1}
	BFEXTU	D1{29:1},D3	; I	(NES-b2 => Ami-b7)
	BFINS	D3,D2{24:1}
	BFEXTU	D1{30:1},D3	; Z	(NES-b1 => Ami-b2)
	BFINS	D3,D2{29:1}
	BFINS	D1,D2{31:1}	; C	(NES-b0 => Ami-b0)
;	---
	MOVE.B	D2,(A1)+
;	----
	ADDQ.B	#1,D0
	DBF	D6,FLAGSBUC
	RTS
; ------------------------------------<
















; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

	CNOP	0,8
M6510:
	MOVEM.L	Debug(PC),D0-D7/A0-A6
	CMP.L	#BUCLE,DirContinua
	BNE	EsContinue


	LEA	Regs,A3
;	-=-=-=-=-=-=-=-=-=-=-=-		; Borra tabla base de datos.
	MOVE.L	A3,A0
	MOVE.W	#($7C/4)-1,D0
	BSR	BorraMem
;	-=-=-=-=-=-=-=-=-=-=-=-


	MOVE.L	DirCart,A0
	ADD.W	#$0080,A0
	MOVE.L	A0,MapROMBase(A3)


;	-=-=-=-=-=-=-=-=-=-=-=-		; Inicializa Sistema de Paginación

	LEA	DirMappers,A1
	MOVE.W	#($100)-1,D0
InitMapBuc:
	MOVE.L	#LROM,(A1)+
	MOVE.L	#EROM,(A1)+
	DBF	D0,InitMapBuc

	MOVE.L	MapROMBase(A3),A0
	LEA	DirMappers,A1
	MOVE.W	PagCart,D0
	LSL.W	#1,D0
	SUBQ.W	#1,D0
CreaMapBuc:
	MOVE.L	A0,(A1)
	ADD.W	#$2000,A0
	ADDQ.W	#8,A1
	DBF	D0,CreaMapBuc

	MOVE.L	#SRAM,DirMappers+($F7*8)
	MOVE.L	#SRAM,DirMappers+($F7*8)+4
	MOVE.L	#IRAM,DirMappers+($F8*8)
	MOVE.L	#IRAM,DirMappers+($F8*8)+4
	MOVE.L	#IOAM,DirMappers+($FF*8)
	MOVE.L	#IOAM,DirMappers+($FF*8)+4

;	-=-=-=-=-=-=-=-=-=-=-=-		; Inicializa Sistema de Paginación

	MOVE.L	MapROMBase(A3),A0
;;	ADD.W	#$0080,A0

	SUB.L	#$E000,A0
	MOVE.L	A0,PagRead+$1C(A3)
	ADD.L	#$2000,A0
	MOVE.L	A0,PagRead+$18(A3)
	ADD.L	#$2000,A0
	MOVE.L	A0,PagRead+$14(A3)
	ADD.L	#$2000,A0
	MOVE.L	A0,PagRead+$10(A3)

	MOVE.L	#IOAM-$0000,PagRead+$00(A3)
	MOVE.L	#IRAM-$2000,PagRead+$04(A3)
	MOVE.L	#SRAM-$4000,PagRead+$08(A3)
	MOVE.L	#LROM-$6000,PagRead+$0C(A3)

	MOVE.L	#IOAM-$0000,PagWrite+$00(A3)
	MOVE.L	#IRAM-$2000,PagWrite+$04(A3)
	MOVE.L	#SRAM-$4000,PagWrite+$08(A3)
	MOVE.L	#EROM-$6000,PagWrite+$0C(A3)

	MOVE.L	#EROM-$8000,PagWrite+$10(A3)
	MOVE.L	#EROM-$A000,PagWrite+$14(A3)
	MOVE.L	#EROM-$C000,PagWrite+$18(A3)
	MOVE.L	#EROM-$E000,PagWrite+$1C(A3)

;	-=-=-=-=-=-=-=-=-=-=-=-
	BSR	CreaTabPag
;	-=-=-=-=-=-=-=-=-=-=-=-		; Inicializa Mascaras de ROM y RAM.


;	-=-=-=-=-=-=-=-=-=-=-=-		; Borra Todas las RAMs.
	LEA	VRAM,A0
	MOVE.W	#((32*1024)/4)-1,D0
	BSR	BorraMem
	LEA	IRAM,A0
	MOVE.W	#($2080/4)-1,D0
	BSR	BorraMem
	LEA	IOAM,A0
	MOVE.W	#($2080/4)-1,D0
	BSR	BorraMem

	LEA	PantGfx,A0
	MOVE.W	#((64*512*4)/4)-1,D0
	BSR	BorraMem
	LEA	PantSpr,A0
	MOVE.W	#((32*256*4)/4)-1,D0
	BSR	BorraMem
;	-=-=-=-=-=-=-=-=-=-=-=-


	MOVEM.L	InitReg(PC),D0-D7/A0-A6


	MOVE.W	([PagRead+(7*4).W,A3],$FFFE.L),D1
	ROR.W	#8,D1

	MOVE.L	D1,A5
	LSR.W	#8,D1
	LSR.B	#5,D1
	ADD.L	PagRead(A3,D1.W*4),A5
	LEA	Restas(A3,D1.W*8),A2

EsContinue:

; ----------------------------------

	MOVE.W	#$7FFF,$DFF09C
	NOP
	NOP
EsperaInt0:
	BTST	#$05,$DFF01F
	BEQ.S	EsperaInt0
	NOP
	MOVE.W	#$7FFF,$DFF09C
	NOP
	NOP
EsperaInt1:
	BTST	#$05,$DFF01F
	BEQ.S	EsperaInt1
	NOP
	MOVE.W	#$7FFF,$DFF09C
	NOP
	NOP
EsperaInt2:
	BTST	#$05,$DFF01F
	BEQ.S	EsperaInt2
	NOP
	NOP
	MOVE.W	#$7FFF,$DFF09C
	NOP
	NOP
; ----------------------------------

	MOVEM.L	D1/D2,-(SP)

	MOVE.W	#4,D1
	OR.B	#$40,$BFEE01		; CIAA Libre
TRETARDO0:
	MOVE.B	$DFF006,D2
TRETARDOB0:
	CMP.B	$DFF006,D2
	BEQ.S	TRETARDOB0
	DBF	D1,TRETARDO0
	AND.B	#$BF,$BFEE01		; CIAA Libre

	MOVEM.L	(SP)+,D1/D2

	NOP
	NOP
	SF	$BFEC01
	NOP
	NOP

; ----------------------------------

	MOVE.W	#$C030,$DFF09A		; EI
BUC:	BRA.S	BUC			; JR $FE  (je,je,je)

; ----------------------------------



	CNOP	0,8
InitReg:
	DC.L	0,0,$0100,0,0,0,$01FF,0	; D0-D7
	DC.L	0			; A0
	DC.L	0			; A1
	DC.L	Regs+Restas+(4*8)	; A2
	DC.L	Regs			; A3
	DC.L	0			; A4
	DC.L	0			; A5
	DC.L	IRAM+$01FF		; A6





;	--------------------------------------------------
;	 6510 Macros v1.0 - Por Juan Antonio Gómez Gálvez
;	--------------------------------------------------


IDEN:	MACRO
	CNOP	0,4
	DC.B	"JAGG"
	ENDM


PonCCR:	MACRO
	IFC	"NVZC","\1"
	OtraT			; Guarda todos los flags.
	ENDC
	IFC	"NxZx","\1"
	OtraNZ			; Guarda todos los flags.
	ENDC
	IFC	"NxZC","\1"
	OtraNZC			; Guarda todos menos flag V.
	ENDC
	IFC	"NVZn","\1"
	OtraTn			; Guarda todos los flags.
	ENDC
	ENDM


Otra:	MACRO
	MOVE.B	(A5)+,D2
	JMP	([A3,D2.W*4])
	CNOP	0,4
	DC.B	"JAGG"
	ENDM


Otra2:	MACRO
	MOVE.B	(A5)+,D2
	JMP	([A3,D2.W*4])
	CNOP	0,8
	ENDM


OtraT:	MACRO
	MOVE.B	CCR,D3
	SVS	(A3)
	Otra
	ENDM


OtraTn:	MACRO
	MOVE.B	CCR,D3
	SVS	(A3)
	BCHG	#0,D3
	Otra
	ENDM


OtraNZ:	MACRO
	MOVE.B	CCR,D3
	BFINS	D2,D3{31:1}
	Otra
	ENDM


OtraNZC:MACRO
	MOVE.B	CCR,D3
	BCHG	#0,D3
	Otra
	ENDM



CalPag:	MACRO
	MOVE.L	\1,\2
	IFC	"D1","\1"
	LSR.W	#8,D1
	LSR.B	#5,D1
	ELSEIF
	BFEXTU	\1{16:3},D1
	ENDC
	ADD.L	PagRead(A3,D1.W*4),\2
	ENDM


CalPagE:MACRO
	MOVE.L	\1,\2
	IFC	"D1","\1"
	LSR.W	#8,D1
	LSR.B	#5,D1
	ELSEIF
	BFEXTU	\1{16:3},D1
	ENDC
	ADD.L	PagWrite(A3,D1.W*4),\2
	ENDM


CalStak:MACRO
	LEA	(IRAM.L,\1.W),\2
	ENDM


MiraHard:MACRO
	BNE.S	\@NoLee
;	TST.B	IOMap(A3,D1.W)
;	BEQ.S	\@NoLee
	BSR	LeeHard
\@NoLee:
	ENDM



;	ra	Acumulador
;	id	Indirecto

;	ab	Absoluto			LDA	$C0AF
;	ax	Absoluto indexado con X		LDA	$C0AF,X
;	ay	Absoluto indexado con Y		LDA	$C0AF,Y

;	zp	ZeroPage			LDA	$AF
;	zx	ZeroPage indexado con X		LDA	$AF,X
;	zy	ZeroPage indexado con Y		LDA	$AF,Y

;	in	inmediato			LDA	#$7F
;	iy	indirectamente indexado		LDA	($70),Y
;	ix	indexado indirecto		LDA	($70,X)


; --------------------------------------------
; --------------------------------------------

;; -------------------------------------------------------------
;;		  \1    \2      \3    \4   \5     \6
;;	MINS	Instr,Destino,Origen,Modo,Flags,Ini.Flags
;; -------------------------------------------------------------

MIns:	MACRO

	IFC	"NxZx","\5"		; ¿Guardar Flag C?
	MOVE.B	D3,D2
	ENDC


	IFC	"in","\4"		; LDA  #$01
	IFC	"N","\6"		; Especial para EOR,ADDX,SUBX
	\1	(A5)+,\2
	ELSEIF
	MOVE.B	(A5)+,D1
	IFC	"C","\6"		; Actualiza Flag C
	LSR.B	#1,D3
	OR.B	#$04,CCR
	ENDC
	\1	D1,\2
	ENDC
;ius
	PonCCR	\5			; Recoge Flags.
	ENDC


	IFC	"ab","\4"		; LDA  $2003
	MOVE.W	(A5)+,D1
;ius2
	ROR.W	#8,D1
	IFNC	"nn","\3"
	ADD.W	\3,D1
	ENDC
	CalPag	D1,A4
	MiraHard
	IFC	"N","\6"		; Especial para EOR,ADDX,SUBX
	\1	(A4),\2
	ELSEIF
	MOVE.B	(A4),D1
	IFC	"C","\6"		; Actualiza Flag C
	LSR.B	#1,D3
	OR.B	#$04,CCR
	ENDC
	\1	D1,\2
	ENDC
	PonCCR	\5			; Recoge Flags.
	ENDC


	IFC	"zp","\4"		; LDA  $03
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
;ius
	IFNC	"nn","\3"
	IFC	"im","\3"
	MOVE.W	(IRAM,D1.L),D1
	ROR.W	#8,D1
	CalPag	D1,A4
	ELSEIF
	ADD.B	\3,D1
	ENDC
	ENDC

	IFNC	"im","\3"
	LEA	(IRAM,D1.L),A4		; Sustituye a	'CalPag	D1,A4'
	ENDC

	IFC	"N","\6"		; Especial para EOR,ADDX,SUBX
	\1	(A4),\2
	ELSEIF
	MOVE.B	(A4),D1
	IFC	"C","\6"		; Actualiza Flag C
	LSR.B	#1,D3
	OR.B	#$04,CCR
	ENDC
	\1	D1,\2
	ENDC
	PonCCR	\5			; Recoge Flags.
	ENDC


	IFC	"iy","\4"		; LDA  ($03),Y
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
;ius
	MOVE.W	(IRAM,D1.L),D1
	ROR.W	#8,D1
	ADD.W	\3,D1
	CalPag	D1,A4
	MiraHard
	IFC	"N","\6"		; Especial para EOR,ADDX,SUBX
	\1	(A4),\2
	ELSEIF
	MOVE.B	(A4),D1
	IFC	"C","\6"		; Actualiza Flag C
	LSR.B	#1,D3
	OR.B	#$04,CCR
	ENDC
	\1	D1,\2
	ENDC
	PonCCR	\5			; Recoge Flags.
	ENDC


	IFC	"ix","\4"		; LDA  ($03,X)
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
;ius
	ADD.B	\3,D1
	MOVE.W	(IRAM,D1.L),D1
	ROR.W	#8,D1
	CalPag	D1,A4
	MiraHard
	IFC	"N","\6"		; Especial para EOR,ADDX,SUBX
	\1	(A4),\2
	ELSEIF
	MOVE.B	(A4),D1
	IFC	"C","\6"		; Actualiza Flag C
	LSR.B	#1,D3
	OR.B	#$04,CCR
	ENDC
	\1	D1,\2
	ENDC
	PonCCR	\5			; Recoge Flags.
	ENDC

	ENDM

; --------------------------------------------
; --------------------------------------------

MROT:	MACRO

	IFC	"ra","\4"
	IFC	"C","\5"		; Actualiza Flag C
	LSR.B	#1,D3
	ENDC
	\1	\3,\2
	MOVE.B	CCR,D3
	Otra
	ENDC

	IFC	"ab","\4"
	MOVE.W	(A5)+,D1
;ius2
	ROR.W	#8,D1
	IFNC	"nn","\2"
	ADD.W	\2,D1
	ENDC
	CalPagE	D1,A4
	MOVE.B	(A4),D2
	IFC	"C","\5"		; Actualiza Flag C
	LSR.B	#1,D3
	ENDC
	\1	\3,D2
	MOVE.B	CCR,D3
	MOVE.B	D2,(A4)
	Otra
	ENDC

	IFC	"zp","\4"
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
;ius2
	IFNC	"nn","\2"
	ADD.B	\2,D1
	ENDC
	LEA	(IRAM,D1.L),A4
	MOVE.B	(A4),D2
	IFC	"C","\5"		; Actualiza Flag C
	LSR.B	#1,D3
	ENDC
	\1	\3,D2
	MOVE.B	CCR,D3
	MOVE.B	D2,(A4)
	Otra
	ENDC

	ENDM

; --------------------------------------------
; --------------------------------------------

MSET:	MACRO

	IFC	"ab","\4"
	MOVE.W	(A5)+,D1
;ius2
	ROR.W	#8,D1
	IFNC	"nn","\2"
	ADD.W	\2,D1
	ENDC
	MOVE.W	D1,D0				; */*/*/*/*/*/*
	CalPagE	D1,A4
	\1	\3,(A4)
	JMP	([PagRuts.W,PC,D1.W*4])
	IDEN
	ENDC


	IFC	"zp","\4"
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
;ius2
	IFNC	"nn","\2"
	ADD.B	\2,D1
	ENDC

	\1	\3,(IRAM,D1.L)
	Otra
	ENDC


	IFC	"im","\4"
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
;ius2
	MOVE.W	(IRAM,D1.L),D1
	ROR.W	#8,D1

	MOVE.W	D1,D0				; */*/*/*/*/*/*
	CalPagE	D1,A4
	\1	\3,(A4)
	JMP	([PagRuts.W,PC,D1.W*4])
	IDEN
	ENDC


	IFC	"iy","\4"		; STA  ($03),Y
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
;ius
	MOVE.W	(IRAM,D1.L),D1
	ROR.W	#8,D1
	ADD.W	\2,D1
	MOVE.W	D1,D0				; */*/*/*/*/*/*
	CalPagE	D1,A4
	\1	\3,(A4)
	JMP	([PagRuts.W,PC,D1.W*4])
	IDEN
	ENDC


	IFC	"ix","\4"		; STA  ($03,X)
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
;ius
	ADD.B	\2,D1
	MOVE.W	(IRAM,D1.L),D1
	ROR.W	#8,D1
	MOVE.W	D1,D0				; */*/*/*/*/*/*
	CalPagE	D1,A4
	\1	\3,(A4)
	JMP	([PagRuts.W,PC,D1.W*4])
	IDEN
	ENDC

	ENDM


; --------------------------------------------
; --------------------------------------------


MSuma:	MACRO

	MOVE.B	D3,D2			; Guarda Flag C

	IFC	"ab","\4"
	MOVE.W	(A5)+,D1
;ius2
	ROR.W	#8,D1
	IFNC	"nn","\2"
	ADD.W	\2,D1
	ENDC
	CalPagE	D1,A4

	\1	\3,(A4)
	OtraNZ
	ENDC

	IFC	"zp","\4"
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
;ius
	IFNC	"nn","\2"
	ADD.B	\2,D1
	ENDC

	\1	\3,(IRAM,D1.L)
	OtraNZ
	ENDC

	ENDM


; --------------------------------------------
; --------------------------------------------


MiBccs:	MACRO
	IFNC	"nn","\1"
	B\1.S	\@MiBccs
	ADDQ.W	#1,A5
	OTRA2
	ENDC
\@MiBccs:
	MOVE.B	(A5)+,D1
	EXT.W	D1
	ADD.W	D1,A5
	OTRA
	ENDM


; --------------------------------------------
; --------------------------------------------
; --------------------------------------------



;	-=====================-
;	 Emulación de códigos
;	-=====================-

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

	IDEN
Bucle:	Otra

JAMnn:	Otra

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

CLAnn:	SF	D7
	Otra
CLXnn:	SF	D4
	Otra
CLYnn:	SF	D5
	Otra

SAXnn:	EXG.L	D4,D7
	Otra
SAYnn:	EXG.L	D5,D7
	Otra
SXYnn:	EXG.L	D4,D5
	Otra

CSHnn:				; Speed Hight
	Otra
CSLnn:				; Speed Low
	Otra

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

ADCin:	MINS	ADDX.B,D7,vv,in,NVZC,C
ADCab:	MINS	ADDX.B,D7,nn,ab,NVZC,C
ADCax:	MINS	ADDX.B,D7,D4,ab,NVZC,C
ADCay:	MINS	ADDX.B,D7,D5,ab,NVZC,C
ADCzp:	MINS	ADDX.B,D7,nn,zp,NVZC,C
ADCzx:	MINS	ADDX.B,D7,D4,zp,NVZC,C
ADCzy:	MINS	ADDX.B,D7,D5,zp,NVZC,C		; NO ESTA EN EL 6510
ADCix:	MINS	ADDX.B,D7,D4,ix,NVZC,C
ADCiy:	MINS	ADDX.B,D7,D5,iy,NVZC,C
ADCim:	MINS	ADDX.B,D7,im,zp,NVZC,C

SBCin:	NOT.B	D3
	MINS	SUBX.B,D7,vv,in,NVZn,C
SBCab:	NOT.B	D3
	MINS	SUBX.B,D7,nn,ab,NVZn,C
SBCax:	NOT.B	D3
	MINS	SUBX.B,D7,D4,ab,NVZn,C
SBCay:	NOT.B	D3
	MINS	SUBX.B,D7,D5,ab,NVZn,C
SBCzp:	NOT.B	D3
	MINS	SUBX.B,D7,nn,zp,NVZn,C
SBCzx:	NOT.B	D3
	MINS	SUBX.B,D7,D4,zp,NVZn,C
SBCzy:	NOT.B	D3
	MINS	SUBX.B,D7,D5,zp,NVZn,C		; NO ESTA EN EL 6510
SBCix:	NOT.B	D3
	MINS	SUBX.B,D7,D4,ix,NVZn,C
SBCiy:	NOT.B	D3
	MINS	SUBX.B,D7,D5,iy,NVZn,C
SBCim:	NOT.B	D3
	MINS	SUBX.B,D7,im,zp,NVZn,C

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

ANDin:	MINS	AND.B,D7,vv,in,NxZx,N
ANDab:	MINS	AND.B,D7,nn,ab,NxZx,N
ANDax:	MINS	AND.B,D7,D4,ab,NxZx,N
ANDay:	MINS	AND.B,D7,D5,ab,NxZx,N
ANDzp:	MINS	AND.B,D7,nn,zp,NxZx,N
ANDzx:	MINS	AND.B,D7,D4,zp,NxZx,N
ANDzy:	MINS	AND.B,D7,D5,zp,NxZx,N		; NO ESTA EN EL 6510
ANDix:	MINS	AND.B,D7,D4,ix,NxZx,N
ANDiy:	MINS	AND.B,D7,D5,iy,NxZx,N
ANDim:	MINS	AND.B,D7,im,zp,NxZx,N

ORAin:	MINS	OR.B,D7,vv,in,NxZx,N
ORAab:	MINS	OR.B,D7,nn,ab,NxZx,N
ORAax:	MINS	OR.B,D7,D4,ab,NxZx,N
ORAay:	MINS	OR.B,D7,D5,ab,NxZx,N
ORAzp:	MINS	OR.B,D7,nn,zp,NxZx,N
ORAzx:	MINS	OR.B,D7,D4,zp,NxZx,N
ORAzy:	MINS	OR.B,D7,D5,zp,NxZx,N
ORAix:	MINS	OR.B,D7,D4,ix,NxZx,N
ORAiy:	MINS	OR.B,D7,D5,iy,NxZx,N
ORAim:	MINS	OR.B,D7,im,zp,NxZx,N

EORin:	MINS	EOR.B,D7,vv,in,NxZx,E
EORab:	MINS	EOR.B,D7,nn,ab,NxZx,E
EORax:	MINS	EOR.B,D7,D4,ab,NxZx,E
EORay:	MINS	EOR.B,D7,D5,ab,NxZx,E
EORzp:	MINS	EOR.B,D7,nn,zp,NxZx,E
EORzx:	MINS	EOR.B,D7,D4,zp,NxZx,E
EORzy:	MINS	EOR.B,D7,D5,zp,NxZx,E
EORix:	MINS	EOR.B,D7,D4,ix,NxZx,E
EORiy:	MINS	EOR.B,D7,D5,iy,NxZx,E
EORim:	MINS	EOR.B,D7,im,zp,NxZx,E

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

ASLra:	MROT	ASL.B,D7,#1,ra,N
ASLab:	MROT	ASL.B,nn,#1,ab,N
ASLax:	MROT	ASL.B,D4,#1,ab,N
ASLzp:	MROT	ASL.B,nn,#1,zp,N
ASLzx:	MROT	ASL.B,D4,#1,zp,N

LSRra:	MROT	LSR.B,D7,#1,ra,N
LSRab:	MROT	LSR.B,nn,#1,ab,N
LSRax:	MROT	LSR.B,D4,#1,ab,N
LSRzp:	MROT	LSR.B,nn,#1,zp,N
LSRzx:	MROT	LSR.B,D4,#1,zp,N

ROLra:	MROT	ROXL.B,D7,#1,ra,C
ROLab:	MROT	ROXL.B,nn,#1,ab,C
ROLax:	MROT	ROXL.B,D4,#1,ab,C
ROLzp:	MROT	ROXL.B,nn,#1,zp,C
ROLzx:	MROT	ROXL.B,D4,#1,zp,C

RORra:	MROT	ROXR.B,D7,#1,ra,C
RORab:	MROT	ROXR.B,nn,#1,ab,C
RORax:	MROT	ROXR.B,D4,#1,ab,C
RORzp:	MROT	ROXR.B,nn,#1,zp,C
RORzx:	MROT	ROXR.B,D4,#1,zp,C

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

LDAin:	MINS	MOVE.B,D7,vv,in,NxZx,N
LDXin:	MINS	MOVE.B,D4,vv,in,NxZx,N
LDYin:	MINS	MOVE.B,D5,vv,in,NxZx,N

LDAab:	MINS	MOVE.B,D7,nn,ab,NxZx,N
LDXab:	MINS	MOVE.B,D4,nn,ab,NxZx,N
LDYab:	MINS	MOVE.B,D5,nn,ab,NxZx,N

LDAax:	MINS	MOVE.B,D7,D4,ab,NxZx,N
LDXax:	MINS	MOVE.B,D4,D4,ab,NxZx,N
LDYax:	MINS	MOVE.B,D5,D4,ab,NxZx,N

LDAay:	MINS	MOVE.B,D7,D5,ab,NxZx,N
LDXay:	MINS	MOVE.B,D4,D5,ab,NxZx,N
LDYay:	MINS	MOVE.B,D5,D5,ab,NxZx,N

LDAzp:	MINS	MOVE.B,D7,nn,zp,NxZx,N
LDXzp:	MINS	MOVE.B,D4,nn,zp,NxZx,N
LDYzp:	MINS	MOVE.B,D5,nn,zp,NxZx,N

LDAzx:	MINS	MOVE.B,D7,D4,zp,NxZx,N
LDXzx:	MINS	MOVE.B,D4,D4,zp,NxZx,N
LDYzx:	MINS	MOVE.B,D5,D4,zp,NxZx,N

LDAzy:	MINS	MOVE.B,D7,D5,zp,NxZx,N
LDXzy:	MINS	MOVE.B,D4,D5,zp,NxZx,N
LDYzy:	MINS	MOVE.B,D5,D5,zp,NxZx,N

LDAix:	MINS	MOVE.B,D7,D4,ix,NxZx,N
LDXix:	MINS	MOVE.B,D4,D4,ix,NxZx,N
LDYix:	MINS	MOVE.B,D5,D4,ix,NxZx,N

LDAiy:	MINS	MOVE.B,D7,D5,iy,NxZx,N
LDXiy:	MINS	MOVE.B,D4,D5,iy,NxZx,N
LDYiy:	MINS	MOVE.B,D5,D5,iy,NxZx,N

LDAim:	MINS	MOVE.B,D7,im,zp,NxZx,N
LDXim:	MINS	MOVE.B,D4,im,zp,NxZx,N
LDYim:	MINS	MOVE.B,D5,im,zp,NxZx,N

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

STAab:	MSET	MOVE.B,nn,D7,ab
STAax:	MSET	MOVE.B,D4,D7,ab
STAay:	MSET	MOVE.B,D5,D7,ab
STAzp:	MSET	MOVE.B,nn,D7,zp
STAzx:	MSET	MOVE.B,D4,D7,zp
STAzy:	MSET	MOVE.B,D5,D7,zp		; NO ESTA EN EL 6510
STAix:	MSET	MOVE.B,D4,D7,ix
STAiy:	MSET	MOVE.B,D5,D7,iy
STAim:	MSET	MOVE.B,im,D7,im

STXab:	MSET	MOVE.B,nn,D4,ab
STXzp:	MSET	MOVE.B,nn,D4,zp
STXzy:	MSET	MOVE.B,D5,D4,zp

STYab:	MSET	MOVE.B,nn,D5,ab
STYzp:	MSET	MOVE.B,nn,D5,zp
STYzx:	MSET	MOVE.B,D4,D5,zp

STZab:	MSET	MOVE.B,nn,#0,ab
STZax:	MSET	MOVE.B,D4,#0,ab
STZzp:	MSET	MOVE.B,nn,#0,zp
STZzx:	MSET	MOVE.B,D4,#0,zp

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

CMPin:	MINS	CMP.B,D7,vv,in,NxZC,N
CPXin:	MINS	CMP.B,D4,vv,in,NxZC,N
CPYin:	MINS	CMP.B,D5,vv,in,NxZC,N

CMPab:	MINS	CMP.B,D7,nn,ab,NxZC,N
CPXab:	MINS	CMP.B,D4,nn,ab,NxZC,N
CPYab:	MINS	CMP.B,D5,nn,ab,NxZC,N

CMPax:	MINS	CMP.B,D7,D4,ab,NxZC,N
CPXax:	MINS	CMP.B,D4,D4,ab,NxZC,N
CPYax:	MINS	CMP.B,D5,D4,ab,NxZC,N

CMPay:	MINS	CMP.B,D7,D5,ab,NxZC,N
CPXay:	MINS	CMP.B,D4,D5,ab,NxZC,N
CPYay:	MINS	CMP.B,D5,D5,ab,NxZC,N

CMPzp:	MINS	CMP.B,D7,nn,zp,NxZC,N
CPXzp:	MINS	CMP.B,D4,nn,zp,NxZC,N
CPYzp:	MINS	CMP.B,D5,nn,zp,NxZC,N

CMPzx:	MINS	CMP.B,D7,D4,zp,NxZC,N
CPXzx:	MINS	CMP.B,D4,D4,zp,NxZC,N
CPYzx:	MINS	CMP.B,D5,D4,zp,NxZC,N

CMPzy:	MINS	CMP.B,D7,D5,zp,NxZC,N
CPXzy:	MINS	CMP.B,D4,D5,zp,NxZC,N
CPYzy:	MINS	CMP.B,D5,D5,zp,NxZC,N

CMPix:	MINS	CMP.B,D7,D4,ix,NxZC,N
CPXix:	MINS	CMP.B,D4,D4,ix,NxZC,N
CPYix:	MINS	CMP.B,D5,D4,ix,NxZC,N

CMPiy:	MINS	CMP.B,D7,D5,iy,NxZC,N
CPXiy:	MINS	CMP.B,D4,D5,iy,NxZC,N
CPYiy:	MINS	CMP.B,D5,D5,iy,NxZC,N

CMPim:	MINS	CMP.B,D7,im,zp,NxZC,N
CPXim:	MINS	CMP.B,D4,im,zp,NxZC,N
CPYim:	MINS	CMP.B,D5,im,zp,NxZC,N

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

BITxx:	MACRO
	MOVE.B	D3,D2			; Guarda Flag C

	IFC	"in","\3"
	MOVE.B	(A5)+,D0
	ENDC

	IFC	"zp","\3"
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
	IFNC	"nn","\2"
	ADD.B	\2,D1
	ENDC
	LEA	(IRAM,D1.L),A4
	ENDC

	IFC	"ab","\3"
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	IFNC	"nn","\2"
	ADD.W	\2,D1
	ENDC
	CalPag	D1,A4
	ENDC

	MOVE.B	D7,D1
	AND.B	\1,D1
	MOVE.B	CCR,D3
	BFINS	D2,D3{31:1}

	AND.B	#$F7,D3
	MOVE.B	\1,D1
	BPL.S	\@BITCon
	OR.B	#$08,D3
\@BITCon:
	LSL.B	#1,D1
	SMI	(A3)
	Otra

	ENDM

BITin:	BITxx	D0,nn,in
BITab:	BITxx	(A4),nn,ab
BITax:	BITxx	(A4),D4,ab
BITzp:	BITxx	(A4),nn,zp
BITzx:	BITxx	(A4),D4,zp

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

BRAnn:	MiBccs	nn
BEQnn:	MOVE.B	D3,CCR
	MiBccs	EQ
BNEnn:	MOVE.B	D3,CCR
	MiBccs	NE
BPLnn:	MOVE.B	D3,CCR
	MiBccs	PL
BMInn:	MOVE.B	D3,CCR
	MiBccs	MI
BCSnn:	MOVE.B	D3,CCR
	MiBccs	CS
BCCnn:	MOVE.B	D3,CCR
	MiBccs	CC
BVSnn:	TST.B	(A3)
	MiBccs	NE
BVCnn:	TST.B	(A3)
	MiBccs	EQ

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

BRKnn:
	MOVE.W	#$FFF6,D1
	CalPag	D1,A4
	MOVE.W	(A4),D1
	ROR.W	#8,D1
	MOVE.L	A5,A4
	SUB.W	(A2),A4
	CalPag	D1,A5
	LEA	Restas(A3,D1.W*8),A2
	MOVE.W	A4,D1
	ROR.W	#8,D1
	SUBQ.B	#3,D6
	BCS	SPDESBOR		; ** DerborSP **
	MOVE.W	D1,-(A6)
;	-----------------------------------
	MOVE.B	D3,D1
	AND.W	#$000D,D1
	MOVE.L	A3,A4
	AND.L	#$02402090,(A4)+
	OR.B	-(A4),D1
	OR.B	-(A4),D1
	OR.B	-(A4),D1
	OR.B	-(A4),D1
	MOVE.B	(Flags_Push.w,PC,D1.W),-(A6)
;	-----------------------------------
	ST	BFF(A3)
	Otra

NOPnn:
	Otra


JMPab:	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	CalPag	D1,A5
	LEA	Restas(A3,D1.W*8),A2
	OTRA


JMPax:	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	ADD.W	D4,D1
	CalPag	D1,A5
	LEA	Restas(A3,D1.W*8),A2
	OTRA


JMPid:	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	CalPag	D1,A4
	MOVE.W	(A4),D1
	ROR.W	#8,D1
	CalPag	D1,A5
	LEA	Restas(A3,D1.W*8),A2
	OTRA


JSRnn:	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	MOVE.L	A5,A4
	SUB.W	(A2),A4
	CalPag	D1,A5
	LEA	Restas(A3,D1.W*8),A2
	SUBQ.B	#2,D6
	BCS.S	JSRDesbor
	MOVE.W	A4,D1
	SUBQ.W	#1,D1
	ROR.W	#8,D1
	MOVE.W	D1,-(A6)
	Otra2
JSRDesbor:
	MOVE.W	D6,D1
	ADDQ.W	#1,D1
	CalStak	D1,A6
	MOVE.W	A4,D1
	SUBQ.W	#1,D1
	MOVE.B	D1,D2
	LSR.W	#8,D1
	MOVE.B	D1,(A6)
	CalStak	D6,A6
	MOVE.B	D2,(A6)
	Otra2


BSRnn:	MOVE.B	(A5)+,D1
	EXT.W	D1
	MOVE.L	A5,A4
	SUB.W	(A2),A4
	ADD.W	D1,A5
	SUBQ.B	#2,D6
	BCS.S	JSRDesbor
	MOVE.W	A4,D1
	SUBQ.W	#1,D1
	ROR.W	#8,D1
	MOVE.W	D1,-(A6)
	Otra


RTSnn:
	MOVE.W	(A6)+,D1

	ADDQ.B	#2,D6
	BCS.S	RTSDesbor

	ROR.W	#8,D1
	ADDQ.W	#1,D1
	CalPag	D1,A5
	LEA	Restas(A3,D1.W*8),A2
	Otra2
RTSDesbor:
	CalStak	D6,A6
	MOVE.B	-1(A6),D1
	ROR.W	#8,D1
	ADDQ.W	#1,D1
	CalPag	D1,A5
	LEA	Restas(A3,D1.W*8),A2
	Otra


RTInn:
;;	SF	IFF(A3)			; ( DI ) Interrupciones ON.

	MOVE.B	(A6)+,D3
;	-----------------------------------
;;;	MOVE.L	(FlagVBDI.w,PC,D3.W*4),(A3)

	MOVE.B	D3,D2
	LSR.B	#3,D2
	SCS	IFF(A3)
	LSR.B	#1,D2
	SCS	DFF(A3)
	LSR.B	#1,D2
	SCS	BFF(A3)
	BFINS	D2,(A3){DFF*8:1}
	LSR.B	#2,D2
	SCS	(A3)

	MOVE.B	(Flags_Pop.w,PC,D3.W),D3
	AND.B	#$0D,D3
;	-----------------------------------

	ADDQ.B	#3,D6
	BCS.S	RTISiDesb

	MOVE.W	(A6)+,D1
	ROR.W	#8,D1

	CalPag	D1,A5
	LEA	Restas(A3,D1.W*8),A2
	Otra2

RTISiDesb:
	CalStak	D6,A6

	SUBQ.B	#2,D6
	CalStak	D6,A4
	ADDQ.B	#2,D6

	MOVE.W	-1(A6),D1
	MOVE.B	(A4),D1

	CalPag	D1,A5
	LEA	Restas(A3,D1.W*8),A2
	Otra

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

TXAnn:
	MOVE.B	D3,D2			; Guarda Flag C
	MOVE.B	D4,D7
	OtraNZ

TAXnn:
	MOVE.B	D3,D2			; Guarda Flag C
	MOVE.B	D7,D4
	OtraNZ

TYAnn:
	MOVE.B	D3,D2			; Guarda Flag C
	MOVE.B	D5,D7
	OtraNZ

TAYnn:
	MOVE.B	D3,D2			; Guarda Flag C
	MOVE.B	D7,D5
	OtraNZ

TSXnn:
	MOVE.B	D3,D2			; Guarda Flag C
	MOVE.B	D6,D4
	OtraNZ

TXSnn:
	MOVE.B	D4,D6
	CalStak	D6,A6
	Otra

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

PHPnn:
	MOVE.B	D3,D1
	AND.W	#$000D,D1
	MOVE.L	A3,A4
	AND.L	#$02402090,(A4)+
	OR.B	-(A4),D1
	OR.B	-(A4),D1
	OR.B	-(A4),D1
	OR.B	-(A4),D1

	SUBQ.B	#1,D6
	BCS.S	PHPDesbor

	MOVE.B	(Flags_Push.w,PC,D1.W),-(A6)
	Otra2

PHPDesbor:
	CalStak	D6,A6
	MOVE.B	(Flags_Push.w,PC,D1.W),(A6)
	Otra2

Flags_Push:	DS.B	256

	IDEN
PHAnn:
	SUBQ.B	#1,D6
	BCS.S	PHADesbor
	MOVE.B	D7,-(A6)
	Otra2
PHADesbor:
	CalStak	D6,A6
	MOVE.B	D7,(A6)
	Otra

PHXnn:
	SUBQ.B	#1,D6
	BCS.S	PHXDesbor
	MOVE.B	D4,-(A6)
	Otra2
PHXDesbor:
	CalStak	D6,A6
	MOVE.B	D4,(A6)
	Otra

PHYnn:
	SUBQ.B	#1,D6
	BCS.S	PHYDesbor
	MOVE.B	D5,-(A6)
	Otra2
PHYDesbor:
	CalStak	D6,A6
	MOVE.B	D5,(A6)
	Otra

PLPnn:
	MOVE.B	(A6)+,D3
;;;	MOVE.L	(FlagVBDI.w,PC,D3.W*4),(A3)

	MOVE.B	D3,D2
	LSR.B	#3,D2
	SCS	IFF(A3)
	LSR.B	#1,D2
	SCS	DFF(A3)
	LSR.B	#1,D2
	SCS	BFF(A3)
	BFINS	D2,(A3){DFF*8:1}
	LSR.B	#2,D2
	SCS	(A3)

	MOVE.B	(Flags_Pop.w,PC,D3.W),D3
	AND.B	#$0D,D3

	ADDQ.B	#1,D6
	BCS.S	PLPDesbor
	Otra2
PLPDesbor:
	CalStak	D6,A6
	Otra2

Flags_Pop:	DS.B	256
Flags_VBDI:	DS.L	256

	IDEN
PLAnn:
	MOVE.B	D3,D2			; Guarda Flag C
	ADDQ.B	#1,D6
	BCS.S	PLADesbor
	MOVE.B	(A6)+,D7
	OtraNZ
PLADesbor:
	MOVE.L	A6,A4
	CalStak	D6,A6
	MOVE.B	(A4),D7
	OtraNZ

PLXnn:
	MOVE.B	D3,D2			; Guarda Flag C
	ADDQ.B	#1,D6
	BCS.S	PLXDesbor
	MOVE.B	(A6)+,D4
	OtraNZ
PLXDesbor:
	MOVE.L	A6,A4
	CalStak	D6,A6
	MOVE.B	(A4),D4
	OtraNZ

PLYnn:
	MOVE.B	D3,D2			; Guarda Flag C
	ADDQ.B	#1,D6
	BCS.S	PLYDesbor
	MOVE.B	(A6)+,D5
	OtraNZ
PLYDesbor:
	MOVE.L	A6,A4
	CalStak	D6,A6
	MOVE.B	(A4),D5
	OtraNZ

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

CLCnn:
	BCLR	#0,D3
	Otra
SECnn:
	BSET	#0,D3
	Otra
CLInn:
	SF	IFF(A3)
	Otra
SEInn:
	ST	IFF(A3)
	Otra
CLVnn:
	SF	(A3)
	Otra
CLDnn:
	AND.B	#$7F,DFF(A3)
	Otra
SEDnn:
	OR.B	#$7F,DFF(A3)
	Otra

SETnn:
	Otra

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

INCab:	MSuma	ADDQ.B,nn,#1,ab
INCax:	MSuma	ADDQ.B,D4,#1,ab
INCzp:	MSuma	ADDQ.B,nn,#1,zp
INCzx:	MSuma	ADDQ.B,D4,#1,zp

DECab:	MSuma	SUBQ.B,nn,#1,ab
DECax:	MSuma	SUBQ.B,D4,#1,ab
DECzp:	MSuma	SUBQ.B,nn,#1,zp
DECzx:	MSuma	SUBQ.B,D4,#1,zp

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

DECra:
	MOVE.B	D3,D2			; Guarda Flag C
	SUBQ.B	#1,D7
	OtraNZ

INCra:
	MOVE.B	D3,D2			; Guarda Flag C
	ADDQ.B	#1,D7
	OtraNZ

DEYnn:
	MOVE.B	D3,D2			; Guarda Flag C
	SUBQ.B	#1,D5
	OtraNZ

INYnn:
	MOVE.B	D3,D2			; Guarda Flag C
	ADDQ.B	#1,D5
	OtraNZ

DEXnn:
	MOVE.B	D3,D2			; Guarda Flag C
	SUBQ.B	#1,D4
	OtraNZ

INXnn:
	MOVE.B	D3,D2			; Guarda Flag C
	ADDQ.B	#1,D4
	OtraNZ

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Test:	MACRO
	MOVE.B	D3,D2			; Guarda Flag C

	IFC	"D0","\2"
	MOVE.B	(A5)+,D0
	ENDC

	IFC	"zp","\4"
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
	IFNC	"nn","\3"
	ADD.B	\3,D1
	ENDC
	LEA	(IRAM,D1.L),A4
	ENDC

	IFC	"ab","\4"
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	IFNC	"nn","\3"
	ADD.W	\3,D1
	ENDC
	CalPagE	D1,A4
	ENDC

	\1	\2,(A4)
	MOVE.B	CCR,D3
	BFINS	D2,D3{31:1}
	AND.B	#$F7,D3
	MOVE.B	\2,D1
	BPL.S	\@TestCon
	OR.B	#$08,D3
\@TestCon:
	LSL.B	#1,D1
	SMI	(A3)
	Otra

	ENDM

TRBzp:	Test	AND.B,D7,nn,zp
TRBab:	Test	AND.B,D7,nn,ab
TSBzp:	Test	OR.B,D7,nn,zp
TSBab:	Test	OR.B,D7,nn,ab
TSTzp:	Test	AND.B,D0,nn,zp
TSTzx:	Test	AND.B,D0,D4,zp
TSTab:	Test	AND.B,D0,nn,ab
TSTax:	Test	AND.B,D0,D4,ab

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

xMBi:	MACRO
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
	\1	#\2,(IRAM,D1.L)
	Otra
	ENDM

RMB0:	xMBi	BCLR,0
RMB1:	xMBi	BCLR,1
RMB2:	xMBi	BCLR,2
RMB3:	xMBi	BCLR,3
RMB4:	xMBi	BCLR,4
RMB5:	xMBi	BCLR,5
RMB6:	xMBi	BCLR,6
RMB7:	xMBi	BCLR,7

SMB0:	xMBi	BSET,0
SMB1:	xMBi	BSET,1
SMB2:	xMBi	BSET,2
SMB3:	xMBi	BSET,3
SMB4:	xMBi	BSET,4
SMB5:	xMBi	BSET,5
SMB6:	xMBi	BSET,6
SMB7:	xMBi	BSET,7

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

BSSi:	MACRO
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
	BTST	#\1,(IRAM,D1.L)
	MiBccs	\2
	ENDM

BBR0:	BSSi	0,EQ
BBR1:	BSSi	1,EQ
BBR2:	BSSi	2,EQ
BBR3:	BSSi	3,EQ
BBR4:	BSSi	4,EQ
BBR5:	BSSi	5,EQ
BBR6:	BSSi	6,EQ
BBR7:	BSSi	7,EQ

BBS0:	BSSi	0,NE
BBS1:	BSSi	1,NE
BBS2:	BSSi	2,NE
BBS3:	BSSi	3,NE
BBS4:	BSSi	4,NE
BBS5:	BSSi	5,NE
BBS6:	BSSi	6,NE
BBS7:	BSSi	7,NE

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

ST0nn:
	MOVEQ	#0,D1
	MOVE.W	D1,D0				; */*/*/*/*/*/*
	CalPagE	D1,A4
	MOVE.B	(A5)+,(A4)
	JMP	([PagRuts.W,PC,D1.W*4])
	IDEN
ST1nn:
	MOVEQ	#2,D1
	MOVE.W	D1,D0				; */*/*/*/*/*/*
	CalPagE	D1,A4
	MOVE.B	(A5)+,(A4)
	JMP	([PagRuts.W,PC,D1.W*4])
	IDEN
ST2nn:
	MOVEQ	#3,D1
	MOVE.W	D1,D0				; */*/*/*/*/*/*
	CalPagE	D1,A4
	MOVE.B	(A5)+,(A4)
	JMP	([PagRuts.W,PC,D1.W*4])
	IDEN

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

TAMnn:				; Escribe en mapper.
	MOVE.B	(A5)+,D2
	MOVEQ	#0,D1
	LSR.B	#1,D2
	BCS.S	TAMCon
	MOVEQ	#1,D1
	LSR.B	#1,D2
	BCS.S	TAMCon
	MOVEQ	#2,D1
	LSR.B	#1,D2
	BCS.S	TAMCon
	MOVEQ	#3,D1
	LSR.B	#1,D2
	BCS.S	TAMCon
	MOVEQ	#4,D1
	LSR.B	#1,D2
	BCS.S	TAMCon
	MOVEQ	#5,D1
	LSR.B	#1,D2
	BCS.S	TAMCon
	MOVEQ	#6,D1
	LSR.B	#1,D2
	BCS.S	TAMCon
	MOVEQ	#7,D1
TAMCon:
	MOVE.B	D7,TabMap(A3,D1.W)

	MOVE.L	D1,D0
	MULU	#$2000,D0

	MOVE.L	(DirMappers+4.W,PC,D7.W*8),PagWrite(A3,D1.W*4)
	SUB.L	D0,PagWrite(A3,D1.W*4)

	MOVE.L	(DirMappers.W,PC,D7.W*8),PagRead(A3,D1.W*4)
	SUB.L	D0,PagRead(A3,D1.W*4)

	MOVE.W	(DirMappers+2.W,PC,D7.W*8),Restas(A3,D1.W*8)
	SUB.W	D0,Restas(A3,D1.W*8)

;;	ADD.L	#$8001,D1
;;	MOVE.L	D1,Restas+Desbor+($08)(A3)
;;	ADD.L	#$3FFF,D1
;;	MOVE.L	D1,Restas+Desbor+($0C)(A3)

;;	MOVEQ	#0,D1
;;	MOVE.W	A5,D1
;;	CalPag	D1,A5

	Otra

TMAnn:				; Lee de mapper.
	MOVE.B	(A5)+,D2
	MOVEQ	#0,D1
	LSR.B	#1,D2
	BCS.S	TMACon
	MOVEQ	#1,D1
	LSR.B	#1,D2
	BCS.S	TMACon
	MOVEQ	#2,D1
	LSR.B	#1,D2
	BCS.S	TMACon
	MOVEQ	#3,D1
	LSR.B	#1,D2
	BCS.S	TMACon
	MOVEQ	#4,D1
	LSR.B	#1,D2
	BCS.S	TMACon
	MOVEQ	#5,D1
	LSR.B	#1,D2
	BCS.S	TMACon
	MOVEQ	#6,D1
	LSR.B	#1,D2
	BCS.S	TMACon
	MOVEQ	#7,D1
TMACon:
	MOVE.B	TabMap(A3,D1.W),D7
	Otra

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

TAInn:
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	CalPag	D1,A4
	MOVE.B	(A4)+,D0
	SWAP	D0
	MOVE.B	(A4),D0
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	CalPagE	D1,A4
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	SUBQ.W	#1,D1
TAIBuc:
	SWAP	D0
	MOVE.B	D0,(A4)+
	DBF	D1,TAIBuc
	Otra


TIAnn:
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	CalPag	D1,A4

	MOVE.W	(A5)+,D1	; Se supone que es 0002

	CMP.W	#$0404,D1
	BEQ.S	TIApal

	CMP.W	#$0200,D1
	BEQ.S	TIAvram

	ADDQ.W	#2,A5
	Otra

TIAvram:
	MOVE.B	(VDPReg+(5*2)+1),D0
	LSR.B	#3,D0
	AND.W	#$0003,D0

	SWAP	D0

	MOVE.W	(A5)+,D0
	ROR.W	#8,D0
	SUBQ.W	#1,D0

	MOVE.W	VDPReg,D1
	ROR.W	#8,D1
	LSL.W	#1,D1
TIABuc:
	MOVE.B	(A4)+,(VRAM,D1.L)

	SWAP	D0
	ADD.W	(VDPSumas2.W,PC,D0.W*2),D1
	SWAP	D0

	DBF	D0,TIABuc

	LSR.W	#1,D1
	ROR.W	#8,D1
	MOVE.W	D1,VDPReg
	Otra

VDPSumas2:DC.W	1,32,64,128

	CNOP	0,8
TIApal:
	MOVE.W	(A5)+,D0
	ROR.W	#8,D0
	SUBQ.W	#1,D0

	MOVEQ	#0,D1
	MOVE.W	IOAM+$402,D1
	ROR.W	#8,D1
	AND.W	#$01FF,D1
	LSL.W	#1,D1
TIABucPal:
	MOVE.B	(A4)+,(VDPPal.L,D1.L)
	ADDQ.W	#1,D1
	AND.W	#$03FF,D1
	DBF	D0,TIABucPal

	LSR.W	#1,D1
	ROR.W	#8,D1
	MOVE.W	D1,IOAM+$402
	Otra


TIInn:
	MOVE.L	A0,D0
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	CalPag	D1,A0
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	CalPagE	D1,A4
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	SUBQ.W	#1,D1
TIIBuc:
	MOVE.B	(A0)+,(A4)+
	DBF	D1,TIIBuc
	MOVE.L	D0,A0
	Otra


TDDnn:
	MOVE.L	A0,D0
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	CalPag	D1,A0
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	CalPagE	D1,A4
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	SUBQ.W	#1,D1
	ADDQ.W	#1,A0
	ADDQ.W	#1,A4
TDDBuc:
	MOVE.B	-(A0),-(A4)
	DBF	D1,TDDBuc
	MOVE.L	D0,A0
	Otra


TINnn:
	ADDQ.W	#6,A5
	Otra








; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-



; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


	CNOP	0,8
LeeHard:

	CMP.L	#IOAM,A4
	BEQ.S	StatusIO

	CMP.L	#IOAM+$1000,A4
	BEQ.S	Lee1000

	RTS

StatusIO:

	ADD.B	#$35,(A4)
	BCLR	#5,(A4)

	MOVE.W	D1,-(SP)
	MOVE.B	NesIntR(A3),D1
	OR.B	D1,(A4)
	SF	NesIntR(A3)
	MOVE.W	(SP)+,D1
	RTS


Lee1000:
	MOVE.W	D1,-(SP)
	MOVE.B	KeyX(A3),D1
	BTST	#0,IOAM+$1000
	BNE.S	KeyLow
	LSR.B	#4,D1
KeyLow:
	NOT.B	D1
	AND.B	#$0F,D1
	MOVE.B	D1,(A4)
	MOVE.W	(SP)+,D1
	RTS


; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-



	CNOP	0,8
PagRuts:
	DC.L	EscrIO		; $0000-$1FFF
	DC.L	OtraInst	; $2000-$3FFF
	DC.L	OtraInst	; $4000-$5FFF
	DC.L	OtraInst	; $6000-$7FFF
	DC.L	OtraInst	; $8000-$9FFF
	DC.L	OtraInst	; $A000-$BFFF
	DC.L	OtraInst	; $C000-$DFFF
	DC.L	OtraInst	; $E000-$FFFF


	CNOP	0,8
OtraInst:
	Otra2


EscrIO:
	CMP.W	#$0002,D0
	BEQ	Escr0002
	CMP.W	#$0003,D0
	BEQ	Escr0003

	CMP.W	#$0404,D0
	BEQ	Escr0404

	CMP.W	#$0405,D0
	BEQ	Escr0405

	CMP.W	#$0802,D0
	BEQ	Escr080x
	CMP.W	#$0803,D0
	BEQ	Escr080x
	CMP.W	#$0804,D0
	BEQ	Escr080x
	CMP.W	#$0806,D0
	BEQ	Escr0806

	Otra2


Escr080x:
	MOVE.B	IOAM+$800,D1
	AND.W	#$0007,D1
	LSL.W	#3,D1
	AND.W	#$0007,D0
	ADD.B	D0,D1
	MOVE.B	(A4),(PSGBuffer,D1.W)
	Otra2

Escr0806:
	Otra2

	MOVE.B	IOAM+$800,D1
	AND.W	#$0007,D1
	MOVE.W	(PSGWaveCnt.L,D1.W*2),D0
	ADDQ.B	#1,D0
	AND.W	#$001F,D0
	MOVE.W	D0,(PSGWaveCnt.L,D1.W*2)

	LSL.W	#5,D1
	ADD.W	D0,D1
	MOVE.B	(A4),D2
	LSL.B	#3,D2
	MOVE.B	D2,(Onda0.L,D1.W)
	Otra2

PSGWaveCnt:	DS.W	8
PSGBuffer:	DS.B	8*8


Escr0002:
	MOVEQ	#0,D1
	MOVE.B	IOAM,D1
	MOVE.B	(A4),(VDPReg.L,D1.W*2)

	CMP.B	#2,D1
	BEQ.S	EscribeVRAM2

	Otra2

Escr0003:
	MOVEQ	#0,D1
	MOVE.B	IOAM,D1
	MOVE.B	(A4),(VDPReg+1.L,D1.W*2)

	CMP.B	#2,D1
	BEQ.S	EscribeVRAM3

	Otra2

EscribeVRAM2:
	MOVE.W	VDPReg,D1
	ROR.W	#8,D1
	AND.W	#$7FFF,D1
	MOVE.B	(A4),(VRAM,D1.W*2)
	Otra2

EscribeVRAM3:
	MOVE.W	VDPReg,D1
	ROR.W	#8,D1
	AND.W	#$7FFF,D1
	MOVE.B	(A4),(VRAM+1,D1.W*2)

	MOVE.B	(VDPReg+(5*2)+1),D0
	LSR.B	#3,D0
	AND.W	#$0003,D0

	ADD.W	(VDPSumas.W,PC,D0.W*2),D1

	ROR.W	#8,D1
	MOVE.W	D1,VDPReg
	Otra2

VDPSumas:DC.W	1,32,64,128


Escr0404:
	MOVEQ	#0,D1
	MOVE.W	IOAM+$402,D1
	ROR.W	#8,D1
	AND.W	#$01FF,D1
	MOVE.B	(A4),(VDPPal+0.L,D1.W*2)
	Otra2

Escr0405:
	MOVEQ	#0,D1
	MOVE.W	IOAM+$402,D1
	ROR.W	#8,D1
	AND.W	#$01FF,D1
	MOVE.B	(A4),(VDPPal+1.L,D1.W*2)
	ADDQ.W	#1,D1
	ROR.W	#8,D1
	MOVE.W	D1,IOAM+$402
	Otra2


	CNOP	0,8
VDPReg:	DS.W	256

	CNOP	0,8
VDPPal:	DS.W	512


; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


; -------------------------------------------------------------------

	CNOP	0,8
DirMappers:	DS.L	256*2	; 00-FF

; -------------------------------------------------------------------
; -------------------------------------------------------------------


; <=--------------------------------------------------------------------=>
; <=--------------------------------------------------------------------=>
; <=--------------------------------------------------------------------=>
; <=--------------------------------------------------------------------=>
; <=--------------------------------------------------------------------=>
; <=--------------------------------------------------------------------=>
; <=--------------------------------------------------------------------=>


	CNOP	0,8


	DS.L	2		; -$C0(A3)	Desbor  [-$40(Restas)]
	DS.L	2		; -$B8(A3)
	DS.L	2		; -$B0(A3)
	DS.L	2		; -$A8(A3)
	DS.L	2		; -$A0(A3)
	DS.L	2		; -$98(A3)
	DS.L	2		; -$90(A3)
	DS.L	2		; -$88(A3)

	DS.L	2		; -$80(A3)	Restas
	DS.L	2		; -$78(A3)
	DS.L	2		; -$70(A3)
	DS.L	2		; -$68(A3)
	DS.L	2		; -$60(A3)
	DS.L	2		; -$58(A3)
	DS.L	2		; -$50(A3)
	DS.L	2		; -$48(A3)


	DC.L	IRAM		; -$40(A3)	PagRead
	DC.L	DRAM-$2000	; -$3C(A3)
	DC.L	CRAM-$4000	; -$38(A3)
	DC.L	ERAM-$6000	; -$34(A3)
	DC.L	0		; -$30(A3)
	DC.L	0		; -$2C(A3)
	DC.L	0		; -$28(A3)
	DC.L	0		; -$24(A3)

	DC.L	IRAM		; -$20(A3)	PagWrite
	DC.L	DRAM-$2000	; -$1C(A3)
	DC.L	CRAM-$4000	; -$18(A3)
	DC.L	ERAM-$6000	; -$14(A3)
	DC.L	EROM-$8000	; -$10(A3)
	DC.L	EROM-$A000	; -$0C(A3)
	DC.L	EROM-$C000	; -$08(A3)
	DC.L	EROM-$E000	; -$04(A3)
Regs:
	DC.B	0	;     (A3)	VFF
	DC.B	0	;   $1(A3)	BFF
	DC.B	0	;   $2(A3)	DFF
	DC.B	0	;   $3(A3)	IFF
	DC.W	0	;   $4(A3)	DirVRAM
	DC.B	0	;   $6(A3)	DirSRAM
	DC.B	0	;   $7(A3)	NesIntR
	DC.B	0	;   $8(A3)	ModoTraza
	DC.B	0	;   $9(A3)	LeeVROMSkip
	DC.B	0	;   $A(A3)	JoyCnt
	DC.B	0	;   $B(A3)	JoyX
	DC.B	0	;   $C(A3)	CoorS
	DC.B	0	;   $D(A3)	CoorX
	DC.B	0	;   $E(A3)	CoorY
	DC.B	0	;   $F(A3)	SalirMenu
	DC.B	0	;  $10(A3)	KeyX
	DC.B	0	;  $11(A3)	TipoIntOr
	DC.B	0	;  $12(A3)
	DC.B	0	;  $13(A3)
	DC.L	0	;  $14(A3)	MapROMBase
	DC.W	0	;  $18(A3)	MaskROM
	DC.W	0	;  $1A(A3)	MaskROM2
	DC.W	0	;  $1C(A3)	MaskVROM
	DC.W	0	;  $1E(A3)

	DS.B	8	;  $20(A3)	TabMap

	DC.W	0	;  $28(A3)


FRegs:	DS.B	$7C-(FRegs-Regs)

;;	DS.B	$400	;  $7C(A3)	TAB_Flags
	DC.L	0	; $47C(A3)
	DS.B	$380	; $480(A3)

;	 -----------------------------------------------------------
;	**  Tablas de instrucciones del 6510 Simulado por MC68020  **
;	 -----------------------------------------------------------
Instr:
	DC.L	BRKnn,ORAix,SXYnn,ST0nn,TSBzp,ORAzp,ASLzp,RMB0	; 00
	DC.L	PHPnn,ORAin,ASLra,JAMnn,TSBab,ORAab,ASLab,BBR0	; 08
	DC.L	BPLnn,ORAiy,ORAim,ST1nn,TRBzp,ORAzx,ASLzx,RMB1	; 10
	DC.L	CLCnn,ORAay,INCra,JAMnn,TRBab,ORAax,ASLax,BBR1	; 18
	DC.L	JSRnn,ANDix,SAXnn,ST2nn,BITzp,ANDzp,ROLzp,RMB2	; 20
	DC.L	PLPnn,ANDin,ROLra,JAMnn,BITab,ANDab,ROLab,BBR2	; 28
	DC.L	BMInn,ANDiy,ANDim,JAMnn,BITzx,ANDzx,ROLzx,RMB3	; 30
	DC.L	SECnn,ANDay,DECra,JAMnn,BITax,ANDax,ROLax,BBR3	; 38
	DC.L	RTInn,EORix,SAYnn,TMAnn,BSRnn,EORzp,LSRzp,RMB4	; 40
	DC.L	PHAnn,EORin,LSRra,JAMnn,JMPab,EORab,LSRab,BBR4	; 48
	DC.L	BVCnn,EORiy,EORim,TAMnn,CSLnn,EORzx,LSRzx,RMB5	; 50
	DC.L	CLInn,EORay,PHYnn,JAMnn,JAMnn,EORax,LSRax,BBR5	; 58
	DC.L	RTSnn,ADCix,CLAnn,JAMnn,STZzp,ADCzp,RORzp,RMB6	; 60
	DC.L	PLAnn,ADCin,RORra,JAMnn,JMPid,ADCab,RORab,BBR6	; 68
	DC.L	BVSnn,ADCiy,ADCim,TIInn,STZzx,ADCzx,RORzx,RMB7	; 70
	DC.L	SEInn,ADCay,PLYnn,JAMnn,JMPax,ADCax,RORax,BBR7	; 78
	DC.L	BRAnn,STAix,CLXnn,TSTzp,STYzp,STAzp,STXzp,SMB0	; 80
	DC.L	DEYnn,BITin,TXAnn,JAMnn,STYab,STAab,STXab,BBS0	; 88
	DC.L	BCCnn,STAiy,STAim,TSTab,STYzx,STAzx,STXzy,SMB1	; 90
	DC.L	TYAnn,STAay,TXSnn,JAMnn,STZab,STAax,STZax,BBS1	; 98	(9C,9E)
	DC.L	LDYin,LDAix,LDXin,TSTzx,LDYzp,LDAzp,LDXzp,SMB2	; A0
	DC.L	TAYnn,LDAin,TAXnn,JAMnn,LDYab,LDAab,LDXab,BBS2	; A8
	DC.L	BCSnn,LDAiy,LDAim,TSTax,LDYzx,LDAzx,LDXzy,SMB3	; B0
	DC.L	CLVnn,LDAay,TSXnn,JAMnn,LDYax,LDAax,LDXay,BBS3	; B8
	DC.L	CPYin,CMPix,CLYnn,TDDnn,CPYzp,CMPzp,DECzp,SMB4	; C0
	DC.L	INYnn,CMPin,DEXnn,JAMnn,CPYab,CMPab,DECab,BBS4	; C8
	DC.L	BNEnn,CMPiy,CMPim,TINnn,CSHnn,CMPzx,DECzx,SMB5	; D0
	DC.L	CLDnn,CMPay,PHXnn,JAMnn,JAMnn,CMPax,DECax,BBS5	; D8
	DC.L	CPXin,SBCix,JAMnn,TIAnn,CPXzp,SBCzp,INCzp,SMB6	; E0
	DC.L	INXnn,SBCin,NOPnn,JAMnn,CPXab,SBCab,INCab,BBS6	; E8
	DC.L	BEQnn,SBCiy,SBCim,TAInn,SETnn,SBCzx,INCzx,SMB7	; F0
	DC.L	SEDnn,SBCay,PLXnn,JAMnn,JAMnn,SBCax,INCax,BBS7	; F8









*************************************************************************
*************************************************************************
;				C O P I A
*************************************************************************
	DC.L	BRKnn,ORAix,JAMnn,JAMnn,JAMnn,ORAzp,ASLzp,JAMnn	; 00
	DC.L	BPLnn,ORAiy,JAMnn,JAMnn,JAMnn,ORAzx,ASLzx,JAMnn	; 10
	DC.L	JSRnn,ANDix,JAMnn,JAMnn,BITzp,ANDzp,ROLzp,JAMnn	; 20
	DC.L	BMInn,ANDiy,JAMnn,JAMnn,JAMnn,ANDzx,ROLzx,JAMnn	; 30
	DC.L	RTInn,EORix,JAMnn,JAMnn,JAMnn,EORzp,LSRzp,JAMnn	; 40
	DC.L	BVCnn,EORiy,JAMnn,JAMnn,JAMnn,EORzx,LSRzx,JAMnn	; 50
	DC.L	RTSnn,ADCix,JAMnn,JAMnn,JAMnn,ADCzp,RORzp,JAMnn	; 60
	DC.L	BVSnn,ADCiy,JAMnn,JAMnn,JAMnn,ADCzx,RORzx,JAMnn	; 70
	DC.L	JAMnn,STAix,JAMnn,JAMnn,STYzp,STAzp,STXzp,JAMnn	; 80
	DC.L	BCCnn,STAiy,JAMnn,JAMnn,STYzx,STAzx,STXzy,JAMnn	; 90
	DC.L	LDYin,LDAix,LDXin,JAMnn,LDYzp,LDAzp,LDXzp,JAMnn	; A0
	DC.L	BCSnn,LDAiy,JAMnn,JAMnn,LDYzx,LDAzx,LDXzy,JAMnn	; B0
	DC.L	CPYin,CMPix,JAMnn,JAMnn,CPYzp,CMPzp,DECzp,JAMnn	; C0
	DC.L	BNEnn,CMPiy,JAMnn,JAMnn,JAMnn,CMPzx,DECzx,JAMnn	; D0
	DC.L	CPXin,SBCix,JAMnn,JAMnn,CPXzp,SBCzp,INCzp,JAMnn	; E0
	DC.L	BEQnn,SBCiy,JAMnn,JAMnn,JAMnn,SBCzx,INCzx,JAMnn	; F0
*************************************************************************
	DC.L	PHPnn,ORAin,ASLra,JAMnn,JAMnn,ORAab,ASLab,JAMnn	; 08
	DC.L	CLCnn,ORAay,JAMnn,JAMnn,JAMnn,ORAax,ASLax,JAMnn	; 18
	DC.L	PLPnn,ANDin,ROLra,JAMnn,BITab,ANDab,ROLab,JAMnn	; 28
	DC.L	SECnn,ANDay,JAMnn,JAMnn,JAMnn,ANDax,ROLax,JAMnn	; 38
	DC.L	PHAnn,EORin,LSRra,JAMnn,JMPab,EORab,LSRab,JAMnn	; 48
	DC.L	CLInn,EORay,JAMnn,JAMnn,JAMnn,EORax,LSRax,JAMnn	; 58
	DC.L	PLAnn,ADCin,RORra,JAMnn,JMPid,ADCab,RORab,JAMnn	; 68
	DC.L	SEInn,ADCay,JAMnn,JAMnn,JAMnn,ADCax,RORax,JAMnn	; 78
	DC.L	DEYnn,JAMnn,TXAnn,JAMnn,STYab,STAab,STXab,JAMnn	; 88
	DC.L	TYAnn,STAay,TXSnn,JAMnn,JAMnn,STAax,JAMnn,JAMnn	; 98	(9C,9E)
	DC.L	TAYnn,LDAin,TAXnn,JAMnn,LDYab,LDAab,LDXab,JAMnn	; A8
	DC.L	CLVnn,LDAay,TSXnn,JAMnn,LDYax,LDAax,LDXay,JAMnn	; B8
	DC.L	INYnn,CMPin,DEXnn,JAMnn,CPYab,CMPab,DECab,JAMnn	; C8
	DC.L	CLDnn,CMPay,JAMnn,JAMnn,JAMnn,CMPax,DECax,JAMnn	; D8
	DC.L	INXnn,SBCin,NOPnn,JAMnn,CPXab,SBCab,INCab,JAMnn	; E8
	DC.L	SEDnn,SBCay,JAMnn,JAMnn,JAMnn,SBCax,INCax,JAMnn	; F8
*************************************************************************
*************************************************************************



	DS.B	512	; $1000(A3)	TabRedef

;   ---------------------------------------------------------------------
	DS.L	20
;   ---------------------------------------------------------------------




; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

	DS.L	20	; Seguridad

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-



;;	-=-=-=-==-=-=-=-=-=-=-
	CNOP	0,8
DameVBR:MOVEC	VBR,A0
	MOVE.L	A0,VBRPun
	NOP
	RTE
	CNOP	0,8
CongelaAMIGA:
;;	-=-=-=-==-=-=-=-=-=-=-
	LEA	DameVBR(PC),A5
	MOVE.L	$4.W,A6
	JSR	-$1E(A6)
;;	-=-=-=-==-=-=-=-=-=-=-
	MOVE.L	$4.W,A5
	MOVE.L	$9C(A5),A5
	MOVE.L	$26(A5),WBCopp
;;	-=-=-=-==-=-=-=-=-=-=-
	LEA	DirPlanos,A0
	BSR	CreaPlanos
	LEA	DirColores,A0
	BSR	CreaColores
	LEA	DirSprites,A0
	BSR	CreaSprites
	LEA	DirSaltos,A0
	BSR	CreaSaltos
;;	-=-=-=-==-=-=-=-=-=-=-
	LEA	$DFF000,A6
	MOVE.W	#$7FFF,D7
	MOVE.W	$1C(A6),Intena
	MOVE.W	D7,$9A(A6)
	MOVE.W	$1E(A6),Intreq
	MOVE.W	D7,$9C(A6)
	MOVE.W	$02(A6),DMACon
	BTST	#6,DMACon+1
	BEQ.S	NoBliOn
EspBli:	NOP
	NOP
	BTST	#6,2(A6)
	BNE.S	EspBli
	NOP
	NOP
NoBliOn:MOVE.W	D7,$96(A6)
	NOP
	NOP
;;	-=-=-=-==-=-=-=-=-=-=-
	MOVE.L	#MasterCopper,$80(A6)
	NOP
	MOVE.L	#Copper,$84(A6)
	NOP
	MOVE.W	#0,$88(A6)
	NOP
	NOP
	MOVE.W	#$0020,$09C(A6)
EspIntV:NOP
	NOP
	NOP
	NOP
	BTST	#$05,$01F(A6)
	BEQ.S	EspIntV
	NOP
	MOVE.W	#$83A0,$096(A6)	; ---,BLTPriDMA,BPL;COP,BLT,SPR,DSK;AUD3-0
;;	-=-=-=-==-=-=-=-=-=-=-
	SF	$BFEC01
;;	-=-=-=-==-=-=-=-=-=-=-
	MOVE.L	VBRPun,A0
	MOVE.L	$24(A0),Traza
	MOVE.L	$6C(A0),VBlank
	MOVE.L	$84(A0),Trap1
	MOVE.L	$88(A0),Trap2
;;	-=-=-=-==-=-=-=-=-=-=-
	MOVE.L	#DirTraza,$24(A0)
	MOVE.L	#InInter,$6C(A0)
	MOVE.L	#IniInsBuc,$84(A0)
	MOVE.L	#FinInsBuc,$88(A0)
;;	-=-=-=-==-=-=-=-=-=-=-
	LEA	$BFE001,A6
	BFEXTU	(A6){6:1},D7		; Filtro.
	MOVE.B	D7,Filtro
	BSET	#1,$BFE001		; Filtro OFF
;;	-=-=-=-==-=-=-=-=-=-=-
	RTS

; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;

SPDesbor:
	ST	DesborPILA			; *\*\*  POR QUITAR  */*/*

Salir:
	MOVEM.L	D0-D7/A0-A7,DEBUG

	MOVE.L	PILA,SP


DescongelaAMIGA:
;;	-=-=-=-==-=-=-=-=-=-=-
	MOVE.B	Filtro,D7
	LEA	$BFE001,A6
	BFINS	D7,(A6){6:1}		; Filtro.
;;	-=-=-=-==-=-=-=-=-=-=-
	MOVE.L	VBRPun,A0
	MOVE.L	Traza,$24(A0)
	MOVE.L	VBlank,$6C(A0)
	MOVE.L	Trap1,$84(A0)
	MOVE.L	Trap2,$88(A0)
;;	-=-=-=-==-=-=-=-=-=-=-
	LEA	$DFF000,A6
	MOVE.W	#$7FFF,D7
	MOVE.W	D7,$09A(A6)
	MOVE.W	#$8000,D6
	OR.W	D6,DMACon
	MOVE.W	D7,$096(A6)
	OR.W	D6,Intena
	OR.W	D6,Intreq
	MOVE.W	D7,$09C(A6)
	NOP
;;	-=-=-=-==-=-=-=-=-=-=-
	CLR.W	$180(A6)
	MOVE.L	WBCopp,$80(A6)
	NOP
	MOVE.L	WBCopp,$84(A6)
	NOP
	MOVE.W	#0,$88(A6)
	NOP
;;	-=-=-=-==-=-=-=-=-=-=-
	MOVE.W	#$8280,$096(A6)
	NOP
	NOP
	MOVE.W	#$0020,$09C(A6)
EspIntV0:NOP
	NOP
	NOP
	NOP
	BTST	#$05,$01F(A6)
	BEQ.S	EspIntV0
	NOP
	NOP
	NOP
	NOP
	MOVE.W	#$0020,$09C(A6)
EspIntV1:NOP
	NOP
	NOP
	NOP
	BTST	#$05,$01F(A6)
	BEQ.S	EspIntV1
	NOP
	MOVE.W	D7,$09C(A6)
	NOP
;;	-=-=-=-==-=-=-=-=-=-=-
	MOVE.W	DMACON,$096(A6)
	NOP
	NOP
	MOVE.W	INTREQ,$09C(A6)
	NOP
	NOP
	MOVE.W	INTENA,$09A(A6)
	NOP
	NOP
;;	-=-=-=-==-=-=-=-=-=-=-
	RTS
; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;


; -------------------------------------> Interrupción de Vblank la 1ª vez.
	CNOP	0,8
InInter:
	MOVE.L	DirContinua,2(SP)
	MOVE.B	DirFlags+1,1(SP)
	MOVE.L	#Inter,([VBRPun],$6C.W)
	BRA.S	INTER
; -------------------------------------<
	CNOP	0,8
INTER:
	BTST	#5,$DFF01F
	BNE	ExeTraza

;-;	BTST	#0,$DFF01F
;-;	BNE	ExeTraza


	MOVEM.L	D0-D7/A0-A6,-(SP)

	LEA	REGS,A3
	TST.B	SalirMenu(A3)
	BEQ.S	NoSalir
	SF	SalirMenu(A3)

	MOVEM.L	(SP)+,D0-D7/A0-A6

	MOVE.L	2(SP),DirContinua
	MOVE.W	(SP),DirFlags
	MOVE.L	#Salir,2(SP)
	CLR.W	(SP)
	MOVE.W	#$0070,$DFF09C
	NOP
	RTE
NoSalir:


	BSR	PrintGFX


	BSR	TocaPSG


	BSR	PonePaleta

	JSR	([JoyControlRut.w,PC])
	BSR	MiraTeclado

	LEA	Regs(PC),A3
	MOVE.B	KeyX(A3),D1
	OR.B	D1,JoyX(A3)

;	MOVE.W	#$A00,$DFF180

	MOVEM.L	(SP)+,D0-D7/A0-A6
	MOVE.W	#$0010,$DFF09C
	NOP
	RTE


	CNOP	0,8
JoyControlRut:	DC.L	LeeJoyStick


; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;

	CNOP	0,8
ExeTraza:

	MOVE.W	#$0070,$DFF09C

; -------------------------------------> Espera final de instrucción de Z-80A
	MOVE.W	#$0030,$DFF09A		; Todo OFF
	ST	ModoTraza(A3)
	AND.B	#$3F,(SP)		; <=-- MODO TRAZA ON. (Cuidado) ****
Mtr0:	OR.B	#$40,(SP)		; <=-- MODO TRAZA ON. (Cuidado) ****
	BRA.S	DirTraza
;	---------------
	CNOP	0,8
DirTraza:
	CMP.W	#"GG",([2.W,SP],-2.W)
	BEQ.S	FinIns
	NOP
	RTE
;	----------------
	CNOP	0,8
FinIns:
;;;	MOVE.W	#$2700,SR
	SF	ModoTraza(A3)
	AND.B	#$3F,(SP)		; <=-- MODO TRAZA OFF. (Cuidado) ****
; -------------------------------------<

	MOVE.B	#$20,NesIntR(A3)

	BTST	#1,IOAM+$1402
	BNE.S	NoInter

	BTST	#3,VDPREG+(5*2)		; (Están invertidos)
	BEQ.S	NoInter

	TST.B	IFF(A3)			; ¿Modo DI?
	BNE.S	NoInter

; -------------------------------------> Arranca Interrupción de MSX (cont.)
	MOVE.L	#RetuInter,2(SP)
	NOP
	RTE
;	----------------
NoInter:
	MOVE.W	#$8030,$DFF09A		; Todo ON
	NOP
	RTE
;	----------------
	CNOP	0,8
RetuInter:
	SUBQ.W	#1,A5
	SUB.W	(A2),A5
	MOVE.W	A5,D2
;	----------------
	ROR.W	#8,D2
	SUBQ.B	#3,D6
	BCS	SPDESBOR		; ** DerborSP **
	MOVE.W	D2,-(A6)
;	-----------------------------------
	MOVE.B	D3,D1
	AND.W	#$000D,D1
	MOVE.L	A3,A4
	AND.L	#$02402090,(A4)+
	OR.B	-(A4),D1
	OR.B	-(A4),D1
	OR.B	-(A4),D1
	OR.B	-(A4),D1
	MOVE.B	(Flags_Push.w,PC,D1.W),-(A6)
;	-----------------------------------
;;;	MOVE.B	D3,-(A6)

	ST	IFF(A3)			; ( DI ) Interrupciones OFF.

	MOVEQ	#0,D1
	MOVE.W	#$0100,D2

	MOVE.W	#$FFF8,D1
	CalPag	D1,A4
	MOVE.W	(A4),D1
	ROR.W	#8,D1
	CalPag	D1,A5
	LEA	Restas(A3,D1.W*8),A2
;	----------------
	MOVE.W	#$8030,$DFF09A		; Todo ON
	OTRA2

;	----------------
	CNOP	0,8
IniInsBuc:
	AND.B	#$3F,(SP)		; <=-- Modo Traza Off. (Cuidado) ****
	NOP
	RTE
	CNOP	0,8
FinInsBuc:
Mtr1:	OR.B	#$40,(SP)		; <=-- Modo Traza On.  (Cuidado) ****
	NOP
	RTE
;	----------------


; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-



; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
	CNOP	0,8
TocaPSG:
	LEA	$DFF000,A6

TocaCh:	MACRO
	MOVE.W	PSGBuffer+\1+2,D1
	ROR.W	#8,D1
	AND.W	#$0FFF,D1
	LSL.W	#4,D1
	BNE.S	\@NoFreqCer0
	MOVEQ	#1,D1
\@NoFreqCer0:
	MOVE.W	D1,\2+$6(A6)	; Freq

	MOVEQ	#0,D1
	MOVE.B	PSGBuffer+\1+4,D1
	BPL.S	\@NoToca

	AND.W	#$001F,D1
	LSL.W	#1,D1
\@NoToca:
	MOVE.W	D1,\2+$8(A6)	; Vol
	ENDM

	TocaCh	00,$A0
	TocaCh	08,$B0
	TocaCh	16,$C0
	TocaCh	24,$D0

	RTS


; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


	CNOP	0,8
PrintGFX:
	LEA	PantGfx+(32*256*0),A0
	LEA	PantGfx+(32*256*2),A1
	LEA	PantGfx+(32*256*4),A3
	LEA	VRAM,A4
	LEA	VRAM,A5
	LEA	PantAnt0(PC),A6

	MOVE.B	(VDPReg+(9*2)+0),D3
	LSR.B	#4,D3
	AND.W	#$0003,D3
	MOVE.W	(GfxSumas.W,PC,D3.W*2),D3

	MOVE.W	#30-1,D2
PrtGfxBuc1:
	MOVE.W	#32-1,D1
PrtGfxBuc0:
	CMP.W	(A5)+,(A6)+
	BNE.S	PrtGfxRut

	ADDQ.W	#1,A0
	ADDQ.W	#1,A1

	ADDQ.W	#1,A3

	DBF	D1,PrtGfxBuc0

	ADD.W	D3,A5

	ADD.L	#(32*7),A0
	ADD.L	#(32*7),A1

	ADD.L	#(32*7),A3

	DBF	D2,PrtGfxBuc1
	RTS

	CNOP	0,8
PrtGfxRut:
	MOVE.W	-2(A5),-(A6)
	MOVEQ	#0,D0
	MOVE.W	(A6)+,D0

	MOVE.W	D0,D7
	LSR.B	#4,D7
	AND.W	#$000F,D7
	MOVE.L	(TabGfx256.W,PC,D7.W*4),D7

	ROR.W	#8,D0
	LSL.W	#4,D0
	LEA	(A4,D0.L*2),A2

	MOVE.W	#8-1,D0
PrtGfxBuc:
	MOVE.B	(A2)+,(A0)
	MOVE.B	(A2)+,(32*256*1)(A0)

	MOVE.B	16-2(A2),(A1)
	MOVE.B	17-2(A2),(32*256*1)(A1)

	MOVE.B	D7,(A3)
	ROR.L	#8,D7
	MOVE.B	D7,(32*256*1)(A3)
	ROR.L	#8,D7
	MOVE.B	D7,(32*256*2)(A3)
	ROR.L	#8,D7
	MOVE.B	D7,(32*256*3)(A3)
	ROR.L	#8,D7

	ADD.L	#(32),A0
	ADD.L	#(32),A1

	ADD.L	#(32),A3

	DBF	D0,PrtGfxBuc

	ADD.W	#16,A2

	SUB.L	#(32*8)-1,A0
	SUB.L	#(32*8)-1,A1

	SUB.L	#(32*8)-1,A3

	DBF	D1,PrtGfxBuc0

	ADD.W	D3,A5

	ADD.L	#(32*7),A0
	ADD.L	#(32*7),A1

	ADD.L	#(32*7),A3

	DBF	D2,PrtGfxBuc1
	RTS

	CNOP	0,8
TabGfx256:
	DC.L	$00000000
	DC.L	$000000FF
	DC.L	$0000FF00
	DC.L	$0000FFFF
	DC.L	$00FF0000
	DC.L	$00FF00FF
	DC.L	$00FFFF00
	DC.L	$00FFFFFF
	DC.L	$FF000000
	DC.L	$FF0000FF
	DC.L	$FF00FF00
	DC.L	$FF00FFFF
	DC.L	$FFFF0000
	DC.L	$FFFF00FF
	DC.L	$FFFFFF00
	DC.L	$FFFFFFFF

	CNOP	0,8
GfxSumas:DC.W	64-64,128-64,256-64,256-64

	CNOP	0,8
PantAnt0:	DCB.W	32*32,$1234

; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

	CNOP	0,8
PonePaleta:
	LEA	VDPPal,A0
	LEA	COLOR+2,A1
	MOVE.W	#(8)-1,D4
PonPalBuc0:
	MOVE.W	#(32)-1,D0
PonPalBuc:
	MOVE.W	(A0)+,D1
	ROR.W	#8,D1

	MOVE.W	D1,D2
	MOVE.W	D1,D3

	LSR.W	#1,D3		; G
	AND.W	#$00E0,D3

	LSL.W	#6,D2		; R
	AND.W	#$0E00,D2

	LSL.W	#1,D1		; B
	AND.W	#$000E,D1

	OR.W	D2,D1
	OR.W	D3,D1
	MOVE.W	D1,(A1)+
	ADDQ.W	#2,A1
	DBF	D0,PonPalBuc
	ADD.W	#4,A1
	DBF	D4,PonPalBuc0
	RTS

; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


; ------------------------------------------------ ;
; ------------------------------------------------ ;

LeeTecla:MACRO
	CMP.B	#\2,D0
	BNE.S	Lete\@
	BCLR	#\1,\3(A3)
	RTS
Lete\@:
	ENDM

PonTecla:MACRO
	CMP.B	#\2,D0
	BNE.S	PoTe\@
	BSET	#\1,\3(A3)
	RTS
PoTe\@:
	ENDM

	CNOP	0,8
MiraTeclado:
	MOVEQ	#0,D0
	MOVE.B	$BFEC01,D0
	BNE.S	Pulsacion
	RTS
Pulsacion:
	NOP
	SF	$BFEC01
	NOP
	NOP
	MOVE.W	#4,D2
	OR.B	#$40,$BFEE01		; CIAA Libre
TRETARDO:
	MOVE.B	$DFF006,D1
TRETARDOB:
	CMP.B	$DFF006,D1
	BEQ.S	TRETARDOB
	DBF	D2,TRETARDO
	AND.B	#$BF,$BFEE01		; CIAA Libre

	LEA	REGS,A3

	NOT.B	D0
	LSR.B	#$1,D0
	BCS	TeclaSoltada

	PonTecla 1,$4E,KeyX		; Derecha
	PonTecla 3,$4F,KeyX		; Izquierda
	PonTecla 0,$4C,KeyX		; Arriba
	PonTecla 2,$4D,KeyX		; Abajo

	PonTecla 5,$66,KeyX		; Botón A	(Amiga Izq)
	PonTecla 4,$64,KeyX		; Botón B	(Alt Izq)
	PonTecla 6,$46,KeyX		; Select	(Del)
	PonTecla 7,$44,KeyX		; Start		(Enter)
	PonTecla 7,$5F,KeyX		; Start		(Help)

	PonTecla 5,$60,KeyX		; Botón A	(Shift Izq)
	PonTecla 4,$40,KeyX		; Botón B	(Space)

	CMP.B	#$45,D0			; Salir		(Esc)
	BNE.S	NoEsESC
	ST	SalirMenu(A3)
	RTS
NoEsESC:
	CMP.B	#$5F,D0			; Salir		(Help)
	BNE.S	NoEsESC2
	ST	SalirMenu(A3)
NoEsESC2:
	RTS
	CNOP	0,4
TeclaSoltada:
	LeeTecla 1,$4E,KeyX		; Derecha
	LeeTecla 3,$4F,KeyX		; Izquierda
	LeeTecla 0,$4C,KeyX		; Arriba
	LeeTecla 2,$4D,KeyX		; Abajo

	LeeTecla 5,$66,KeyX		; Botón A	(Amiga Izq)
	LeeTecla 4,$64,KeyX		; Botón B	(Alt Izq)
	LeeTecla 6,$46,KeyX		; Select	(Del)
	LeeTecla 7,$44,KeyX		; Start		(Enter)
	LeeTecla 7,$5F,KeyX		; Start		(Help)

	LeeTecla 5,$60,KeyX		; Botón A	(Shift Izq)
	LeeTecla 4,$40,KeyX		; Botón B	(Space)

	RTS

; ------------------------------------------------ ;
; ------------------------------------------------ ;

;	 ---------------------------
;	- Lee puerto 0 del JoyStick -
;	 ---------------------------

	CNOP	0,8
LeeJoyStick:
LeeJoypad:
	LEA	REGS,A3
	MOVE.W	$DFF00C,D0		; Puerto B.
	BSR	LEEJOY

	SF	D1
	BFINS	D2,D1{24:1}
	LSR.B	#1,D2
	BFINS	D2,D1{25:1}
	LSR.B	#1,D2
	BFINS	D2,D1{27:1}
	LSR.B	#1,D2
	BFINS	D2,D1{26:1}

	BTST	#7,$BFE001		; Botón A	(Fire #1)
	BNE.S	NOB1_E
	BSET	#0,D1
NOB1_E:
	MOVE.W	#$FF00,$DFF034		; Botón B	(Fire #2)
	NOP
	NOP
	BTST	#6,$DFF016
	BNE.S	NOB2_E
	BSET	#1,D1
NOB2_E:

	BTST	#6,$BFE001		; Select	(Mouse #1)
	BNE.S	NoPulStart
	BSET	#2,D1
NoPulStart:
	MOVE.W	#$FF00,$DFF034		; Start		(Fire #3)
	NOP
	NOP
	BTST	#4,$DFF016
	BNE.S	NOB2C_E
	BSET	#3,D1
NOB2C_E:
	MOVE.W	#$FF00,$DFF034		; Start		(Mouse #2)
	NOP
	NOP
	BTST	#2,$DFF016
	BNE.S	NOB2H_E
	BSET	#3,D1
NOB2H_E:

	MOVE.B	D1,JoyX(A3)
	RTS
; -------------------------------
;	Lectura del Joystick.

;	Resultado en D2.b de la siguiente forma:
;	Bit 0=Derecha.
;	Bit 1=Izquierda.
;	Bit 2=Arriba.
;	Bit 3=Abajo.

	CNOP	0,8
LEEJOY:
	MOVE.W	D0,D1
	LSR.B	#1,D1
	AND.B	#$01,D1
	MOVE.B	D1,D2		; Derecha.

	LSR.W	#8,D1
	AND.B	#$02,D1
	OR.B	D1,D2		; Izquierda.

	MOVE.W	D0,D1
	LSR.W	#1,D1
	EOR.W	D1,D0

	MOVE.W	D0,D1
	LSL.B	#3,D1
	AND.B	#$08,D1
	OR.B	D1,D2		; Abajo.

	LSR.W	#6,D0
	AND.B	#$04,D0
	OR.B	D0,D2		; Arriba.
	RTS

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

	CNOP	0,8
LeeTeclado:
	LEA	REGS,A3
	SF	JoyX(A3)
	RTS

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

;	( U D L R ) , ( R S I II )

CD32M:	MACRO
	LSR.B	#1,D0
	BCC.S	\@NoPuldat
	BSET	#\1,\2
\@NoPuldat:
	ENDM

	CNOP	0,8
LeeCD32Joypad:
	LEA	REGS,A3
	MOVE.W	$DFF00C,D0		; Puerto B.
	BSR.S	LEEJOY

	SF	D3
	BFINS	D2,D3{24:1}
	LSR.B	#1,D2
	BFINS	D2,D3{25:1}
	LSR.B	#1,D2
	BFINS	D2,D3{27:1}
	LSR.B	#1,D2
	BFINS	D2,D3{26:1}

	BSR	ReadCD32
	LSR.B	#2,D0
	SCS	SalirMenu(A3)

	CD32M	1,D3	; Boton B
	CD32M	0,D3	; Boton A
	CD32M	2,D3	; Select
	CD32M	3,D3	; Start
	CD32M	1,D3	; Boton B
	CD32M	0,D3	; Boton A

	MOVE.B	D3,JoyX(A3)

	RTS

;***********************************************************************
;Reads CD 32 Controller
;You must read joystick positions or button in normal way
;BEFORE you call this.
;One VBL MUST have elapsed before repeating this!

; D0=:
CD_PLAY	EQU 1
CD_RWD	EQU 2
CD_FFW	EQU 3
CD_G	EQU 4
CD_Y	EQU 5
CD_R	EQU 6
CD_B	EQU 7

		CNOP	0,8
ReadCD32:
		bset	#7,$bfe201
		bclr	#7,$bfe001
		move.w	#$6f00,$dff034
		moveq.l	#0,d0
		moveq.l	#7,d1
		bra.b	.gamecont4		
.gamecont3:
		tst.b	$bfe001
		tst.b	$bfe001
		tst.b	$bfe001
.gamecont4:
		tst.b	$bfe001
		tst.b	$bfe001
		tst.b	$bfe001
		tst.b	$bfe001
		tst.b	$bfe001
		move.w	$dff016,d2
		bset	#7,$bfe001
		bclr	#7,$bfe001
		btst	#14,d2
		bne.b	.gamecont5
		bset	d1,d0
.gamecont5:
		dbf	d1,.gamecont3
		
		bclr	#7,$bfe201
		move.w	#$ffff,$dff034
		rts
;***********************************************************************
; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-






; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;
; ------------------------------------------------ ;


; -------------------------------------
; **  Rutinas Básicas de 007  v2.27  **
; -------------------------------------

	CNOP	0,4

DP0=$8000	; 00(A0): Direccion Copper.   08(A0): Bytes de 1 Plano.
DP1=$C000	; 04(A0): Direccion Pant.     0C(A0): Bit-Planos. (DP0,1)
CREAPLANOS:
	MOVE.W	#$E0,D3
CRPBUC00:
	TST.L	(A0)
	BEQ	CRPRET
	MOVE.L	(A0)+,A1
	MOVEM.L	(A0)+,D0-D2
	TST.W	D2
	SUB.W	#1,D2
	BPL.S	CRPCON00
	BTST	#$E,D2
	BEQ.S	CRPCON01
	ADD.W	#4,D3
CRPCON01:
	AND.W	#$3FFF,D2
	BSR	HACEPLANOS2
	BRA.S	CREAPLANOS
CRPCON00:
	BSR	HACEPLANOS
	BRA.S	CREAPLANOS
HACEPLANOS:			; A1=COPPER.   D0=Direccion. D1=PLANOSIZE.
	SWAP	D0		; D2=Planos-1. D3=DIRBPLH/L
	MOVE.W	D3,(A1)+
	MOVE.W	D0,(A1)+
	ADD.W	#2,D3
	SWAP	D0
	MOVE.W	D3,(A1)+
	MOVE.W	D0,(A1)+
	ADD.W	#2,D3
	ADD.L	D1,D0
	DBF	D2,HACEPLANOS
CRPRET:	RTS
HACEPLANOS2:			; Igual que antes pero Dual Playfield.
	SWAP	D0
	MOVE.W	D3,(A1)+
	MOVE.W	D0,(A1)+
	ADD.W	#2,D3
	SWAP	D0
	MOVE.W	D3,(A1)+
	MOVE.W	D0,(A1)+
	ADD.W	#2,D3
	ADD.L	D1,D0
	ADD.W	#4,D3
	DBF	D2,HACEPLANOS2
	RTS
CREASALTO:			; A0=COPPER-List.   D0=Direccion
	MOVE.W	D0,$6(A0)
	SWAP	D0
	MOVE.W	D0,$2(A0)
	RTS
;	00(A0): Direccion de Copper.	08(A0): Numero Colores. (DP0,1)
;	04(A0): Direccion de Colores.	(Todos en x.L)
CREACOLORES:
	MOVE.W	#$180,D1
CRCBUC00:
	TST.L	(A0)
	BEQ	CRPRET
	MOVEM.L	(A0)+,A1-A2
	MOVE.L	(A0)+,D0
	SUB.W	#1,D0
	TST.W	D0
	BPL.S	CRCBUC01
	MOVE.W	#$190,D1
	BTST	#$E,D0
	BEQ.S	CRCBUC01A
	MOVE.W	#$1A0,D1
CRCBUC01A:
	AND.W	#$3FFF,D0
CRCBUC01:
	MOVE.W	D1,(A1)+
	MOVE.W	(A2)+,(A1)+
	ADD.W	#$02,D1
	DBF	D0,CRCBUC01
	BRA.S	CREACOLORES	
;	00(A0): Direccion del Copper.	08(A0): Numero Sprit (0-7)
;	04(A0): Direccion GFX Sprit.	(Todos en x.L)
CREASPRITES:
	TST.L	(A0)
	BEQ	CRPRET
	MOVE.W	#$120,D2
	MOVE.L	(A0)+,A1
	MOVEM.L	(A0)+,D0-D1
	LSL.W	#2,D1
	ADD.L	D1,D2	
	MOVE.W	D2,(A1)+
	SWAP	D0
	MOVE.W	D0,(A1)+
	ADD.L	#2,D2
	MOVE.W	D2,(A1)+
	SWAP	D0
	MOVE.W	D0,(A1)+
	BRA.S	CREASPRITES
;	00(A0): Direccion del Copper.	08(A0): Dir. Salto.
CREASALTOS:
	TST.L	(A0)
	BEQ	CRPRET
	MOVE.L	(A0)+,A1
	MOVE.L	(A0)+,D0
	MOVE.W	D0,$6(A1)
	SWAP	D0
	MOVE.W	D0,$2(A1)
	BRA.S	CREASALTOS	
RETARDO:			; D0=Retardo.
	MOVE.W	D0,-(SP)
	MOVE.B	$DFF006,D0
RETARDOB:
	CMP.B	$DFF006,D0
	BEQ.S	RETARDOB
	MOVE.W	(SP)+,D0
	DBF	D0,RETARDO
	RTS
; -----**************()**************-----

	CNOP	0,4
DIRPLANOS:
	DC.L	PLANO,PantGfx,(32*256),8
	DC.L	0
DIRCOLORES:
;;	DC.L	COLOR0,NESPaleta,16
;;	DC.L	COLOR1,NESPaleta,16+DP1
	DC.L	0
DIRSPRITES:
	DC.L	DIRSPRIT0,NoSPRIT,0
	DC.L	DIRSPRIT1,NoSPRIT,1
	DC.L	DIRSPRIT2,NoSPRIT,2
	DC.L	DIRSPRIT3,NoSPRIT,3
	DC.L	DIRSPRIT4,NoSPRIT,4
	DC.L	DIRSPRIT5,NoSPRIT,5
	DC.L	DIRSPRIT6,NoSPRIT,6
	DC.L	DIRSPRIT7,NoSPRIT,7
	DC.L	0
DIRSALTOS:
	DC.L	0


	CNOP	0,8
VBlank:		DC.L	0
Traza:		DC.L	0
Trap1:		DC.L	0
Trap2:		DC.L	0
WBCopp:		DC.L	0
VBRPun:		DC.L	0
Debug:		DS.L	16
DMACon:		DC.W	0
Intena:		DC.W	0
Intreq:		DC.W	0
Filtro:		DC.B	0,0
DirContinua:	DC.L	Bucle
DirFlags:	DC.W	0
INTERDAT:	DC.W	0
PILA:		DC.L	0


	CNOP	0,8
rVROM:		DC.L	0
wVROM:		DC.L	0


NESPaleta:
	DC.W	$0200,$00F0,$00AF,$0F0F
	DC.W	$0F34,$03F1,$03DF,$0F8F
	DC.W	$0F50,$0F40,$0250,$0E58
	DC.W	$0F04,$00F0,$040F,$0F0F


; -------------------------------------------------------------
; -------------------------------------------------------------
; -------------------------------------------------------------
; -------------------------------------------------------------
; -------------------------------------------------------------


	CNOP	0,8
PalBase:
	DC.L	$0777000F,$000B042B,$09080A02,$0A100810,$05300070
	DC.L	$00600050,$00450000,$00000000,$0BBB007F,$005F064F
	DC.L	$0D0C0E05,$0F300E51,$0A7000B0,$00A000A4,$00880000
	DC.L	$00000000,$0FFF03BF,$068F097F,$0F7F0F59,$0F750FA4
	DC.L	$0FB00BF1,$05D505F9,$00ED0777,$00000000,$0FFF0AEF
	DC.L	$0BBF0DBF,$0FBF0FAC,$0FBB0FEA,$0FD70DF7,$0BFB0BFD
	DC.L	$00FF0FDF,$00000000,$00000000,$00000000,$00000000
	DC.L	$00000000,$00000000,$00000000,$00000000,$00000000
	DC.L	$00000000,$00000000,$00000000,$00000000,$00000000
	DC.L	$00000000,$00000000,$00000000,$00000000,$00000000
	DC.L	$00000000,$00000000,$00000000,$00000000,$00000000
	DC.L	$00000000,$00000000,$00000000,$00000000,$00000000
	DC.L	$00000000,$00000000,$00000000,$00000000,$06660048
	DC.L	$00080408,$08080804,$08000500,$04400350,$00500050
	DC.L	$00440000,$00000000,$0999008C,$044C080C,$0C0C0C08
	DC.L	$0C220C40,$08800580,$00800383,$00880000,$00000000
	DC.L	$0DDD04CF,$088F0C4F,$0F0F0F4C,$0F550F84,$0CC008C0
	DC.L	$00C005C5,$00CC0333,$00000000,$0FFF08FF,$0CCF0F8F
	DC.L	$0F4F0F8F,$0F880FC8,$0FF40CF4,$04F40AFA,$04FF0999
	DC.L	$00000000,$0999015F,$013F053F,$0F1F0F15,$0F100D10
	DC.L	$0B500070,$00900071,$007B0000,$01110111,$0DDD007F
	DC.L	$005F055F,$0F3F0F35,$0F300F50,$06B000B0,$00D001D5
	DC.L	$00BF0111,$01110111,$0FFF009F,$077F097F,$0F7F0F59
	DC.L	$0F750FB0,$0FB00BF1,$07F305F9,$03DF0777,$01110111
	DC.L	$0FFF07BF,$0BBF0DBF,$0FBF0F9B,$0FB70FB3,$0FB50DF7
	DC.L	$0BFB0BFD,$09DF0FDF,$01110000


; -------------------------------------------------- ;
; -------------------------------------------------- ;
; -------------************************------------- ;
; -------------------------------------------------- ;
; -------------------------------------------------- ;


;	------------------------
	SECTION	Pantallas,DATA_C
;	------------------------

	CNOP	0,8
MASTERCOPPER:
DIRSPRIT0:	DS.W	4
DIRSPRIT1:	DS.W	4
DIRSPRIT2:	DS.W	4
DIRSPRIT3:	DS.W	4
DIRSPRIT4:	DS.W	4
DIRSPRIT5:	DS.W	4
DIRSPRIT6:	DS.W	4
DIRSPRIT7:	DS.W	4
		DC.W	$1201,$FFFE
		DC.W	$1201,$FFFE
;;; MASCOPSAL:	DC.W	$0084,$0000,$0086,$0000
		DC.W	$008A,$0000

	CNOP	0,4
Copper:
	DC.W	$01FC,$000F


Bordes:	DC.W	$008E,$2BA1
	DC.W	$0090,$1BA1

	DC.W	$0092,$0040
	DC.W	$0094,$00B8

	DC.W	$0108,0-8
	DC.W	$010A,0-8

PLANO:	DS.W	8*4

	dc.l	$01060c40
COLOR:
	dc.l	$01800000,$01820004,$01840009,$0186000e
	dc.l	$01880200,$018a0204,$018c0209,$018e020e
	dc.l	$01900400,$01920404,$01940409,$0196040e
	dc.l	$01980600,$019a0604,$019c0609,$019e060e
	dc.l	$01a00800,$01a20804,$01a40809,$01a6080e
	dc.l	$01a80a00,$01aa0a04,$01ac0a09,$01ae0a0e
	dc.l	$01b00c00,$01b20c04,$01b40c09,$01b60c0e
	dc.l	$01b80e00,$01ba0e04,$01bc0e09,$01be0e0e
	dc.l	$01062c40
	dc.l	$01800020,$01820024,$01840029,$0186002e
	dc.l	$01880220,$018a0224,$018c0229,$018e022e
	dc.l	$01900420,$01920424,$01940429,$0196042e
	dc.l	$01980620,$019a0624,$019c0629,$019e062e
	dc.l	$01a00820,$01a20824,$01a40829,$01a6082e
	dc.l	$01a80a20,$01aa0a24,$01ac0a29,$01ae0a2e
	dc.l	$01b00c20,$01b20c24,$01b40c29,$01b60c2e
	dc.l	$01b80e20,$01ba0e24,$01bc0e29,$01be0e2e
	dc.l	$01064c40
	dc.l	$01800040,$01820044,$01840049,$0186004e
	dc.l	$01880240,$018a0244,$018c0249,$018e024e
	dc.l	$01900440,$01920444,$01940449,$0196044e
	dc.l	$01980640,$019a0644,$019c0649,$019e064e
	dc.l	$01a00840,$01a20844,$01a40849,$01a6084e
	dc.l	$01a80a40,$01aa0a44,$01ac0a49,$01ae0a4e
	dc.l	$01b00c40,$01b20c44,$01b40c49,$01b60c4e
	dc.l	$01b80e40,$01ba0e44,$01bc0e49,$01be0e4e
	dc.l	$01066c40
	dc.l	$01800060,$01820064,$01840069,$0186006e
	dc.l	$01880260,$018a0264,$018c0269,$018e026e
	dc.l	$01900460,$01920464,$01940469,$0196046e
	dc.l	$01980660,$019a0664,$019c0669,$019e066e
	dc.l	$01a00860,$01a20864,$01a40869,$01a6086e
	dc.l	$01a80a60,$01aa0a64,$01ac0a69,$01ae0a6e
	dc.l	$01b00c60,$01b20c64,$01b40c69,$01b60c6e
	dc.l	$01b80e60,$01ba0e64,$01bc0e69,$01be0e6e
	dc.l	$01068c40
	dc.l	$01800080,$01820084,$01840089,$0186008e
	dc.l	$01880280,$018a0284,$018c0289,$018e028e
	dc.l	$01900480,$01920484,$01940489,$0196048e
	dc.l	$01980680,$019a0684,$019c0689,$019e068e
	dc.l	$01a00880,$01a20884,$01a40889,$01a6088e
	dc.l	$01a80a80,$01aa0a84,$01ac0a89,$01ae0a8e
	dc.l	$01b00c80,$01b20c84,$01b40c89,$01b60c8e
	dc.l	$01b80e80,$01ba0e84,$01bc0e89,$01be0e8e
	dc.l	$0106ac40
	dc.l	$018000a0,$018200a4,$018400a9,$018600ae
	dc.l	$018802a0,$018a02a4,$018c02a9,$018e02ae
	dc.l	$019004a0,$019204a4,$019404a9,$019604ae
	dc.l	$019806a0,$019a06a4,$019c06a9,$019e06ae
	dc.l	$01a008a0,$01a208a4,$01a408a9,$01a608ae
	dc.l	$01a80aa0,$01aa0aa4,$01ac0aa9,$01ae0aae
	dc.l	$01b00ca0,$01b20ca4,$01b40ca9,$01b60cae
	dc.l	$01b80ea0,$01ba0ea4,$01bc0ea9,$01be0eae
	dc.l	$0106cc40
	dc.l	$018000c0,$018200c4,$018400c9,$018600ce
	dc.l	$018802c0,$018a02c4,$018c02c9,$018e02ce
	dc.l	$019004c0,$019204c4,$019404c9,$019604ce
	dc.l	$019806c0,$019a06c4,$019c06c9,$019e06ce
	dc.l	$01a008c0,$01a208c4,$01a408c9,$01a608ce
	dc.l	$01a80ac0,$01aa0ac4,$01ac0ac9,$01ae0ace
	dc.l	$01b00cc0,$01b20cc4,$01b40cc9,$01b60cce
	dc.l	$01b80ec0,$01ba0ec4,$01bc0ec9,$01be0ece
	dc.l	$0106ec40
	dc.l	$018000e0,$018200e4,$018400e9,$018600ee
	dc.l	$018802e0,$018a02e4,$018c02e9,$018e02ee
	dc.l	$019004e0,$019204e4,$019404e9,$019604ee
	dc.l	$019806e0,$019a06e4,$019c06e9,$019e06ee
	dc.l	$01a008e0,$01a208e4,$01a408e9,$01a608ee
	dc.l	$01a80ae0,$01aa0ae4,$01ac0ae9,$01ae0aee
	dc.l	$01b00ce0,$01b20ce4,$01b40ce9,$01b60cee
	dc.l	$01b80ee0,$01ba0ee4,$01bc0ee9,$01be0eee
	dc.l	$01060c40


;;	DC.W	$2901,$FFFE		; Line Interrupt.
;;	DC.W	$009C,$8011


ScrBits:DC.W	$0102,$8800
	DC.W	$0104,$007F
BpCon3:	DC.W	$0106,$1040
	DC.W	$010C,$0011
	DC.W	$2AB1,$FFFE
	DC.W	$0100,$0010



DesPAL1:DC.W	$FFDF,$FFFE
	DC.W	$0C01,$FFFE
	DC.W	$009C,$0001
	DC.W	$009C,$8010	; Actualiza VDP.


	DC.L	$FFFFFFFE
	DC.L	$FFFFFFFE


DesPAL0:DC.W	$01A0,$FFFE
POSCORY:DC.W	$50C1,$FFFE
PLANO2:	DS.W	4*4




SALTO0:	DC.W	$0084,0,$0086,0

; ------------------------------------------------ ;
	CNOP	0,8
NOSPRIT:DC.L	$FE00FF00,0,0,0,0
; ------------------------------------------------ ;
	DS.B	32*16	; Seguridad!

; <=----------------------------------------------=>
; <=----------------------------------------------=>

	CNOP	0,8
GGLogo:	INCBIN	"Gfx/AmiPC-Engine_Logo.raw"
	CNOP	0,8
GBTeclado:INCBIN	"Gfx/Teclado.raw"
	CNOP	0,8
GBJoyStick:INCBIN	"Gfx/JoyStick.raw"
	CNOP	0,8
GBJoypad:INCBIN	"Gfx/Joypad.raw"
	CNOP	0,8
GBCD32:	INCBIN	"Gfx/CD32.raw"

	CNOP	0,8
BUSYGFX:
	dc.w	$0000,$0000
	dc.w	$0400,$07C0
	dc.w	$0000,$07C0
	dc.w	$0100,$0380
	dc.w	$0000,$07E0
	dc.w	$07C0,$1FF8
	dc.w	$1FF0,$3FEC
	dc.w	$3FF8,$7FDE
	dc.w	$3FF8,$7FBE
	dc.w	$7FFC,$FF7F
	dc.w	$7EFC,$FFFF
	dc.w	$7FFC,$FFFF
	dc.w	$3FF8,$7FFE
	dc.w	$3FF8,$7FFE
	dc.w	$1FF0,$3FFC
	dc.w	$07C0,$1FF8
	dc.w	$0000,$07E0
	dc.w	$0000,$0000
	dc.w	$0000,$0000
	dc.w	$0000,$0000


	CNOP	0,8
Onda:	DC.B	$7F,$80

	CNOP	0,8
Onda0:	DCB.B	16,$7F
	DCB.B	16,$80
Onda1:	DCB.B	16,$7F
	DCB.B	16,$80
Onda2:	DCB.B	16,$7F
	DCB.B	16,$80
Onda3:	DCB.B	16,$7F
	DCB.B	16,$80
Onda4:	DCB.B	16,$7F
	DCB.B	16,$80
Onda5:	DCB.B	16,$7F
	DCB.B	16,$80
Onda6:	DCB.B	16,$7F
	DCB.B	16,$80
Onda7:	DCB.B	16,$7F
	DCB.B	16,$80

	DS.L	50

; <=----------------------------------------------=>
; <=----------------------------------------------=>


; <=----------------------------------------------=>
; <=----------------------------------------------=>



;	------------------------
	SECTION	Graficos,BSS_C
;	------------------------

; =----------------------------------------=> Gfx y Spr en Chip.
		CNOP	0,8
		DS.B	32*16
PantGfx:	DS.L	32*256*4
		DS.B	32*16
PantSpr:	DS.B	32*256*4
		DS.B	32*16
; =----------------------------------------<=



;	------------------------
	SECTION	Tablas,BSS
;	------------------------

; =----------------------------------------=> Tablas de conversión OBJ "Flip X"
	CNOP	0,8
TablaOBJFlip0:	DS.W	$100
TablaOBJFlip1:	DS.W	$100
;TablaDirGFX:	DS.L	$100*2
; =----------------------------------------<=



;	------------------------
	SECTION	Memoria,BSS
;	------------------------


IOAM:	DCB.B	8*1024,$FF
IRAM:	DS.B	8*1024
SRAM:	DS.B	8*1024

EROM:	DS.B	8*1024
LROM:	DCB.B	8*1024,$FF


VRAM:	DS.B	64*1024		; - VRAM

CRAM:	DS.B	8*1024		; - VRAM
DRAM:	DS.B	8*1024		; - VRAM
ERAM:	DS.B	8*1024		; - VRAM

;	------------------------
	SECTION	Juago,Data
;	------------------------

;;Game:	INCBIN	"Cartridges/demo.pce"


