OpenCores
URL https://opencores.org/ocsvn/rtf65002/rtf65002/trunk

Subversion Repositories rtf65002

[/] [rtf65002/] [trunk/] [software/] [asm/] [RandomLines.asm] - Rev 40

Compare with Previous | Blame | View Log

;--------------------------------------------------------------------------
; Draw random lines on the bitmap screen.
;--------------------------------------------------------------------------
;
message "RandomLines"
        align   8
public RandomLines:
        pha
        phx
        phy
        push    r4
        push    r5
        jsr             RequestIOFocus
        jsr             ClearScreen
        jsr             HomeCursor
        lda             #msgRandomLines
        jsr             DisplayStringB
        lda             #1
        sta             gr_cmd
rl5:
        tsr             LFSR,r1
        tsr             LFSR,r2
        tsr             LFSR,r3
        mod             r1,r1,#680
        mod             r2,r2,#384
        jsr             DrawPixel
        tsr             LFSR,r1
        sta             LineColor               ; select a random color
rl1:                                            ; random X0
        tsr             LFSR,r1
        mod             r1,r1,#680
rl2:                                            ; random X1
        tsr             LFSR,r3
        mod             r3,r3,#680
rl3:                                            ; random Y0
        tsr             LFSR,r2
        mod             r2,r2,#384
rl4:                                            ; random Y1
        tsr             LFSR,r4
        mod             r4,r4,#384
rl8:
        ld              r5,GA_STATE             ; make sure state is IDLE
        bne             rl8
        ld              r5,gr_cmd
        cmp             r5,#2
        bne             rl11
        jsr             DrawLine
        bra             rl12
rl11:
        cmp             r5,#1
        bne             rl13
        jsr             DrawPixel
        bra             rl12
rl13:
        cmp             r5,#4
        bne             rl12
        jsr             DrawRectangle
rl12:
        jsr             KeybdGetChar
        cmp             #CTRLC
        beq             rl7
        cmp             #'p'
        bne             rl9
        jsr             ClearBmpScreen
        lda             #1
        sta             gr_cmd
        bra             rl5
rl9:
        cmp             #'r'
        bne             rl10
        jsr             ClearBmpScreen
        lda             #4
        sta             gr_cmd
        bra             rl5
rl10
        cmp             #'l'
        bne             rl5
        jsr             ClearBmpScreen
        lda             #2
        sta             gr_cmd
        bra             rl5
rl7:
;       jsr             ReleaseIOFocus
        pop             r5
        pop             r4
        ply
        plx
        pla
        rts


msgRandomLines:
        db              CR,LF,"Random lines running - press CTRL-C to exit.",CR,LF,0

;--------------------------------------------------------------------------
; Draw a pixel on the bitmap screen.
; r1 = x coordinate
; r2 = y coordinate
; r3 = color
;--------------------------------------------------------------------------
message "DrawPixel"
DrawPixel:
        pha
        sta             GA_X0
        stx             GA_Y0
        sty             GA_PEN
        lda             #1
        sta             GA_CMD
        pla
        rts
comment ~
        pha
        phx
        mul             r2,r2,#680      ; y * 680
        add             r1,r1,r2        ; + x
        sb              r3,BITMAPSCR<<2,r1
        plx
        pla
        rts
~
;--------------------------------------------------------------------------
; Draw a line on the bitmap screen.
;--------------------------------------------------------------------------
;50 REM DRAWLINE
;100 dx = ABS(xb-xa)
;110 dy = ABS(yb-ya)
;120 sx = SGN(xb-xa)
;130 sy = SGN(yb-ya)
;140 er = dx-dy
;150 PLOT xa,ya
;160 if xa<>xb goto 200
;170 if ya=yb goto 300
;200 ee = er * 2
;210 if ee <= -dy goto 240
;220 er = er - dy
;230 xa = xa + sx
;240 if ee >= dx goto 270
;250 er = er + dx
;260 ya = ya + sy
;270 GOTO 150
;300 RETURN

message "DrawLine"
DrawLine:
        pha
        sta             GA_X0
        stx             GA_Y0
        sty             GA_X1
        st              r4,GA_Y1
        lda             LineColor
        sta             GA_PEN
        lda             #2
        sta             GA_CMD
        pla
        rts

DrawRectangle:
        pha
        sta             GA_X0
        stx             GA_Y0
        sty             GA_X1
        st              r4,GA_Y1
        lda             LineColor
        sta             GA_PEN
        lda             #4
        sta             GA_CMD
        pla
        rts

comment ~
        pha
        phx
        phy
        push    r4
        push    r5
        push    r6
        push    r7
        push    r8
        push    r9
        push    r10
        push    r11

        sub             r5,r3,r1        ; dx = abs(x2-x1)
        bpl             dln1
        sub             r5,r0,r5
dln1:
        sub             r6,r4,r2        ; dy = abs(y2-y1)
        bpl             dln2
        sub             r6,r0,r6
dln2:

        sub             r7,r3,r1        ; sx = sgn(x2-x1)
        beq             dln5
        bpl             dln4
        ld              r7,#-1
        bra             dln5
dln4:
        ld              r7,#1
dln5:

        sub             r8,r4,r2        ; sy = sgn(y2-y1)
        beq             dln8
        bpl             dln7
        ld              r8,#-1
        bra             dln8
dln7:
        ld              r8,#1

dln8:
        sub             r9,r5,r6        ; er = dx-dy
dln150:
        phy
        ldy             LineColor
        jsr             DrawPixel
        ply
        cmp             r1,r3           ; if (xa <> xb)
        bne             dln200          ;    goto 200
        cmp             r2,r4           ; if (ya==yb)
        beq             dln300          ;    goto 300
dln200:
        asl             r10,r9          ; ee = er * 2
        sub             r11,r0,r6       ; r11 = -dy
        cmp             r10,r11         ; if (ee <= -dy)
        bmi             dln240          ;     goto 240
        beq             dln240
        sub             r9,r9,r6        ; er = er - dy
        add             r1,r1,r7        ; xa = xa + sx
dln240:
        cmp             r10,r5          ; if (ee >= dx)
        bpl             dln150          ;    goto 150
        add             r9,r9,r5        ; er = er + dx
        add             r2,r2,r8        ; ya = ya + sy
        bra             dln150          ; goto 150

dln300:
        pop             r11
        pop             r10
        pop             r9
        pop             r8
        pop             r7
        pop             r6
        pop             r5
        pop             r4
        ply
        plx
        pla
        rts
~

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.