Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Scrolling Tiles
#7
faster version, uses 9 bit rotation
this one takes 7 seconds to scroll 800 pixels
the previous one takes 23 seconds
Code:
DIM mapdata(63) AS UBYTE => {1,0,1,1,1,1,1,1,1,0,2,0,2,1,1,2,1,0,2,0,2,1,1,2,1,0,2,0,2,1,1,2,1,0,2,0,2,1,1,2,1,0,2,0,2,1,1,2,1,0,2,0,2,1,1,2,1,0,2,0,2,1,1,2}
DIM brick(7) AS UBYTE =>{249,249,0,159,159,0,249,249}
DIM crystal(7) AS UBYTE =>{16,40,84,40,84,40,16,0}
Dim LandscapeBANDS(7) AS UBYTE=>{1,2,4,8,16,32,64,128}
INK 2
PAPER 0



Dim LandscapeEightIter as Ubyte
Dim LandscapeIter as ubyte
Dim LineNumber as UByte
DIm NextGraphic as UByte
Dim address as UBYTE
Dim x as UINTEGER

for x=0 to 31
for y=0 to 23
Print AT y,x;"A"
next
next


Dim startaddress as UInteger

Function FASTCALL drawthis() as UBYTE
ASM
;LD A,255
;LD (__LABEL__iters),A
;iterloop:
LD A,7
LD (__LABEL__heightiter),A
LD HL,(__LABEL__startadr)
heightloop:
LD B,L
Ld A,(HL)
RLA
LD (HL),A
widthloop:
DEC L
Ld A,(HL)
RLA
LD (HL),A
djnz widthloop

LD A,31
LD L,A


INC H

LD A,(__LABEL__heightiter)
DEC A
LD (__LABEL__heightiter),A
CP 0
JP NZ,heightloop


;LD A,(__LABEL__iters)
;DEC A
;LD (__LABEL__iters),A
;CP 0
;jp nz,iterloop
END ASM
End Function




for x=0 to 800
drawthis()

'address=PEEK (UINTEGER,@adr)
'address=address+31


'CurrentGraphic=PEEK(UINTEGER,address)
'CurrentGraphic Or 1
'P''OKE UINTEGER address,CurrentGraphic

for LineNumber=0 to 7

CurrentGraphic=PEEK(UINTEGER,address)
if mapdata(LandscapeIter)=1
NextGraphic=brick(LineNumber)
GOTO 50
end if

if mapdata(LandscapeIter)=2
NextGraphic=crystal(LineNumber)
GOTO 50
end if

if mapdata(LandscapeIter)=0
NextGraphic=0
end if


50
'if LineNumber=0
if NextGraphic Band LandscapeBANDS(LandscapeEightIter)
POKE @bit0+LineNumber,1
else
POKE @bit0+LineNumber,0
end if
'GOTO 100
'end if


100
next

LandscapeEightIter=LandscapeEightIter+1
if LandscapeEightIter=8
LandscapeEightIter=0
LandscapeIter=LandscapeIter+1
end if

ASM
LD HL,(__LABEL__startadr)
LD A,31
LD L,A
LD A,(__LABEL__bit0)
CP 0
JP Z,dontset0
LD A,(HL)
OR 1
LD (HL),A
dontset0:

INC H
LD A,(__LABEL__bit1)
CP 0
JP Z,dontset1
LD A,(HL)
OR 1
LD (HL),A
dontset1:

INC H
LD A,(__LABEL__bit2)
CP 0
JP Z,dontset2
LD A,(HL)
OR 1
LD (HL),A
dontset2:

INC H
LD A,(__LABEL__bit3)
CP 0
JP Z,dontset3
LD A,(HL)
OR 1
LD (HL),A
dontset3:

INC H
LD A,(__LABEL__bit4)
CP 0
JP Z,dontset4
LD A,(HL)
OR 1
LD (HL),A
dontset4:
INC H
LD A,(__LABEL__bit5)
CP 0
JP Z,dontset5
LD A,(HL)
OR 1
LD (HL),A
dontset5:

INC H
LD A,(__LABEL__bit6)
CP 0
JP Z,dontset6
LD A,(HL)
OR 1
LD (HL),A
dontset6:

INC H
LD A,(__LABEL__bit7)
CP 0
JP Z,dontset7
LD A,(HL)
OR 1
LD (HL),A
dontset7:

END ASM



next
'Print "done"
'Print STR(178 Band 128)
STOP
adr:
ASM
defw 16384
END ASM

startadr:
ASM
defw 16384
END ASM
currentgraphic:
ASM
defb 0
END ASM
linestartadr:
ASM
defb 0
END ASM
bit0:
ASM
defb 0
END ASM

bit1:
ASM
defb 0
END ASM
bit2:
ASM
defb 0
END ASM
bit3:
ASM
defb 0
END ASM
bit4:
ASM
defb 0
END ASM
bit5:
ASM
defb 0
END ASM
bit6:
ASM
defb 0
END ASM
bit7:
ASM
defb 0
END ASM
heightiter:
ASM
defb 7
END ASM

iters:
ASM
defb 255
END ASM
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)