Minor correction, SIXPIC_FSR1 and 2 did not work. Now they do.
[sixpic.git] / cte.scm
blobd9167e00ee1d70716e5649fc3eedcdffcca2e154
1 (define (predefine-var id type adr)
2   (let* ((value
3           (new-value (list (make-byte-cell adr '() '()))))
4          (ast
5           (new-def-variable '() id '() type value '())))
6     ast))
8 (define (predefine-fun id type param-defs adr)
9   (let* ((value
10           (cond ((eq? type 'int)
11                  (new-value (list (make-byte-cell WREG '() '()))))
12                 ((eq? type 'void)
13                  (new-value '()))
14                 (else
15                  (error "unknown return type"))))
16          (params
17           (map (lambda (x)
18                  (predefine-var 'foo (car x) (cdr x)))
19                param-defs))
20          (ast
21           (new-def-procedure '() id '() type value params))
22          (entry
23           (asm-make-label id adr)))
24     (multi-link-parent! params ast)
25     (def-procedure-entry-set! ast entry)
26     ast))
28 (define (initial-cte) ;; TODO see what really has to be predefined
29   (list (predefine-var 'X 'int 5)
30         (predefine-var 'Y 'int 6)
31         (predefine-var 'Z 'int 7)
32         (predefine-fun 'FLASH_execute_erase
33                        'void
34                        '()
35                        #x1EE)
36         (predefine-fun 'FLASH_execute_write
37                        'void
38                        '()
39                        #x1F0)
40         (predefine-fun 'led_set
41                        'void
42                        (list (cons 'int WREG))
43                        #x1F2)
44         (predefine-fun 'irda_tx_wake_up
45                        'void
46                        '()
47                        #x1F4)
48         (predefine-fun 'irda_tx_raw
49                        'void
50                        (list (cons 'int WREG))
51                        #x1F6)
52         (predefine-fun 'irda_rx_raw
53                        'int
54                        '()
55                        #x1F8)
56         (predefine-fun 'sleep_mode
57                        'void
58                        '()
59                        #x1FA)
60         (predefine-fun 'exec_client
61                        'void
62                        '()
63                        #x1FC)))
65 (define (cte-extend cte bindings)
66   (append bindings cte))
68 (define (cte-lookup cte id)
69   (cond ((null? cte)
70          (error "undefined identifier" id))
71         ((eq? (def-id (car cte)) id)
72          (car cte))
73         (else
74          (cte-lookup (cdr cte) id))))