11#importonce
22.filenamespace c64lib
33
4+ / *
5+ * MOS 650X Vector table constants.
6+ * /
7+ .label NMI_LO = $ FFFA
8+ .label NMI_HI = $ FFFB
9+ .label RESET_LO = $ FFFC
10+ .label RESET_HI = $ FFFD
11+ .label IRQ_LO = $ FFFE
12+ .label IRQ_HI = $ FFFF
13+
414/ *
515 * Adds 16 bit number "value" to given memory cell specified by "low" address.
616 *
717 * MOD: A , C
818 * /
919.macro add16(value , low) {
10- clc
11- lda low
12- adc #<value
13- sta low
14- lda low + 1
15- adc #>value
16- sta low + 1
20+ clc
21+ lda low
22+ adc #<value
23+ sta low
24+ lda low + 1
25+ adc #>value
26+ sta low + 1
1727}
1828.assert "add16($0102, $A000)" , { :add16( $ 0102 , $ A000) } , {
19- clc ; lda $A000; adc #$02; sta $A000
20- lda $ A001 ; adc #$01; sta $A001
29+ clc ; lda $A000; adc #$02; sta $A000
30+ lda $ A001 ; adc #$01; sta $A001
2131}
22-
32+
2333/ *
2434 * Subtracts 16 bit number "value" from given memory cell specified by "low" address.
2535 *
2636 * MOD: A , C
2737 * /
2838.macro sub16(value , low) {
29- sec
30- lda low
31- sbc #<value
32- sta low
33- lda low + 1
34- sbc #>value
35- sta low + 1
39+ sec
40+ lda low
41+ sbc #<value
42+ sta low
43+ lda low + 1
44+ sbc #>value
45+ sta low + 1
3646}
3747.assert "sub16($0102, $A000)" , { :sub16( $ 0102 , $ A000) } , {
38- sec; lda $A000; sbc #$02; sta $A000
39- lda $ A001 ; sbc #$01; sta $A001
48+ sec; lda $A000; sbc #$02; sta $A000
49+ lda $ A001 ; sbc #$01; sta $A001
4050}
41-
51+
4252/ *
4353 * Adds value from "source" memory location to value in "destination" memory location.
4454 *
4555 * MOD: A , C
4656 * /
4757.macro addMem16(source , destination) {
48- clc
49- lda source
50- adc destination
51- sta destination
52- lda source + 1
53- adc destination + 1
54- sta destination + 1
58+ clc
59+ lda source
60+ adc destination
61+ sta destination
62+ lda source + 1
63+ adc destination + 1
64+ sta destination + 1
5565}
5666.assert "addMem16($A000, $B000)" , { :addMem16( $ A000 , $ B000) } , {
57- clc ; lda $A000; adc $B000; sta $B000
58- lda $ A001 ; adc $B001; sta $B001
67+ clc ; lda $A000; adc $B000; sta $B000
68+ lda $ A001 ; adc $B001; sta $B001
5969}
60-
70+
6171/ *
6272 * Subtracts value from "source" memory location from value in "destination" memory location.
6373 *
6474 * MOD: A , C
6575 * /
66- .macro subMem16(source , destination) {
67- sec
68- lda destination
69- sbc source
70- sta destination
71- lda destination + 1
72- sbc source + 1
73- sta destination + 1
76+ .macro subMem16(source , destination) {
77+ sec
78+ lda destination
79+ sbc source
80+ sta destination
81+ lda destination + 1
82+ sbc source + 1
83+ sta destination + 1
7484}
7585.assert "subMem16($A000, $B000)" , { :subMem16( $ A000 , $ B000) } , {
76- sec; lda $B000; sbc $A000; sta $B000
77- lda $ B001 ; sbc $A001; sta $B001
86+ sec; lda $B000; sbc $A000; sta $B000
87+ lda $ B001 ; sbc $A001; sta $B001
7888}
79-
89+
8090/ *
8191 * Shifts left 2 byte number specified with "low" address. Carry flag indicates last bit th at has been "shifted out" .
8292 *
8393 * MOD: A , C
8494 * /
8595.macro asl16(low) {
86- clc
87- asl low
88- bcc !+
89- lda low + 1
90- asl
91- ora #%1
92- sta low + 1
96+ clc
97+ asl low
98+ bcc !+
99+ lda low + 1
100+ asl
101+ ora #%1
102+ sta low + 1
93103!:
94104}
95105
99109 * MOD: A
100110 * /
101111.macro copyFast(source , destination , count) {
102- .for(var i = 0 ; i < count; i++) {
103- lda source + i
104- sta destination + i
105- }
112+ .for(var i = 0 ; i < count; i++) {
113+ lda source + i
114+ sta destination + i
115+ }
106116}
107117.assert "copyFast($A000, $B000, 0) copies nothing" , { :copyFast( $ A000 , $ B000 , 0 ) } , {}
108118.assert "copyFast($A000, $B000, 1) copies one byte" , { :copyFast( $ A000 , $ B000 , 1 ) } , {
109- lda $ A000 ; sta $B000
119+ lda $ A000 ; sta $B000
110120}
111121.assert "copyFast($A000, $B000, 2) copies two bytes" , { :copyFast( $ A000 , $ B000 , 2 ) } , {
112- lda $ A000 ; sta $B000
113- lda $ A001 ; sta $B001
122+ lda $ A000 ; sta $B000
123+ lda $ A001 ; sta $B001
114124}
115125
116126/ *
119129 * MOD: A , X
120130 * /
121131.macro fillScreen(address , value) {
122- lda #value
123- ldx #$ 00
132+ lda #value
133+ ldx #$ 00
124134loop :
125- sta address, x
126- sta address + $ 0100 , x
127- sta address + $ 0200 , x
128- sta address + $ 0300 , x
129- inx
130- bne loop
135+ sta address, x
136+ sta address + $ 0100 , x
137+ sta address + $ 0200 , x
138+ sta address + $ 0300 , x
139+ inx
140+ bne loop
131141}
132142
133143/ *
@@ -136,9 +146,9 @@ loop:
136146 * MOD: -
137147 * /
138148.macro inc16(destination) {
139- inc destination
140- bne !+
141- inc destination + 1
149+ inc destination
150+ bne !+
151+ inc destination + 1
142152!:
143153}
144154
@@ -148,8 +158,8 @@ loop:
148158 * MOD: A
149159 * /
150160.macro set8(value , mem) {
151- lda #value
152- sta mem
161+ lda #value
162+ sta mem
153163}
154164
155165/ *
@@ -158,22 +168,22 @@ loop:
158168 * MOD: A
159169 * /
160170.macro set16(value , mem) {
161- :set8(<value, mem)
162- :set8(>value, mem + 1 )
171+ :set8(<value, mem)
172+ :set8(>value, mem + 1 )
163173}
164174.assert "set16($1234, $A000) stores $34 under $A000 and $12 under $A001" , { :set16( $ 3412 , $ A000) } , {
165- lda #$ 12
166- sta $ A000
167- lda #$ 34
168- sta $ A001
175+ lda #$ 12
176+ sta $ A000
177+ lda #$ 34
178+ sta $ A001
169179}
170180
171181.macro copyWordIndirect(source , destinationPointer) {
172- ldy #0
173- lda source
174- sta (destinationPointer), y
175- iny
176- lda source + 1
177- sta (destinationPointer), y
178- }
179-
182+ ldy #0
183+ lda source
184+ sta (destinationPointer), y
185+ iny
186+ lda source + 1
187+ sta (destinationPointer), y
188+ }
189+
0 commit comments