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

Initial revision
author kono
date Thu, 30 Aug 2007 14:57:44 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:cfb7c6b24319
1 /*
2
3 read intel hex data from file
4
5 :10000000D8A201A00120090000E000D003C8986038
6 :10001000C000D006CAA0014C09008A488820090007
7 :05002000A868AACA60F7
8 :00000001FF
9
10 write into internal memory. (assert )
11
12
13 */
14
15
16 run0(Filename) :-
17 fname(Filename,".hex",Filename1),
18 ld0(Filename1),!,
19 *p := 0, *reset := 0, *s := 0, *b := 0, *so := 0, *y := 0, *x := 0,
20 *dl := 0, *a := 0, *c := 0, *z := 0,
21 *mem(hex("FFFC")) := 0, *mem(hex("FFFD")) := 0,
22 *mem(hex("FFFE")) := 0, *mem(hex("FFFF")) := 0
23 && run.
24
25 run(Filename) :-
26 fname(Filename,".hex",Filename1),
27 ld0(Filename1),!,
28 *p := 0,
29 *reset := 0,
30 *s := 0,
31 *b := 0,
32 *so := 0,
33 *y := 0,
34 *x := 0,
35 *dl := 0,
36 *a := 0,
37 *c := 0, *z := 0,
38 *mem(hex("FFFC")) := 0,
39 *mem(hex("FFFD")) := 0,
40 *mem(hex("FFFE")) := 0,
41 *mem(hex("FFFF")) := 0
42 && X <- cputime, run, fin((
43 X1 = cputime - X,nl,write(X1),nl)).
44
45
46 fname(Output,Option,Loutput) :-
47 name(Output,L),append(L,Option,LC),name(Loutput,LC).
48
49 append([H|X],Y,[H|Z]) :- append(X,Y,Z).
50 append([],X,X) .
51
52 ld0(File) :- seeing(O),ld1(File,Lines),seen,see(O).
53
54 ld1(File,Lines) :-
55 % abolish(mem,2),
56 see(File), % nofileerrors,
57 get0(Ch),lines(Ch),!,seen.
58 ld1(File,Lines) :- seen, % fileerrors,
59 !,fail.
60
61 lines(-1) :-!.
62 lines(26) :-!.
63 lines(58) :- !,
64 get0(C), count(N,[C|N],1,I),
65 get0(C0), count(N1,[C0|N1],3,Adr0),
66 get0(C1), count(N2,[C1|N2],1,Adr1),
67 Adr = Adr1*65536+Adr0+I,
68 data(I,Adr),
69 get0(NNC), lines(NNC).
70 lines(X) :- get0(C),lines(C).
71
72 count([],NC,0,I) :-!, hex(NC,I).
73 count([H|T],NC,N,I) :- N1 = N-1, get0(H),
74 count(T,NC,N1,I).
75
76 hex(L,V) :- hex(L,V,0).
77
78 hex([],V,V) :-!.
79 hex([H|T],Y,V) :- H>47,H<58, !,V1 = V*16+H-48,hex(T,Y,V1).
80 hex([H|T],Y,V) :- H>64,H<71, !,V1 = V*16+H-65+10,hex(T,Y,V1).
81 hex([H|T],Y,V) :- H>96,H<103,!,V1 = V*16+H-97+10,hex(T,Y,V1).
82
83 data(0,_) :-!.
84 data(N,Adr) :-
85 get0(C),count(T,[C|T],1,Data),
86 Adr1 = Adr-N,
87 % assert(mem(Adr1,Data)),
88 *mem(Adr1) := Data,
89 N1 = N-1,
90 data(N1,Adr).
91