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