IF XVR > 999 THEN
[Work the first digit]
ENDIF ;If not, no action taken
IF XVR > 99 THEN
[Work the 2nd digit]
ENDIF ;If not, no action taken
IF XVR > 999 THEN
[Work the first digit]
ENDIF ;If not, no action taken
IF XVR > 99 THEN
[Work the 2nd digit]
ENDIF ;If not, no action taken
I'm doing a more featured custom decoder, which will display both letters and digits on max7219 7 segment display. It will also have custom decoder for digital values. The code is below:
This code works, but DLEN instead of cropping digits from the left, crops them from the right - say initial variable is "12345" and I want to display 2 digits from it, I'm getting "45" instead of "12", have no idea why. Same for start position - DSTART starts from rightmost position, instead of leftmost....Code:FOURD=12345 'test value dstart=2 'start segment DLEN=2 'decode length TEST: 'test digits FOR x=DLEN TO 1 STEP -1 Z=FOURD DIG X+1 'EXTRACT VALUE GOSUB FOURDEC PAUSE 500 NEXT GOTO TEST FOURDEC: 'DIGIT DECODER if Z=0 then Y=126 if Z=1 then Y=48 if z=2 then Y=109 if z=3 then Y=121 if z=4 then Y=51 if z=5 then Y=91 if z=6 then Y=95 if z=7 then Y=112 if z=8 then Y=127 if z=9 then Y=115 low load shiftout datapin,clockpin,1,[x+DSTART-1, y] 'DISPLAY THE LETTER high load RETURN
FOURD=12345
FOURD=FOURD>>2 should return FOURD=123, right? but it returns 11419 !
Forgot to mention, startup shift fixed:
shiftout datapin,clockpin,1,[X-DLEN+DSTART, y]
Not sure how that happened. First, you wouldn't get "123", as Right Shift 2 (>> 2) is the same as Divide by 4; in which case 12345 >> 2 = 3086 and not 11419.
Since you're dealing with a display, you may have to treat each place holder as a unique byte (perhaps value + $30 to convert it to ASCii); "12345" would be saved as $31, $32, $33, $34, $35 in an array. You can then shift your pointer 2 places to look at 123 by itself (as 3 individual bytes, of course).
I've written a PC based converter, which deals with ASCII conversion. It generates PBP code for EEPROM.
![]()
So back to shift.
How to trim one variable from left to right, to value of another variable?
say trim 12345 by 3 - mean, make 123 digits from it.
12345 / 10 = 1234
12345 / 100 = 123
12345 / 1000 = 12
12345 / 10000 = 1
/Henrik.
This requires too many IFs....
On spectrum we had X=LEFT(Y,Z)....
Bookmarks