Skip to content

Commit 251d88a

Browse files
authored
[BASIC/BANNEX] new statements SPRITE, SPRMEM, MOVSPR (X16Community#199)
* [BASIC/BANNEK] new statements SPRITE, SPRMEM, MOVSPR * forgotten file
1 parent a441ad2 commit 251d88a

File tree

7 files changed

+246
-1
lines changed

7 files changed

+246
-1
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ BANNEX_SOURCES= \
189189
bannex/locate.s \
190190
bannex/dos.s \
191191
bannex/tile.s \
192-
bannex/x16edit.s
192+
bannex/x16edit.s \
193+
bannex/sprite.s
193194

194195
GENERIC_DEPS = \
195196
inc/kernal.inc \

bannex/main.s

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ rom_bank = 1
2222
.import dos_chkdosw
2323
.import tile
2424
.import x16edit
25+
.import movspr
26+
.import sprite
27+
.import sprmem
2528

2629
.segment "JMPTBL"
2730
jmp renumber ; $C000
@@ -37,3 +40,6 @@ rom_bank = 1
3740
jmp dos_chkdosw ; $C01E
3841
jmp tile ; $C021
3942
jmp x16edit ; $C024
43+
jmp movspr ; $C027
44+
jmp sprite ; $C02A
45+
jmp sprmem ; $C02D

bannex/sprite.s

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
.include "kernal.inc"
2+
.include "banks.inc"
3+
.include "io.inc"
4+
5+
.import bajsrfar
6+
.import chrgot
7+
.import chkcom
8+
.import frmadr
9+
.import getbyt
10+
.import fcerr
11+
12+
.importzp facho, poker
13+
.export sprite
14+
.export movspr
15+
.export sprmem
16+
17+
.macpack longbranch
18+
19+
.proc sprite: near
20+
jsr getbyt
21+
txa
22+
cmp #128
23+
jcs fcerr
24+
stz VERA_CTRL
25+
stz facho
26+
.repeat 3
27+
asl
28+
rol facho
29+
.endrepeat
30+
adc #(<VERA_SPRITES_BASE) + 6 ; byte 6 of sprite def
31+
sta VERA_ADDR_L
32+
lda #>VERA_SPRITES_BASE
33+
adc facho
34+
sta VERA_ADDR_M
35+
lda #(^VERA_SPRITES_BASE)
36+
sta VERA_ADDR_H
37+
jsr chkcom
38+
jsr getbyt ; priority (0 = off, 1-3 = priority)
39+
cpx #4
40+
jcs fcerr
41+
txa
42+
asl
43+
asl
44+
sta facho
45+
lda VERA_DATA0
46+
and #%11110011
47+
ora facho
48+
sta VERA_DATA0
49+
jsr chrgot ; next argument optional
50+
jeq done
51+
jsr chkcom ; comma
52+
jsr getbyt ; palette offset
53+
cpx #16
54+
jcs fcerr
55+
inc VERA_ADDR_L ; byte 7 of sprite def
56+
stx facho
57+
lda VERA_DATA0
58+
and #%11110000
59+
ora facho
60+
sta VERA_DATA0
61+
jsr chrgot ; next argument optional
62+
jeq done
63+
jsr chkcom ; comma
64+
jsr getbyt ; flips
65+
cpx #4
66+
jcs fcerr
67+
dec VERA_ADDR_L ; byte 6 of sprite def
68+
stx facho
69+
lda VERA_DATA0
70+
and #%11111100
71+
ora facho
72+
sta VERA_DATA0
73+
jsr chrgot ; next argument optional
74+
jeq done
75+
jsr chkcom ; comma
76+
jsr getbyt ; sprite width
77+
cpx #4
78+
jcs fcerr
79+
inc VERA_ADDR_L ; byte 7 of sprite def
80+
txa
81+
asl
82+
asl
83+
asl
84+
asl
85+
sta facho
86+
lda VERA_DATA0
87+
and #%11001111
88+
ora facho
89+
sta VERA_DATA0
90+
jsr chrgot ; next argument optional
91+
jeq done
92+
jsr chkcom ; comma
93+
jsr getbyt ; sprite height
94+
cpx #4
95+
jcs fcerr
96+
txa
97+
ror
98+
ror
99+
ror
100+
sta facho
101+
lda VERA_DATA0
102+
and #%00111111
103+
ora facho
104+
sta VERA_DATA0
105+
jsr chrgot ; next argument optional
106+
jeq done
107+
jsr chkcom ; comma
108+
jsr getbyt ; 4 or 8 bit (0 for 4, 1 for 8)
109+
cpx #2
110+
jcs fcerr
111+
txa
112+
ror
113+
ror
114+
sta facho
115+
lda VERA_ADDR_L
116+
sbc #5 ; back up 6 spots, carry clear
117+
sta VERA_ADDR_L
118+
lda VERA_DATA0
119+
and #%01111111
120+
ora facho
121+
sta VERA_DATA0
122+
clc
123+
done:
124+
lda VERA_DC_VIDEO
125+
and #$7f
126+
ora #%01000000
127+
sta VERA_DC_VIDEO
128+
rts
129+
.endproc
130+
131+
.proc movspr: near
132+
jsr getbyt
133+
txa
134+
cmp #128
135+
jcs fcerr
136+
stz VERA_CTRL
137+
stz facho
138+
.repeat 3
139+
asl
140+
rol facho
141+
.endrepeat
142+
adc #(<VERA_SPRITES_BASE) + 2 ; byte 2 of sprite def
143+
sta VERA_ADDR_L
144+
lda #>VERA_SPRITES_BASE
145+
adc facho
146+
sta VERA_ADDR_M
147+
lda #(^VERA_SPRITES_BASE) | $10 ; increment is fine
148+
sta VERA_ADDR_H
149+
.repeat 2 ; for X and then Y
150+
jsr chkcom
151+
jsr frmadr
152+
lda poker
153+
sta VERA_DATA0
154+
lda poker+1
155+
and #%00000011
156+
sta VERA_DATA0
157+
.endrepeat
158+
rts
159+
.endproc
160+
161+
.proc sprmem: near
162+
jsr getbyt
163+
txa
164+
cmp #128
165+
jcs fcerr
166+
stz VERA_CTRL
167+
stz facho
168+
.repeat 3
169+
asl
170+
rol facho
171+
.endrepeat
172+
adc #<VERA_SPRITES_BASE ; byte 0 of sprite def
173+
sta VERA_ADDR_L
174+
lda #>VERA_SPRITES_BASE
175+
adc facho
176+
sta VERA_ADDR_M
177+
lda #^VERA_SPRITES_BASE
178+
sta VERA_ADDR_H
179+
jsr chkcom
180+
jsr getbyt
181+
txa
182+
and #1 ; vram bank
183+
lsr
184+
php
185+
jsr chkcom
186+
jsr frmadr ; vram location
187+
plp
188+
ror poker+1
189+
lda poker
190+
ror
191+
.repeat 4
192+
lsr poker+1
193+
ror
194+
.endrepeat
195+
sta VERA_DATA0
196+
inc VERA_ADDR_L
197+
lda VERA_DATA0
198+
and #%10000000
199+
ora poker+1
200+
sta VERA_DATA0
201+
jsr chrgot
202+
jeq done
203+
jsr chkcom
204+
jsr getbyt
205+
cpx #2
206+
jcs fcerr
207+
txa
208+
ror
209+
ror
210+
sta facho
211+
lda VERA_DATA0
212+
and #%01111111
213+
ora facho
214+
sta VERA_DATA0
215+
done:
216+
rts
217+
.endproc

basic/token2.s

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ reslst3
122122
.byt "EXE", 'C' + $80
123123
.byt "TIL", 'E' + $80
124124
.byt "EDI", 'T' + $80
125+
.byt "SPRIT", 'E' + $80
126+
.byt "SPRME", 'M' + $80
127+
.byt "MOVSP", 'R' + $80
125128

126129
; add new statements before this line
127130

basic/tokens.s

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ stmdsp2 ; statements
143143
.word exec-1
144144
.word ctile-1
145145
.word cedit-1
146+
.word sprite-1
147+
.word sprmem-1
148+
.word movspr-1
146149
; functions
147150
ptrfunc .word vpeek
148151
.word mx

basic/x16additions.s

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,18 @@ exec:
927927
sta ram_bank
928928
rts
929929

930+
movspr:
931+
bannex_call bannex_movspr
932+
rts
933+
934+
sprite:
935+
bannex_call bannex_sprite
936+
rts
937+
938+
sprmem:
939+
bannex_call bannex_sprmem
940+
rts
941+
930942

931943
ctile:
932944
bannex_call bannex_tile

inc/bannex.inc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@ bannex_dos_clear_disk_status = $C01B
1212
bannex_dos_chkdosw = $C01E
1313
bannex_tile = $C021
1414
bannex_x16edit = $C024
15+
bannex_movspr = $C027
16+
bannex_sprite = $C02A
17+
bannex_sprmem = $C02D

0 commit comments

Comments
 (0)