
;	Menu para AmiNES-Famicom Emulator.
;	Por: Juan Antonio Gómez Gálvez

;    DC.L    $80000093,1			; En NESWIN
;    DC.L    $80080032,6,$00000000		; En MTags0


_SysBase=4


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

; <=----------------------------------=>
	MOVEQ	#0,D0
	LEA	GadNom(PC),A1
	MOVE.L	$4.W,A6
	JSR	-$228(A6)
	MOVE.L	D0,_GadToolsBase
	BEQ	LibsError
; <=----------------------------------=>
	MOVEQ	#0,D0
	LEA	IntNom(PC),A1
	MOVE.L	$4.W,A6
	JSR	-$228(A6)
	MOVE.L	D0,_IntuitionBase
	BEQ	LibsError
; <=----------------------------------=>
	MOVEQ	#0,D0
	LEA	DosNom(PC),A1
	MOVE.L	$4.W,A6
	JSR	-$228(A6)
	MOVE.L	D0,_DosBase
	BEQ	LibsError
; <=----------------------------------=>
	MOVEQ	#0,D0
	LEA	ASLNOM(PC),A1
	MOVE.L	4.W,A6
	JSR	-$228(A6)
	MOVE.L	D0,_AslBase
;; <=----------------------------------=>
	MOVEQ	#3,D0
	LEA	STCNOM(PC),A1
	MOVE.L	4.W,A6
	JSR	-$228(A6)
	MOVE.L	D0,_StcBase
	BNE.S	YaStc20
	MOVEQ	#3,D0
	LEA	STC2NOM(PC),A1
	MOVE.L	4.W,A6
	JSR	-$228(A6)
	MOVE.L	D0,_StcBase
YaStc20:
; <=-----------------------=>

; <=----------------------------------=>
	CLR.L	MENSWB
	MOVE.L	$4.W,A6
	SUB.L	A1,A1
	JSR	-$126(A6)
	MOVE.L	D0,A2
	TST.L	$AC(A2)
	BNE.S	CLI
	LEA	$5C(A2),A0
	JSR	-$180(A6)
	LEA	$5C(A2),A0
	JSR	-$174(A6)
	MOVE.L	D0,MENSWB
	MOVE.L	D0,A2
	MOVE.L	$24(A2),D0
	BEQ.S	CLI
	MOVE.L	_DosBase,A6
	MOVE.L	D0,A0
	MOVE.L	(A0),D1
	JSR	-$7E(A6)
CLI:
; <=----------------------------------=>

	LEA	DirInfoText(PC),A0
	BSR	Centrar

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

	BSR	Programa

; <=-----------------------=>
	MOVE.L	BucCart(PC),D0
	BEQ.S	NoHayCart2
	MOVE.L	DirCart(PC),A1
	MOVE.L	$4.W,A6
	JSR	-$D2(A6)		; Libera memoria.
	CLR.L	BucCart
NoHayCart2:
; <=-----------------------=>
	TST.L	_AslBase(PC)
	BEQ.S	NoHayAsl2

	MOVE.L	InsReqBase,A0
	MOVE.L	_AslBase,A6
	JSR	-$36(A6)	; FreeAslRequest.
NoHayAsl2:
; <=-----------------------=>
	MOVE.L	$4.W,A6
	TST.L	MENSWB(PC)
	BEQ.S	MENSWBRET
	JSR	-$84(A6)
	MOVE.L	MENSWB(PC),A1
	JSR	-$17A(A6)
MENSWBRET:
; <=-----------------------=>

; <=-----------------------=>
LiberaLib:MACRO
	MOVE.L	\1,A1
	TST.L	A1
	BEQ.S	\@LibLib
	MOVE.L	$4.W,A6
	JSR	-$19E(A6)	; Libera Librería.
\@LibLib:
	ENDM

LibsError:
	LiberaLib _DosBase
	LiberaLib _IntuitionBase
	LiberaLib _GadToolsBase
	LiberaLib _AslBase
	LiberaLib _StcBase

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

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

;*;	DC.L	$80080001,Texto Ventana
;*;	DC.L	$80080002,Screen WND donde aparece el requester.
;*;	DC.L	$80080003,Coor X
;*;	DC.L	$80080004,Coor Y
;*;	DC.L	$80080005,Size X
;*;	DC.L	$80080006,Size Y
;*;	DC.L	$80080009,Directorio
;*;	DC.L	$8008000A,PatrÓn
;*;	DC.L	$80080012,Texto Ok
;*;	DC.L	$80080013,Texto Cancel
;*;	DC.L	$80080014,Patron On=1/Off=0
;*;	DC.L	$8008003C,1	; 1=No muestra los "#?.info"

	CNOP	0,4
InsTags:
	DC.L	$80080002,0
	DC.L	$80080012,tInsert
	DC.L	$80080003,165
	DC.L	$80080004,11
	DC.L	$80080006,196
	DC.L	$8008003C,11		; No muestra los "#?.info"
;;;	DC.L	$80080009,tInsDir
	DC.L	$80080009,DirPrefs+$20
	DC.L	0,0

	CNOP	0,4
InsLoadTags:
	DC.L	$80080012,tInsert
	DC.L	$80080001,tInsLoad
	DC.L	0,0

	EVEN
tInsDir:DC.B	"Cartridges",0,0
tInsert:DC.B	"Insert",0,0
tInsLoad:DC.B	"Insert NES Cartridge file.",0,0

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

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

	CNOP	0,4
ACTUTAGS:			; A0=Dir TagListBase.
	MOVE.L	A0,A1
	TST.W	D0		; D0=Número de gadget.
	BEQ.S	ACTAGCON	; D1=Número de Tag a modificar.
ACTUTAGSB:			; D2=Dato a modificar.
	TST.L	(A0)+
	DBNE	D0,ACTUTAGS
	ADDQ	#4,A0
	BRA.S	ACTUTAGSB
ACTAGCON:
	TST.L	(A0)
	BEQ.S	ACTAGRET
	CMP.L	(A0)+,D1
	BEQ.S	ACTAGFIN
	ADDQ	#4,A0
	BRA.S	ACTAGCON
ACTAGFIN:
	MOVE.L	D2,(A0)+
ACTAGRET:
	RTS

; <=-----------------------=>
	CNOP	0,4
CENTRAR:
	TST.L	(A0)
	BNE.S	MIRACERO
	RTS
MIRACERO:
	MOVE.L	(A0)+,A2
	MOVE.L	(A0)+,D1
	MOVE.L	$C(A2),A1
	MOVEQ	#0,D0
MIRACEROB:
	ADDQ.W	#1,D0
	TST.B	(A1)+
	BNE.S	MIRACEROB
	SUBQ.W	#1,D0
	LSL.W	#3,D0
	SUB.W	D0,D1
	LSR.W	#1,D1
	MOVE.W	D1,4(A2)
	BRA.S	CENTRAR
; <=-----------------------=>

; <=-----------------------=>
	CNOP	0,8
NeedASL:
	LEA	tErNoASL(PC),A0
	JMP	ImpError
; <=-----------------------=>

; <=-----------------------=>
	CNOP	0,8
DirInfoText:
	DC.L	AboutText0,324
	DC.L	AboutText1,324
	DC.L	AboutText2,324
	DC.L	AboutText3,324
	DC.L	AboutText4,324
	DC.L	AboutText5,324
	DC.L	AboutText6,324
	DC.L	AboutText7,324
	DC.L	AboutText8,324
	DC.L	AboutText9,324
	DC.L	AboutText10,324
	DC.L	0,0,0,0
; <=-----------------------=>

; <=-----------------------=>
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
		CNOP	0,4
DisBase:	DC.L	0
BucFile:	DC.L	0
InsReqBase:	DC.L	0
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
DirCart:	DC.L	0
BucCart:	DC.L	0
PagCart:	DC.W	0
Comprimido:	DC.B	0
RawCartSize:	DC.B	0
EsUn060:	DC.B	0,0
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
_GadToolsBase:	DC.L	0
_IntuitionBase:	DC.L	0
_DosBase:	DC.L	0
_AslBase:	DC.L	0
_StcBase:	DC.L	0
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
		CNOP	0,8
GadNom:		DC.B	"gadtools.library",0
IntNom:		DC.B	"intuition.library",0
DosNom:		DC.B	"dos.library",0
AslNom:		DC.B	"asl.library",0
StcNom:		DC.B	"stc.library",0
Stc2Nom:	DC.B	"stc020.library",0
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
		CNOP	0,8
MENSWB:		DC.L	0
ControlKeys:	DC.W	0
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
		CNOP	0,4
FILENOM:	DS.B	$208
		CNOP	0,4
BUFERDSK:	DS.L	8
		CNOP	0,4
EXAMINE:	DS.B	520
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
		DS.L	25	; Seguriad
tErNoASL:	DC.B	"      I need asl.library      ",0
tErNoSTC:	DC.B	"I need stc.library for unpack!",0
tErNoCartucho:	DC.B	"   Cartridge not inserted!!   ",0
tErOpenFile:	DC.B	" I cannot open file selected! ",0
tErReadFile:	DC.B	"Error while loading Cartridge!",0
tErNoNESCart:	DC.B	"    Invalid NES Cartridge!    ",0
tErOutOfMem:	DC.B	"   -=>  Out of memory!  <=-   ",0
tErChecksum:	DC.B	" CAUTION:  Checksum is wrong! ",0
tErSavePrefs:	DC.B	"    Preferences not saved!    ",0
tErIDNoCorrecto:DC.B	"CAUTION: Bad GameBoy ID '00C3'",0
tErPila:	DC.B	"   6502's Stack Gets Crazy!   ",0
tErCodiLegal:	DC.B	"  Código ilegal $00 en $0000  ",0
tErNoMapSupp:	DC.B	" This mapper is not supported ",0

; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
		DS.L	10	; Seguriad
; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-

	CNOP	0,8
DirPrefs:
	DC.B	"AmiNFv01"	; $00 - ID
	DC.B	$01		; $08 - JoyType
	DC.B	$FF		; $09 - Black Border
	DC.B	$00		; $0A - Ask for Reset
	DC.B	$00		; $0B - Auto-load Battery
	DC.B	$00		; $0C - Auto-save Battery
	DC.B	$00		; $0D - Overwrite
	DC.B	$00		; $0E - Use UnPack.library
	DC.B	$00		; $0F - Screen mode
	DC.B	$00		; $10 - Inter
	DC.B	$00		; $11 - Refresh
	DC.W	$00		; $12 - Emulation Speed
	DC.B	$00		; $14 - No illogical moves
	DC.B	$00		; $15 -
	DC.B	$00		; $16 - 

	DC.B	$00		; $17
	DC.L	$00		; $18
	DC.L	$00		; $1C

	DC.B	"Cartridges"	; $20
	DS.B	$100-10

;;;	DC.B	$00		; $120

	CNOP	0,4
	DC.B	" -> AmiNES-Famicom preferences file <- ",0
	CNOP	0,4
FinPrefs:
BucPrefs=FinPrefs-DirPrefs

	DS.L	6
	CNOP	0,8
BufPrefs:
	DS.B	BucPrefs
	DS.L	6

; -=-=-=-==-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-
	CNOP	0,8
CabFileBuf:	DS.L	4
NESInfoBuf:	DS.L	4
*************************************************************
		DS.L	25	; Seguriad
*************************************************************
*************************************************************


	CNOP	0,8
Programa:
; ------------------------------------------
	BSR	LoadPrefs
	BSR	PonPrefs
; ------------------------------------------
	BSR	SetUpScreen
; ------------------------------------------

	BSR	MiraAGA
	TST.L	D0
	BEQ	Quitar

	BSR	MC68020
	TST.L	D0
	BEQ	Quitar

;;	BSR	CheckAGA

; ------------------------------------------
	MOVEM.L	MCeros,D0-D7/A0-A6
	BSR	OpenNESWindow
; ------------------------------------------
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	move.l  Scr,a0
	move.l  40(a0),a1
	move.w  4(a1),D1
	MOVE.L	NESWnd,A0
	MOVE.L	50(A0),A0
	LEA	DatsNESPic,A1
	MOVE.L	_IntuitionBase,A6
	JSR	-114(A6)
; ------------------------------------------
	BSR	ImpJoyType
; ------------------------------------------
; <=-----------------------=>
	TST.L	_AslBase(PC)
	BEQ.S	NoHayAsl

	MOVEQ	#0,D0
	LEA	InsTags(PC),A0
	MOVE.L	NESWnd,4(A0)
	MOVE.L	_AslBase,A6
	JSR	-$30(A6)	; AllocAslRequest.
	MOVE.L	D0,InsReqBase
NoHayAsl:
; <=-----------------------=>
; ------------------------------------------
	LEA	NESPunts,A1
	BSR	Control
; ------------------------------------------
	BSR	CloseNESWindow
; ------------------------------------------
Quitar:	JSR	CloseDownScreen
; ------------------------------------------=> Quit
	MOVEQ	#0,D0	; Salir Sín Errores
	RTS
; ------------------------------------------




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

	CNOP	0,8
Continue:
	MOVEQ	#-1,D7
	BRA.S	ContinueCon
	CNOP	0,8
PowerON:
	MOVEQ	#00,D7
ContinueCon:
	LEA	tErNoCartucho(PC),A0
	TST.L	BucCart(PC)
	BEQ	ImpError


	SF	DesborPILA			; *\*\*  POR QUITAR  */*/*


	BSR	ActuPrefs

	LEA	DirPrefs(PC),A5
; -=-=-
	MOVEQ	#0,D1
	TST.B	$0F(A5)			; Frecuencia pantalla.
	BNE.S	NoEsNTSC
	MOVE.W	#$20,D1
NoEsNTSC:MOVE.W	D1,$DFF1DC
; -=-=-
	IFD	NF_Menu
	BSR	NESEmul
	ENDC

	BSR	RefrescaReloj


	TST.B	DesborPILA			; *\*\*  POR QUITAR  */*/*
	BEQ.S	NoDerPila
	LEA	tErPila(PC),A0
	BSR	ImpError
NoDerPila:					; *\*\*  POR QUITAR  */*/*



	LEA	NESGadgets+(GD_Continue*4),A0
	MOVE.L	NESWND,A1
	MOVEQ	#0,D0
	BSR	GadsOnOff

	RTS


DesborPILA:	DC.B	0			; *\*\*  POR QUITAR  */*/*
		DC.B	0

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

	CNOP	0,8
ImpJoyType:
	MOVE.B	([NESGadgets+(GD_JoyType*4)],$57.w),D0	; JoyType
	AND.W	#$0003,D0
	MOVE.L	(TabGfxJoyType.w,PC,D0.w*4),DirJoyTypePic

	MOVE.L	#552,D0
	MOVE.L	#143,D1
	move.l  Scr,a0
	move.l  40(a0),a1
	ADD.w  4(a1),D1
	MOVE.L	NESWnd,A0
	MOVE.L	50(A0),A0
	LEA	DatsJoyTypePic,A1
	MOVE.L	_IntuitionBase,A6
	JMP	-114(A6)
	CNOP	0,4
TabGfxJoyType:
	DC.L	GBJoyStick
	DC.L	GBTeclado
	DC.L	GBCD32
	DC.L	GBJoypad

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

	CNOP	0,8
Eject:
	MOVE.L	BucCart(PC),D0
	BEQ	EjNoHayCart
	MOVE.L	DirCart(PC),A1
	MOVE.L	$4.W,A6
	JSR	-$D2(A6)		; Libera memoria.
	CLR.L	BucCart
	CLR.L	DirCart


	MOVE.L	#tTipoMap,NESText10+$C
	MOVE.L	#tTipoROM,NESText11+$C		; 'ROM:' ----
	MOVE.L	#tTipoRAM,NESText12+$C		; 'RAM:' ----
	MOVE.L	#tTipoYesNo,NESText13+$C
	MOVE.L	#tTipoMirror,NESText14+$C
	MOVE.L	#tTipoYesNo,NESText15+$C
	MOVE.L	#tTipoYesNo,NESText16+$C
	MOVE.L	#NESIText17,NESText17+$C	; No Cart Inserted.


	MOVE.L	InsReqBase,A2
	MOVE.L	4(A2),A0
	LEA	tNomFileCart,A1
	BSR	PONOM
	move.l  _IntuitionBase,a6
	move.l  NESWnd,a0
	move.b  54(a0),d0
	ext.w   d0
	move.b  55(a0),d1
	ext.w   d1
	move.l  50(a0),a0
	lea	NESText10,a1
	jsr     PrintIText(a6)
EjNoHayCart:

	LEA	NESGadgets+(GD_Continue*4),A0
	MOVE.L	NESWND,A1
	MOVEQ	#1,D0
	BSR	GadsOnOff

	RTS

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

	CNOP	0,8
Insert:
	TST.L	_ASLBase(PC)
	BEQ	NeedASL

	BSR	DisMouse

	MOVE.L	InsReqBase,A0
	LEA	InsLoadTags,A1
	MOVE.L	_AslBase,A6
	JSR	-$3C(A6)	; RequestFile.

	TST.L	D0
	BEQ	ReqCancel


	MOVE.L	InsReqBase,A2
	BSR	ArreglaNom


	MOVE.L	#FileNom,D1		; Open File
	MOVE.L	#$3ED,D2
	BSR	OpenFile
	BEQ	OpenError

	BSR	LongFile		; Mira Size.
	MOVE.L	D0,BucFile
	BEQ	ReadError

	MOVE.L	#(4*4),D3
	MOVE.L	#CabFileBuf,D2
	BSR	ReadFile
	BNE	ReadError


;	"NES",$1A
;	nº  ROM
;	nº VROM
;	nº Mapper (nibble alto)
;	Datos (nibble bajo)

;	---------------------
;	CORTADO DEL ORIGINAL:
;	---------------------


	LEA	CabFileBuf(PC),A0
	CLR.B	3(A0)
	CMP.L	#"NES"*$100,(A0)
	BNE	NoNESCart

	MOVEQ	#0,D0
	MOVE.B	4(A0),D0
	MULU	#16*1024,D0

	MOVEQ	#0,D1
	MOVE.B	5(A0),D1
	MULU	#8*1024,D1

	ADD.L	D1,D0

	MOVE.L	D0,-(SP)

	MOVE.L	BucCart(PC),D0
	BEQ.S	NoHayCart2z
	MOVE.L	DirCart(PC),A1
	MOVE.L	$4.W,A6
	JSR	-$D2(A6)		; Libera memoria.
	CLR.L	BucCart
NoHayCart2z:
	MOVE.L	(SP)+,BucCart

	MOVE.L	#$00010001,D1
	MOVE.L	BucCart,D0
	MOVE.L	4.W,A6
	JSR	-$C6(A6)		; Requiere memoria.
	MOVE.L	D0,DirCart
	BEQ	OutOfMem


	MOVE.L	DirCart(PC),D2
	MOVE.L	BucCart(PC),D3
	BSR	ReadFile
	BNE	ReadError

	BSR	CloseFile

	LEA	CabFileBuf(PC),A0
	LEA	NESInfoBuf(PC),A1
	MOVE.L	(A0)+,(A1)+
	MOVE.L	(A0)+,(A1)+
	MOVE.L	(A0)+,(A1)+
	MOVE.L	(A0)+,(A1)+


	BRA	CONTINUACORTE


;	---------------------
;	CORTADO DEL ORIGINAL:
;	---------------------

	CMP.W	#"S4",CabFileBuf
	BNE.S	NoStcComp
	MOVE.L	CabFileBuf+$08(PC),D0
	BSR	MiraGBCartSize
	BEQ.S	NoStcComp

	TST.L	_StcBase(PC)
	BEQ	ErNoStc

	ST	Comprimido
	BRA.S	SiStcComp
NoStcComp:
	MOVE.L	BucFile(PC),D0
	BSR	MiraGBCartSize
	BEQ	NoNESCart
	SF	Comprimido
SiStcComp:
	MOVE.W	D0,PagCart
	MULU	#$4080,D0
	ADD.L	#$80,D0
	MOVE.L	D0,-(SP)

	MOVE.L	BucCart(PC),D0
	BEQ.S	NoHayCart
	MOVE.L	DirCart(PC),A1
	MOVE.L	$4.W,A6
	JSR	-$D2(A6)		; Libera memoria.
	CLR.L	BucCart
NoHayCart:
	MOVE.L	(SP)+,BucCart

	MOVE.L	#$00010001,D1
	MOVE.L	BucCart,D0
	MOVE.L	4.W,A6
	JSR	-$C6(A6)		; Requiere memoria.
	MOVE.L	D0,DirCart
	BEQ	OutOfMem


	LEA	CabFileBuf(PC),A1
	MOVE.L	DirCart,A0
	TST.B	Comprimido(PC)
	BNE.S	SiCompri0
	ADD.W	#$80,A0
SiCompri0:
	MOVE.L	(A1)+,(A0)+
	MOVE.L	(A1)+,(A0)+
	MOVE.L	(A1)+,(A0)+
	MOVE.L	(A1)+,(A0)+
	MOVE.L	A0,D2
	MOVE.L	BucFile(PC),D3
	SUB.L	#(4*4),D3
	BSR	ReadFile
	BNE	ReadError

	BSR	CloseFile
; -=-=-
	TST.B	Comprimido(PC)
	BEQ.S	NoCompri0

	MOVE.L	DirCart,A1
	LEA	$80(A1),A0
	MOVE.L	_StcBase,A6
	JSR	-$24(A6)
	MOVE.L	DirCart,A0
	MOVE.W	#($80/4)-1,D0
DesStcBuc:
	CLR.L	(A0)+
	DBF	D0,DesStcBuc
	MOVE.L	CabFileBuf+$08,BucFile
NoCompri0:
; -=-=-
	TST.B	RawCartSize(PC)
	BEQ.S	SiRawCartSize
	MOVE.L	DirCart,A0
	ADD.W	#$80,A0
	MOVE.L	BucFile,D0
	SUB.L	#$200,D0
BucRawCartSize:
	MOVE.B	$200(A0),(A0)+
	SUBQ.L	#1,D0
	BNE.S	BucRawCartSize
SiRawCartSize:
; -=-=-


; -=-=-
	LEA	CabFileBuf(PC),A1		; Borra Cabecera NES.
	MOVE.L	DirCart,A0
	ADD.W	#$80,A0
	MOVE.L	(A0)+,(A1)+
	MOVE.L	(A0)+,(A1)+
	MOVE.L	(A0)+,(A1)+
	MOVE.L	(A0)+,(A1)+
	MOVE.L	BucFile(PC),D3
	SUB.L	#(4*4),D3
	SUB.W	#(4*4),A0
NESCabBuc:
	MOVE.L	$10(A0),(A0)+
	SUB.L	#4,D3
	BCC.S	NESCabBuc
; -=-=-

; -=-=-
	MOVE.L	DirCart,A0
	ADD.W	#$80,A0
	MOVE.W	PagCart,D0
	MOVE.W	D0,D1
	MULU	#$4080,D1
	LEA	(A0,D1.L),A1
	MOVE.W	D0,D1
	MULU	#$4000,D1
	LEA	(A0,D1.L),A0
	SUBQ.W	#1,D0
ArrROMPagBuc0:
	MOVEQ	#($80/4)-1,D1
ArrROMPagBuc1:
	CLR.L	-(A1)
	DBF	D1,ArrROMPagBuc1
	MOVE.W	#($4000/4)-1,D1
ArrROMPagBuc2:
	MOVE.L	-(A0),-(A1)
	DBF	D1,ArrROMPagBuc2
	DBF	D0,ArrROMPagBuc0

; -=-=-=-




;	---------------------
;	CORTADO DEL ORIGINAL:
;	---------------------


CONTINUACORTE:

	MOVE.L	#tNomFileCart,NESText17+$C


	MOVE.B	NESInfoBuf+6,D0
	LSR.B	#4,D0
	ADD.B	#"0",D0
	MOVE.B	D0,tTipoMapX
	MOVE.L	#tTipoMapX,NESText10+$C


	MOVEQ	#-1,D1
;-;	MOVE.W	PagCart,D0
	MOVE.B	NESInfoBuf+4,D0
;;	AND.W	#$3F,D0
	BEQ.S	InCalRom1
InCalRom:
	ADDQ.W	#1,D1
	LSR.W	#1,D0
	BCC.S	InCalRom
	MOVE.L	(TipoROM.W,PC,D1.W*4),NESText11+$C
InCalRom1:


	MOVEQ	#0,D1
	MOVE.B	NESInfoBuf+5,D0
;;	AND.W	#$FF,D0
	BEQ.S	InCalRam1
InCalRam:
	ADDQ.W	#1,D1
	LSR.W	#1,D0
	BCC.S	InCalRam
InCalRam1:
	MOVE.L	(TipoRAM.W,PC,D1.W*4),NESText12+$C


	MOVE.L	#tTipoNo,NESText13+$C
	MOVE.L	#tTipoMirroV,NESText14+$C
	MOVE.L	#tTipoNo,NESText15+$C
	MOVE.L	#tTipoNo,NESText16+$C

	MOVE.B	NESInfoBuf+6,D0
	LSR.B	#1,D0
	BCS.S	MirroVert
	MOVE.L	#tTipoMirroH,NESText14+$C
MirroVert:
	LSR.B	#1,D0
	BCC.S	NoHayBatt
	MOVE.L	#tTipoYes,NESText13+$C
NoHayBatt:
	LSR.B	#1,D0
	BCC.S	NoHayTrainer
	MOVE.L	#tTipoYes,NESText16+$C
NoHayTrainer:
	LSR.B	#1,D0
	BCC.S	NoHay4Screen
	MOVE.L	#tTipoYes,NESText15+$C
NoHay4Screen:


; -=-=-=-


	MOVE.L	InsReqBase,A2
	MOVE.L	4(A2),A0
	LEA	tNomFileCart,A1
	BSR	PONOM

	move.l  _IntuitionBase,a6
	move.l  NESWnd,a0
	move.b  54(a0),d0
	ext.w   d0
	move.b  55(a0),d1
	ext.w   d1
	move.l  50(a0),a0
	lea	NESText10,a1
	jsr     PrintIText(a6)

	LEA	NESGadgets+(GD_Continue*4),A0
	MOVE.L	NESWND,A1
	MOVEQ	#1,D0
	BSR	GadsOnOff

;;;	BSR	MiraTipoCart



	MOVE.B	NESInfoBuf+6,D0
	LSR.B	#4,D0
	BEQ.S	EspeMapSi
	CMP.B	#2,D0
	BEQ.S	EspeMapSi
	LEA	tErNoMapSupp(PC),A0
	BSR	ImpError
EspeMapSi:


	BSR	EnaMouse
	RTS



MiraGBCartSize:
	SUB.L	#16,D0
	SF	RawCartSize
	BFTST	D0{17:15}		; mira mínimo 32Kb
	BEQ.S	SiGBCartCon
	SUB.L	#$200,D0
	ST	RawCartSize
	BFTST	D0{17:15}		; mira mínimo 32Kb
	BNE.S	NoGBCartCon
SiGBCartCon:
	LSR.L	#8,D0
	LSR.L	#6,D0
	CMP.L	#$20,D0			; mira máximo 2Mb
	BGT.S	NoGBCartCon
	MOVEQ	#-1,D1
	RTS
NoGBCartCon:
	MOVEQ	#0,D1
	RTS

ReqCancel:
	BSR	EnaMouse
	RTS

ErNoStc:
	BSR	CloseFile
	LEA	tErNoStc,A0
	BRA	ImpError
OpenError:
	LEA	tErOpenFile,A0
	BRA	ImpError
ReadError:
	BSR	CloseFile
	LEA	tErReadFile,A0
	BRA	ImpError
NoNESCart:
	BSR	CloseFile
	LEA	tErNoNESCart,A0
	BRA	ImpError
OutOfMem:
	CLR.L	BucCart
	BSR	CloseFile
	LEA	tErOutOfMem,A0
	BRA	ImpError

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

	CNOP	0,8
TipoROM:
	DC.L	tTipoROM0
	DC.L	tTipoROM1
	DC.L	tTipoROM2
	DC.L	tTipoROM3
	DC.L	tTipoROM4
	DC.L	tTipoROM5
	DC.L	tTipoROM6
	DC.L	tTipoROM6

TipoRAM:
	DC.L	tTipoRAM0
	DC.L	tTipoRAM1
	DC.L	tTipoRAM2
	DC.L	tTipoRAM3
	DC.L	tTipoRAM4
	DC.L	tTipoRAM5
	DC.L	tTipoRAM6
	DC.L	tTipoRAM7

tTipoMap:	DC.B	"-",0
tTipoMapX:	DC.B	"0",0

tTipoROM:	DC.B	"-----",0
tTipoROM0:	DC.B	" 16Kb",0
tTipoROM1:	DC.B	" 32Kb",0
tTipoROM2:	DC.B	" 64Kb",0
tTipoROM3:	DC.B	"128Kb",0
tTipoROM4:	DC.B	"256Kb",0
tTipoROM5:	DC.B	"512Kb",0
tTipoROM6:	DC.B	"?????",0

tTipoRAM:	DC.B	"-----",0
tTipoRAM0:	DC.B	" RAM ",0
tTipoRAM1:	DC.B	"  8Kb",0
tTipoRAM2:	DC.B	" 16Kb",0
tTipoRAM3:	DC.B	" 32Kb",0
tTipoRAM4:	DC.B	" 64Kb",0
tTipoRAM5:	DC.B	"128Kb",0
tTipoRAM6:	DC.B	"256Kb",0
tTipoRAM7:	DC.B	"512Kb",0

tTipoYesNo:	DC.B	"---",0
tTipoYes:	DC.B	"Yes",0
tTipoNo:	DC.B	"No.",0

tTipoMirror:	DC.B	"----",0
tTipoMirroV:	DC.B	"Vert",0
tTipoMirroH:	DC.B	"Hori",0

tNomCart:	DC.B	"----------------",0
tManufNoID:	DC.B	"---------------",0
tNomFileCart:	DC.B    'No Cartridge Inserted!           ',0,0,0

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

	CNOP	0,4
ImpError:
	MOVE.L	A0,ImpErrorText0+$C

	BSR	DisMouse

	MOVEM.L	MCeros,D0-D7/A0-A6
	BSR	OpenImpErrorWindow

	LEA	ImpErrorPunts,A1
	BSR	Control

	BSR	CloseImpErrorWindow
	BSR	EnaMouse
	RTS

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

About:
	BSR	DisMouse
	MOVEM.L	MCeros,D0-D7/A0-A6
	BSR	OpenAboutWindow

	LEA	AboutPunts,A1
	BSR	Control

	BSR	CloseAboutWindow
	BSR	EnaMouse
	RTS

Address:
	ADD.W	#16+4,SP
	BSR	CloseAboutWindow
;;;	BSR	DisMouse		; ya lo hace About (sino bug)

	MOVEM.L	MCeros,D0-D7/A0-A6
	BSR	OpenAddressWindow

	LEA	AddressPunts,A1
	BSR	Control

	JSR	CloseAddressWindow
	BSR	EnaMouse
	RTS

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

HelpPage:
	BSR	DisMouse
	MOVEM.L	MCeros,D0-D7/A0-A6
	BSR	OpenHelpPageWindow

	MOVEQ	#20,D0
	MOVEQ	#16,D1
	MOVE.L	#GBTeclado,DirJoyTypePic
	BSR	ImprHelpJoy

	MOVE.L	#264,D0
	MOVEQ	#16,D1
	MOVE.L	#GBCD32,DirJoyTypePic
	BSR	ImprHelpJoy

	MOVEQ	#20,D0
	MOVE.L	#110,D1
	MOVE.L	#GBJoyStick,DirJoyTypePic
	BSR	ImprHelpJoy

	MOVE.L	#264,D0
	MOVE.L	#110,D1
	MOVE.L	#GBJoypad,DirJoyTypePic
	BSR	ImprHelpJoy

	LEA	HelpPagePunts,A1
	BSR	Control

	BSR	CloseHelpPageWindow
	BSR	EnaMouse
	RTS

ImprHelpJoy:
	move.l  Scr,a0
	move.l  40(a0),a1
	ADD.w	4(a1),D1
	MOVE.L	HelpPageWnd,A0
	MOVE.L	50(A0),A0
	LEA	DatsJoyTypePic,A1
	MOVE.L	_IntuitionBase,A6
	JMP	-114(A6)

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

; -----------------------------------
	CNOP	0,4
MiraTipoCart:

	RTS

;	LEA	tNomFileCart,A0
;	BSR	BuscaExt
;	TST.L	D0
;	BMI.S	NoCanviEmul
;; ---
;	MOVEQ	#0,D1			; Nuevo valor!!!
;	MOVE.W	D0,D1
;	LEA	NESGadgets+(GD_EmuType*4),A0
;	MOVE.L	NESWND,A1
;	MOVE.L	#$8008000F,D0
;	BSR	CanviTAGS
;; ---
;NoCanviEmul:
;	RTS
; -=-=-=-=-=-
BuscaExt:
	LEA	MiTiNom+8(PC),A1
	MOVEQ	#0,D0
MiTiBuc0:
	TST.B	(A0)+
	BEQ.S	MiTiCon0
	ADDQ.W	#1,D0
	BRA.S	MiTiBuc0
MiTiCon0:
	LEA	(A1,D0.W),A1
MiTiBuc1:
	MOVE.B	-(A0),-(A1)
	CMP.B	#".",(A1)
	BEQ.S	MiTiPunto
	CMP.B	#$60,(A1)
	BCS.S	MiTiCon1
	SUB.B	#$20,(A1)
MiTiCon1:
	DBF	D0,MiTiBuc1
	MOVEQ	#-1,D0
	RTS
MiTiPunto:
	MOVE.L	(A1),D1
	MOVEQ	#0,D0
	CMP.L	#".SMS",D1		; Sega Master System
	BEQ.S	MiTiFin
	MOVEQ	#1,D0
	CMP.L	#".SGG",D1		; Sega Game Gear
	AND.L	#$FFFFFF00,D1
	MOVEQ	#0,D0
	CMP.L	#".MS"*256,D1		; Master System
	BEQ.S	MiTiFin
	MOVEQ	#1,D0
	CMP.L	#".GG"*256,D1		; Game Gear
	BEQ.S	MiTiFin
	MOVEQ	#-1,D0
MiTiFin:
	RTS

	CNOP	0,4
MiTiNom:DS.B	8+64
; -----------------------------------
; -----------------------------------
	CNOP	0,4
COGECHECK:
	MOVE.L	NESMenus,A0
	MOVE.L	_intuitionbase(PC),A6
	LSL.W	#5,D0	
	OR.W	D1,D0
	JSR	-$90(A6)		; ItemAdress (A0,d0)
	MOVE.L	D0,A0
	BTST	#0,$C(A0)
	RTS
; -----------------------------------

	CNOP	0,4
ActuPrefs:
	LEA	DirPrefs(PC),A5
	MOVE.B	([NESGadgets+(GD_JoyType*4)],$57.w),$08(A5)	; JoyType

	MOVE.B	([NESGadgets+(GD_ScrMode*4)],$57.w),$0F(A5)	; Screen

	MOVE.L	InsReqBase(PC),A0
	MOVE.L	8(A0),A0
	LEA	$20(A5),A1
	MOVE.W	#($100/8)-1,D0
ActPreBuc0:
	MOVE.L	(A0)+,(A1)+
	MOVE.L	(A0)+,(A1)+
	DBF	D0,ActPreBuc0

	MOVEQ	#2,D1		; Nº menu.
	MOVEQ	#0,D0		; Nº Línea.
	BSR	CogeCheck
	SNE	$09(A5)				; Black Border

	RTS

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

	CNOP	0,4
PonPrefs:
	LEA	DirPrefs(PC),A5

	LEA	NESGTags,A0
	MOVE.W	#GD_JoyType,D0
	MOVE.L	#$8008000F,D1
	MOVEQ	#0,D2
	MOVE.B	$08(A5),D2
	BSR	ActuTags

	LEA	NESGTags,A0
;	MOVE.W	#GD_LCDFade,D0
	MOVE.L	#$8008000F,D1
	MOVEQ	#0,D2
	MOVE.B	$11(A5),D2
	BSR	ActuTags

	LEA	NESGTags,A0
	MOVE.W	#GD_ScrMode,D0
	MOVE.L	#$8008000F,D1
	MOVEQ	#0,D2
	MOVE.B	$0F(A5),D2
	BSR	ActuTags

	MOVE.B	$09(A5),D0
	BFINS	D0,NESNewMenu26+10{7:1}	; Black Border.

	RTS

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

	CNOP	0,4
LoadPrefs:
	MOVE.L	#NOMPREFS,D1
	MOVE.L	#1005,D2
	BSR	OPENFILE
	BEQ.S	PREFSRET

	MOVE.L	#BUFPREFS,D2
	MOVE.L	#BUCPREFS,D3
	BSR	READFILE
	BNE	CLOSEFILE

	BSR	CLOSEFILE
	LEA	BUFPREFS,A0
	CMP.L	#"AmiN",(A0)
	BNE.S	PREFSRET
	CMP.L	#"Fv01",4(A0)		; Versión
	BEQ.S	PREFSOK
PREFSRET:
	RTS
	CNOP	0,4
PREFSOK:
	MOVE.L	#"Fv01",4(A0)		; Versión
	LEA	DIRPREFS,A1
	MOVE.W	#BUCPREFS-1,D0
COPIPREFS:
	MOVE.B	(A0)+,(A1)+
	DBF	D0,COPIPREFS
	RTS


	CNOP	0,4
SAVEPREFS:
	BSR	ActuPrefs

	MOVE.L	#NOMPREFS,D1
	MOVE.L	#1006,D2
	BSR	OPENFILE
	BEQ.S	ERDEVICE2

	MOVE.L	#DIRPREFS,D2
	MOVE.L	#BUCPREFS,D3
	BSR	WRITEFILE
	BNE.S	ERDEVICE2

	BSR	CLOSEFILE
	RTS

	CNOP	0,4
ERDEVICE2:
	BSR	CLOSEFILE
	LEA	tErSavePrefs(PC),A0
	BRA	ImpError
	RTS

	CNOP	0,8
NOMPREFS:
	DC.B	"S:AmiNES.prefs",0,0,0,0

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


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


; -----------------------------------
; -----------------------------------
	CNOP	0,4
SETPAL:
	MOVE.W	#$20,$DFF1DC
	RTS
; -----------------------------------
	CNOP	0,4
SETNTSC:
	MOVE.W	#0,$DFF1DC
	RTS
; -----------------------------------
	CNOP	0,4
MC68020:
	MOVE.L	$4.w,A0
	MOVE.B	$129(A0),D0
	SMI	EsUn060

	AND.B	#$8E,D0
	BNE.S	MC68020RET

NoAGA2:
	MOVEM.L	MCEROS(PC),D0-D7/A0-A6
	JSR	OPENMC68020WINDOW
	LEA	MC68020PUNTS,A1
	BSR	CONTROL
	JSR	CLOSEMC68020WINDOW
MC68020RET:
	MOVEQ	#-1,D0
	RTS
MC68020SALIR:
	ADD.W	#16+4,SP
	JSR	CLOSEMC68020WINDOW
	MOVEQ	#0,D0
	RTS

; -----------------------------------
	CNOP	0,4
MiraAGA:
	LEA	$DFF000,A6
	MOVE.W	$7C(A6),D1
	MOVE.W	#30-1,D3
BucAGA2:
	MOVE.W	$7C(A6),D2
	CMP.B	D2,D1
	BNE	NoAGA2
	DBF	D3,BucAGA2
	ORI.B	#$F0,D1
	CMPI.B	#$F8,D1
	BNE	NoAGA2
	MOVEQ	#-1,D0
	RTS

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


;	--------------------------
;	Refresca el Relog interno.
;	--------------------------

	CNOP	0,8
RefrescaReloj:
	LEA	battclockreso(PC),A1
	MOVE.L	$4.w,A6
	JSR	-$1F2(A6)		; Open Resource.
	MOVE.L	D0,A2
	MOVE.L	A2,D0
	BEQ.S	RefRelFin

	LEA	TimeBuffer(PC),A1
	LEA	timerdevice(PC),A0
	MOVEQ	#0,D0
	MOVE.L	D0,D1
	JSR	-$1BC(A6)		; Open Device.
	MOVE.L	D0,D6
	BNE.S	RefRelFin


	MOVEQ	#0,D7
	MOVEQ	#0,D0
	LEA	TimeBuffer(PC),A0
	MOVE.W	D0,$8(A0)
	SUB.L	A1,A1
	MOVE.L	A1,$A(A0)
	MOVE.L	A1,$E(A0)
	CLR.L	$24(A0)

	MOVE.L	A2,A6
	JSR	-$C(A6)
	LEA	TimeBuffer(PC),A0
	MOVE.L	D0,$20(A0)
	MOVE.W	#$B,$1C(A0)
	MOVE.L	A0,A1
	MOVE.L	$4.w,A6
	JSR	-$1C8(A6)		; DoIO.

	LEA	TimeBuffer(PC),A1
	JSR	-$1C2(A6)		; Close Device.
RefRelFin:
	RTS

	CNOP	0,8
battclockreso:	DC.B	'battclock.resource',0,0
timerdevice:	DC.B	'timer.device',0,0

	CNOP	0,8
TimeBuffer:	DS.B	$30
***************************************************************


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

	CNOP	0,4
LONGFILE:
	MOVE.L	#FILENOM,D1
	MOVEQ	#-2,D2
	MOVE.L	_DOSBASE,A6
	JSR	-$54(A6)		; Lock
	TST.L	D0
	BEQ.S	LONGFILER
	MOVE.L	D0,-(SP)

	MOVE.L	D0,D1
	move.L	#EXAMINE,d2
	MOVE.L	_DOSBASE,A6
	JSR	-$66(A6)		; Examine

	MOVE.L	(SP)+,D1
	JSR	-$5A(A6)		; UnLock

	MOVE.L	EXAMINE+$7C,D0
LONGFILER:
	RTS


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

	CNOP	0,4
; -----------------------------------
OPENFILE:
	MOVE.L	_DOSBASE,A6
	JSR	-30(A6)			; OPEN
	MOVE.L	D0,DISBASE
	RTS
CLOSEFILE:
	MOVE.L	_DOSBASE,A6
	MOVE.L	DISBASE,D1
	BEQ.S	NoCloseFile
	JSR	-36(A6)			; CLOSE
	CLR.L	DISBASE
NoCloseFile:
	RTS
WRITEFILE:
	MOVE.L	_DOSBASE,A6
	MOVE.L	DISBASE,D1
	MOVE.L	D3,-(SP)
	JSR	-48(A6)			; WRITE
	MOVE.L	(SP)+,D3
	CMP.L	D0,D3
	RTS
READFILE:
	MOVE.L	_DOSBASE,A6
	MOVE.L	DISBASE,D1
	MOVE.L	D3,-(SP)
	JSR	-42(A6)			; READ
	MOVE.L	(SP)+,D3
	CMP.L	D0,D3
	RTS


; -----------------------------------
	CNOP	0,4
PONOM:
	MOVE.L	A1,A2
NTXTYA0:
	TST.B	(A2)
	BEQ.S	COPYNOM2
	MOVE.B	#" ",(A2)+
	BRA.S	NTXTYA0
	CNOP	0,4
COPYNOM2:
	MOVE.B	(A0)+,D0
	BEQ.S	PONOMS
	TST.B	(A1)
	BEQ.S	PONOMS
	MOVE.B	D0,(A1)+
	BRA.S	COPYNOM2
PONOMS:	RTS
; -----------------------------------
	CNOP	0,4
COPYNOM:
	MOVE.B	(A0)+,(A1)+
	DBEQ	D0,COPYNOM
	RTS
; -----------------------------------
	CNOP	0,4
ArreglaNom:
	LEA	FILENOM(PC),A1
	MOVE.W	#$100-1,D0
	MOVE.L	8(A2),A0
	TST.B	(A0)
	BEQ.S	ArrglNom
	BSR	COPYNOM
	SUBQ	#1,A1
	CMP.B	#":",-1(A1)
	BEQ.S	ArrglNom
	MOVE.B	#"/",(A1)+
ArrglNom:
	MOVE.W	#$100-1,D0
	MOVE.L	4(A2),A0
	BSR	COPYNOM
	RTS
; -----------------------------------



; -----------------------------------
;	Pasa Decimal  &  Pasa Hexa v1.0
;	(PD)  Juan Antonio Gomez Galvez
;	(Codigo texto para DEVPAC II),(3-X-92)

;	- D0=Numero que se va a pasar a decimal.
;	- Resultado: D0 y A0 tienen el puntero del buffer
;	  de los numeros en ASCII en decimal.  (10 bytes)

PASDEC:
	LEA	DSUMA(PC),A0
	CLR.L	(A0)+
	CLR.L	(A0)+
	CLR.W	(A0)+

	MOVE.W	#$08-1,D1
	LEA	DATOSSUMA(PC),A0
SUMBUC01:
	MOVEM.L	D0-D1/A0,-(SP)
	AND.L	#$000F,D0
	TST.B	D0
	BEQ	SUMCON00
SUMBUC02:
	MOVEM.L	D0/A0,-(SP)
	LEA	DSUMA(PC),A1
	BSR	SUMDEC
	MOVEM.L	(SP)+,D0/A0
	SUBQ.B	#$01,D0
	BNE.S	SUMBUC02
SUMCON00:
	MOVEM.L	(SP)+,D0-D1/A0
	LSR.L	#$04,D0
	ADD.L	#$0A,A0
	DBF	D1,SUMBUC01

	LEA	DSUMA(PC),A0
	ADD.L	#$30303030,(A0)+
	ADD.L	#$30303030,(A0)+
	ADD.W	#$3030,(A0)+

	LEA	DSUMA(PC),A0
SUMBUC03:
	TST.B	(A0)
	BEQ	SUMCON01
	MOVE.B	(A0),D0
	CMP.B	#$30,D0
	BNE.S	FINRET
	MOVE.B	#$20,(A0)+
	BRA	SUMBUC03
SUMCON01:
	MOVE.B	#"0",-(A0)
	BRA.S	FINRET
SUMDEC:
	MOVEQ.L	#$0A-1,D1
	ADD.L	#$0A,A0
	ADD.L	#$0A,A1
SUMBUC00:
	MOVE.B	-(A0),D3
	ADD.B	D3,-(A1)
	MOVE.B	(A1),D0
	SUB.B	#$0A,D0
	BCS.S	SUMBIEN00
	MOVE.B	D0,(A1)
	ADD.B	#$01,-1(A1)
	DBF	D1,SUMBUC00
	RTS
SUMBIEN00:
	CLR.L	D0
	DBF	D1,SUMBUC00
	RTS
FINRET:
	LEA	DSUMA(PC),A0
	MOVE.L	A0,D0
	RTS


;	- A0 el puntero del buffer de los
;	  numeros en ASCII en decimal. (10 bytes)
;	- Resultado: D0=Numero en hexadecimal.

PASHEX:
	CLR.L	D5
	LEA	PUNTERO(PC),A1
	MOVE.L	A0,(A1)
	MOVEQ.L	#$0A-1,D0
PASBUC02:
	SUB.B	#$30,(A0)+
	BCC.S	PASCON00
	CLR.B	-$01(A0)
PASCON00:
	CMP.B	#$0A,-$01(A0)
	BLT.S	PASCON01
	CLR.B	-$01(A0)
PASCON01:
	DBF	D0,PASBUC02
	MOVE.L	PUNTERO(PC),A0
	LEA	FDATOSSUMA(PC),A1
	MOVEQ.L	#$08-1,D4
	MOVE.L	#$10000000,D3
PHEBUC01:
	MOVEQ.L	#-1,D7
PHEBUC00:
	ADD.L	#$01,D7
	BSR	COPY1
	BSR	RESTAD
	CMP.B	#$09,D0
	BNE.S	PHEBUC00
	BSR	COPY2
	CLR.L	D6
	TST.L	D7
	BEQ.S	PHECON00
PHEBUC02:
	ADD.L	D3,D6
	SUB.L	#$01,D7
	BNE.S	PHEBUC02
	ADD.L	D6,D5
PHECON00:
	LSR.L	#$04,D3
	SUB.L	#$0A,A1
	DBF	D4,PHEBUC01
	MOVE.L	D5,D0
	RTS
COPY1:
	MOVE.L	PUNTERO(PC),A6
	LEA	DSUMA2(PC),A5
COPCON00:
	MOVE.L	(A6)+,(A5)+
	MOVE.L	(A6)+,(A5)+
	MOVE.W	(A6)+,(A5)+
	RTS
COPY2:
	MOVE.L	PUNTERO(PC),A5
	LEA	DSUMA2(PC),A6
	BRA.S	COPCON00
RESTAD:
	MOVEM.L	A0-A1,-(SP)
	ADD.L	#$0A,A0
	ADD.L	#$0A,A1
	CLR.L	D0
	ROXR.L	#$1,D0		; FLAG X=0
	MOVE.L	#$0A-1,D0
RESBUC00:
	SBCD.B	-(A1),-(A0)
	AND.B	#$0F,(A0)
	DBF	D0,RESBUC00
	MOVE.B	(A0),D0
	MOVEM.L	(SP)+,A0-A1
	RTS

	DC.L	0
DSUMA:
	DS.B	$0A
	DC.L	0
DSUMA2:
	DS.B	$0A
	DC.L	0
DATOSSUMA:
	DC.B	0,0,0,0,0,0,0,0,0,1
	DC.B	0,0,0,0,0,0,0,0,1,6
	DC.B	0,0,0,0,0,0,0,2,5,6
	DC.B	0,0,0,0,0,0,4,0,9,6
	DC.B	0,0,0,0,0,6,5,5,3,6
	DC.B	0,0,0,1,0,4,8,5,7,6
	DC.B	0,0,1,6,7,7,7,2,1,6
FDATOSSUMA:
	DC.B	0,2,6,8,4,3,5,4,5,6
	DC.L	0
PUNTERO:
	DC.L	0

;	Fin del codigo texto.

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

DISMOUSE:
	TST.L	NESWND(PC)
	BEQ.S	NoDisMouse
	TST.L	WREQBASE
	BEQ.S	SiDisMouse
NoDisMouse:
	RTS
SiDisMouse:
	MOVEQ	#$70,D0
	MOVE.L	#$10001,D1
	MOVE.L	$4.W,A6
	JSR	-$2AC(A6)		; AllocVec
	MOVE.L	D0,VECBASE
	BEQ.S	ERVEC
	MOVE.L	D0,A0
	MOVE.L	NESWND(PC),A1
	MOVE.L	_intuitionbase(PC),A6
	JSR	-$F0(A6)		; Request
ERVEC:
	MOVE.L	D0,WREQBASE
PBUSY:
	MOVE.L	NESWND(PC),A0
	LEA	BUSYGFX,A1
	MOVE.L	#16,D0
	MOVE.L	#16,D1
	MOVEQ	#0,D2
	MOVEQ	#0,D3
	MOVE.L	_intuitionbase,A6
	JMP	-$10E(A6)
; --------------------------------------------------------
ENAMOUSE:
	TST.L	WREQBASE
	BEQ.S	ERVEC3
	MOVE.L	VECBASE(PC),A0
	MOVE.L	NESWND(PC),A1
	MOVE.L	_intuitionbase,A6
	JSR	-$78(A6)		; EndRequest
ERVEC3:
	MOVE.L	VECBASE(PC),D0
	BEQ.S	ERVEC2
	MOVE.L	D0,A1
	MOVE.L	$4.W,A6
	JSR	-$2B2(A6)		; FreeVec
ERVEC2:
	CLR.L	VECBASE
	CLR.L	WREQBASE
PNORM:
	MOVE.L	NESWND(PC),A0
	MOVE.L	_intuitionbase,A6
	JMP	-$3C(A6)

	CNOP	0,4
VECBASE:DC.L	0
WREQBASE:DC.L	0
; -----------------------------------

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


; -----------------------------------
TxtPrint:
	move.l  _IntuitionBase,a6
	move.b  54(a0),d0
	ext.w   d0
	move.b  55(a0),d1
	ext.w   d1
	move.l  50(a0),a0
	jsr     PrintIText(a6)
	RTS
; -----------------------------------	; D0.l = 0 On
	CNOP	0,4			; D0.l = 1 Off
GadsOnOff:
	MOVE.L	D0,OnOffTAGS+4
	MOVE.L	(A0),A0
	SUB.L	A2,A2
	LEA	OnOffTAGS(PC),A3
	MOVE.L	_GadToolsBase(PC),A6
	JSR	-$2A(A6)
	RTS
	CNOP	0,4
OnOffTAGS:
	DC.L    $8003000E,1
	DC.L	0,0
; -----------------------------------
CanviTags:
	MOVE.L	D0,TAGSCanvi
	MOVE.L	D1,TAGSCanvi+4
	MOVE.L	(A0),A0
	SUB.L	A2,A2
	LEA	TAGSCanvi(PC),A3
	MOVE.L	_GadToolsBase,A6
	JSR	-$2A(A6)
	RTS
	CNOP	0,4
TAGSCanvi:
	DC.L    0,0
	DC.L	0,0
; -----------------------------------

; <=-------------------------------------------------------=>
;	 Rutina de control de lectura de Gadgets.
;	<= -------------------------------------=>
;	    A1 = SaltosGadgets.	; Para salir hacer:  ADD.L  #16+4,SP
;	-12(A1)= Window Handle.
;	 -8(A1)= Punteros Gadgets.
;	 -4(A1)= Nº de Gadgets-1
	CNOP	0,8
Control:
	CLR.W	ControlKeys
	MOVE.L	-8(A1),-(SP)
	MOVE.L	A1,-(SP)
	MOVE.L	-12(A1),A0
	MOVE.L	(A0),-(SP)
BUCONTROL:
	MOVE.L	(SP),A0
	MOVE.L	$56(A0),A0
	MOVE.L	$4,A6
	JSR	-$180(A6)	; Wait Port. (iport)(A0)

	MOVE.L	(SP),A0
	MOVE.L	$56(A0),A0
	MOVE.L	_GADTOOLSBASE,A6
	JSR	-$48(A6)	; GT_GetIMsg(iport)(A0)
	TST.L	D0
	BEQ.S	BUCONTROL

	MOVE.L	D0,-(SP)
	MOVE.L	D0,A1
	MOVE.L	$1C(A1),-(SP)
	MOVE.L	$14(A1),-(SP)

	MOVE.L	_GADTOOLSBASE,A6
	JSR	-$4E(A6)	; GT_ReplyIMsg(imsg)(A1)

	MOVEM.L	(SP)+,D0-D1/A1

	CMP.W	#$200,D0	; CloseGadget.
	BEQ	CONTROLNOGADS

	CMP.W	#$100,D0	; ¿Es Menú?
	BEQ	ESMENU

	CMP.W	#$010,D0	; ¿Es Slider?
	BEQ.S	ESGADGET

	CMP.W	#$040,D0	; ¿Es Gadget?
	BEQ.S	ESGADGET

	CMP.W	#$400,D0	; ¿Es Teclado?
	BEQ.S	EsTeclado

	BRA.S	BUCONTROL

	CNOP	0,4
EsTeclado:
	MOVEQ	#0,D1
	MOVE.W	ControlKeys,D1
	MOVE.B	$19(A1),D1	; Tecla.
	MOVE.L	4(SP),A1
	MOVE.L	-16(A1),D0
	BEQ.S	BUCONTROL	

	CMP.B	#$60,D1		; Shift Izquierdo Pulsado.
	BEQ.S	ShiftPul
	CMP.B	#$61,D1		; Shift Derecho Pulsado.
	BEQ.S	ShiftPul
	CMP.B	#$E0,D1		; Shift Izquierdo Soltado.
	BEQ.S	ShiftSol
	CMP.B	#$E1,D1		; Shift Derecho Soltado.
	BEQ.S	ShiftSol

	MOVE.L	D0,A1
EsTeclaBuc:
	CMP.L	#$100,(A1)
	BEQ.S	EsFullTecla
	TST.L	(A1)
	BMI	BUCONTROL
	CMP.L	(A1)+,D1
	ADDQ	#4,A1
	BNE.S	EsTeclaBuc

	MOVE.L	-4(A1),A1
	JSR	(A1)
	BRA	BUCONTROL

EsFullTecla:
	MOVE.L	4(A1),A1
	JSR	(A1)
	BRA	BUCONTROL


	CNOP	0,4
ShiftPul:
	BSET	#0,ControlKeys
	BRA	BUCONTROL
	CNOP	0,4
ShiftSol:
	BCLR	#0,ControlKeys
	BRA	BUCONTROL
; -=-=-

	CNOP	0,4
ESGADGET:
	MOVE.L	4(SP),A1	; Es Gadget.
	MOVE.L	8(SP),A0

	SUBQ.L	#4,A1
	MOVE.L	(A1),D0
	BMI.S	CONTROLNOGADS
	MOVE.L	#$FFFF,D2
CONBUCP:
	ADDQ.W	#1,D2
	CMP.L	(A0)+,D1
	DBEQ	D0,CONBUCP
	TST.W	D0
	BMI	BUCONTROL

	MOVE.L	(A1),D0
CONBUCP2:
	ADDQ.L	#4,A1
	TST.L	4(A1)
	BEQ	BUCONTROL
	CMP.L	(A1)+,D2
	DBEQ	D0,CONBUCP2
	TST.W	D0
	BMI	BUCONTROL

	MOVE.L	(A1),A1
	JSR	(A1)
	BRA	BUCONTROL

; -----------------------------------=> Vuelta al Control.
	CNOP	0,4
ControlRET:
	RTS
; -----------------------------------=> Salir del Control.
	CNOP	0,4
ControlSalir:
	ADD.W	#16,SP
	RTS
; -----------------------------------=> Usado por Subrutina Control-Gadgets
	CNOP	0,4
ControlNoGads:
	ADD.W	#12,SP
	RTS
; -----------------------------------

	CNOP	0,4
ESMENU:
	MOVE.L	$14(A1),D0
	MOVE.W	$18(A1),D1
	MOVE.L	$1C(A1),A0

	BFEXTU	D1{27:5},D2
	BFEXTU	D1{21:6},D3
	BFEXTU	D1{16:5},D4

	CMP.W	#$1F,D2
	BEQ	BUCONTROL
	MOVE.L	(PUNTEROSMENU.W,PC,D2.W*4),A0
	CMP.W	#$2F,D3
	BEQ	BUCONTROL
	CMP.W	#$1F,D4
	BEQ.S	EJECMENU
	MOVE.L	(A0,D3.W*4),A0
	MOVE.W	D4,D3
EJECMENU:
	JSR	([A0,D3.W*4])
	BRA	BUCONTROL


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


	CNOP	0,4
PunterosMenu:
	DC.L	MenuProject
	DC.L	MenuCartridges
	DC.L	MenuOptions
	DC.L	0,0

MenuProject:
	DC.L	About			; About
	DC.L	HelpPage		; Help Page
	DC.L	ControlRET		; -----
	DC.L	SubMenuScreen		; Menu Screen
	DC.L	ControlRET		; Cheat Mode
	DC.L	ControlRET		; -----
	DC.L	SubMenuVRAM		; Save VRAM
	DC.L	ControlRET		; -----
	DC.L	SavePrefs		; Save Prefs
	DC.L	ControlRET		; -----
	DC.L	ControlSalir		; Quit
	DC.L	ControlRET		; -----
SubMenuVRAM:
	DC.L	ControlRET		; Screen
	DC.L	ControlRET		; Strites
	DC.L	ControlRET		; -----
SubMenuScreen:
	DC.L	SETPAL			; Set PAL
	DC.L	SETNTSC			; Set NTSC
	DC.L	CONTROLRET
MenuCartridges:
	DC.L	Insert			; Insert Cartridge
	DC.L	Eject			; Eject  Cartridge
	DC.L	ControlRET		; -----
	DC.L	ControlRET		; Load Freezed
	DC.L	ControlRET		; Save Freezed
	DC.L	ControlRET		; -----
	DC.L	ControlRET		; Load RAM-Battery
	DC.L	ControlRET		; Save RAM-Battery
	DC.L	ControlRET		; -----
	DC.L	ControlRET		; Clear RAM-Battery
	DC.L	ControlRET		; -----
MenuOptions:
	DC.L	ControlRET		; JoyStick 2 ON
	DC.L	ControlRET		; Swap JoyPorts
	DC.L	ControlRET		; -----
	DC.L	ControlRET		; Black Border
	DC.L	ControlRET		; No illogical moves
	DC.L	ControlRET		; -----
	DC.L	ControlRET		; Auto-Load Battery
	DC.L	ControlRET		; Auto-Save Battery
	DC.L	ControlRET		; -----
	DC.L	ControlRET		; Ask for Reset
	DC.L	ControlRET		; Overwrite
	DC.L	ControlRET		; -----


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

	CNOP	0,8
MCEROS:	DS.L	16

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

; =------------------------------------------=> Datos de Ventanas:
	CNOP	0,4
	DC.L	0
	DC.L	NESWND
	DC.L	NESGADGETS
	DC.L	NES_CNT-1
NESPunts:
	DC.L	GD_Insert,Insert
	DC.L	GD_PowerON,PowerON
	DC.L	GD_Continue,Continue
	DC.L	GD_Exit,ControlSalir
	DC.L	GD_JoyType,ImpJoyType
	DC.L	GD_HelpPage,HelpPage
	DC.L	0,0

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

	DC.L	ImpErrorKeys
	DC.L	ImpErrorWND
	DC.L	ImpErrorGADGETS
	DC.L	ImpError_CNT-1
ImpErrorPunts:
	DC.L	GD_EContinue,ControlSalir
	DC.L	0,0
ImpErrorKeys:
	DC.L	$40,ControlSalir
	DC.L	-1,-1

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

	DC.L	HelpPageKeys
	DC.L	HelpPageWND
	DC.L	HelpPageGADGETS
	DC.L	HelpPage_CNT-1
HelpPagePunts:
	DC.L	GD_HPContinue,ControlSalir
	DC.L	0,0
HelpPageKeys:
	DC.L	$40,ControlSalir
	DC.L	-1,-1

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

	DC.L	AboutKeys
	DC.L	AboutWND
	DC.L	AboutGADGETS
	DC.L	About_CNT-1
AboutPunts:
	DC.L	GD_AboutCont,Address
	DC.L	GD_AboutExit,ControlSalir
	DC.L	0,0
AboutKeys:
	DC.L	$40,ControlSalir
	DC.L	-1,-1


	DC.L	AddressKeys
	DC.L	AddressWND
	DC.L	AddressGADGETS
	DC.L	Address_CNT-1
AddressPunts:
	DC.L	GD_AddressExit,ControlSalir
	DC.L	0,0
AddressKeys:
	DC.L	-1,-1

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

	CNOP	0,4
	DC.L	0
	DC.L	MC68020WND
	DC.L	MC68020GADGETS
	DC.L	MC68020_CNT-1
MC68020PUNTS:
	DC.L	GD_MagaContinue,CONTROLSALIR
	DC.L	GD_MagaexitWB,MC68020SALIR
	DC.L	0,0

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

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

	CNOP	0,8
DatsNESPic:
	DC.W	28,09
	DC.W	325,51
	DC.W	3
	DC.L	GGLogo
	DC.B	7,0
	DC.L	0

	CNOP	0,8
DatsJoyTypePic:
	DC.W	0,0
	DC.W	47,16
	DC.W	3
DirJoyTypePic:	DC.L	GBTeclado
	DC.B	7,0
	DC.L	0


; =------------------------------------------=> Include de GadToolsBox
	CNOP	0,8
	INCLUDE	"GadToolsBox/AmiNES_Emulator_v0.12.s"
; =------------------------------------------<=

; =------------------------------------------=> ¡Comienza la Acción!
	CNOP	0,8
NESEmul:
; =------------------------------------------<=

; =------------------------------------------=> Sección gráfica de prueba.
	IFND	NF_Menu
	SECTION	Gfx,data_c

	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

	ENDC
; =------------------------------------------<=
