Advertisement
vito-Z80

Chess board (stack)

Jul 4th, 2020
2,674
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     device zxspectrum48
  2. ; Author: Serdjuk
  3. ; Assembly: sjasmplus
  4.  
  5.         org #6000
  6. start:
  7.     call spriteCreate
  8.     call createScreenLinesAddresses
  9.  
  10. mainLoop:
  11.     ei
  12.     halt
  13. spriteLines:
  14.     ld hl,spriteData
  15.     //  get sprite line
  16.     ld e,(hl)
  17.     inc l
  18.     ld d,(hl)
  19.     inc l
  20.     ld c,(hl)
  21.     inc l
  22.     ld b,(hl)
  23.     inc l
  24.     ld (spriteLines+1),hl   // save next sprite line address
  25.  
  26.     push bc
  27.     push de
  28.     exx
  29.     pop de
  30.     pop bc
  31.     ; invert sprite in alternative reg
  32.     ld a,e
  33.     cpl
  34.     ld e,a
  35.     ld a,d
  36.     cpl
  37.     ld d,a
  38.     ld a,c
  39.     cpl
  40.     ld c,a
  41.     ld a,b
  42.     cpl
  43.     ld b,a
  44.  
  45.     ld ix,linesTable
  46.     ld (saveSp),sp
  47.  
  48.     ld a,12
  49. full:
  50.     ex af,af
  51.     ld a,16
  52. block:
  53.     ld l,(ix)
  54.     ld h,(ix+1)
  55.     inc ix
  56.     inc ix
  57.     ld sp,hl
  58.     dup 8
  59.     push bc
  60.     push de
  61.     edup
  62.     dec a
  63.     jr nz,block
  64.     exx
  65.     ex af,af
  66.     dec a
  67.     jr nz,full
  68.     ld sp,(saveSp)
  69.     jr mainLoop
  70. saveSp: dw 0
  71. //----------sprite create---------------
  72. spriteCreate:
  73.     ld a,#FF
  74.     ld (#4002),a
  75.     ld (#4003),a
  76.     ld (#4006),a
  77.     ld (#4007),a
  78.     ld de,spriteData
  79.     ld a,32
  80. nextRL:
  81.     ld hl,#4000
  82.     ldi
  83.     ldi
  84.     ldi
  85.     ldi
  86.     ld l,7
  87.     ld b,l
  88.     inc b
  89. shiftLoop:
  90.     rl (hl)
  91.     dec l
  92.     djnz shiftLoop
  93.     dec a
  94.     jr nz,nextRL
  95.     ld hl,spriteData
  96.     ld de,spriteData+128
  97.     ld bc,128
  98.     ldir
  99.     ret
  100. //--------------------------------------------
  101. createScreenLinesAddresses:
  102.     ld de,#4000
  103.     ld hl,linesTable
  104.     ld b,192
  105. nextLineAddress:
  106.     ld (hl),e
  107.     inc hl
  108.     ld (hl),d
  109.     inc hl
  110. ; next screen line address
  111.         inc d
  112.         ld  a,d
  113.         and 7
  114.         jr  nz,$+12
  115.         ld  a,e
  116.         add a,32
  117.         ld  e,a
  118.         jr  c,$+6
  119.         ld  a,d
  120.         sub 8
  121.         ld  d,a
  122.         djnz nextLineAddress
  123.         ret
  124.  
  125. //--------------------------------------------
  126. endCode:    equ $
  127.     align 256
  128. spriteData:
  129.     db #0,#FF,#FF,#0
  130.     block 252,0
  131. linesTable:
  132.     block 384,0
  133. //--------------------------------------------
  134. endData:    equ $
  135.  
  136.  
  137.     display "size: ",/A, endCode - start
  138.  
  139.         savetap "main.tap",start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement