Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- dim cadd = c
- dim badd = b
- dim fbyte = f
- dim radd = r
- dim wx = x
- dim wy = y
- COLUBK = $20
- COLUPF = $40
- main
- if joy0up then wy = (wy - 1) & 15 : gosub setup_addresses : goto scroll_up
- if joy0down then wy = (wy + 1) & 15 : gosub setup_addresses : goto scroll_down
- left_right
- if joy0right then wx = (wx + 1) & 127 : gosub setup_addresses : goto scroll_right
- if joy0left then wx = (wx - 1) & 127 : gosub setup_addresses : goto scroll_left
- draw
- drawscreen
- goto main
- scroll_up
- for p = 40 to 0 step -4
- var4[p]=var0[p]
- var5[p]=var1[p]
- var6[p]=var2[p]
- var7[p]=var3[p]
- next
- rem if badd, bit address is 0 then we're aligned
- rem no need to shift
- if !badd then gosub fill_top : goto left_right
- if badd > 3 then goto shift_top_right
- gosub fill_top
- fbyte = fill(4)
- for i = 1 to badd
- asm
- asl fbyte
- ror var3
- rol var2
- ror var1
- rol var0
- end
- next
- goto left_right
- shift_top_right
- fbyte = fill(0) : j = 8 - badd
- cadd = (cadd + 1) & 15 : gosub fill_top
- for i = 1 to j
- asm
- lsr fbyte
- ror var0
- rol var1
- ror var2
- rol var3
- end
- next
- goto left_right
- scroll_down
- for p = 0 to 40 step 4
- var0[p]=var4[p]
- var1[p]=var5[p]
- var2[p]=var6[p]
- var3[p]=var7[p]
- next
- rem current row + (11*16 bytes/row) to fill in the bottom
- radd = radd + 176
- rem if badd, thr bit address is 0 then we're aligned
- rem no need to shift
- if !badd then gosub fill_bot : goto left_right
- rem if badd > 3 then shifting right needs fewer shifts
- if badd > 3 then goto shift_bot_right
- gosub fill_bot
- fbyte = fill(4)
- for i = 1 to badd
- asm
- asl fbyte
- ror var47
- rol var46
- ror var45
- rol var44
- end
- next
- goto left_right
- shift_bot_right
- rem get the fill byte then bump the column to fill
- rem the line by shifting right
- fbyte = fill(0) : cadd = (cadd + 1) & 15 : j = 8 - badd
- gosub fill_bot
- for i = 1 to j
- asm
- lsr fbyte
- ror var44
- rol var45
- ror var46
- rol var47
- end
- next
- goto left_right
- scroll_left
- for i = 0 to 44 step 4
- fbyte = (i * 4 + radd) | cadd : fbyte = world[fbyte] & setbits[badd]
- if fbyte then fbyte = 1
- asm
- ldx i
- ror fbyte
- ror var0,x
- rol var0+1,x
- ror var0+2,x
- rol var0+3,x
- end
- next
- goto draw
- scroll_right
- rem the fill in pixel is the current wx + 31, 32 pixels/screen,
- rem wx is at screen 0
- fbyte = (wx + 31) & 127 : cadd = fbyte / 8 : badd = fbyte & 7
- for i = 0 to 44 step 4
- fbyte = (i * 4 + radd) | cadd : fbyte = world[fbyte] & setbits[badd]
- if fbyte then fbyte = 1
- asm
- ldx i
- ror fbyte
- ror var0+3,x
- rol var0+2,x
- ror var0+1,x
- rol var0,x
- end
- next
- goto draw
- setup_addresses
- cadd = wx / 8 : badd = wx & 7 : radd = wy * 4 * 4
- return
- fill_bot
- var44 = fill(0)
- var45 = fill(1) : var45 = rev(var45)
- var46 = fill(2)
- var47 = fill(3) : var47 = rev(var47)
- return
- fill_top
- var0 = fill(0)
- var1 = fill(1) : var1 = rev(var1)
- var2 = fill(2)
- var3 = fill(3) : var3 = rev(var3)
- return
- rem function fill
- rem asm
- rem clc
- rem adc cadd
- rem and #$0F
- rem adc radd
- rem tax
- rem lda world,x
- rem rts
- rem end
- rem adds the parameter to the (byte)column with
- rem wrapping and gets that byte in the current (world) row
- function fill()
- temp1 = ((temp1 + cadd) & 15) | radd
- temp1 = world[temp1]
- return
- function rev()
- temp2 = temp1 & $0F
- temp1 = temp1 / 16
- temp1 = revhi[temp2] | revlo[temp1]
- return
- data revhi
- $00, $80, $40, $C0, $20, $A0, $60, $E0
- $10, $90, $50, $D0, $30, $B0, $70, $F0
- end
- data revlo
- $00, $08, $04, $0C, $02, $0A, $06, $0E
- $01, $09, $05, $0D, $03, $0B, $07, $0F
- end
- data setbits
- $80, $40, $20, $10, $08, $04, $02, $01
- end
- data world
- %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111
- %10000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10000000, %00000000, %00000000, %00000000, %00000000, %00100000, %01000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10000011, %10000000, %00000000, %00000000, %10000000, %00100000, %10000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10000100, %10000000, %00000000, %00000000, %11000000, %00010001, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10001000, %10000000, %00000000, %00000001, %00100000, %00001010, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10010000, %10001000, %00000100, %00000010, %00010000, %00000100, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10011111, %10001000, %00000100, %00000100, %00001000, %00000100, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10000000, %10001000, %10000100, %00001000, %00000100, %00001000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10000000, %10001001, %01000100, %00010111, %11111110, %00001000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10000000, %10001010, %00100100, %00100000, %00000010, %00010000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10000000, %10001100, %00010100, %01000000, %00000010, %00100000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10000000, %00001000, %00001100, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10000000, %00000000, %00000100, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %10000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001
- %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111, %11111111
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement