jetzt habe ich doch tatsächlich nach der langen Zeit noch einen relativ elementaren Fehler in der Routine gefunden, anbei jetzt der richtige Code:
Code: Alles auswählen
org 4096
dlist .by 117,117,117
.by 93,210,155
.by 93,0,156
.by 93,80,156
.by 93,160,156
.by 93,0,157
.by 93,80,157
.by 221,160,157
.by 93,0,158
.by 93,80,158
.by 93,160,158
.by 93,0,159
.by 93,80,159
.by 93,160,159
.by 93,0,160
.by 93,80,160
.by 93,160,160
.by 93,0,161
.by 93,80,161
.by 221,160,161
.by 93,0,162
.by 93,80,162
.by 93,160,162
.by 93,0,163
.by 93,80,163
.by 93,160,163
.by 93,0,164
.by 93,80,164
.by 93,160,164
.by 93,0,165
.by 93,80,165
.by 93,160,165
.by 93,0,166
.by 93,80,166
.by 93,160,166
.by 93,0,167
.by 93,80,167
.by 93,160,167
.by 93,0,168
.by 93,80,168
.by 93,160,168
.by 93,0,169
.by 93,80,169
.by 93,160,169
.by 93,0,170
.by 93,80,170
.by 93,160,170
.by 93,0,171
.by 93,80,171
.by 93,160,171
.by 93,0,172
.by 93,80,172
.by 93,160,172
.by 93,0,173
.by 93,80,173
.by 93,160,173
.by 93,0,174
.by 93,80,174
.by 93,160,174
.by 93,0,175
.by 93,80,175
.by 93,160,175
.by 93,0,176
.by 93,80,176
.by 93,160,176
.by 93,0,177
.by 93,80,177
.by 93,160,177
.by 93,0,178
.by 93,80,178
.by 93,160,178
.by 93,0,179
.by 93,80,179
.by 93,160,179
.by 93,0,180
.by 93,80,180
.by 93,160,180
.by 93,0,181
.by 93,80,181
.by 93,160,181
.by 93,0,182
.by 93,80,182
.by 93,160,182
.by 93,0,183
.by 93,80,183
.by 93,160,183
.by 93,0,184
.by 93,80,184
.by 93,160,184
.by 93,0,185
.by 93,80,185
.by 93,160,185
.by 93,0,186
.by 93,80,186
.by 93,160,186
.by 93,0,187
.by 93,80,187
.by 221,160,187
.by 65
.wo dlist
display = 228
display99 = 230
;------ Speicher und Variablen für Player allgemein ----------
display1 = 232
display2 = 234
display3 = 236
display199 = 238
display299 = 240
display399 = 242
tmp1 = 1000
tmp2 = 1001
tmp3 = 1002
tmp4 = 1003
tmp5 = 1004
tmp6 = 1005
tmp7 = 1006
tmp8 = 1007
tmp9 = 1008
displayzw = 1009
ystore = 1011
xstore = 1012
beweg = 1013
randomp .by 00
;------ Variablen für die Warteschleifen -----------------------
delay = 1020
schleife1 = 1021
schleife2 = 1022
;------ Variablen für Player1 ----------------------------------
zaehler1 = 1100
display11 = 1102
display21 = 1104
display31 = 1106
tmp11 = 1108
tmp21 = 1109
tmp31 = 1110
tmp41 = 1111
tmp51 = 1112
tmp61 = 1113
tmp71 = 1114
tmp81 = 1115
tmp91 = 1116
displayzw1 = 1117
ystore1 = 1118
xstore1 = 1119
;------ Variablen für Player2 ----------------------------------
zaehler2 = 1120
display12 = 1122
display22 = 1124
display32 = 1126
tmp12 = 1128
tmp22 = 1129
tmp32 = 1130
tmp42 = 1131
tmp52 = 1132
tmp62 = 1133
tmp72 = 1134
tmp82 = 1135
tmp92 = 1136
displayzw2 = 1137
ystore2 = 1138
xstore2 = 1139
;------ Variablen für Player3 ----------------------------------
zaehler3 = 1140
display13 = 1142
display23 = 1144
display33 = 1146
tmp13 = 1148
tmp23 = 1149
tmp33 = 1150
tmp43 = 1151
tmp53 = 1152
tmp63 = 1153
tmp73 = 1154
tmp83 = 1155
tmp93 = 1156
displayzw3 = 1157
ystore3 = 1158
xstore3 = 1159
;---------------------------------------------------------------
player11 .by 170,170,0
.by 42,170,128
.by 10,170,160
.by 2,170,168
player12 .by 85,85,0
.by 21,85,64
.by 5,85,80
.by 1,85,84
player13 .by 170,170,0
.by 42,170,128
.by 10,170,160
.by 2,170,168
maske11 .by 0,0,255
.by 192,0,63
.by 240,0,15
.by 252,0,3
maske12 .by 0,0,255
.by 192,0,63
.by 240,0,15
.by 252,0,3
maske13 .by 0,0,255
.by 192,0,63
.by 240,0,15
.by 252,0,3
bewegung1 .by 3,3,3,4,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,6,7,7,7,7,7,7,8,1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2
bewegung2 .by 5,5,5,5,5,5,5,5,5,5,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3
bewegung3 .by 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,5,5
.proc main
mwa #39936 display ;--- hier fängt die Bildschirmadresse an 0,156 = 256x156
mwa #30720 display99
mwa #dlist 560
ldx #0 ;Bildschirm füllen
ldy #0
@ inc randomp
lda randomp
sta tmp1
#if .byte tmp1>#40
;jmp @-
#end
sta (display),y
sta (display99),y
iny
bne @-
inc display+1
inc display99+1
clc
inx
cpx #31
bne @-
;-------------------- Variablen Player1 init ---------
mva #0 display11
mva #80 display21
mva #160 display31
lda #170
sta display11+1
sta display21+1
sta display31+1
mva #0 zaehler1
ldy #34
sty ystore1
;-------------------- Variablen Player2 init ---------
mva #0 display12
mva #80 display22
mva #160 display32
lda #173
sta display12+1
sta display22+1
sta display32+1
mva #0 zaehler2
ldy #44
sty ystore2
;-------------------- Variablen Player3 init ---------
mva #0 display13
mva #80 display23
mva #160 display33
lda #165
sta display13+1
sta display23+1
sta display33+1
mva #0 zaehler3
ldy #44
sty ystore3
;--------------------------Hauptprogramm----------------------------
loop
jsr player1
jsr player2
jsr player3
mva #4 delay
jsr warte2
jmp loop
.endp
;--------------------------Subroutinen------------------------------
.proc warte2
mva #0 schleife1
mva #0 schleife2
@ inc schleife1
#if .byte schleife1<#255
jmp @-
#end
mva #0 schleife1
inc schleife2
#if .byte schleife2<delay
jmp @-
#end
rts
.endp
.proc player1
mwa display11 display1
mwa display21 display2
mwa display31 display3
mva tmp11 tmp1
mva tmp21 tmp2
mva tmp31 tmp3
mva tmp41 tmp4
mva tmp51 tmp5
mva tmp61 tmp6
mva tmp71 tmp7
mva tmp81 tmp8
mva tmp91 tmp9
mva displayzw1 displayzw
mva ystore1 ystore
mva xstore1 xstore
ldx zaehler1
lda bewegung1,x
sta beweg
jsr player.bewegung
inc zaehler1
#if .byte zaehler1=#79
mva #0 zaehler1
#end
mwa display1 display11
mwa display2 display21
mwa display3 display31
mva tmp1 tmp11
mva tmp2 tmp21
mva tmp3 tmp31
mva tmp4 tmp41
mva tmp5 tmp51
mva tmp6 tmp61
mva tmp7 tmp71
mva tmp8 tmp81
mva tmp9 tmp91
mva displayzw displayzw1
mva ystore ystore1
mva xstore xstore1
#if .byte ystore1<=#0
jsr player.restore
mva #0 display11
mva #80 display21
mva #160 display31
lda #170
sta display11+1
sta display21+1
sta display31+1
mva #0 zaehler1
ldy #34
sty ystore1
#end
rts
.endp
.proc player2
mwa display12 display1
mwa display22 display2
mwa display32 display3
mva tmp12 tmp1
mva tmp22 tmp2
mva tmp32 tmp3
mva tmp42 tmp4
mva tmp52 tmp5
mva tmp62 tmp6
mva tmp72 tmp7
mva tmp82 tmp8
mva tmp92 tmp9
mva displayzw2 displayzw
mva ystore2 ystore
mva xstore2 xstore
ldx zaehler2
lda bewegung3,x
sta beweg
jsr player.bewegung
inc zaehler2
#if .byte zaehler2=#79
mva #0 zaehler2
#end
mwa display1 display12
mwa display2 display22
mwa display3 display32
mva tmp1 tmp12
mva tmp2 tmp22
mva tmp3 tmp32
mva tmp4 tmp42
mva tmp5 tmp52
mva tmp6 tmp62
mva tmp7 tmp72
mva tmp8 tmp82
mva tmp9 tmp92
mva displayzw displayzw2
mva ystore ystore2
mva xstore xstore2
#if .byte ystore2<=#0
jsr player.restore
mva #0 display12
mva #80 display22
mva #160 display32
lda #173
sta display12+1
sta display22+1
sta display32+1
mva #0 zaehler2
ldy #44
sty ystore2
#end
rts
.endp
.proc player3
mwa display13 display1
mwa display23 display2
mwa display33 display3
mva tmp13 tmp1
mva tmp23 tmp2
mva tmp33 tmp3
mva tmp43 tmp4
mva tmp53 tmp5
mva tmp63 tmp6
mva tmp73 tmp7
mva tmp83 tmp8
mva tmp93 tmp9
mva displayzw3 displayzw
mva ystore3 ystore
mva xstore3 xstore
ldx zaehler3
lda bewegung2,x
sta beweg
jsr player.bewegung
inc zaehler3
#if .byte zaehler3=#79
mva #0 zaehler3
#end
mwa display1 display13
mwa display2 display23
mwa display3 display33
mva tmp1 tmp13
mva tmp2 tmp23
mva tmp3 tmp33
mva tmp4 tmp43
mva tmp5 tmp53
mva tmp6 tmp63
mva tmp7 tmp73
mva tmp8 tmp83
mva tmp9 tmp93
mva displayzw displayzw3
mva ystore ystore3
mva xstore xstore3
#if .byte ystore3<=#0
jsr player.restore
mva #0 display13
mva #80 display23
mva #160 display33
lda #165
sta display13+1
sta display23+1
sta display33+1
mva #0 zaehler3
ldy #44
sty ystore3
#end
rts
.endp
.proc player
bewegung #if .byte beweg=#7
jsr player.nachlinks
#end
#if .byte beweg=#3
jsr player.nachrechts
#end
#if .byte beweg=#5
jsr player.nachunten
#end
#if .byte beweg=#1
jsr player.nachoben
#end
#if .byte beweg=#2
jsr player.nachoben
jsr player.nachrechts
#end
#if .byte beweg=#4
jsr player.nachunten
jsr player.nachrechts
#end
#if .byte beweg=#8
jsr player.nachoben
jsr player.nachlinks
#end
#if .byte beweg=#6
jsr player.nachunten
jsr player.nachlinks
#end
rts
nachoben
ldy ystore
ldx xstore
jsr restore
mva display1 displayzw
#if .byte displayzw=#160
mva #80 display1
mva #160 display2
dec display2+1
mva #0 display3
#end
#if .byte displayzw=#80
mva #0 display1
mva #80 display2
mva #160 display3
dec display3+1
#end
#if .byte displayzw=#0
mva #160 display1
dec display1+1
mva #0 display2
mva #80 display3
#end
ldy ystore
jsr store
ldy ystore
ldx xstore
jsr print
jsr store
rts
nachunten
ldy ystore
ldx xstore
jsr restore
mva display3 displayzw
#if .byte displayzw=#160
mva #0 display3
inc display3+1
mva #80 display1
mva #160 display2
#end
#if .byte displayzw=#0
mva #80 display3
mva #0 display2
inc display2+1
mva #160 display1
#end
#if .byte displayzw=#80
mva #160 display3
mva #80 display2
mva #0 display1
inc display1+1
#end
ldy ystore
ldy ystore
ldx xstore
jsr print
jsr store
rts
nachrechts
ldy ystore
ldx xstore
inx
inx
inx
stx xstore
#if .byte xstore=#12
ldx #0
stx xstore
jsr restore
mva tmp2 tmp1
mva tmp3 tmp2
mva tmp5 tmp4
mva tmp6 tmp5
mva tmp8 tmp7
mva tmp9 tmp8
inc ystore
ldy ystore
iny
iny
lda (display1),y
sta tmp3
clc
ldy ystore
iny
iny
lda (display2),y
sta tmp6
clc
ldy ystore
iny
iny
lda (display3),y
sta tmp9
ldy ystore
#end
jsr print
jsr store
#if .byte ystore=#45
dey
#end
rts
nachlinks
ldy ystore
ldx xstore
dex
dex
dex
stx xstore
#if .byte xstore=#253
ldx #9
stx xstore
jsr restore
mva tmp2 tmp3
mva tmp1 tmp2
mva tmp5 tmp6
mva tmp4 tmp5
mva tmp8 tmp9
mva tmp7 tmp8
dec ystore
ldy ystore
lda (display1),y
sta tmp1
clc
ldy ystore
lda (display2),y
sta tmp4
clc
ldy ystore
lda (display3),y
sta tmp7
ldy ystore
#end
jsr print
jsr store
#if .byte ystore=#1
iny
#end
rts
print ;Player printen + Fusion Bildschirm
lda tmp1
and maske11,x
eor player11,x
sta (display1),y
inx
iny
lda tmp2
and maske11,x
eor player11,x
sta (display1),y
inx
iny
lda tmp3
and maske11,x
eor player11,x
sta (display1),y
ldx xstore
clc
ldy ystore
lda tmp4
and maske12,x
eor player12,x
sta (display2),y
inx
iny
lda tmp5
and maske12,x
eor player12,x
sta (display2),y
inx
iny
lda tmp6
and maske12,x
eor player12,x
sta (display2),y
ldx xstore
clc
ldy ystore
lda tmp7
and maske13,x
eor player13,x
sta (display3),y
inx
iny
lda tmp8
and maske13,x
eor player13,x
sta (display3),y
inx
iny
lda tmp9
and maske13,x
eor player13,x
sta (display3),y
rts
store ;Bildschirm in tmp sichern
sec
lda display1+1
sbc #36
sta display199+1
sec
lda display2+1
sbc #36
sta display299+1
sec
lda display3+1
sbc #36
sta display399+1
mva display1 display199
mva display2 display299
mva display3 display399
ldy ystore
lda (display199),y
sta tmp1
iny
lda (display199),y
sta tmp2
iny
lda (display199),y
sta tmp3
clc
ldy ystore
lda (display299),y
sta tmp4
iny
lda (display299),y
sta tmp5
iny
lda (display299),y
sta tmp6
clc
ldy ystore
lda (display399),y
sta tmp7
iny
lda (display399),y
sta tmp8
iny
lda (display399),y
sta tmp9
rts
restore ;tmp in Bildschirm printen (restore)
lda tmp1
sta (display1),y
iny
lda tmp2
sta (display1),y
iny
lda tmp3
sta (display1),y
clc
ldy ystore
lda tmp4
sta (display2),y
iny
lda tmp5
sta (display2),y
iny
lda tmp6
sta (display2),y
clc
ldy ystore
lda tmp7
sta (display3),y
iny
lda tmp8
sta (display3),y
iny
lda tmp9
sta (display3),y
rts
.endp
run main