05-23-2013, 06:18 PM
faster version, uses 9 bit rotation
this one takes 7 seconds to scroll 800 pixels
the previous one takes 23 seconds
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