summaryrefslogtreecommitdiff
path: root/main.lisp
blob: e6280d5ff12101fda3afcf5f92b735a65da30ab4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
;; -*- mode: common-lisp -*-
#|
clasm-6502: An assembler for the 6502 written in Common Lisp.
Copyright (C) 2024  Aleksei Eaves

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
|#

#|
To solve the problem of the colliding syntax rules
We can test only the addressin modes we know the opcode to have
This not only solves this problem, it just makes more sense.
|#


(setf *the-program*
	  (program "~/clasm-6502/wozmon.s"))

(defun macro-list (program-list)
  "Create an associative list of program-list macros."
  (let ((return-alist nil))
	(dolist (i program-list)
	  (if (equal (syntax-rule (cadr i) *grammar*) 'macro)
		  (setf return-alist
				(cons (list (first (cadr i)) (car (last (cadr i))))
					  return-alist))
		  nil))
	return-alist))

*the-program*

(macro-list *the-program*)


(last (cadr '(100 ("Hey" "There"))))


(defun pass-attributes (program-list))