Well, I came up with a way to do 7 level (although not completely flicker-less) grayscale in Axe.
I used Hayleia's interrupt method for getting that nearly perfect refresh rate!
Here's the source:
:.PIC8
:
:FnOff
:
:ClrDraw{^r}{^r}
:
:[FFFFFFFFFFFFFFFF]→Pic1
:
:0→T
:
:det(768,0)→C
:
:det(768,0)→B
:
:det(768,0)→A
:
:For(Y,0,7)
:Pt-On(8,Y*8,Pic1,C)
:Pt-On(32,Y*8,Pic1,C)
:Pt-On(48,Y*8,Pic1,C)
:Pt-On(16,Y*8,Pic1,B)
:Pt-On(40,Y*8,Pic1,B)
:Pt-On(48,Y*8,Pic1,B)
:Pt-On(24,Y*8,Pic1,A)
:Pt-On(32,Y*8,Pic1,A)
:Pt-On(40,Y*8,Pic1,A)
:Pt-On(48,Y*8,Pic1,A)
:End
:
:FnInt(D,0)
:
:While 1
:EndIf getKey(15)
:LnReg {^r}
:Return
:
:Lbl D
:!If (T++^5)
:DispGraph(A,C){^r}{^r}
:DispGraph(B,A){^r}{^r}
:End
:Return
Do you see the secret? It's buffers! Instead of using the default buffers, I created 3 buffers that have different weights. They go as follows:
none: 0/6
C: 1/6
B: 2/6
A: 3/6
You can not repeat buffers, but you can add them up to get all values 0-6 out of 6
The key in the code is this section (the only one I will explain)
:Lbl D
:!If (T++^5)
:DispGraph(A,C){^r}{^r}
:DispGraph(B,A){^r}{^r}
:End
:Return
The front buffer gets a weight of 2/6, and the back, 1/6. Add up the totals, and you get A=3, B=2, and C=1!
So long as you get those totals, it doesn't matter how you display the graph (within the interrupt or not) (which makes it less flickery, but more inconsistent)
That's it! Pretty simple, eh?
Good luck, and may the grayscale be with you!