Mercurial > hg > Applications > Tokio
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 |