Advertisement
Guest User

tile scroll

a guest
Jul 30th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. vwait:
  2.     ld a, (am_scrolling)
  3.     cp 1
  4.     jr nz, .noscroll
  5.      call scrollScreenRight
  6. .noscroll:
  7. IRQBuffer: ds 5
  8.  
  9. scroll_progress: ds 2, 0
  10. scroll_drawtarget: ds 2, 0
  11. scroll_inc: ds 1, 1
  12. am_scrolling: ds 1, 0
  13. rowbuffer: ds 22, 0
  14. newscreen_ofs: ds 1, 0
  15.  
  16. checkEdgeOfScreen:
  17.         ld a, (SPRITE_OAM+1)
  18.         cp 250
  19.         ret c
  20.          ld a, 3
  21.          ld (P_MOVESTATE), a ; 3 = 'pause'
  22.          ld a, 1
  23.          ld (am_scrolling), a ; 1 = true, so do nothing except call scroll_screen
  24.          ld hl, $1800
  25.          ld (scroll_drawtarget), hl
  26.          inc hl
  27.          ld (scroll_progress), hl  ; 1801
  28.          
  29.  
  30. scrollScreenRight:
  31.         di
  32.  
  33.         ld hl, rowbuffer
  34. .loop:
  35.         push hl         ; rowbuffer to stack
  36.         xor a           ; not above 2k! :)
  37.         out ($99), a    ; bits 14-16
  38.         ld a, 14+128    ; to r#14
  39.         out ($99), a    
  40.         ld hl, (scroll_progress)
  41.         ld a, l
  42.         out ($99), a        ; low byte
  43.         ld a, h             ; 1801
  44.         out ($99), a        ; bits 8-13, read
  45.         in a, ($98)
  46.         pop bc              ; rowbuffer to bc
  47.         push hl             ; progress to stack
  48.         push bc             ; rowbuffer to stack
  49.         pop hl              ; rowbuffer to hl
  50.         ld (hl), a          ; first tile done: to rowbuffer
  51.         pop hl              ; progress to hl
  52.         push bc             ; rowbuffer to stack
  53.         ld bc, $20        
  54.         add hl, bc        
  55.         ld a, h
  56.         cp $1b
  57.         jr z, .done
  58.         ld (scroll_progress), hl
  59.         pop hl              
  60.         inc hl            
  61.         jp .loop
  62. .done:
  63.         ld (scroll_progress), hl ; 1b01
  64.         ld hl, rowbuffer            
  65. .loop2:
  66.         ld de, (scroll_drawtarget) ; 1800
  67.         xor a
  68.         out ($99), a
  69.         ld a, 14+128
  70.         out ($99),a
  71.         ld a, e
  72.         out ($99), a  
  73.         ld a, d
  74.         or %01000000
  75.         out ($99), a    
  76.         ld a, (hl)
  77.         out ($98), a
  78.         inc hl
  79.         push hl      
  80.         ld hl, $20
  81.         add hl, de
  82.         ld (scroll_drawtarget), hl
  83.         ld a, h
  84.         cp $1b
  85.         jr z, .done2
  86.         pop hl        
  87.         jp .loop2
  88. .done2:
  89.         ld a, (scroll_inc)
  90.         cp 32                    
  91.        jr z, .shiftdone
  92.         ld hl, $1800
  93.         ld bc, (scroll_inc)        
  94.         add hl, bc
  95.         ld (scroll_drawtarget), hl
  96.         inc c
  97.         ld a, c
  98.         ld (scroll_inc), a        
  99.         inc hl
  100.         ld (scroll_progress), hl  
  101.         jp scrollScreenRight
  102. .shiftdone:
  103.         ld de, rowbuffer
  104.         ld hl, screen2
  105.         ld bc, (newscreen_ofs)
  106.         push bc                 ; ---------------------------------v
  107.         add hl, bc            
  108.         ld bc, 22
  109. .ldnewloop:
  110.         push bc
  111.         ld a, (hl)
  112.         ld (de), a
  113.         ld bc, $20
  114.         add hl, bc
  115.         inc de
  116.         pop bc
  117.         dec bc
  118.         jr z, .ldnewloop
  119.         pop hl                  ; ---------------------------------^
  120.         inc hl
  121.         ld (newscreen_ofs), hl  
  122.         ld de, rowbuffer
  123.         ld h, $18 + $40
  124.         ld l, $31
  125. .newrowdrawloop:
  126.         push hl
  127.         xor a
  128.         out ($99), a
  129.         ld a, 128+14
  130.         out ($99), a
  131.         ld a, l
  132.         out ($99), a
  133.         ld a, h
  134.         out ($99), a
  135.         push de
  136.         pop hl    
  137.         ld a, (hl)
  138.         out ($98), a  
  139.         ld bc, $20
  140.         pop hl          
  141.         inc de          
  142.         ld a, h
  143.         cp $5b
  144.         jr nz, .newrowdrawloop
  145.        ei
  146.        ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement