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:
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:
Bookmarks