SSD1306 INCLUDE for PBP3


Results 1 to 40 of 102

Threaded View

  1. #13
    Join Date
    May 2013
    Location
    australia
    Posts
    2,656


    Did you find this post helpful? Yes | No

    Default Re: SSD1306 INCLUDE for PBP3

    BEFORE AFTER EXAMPLE

    Code:
    '//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0
    '//MikroElektrnika 2011 
    '//http://www.mikroe.com 
    
    
    '//GLCD FontName : pawns16x12
    '//GLCD FontSize : 16 x 12
    
    
    'const unsigned short pawns16x12[] = {
    '   0x00,
    '   0x00,
    '   0x41,0x00,
    '   0x44,0x00,
    '   0x0C,
    '   0x00,
    '   0x10,0x18,0x00,0x00,
    '   0x0D,0x30,0x00,0x00,
    '   0x0D,0x48,0x00,0x00,
    '   0x0D,0x60,0x00,0x00,
    '   0x00,0x00,0x80,0x03,0x80,0x0F,0xC0,0x1F,0xC0,0x1F,0xE0,0x07,0x30,0x04,0x1C,0x0C,0x04,0x18,0x04,0x30,0x02,0x60,0x03,0xC0, // Code for char num 65
    '   0xF0,0x00,0x10,0x03,0x10,0x0D,0x10,0x19,0x10,0x11,0x30,0x17,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Code for char num 66
    '   0x00,0x00,0x00,0x00,0xC0,0x0F,0x60,0x18,0x60,0x10,0xD0,0x1F,0x10,0x00,0x70,0x02,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00, // Code for char num 67
    '   0x00,0x00,0x80,0x01,0x80,0x00,0x80,0x1C,0x00,0x15,0x00,0x1F,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 // Code for char num 68
    '        };
    
    
    
    
    '//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0
    '//MikroElektrnika 2011 
    '//http://www.mikroe.com 
    
    
    '//GLCD FontName : pawns16x12
    '//GLCD FontSize : 16 x 12
    
    
    'const unsigned short pawns16x12[] = {
    goto overpawns
    pawns:  
     @ DB 0x00,0x00
     @ DB 0X41,0x00
     @ DB 0X44,0x00
     @ DB 0X0C,0x00
     @ DB 0X10,0x18,0x00,0x00
     @ DB 0X0D,0x30,0x00,0x00
     @ DB 0X0D,0x48,0x00,0x00
     @ DB 0X0D,0x60,0x00,0x00
     @ DB 0X00,0x00,0x80,0x03,0x80,0x0F,0xC0,0x1F,0xC0,0x1F,0xE0,0x07,0x30,0x04,0x1C,0x0C,0x04,0x18,0x04,0x30,0x02,0x60,0x03,0xC0' // Code for char num 65
     @ DB 0XF0,0x00,0x10,0x03,0x10,0x0D,0x10,0x19,0x10,0x11,0x30,0x17,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00' // Code for char num 66
    
    
    
     @ DB 0X00,0x00,0x00,0x00,0xC0,0x0F,0x60,0x18,0x60,0x10,0xD0,0x1F,0x10,0x00,0x70,0x02,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00' // Code for char num 67
     @ DB 0X00,0x00,0x80,0x01,0x80,0x00,0x80,0x1C,0x00,0x15,0x00,0x1F,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00' // Code for char num 68
    overpawns:

    ps , for a chess board all chrs need to be same size , the font creator will optimize the shit out of your creations it hates blank columns on either edge
    its a battle of wits .

    this ver may make fonts easier to but up to each other
    Code:
    '*******************************************************************
    '*  Name    : grx.pbpmod                                           *
    '*  Author  : richard                                              *
    '*  Notice  : Copyright (c) 2021                                   *
    '*          :                                                      *
    '*  Date    : 21/11/2021                                           *
    '*  Version : 1.0B      ;BMP ADDED                                 *
    '*  Notes   : generic graphics suite for pic18                     *
    '*          : 1 bit /pixel/colour                                  *
    '*          : uses variable width fonts up to 23 bits wide         * 
    '*          : Generated by MikroElektronika GLCD Font Creator      * 
    '*          :                                                      *
    '*          :                                                      *
    '*******************************************************************
    
    
    ;    TO MAKE AUTO FLIP  OF DISP USE
    '    #DEFINE DISPFLIP    1  
    '    #DEFINE colours 3   ;1 mono 2 rg or 3 rgb
    '    width  con 64       
    '    height con 16        
      
    
    
    ;buffers
            fbr    var byte[width/8 * height]   ;frame buffer r   4x8x16 pixels  row  0 to 31  col 0 to 15
            black   con 0
            red     con 1
        #if colours =  3 
          
            ;buffers
            fbb    var byte[width/8 * height]   ;frame buffer b   4x8x16 pixels  row  0 to 31  col 0 to 15
            fbg    var byte[width/8 * height]   ;frame buffer g   4x8x16 pixels  row  0 to 31  col 0 to 15
            ccc     con 3
            green   con 2
            yellow  con 3
            blue    con 4
            purple  con 5
            aqua    con 6
            white   con 7    
        #endif
        #if  colours = 2 
            
            ;buffers
            fbg    var byte[width/8 * height]   ;frame buffer g   4x8x16 pixels  row  0 to 31  col 0 to 15
            ccc     con 2 
            green   con 2
            yellow  con 3 
        #endif
        #if  colours = 1
            ccc     con 1  
        #endif
        
        
         
        dmd_bigaddress var byte[3] BANK0   ;ALLOWS 128K SAFE CONST STRS
        fbsb   var byte[width/8 * height  * ccc ] ;output buffer in scan order
        fpx	  var byte       ;work regs 
        tmp   var word       ;work regs 
    ' -----------    General use variables used -------------------
        gl_x     	var byte	   
        gl_y	 	var byte	   
        gl_i	 	var	word       ' General loop counter
        gl_l	 	var word       ' used in Line subroutine 
        gl_m	 	var word       ' used in Line subroutine 
        gl_byte		var	BYTE	   ' Graphic byte                                                                                  
        gl_char		var BYTE	   ' Text byte
        g_char      var BYTE
    ' ----- Circle constants and variables
        gl_pi			con	2	       
        glc_x			var word	   ' Calculation var
        glc_y			var word	   ' Calculation var
        glc_s			var WORD	   ' Slope
        glc_cx		    var word	   ' Center x
        glc_cy  		var word	   ' Center y
        glc_r			var word	   ' Radius
        g_num			var WORD
    ' -----  Line variables  
        gl_x1			var	BYTE
        gl_x2			var	BYTE
        gl_y1			var	BYTE
        gl_y2			var	BYTE
        gl_inc1		    var	WORD
        gl_inc2		    var	WORD
    ' ----- Chart Variables
        s_xstart	  var BYTE
        s_xend        var BYTE
        s_ystart      var BYTE
        s_yend        var BYTE
    '    s_tick        var BYTE
     
        
    ;cga stuff
        fontaddr        	var WORD      ;work regs 
        foffset             var WORD      ;work regs 
        f_start             var WORD      ;work regs 
        f_end               var WORD      ;work regs 
        f_height            var WORD      ;work regs 
        fw                  VAR BYTE      ;work regs   width of last chr
        fchb                var byte[4]   ;work regs 
        fchd                var byte[4]   ;work regs 
        fbp                 VAR BYTE      ;work regs 
        fbo                 var WORD      ;work regs 
        fbc                 VAR BYTE      ;work regs 
        hght                VAR BYTE      ;work regs 
        fbrow               VAR BYTE      ;work regs
        fbrc                var byte      ;work regs
        fbfp                VAR BYTE      ;work regs
        fbbpr               VAR BYTE      ;work regs
        fbscn               VAR word      ;work regs
        fbinx               VAR BYTE      ;work regs
        fbpx                VAR word      ;work regs
        dssh                VAR BYTE      ;work regs
        x0                  var BYTE      ;work regs
        x1                  var BYTE      ;work regs
        y0                  var BYTE      ;work regs
        y1                  var BYTE      ;work regs
        BMPLABEL            VAR word EXT
    ;user
        fx                  VAR BYTE 
        fy                  VAR BYTE 
        fch                 VAR BYTE
        colour              VAR BYTE      ;0-7
        bgcolour            VAR BYTE      ;0-7
        
    @BMPLABEL=  _dmd_bigaddress
        
     goto Jumpover_grx_Lib
     
     
     
      USERCOMMAND "SETFONT"     ;font must be located in first 64k block
      USERCOMMAND "FILLRECT"    ;X,Y,W,H
      USERCOMMAND "DRAWRECT"    ;X,Y,W,H
      USERCOMMAND "DMDSTR"      ;{X,Y},{buffer|const str}, {colour} is 128k safe
      USERCOMMAND "DRAWLINE"    ;X1,Y1,X2,Y2 , {colour}
      USERCOMMAND "DRAWCIRCLE"  ;X,Y,R
      USERCOMMAND "DMDBMP"      ;X,Y,LABEL
    
    
     
    
    
    
    
    sfnt: 
        readcode fontaddr + 2,f_start   
        readcode fontaddr + 4,f_end 
        readcode fontaddr + 6,f_height 
    return 
    
    
    flip:
        fbpx = width/8 * height - 1
        while fbpx >width/8 * height/2-1
             #if colours =  2 
            fbscn = fbg[fbpx]  rev 8
            #endif
            fbrc = fbr[fbpx]   rev 8
            #if colours =  3 
                fbrow = fbb[fbpx]  rev 8
            #endif
             #if colours =  2 
            fbg[fbpx] = fbg[width/8 * height - 1 - fbpx]   rev 8
            #endif
            fbr[fbpx] = fbr[width/8 * height - 1 - fbpx]   rev 8
            #if colours =  3 
                fbb[fbpx] = fbb[width/8 * height - 1 - fbpx]   rev 8 
            #endif
             #if colours =  2 
            fbg[width/8 * height - 1 - fbpx] = fbscn
            #endif
            fbr[width/8 * height - 1 - fbpx] = fbrc
            
            #if colours =  3 
                fbb[width/8 * height - 1 - fbpx] = fbrow
            #endif
            fbpx = fbpx - 1
        wend
    return
    
    
    drawch:   ;set fw to -1 if chr out of range or width of chr if successful
     ; needs h/w check
        fw=-1
        if ((fch<f_start)||(fch>f_end)) then return
        readcode fontaddr + (Fch - f_start)*4 + 8 ,fw
        readcode fontaddr + (Fch - f_start)*4 + 9 ,foffset
        if (fx+fw) > width then 
         fw=-1
         return
        endif
        for dssh = 0 to 3  ;fchb = ~0
         fchb[dssh] = 255
        next
        fbp = fx//8
        fbo = fy*width/8 + fx/8
        for dssh = 1 to (31 - fw) ; fchb = fchb>>(32 - fw)
            asm
            bcf STATUS,0
            banksel _fchb
            rrcf    _fchb +3
            rrcf    _fchb +2
            rrcf    _fchb +1
            rrcf    _fchb 
            banksel 0
            endasm
        next 
        for dssh = 1 to fbp   ;fchb = fchb<<fbp; 
            asm
            bcf STATUS,0
            banksel  _fchb
            rlcf    _fchb
            rlcf    _fchb +1
            rlcf    _fchb +2
            rlcf    _fchb +3
            banksel 0
            endasm
        next 
        for dssh = 0 to 3  ;   fchb = ~fchb
         fchb[dssh] = ~fchb[dssh]
        next
       foffset = foffset
        for fbc = 1 to f_height        
            for dssh = 0 to 3
                fchd[dssh] = 0
            next
           for  dssh=0 to  fw/8 
            readcode fontaddr + foffset,fchd[dssh]
              foffset = foffset + 1
            next
            for dssh = 1 to fbp ;fchd = fchd << fbp;
                asm
                bcf STATUS,0
                banksel  _fchd
                rlcf    _fchd
                rlcf    _fchd +1
                rlcf    _fchd +2
                rlcf    _fchd +3
                banksel 0
                endasm
            next   
            fbr[fbo] = fbr[fbo]&fchb[0]
            fbr[fbo+1] = fbr[fbo+1]&fchb[1]     
            fbr[fbo+2] = fbr[fbo+2]&fchb[2]
            fbr[fbo+3] = fbr[fbo+3]&fchb[3]
            #if colours <> 1 
            fbg[fbo] = fbg[fbo]&fchb[0]
            fbg[fbo+1] = fbg[fbo+1]&fchb[1]
            fbg[fbo+2] = fbg[fbo+2]&fchb[2]        
            fbg[fbo+3] = fbg[fbo+3]&fchb[3]
            #endif
            #if colours =  3 
            fbb[fbo] = fbb[fbo]&fchb[0]
            fbb[fbo+1] = fbb[fbo+1]&fchb[1] 
            fbb[fbo+2] = fbb[fbo+2]&fchb[2]
            fbb[fbo+3] = fbb[fbo+3]&fchb[3] 
            #endif
               #if colours <> 1
                if (bgcolour & 1)  then 
                    fbr[fbo] = fbr[fbo]|~fchb[0] 
                    fbr[fbo+1] = fbr[fbo+1]|~fchb[1] 
                    fbr[fbo+2] = fbr[fbo+2]|~fchb[2] 
                    fbr[fbo+3] = fbr[fbo+3]|~fchb[3] 
                endif             
                if (bgcolour & 2)  then 
                    fbg[fbo] = fbg[fbo]|~fchb[0]
                    fbg[fbo+1] = fbg[fbo+1]|~fchb[1]
                    fbg[fbo+2] = fbg[fbo+2]|~fchb[2]
                    fbg[fbo+3] = fbg[fbo+3]|~fchb[3]
                endif 
                #endif
                #if colours = 3
                if (bgcolour & 4)  then 
                    fbb[fbo] = fbb[fbo]|~fchb[0]
                    fbb[fbo+1] = fbb[fbo+1]|~fchb[1]
                    fbb[fbo+2] = fbb[fbo+2]|~fchb[2]
                    fbb[fbo+3] = fbb[fbo+3]|~fchb[3]
                endif 
                #endif 
                if (colour &1)then
                    fbr[fbo] = fbr[fbo] | fchd[0]
                    fbr[fbo + 1] = fbr[fbo + 1]| fchd[1] 
                    fbr[fbo + 2] = fbr[fbo + 2]| fchd[2] 
                    fbr[fbo + 3] = fbr[fbo + 3]| fchd[3]
                else
                    fbr[fbo] = fbr[fbo] & ~fchd[0]
                    fbr[fbo + 1] = fbr[fbo + 1]& ~fchd[1] 
                    fbr[fbo + 2] = fbr[fbo + 2]& ~fchd[2] 
                    fbr[fbo + 3] = fbr[fbo + 3]& ~fchd[3]
                endif  
                #if colours <> 1  
                if (colour&2) then
                    fbg[fbo] = fbg[fbo] | fchd[0] 
                    fbg[fbo + 1] = fbg[fbo + 1]| fchd[1] 
                    fbg[fbo + 2] = fbg[fbo + 2]| fchd[2] 
                    fbg[fbo + 3] = fbg[fbo + 3]| fchd[3]
                else
                    fbg[fbo] = fbg[fbo] & ~fchd[0]
                    fbg[fbo + 1] = fbg[fbo + 1]& ~fchd[1] 
                    fbg[fbo + 2] = fbg[fbo + 2]& ~fchd[2] 
                    fbg[fbo + 3] = fbg[fbo + 3]& ~fchd[3]
                endif
                #endif
             #if colours =  3 
                if (colour&4) then
                    fbb[fbo] = fbb[fbo] | fchd[0] 
                    fbb[fbo + 1] = fbb[fbo + 1]| fchd[1] 
                    fbb[fbo + 2] = fbb[fbo + 2]| fchd[2] 
                    fbb[fbo + 3] = fbb[fbo + 3]| fchd[3]
                else
                    fbb[fbo] = fbb[fbo] & ~fchd[0]
                    fbb[fbo + 1] = fbb[fbo + 1]& ~fchd[1] 
                    fbb[fbo + 2] = fbb[fbo + 2]& ~fchd[2] 
                    fbb[fbo + 3] = fbb[fbo + 3]& ~fchd[3]
                endif
              #endif
            fbo = fbo + (width)/8
        next                  
    return
     
    sbmp: 
        readcode BMPLABEL, fw  ;width
        readcode BMPLABEL+1 ,f_height ;height
        DEBUG 13,10, HEX4 BMPLABEL ,9,#fw ,9,#f_height
        foffset=2
        f_height=f_height+Y0
    '    fw=(fw/16)-1
        fw=(fw/8)-1
        DEBUG 13,10
        WHILE y0 < f_height
           fbo = y0*width/8 + x0
           DEBUG #Y0,9
           for dssh = 0 to fw   ;width
               readcode BMPLABEL+foffset  ,FBC'gl_inc1
               DEBUG HEX2 FBC,9	
               fbr[fbo] = FBC  REV 8
               fbo=fbo+1
               foffset=foffset+1
    '           fbr[fbo+1] =(gl_inc1>>8)  REV 8
    '           fbr[fbo] = gl_inc1  REV 8
    '           fbo=fbo+2
    '          foffset=foffset+2
           next
           DEBUG 13,10
          Y0=Y0+1 
        WEND   
     return    
         
    ' void lcdBitmap(char x, char y, char w, char h, const char *bd) {
    '    char tm, bm, lastrow, row, col, db, rb, i = 0, pos;
    '    char *Findex;
    '    const char *Dindex;
    '    lastrow = ((y + h) / 8) - y / 8;
    '    for (row = 0; row <= lastrow; row++) {
    '        Findex = gFrame + (y / 8 + row)*84 + x;
    '        if (row == lastrow) {
    '            Dindex = bd + (row - 1) * w;
    '            pos = w;
    '            while (pos--) {
    '                db = *Dindex++;
    '                if (gMODE == 255)db = ~db;
    '                rb = *Findex;
    '                db = mask_b(rb, db, y + h);
    '                *Findex++ = db;
    '            }
    '        } else if (row == 0) {
    '            Dindex = bd;
    '            pos = w;
    '            while (pos--) {
    '                db = *Dindex++;
    '                if (gMODE == 255)db = ~db;
    '                rb = *Findex;
    '                db = mask_t(rb, db, y);
    '                *Findex++ = db;
    '            }
    '        } else {
    '            Dindex = bd + (row - 1) * w;
    '            pos = w;
    '            while (pos--) {
    '                db = *Dindex++;
    '                if (gMODE == 255)db = ~db;
    '                rb = *Findex;
    '                db = mask_b(rb, db, y);
    '                *Findex++ = db;
    '            }
    '            Findex = gFrame + (y / 8 + row)*84 + x;
    '            Dindex = bd + row*w;
    '            pos = w;
    '            while (pos--) {
    '                db = *Dindex++;
    '                if (gMODE == 255)db = ~db;
    '                rb = *Findex;
    '                db = mask_t(rb, db, y);
    '                *Findex++ = db;
    '            }
    '        }
    '    }
    '}
    
    
    gl_setdot:		'Set a pixel to colour given gl_x,gl_y  
    ; clrs pixels colours not selected 
        fpx =  1<< (gl_x//8)   
        fbo  = gl_y* (width)/8 + gl_x/ 8
            if (colour & 1)then
                fbr[ fbo ] = fbr[ fbo ]|fpx
            else
                fbr[ fbo ] = fbr[ fbo ]&~fpx
            endif 
            #IF   colours <> 1
            if (colour & 2)then
                fbg[ fbo ] = fbg[ fbo ]|fpx
            else
                fbg[ fbo ] = fbg[ fbo ]&~fpx    
            endif 
            #endif
            #if colours =  3 
                if (colour & 4)then
                    fbb[ fbo ] = fbb[ fbo ]|fpx
                else
                    fbb[ fbo ] = fbb[ fbo ]&~fpx
                endif 
            #endif
    return
    
    
    grf_clr:
        tmp = width/8 * height
        while tmp
            tmp = tmp - 1
            if bgcolour then
                if bgcolour & 1 then fbr[tmp] = 255 
                 #if colours = 2                       
                if bgcolour & 2 then fbg[tmp] = 255
                  #endif 
                #if colours = 3     
                    if bgcolour & 4 then fbb[tmp] = 255
                #endif
            else
                fbr[tmp] = 0
                 #if colours = 2 
                fbg[tmp] = 0
                 #endif
                #if colours =  3 
                    fbb[tmp] = 0
                #endif
            endif
        wend
    return                   
    
    
    set8:        ;seems ok
    	gl_x = glc_x+glc_cx : gl_y=glc_y+glc_cy	    '1
    	gosub gl_setdot
    	gl_x = glc_cx-glc_x : gl_y=glc_y+glc_cy		'2	
    	gosub gl_setdot
    	gl_x = glc_cx+glc_x : gl_y=glc_cy-glc_y		'3	
    	gosub gl_setdot
    	gl_x = glc_cx-glc_x : gl_y=glc_cy-glc_y		'4	
    	gosub gl_setdot
    	gl_x = glc_y+glc_cx : gl_y=glc_x+glc_cy		'5
    	gosub gl_setdot			
    	gl_x = glc_cx-glc_y : gl_y=glc_cy+glc_x		'6	
    	gosub gl_setdot
    	gl_x = glc_cx+glc_y : gl_y=glc_cy-glc_x		'7	
    	gosub gl_setdot
    	gl_x = glc_cx-glc_y : gl_y=glc_cy-glc_x		'8	
    	gosub gl_setdot
    return
    
    
    '------------  gl_circle d  = diameter r = radius x,y are point locations ----------
    '*****  Given Center = glc_cx,glc_cy and Radius = glc_r            ***
    d_circ:         ;seems ok
      glc_x = 0
      glc_y = glc_r
      glc_s = gl_pi-2*glc_r
      while (glc_x <= glc_y)
          gosub set8
    	if (glc_s.15 =1) then
               glc_s = glc_s + (4*glc_x + 6)
             else
               glc_s = glc_s + (4*(glc_x-glc_y) + 10)
               glc_y = glc_y - 1
    	endif
    	glc_x = glc_x + 1
      wend
    return
    
    
    '----------------- 4 sided Star  ---------------------
    '***** Given Center = gl_cx,gl_cy and Radius = gl_r **********
    d_star4:    ;sus   r must be ? 3 and multiple of 3
      glc_x = 0
      glc_y = glc_r
      glc_s = gl_pi-2*glc_r
      while (glc_x <= glc_y)
          gosub set8
         glc_s = glc_s + (4*(glc_x-glc_y) + 10)
         glc_y = glc_y - 3
         glc_x = glc_x + 1
      wend
    return
    
    
    drect:
        gl_x2 = gl_x1+x1
        gl_y2 = gl_y1+y1-1
    gl_rect:   'Rectangle subroutine given gl_x1,gl_x2,gl_y1, gl_y2
            gosub chk_xy         
    	for gl_i= gl_x1 to gl_x2 
    		gl_x = gl_i
    		gl_y = gl_y1
              gosub gl_setdot
    	    gl_y = gl_y2
              gosub gl_setdot
    	next gl_i
    	for gl_i= gl_y1 to gl_y2 
    		gl_y = gl_i
    		gl_x = gl_x1
              gosub gl_setdot
    		gl_x = gl_x2
              gosub gl_setdot
    	next gl_i
    return
    
    
    '*** gl_gl_square45 turned 45 degrees ***
    '***** Given Center = gl_cx,gl_cy and Radius = gl_r *
    d_square45:     ;seems ok
      glc_x = 0
      glc_y = glc_r
      glc_s = gl_pi-2*glc_r
      while (glc_x <= glc_y)
          gosub set8
         glc_s = glc_s + (4*(glc_x-glc_y) + 10)
         glc_y = glc_y - 1
         glc_x = glc_x + 1
      wend
    return
    chk_xy:      ;seems ok
    	if gl_x1 > gl_x2 then
    		swap gl_x1,gl_x2
        endif
    	if gl_y1 > gl_y2 then
    		swap gl_y1,gl_y2
        endif
    return
    
    
    
    
    dline:
       gl_inc1 = 0
        if abs(s_yend - s_ystart) > abs(s_xend - s_xstart)  then
            swap s_xstart , s_ystart
            swap s_xend , s_yend
            gl_inc1 = 1
        endif
        if s_xstart > s_xend  then
            swap s_xstart , s_xend
            swap s_ystart , s_yend
        endif
        gl_inc2 = s_xend - s_xstart 
        gl_l = abs(s_yend - s_ystart )
        glc_s = gl_inc2.15
        gl_m = abs(gl_inc2)/2
        if glc_s then gl_m = -gl_m 
        if s_ystart < s_yend  then
            glc_s = 1
        else
            glc_s = -1
        endif
        while s_xstart <= s_xend
            if gl_inc1>0 then
               gl_x =  s_ystart
               gl_y =  s_xstart
               gosub gl_setdot
            else
               gl_x = s_xstart
               gl_y = s_ystart             
               gosub gl_setdot
            endif
            gl_m = gl_m - gl_l
            if gl_m.15 = 1 then 
                s_ystart = s_ystart + glc_s
                gl_m = gl_m + gl_inc2
            endif
            s_xstart = s_xstart + 1
        wenD
    return
    
    
    
    
    
    
    
    
    
    
    
    
    'dline:
    '   gl_inc1=0
    '    if abs(s_yend - s_ystart) > abs(s_xend - s_xstart) then
    '        gl_m = s_xstart;
    '        s_xstart = s_ystart;
    '        s_ystart = gl_m;
    '        gl_m = s_xend;
    '        s_xend = gl_y2;
    '        s_yend= gl_m;
    '        gl_inc1 = 1;
    '    endif
    '    if s_xstart > s_xend then
    '        gl_m = s_xstart;
    '        s_xstart = s_xend;
    '        s_xend = gl_m;
    '        gl_m = s_ystart;
    '        s_ystart = gl_y2;
    '        s_yend= gl_m;
    '    endif
    '    gl_inc2 = s_xend - s_xstart;
    '    gl_l = abs(s_yend- s_ystart);
    '    glc_s = gl_inc2.15
    '    gl_m = abs(gl_inc2) / 2;
    '    if glc_s then gl_m = ~gl_m;
    '    if s_ystart < s_yend then
    '        glc_s = 1;
    '     else 
    '        glc_s = -1;
    '    endif
    '    while s_xstart <= s_xend 
    '         if gl_inc1 > 0 then
    '            gl_x = s_ystart : gl_y= s_xstart             
    '         else 
    '            gl_x = s_xstart : gl_y= s_ystart
    '         endif
    '        gosub gl_setdot
    '        gl_m = gl_m - gl_l;
    '        if gl_m.15 then
    '            s_ystart = s_ystart+glc_s;
    '            gl_m = gl_m+gl_inc2;
    '        endif
    '        s_xstart = s_xstart +1;
    '    wend
    'return
    
    
    
    
    
    
    
    
    
    
    frect:
        s_ystart=y0
        s_yend=y0
        while y1
            s_xstart=x0
            s_xend=x0+s_xend-1
            gosub dLine
            s_ystart=s_ystart+1
            s_yend=s_ystart
            y1=y1-1
        wend
    return 
    
    
    
    
    
    
    ASM
    dmd_pmstr_out
        tblrd   *+
        movf   TABLAT,w
        bz	dmd_exit_pmstrout  ; EXIT ON Null char 
        banksel _fch
        MOVWF _fch
        banksel 0
        movff   TBLPTRU,_dmd_bigaddress
        movff   TBLPTRH,_dmd_bigaddress+1
        movff   TBLPTRL,_dmd_bigaddress+2
        L?CALL _drawch
        banksel _fw
        movf _fw, W
        bn  dmd_exit_pmstrout
        banksel _fx
        addwf _fx,f 
        incf _fx,f
        banksel 0
        movff   _dmd_bigaddress   ,TBLPTRU
        movff   _dmd_bigaddress+1 ,TBLPTRH
        movff   _dmd_bigaddress+2 ,TBLPTRL
        bra    dmd_pmstr_out        
    dmd_exit_pmstrout
        RST?RP
        return 
        
    dmd_str_out
        movf POSTINC1, W	; Get a character
        bz	dmd_exit_strout  ; EXIT ON Null char 
        banksel _fch
        MOVWF _fch
        banksel 0
        L?CALL _drawch
        banksel _fw
        movf _fw, W
        bn  dmd_exit_strout
        banksel _fx
        addwf _fx,f 
        incf _fx,f
        bra    dmd_str_out
    dmd_exit_strout
        banksel 0
        return
    
    
    DMDBMP?CCL  macro X0in ,Y0in,Lin
        ;MOVE?CW  Lin , _dmd_bigaddress
        MOVE?CB  X0in ,_x0 
        MOVE?CB  Y0in ,_y0 
        BANKSEL _dmd_bigaddress
        movlw   UPPER Lin
        movwf   _dmd_bigaddress+2
        movlw   HIGH Lin
        movwf   _dmd_bigaddress+1 
        movlw   LOW Lin
        movwf   _dmd_bigaddress 
        BANKSEL 0   
        L?CALL _sbmp
        endm
    
    
    
    
    SETFONT?L  macro Lin
        MOVE?CW  Lin , _fontaddr
        L?CALL _sfnt
        endm 
    FILLRECT?WWWW  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_x0 
        MOVE?WB    X1in ,_x1
        MOVE?WB    Y0in ,_y0
        MOVE?WB    Y1in ,_y1
        L?CALL _frect 
        endm  
    FILLRECT?WWBW  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_x0 
        MOVE?BB    X1in ,_x1
        MOVE?WB    Y0in ,_y0
        MOVE?WB    Y1in ,_y1
        L?CALL _frect 
        endm  
    
    
    FILLRECT?WWBB  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_x0 
        MOVE?BB    X1in ,_x1
        MOVE?WB    Y0in ,_y0
        MOVE?BB    Y1in ,_y1
        L?CALL _frect 
        endm  
    FILLRECT?WWCC  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_x0 
        MOVE?CB    X1in ,_x1
        MOVE?WB    Y0in ,_y0
        MOVE?CB    Y1in ,_y1
        L?CALL _frect 
        endm       
    FILLRECT?WWWB  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB  X0in ,_x0 
        MOVE?WB  X1in ,_x1 
        MOVE?WB  Y0in ,_y0
        MOVE?BB  Y1in ,_y1
        L?CALL _frect 
        endm        
    FILLRECT?BBBB  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?BB     X0in ,_x0
        MOVE?BB     X1in ,_x1
        MOVE?BB     Y0in ,_y0
        MOVE?BB     Y1in ,_y1
        L?CALL _frect 
        endm  
    FILLRECT?CCCC  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?CB  X0in ,  _x0
        MOVE?CB  X1in ,  _x1
        MOVE?CB  Y0in,   _y0
        MOVE?CB  Y1in,   _y1
        L?CALL _frect      
      endm    
    FILLRECT?BBCC  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?BB  X0in ,  _x0
        MOVE?CB  X1in ,  _x1
        MOVE?BB  Y0in  , _y0
        MOVE?CB  Y1in,   _y1
        L?CALL _frect 
        endm    
    ;dr    
    DRAWRECT?WWWW  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_gl_x1
        MOVE?WB    X1in ,_x1
        MOVE?WB    Y0in ,_gl_y1
        MOVE?WB    Y1in ,_y1
        L?CALL _drect 
        endm  
    DRAWRECT?WWBW  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_gl_x1 
        MOVE?BB    X1in ,_x1
        MOVE?WB    Y0in ,_gl_y1
        MOVE?WB    Y1in ,_y1
        L?CALL _drect 
        endm  
    
    
    DRAWRECT?WWBB  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_gl_x1 
        MOVE?BB    X1in ,_x1
        MOVE?WB    Y0in ,_gl_y1
        MOVE?BB    Y1in ,_y1
        L?CALL _drect 
        endm  
    DRAWRECT?WWCC  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_gl_x1 
        MOVE?CB    X1in ,_x1
        MOVE?WB    Y0in ,_gl_y1
        MOVE?CB    Y1in ,_y1
        L?CALL _drect 
        endm       
    DRAWRECT?WWWB  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB  X0in ,_gl_x1 
        MOVE?WB  X1in ,_x1 
        MOVE?WB  Y0in ,_gl_y1
        MOVE?BB  Y1in ,_y1
        L?CALL _drect 
        endm        
    DRAWRECT?BBBB  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?BB     X0in ,_gl_x1
        MOVE?BB     X1in ,_x1
        MOVE?BB     Y0in ,_gl_y1
        MOVE?BB     Y1in ,_y1
        L?CALL _drect 
        endm  
    DRAWRECT?CCCC  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?CB  X0in ,_gl_x1
        MOVE?CB  X1in ,_x1
        MOVE?CB  Y0in ,_gl_y1
        MOVE?CB  Y1in ,_y1
        L?CALL _drect      
      endm    
    DRAWRECT?BBCC  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?BB  X0in ,_gl_x1
        MOVE?CB  X1in ,_x1
        MOVE?BB  Y0in ,_gl_y1
        MOVE?CB  Y1in ,_y1
        L?CALL _drect 
        endm 
    ;CIRC
    DRAWCIRCLE?WWW  macro X0in ,Y0in ,Rad
        MOVE?WW    X0in , _glc_cx
        MOVE?WW    Rad  , _glc_r
        MOVE?WW    Y0in , _glc_cy
        L?CALL _d_circ 
        endm  
    DRAWCIRCLE?WWB  macro X0in ,Y0in ,Rad
        MOVE?WW    X0in , _glc_cx 
        MOVE?BW    Rad  , _glc_r
        MOVE?WW    Y0in , _glc_cy
        L?CALL _d_circ  
        endm 
    DRAWCIRCLE?WWC  macro X0in ,Y0in ,Rad
        MOVE?WW    X0in , _glc_cx1 
        MOVE?CW    Rad  , _glc_r
        MOVE?WW    Y0in , _glc_cy1
        L?CALL _d_circ  
        endm       
           
    DRAWCIRCLE?BBB  macro X0in ,Y0in ,Rad
        MOVE?BW     X0in , _glc_cx
        MOVE?BW     Rad  , _glc_r
        MOVE?BW     Y0in , _glc_cy
        L?CALL _d_circ     
        endm  
    DRAWCIRCLE?CCC  macro X0in ,Y0in ,Rad
        MOVE?CW  X0in , _glc_cx
        MOVE?CW  Rad  , _glc_r
        MOVE?CW  Y0in , _glc_cy
        L?CALL _d_circ       
      endm    
    DRAWCIRCLE?BBC  macro X0in ,Y0in ,Rad
        MOVE?BW  X0in , _glc_cx
        MOVE?CW  Rad  , _glc_r
        MOVE?BW  Y0in , _glc_cy
        L?CALL _d_circ 
        endm    
    ;LINE 
    DRAWLINE?WWWW  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_s_xstart
        MOVE?WB    X1in ,_s_xend
        MOVE?WB    Y0in ,_s_ystart
        MOVE?WB    Y1in ,_s_yend
        L?CALL _dline 
        endm  
    DRAWLINE?WWBW  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_s_xstart 
        MOVE?BB    X1in ,_s_xend
        MOVE?WB    Y0in ,_s_ystart
        MOVE?WB    Y1in ,_s_yend
        L?CALL _dline 
        endm 
    DRAWLINE?WWBB  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_s_xstart
        MOVE?BB    X1in ,_s_xend
        MOVE?WB    Y0in ,_s_ystart
        MOVE?BB    Y1in ,_s_yend
        L?CALL _dline 
        endm  
    DRAWLINE?WWCC  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB    X0in ,_s_xstart
        MOVE?CB    X1in ,_s_xend
        MOVE?WB    Y0in ,_s_ystart
        MOVE?CB    Y1in ,_s_yend
        L?CALL _dline 
        endm       
    DRAWLINE?WWWB  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?WB  X0in ,_s_xstart
        MOVE?WB  X1in ,_s_xend 
        MOVE?WB  Y0in ,_s_ystart
        MOVE?BB  Y1in ,_s_yend
        L?CALL _dline 
        endm        
    DRAWLINE?BBBB  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?BB     X0in ,_s_xstart
        MOVE?BB     X1in ,_s_xend
        MOVE?BB     Y0in ,_s_ystart
        MOVE?BB     Y1in ,_s_yend
        L?CALL _dline 
        endm  
    DRAWLINE?CCCC  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?CB  X0in ,_s_xstart
        MOVE?CB  X1in ,_s_xend
        MOVE?CB  Y0in ,_s_ystart
        MOVE?CB  Y1in ,_s_yend
        L?CALL   _dline 
      endm  
    DRAWLINE?CCCB  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?CB  X0in ,_s_xstart
        MOVE?CB  X1in ,_s_xend
        MOVE?CB  Y0in ,_s_ystart
        MOVE?BB  Y1in ,_s_yend
        L?CALL   _dline 
      endm  
    DRAWLINE?CCCW macro X0in ,Y0in ,X1in ,Y1in
        MOVE?CB  X0in ,_s_xstart
        MOVE?CB  X1in ,_s_xend
        MOVE?CB  Y0in ,_s_ystart
        MOVE?WB  Y1in ,_s_yend
        L?CALL   _dline 
      endm      
    DRAWLINE?BBCC  macro X0in ,Y0in ,X1in ,Y1in
        MOVE?BB  X0in ,_s_xstart
        MOVE?CB  X1in ,_s_xend
        MOVE?BB  Y0in ,_s_ystart
        MOVE?CB  Y1in ,_s_yend
        L?CALL _dline 
        endm 
    DRAWLINE?CCCCC  macro X0in ,Y0in ,X1in ,Y1in,Col
        MOVE?CB  Col ,_colour
        MOVE?CB  X0in ,_s_xstart
        MOVE?CB  X1in ,_s_xend
        MOVE?CB  Y0in ,_s_ystart
        MOVE?CB  Y1in ,_s_yend
        L?CALL   _dline 
      endm 
           
    ;----------------------Strings------------------------------------    
    DMDSTR?CBB  macro Xin ,Yin ,Bin
            MOVE?CB   Xin ,_fx
            MOVE?BB   Yin  ,_fy
            MOVE?CB high Bin, FSR1H ;load highbyte 
            MOVE?CB low  Bin, FSR1L ;load low byte
            L?CALL  dmd_str_out
        endm         
    DMDSTR?CCB  macro Xin ,Yin ,Bin
            MOVE?CB  Xin ,_fx
            MOVE?CB  Yin  ,_fy
            MOVE?CB  high Bin, FSR1H ;load highbyte 
            MOVE?CB  low  Bin, FSR1L ;load low byte
            L?CALL  dmd_str_out
        endm  
    DMDSTR?CCBC  macro Xin ,Yin ,Bin,Col
            MOVE?CB  Xin ,_fx
            MOVE?CB  Yin  ,_fy
            MOVE?CB  Col ,_colour
            MOVE?CB  high Bin, FSR1H ;load highbyte 
            MOVE?CB  low  Bin, FSR1L ;load low byte
            L?CALL  dmd_str_out
        endm       
    DMDSTR?BBB  macro Xin ,Yin ,Bin
            MOVE?BB  Xin,_fx
            MOVE?BB  Yin,_fy
            MOVE?CB  high (Bin), FSR1H ;load highbyte 
            MOVE?CB  low (Bin), FSR1L ;load low byte
            L?CALL   dmd_str_out
        endm 
    DMDSTR?WBB  macro Xin ,Yin ,Bin
            MOVE?WB Xin,_fx 
            MOVE?BB  Yin,_fy
            MOVE?CB  high (Bin), FSR1H ;load highbyte 
            MOVE?CB  low (Bin), FSR1L ;load low byte
            L?CALL   dmd_str_out
        endm  
    DMDSTR?WWB  macro Xin ,Yin ,Bin
            MOVE?WB  Xin,_fx 
            MOVE?WB  Yin,_fy
            MOVE?CB  high (Bin), FSR1H ;load highbyte 
            MOVE?CB  low (Bin), FSR1L ;load low byte
            L?CALL   dmd_str_out
        endm 
    ;----[const String]---------------------------------------------------------------
    DMDSTR?S  macro Cin    
     local TheString, OverStr 
     goto OverStr 
    TheString 
     data Cin, 0 
    OverStr
        movlw   UPPER TheString
        movwf   TBLPTRU
        movlw   HIGH TheString 
        movwf   TBLPTRH
        movlw   LOW TheString
        movwf   TBLPTRL
        L?CALL dmd_pmstr_out 
      endm 
    DMDSTR?CCS  macro Xin ,Yin, Cin 
     local TheString, OverStr 
     goto OverStr 
    TheString 
     data Cin, 0 
    OverStr
        MOVE?CB  Xin ,_fx
        MOVE?CB  Yin ,_fy
        movlw   UPPER TheString
        movwf   TBLPTRU
        movlw   HIGH TheString 
        movwf   TBLPTRH
        movlw   LOW TheString
        movwf   TBLPTRL
        L?CALL dmd_pmstr_out 
      endm  
    DMDSTR?CCSC  macro Xin ,Yin,Bin,Col 
     local TheString, OverStr 
     goto OverStr 
    TheString 
      data Bin, 0 
    OverStr
        MOVE?CB  Xin ,_fx
        MOVE?CB  Yin ,_fy
        MOVE?CB  Col ,_colour
        movlw   UPPER TheString
        movwf   TBLPTRU
        movlw   HIGH TheString 
        movwf   TBLPTRH
        movlw   LOW TheString
        movwf   TBLPTRL
        L?CALL dmd_pmstr_out 
     endm
    
    
     ENDASM
    
    
    Jumpover_grx_Lib:
    Last edited by richard; - 20th December 2021 at 09:04.
    Warning I'm not a teacher

Similar Threads

  1. SSD1306 Include example
    By timc in forum Code Examples
    Replies: 11
    Last Post: - 28th November 2017, 08:53
  2. SSD1306 start display problem
    By harryweb in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 14th December 2016, 19:16
  3. Using INCLUDE to add a text file in PBP3
    By Sumobob in forum PBP3
    Replies: 4
    Last Post: - 16th May 2016, 18:56
  4. PBP3 to include 18F97J94?
    By fowardbias in forum PBP3
    Replies: 1
    Last Post: - 18th December 2013, 16:42
  5. Help With OLED Display / 128X64 SSD1306
    By Denner in forum General
    Replies: 6
    Last Post: - 25th May 2013, 15:40

Members who have read this thread : 7

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts