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 8public RandomLines:phaphxphypush r4push r5jsr RequestIOFocusjsr ClearScreenjsr HomeCursorlda #msgRandomLinesjsr DisplayStringBlda #1sta gr_cmdrl5:tsr LFSR,r1tsr LFSR,r2tsr LFSR,r3mod r1,r1,#680mod r2,r2,#384jsr DrawPixeltsr LFSR,r1sta LineColor ; select a random colorrl1: ; random X0tsr LFSR,r1mod r1,r1,#680rl2: ; random X1tsr LFSR,r3mod r3,r3,#680rl3: ; random Y0tsr LFSR,r2mod r2,r2,#384rl4: ; random Y1tsr LFSR,r4mod r4,r4,#384rl8:ld r5,GA_STATE ; make sure state is IDLEbne rl8ld r5,gr_cmdcmp r5,#2bne rl11jsr DrawLinebra rl12rl11:cmp r5,#1bne rl13jsr DrawPixelbra rl12rl13:cmp r5,#4bne rl12jsr DrawRectanglerl12:jsr KeybdGetCharcmp #CTRLCbeq rl7cmp #'p'bne rl9jsr ClearBmpScreenlda #1sta gr_cmdbra rl5rl9:cmp #'r'bne rl10jsr ClearBmpScreenlda #4sta gr_cmdbra rl5rl10cmp #'l'bne rl5jsr ClearBmpScreenlda #2sta gr_cmdbra rl5rl7:; jsr ReleaseIOFocuspop r5pop r4plyplxplartsmsgRandomLines: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:phasta GA_X0stx GA_Y0sty GA_PENlda #1sta GA_CMDplartscomment ~phaphxmul r2,r2,#680 ; y * 680add r1,r1,r2 ; + xsb r3,BITMAPSCR<<2,r1plxplarts~;--------------------------------------------------------------------------; 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 RETURNmessage "DrawLine"DrawLine:phasta GA_X0stx GA_Y0sty GA_X1st r4,GA_Y1lda LineColorsta GA_PENlda #2sta GA_CMDplartsDrawRectangle:phasta GA_X0stx GA_Y0sty GA_X1st r4,GA_Y1lda LineColorsta GA_PENlda #4sta GA_CMDplartscomment ~phaphxphypush r4push r5push r6push r7push r8push r9push r10push r11sub r5,r3,r1 ; dx = abs(x2-x1)bpl dln1sub r5,r0,r5dln1:sub r6,r4,r2 ; dy = abs(y2-y1)bpl dln2sub r6,r0,r6dln2:sub r7,r3,r1 ; sx = sgn(x2-x1)beq dln5bpl dln4ld r7,#-1bra dln5dln4:ld r7,#1dln5:sub r8,r4,r2 ; sy = sgn(y2-y1)beq dln8bpl dln7ld r8,#-1bra dln8dln7:ld r8,#1dln8:sub r9,r5,r6 ; er = dx-dydln150:phyldy LineColorjsr DrawPixelplycmp r1,r3 ; if (xa <> xb)bne dln200 ; goto 200cmp r2,r4 ; if (ya==yb)beq dln300 ; goto 300dln200:asl r10,r9 ; ee = er * 2sub r11,r0,r6 ; r11 = -dycmp r10,r11 ; if (ee <= -dy)bmi dln240 ; goto 240beq dln240sub r9,r9,r6 ; er = er - dyadd r1,r1,r7 ; xa = xa + sxdln240:cmp r10,r5 ; if (ee >= dx)bpl dln150 ; goto 150add r9,r9,r5 ; er = er + dxadd r2,r2,r8 ; ya = ya + sybra dln150 ; goto 150dln300:pop r11pop r10pop r9pop r8pop r7pop r6pop r5pop r4plyplxplarts~
