Home
JAQForum Ver 24.01
Log In or Join  
Active Topics
Local Time 22:56 01 Jul 2025 Privacy Policy
Jump to

Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.

Forum Index : Microcontroller and PC projects : Micromite AHRS demo - please view

Author Message
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 10180
Posted: 09:20am 14 Mar 2016
Copy link to clipboard 
Print this post



Here

The code will only run on a 64-pin MM using my paged SSD1963 driver for the 4.3" version of the display, both included in the zip

2016-03-14_192835_AHRSsolid.zip Edited by matherp 2016-03-15
 
kiiid

Guru

Joined: 11/05/2013
Location: United Kingdom
Posts: 671
Posted: 09:34am 14 Mar 2016
Copy link to clipboard 
Print this post

Ah, this is amazing :D

http://rittle.org

--------------
 
circuit
Senior Member

Joined: 10/01/2016
Location: United Kingdom
Posts: 274
Posted: 11:51am 14 Mar 2016
Copy link to clipboard 
Print this post

Utterly stunning; one must congratulate you on your coding competence, but with overtones of envy - Gosh, I wish I could code like you can. Fantastic in every way.
 
Zonker

Guru

Joined: 18/08/2012
Location: United States
Posts: 767
Posted: 02:07pm 14 Mar 2016
Copy link to clipboard 
Print this post

All I can say is WOW..! Great stuff Peter..!!

Could this be used in the Cockpit..? Looks like it..! Would make a excellent Attitude Indicator and compass maybe..?

Just amazing....
 
viscomjim
Guru

Joined: 08/01/2014
Location: United States
Posts: 925
Posted: 02:46am 15 Mar 2016
Copy link to clipboard 
Print this post

Matherp, this is phenomenal!!! The uMite has come a long way and keeps getting better with your efforts. Amazing what can be these days with basic and Cfunctions.
 
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 10180
Posted: 04:04am 15 Mar 2016
Copy link to clipboard 
Print this post

  Quote  Would make a excellent Attitude Indicator and compass maybe..?


This sort of thing?



Work in progress but getting there
 
Zonker

Guru

Joined: 18/08/2012
Location: United States
Posts: 767
Posted: 10:11am 15 Mar 2016
Copy link to clipboard 
Print this post

Yep..!

SWEET..!!

I'm gettin all Gushie...
 
Grogster

Admin Group

Joined: 31/12/2012
Location: New Zealand
Posts: 9585
Posted: 02:48pm 15 Mar 2016
Copy link to clipboard 
Print this post

Micromite goes avionics....
Now, we just need a CVR and FDR controller, some sort of TCAS and maybe a few other systems like Glideslope and GPWS etc, and we can bypass all the big guys in avionics.

matherp oughta have all that done by the end of the week........
Smoke makes things work. When the smoke gets out, it stops!
 
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 10180
Posted: 06:42am 16 Mar 2016
Copy link to clipboard 
Print this post

I've finally finished the AI display algorithm but it is not yet integrated with the attitude sensor. This was a real pig to write as I wanted it to allow for 360-degree roll and pitch (something the mechanical AIs can't handle) but there a couple of interesting algorithms that may be generally useful.

Demo video

The first is a new CFunction "dcirch" this draws a circle outline but allows you to specify part of the circle to be omitted.

The calling sequence is

dcirch x, y, r, c, x1, y1, x2 ,y2

x = x-coordinate of centre of circle
y = y-coordinate of centre of circle
r = radius of circle
c = colour
x1,y1 coordinates of top left of box to be omitted
x2,y2 coordinates of bottom right of box to be omitted

so:

[code]
dcirch 100,100,50,rgb(white),0,100,mm.hres,mm.vres
[/code]

will draw just the top half of a circle. The screen area of the bottom half won't be touched.

The other interesting algorithm is the Cohen-Sutherland algorithm

CohenSutherlandLineClip(x1,y1,x2,y2)

This bounds a line specified by x1,y1, and x2,y2 to remain within the screen area defined by the global variables xmin, ymin, xmax, ymax. Sounds easy but just try and do it from first principles
In the case of the AI display this was needed to get the coordinates of the horizon line bounded by the AI display area.

Complete test code for the AI display module below. As before this needs a 4.3" SSD1963 display to run properly using the paged driver

Option explicit
option default none
const C_INSIDE = 0' 0000
const C_LEFT = 1 ' 0001
const C_RIGHT = 2 ' 0010
const C_BOTTOM = 4' 0100
const C_TOP = 8 ' 1000

cls
dim integer w = 266
dim integer h=w
dim integer wby2 = w\2
dim integer xm = 239
dim integer ym = 135
dim integer xmin = 106
dim integer xmax = xmin+w
dim integer ymin=2
dim integer ymax=w+ymin
dim integer xmn3=xm-3
dim integer xmn7=xm-7
dim integer xmn10=xm-10
dim integer xmn15=xm-15
dim integer xmn20=xm-20
dim integer xmn25=xm-25
dim integer xmn26=xm-26
dim integer xmn30=xm-30
dim integer xmp7=xm+7
dim integer xmp10=xm+10
dim integer xmp15=xm+15
dim integer xmp20=xm+20
dim integer xmp21=xm+21
dim integer xmp25=xm+25
dim integer xmp26=xm+26

dim integer ymn2=ym-2
dim integer ymn16=ym-16
dim integer ymn32=ym-32
dim integer ymn48=ym-48
dim integer ymn64=ym-64
dim integer ymp4=ym+4
dim integer ymp13=ym+13
dim integer ymp16=ym+16
dim integer ymp32=ym+32
dim integer ymp48=ym+48
dim integer ymp64=ym+64
dim integer ymp80=ym+80
dim integer ymp96=ym+96
dim integer ymp112=ym+112

dim integer radius = 101
dim integer ymmr16 = ym-radius+16
dim integer ymmrm16 = ym-radius-16
dim integer ymmr1 = ym-radius+1
dim integer ymmrm1 = ym-radius-1
dim integer rp20 = radius+20
dim integer rp10 = radius+10
dim integer rp15 = radius+15
dim integer rm20 = radius-20
dim integer xmnr = xm-radius
dim integer rgbw = rgb(white)
dim integer rgbb = rgb(black)
dim integer rgby = rgb(yellow)
dim integer rgbbr = rgb(brown)
dim integer rgbbl = rgb(blue)
SSD1963 1 'start showing page 2
pause 10
dim float pitch=0, roll=0
dim integer x0,y0,x1,y1,x2,y2
dim integer rx1(9),ry1(9),rx2(9),ry2(9),rcol(9)=(rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw)
dim float pitchperdegree=3.2
dim integer lx1(24)=(xmn26,xmn20,xmn26,xmp20,xmp26,xmp20,xmn15,xmn15,xmn15,xmn15,xmn15,xmn15,xmn25,xmn25,xmn25,xmn25,xmn25,xmp10,xmp 10,xmp10,xmp10,xmp10,xmp7,xm,xm)
dim integer ly1(24)=(ymp4,ymp4,ymp13,ymp4,ymp4,ymp13,ymp16,ymp48,ymp80,ymp112,ymn16,ymn48,ymn32,ymn64,ymp64,ymp32,ymp96,ymn32,ymn64, ymp64,ymp32,ymp96,ymmr16,ymmr1,ymmr1)
dim integer lx2(24)=(xmn26,xmn20,xmn20,xmp20,xmp26,xmp26,xmp15,xmp15,xmp15,xmp15,xmp15,xmp15,xmn10,xmn10,xmn10,xmn10,xmn10,xmp25,xmp 25,xmp25,xmp25,xmp25,xmn7,xmp7,xmn7)
dim integer ly2(24)=(ymp13,ymp13,ymp13,ymp13,ymp13,ymp13,ymp16,ymp48,ymp80,ymp112,ymn16,ymn48,ymn32,ymn64,ymp64,ymp32,ymp96,ymn32,ym n64,ymp64,ymp32,ymp96,ymmr16,ymmr16,ymmr16)
dim integer lcol(24)=(rgbb,rgbb,rgbb,rgbb,rgbb,rgbb,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw,rgbw, rgbb,rgbb,rgbb)
dim integer i

for pitch = -50 to 50 step 5
for roll = 0 to 360 step 2
drawAI(2)
ssd1963 2
pause 10
roll=roll+1
drawAI(1)
ssd1963 1
pause 10
next roll
for roll = 360 to 0 step -2
drawAI(2)
ssd1963 2
pause 10
roll=roll-1
drawAI(1)
ssd1963 1
pause 10
next roll
next pitch
end
'
sub drawAI(page as integer)
local float xf1,yf1,xf2,yf2, pitchoffset, rolloffset,yo1,yo2
local integer xi1,yi1,xi2,yi2,rgbtop,rgbbottom;
local integer offscreen,o = (page-1)*272
local float rroll=rad(roll)
if cos(rad(roll))>=0 then
rgbtop=rgbbl
rgbbottom=rgbbr
else
rgbtop=rgbbr
rgbbottom=rgbbl
endif
'
'sections which vary with pitch and roll
'
pitchoffset=pitch*pitchperdegree
rolloffset=wby2 * tan(rroll)
xf1=xmin
xf2=xmax
yf1=ym+pitchoffset+rolloffset:yo1=yf1
yf2=ym+pitchoffset-rolloffset:yo2=yf2
offscreen = CohenSutherlandLineClip(xf1,yf1,xf2,yf2)
xi1=fix(xf1):yi1=fix(yf1):xi2=fix(xf2):yi2=fix(yf2)
print
if NOT offscreen then
box xmin-2,0+o,w+4,h+4,2,rgbw,rgbtop
if yo2<yo1 then
if (xi1=xmin) and (xi2<>xmax) then
box xi1,yi1+o,w,ymax-yi1,0,,rgbbottom
box xi2,yi2+o,xmax-xi2,h,0,,rgbbottom
triangles(1,xi1,yi1+o,xi2,yi2+o,xi2,yi1+o,rgbbottom,0)
elseif (xi1=xmin) and (xi2=xmax) then
box xi1,yi1+o,w,ymax-yi1,0,,rgbbottom
triangles(1,xi1,yi1+o,xi2,yi2+o,xi2,yi1+o,rgbbottom,0)
elseif (xi1<>xmin) and (xi2=xmax) then
triangles(1,xi1,yi1+o,xi2,yi2+o,xi2,yi1+o,rgbbottom,0)
elseif (xi1<>xmin) and (xi2<>xmax) then
box xi2,yi2+o,xmax-xi2,h,0,,rgbbottom
triangles(1,xi1,yi1+o,xi2,yi2+o,xi2,yi1+o,rgbbottom,0)
endif
elseif yo1<yo2 then
if (xi1<>xmin) and (xi2=xmax) then
box xmin,yi2+o,w,ymax-yi2,0,,rgbbottom
box xmin,yi1+o,xi1-xmin,h,0,,rgbbottom
triangles(1,xi1,yi1+o,xi2,yi2+o,xi1,yi2+o,rgbbottom,0)
elseif (xi1=xmin) and (xi2=xmax) then
box xi1,yi2+o,w,ymax-yi2,0,,rgbbottom
triangles(1,xi1,yi1+o,xi2,yi2+o,xi1,yi2+o,rgbbottom,0)
elseif (xi1=xmin) and (xi2<>xmax) then
triangles(1,xi1,yi1+o,xi2,yi2+o,xi1,yi2+o,rgbbottom,0)
elseif (xi1<>xmin) and (xi2<>xmax) then
box xmin,yi1+o,xi1-xmin,h,0,,rgbbottom
triangles(1,xi1,yi1+o,xi2,yi2+o,xi1,yi2+o,rgbbottom,0)
endif
else
box xi1,yi1+o,w,ymax-yi1,0,,rgbbottom
endif
dcirch xm,ym+o,radius,rgbw,xmn30,ymp96+o,xmn30+60,ymp96+o+8
line xi1,yi1+o,xi2,yi2+o,,rgbw
else 'no useful information
if (offscreen and C_TOP) then
box xmin-2,0+o,w+4,h+4,2,rgbw,rgbtop
else
box xmin-2,0+o,w+4,h+4,2,rgbw,rgbbottom
endif
dcirch xm,ym+o,radius,rgbw,xmn30,ymp96+o,xmn30+60,ymp96+o+8
endif
'
' fixed background
'
text xm,ymn64+o,"20",CM,,,rgbw,1
text xm,ymn32+o,"10",CM,,,rgbw,1
text xm,ymp64+o,"20",CM,,,rgbw,1
text xm,ymp32+o,"10",CM,,,rgbw,1
text xm,ymp96+o,"30",CM,,,rgbw,1
triangles(1,xm,ymmr1+o,xmn7,ymmr16+o,xmp7,ymmr16+o,rgby,0)
BOX xmn3,ymn2+o,6,6,1,rgbb,rgby
BOX xmnr ,ymn2+o,rm20,6,1,rgbb,rgby
BOX xmp20 ,ymn2+o,rm20,6,1,rgbb,rgby
box xmn25,ymp4+o,4,8,0,,rgby
box xmp21,ymp4+o,4,8,0,,rgby
'
lines(25,lx1(),ly1(),lx2(),ly2(),lcol(),page)
'
' sections which vary with roll
'
rotxy(xm,ym,roll,xm,ymmrm1,x0,y0)
rotxy(xm,ym,roll,xmn7,ymmrm16,x1,y1)
rotxy(xm,ym,roll,xmp7,ymmrm16,x2,y2)
triangles(1,x0,y0+o,x1,y1+o,x2,y2+o,rgbw,0)
radial xm,ym,rp20,330-roll,radius,0
radial xm,ym,rp20,30-roll,radius,1
radial xm,ym,rp20,300-roll,radius,2
radial xm,ym,rp20,60-roll,radius,3
radial xm,ym,rp10,10-roll,radius,4
radial xm,ym,rp10,20-roll,radius,5
radial xm,ym,rp10,340-roll,radius,6
radial xm,ym,rp10,350-roll,radius,7
radial xm,ym,rp15,45-roll,radius,8
radial xm,ym,rp15,315-roll,radius,9
lines (10,rx1(),ry1(),rx2(),ry2(),rcol(),page)
ssd1963 page
pause 10 'needed to avoid flash on page switch
end sub
'
sub rotxy(xC as float, yC as float, angleD as float, x as float, y as float, xmaxot as integer, yrot as integer)
local float angle = rad(-angled)
local float s=sin(Angle),c=cos(Angle)
xmaxot = FIX(xC + c * (x - xC) - s * (y - yC))
yRot = FIX(yC + s * (x - xC) + c * (y - yC))
end sub
'
' Routine to draw a radial to a circle
' Parameters are:
' x-coordinate of centre of circle
' y-coordinate of centre of circle
' radius of circle
' radial of segment to be drawn (0-360 degrees)
' colour to draw segment
' inner radius for drawing radial lines, leave blank or set to zero if not required
'
Sub radial(x As integer, y As integer, o As integer, sr As integer, i as integer ,lpos as integer)
Local integer x1, x2, y1, y2
local float s=Sin(Rad(sr))
local float c=-Cos(Rad(sr))
rx2(lpos)=s*o + x
ry2(lpos)=c*o + y
rx1(lpos)=s*i + x 'i is 0 if not specified so a complete line from the centre is drawn
ry1(lpos)=c*i + y
End Sub
'
function CohenSutherlandLineClip(x0 as float, y0 as float, x1 as float, y1 as float) as integer
' compute outcodes for P0, P1, and whatever point lies outside the clip rectangle
local integer outcode0 = ComputeOutCode(x0, y0)
local integer outcode1 = ComputeOutCode(x1, y1)
local integer outcodeout
local float x,y
do while (1)
if (NOT(outcode0 OR outcode1)) then ' Bitwise OR is 0. Trivially accept and get out of loop
CohenSutherlandLineClip = 0
exit do
elseif (outcode0 AND outcode1) then 'Bitwise AND is not 0. Trivially reject and get out of loop
CohenSutherlandLineClip = (outcode0 AND outcode1)
exit do
else
' failed both tests, so calculate the line segment to clip
' from an outside point to an intersection with clip edge
' At least one endpoint is outside the clip rectangle; pick it.
if outcode0 then
outcodeOut = outcode0
else
outcodeOut = outcode1
endif
' Now find the intersection point;
' use formulas y = y0 + slope * (x - x0), x = x0 + (1 / slope) * (y - y0)
if (outcodeOut and C_TOP) then ' point is above the clip rectangle
x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0)
y = ymax
elseif (outcodeOut AND C_BOTTOM) then ' point is below the clip rectangle
x = x0 + (x1 - x0) * (ymin - y0) / (y1 - y0)
y = ymin
elseif (outcodeOut AND C_RIGHT) then ' point is to the right of clip rectangle
y = y0 + (y1 - y0) * (xmin - x0) / (x1 - x0)
x = xmax
elseif (outcodeOut AND C_LEFT) then' point is to the left of clip rectangle
y = y0 + (y1 - y0) * (xmax - x0) / (x1 - x0)
x = xmin
endif
' Now we move outside point to intersection point to clip
' and get ready for next pass.
if (outcodeOut = outcode0) then
x0 = x
y0 = y
outcode0 = ComputeOutCode(x0, y0)
else
x1 = x
y1 = y
outcode1 = ComputeOutCode(x1, y1)
endif
endif
loop
end function

function ComputeOutCode(x as float, y as float) as integer
ComputeOutCode = C_INSIDE ' initialised as being inside of clip window
if (x < xmin) then ' to the left of clip window
ComputeOutCode =ComputeOutCode OR C_LEFT
elseif (x > xmax) then ' to the right of clip window
ComputeOutCode =ComputeOutCode OR RIGHT
endif
if (y < ymin) then ' below the clip window
ComputeOutCode =ComputeOutCode OR C_BOTTOM
elseif (y > ymax) then ' above the clip window
ComputeOutCode =ComputeOutCode OR C_TOP
endif
end function
'
Csub lines
00000000
27BDFFC0 8FA30058 AFB70034 AFB60030 AFB5002C AFB20020 AFBF003C AFBE0038
AFB40028 AFB30024 AFB1001C AFB00018 8C730000 8C820004 00809021 2673FFFF
00131900 00139A00 00A0B821 00C0B021 00E0A821 1C400006 00739821 14400028
8FBF003C 8C820000 10400026 8FBE0038 00008021 00008821 3C149D00 241E0001
8FA30054 8FA70050 02F02021 00701021 8C420000 00F01821 02D02821 02B03021
8C670000 8CA50000 8C840000 8CC60000 AFBE0010 AFA20014 8E820050 02652821
0040F809 02673821 8E430004 26310001 001117C3 0043182A 1460FFE9 26100008
8E430004 14620006 8FBF003C 8E420000 0222202B 1480FFE3 8FA30054 8FBF003C
8FBE0038 8FB70034 8FB60030 8FB5002C 8FB40028 8FB30024 8FB20020 8FB1001C
8FB00018 03E00008 27BD0040
End Csub
'
Csub triangles 'draws multiple triangles with a delay between if required
00000000
27BDFF78 AFBF0084 AFBE0080 AFB7007C AFB60078 AFB50074 AFB40070 AFB3006C
AFB20068 AFB10064 AFB00060 AFA40088 8C820004 5C400007 AFA5002C 144000EB
8FBF0084 8C820000 104000E9 8FBE0080 AFA5002C 8FA20098 8FA3009C 8FA400A0
8FA500A4 AFA60030 AFA70034 AFA20038 AFA3003C AFA40040 AFA50044 AFA00028
3C159D00 8FA20030 8FA30038 8FA4002C 8C5E0000 8C630000 8FA50034 AFA30018
007E102A 8FA3003C 8C910000 8CB70000 8C630000 8FA40040 8FA50044 AFA30024
8C960000 10400007 8CB40000 03C01821 02201021 8FBE0018 02E08821 AFA30018
0040B821 8FA30018 02C3102A 10400007 8FA40018 02E01021 AFB60018 8FB70024
0060B021 AFA20024 8FA40018 009E102A 10400006 03C01821 02201021 0080F021
02E08821 AFA30018 0040B821 17D6001B 8FA30018 02F1102A 14400006 02203821
0237102A 10400005 8FA50024 10000002 02E03821 02E08821 8FA50024 00B1102A
54400003 8FB10024 00E5102A 00A2380B 8EA20048 AFB40010 00FE3821 8C420000
02202021 03C02821 02203021 0040F809 00F13823 10000066 8FA500A8 00761026
0002102B 00621023 AFA2001C 005E102A 14400030 03C08021 8FA50024 007E1023
02F12023 00B12823 02DEF823 AFBE0050 AFB70054 AFB60058 AFA40020 AFA50048
00009021 00009821 AFA2004C 00A0F021 0040B821 03E0B021 0277001A 02E001F4
8FA20020 02002821 02003821 02629821 26100001 00002012 00912021 00801021
0256001A 02C001F4 00003012 00D13021 00C4182A 10600003 025E9021 00C02021
00403021 8EA20048 AFB40010 8C420000 0040F809 00000000 8FA3001C 0070102A
1040FFE5 00000000 8FBE0050 8FB70054 8FB60058 02D0102A 1440002C 8FA20024
8FA50018 8FA40024 00511023 AFA20020 02C51023 AFA20018 8FA20020 00972023
021E9823 02059023 72449002 AFA4001C 02DEF023 70539802 8FA30018 8FA2001C
02002821 0243001A 006001F4 8FA30020 02003821 02429021 26100001 00002012
00972021 027E001A 03C001F4 02639821 00003012 00D13021 00C4182A 10600003
00801021 00C02021 00403021 8EA20048 AFB40010 8C420000 0040F809 00000000
02D0102A 1040FFE5 8FA30018 8FA500A8 8CA40000 8CA20004 00821025 50400005
8FA40028 8EA20004 0040F809 00000000 8FA40028 8FA5002C 8FA20088 24840001
24A50008 8C430004 AFA40028 000417C3 AFA5002C 8FA40030 8FA50034 0043182A
24840008 24A50008 AFA40030 AFA50034 8FA40038 8FA5003C 24840008 24A50008
AFA40038 AFA5003C 8FA40040 8FA50044 24840008 24A50008 AFA40040 AFA50044
1460FF30 8FA40028 8FA50088 8CA30004 14620006 8FBF0084 8CA20000 0082202B
1480FF29 8FA20030 8FBF0084 8FBE0080 8FB7007C 8FB60078 8FB50074 8FB40070
8FB3006C 8FB20068 8FB10064 8FB00060 03E00008 27BD0088
End Csub
'
CSub dcirch
00000000
27BDFFA0 AFB1003C AFB00038 AFBF005C AFBE0058 AFB70054 AFB60050 AFB5004C
AFB40048 AFB30044 AFB20040 8C840000 8FB00070 8FB10078 AFA4002C 8E020000
8CA50000 8CD20000 0082102A 8CF40000 14400010 AFA50018 8E220000 0044102A
1440000D 3C029D00 8FA20074 8C430000 02451021 0043182A 54600007 3C029D00
8FA4007C 8C830000 0062102A 10400015 8FA20074 3C029D00 8C420048 8FA30018
8FA4002C AFB40010 8C420000 02433821 00803021 0040F809 00E02821 8E020000
8FA4002C 0082102A 14400012 3C029D00 8E220000 0044102A 1440000E 3C029D00
8FA20074 8FA40018 8C430000 00921023 0043182A 54600007 3C029D00 8FA4007C
8C830000 0062102A 1040000C 8FA4002C 3C029D00 8C420048 8FA30018 AFB40010
8FA4002C 8C420000 00723823 00E02821 0040F809 00803021 8FA4002C 8E020000
02443021 00C2102A 14400011 3C029D00 8E220000 0046102A 1440000D 3C029D00
8FA30074 8FA40018 8C620000 0082102A 14400007 3C029D00 8FA3007C 8C620000
0044102A 1040000A 8FA4002C 3C029D00 8C420048 8FA50018 AFB40010 8C420000
00C02021 0040F809 00A03821 8FA4002C 8E020000 00923023 00C2102A 14400010
3C029D00 8E220000 0046102A 1440000C 3C029D00 8FA30074 8FA40018 8C620000
0082102A 14400006 3C029D00 8FA3007C 8C620000 0044102A 10400008 3C029D00
8C420048 8FA50018 AFB40010 8C420000 00C02021 0040F809 00A03821 1A40010F
24030001 00721823 00121023 00021040 AFA30024 8FA4002C 8FA3002C AFA20030
8FA20018 2484FFFF 24630001 AFA40020 2457FFFF 245E0001 AFA3001C AFA00028
3C159D00 8FA40024 04800006 8FA20030 2652FFFF 24420002 00822021 AFA20030
AFA40024 8E020000 8FA30028 8FB6001C 24630001 02C2102A 14400011 AFA30028
8E220000 0056102A 5440000E 8EA20048 8FA40074 8C830000 8FA40018 02441021
0043182A 54600007 8EA20048 8FA4007C 8C830000 0062102A 1040000B 8FA4002C
8EA20048 8FA30018 AFB40010 8C420000 02433821 02C02021 00E02821 0040F809
02C03021 8FA4002C 8E020000 02449821 0262102A 54400010 8EA20048 8E220000
0053102A 5440000C 8EA20048 8FA30074 8C620000 03C2102A 54400007 8EA20048
8FA4007C 8C820000 005E102A 5040000A 8E020000 8EA20048 AFB40010 02602021
8C420000 03C02821 02603021 0040F809 03C03821 8E020000 02C2102A 54400012
8EA20048 8E220000 0056102A 5440000E 8EA20048 8FA20074 8FA40018 8C430000
00921023 0043182A 54600007 8EA20048 8FA4007C 8C830000 0062102A 5040000B
8E020000 8EA20048 8FA30018 AFB40010 8C420000 00723823 02C02021 00E02821
0040F809 02C03021 8E020000 0262102A 54400010 8EA20048 8E220000 0053102A
5440000C 8EA20048 8FA40074 8C820000 02E2102A 54400007 8EA20048 8FA3007C
8C620000 0057102A 1040000A 8FA4002C 8EA20048 AFB40010 02602021 8C420000
02E02821 02603021 0040F809 02E03821 8FA4002C 8E020000 00929823 0262102A
54400010 8EA20048 8E220000 0053102A 5440000C 8EA20048 8FA30074 8C620000
03C2102A 54400007 8EA20048 8FA4007C 8C820000 005E102A 5040000A 8E020000
8EA20048 AFB40010 02602021 8C420000 03C02821 02603021 0040F809 03C03821
8E020000 8FB60020 02C2102A 54400012 8EA20048 8E220000 0056102A 5440000E
8EA20048 8FA20074 8FA40018 8C430000 02441021 0043182A 54600007 8EA20048
8FA4007C 8C830000 0062102A 5040000B 8E020000 8EA20048 8FA30018 AFB40010
8C420000 02433821 02C02021 00E02821 0040F809 02C03021 8E020000 0262102A
54400010 8EA20048 8E220000 0053102A 5440000C 8EA20048 8FA40074 8C820000
02E2102A 54400007 8EA20048 8FA3007C 8C620000 0057102A 5040000A 8E020000
8EA20048 AFB40010 02602021 8C420000 02E02821 02603021 0040F809 02E03821
8E020000 02C2102A 54400012 8EA20048 8E220000 0056102A 5440000E 8EA20048
8FA40074 8C830000 8FA40018 00921023 0043182A 54600007 8EA20048 8FA4007C
8C830000 0062102A 1040000B 8FA40028 8EA20048 8FA30018 AFB40010 8C420000
00723823 02C02021 00E02821 0040F809 02C03021 8FA40028 8FA30020 26F7FFFF
0092102A 8FA4001C 2463FFFF AFA30020 24840001 27DE0001 10400008 AFA4001C
8FA30028 8FA40024 00031040 24420001 00822021 1000FF03 AFA40024 8FBF005C
8FBE0058 8FB70054 8FB60050 8FB5004C 8FB40048 8FB30044 8FB20040 8FB1003C
8FB00038 03E00008 27BD0060
End CSub
Edited by matherp 2016-03-17
 
Zonker

Guru

Joined: 18/08/2012
Location: United States
Posts: 767
Posted: 03:07pm 16 Mar 2016
Copy link to clipboard 
Print this post

Peter.. Absolutely stunning piece of work..!

I am sitting here and have been staring at your code for awhile trying to wrap my little 8 bit brain around it... Wow... gonna be awhile..

A big thank you for sharing your hard work with everyone here at TBS..!!
Your knowledge of GUI creation needed for this type of display is awesome...

EDIT: I do think I have the parts to build up the display engine..!
Edited by Zonker 2016-03-18
 
Print this page


To reply to this topic, you need to log in.

The Back Shed's forum code is written, and hosted, in Australia.
© JAQ Software 2025