Advertisement
king_of_hobbies

FadeToBlackZ80_V2

Oct 7th, 2022 (edited)
885
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Z80 Assembler 2.19 KB | Source Code | 0 0
  1. .model Spectrum128
  2. .org #8000
  3.  
  4. ; Fade to black
  5. ;
  6. ; Syntax for SpecNet IDE
  7. ; https://dotneteer.github.io/spectnetide/
  8.  
  9. SCREEN_START .equ 0x4000
  10. SCREEN_COLS  .equ 32
  11. SCREEN_ROWS  .equ 24
  12. SCREEN_ATTRIBUTES_COUNT .equ SCREEN_COLS * SCREEN_ROWS
  13. SCREEN_BITMAP_COUNT     .equ SCREEN_ATTRIBUTES_COUNT * 8
  14. SCREEN_ATTRIBUTES_START .equ SCREEN_START + SCREEN_BITMAP_COUNT
  15. INK_MASK    .equ %00000111
  16. PAPER_MASK  .equ %00111000
  17. BRIGHT_MASK .equ %01000000
  18. FLASH_MASK  .equ %10000000
  19. BRIGHT_FLASH_MASK .equ (BRIGHT_MASK | FLASH_MASK)
  20. BRIGHT_INK_MASK   .equ (BRIGHT_MASK | INK_MASK )
  21. BRIGHT_PAPER_MASK .equ (BRIGHT_MASK |PAPER_MASK )
  22.  
  23. ; Put some stuff on the screen to fade
  24.     ld hl, SCREEN_START
  25.     ld bc, SCREEN_BITMAP_COUNT / 2
  26.  
  27. Bitmap1:
  28.     ld a, %10101010
  29.     ld (hl), a
  30.     inc hl
  31.     ld a, %00111100
  32.     ld (hl), a
  33.     inc hl
  34.  
  35.     ; if bc != 0
  36.     dec bc
  37.     dec bc
  38.     xor a
  39.     or b
  40.     jr nz, Bitmap1
  41.     xor a
  42.     or c
  43.     jr nz, Bitmap1
  44.  
  45.     ld bc, SCREEN_BITMAP_COUNT / 2
  46. Bitmap2:
  47.     ld a, %01010101
  48.     ld (hl), a
  49.     inc hl
  50.     ld a, %11000011
  51.     ld (hl), a
  52.     inc hl
  53.  
  54.     ; if bc != 0
  55.     dec bc
  56.     dec bc
  57.     xor a
  58.     cp b
  59.     jr nz, Bitmap2
  60.     xor a
  61.     cp c
  62.     jr nz, Bitmap2
  63.  
  64.     ld hl, SCREEN_ATTRIBUTES_START
  65.     xor a
  66.     ld b, SCREEN_ATTRIBUTES_COUNT / 4
  67. Attr1:
  68.     dec a
  69.     ld d, a
  70.     and PAPER_MASK
  71.     ld (hl), a
  72.     inc hl
  73.     ld a, d
  74.     and INK_MASK
  75.     ld (hl), a
  76.     inc hl
  77.     ld a, d
  78.     and BRIGHT_PAPER_MASK
  79.     ld (hl), a
  80.     inc hl
  81.     ld a, d
  82.     and BRIGHT_INK_MASK
  83.     ld (hl), a
  84.     inc hl
  85.  
  86.     ; if b != 0
  87.     dec b
  88.     xor a
  89.     cp b
  90.     ld a, d
  91.     jr nz, Attr1
  92.  
  93. ; Fade to Black
  94.     ld d, 7
  95. FadeStart:
  96.     ld hl, SCREEN_ATTRIBUTES_START
  97.     ld bc, SCREEN_ATTRIBUTES_COUNT
  98. .loop 50 ; change to adjust rate
  99.     halt
  100. .endl
  101.  
  102. FadeScreen:
  103.     ld a, (HL)
  104.     exx
  105.  
  106.     ld b, a
  107.     ld c, a
  108.     ld e, a
  109.  
  110. ;   and BRIGHT_FLASH_MASK
  111.     and BRIGHT_MASK ; change to exclude flash attribute
  112.     ld b, a
  113.     ld a, c
  114.     and INK_MASK
  115.     jr z, ZeroInk
  116.     dec a
  117. ZeroInk:
  118.     ld e, a
  119.     ld a, c
  120.     and PAPER_MASK
  121.     jr z, ZeroPaper
  122.     sra a
  123.     sra a
  124.     sra a
  125.     jr z, ZeroPaper
  126.     dec a
  127.     sla a
  128.     sla a
  129.     sla a
  130. ZeroPaper:
  131.     or e
  132.     or b
  133.  
  134.     exx
  135.     ld (hl), a
  136.     inc hl
  137.  
  138. ; if bc != 0
  139.  
  140.     dec bc
  141.     xor a
  142.     cp b
  143.     jr nz, FadeScreen
  144.     xor a
  145.     cp c
  146.     jr nz, FadeScreen
  147.  
  148. ; if d == 0 end
  149.     dec d
  150.     xor a
  151.     cp d
  152.     jr nz, FadeStart
  153.  
  154.     ret
  155. s
Tags: z80
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement