Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- drawLine:
- ; de = x0, bc = y0, hl = x1, ix = y1, iy = colour
- ;
- di
- exx
- ld bc,(1*256)+1 ; x/y inc
- exx
- push de ; de = x0, hl = x1
- exx
- pop hl
- exx
- ld a,h
- xor $80
- ld h,a
- ld a,d
- xor $80
- ld d,a
- or a
- sbc hl,de
- ld e,l
- ld d,h ; de = (x1 - x0)
- jr nc,$+12
- exx
- ld c,-1 ; x inc
- exx
- xor a
- sub e
- ld e,a
- sbc a,a
- sub d
- ld d,a ; de = -(x1 - x0)
- push bc ; bc = y0, ix = y1
- exx
- pop de
- exx
- push ix
- pop hl
- ld a,h
- xor $80
- ld h,a
- ld a,b
- xor $80
- ld b,a
- or a
- sbc hl,bc
- ld c,l
- ld b,h ; bc = (y1 - y0)
- jr nc,$+12
- exx
- ld b,-1 ; y inc
- exx
- xor a
- sub c
- ld c,a
- sbc a,a
- sub b
- ld b,a ; bc = -(y1 - y0)
- ld l,e
- ld h,d
- push bc
- ld a,h
- xor $80
- ld h,a
- ld a,b
- xor $80
- ld b,a
- or a
- sbc hl,bc
- pop bc
- ld hl,0 ; error
- jp c,drawLine_y
- drawLine_x:
- push de
- pop ix
- inc ix
- drawLineLoop_x:
- exx
- call drawPixel
- push bc
- ld a,c
- rlca
- sbc a,a
- ld b,a
- add hl,bc
- pop bc
- exx
- add hl,bc
- or a
- sbc hl,de
- add hl,de
- jr c,$+17
- or a
- sbc hl,de
- exx
- push bc
- ld a,b
- ld c,a
- rlca
- sbc a,a
- ld b,a
- ex de,hl
- add hl,bc
- ex de,hl
- pop bc
- exx
- dec ix
- ld a,ixl
- or ixh
- jr nz,drawLineLoop_x
- ret
- drawLine_y:
- push de
- ld e,c
- ld d,b
- pop bc
- push de
- pop ix
- inc ix
- drawLineLoop_y:
- exx
- call drawPixel
- push bc
- ld a,b
- ld c,a
- rlca
- sbc a,a
- ld b,a
- ex de,hl
- add hl,bc
- ex de,hl
- pop bc
- exx
- add hl,bc
- or a
- sbc hl,de
- add hl,de
- jr c,$+14
- or a
- sbc hl,de
- exx
- push bc
- ld a,c
- rlca
- sbc a,a
- ld b,a
- add hl,bc
- pop bc
- exx
- dec ix
- ld a,ixl
- or ixh
- jr nz,drawLineLoop_y
- ret
- drawPixel:
- ; hl = x, de = y, iy = colour
- ; needs re-writing
- ;
- bit 7,h
- ret nz ; return if negative
- bit 7,d
- ret nz ; return if negative
- push bc
- ld bc,320
- or a
- sbc hl,bc
- add hl,bc
- pop bc
- ret nc ; return if offscreen
- ex de,hl
- push bc
- ld bc,240
- or a
- sbc hl,bc
- add hl,bc
- pop bc
- ex de,hl
- ret nc ; return if offscreen
- push de
- push hl
- ld a,$52
- call setLCDRegister ; v-addr-start (x-start)
- ld a,$21
- call setLCDRegister ; x pos
- ld a,$53
- call setLCDRegister ; v-addr-end (x-end)
- ex de,hl
- ld a,$50
- call setLCDRegister ; h-addr-start (y-start)
- ld a,$20
- call setLCDRegister ; y pos
- inc hl
- ld a,$51
- call setLCDRegister ; h-addr-end (y-end)
- ld a,$22
- out ($10),a \ out ($10),a ; write data to GRAM
- ld a,iyh \ out ($11),a
- ld a,iyl \ out ($11),a
- pop hl
- pop de
- ret
- setLCDRegister:
- ; a = register
- ; hl = value
- out ($10),a \ out ($10),a
- ld a,h \ out ($11),a
- ld a,l \ out ($11),a
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement