
;	---------------
;	AmiNES Emulator		(Diseño Basado en AmiMSX2 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:AmiNES Emulator v0.12 (31.8.97)",0,0
	DC.B	"By: Juan Antonio Gómez Gálvez.",0,0
	CNOP	0,8
Vamos:

	JSR	InitSistema

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
NF_Menu:INCLUDE	"AmiNES_Menu_v0.12.asm"
	TST.L	D7
	BMI.S	EsContinuar
	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


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

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

	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.B	NESInfoBuf+4,D0
	AND.W	#$003F,D0
	MOVE.W	D0,D1
	SUBQ.W	#1,D0
	MOVE.W	D0,MaskROM(A3)		; Para Páginas de 16Kb
	LSL.B	#1,D1
	SUBQ.W	#1,D1
	MOVE.W	D1,MaskROM2(A3)		; Para Páginas de 8Kb

	MOVE.L	DirCart,MapROMBase(A3)

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

	MOVEQ	#0,D0
	MOVE.B	NESInfoBuf+6,D0
	LSR.B	#4,D0
	MOVE.L	(Mapper.W,PC,D0.W*8),A0
	LEA	PagRuts(PC),A1
	REPT	8
	MOVE.L	(A0)+,(A1)+
	ENDR
	JSR	([Mapper+4.W,PC,D0.W*8])

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


;	-=-=-=-=-=-=-=-=-=-=-=-		; Borra Todas las RAMs.
	LEA	VRAM,A0
	MOVE.W	#($2080/4)-1,D0
	BSR	BorraMem
	LEA	IRAM,A0
	MOVE.W	#($2080/4)-1,D0
	BSR	BorraMem
	LEA	DRAM,A0
	MOVE.W	#($2080/4)-1,D0
	BSR	BorraMem
	LEA	CRAM,A0
	MOVE.W	#($2080/4)-1,D0
	BSR	BorraMem
	LEA	ERAM,A0
	MOVE.W	#($2080/4)-1,D0
	BSR	BorraMem
	LEA	SRAM,A0
	MOVE.W	#(256/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],$FFFC.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
	BEQ.S	\@NoLee
	SUBQ.B	#3,D1
	BCC.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"
	ADD.B	\3,D1
	ENDC
	CalPag	D1,A4
	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
	CalPag	D1,A4
	MOVE.W	(A4),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
	CalPag	D1,A4
	MOVE.W	(A4),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
	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

	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
	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
	CalPag	D1,A4
	MOVE.W	(A4),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
	CalPag	D1,A4
	MOVE.W	(A4),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
	CalPagE	D1,A4

	\1	\3,(A4)
	OtraNZ
	ENDC

	ENDM


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


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


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



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

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

	IDEN
Bucle:	Otra

JAMnn:	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

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

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

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

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

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

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

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

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

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

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

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

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

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

BITab:
	MOVE.B	D3,D2			; Guarda Flag C
	MOVE.W	(A5)+,D1
	ROR.W	#8,D1
	CalPag	D1,A4
	MOVE.B	D7,D1
	AND.B	(A4),D1
	MOVE.B	CCR,D3
	BFINS	D2,D3{31:1}

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

BITzp:
	MOVE.B	D3,D2			; Guarda Flag C
	MOVEQ	#0,D1
	MOVE.B	(A5)+,D1
	CalPag	D1,A4
	MOVE.B	D7,D1
	AND.B	(A4),D1
	MOVE.B	CCR,D3
	BFINS	D2,D3{31:1}

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

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

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	#$FFFE,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


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


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

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

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

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

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

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

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

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

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


	CNOP	0,8
	DC.L	0,0
LeeHard:
	CMP.L	#DRAM+$002,A4
	BEQ.S	L2002

	CMP.L	#DRAM+$004,A4
	BEQ.S	L2004

	CMP.L	#DRAM+$007,A4
	BEQ.S	L2007

	CMP.L	#CRAM+$016,A4
	BEQ.S	L4016

	RTS

L2002:
	MOVE.B	NesIntR(A3),(A4)
	AND.B	#$3F,NesIntR(A3)
	RTS

L2004:
	MOVE.W	D2,-(SP)
	MOVE.B	DirSRAM(A3),D2
	MOVE.B	(SRAM-$100,D2.W),(A4)
	ADDQ.B	#1,DirSRAM(A3)
	MOVE.W	(SP)+,D2
	RTS

L4016:
	MOVEM.W	D1-D2,-(SP)
	MOVE.B	JoyX(A3),D1
	MOVE.B	JoyCnt(A3),D2
	ADDQ.B	#1,JoyCnt(A3)
	AND.B	#$7,D2
	LSR.B	D2,D1
	AND.B	#$01,D1
	MOVE.B	D1,(A4)
	MOVEM.W	(SP)+,D1-D2
	RTS

L2007:
	TAS	LeeVROMSkip(A3)
	BEQ.S	ESTAVEZNO

	MOVE.W	D1,-(SP)
	MOVE.W	DirVRAM(A3),D1
	AND.W	#$3FFF,D1

	BTST	#$D,D1
	BNE.S	lEsVRAM

	MOVE.B	([rVROM],D1.W),(A4)
	BRA.S	lEsVROM
lEsVRAM:
	MOVE.B	(VRAM-$2000.L,D1.W),(A4)
lEsVROM:
	ADDQ.W	#1,D1

;;	BTST	#2,DRAM+0
;;	BEQ.S	MOMAS32
;;	ADD.W	#31,D1
;;MOMAS32:

	MOVE.W	D1,DirVRAM(A3)
	MOVE.W	(SP)+,D1
ESTAVEZNO:
	RTS

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



	CNOP	0,8
PagRuts:
	DC.L	OtraInst	; $0000-$1FFF
	DC.L	EscrPPU		; $2000-$3FFF
	DC.L	EscrHard	; $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


EscrPPU:
	CMP.W	#$2003,D0
	BEQ.S	Escr2003
	CMP.W	#$2004,D0
	BEQ.S	Escr2004
	CMP.W	#$2005,D0
	BEQ.S	Escr2005
	CMP.W	#$2006,D0
	BEQ.S	Escr2006
	CMP.W	#$2007,D0
	BEQ.S	Escr2007
	Otra2


Escr2003:
	MOVE.B	(A4),DirSRAM(A3)
	Otra2

Escr2004:
	MOVE.B	DirSRAM(A3),D2
	MOVE.B	(A4),(SRAM-$100,D2.W)
	ADDQ.B	#1,DirSRAM(A3)
	Otra2

Escr2005:
	NOT.B	CoorS(A3)
	BEQ.S	EsCoorY
	MOVE.B	(A4),CoorX(A3)
	Otra2
EsCoorY:
	MOVE.B	(A4),CoorY(A3)
	Otra2

Escr2006:
	SF	LeeVROMSkip(A3)
	MOVE.W	DirVRAM+1(A3),D1
	MOVE.B	(A4),D1
	MOVE.W	D1,DirVRAM(A3)
	Otra2

Escr2007:
	MOVE.W	DirVRAM(A3),D1
	AND.W	#$3FFF,D1

	BTST	#$D,D1
	BNE.S	eEsVRAM

	MOVE.B	(A4),([wVROM],D1.W)
	BRA.S	eEsVROM
eEsVRAM:
	MOVE.B	(A4),(VRAM-$2000.L,D1.W)
eEsVROM:
	ADDQ.W	#1,D1
	BTST	#2,DRAM+0
	BEQ.S	MOMAS32W
	ADD.W	#31,D1
MOMAS32W:
	MOVE.W	D1,DirVRAM(A3)
	Otra2


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


EscrHard:
	CMP.W	#$4016,D0
	BEQ	Escr4016

	CMP.W	#$4014,D0
	BEQ	Escr4014

	CMP.W	#$4004,D0
	BCS.S	Escr4002
	CMP.W	#$4008,D0
	BCS.S	Escr4006
	CMP.W	#$400C,D0
	BCS	Escr400A
	CMP.W	#$4010,D0
	BCS	Escr400E

	Otra2


Escr4002:
	MOVE.B	CRAM+0,D1
	AND.W	#$000F,D1
	LSL.B	#2,D1
	MOVE.W	D1,SounVol1

	MOVE.B	CRAM+3,D1
	AND.W	#$F8,D1
	LSL.W	#2,D1
	MOVE.W	D1,SounTim1
	Otra2

Escr4006:
	MOVE.B	CRAM+4,D1
	AND.W	#$000F,D1
	LSL.B	#2,D1
	MOVE.W	D1,SounVol2

	MOVE.B	CRAM+7,D1
	AND.W	#$F8,D1
	LSL.W	#2,D1
	MOVE.W	D1,SounTim2
	Otra2

Escr400A:
	MOVE.B	CRAM+8,D1
	AND.W	#$000F,D1
	LSL.B	#2,D1
	MOVE.W	D1,SounVol3

	MOVE.B	CRAM+11,D1
	AND.W	#$F8,D1
	LSL.W	#2,D1
	MOVE.W	D1,SounTim3
	Otra2

Escr400E:
	MOVE.B	CRAM+12,D1
	AND.W	#$000F,D1
	LSL.B	#2,D1
	MOVE.W	D1,SounVol4

	MOVE.B	CRAM+15,D1
	AND.W	#$F8,D1
	LSL.W	#2,D1
	MOVE.W	D1,SounTim4
	Otra2




Escr4016:
	SF	JoyCnt(A3)
	Otra2


Escr4014:
	MOVE.W	(A4),D1
	SF	D1
	CalPag	D1,A4
	MOVE.L	A0,-(SP)
	LEA	SRAM,A0
	MOVEQ	#(256/16)-1,D1
Escr4014Buc:
	MOVE.L	(A4)+,(A0)+
	MOVE.L	(A4)+,(A0)+
	MOVE.L	(A4)+,(A0)+
	MOVE.L	(A4)+,(A0)+
	DBF	D1,Escr4014Buc
	MOVE.L	(SP)+,A0
	Otra2



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


	CNOP	0,8
Mapper:
	DC.L	Mapper0,IniMapp0
	DC.L	Mapper1,IniMapp1
	DC.L	Mapper2,IniMapp2
	DC.L	Mapper0,IniMapp0
	DC.L	Mapper0,IniMapp0
	DC.L	Mapper0,IniMapp0
	DC.L	Mapper0,IniMapp0
	DC.L	Mapper0,IniMapp0
	REPT	8
	DC.L	Mapper0,IniMapp0
	ENDR


	CNOP	0,8
Mapper0:
	DC.L	OtraInst	; $0000-$1FFF
	DC.L	EscrPPU		; $2000-$3FFF
	DC.L	EscrHard	; $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

Mapper1:
	DC.L	OtraInst	; $0000-$1FFF
	DC.L	EscrPPU		; $2000-$3FFF
	DC.L	EscrHard	; $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

Mapper2:					; Konami
	DC.L	OtraInst	; $0000-$1FFF
	DC.L	EscrPPU		; $2000-$3FFF
	DC.L	EscrHard	; $4000-$5FFF
	DC.L	OtraInst	; $6000-$7FFF
	DC.L	Mapp2		; $8000-$9FFF
	DC.L	Mapp2		; $A000-$BFFF
	DC.L	Mapp2		; $C000-$DFFF
	DC.L	Mapp2		; $E000-$FFFF


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

IniMapp0:
IniMapp1:
	MOVE.L	DirCart,A0
	MOVEQ	#0,D0
	MOVE.B	NESInfoBuf+4,D0
	MULU	#$4000,D0
	ADD.L	D0,A0
	MOVE.L	A0,rVROM
	MOVE.L	#EROM,wVROM


;	-=-=-=-=-=-=-=-=-=-=-=-		; Inicializa Sistema de Paginación
	MOVE.L	MapROMBase(A3),A0
;;	ADD.W	#$0080,A0

	SUB.L	#$8000,A0

	MOVE.L	A0,PagRead+$10(A3)
	MOVE.L	A0,PagRead+$14(A3)

	MOVE.L	A0,PagRead+$18(A3)
	MOVE.L	A0,PagRead+$1C(A3)


	CMP.B	#1,NESInfoBuf+4
	BNE.S	NoEsde16Kb
	SUB.L	#$4000,A0
	MOVE.L	#LROM-$8000,PagRead+$10(A3)
	MOVE.L	#LROM-$A000,PagRead+$14(A3)
	MOVE.L	A0,PagRead+$18(A3)
	MOVE.L	A0,PagRead+$1C(A3)
NoEsde16Kb:

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

	RTS

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

IniMapp2:

	MOVE.L	#VRAM-$2000,rVROM
	MOVE.L	#VRAM-$2000,wVROM

;	-=-=-=-=-=-=-=-=-=-=-=-		; Inicializa Sistema de Paginación
	MOVE.L	MapROMBase(A3),A0
;;	ADD.W	#$0080,A0

	SUB.L	#$8000,A0

	MOVE.L	A0,PagRead+$10(A3)
	MOVE.L	A0,PagRead+$14(A3)

	MOVE.L	MapROMBase(A3),A0	; KONAMI
	MOVE.W	MaskROM(A3),D0
	MULU	#$4000,D0
	ADD.L	D0,A0			; KONAMI
	SUB.L	#$C000,A0		; KONAMI

	MOVE.L	A0,PagRead+$18(A3)
	MOVE.L	A0,PagRead+$1C(A3)


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

	RTS


	CNOP	0,8
Mapp2:
	SUB.W	(A2),A5

	MOVE.B	(A4),D1
	AND.W	MaskROM(A3),D1

	MULU	#$4000,D1
	ADD.L	MapROMBase(A3),D1
	SUB.L	#$8000,D1

	MOVE.L	D1,PagRead+$10(A3)
	MOVE.L	D1,PagRead+$14(A3)

	MOVE.W	D1,Restas+($10*2)(A3)
	MOVE.W	D1,Restas+($14*2)(A3)

	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

	Otra2

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





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


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


	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)


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

	MOVE.B	#$40,TipoIntOr(A3)
	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	PoneCoorY

	BSR	ActualizaGFX
	BSR	ActualizaGFX2


	BSR	EscribeSpr


	BSR	PonePaleta

	BSR	TocaPSG

	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	TipoIntOr(A3),D2
	MOVE.B	D2,NesIntR(A3)

	AND.B	DRAM+$000,D2		; ¿Modo DI?
	BEQ.S	NoInter

;	TST.B	DRAM+$000		; ¿Modo DI?
;	BPL.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	#$FFFA,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


PAKO:	MACRO
	MOVE.W	CRAM+\1+2,D1
	ROR.W	#8,D1
	AND.W	#$07FF,D1
	LSL.W	#4,D1
	BNE.S	\@NoFreqCer0
	MOVEQ	#1,D1
\@NoFreqCer0:
	MOVE.W	D1,\2+$6(A6)	; Freq

	MOVEQ	#0,D1
	BTST	#\3,CRAM+$15
	BEQ.S	\@NoToca

	TST.W	SounTim1+(\3*2)
	BEQ.S	\@NoToca

	SUBQ.W	#1,SounTim1+(\3*2)
	BCC.S	\@TSTimCero
	CLR.W	SounTim1+(\3*2)
\@TSTimCero:

;	MOVE.B	CRAM+\1+1,D1
;	AND.W	#$07,D1
;	LSL.W	#5,D1

	MOVE.W	SounVol1+(\3*2),D1

	BTST	#5,CRAM+\1	
	BNE.S	\@TSVolCero

	SUBQ.W	#2,SounVol1+(\3*2)
	BCC.S	\@TSVolCero
	CLR.W	SounVol1+(\3*2)
\@TSVolCero:

\@NoToca:
	MOVE.W	D1,\2+$8(A6)	; Vol
	ENDM

	PAKO	0,$A0,0
	PAKO	4,$B0,1
	PAKO	8,$C0,2
	PAKO	12,$D0,3


	RTS


	CNOP	0,8
SounVol1:	DC.W	0
SounVol2:	DC.W	0
SounVol3:	DC.W	0
SounVol4:	DC.W	0
SounVol5:	DC.W	0

	CNOP	0,8
SounTim1:	DC.W	0
SounTim2:	DC.W	0
SounTim3:	DC.W	0
SounTim4:	DC.W	0
SounTim5:	DC.W	0

	CNOP	0,8
SounEnv1:	DC.B	0
SounEnv2:	DC.B	0
SounEnv3:	DC.B	0
SounEnv4:	DC.B	0
SounEnv5:	DC.B	0


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


	CNOP	0,8
ActualizaGFX:
	LEA	PantGfx,A0
	LEA	PantGfx+(64*512),A2

	LEA	VRAM,A4
	BTST	#0,DRAM+$000
	BEQ.S	TFBT
	ADD.W	#$400,A4
TFBT:

	MOVE.L	rVROM,A5
	BTST	#4,DRAM+$000
	BEQ.S	TFBT2
	ADD.W	#$1000,A5
TFBT2:
; ---
	LEA	PantAnt0(PC),A6		; Código texto actualmente impreso.
	BSR	PrintGfx


	LEA	PantGfx+(32),A0
	LEA	PantGfx+(64*512)+32,A2

	LEA	VRAM,A4
	BTST	#0,DRAM+$000
	BNE.S	TFBT3
	ADD.W	#$400,A4
TFBT3:

	MOVE.L	rVROM,A5
	BTST	#4,DRAM+$000
	BEQ.S	TFBT4
	ADD.W	#$1000,A5
TFBT4:
; ---
	LEA	PantAnt1(PC),A6		; Código texto actualmente impreso.
	BSR	PrintGfx

	RTS


PrintGfx:
	MOVEQ	#(32)-1,D0		; Número de líneas.
ImpGfxBuc0:
	MOVEQ	#(32)-1,D1		; Número de Caracteres por línea.
ImpGfxBuc1:
	CMP.B	(A4)+,(A6)+
	BNE.S	ImpGfxRut

	ADDQ	#1,A0			; Siguiente Caracter en Destino.
	ADDQ	#1,A2			; Siguiente Caracter en Destino.
	DBF	D1,ImpGfxBuc1

	ADD.W	#(64*7)+32,A0		; Siguiente Línea en Destino.
	ADD.W	#(64*7)+32,A2		; Siguiente Línea en Destino.

	DBF	D0,ImpGfxBuc0
	RTS
	CNOP	0,4
ImpGfxRut:
	MOVE.B	-(A4),-1(A6)		; Copia nuevo código de texto.

	MOVEQ	#0,D2
	MOVE.B	(A4)+,D2
	LSL.W	#1,D2
	LEA	(A5,D2.W*8),A1
	MOVE.B	(A1)+,(64*0)(A0)
	MOVE.B	(A1)+,(64*1)(A0)
	MOVE.B	(A1)+,(64*2)(A0)
	MOVE.B	(A1)+,(64*3)(A0)
	MOVE.B	(A1)+,(64*4)(A0)
	MOVE.B	(A1)+,(64*5)(A0)
	MOVE.B	(A1)+,(64*6)(A0)
	MOVE.B	(A1)+,(64*7)(A0)
	MOVE.B	(A1)+,(64*0)(A2)
	MOVE.B	(A1)+,(64*1)(A2)
	MOVE.B	(A1)+,(64*2)(A2)
	MOVE.B	(A1)+,(64*3)(A2)
	MOVE.B	(A1)+,(64*4)(A2)
	MOVE.B	(A1)+,(64*5)(A2)
	MOVE.B	(A1)+,(64*6)(A2)
	MOVE.B	(A1)+,(64*7)(A2)
	ADDQ.W	#1,A0
	ADDQ.W	#1,A2
	DBF	D1,ImpGfxBuc1

	ADD.W	#(64*7)+32,A0		; Siguiente Línea en Destino.
	ADD.W	#(64*7)+32,A2		; Siguiente Línea en Destino.

	DBF	D0,ImpGfxBuc0

	RTS
;	=---------=

	CNOP	0,8
PantAnt0:	DCB.B	32*32,$7D
PantAnt1:	DCB.B	32*32,$7D
PantAnt2:	DCB.B	32*32,$7D
PantAnt3:	DCB.B	32*32,$7D

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

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


	CNOP	0,8
ActualizaGFX2:

	MOVEQ	#0,D1
	LEA	VRAM+$03C0,A0
	BTST	#0,DRAM+$000
	BEQ.S	TFBT5
	ADD.W	#$400,A0
TFBT5:

	LEA	PantGFX,A2
	MOVE.L	A2,A1
	ADD.L	#64*512*2,A1
	ADD.L	#64*512*3,A2

	LEA	PantAnt0B(PC),A4
	BSR	PrintGfx2

	MOVEQ	#0,D1
	LEA	VRAM+$03C0,A0
	BTST	#0,DRAM+$000
	BNE.S	TFBT6
	ADD.W	#$400,A0
TFBT6:

	LEA	PantGFX+32,A2
	MOVE.L	A2,A1
	ADD.L	#64*512*2,A1
	ADD.L	#64*512*3,A2

	LEA	PantAnt1B(PC),A4
	BSR	PrintGfx2

	RTS


PrintGfx2:
	MOVEQ	#(32/4)-1,D4
BHERT3:
	MOVEM.L	A1-A2,-(SP)
	MOVEQ	#(32/4)-1,D3
BHERT2:
	CMP.B	(A0)+,(A4)+
	BNE.S	RefreshGfx2

	ADDQ.W	#4,A1
	ADDQ.W	#4,A2

	DBF	D3,BHERT2
	MOVEM.L	(SP)+,A1-A2

	ADD.W	#(64*32),A1
	ADD.W	#(64*32),A2
	DBF	D4,BHERT3
	RTS

RefreshGfx2:
	MOVE.B	-1(A0),D0
	MOVE.B	D0,-1(A4)

	MOVEM.L	A1-A2,-(SP)
	MOVEQ	#2-1,D5
BHERT4:
	MOVEM.L	A1-A2,-(SP)
	MOVEQ	#2-1,D2
BHERT:
	BFINS	D0,D1{30:2}
	MOVE.W	(Pale2.L,D1.W*4),D6
	MOVE.W	(Pale2+2.L,D1.W*4),D7
	MOVE.W	D6,(A1)
	MOVE.W	D7,(A2)
	MOVE.W	D6,(64*1)(A1)
	MOVE.W	D7,(64*1)(A2)
	MOVE.W	D6,(64*2)(A1)
	MOVE.W	D7,(64*2)(A2)
	MOVE.W	D6,(64*3)(A1)
	MOVE.W	D7,(64*3)(A2)
	MOVE.W	D6,(64*4)(A1)
	MOVE.W	D7,(64*4)(A2)
	MOVE.W	D6,(64*5)(A1)
	MOVE.W	D7,(64*5)(A2)
	MOVE.W	D6,(64*6)(A1)
	MOVE.W	D7,(64*6)(A2)
	MOVE.W	D6,(64*7)(A1)
	MOVE.W	D7,(64*7)(A2)
	MOVE.W	D6,(64*$8)(A1)
	MOVE.W	D7,(64*$8)(A2)
	MOVE.W	D6,(64*$9)(A1)
	MOVE.W	D7,(64*$9)(A2)
	MOVE.W	D6,(64*$A)(A1)
	MOVE.W	D7,(64*$A)(A2)
	MOVE.W	D6,(64*$B)(A1)
	MOVE.W	D7,(64*$B)(A2)
	MOVE.W	D6,(64*$C)(A1)
	MOVE.W	D7,(64*$C)(A2)
	MOVE.W	D6,(64*$D)(A1)
	MOVE.W	D7,(64*$D)(A2)
	MOVE.W	D6,(64*$E)(A1)
	MOVE.W	D7,(64*$E)(A2)
	MOVE.W	D6,(64*$F)(A1)
	MOVE.W	D7,(64*$F)(A2)
	LSR.B	#2,D0
	ADDQ.W	#2,A1
	ADDQ.W	#2,A2
	DBF	D2,BHERT

	MOVEM.L	(SP)+,A1-A2
	ADD.W	#(64*16),A1
	ADD.W	#(64*16),A2
	DBF	D5,BHERT4

	MOVEM.L	(SP)+,A1-A2
	ADDQ.W	#4,A1
	ADDQ.W	#4,A2

	DBF	D3,BHERT2
	MOVEM.L	(SP)+,A1-A2

	ADD.W	#(64*32),A1
	ADD.W	#(64*32),A2
	DBF	D4,BHERT3
	RTS

Pale2:
	DC.B	$00,$00,$00,$00
	DC.B	$FF,$FF,$00,$00
	DC.B	$00,$00,$FF,$FF
	DC.B	$FF,$FF,$FF,$FF


PantAnt0B:	DCB.B	$40,$7D
PantAnt1B:	DCB.B	$40,$7D
PantAnt2B:	DCB.B	$40,$7D
PantAnt3B:	DCB.B	$40,$7D

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

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


	CNOP	0,8
EscribeSpr:

	lea	bufere,a0
	MOVE.W	-2(A0),D2

	MOVEQ	#64-1,D1
BUCSPR1:
	MOVE.L	(A0)+,A1
	TST.L	A1
	BEQ.S	NIBORRES

	MOVE.W	D2,D0
BUCSPR0:
	CLR.B	(32*256*3)(A1)
	CLR.B	(32*256*2)(A1)
	CLR.B	(32*256*1)(A1)
	CLR.B	(A1)
	ADD.W	#(32),A1
	DBF	D0,BUCSPR0
NIBORRES:
	DBF	D1,BUCSPR1


	lea	bufere,a6
	MOVE.W	#(16)-1,-2(A6)
	MOVEQ	#(2)-1,D7
	SWAP	D7
	MOVE.B	#$FE,D7
	BTST	#5,DRAM+0		; ¿ 8*8 o 16*6 ?
	BNE.S	SONDE16
	MOVEQ	#(1)-1,D7
	MOVE.W	#(8)-1,-2(A6)
	SWAP	D7
	ST	D7
SONDE16:


	MOVE.L	rVROM,A0
	BTST	#3,DRAM+0
	BEQ.S	SPRTITE0
	ADD.W	#$1000,A0
SPRTITE0:


	LEA	SRAM,A4

	LEA	PantSpr,A2

	MOVE.W	#(64)-1,D3	; ÑÑÑÑÑÑÑÑÑÑÑÑ
SBUC3:
	MOVEQ	#0,D0
	MOVE.B	(A4)+,D0		; Coor Y
	BEQ.S	hazlo
	cmp.w	#$E0,d0
	bcs.s	hazlo

	CLR.L	(a6)+
	addq	#3,a4
	DBF	D3,SBUC3
	RTS
FINALSPR:
	CLR.L	(a6)+
	DBF	D3,FINALSPR
	RTS


hazlo:
	MULU	#32,D0
	MOVEQ	#0,D1
	MOVE.B	2(A4),D1		; Coor X
	LSR.B	#3,D1
	ADD.L	D1,D0
	LEA	(A2,D0.L),A1
	MOVE.L	A1,(A6)+

	MOVEQ	#0,D2
	MOVE.B	(A4)+,D2		; Nº de Patrón
	AND.B	D7,D2
	LSL.W	#1,D2
	LEA	(A0,D2.W*8),A3

	LEA	32*256*1(A1),A5


	MOVE.L	A0,-(SP)

	LEA	TablaOBJFlip0,A0
	BTST	#6,(A4)
	BEQ.S	NoEsFlipX
	LEA	TablaOBJFlip1,A0
NoEsFlipX:


	MOVE.B	(A4)+,D0
	ADDQ.W	#1,A4

	AND.W	#$0003,D0
	MOVE.B	(Pale2+2.L,D0.W*4),D2
	SWAP	D2
	MOVE.B	(Pale2.L,D0.W*4),D2

	MOVEQ	#0,D0


	BTST	#7,-2(A4)			; ¿Flip Y?
	BNE.S	EsFlipY


	SWAP	D7
	MOVE.W	D7,D1
	SWAP	D7
SBUC2:
	SWAP	D1
	MOVE.W	#8-1,D1
SBUC1:
	MOVE.B	8(A3),D0
	MOVE.W	(A0,D0.W*2),D4
	MOVE.B	D4,(32*256*1)(A1)	; Bpl 1

	MOVE.B	(A3)+,D0
	MOVE.W	(A0,D0.W*2),D0
	MOVE.B	D0,(A1)			; Bpl 0

	OR.B	D0,D4

	TST.B	D2
	BEQ.S	NGF0
	MOVE.B	D4,(32*256*2)(A1)	; Bpl 2
NGF0:
	SWAP	D2
	TST.B	D2
	BEQ.S	NGF1
	MOVE.B	D4,(32*256*3)(A1)	; Bpl 3
NGF1:
	SWAP	D2

	ADD.W	#(32),A1

	DBF	D1,SBUC1

	ADDQ.W	#8,A3

	SWAP	D1
	DBF	D1,SBUC2

	MOVE.L	(SP)+,A0

	DBF	D3,SBUC3
	RTS



EsFlipY:
	ADD.W	#(7*32),A1

	SWAP	D7
	MOVE.W	D7,D1
	BEQ.S	EsFlipCon
	ADD.W	#(8*32),A1
EsFlipCon:
	SWAP	D7

SBUC2y:
	SWAP	D1
	MOVE.W	#8-1,D1
SBUC1y:
	MOVE.B	8(A3),D0
	MOVE.W	(A0,D0.W*2),D4
	MOVE.B	D4,(32*256*1)(A1)	; Bpl 1

	MOVE.B	(A3)+,D0
	MOVE.W	(A0,D0.W*2),D0
	MOVE.B	D0,(A1)			; Bpl 0

	OR.B	D0,D4

	TST.B	D2
	BEQ.S	NGF0y
	MOVE.B	D4,(32*256*2)(A1)	; Bpl 2
NGF0y:
	SWAP	D2
	TST.B	D2
	BEQ.S	NGF1y
	MOVE.B	D4,(32*256*3)(A1)	; Bpl 3
NGF1y:
	SWAP	D2

	SUB.W	#(32),A1

	DBF	D1,SBUC1y

	ADDQ.W	#8,A3

	SWAP	D1
	DBF	D1,SBUC2y

	MOVE.L	(SP)+,A0

	DBF	D3,SBUC3
	RTS




	CNOP	0,8
	DC.L	0
bufere:	DS.L	64+8


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



PonePaleta:
	LEA	VRAM+$1F00,A0
	LEA	PalBase,A1
	LEA	Color0+2,A2
	MOVEQ	#0,D1
	MOVEQ	#(32)-1,D0
PonePalBuc:
	MOVE.B	(A0)+,D1
	MOVE.W	(A1,D1.W*2),(A2)+
	ADDQ.W	#2,A2
	DBF	D0,PonePalBuc

	MOVE.W	Color1+2,color0+2

	RTS



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


	CNOP	0,8
PoneCoorY:
	LEA	Regs,A3

	MOVE.W	#$F0,D0
	SUB.B	CoorY(A3),D0
	SUBQ.B	#8,D0

	MOVE.W	#$01A0,DesPAL0
	MOVE.W	#$FFDF,DesPAL1

	ADD.B	#$2B-1,D0
	BCC.S	FTGBYDTT

	CMP.B	#$0B,D0
	BCS.S	FTGBYDTT3
	MOVEQ	#$0B,D0
FTGBYDTT3:

	MOVE.W	#$FFDF,DesPAL0
	MOVE.W	#$01A0,DesPAL1

FTGBYDTT:
	MOVE.B	D0,POSCORY

	ADDQ.B	#1,D0
	BNE.S	FTGBYDTT2
	MOVE.W	#$01A0,DesPAL1
FTGBYDTT2:


; -=-=-=-=-

	MOVEQ	#0,D2
	MOVE.B	CoorY(A3),D2
	ADDQ.B	#8,D2

	CMP.B	#$F0,D2
	BCS.S	NOPASANAA
	ADD.B	#$10,D2
NOPASANAA:
	MULU	#64,D2

	MOVEQ	#0,D0
	MOVE.B	CoorX(A3),D0

	LEA	(DATOSS.L,D0.W*8),A1
	MOVE.L	#PantGfx,D1
	ADD.L	(A1)+,D1

	MOVE.L	D1,D3

	ADD.L	D2,D1

	MOVE.L	(A1),D0
	MOVE.W	D0,SCRBITS+2


; -=-=-=-=-

	MOVE.L	D1,D0

	MOVE.L	#(64*512),D1

	MOVE.W	D0,Plano0+6
	SWAP	D0
	MOVE.W	D0,Plano0+2
	SWAP	D0

	ADD.L	D1,D0
	MOVE.W	D0,Plano0+6+8
	SWAP	D0
	MOVE.W	D0,Plano0+2+8
	SWAP	D0

	ADD.L	D1,D0
	MOVE.W	D0,Plano0+6+8+8
	SWAP	D0
	MOVE.W	D0,Plano0+2+8+8
	SWAP	D0

	ADD.L	D1,D0
	MOVE.W	D0,Plano0+6+8+8+8
	SWAP	D0
	MOVE.W	D0,Plano0+2+8+8+8


	MOVE.W	D3,Plano2+6
	SWAP	D3
	MOVE.W	D3,Plano2+2
	SWAP	D3

	ADD.L	D1,D3
	MOVE.W	D3,Plano2+6+8
	SWAP	D3
	MOVE.W	D3,Plano2+2+8
	SWAP	D3

	ADD.L	D1,D3
	MOVE.W	D3,Plano2+6+8+8
	SWAP	D3
	MOVE.W	D3,Plano2+2+8+8
	SWAP	D3

	ADD.L	D1,D3
	MOVE.W	D3,Plano2+6+8+8+8
	SWAP	D3
	MOVE.W	D3,Plano2+2+8+8+8

	RTS



MARI:	MACRO
	DC.L	\1,$8800
	DC.L	\1,$840F
	DC.L	\1,$840E
	DC.L	\1,$840D
	DC.L	\1,$840C
	DC.L	\1,$840B
	DC.L	\1,$840A
	DC.L	\1,$8409
	DC.L	\1,$8408
	DC.L	\1,$8407
	DC.L	\1,$8406
	DC.L	\1,$8405
	DC.L	\1,$8404
	DC.L	\1,$8403
	DC.L	\1,$8402
	DC.L	\1,$8401

	DC.L	\1,$8400
	DC.L	\2,$800F
	DC.L	\2,$800E
	DC.L	\2,$800D
	DC.L	\2,$800C
	DC.L	\2,$800B
	DC.L	\2,$800A
	DC.L	\2,$8009
	DC.L	\2,$8008
	DC.L	\2,$8007
	DC.L	\2,$8006
	DC.L	\2,$8005
	DC.L	\2,$8004
	DC.L	\2,$8003
	DC.L	\2,$8002
	DC.L	\2,$8001

	DC.L	\2,$8000
	DC.L	\2,$8C0F
	DC.L	\2,$8C0E
	DC.L	\2,$8C0D
	DC.L	\2,$8C0C
	DC.L	\2,$8C0B
	DC.L	\2,$8C0A
	DC.L	\2,$8C09
	DC.L	\2,$8C08
	DC.L	\2,$8C07
	DC.L	\2,$8C06
	DC.L	\2,$8C05
	DC.L	\2,$8C04
	DC.L	\2,$8C03
	DC.L	\2,$8C02
	DC.L	\2,$8C01

	DC.L	\2,$8C00
	DC.L	\2,$880F
	DC.L	\2,$880E
	DC.L	\2,$880D
	DC.L	\2,$880C
	DC.L	\2,$880B
	DC.L	\2,$880A
	DC.L	\2,$8809
	DC.L	\2,$8808
	DC.L	\2,$8807
	DC.L	\2,$8806
	DC.L	\2,$8805
	DC.L	\2,$8804
	DC.L	\2,$8803
	DC.L	\2,$8802
	DC.L	\2,$8801

	ENDM

DATOSS:
	MARI	-8,0
	MARI	0,8
	MARI	8,16
	MARI	16,24



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


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



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




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


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

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 7,$4E,KeyX		; Derecha
	PonTecla 6,$4F,KeyX		; Izquierda
	PonTecla 4,$4C,KeyX		; Arriba
	PonTecla 5,$4D,KeyX		; Abajo

	PonTecla 0,$66,KeyX		; Botón A	(Amiga Izq)
	PonTecla 1,$64,KeyX		; Botón B	(Alt Izq)
	PonTecla 2,$46,KeyX		; Select	(Del)
	PonTecla 3,$44,KeyX		; Start		(Enter)
	PonTecla 3,$5F,KeyX		; Start		(Help)

	PonTecla 0,$60,KeyX		; Botón A	(Shift Izq)
	PonTecla 1,$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 7,$4E,KeyX		; Derecha
	LeeTecla 6,$4F,KeyX		; Izquierda
	LeeTecla 4,$4C,KeyX		; Arriba
	LeeTecla 5,$4D,KeyX		; Abajo

	LeeTecla 0,$66,KeyX		; Botón A	(Amiga Izq)
	LeeTecla 1,$64,KeyX		; Botón B	(Alt Izq)
	LeeTecla 2,$46,KeyX		; Select	(Del)
	LeeTecla 3,$44,KeyX		; Start		(Enter)
	LeeTecla 3,$5F,KeyX		; Start		(Help)

	LeeTecla 0,$60,KeyX		; Botón A	(Shift Izq)
	LeeTecla 1,$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

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

;Read # |    0      1      2      3      4      5      6      7
;-------+---------------------------------------------------------
;Button |    A      B   SELECT   START   UP    DOWN   LEFT  RIGHT


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	PLANO0,PantGfx,(64*512),4+DP0
	DC.L	PLANO1,PantSpr+(7*32)-8,(32*256),4+DP1
	DC.L	PLANO2,PantGfx,(64*512),4+DP0
	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,$0BA1

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

	DC.W	$0108,(32)-8-8
	DC.W	$010A,00-8-8

PLANO0:	DS.W	4*4
PLANO1:	DS.W	4*4
COLOR0:	DS.W	16*2
COLOR1:	DS.W	16*2


	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,$0410


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


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





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/AmiNES-Famicom_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	127,-128,127,-128

	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
;	------------------------


IRAM:	DS.B	8*1024
DRAM:	DS.B	8*1024
CRAM:	DS.B	8*1024
ERAM:	DS.B	8*1024
	DS.B	8*1024		; - VRAM para Konami.
VRAM:	DS.B	8*1024		; - VRAM
SRAM:	DS.L	64

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

