Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- device zxspectrum48
- ; Author: Serdjuk
- ; Assembly: sjasmplus
- org #6000
- start:
- call spriteCreate
- call createScreenLinesAddresses
- mainLoop:
- ei
- halt
- spriteLines:
- ld hl,spriteData
- // get sprite line
- ld e,(hl)
- inc l
- ld d,(hl)
- inc l
- ld c,(hl)
- inc l
- ld b,(hl)
- inc l
- ld (spriteLines+1),hl // save next sprite line address
- push bc
- push de
- exx
- pop de
- pop bc
- ; invert sprite in alternative reg
- ld a,e
- cpl
- ld e,a
- ld a,d
- cpl
- ld d,a
- ld a,c
- cpl
- ld c,a
- ld a,b
- cpl
- ld b,a
- ld ix,linesTable
- ld (saveSp),sp
- ld a,12
- full:
- ex af,af
- ld a,16
- block:
- ld l,(ix)
- ld h,(ix+1)
- inc ix
- inc ix
- ld sp,hl
- dup 8
- push bc
- push de
- edup
- dec a
- jr nz,block
- exx
- ex af,af
- dec a
- jr nz,full
- ld sp,(saveSp)
- jr mainLoop
- saveSp: dw 0
- //----------sprite create---------------
- spriteCreate:
- ld a,#FF
- ld (#4002),a
- ld (#4003),a
- ld (#4006),a
- ld (#4007),a
- ld de,spriteData
- ld a,32
- nextRL:
- ld hl,#4000
- ldi
- ldi
- ldi
- ldi
- ld l,7
- ld b,l
- inc b
- shiftLoop:
- rl (hl)
- dec l
- djnz shiftLoop
- dec a
- jr nz,nextRL
- ld hl,spriteData
- ld de,spriteData+128
- ld bc,128
- ldir
- ret
- //--------------------------------------------
- createScreenLinesAddresses:
- ld de,#4000
- ld hl,linesTable
- ld b,192
- nextLineAddress:
- ld (hl),e
- inc hl
- ld (hl),d
- inc hl
- ; next screen line address
- inc d
- ld a,d
- and 7
- jr nz,$+12
- ld a,e
- add a,32
- ld e,a
- jr c,$+6
- ld a,d
- sub 8
- ld d,a
- djnz nextLineAddress
- ret
- //--------------------------------------------
- endCode: equ $
- align 256
- spriteData:
- db #0,#FF,#FF,#0
- block 252,0
- linesTable:
- block 384,0
- //--------------------------------------------
- endData: equ $
- display "size: ",/A, endCode - start
- savetap "main.tap",start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement