diff Examples/6502/run.tokio @ 0:cfb7c6b24319

Initial revision
author kono
date Thu, 30 Aug 2007 14:57:44 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Examples/6502/run.tokio	Thu Aug 30 14:57:44 2007 +0900
@@ -0,0 +1,91 @@
+/*
+
+	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).
+