Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .nolist
- #include "ti84pce.inc"
- .list
- .org UserMem-2
- .db tExtTok,tAsm84CeCmp
- call _RunIndicOff
- call CopyHL1555Palette
- ld hl, vRam
- ld de, vRam+1
- ld bc, 320*240-1
- ld (hl), 0
- ldir
- ld a, $27
- ld ($E30018), a
- ld hl, tc1
- ld (hl), 0
- inc hl
- ld bc, 20
- ld (hl), bc
- ld hl, tc2
- ld (hl), 15
- inc hl
- ld bc, 0
- ld (hl), bc
- ld hl, tc3
- ld (hl), 25
- inc hl
- ld bc, 35
- ld (hl), bc
- ld hl, tc1
- ld bc, tc2
- ld de, tc3
- ld a, $34
- call IRasterTriangle
- call _GetKey
- ld a, $2D
- ld ($E30018), a
- call _RunIndicOn
- call _DrawStatusBar
- call _ClrScrnFull
- ret
- CopyHL1555Palette:
- ld hl,$E30200 ; palette mem
- ld b,0
- _cp1555loop:
- ld d,b
- ld a,b
- and %11000000
- srl d
- rra
- ld e,a
- ld a,%00011111
- and b
- or e
- ld (hl),a
- inc hl
- ld (hl),d
- inc hl
- inc b
- jr nz,_cp1555loop
- ret
- tc1:
- .db 0
- .dl 0
- tc2:
- .db 0
- .dl 0
- tc3:
- .db 0
- .dl 0
- #define IRIS_fine_pxlcoverage
- #define IFramebuffer $E30014
- IRasterTriangle:
- ;.org IVRAM
- ld (IRasterRBG8), a
- ld a, (de)
- sub a, (hl)
- jr c, IRasterSwap0
- ex de, hl
- IRasterSwap0:
- ld a, (bc)
- sub a, (hl)
- jr nc, IRasterSwap1
- push hl
- or a, a
- sbc hl, hl
- add hl, bc
- pop bc
- IRasterSwap1:
- ld a, (de)
- sub a, (hl)
- jr nc, IRasterSwap2
- ex de, hl
- IRasterSwap2:
- ld a, (bc)
- sub (hl)
- ret z
- #ifdef IRIS_fine_pxlcoverage
- ld ix, $FF0000
- ld iy, $FF0000
- ld ixl, a
- neg
- ld (IDeltaY0), a
- ; x1-x0
- ld a, (de)
- ld (IValueY1), a
- sub (hl)
- push af
- ld iyl, a
- neg
- ld (IDeltaY1), a
- #else
- ld ix, $FFFFFF
- ld iy, $FFFFFF
- neg
- ld (IDeltaY0), a
- ld ixl, a
- ; x1-x0
- ld a, (de)
- ld (IValueY1), a
- sub (hl)
- push af
- neg
- ld (IDeltaY1), a
- ld iyl, a
- #endif
- ld a, (hl)
- push af
- push bc
- inc hl
- ld bc, (hl)
- ex de, hl
- inc hl
- ld hl, (hl)
- ld (IValueX1), hl
- jr z, IRasterNoEdgeWrite
- ld a, $13
- or a, a
- sbc hl, bc
- jr nc, IRasterEdge1
- #ifndef IRIS_fine_pxlcoverage
- ld iyl, $FF
- #endif
- or a, $08
- ex de, hl
- sbc hl, hl
- sbc hl, de
- IRasterEdge1:
- ld (IDeltaX1), hl
- ld (ISMC_Code1), a
- #ifdef IRIS_fine_pxlcoverage
- lea de, iy+0
- add hl, de
- ex de, hl
- sbc hl, hl
- ccf
- sbc hl, de
- sra h
- rr l
- ex de, hl
- ld iyh, d
- ld iyl, e
- #endif
- IRasterNoEdgeWrite:
- pop hl
- ; x2-x0
- inc hl
- ld hl, (hl)
- ld (IValueX2), hl
- ld a, $23 ; inc hl
- or a, a
- sbc hl, bc
- ; if x0>x1, edge goes to left
- jr nc, IRasterEdge0
- #ifndef IRIS_fine_pxlcoverage
- ld ixl, $FF
- #endif
- or a, $08 ; dec hl
- ; edge goes to left
- ex de, hl
- sbc hl, hl
- sbc hl, de
- IRasterEdge0:
- ld (IDeltaX0), hl
- ld (ISMC_Code0), a
- #ifdef IRIS_fine_pxlcoverage
- lea de, ix+0
- add hl, de
- ex de, hl
- sbc hl, hl
- ccf
- sbc hl, de
- sra h
- rr l
- ex de, hl
- ld ixh, d
- ld ixl, e
- #endif
- pop hl
- ld l, 160
- mlt hl
- add hl, hl
- add hl, bc
- ld de, (IFramebuffer)
- add hl, de
- ex de, hl
- sbc hl, hl
- add hl, de
- pop af
- call nz, IRasterTriangleInner
- ld a, (IDeltaY0) ; y2-y0
- ld c, a
- ld a, (IDeltaY1)
- sub c
- ret z
- push af
- #ifdef IRIS_fine_pxlcoverage
- ld iyl, a
- neg
- #else
- neg
- ld iyl, a
- #endif
- ld (IDeltaY1), a
- push hl
- IValueX2=$+1
- ld hl, $000000
- IValueX1=$+1
- ld bc, $000000
- or a, a
- sbc hl, bc
- ld a, $13
- ; if x0>x1, edge goes to left
- jr nc, IRasterEdge2
- #ifndef IRIS_fine_pxlcoverage
- ld iyl, $FF
- #endif
- or a, $08
- ex de, hl
- sbc hl, hl
- sbc hl, de
- IRasterEdge2:
- ld (IDeltaX1), hl
- ld (ISMC_Code1), a
- #ifdef IRIS_fine_pxlcoverage
- lea de, iy+0
- ld d, $00 ;compensate due to previous looping
- add hl, de
- ex de, hl
- sbc hl, hl
- sbc hl, de
- dec hl
- sra h
- rr l
- ex de, hl
- ld iyh, d
- ld iyl, e
- #endif
- IValueY1=$+1
- ld l, $00
- ld h, 160
- mlt hl
- add hl, hl
- add hl, bc
- ld de, (IFramebuffer)
- add hl, de
- ex de, hl
- pop hl
- ; ld a, (IDeltaY1)
- ; neg
- pop af
- IRasterTriangleInner:
- IDeltaX0=$+1
- ld bc, $000000
- add ix, bc
- jr nc, $+11
- IDeltaY0=$+1
- ld bc, $FFFF00
- ISMC_Code0=$
- nop
- add ix, bc
- jr c, $-3
- IDeltaX1=$+1
- ld bc, $000000
- add iy, bc
- jr nc, $+13
- IDeltaY1=$+1
- ld bc, $FFFF00
- ISMC_Code1=$
- nop
- add iy, bc
- jr c, $-3
- inc.s bc ;reset bcu set by restoring ld bc,$FFxxxx
- ; hl = adress1, de = adress2
- sbc hl, de
- jr c, IRasterInverted
- jr z, IRasterNoPixel
- ld b, h
- ld c, l
- ld hl, IRasterRBG8
- ldi
- jp po, IRasterContinue
- scf
- sbc hl, hl
- add hl, de
- push hl
- ldir
- pop hl
- ld c, 64
- inc b
- add hl, bc
- ex de, hl
- add hl, bc
- dec a
- jr nz,IRasterTriangleInner
- ret
- IRasterContinue:
- scf
- sbc hl, hl
- IRasterNoPixel:
- add hl, de
- ld bc, 320
- add hl, bc
- ex de, hl
- add hl, bc
- dec a
- jr nz,IRasterTriangleInner
- ret
- IRasterInverted:
- add hl, de
- ; hl --- de
- IRasterRBG8=$+1
- ld (hl), $00
- ex de, hl
- ; carry is set
- sbc hl, de
- ld b, h
- ld c, l
- add hl, de
- jr z, IRasterSize1
- push de
- sbc hl, hl
- add hl, de
- inc de
- ldir
- pop de
- IRasterSize1:
- inc hl
- ld c, 64
- inc b
- add hl, bc
- ex de, hl
- add hl, bc
- dec a
- jr nz, IRasterTriangleInner
- ret
Advertisement
Add Comment
Please, Sign In to add comment