view Examples/6502/run.tokio @ 4:f864bb4ba9a4 default tip

update tags
author convert-repo
date Fri, 07 Nov 2008 20:36:52 +0000
parents cfb7c6b24319
children
line wrap: on
line source

/*

	read intel hex data  from file

:10000000D8A201A00120090000E000D003C8986038
:10001000C000D006CAA0014C09008A488820090007
:05002000A868AACA60F7
:00000001FF

	write into internal memory. (assert )

	
*/


run0(Filename) :- 
	fname(Filename,".hex",Filename1),
	ld0(Filename1),!,
	*p := 0, *reset := 0, *s := 0, *b := 0, *so := 0, *y := 0, *x := 0,
	*dl := 0, *a := 0, *c := 0, *z := 0,
	*mem(hex("FFFC")) := 0, *mem(hex("FFFD")) := 0,
	*mem(hex("FFFE")) := 0, *mem(hex("FFFF")) := 0
	&&	run.
		
run(Filename) :- 
	fname(Filename,".hex",Filename1),
	ld0(Filename1),!,
	*p := 0,
	*reset := 0,
	*s := 0,
	*b := 0,
	*so := 0,
	*y := 0,
	*x := 0,
	*dl := 0,
	*a := 0,
	*c := 0,  *z := 0,
	*mem(hex("FFFC")) := 0,
	*mem(hex("FFFD")) := 0,
	*mem(hex("FFFE")) := 0,
	*mem(hex("FFFF")) := 0
	&&	X <- cputime, run, fin((
		X1 = cputime - X,nl,write(X1),nl)).
		

fname(Output,Option,Loutput) :-
	name(Output,L),append(L,Option,LC),name(Loutput,LC).

append([H|X],Y,[H|Z]) :- append(X,Y,Z).
append([],X,X) .

ld0(File) :- seeing(O),ld1(File,Lines),seen,see(O).

ld1(File,Lines) :-
%    abolish(mem,2),
    see(File), % nofileerrors,
    get0(Ch),lines(Ch),!,seen.
ld1(File,Lines) :- seen,  % fileerrors,
    !,fail.

lines(-1) :-!.
lines(26) :-!.
lines(58) :- !,
	get0(C),	count(N,[C|N],1,I),
	get0(C0),	count(N1,[C0|N1],3,Adr0),
	get0(C1),	count(N2,[C1|N2],1,Adr1),
	Adr = Adr1*65536+Adr0+I,
	data(I,Adr),
	get0(NNC),	lines(NNC).
lines(X) :- get0(C),lines(C).
	
count([],NC,0,I) :-!, hex(NC,I).
count([H|T],NC,N,I) :- N1 = N-1, get0(H),
	count(T,NC,N1,I).

hex(L,V) :- hex(L,V,0).

hex([],V,V) :-!.
hex([H|T],Y,V) :- H>47,H<58, !,V1 = V*16+H-48,hex(T,Y,V1).
hex([H|T],Y,V) :- H>64,H<71, !,V1 = V*16+H-65+10,hex(T,Y,V1).
hex([H|T],Y,V) :- H>96,H<103,!,V1 = V*16+H-97+10,hex(T,Y,V1).

data(0,_) :-!.
data(N,Adr) :-
	get0(C),count(T,[C|T],1,Data),
	Adr1 = Adr-N,
%	assert(mem(Adr1,Data)),
	*mem(Adr1) := Data,
	N1 = N-1,
	data(N1,Adr).