Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;------------------------------------
- ; tr1p1ea - 09/09/2013 (dd/mm/yyyy):
- ;------------------------------------
- ;---------------------------------------------------
- ; TI-84+CSE drawLine test
- ;---------------------------------------------------
- ;
- .nolist
- .define bcall(xxxx) rst 28h \ .dw xxxx
- .define userMemC $A60B
- .list
- .org userMemC-2
- .db $EF,$69
- Main:
- ld hl,$001F
- ld (lineColour),hl ; colour
- ld de,310 ; x0
- ld bc,10 ; y0
- ld hl,10 ; x1
- ld ix,230 ; y1
- call drawLine
- bcall($495D) ; getkey
- ret
- ; store these wherever
- lineColour:
- .dw 0
- xyinc:
- .dw 0
- xstart:
- .dw 0
- ystart:
- .dw 0
- drawLine:
- ; de = x0, bc = y0, hl = x1, ix = y1, iy = colour
- ;
- ld a,1
- ld (xyinc+0),a
- ld (xyinc+1),a ; x/y inc
- ld (xstart),de ; de = x0, hl = x1
- 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,$+13
- ld a,-1
- ld (xyinc+0),a ; x inc
- xor a
- sub e
- ld e,a
- sbc a,a
- sub d
- ld d,a ; de = -(x1 - x0)
- ld (ystart),bc ; bc = y0, ix = y1
- 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,$+13
- ld a,-1
- ld (xyinc+1),a ; y inc
- 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:
- push hl
- push de
- push bc
- ld hl,(xstart)
- ld de,(ystart)
- call drawPixel
- ld a,(xyinc+0)
- ld c,a
- rlca
- sbc a,a
- ld b,a
- add hl,bc
- ld (xstart),hl
- pop bc
- pop de
- pop hl
- add hl,bc
- or a
- sbc hl,de
- add hl,de
- jr c,$+23
- or a
- sbc hl,de
- push bc
- ld a,(xyinc+1)
- ld c,a
- rlca
- sbc a,a
- ld b,a
- push hl
- ld hl,(ystart)
- add hl,bc
- ld (ystart),hl
- pop hl
- pop bc
- 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:
- push hl
- push de
- push bc
- ld hl,(xstart)
- ld de,(ystart)
- call drawPixel
- ld a,(xyinc+1)
- ld c,a
- rlca
- sbc a,a
- ld b,a
- ex de,hl
- add hl,bc
- ld (ystart),hl
- pop bc
- pop de
- pop hl
- add hl,bc
- or a
- sbc hl,de
- add hl,de
- jr c,$+23
- or a
- sbc hl,de
- push bc
- ld a,(xyinc+0)
- ld c,a
- rlca
- sbc a,a
- ld b,a
- push hl
- ld hl,(xstart)
- add hl,bc
- ld (xstart),hl
- pop hl
- pop bc
- 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
- ld bc,320
- or a
- sbc hl,bc
- add hl,bc
- ret nc ; return if offscreen
- ex de,hl
- ld bc,240
- or a
- sbc hl,bc
- add hl,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,(lineColour+1) \ out ($11),a
- ld a,(lineColour+0) \ 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