OpenCores
URL https://opencores.org/ocsvn/igor/igor/trunk

Subversion Repositories igor

[/] [igor/] [trunk/] [microprogram_assembler/] [mc.lisp] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 atypic
;; veldig rask skisse til del av mikrokoden, med haugevis av mer eller
2
;; mindre dumme antagelser om hva som er tilgjengelig i språket
3
 
4
;; registers: pc, car/cdr, data/data-ext, state, stack-top, stack-op-start, op
5
 
6
(defconst state-value 0)
7
(defconst state-arglist 0)
8
(defconst state-apply 0)
9
 
10
(defconst op-none 0)
11
(defconst op-+ 1)
12
 
13
(defconst evaluation-start-address 0)
14
 
15
(init)
16
(main)
17
 
18
(defmcop init
19
  (mov stack-top stack-op-start)
20
  (imm-mov evaluation-start-address pc)
21
  (mov pc car)
22
  (imm-mov op-none op)
23
  (imm-mov value state))
24
 
25
(defmcop main
26
  (imm-eq? state-value state)
27
  (callt eval-value)
28
  (imm-eq? state-arglist state)
29
  (callt eval-arglist)
30
  (imm-eq? state-apply state)
31
  (callt apply-primitive)
32
  (jmp main))
33
 
34
(defmcop eval-value
35
  (load-double car data)
36
  (is-pair? data)
37
  (callf eval-atom)
38
  (callt eval-pair))
39
 
40
(defmcop eval-atom
41
  (push data) ;; assume all atoms are self-evaluating
42
  (imm-mov state-arglist state))
43
 
44
(defmcop eval-pair
45
  (push pc)
46
  (push op)
47
  (mov stack-top stack-op-start)
48
  (mov-double data car)
49
  (load car data)
50
  (mov data op)
51
  (imm-mov state-arglist state))
52
 
53
 
54
(defmcop eval-arglist
55
  (is-nil? cdr)
56
  (imm-jmpt at-end-of-list)
57
  (mov cdr pc)
58
  (load-double pc car)
59
  (imm-mov state-value state)
60
  (return)
61
  (label at-end-of-list)
62
  (imm-mov state-apply state))
63
 
64
 
65
(defmcop apply-primitive
66
  (imm-eq? op-+ op)
67
  (callt primitive-+)
68
  (jmpt apply-primitive-end)
69
  ;; more ops
70
 
71
  (label apply-primitive-end)
72
  (pop op)
73
  (pop pc)
74
  (push data)
75
  (imm-eq? op-none op)
76
  (callt happy-happy-joy-joy)
77
  (imm-mov state-arglist state)
78
  (load-double pc car))
79
 
80
 
81
(defmcop primitive-+
82
  (pop data)
83
  (label primitive-+-loop)
84
  (> stack-top stack-op-start)
85
  ;; todo
86
  )
87
 
88
(defmcop happy-happy-joy-joy
89
  (halt))

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.