#include <vectrex.h> // If you don't already use 'draw_synced_list_c', uncomment the #define below: //#define USE_LOCAL_DRAW_SYNCHED_LIST 1 #ifdef USE_LOCAL_DRAW_SYNCHED_LIST // this is Malban's "C" optimized version of print_sync // (remember to set the project options to -O3 and no_frame_pointer) #define ZERO_DELAY 5 static void draw_synced_list_c( const signed char *u, signed int y, signed int x, unsigned int scaleMove, unsigned int scaleList ) { do { // resync / startsync dp_VIA_shift_reg = 0; // all output is BLANK // move to zero dp_VIA_cntl = (unsigned int)0xcc; // zero the integrators dp_VIA_port_a = 0; // reset integrator offset dp_VIA_port_b = (int)0b10000010; dp_VIA_t1_cnt_lo = scaleMove; // delay, till beam is at zero // volatile - otherwise delay loop does not work with -O for (volatile signed int b=ZERO_DELAY; b>0; b--); dp_VIA_port_b= (int)0b10000011; // move to "location" dp_VIA_port_a = y; // y pos to dac dp_VIA_cntl = (unsigned int)0xce; // disable zero, disable all blank dp_VIA_port_b = 0; // mux enable, dac to -> integrator y (and x) dp_VIA_port_b = 1; // mux disable, dac only to x dp_VIA_port_a = x; // dac -> x dp_VIA_t1_cnt_hi=0; // start timer // this can be done before the wait loop // since it only fills the latch, not the actual timer! dp_VIA_t1_cnt_lo = scaleList; u+=3; // moving test for yx == 0 into the move delay if ((*(u-2)!=0) || (*(u-1)!=0)) { while ((dp_VIA_int_flags & 0x40) == 0); // wait till timer finishes // internal moveTo dp_VIA_port_a = *(u-2); // y pos to dac dp_VIA_cntl = (unsigned int)0xce; // disable zero, disable all blank dp_VIA_port_b = 0; // mux enable, dac to -> integrator y (and x) dp_VIA_port_b = 1; // mux disable, dac only to x dp_VIA_port_a = *(u-1); // dac -> x dp_VIA_t1_cnt_hi=0; // start timer while ((dp_VIA_int_flags & 0x40) == 0); // wait till timer finishes } else { while ((dp_VIA_int_flags & 0x40) == 0); // wait till timer finishes } while (1) { if (*u<0) // draw line { // draw a vector dp_VIA_port_a = *(1+u); // y pos to dac dp_VIA_port_b = 0; // mux enable, dac to -> integrator y (and x) dp_VIA_port_b=1; // mux disable, dac only to x dp_VIA_port_a = *(2+u); // dac -> x dp_VIA_t1_cnt_hi=0; // start timer dp_VIA_shift_reg = (unsigned int)0xff; // draw complete line if (scaleList>10) { while ((dp_VIA_int_flags & 0x40) == 0); // wait till timer finishes } dp_VIA_shift_reg = 0; // all output is BLANK } else if (*u == 0) // moveTo { if ((*(u+1)!=0) || (*(u+2)!=0)) { // internal moveTo dp_VIA_port_a = *(1+u); // y pos to dac dp_VIA_cntl = (unsigned int)0xce; // disable zero, disable all blank dp_VIA_port_b = 0; // mux enable, dac to -> integrator y (and x) dp_VIA_port_b =1; // mux disable, dac only to x dp_VIA_port_a = *(2+u); // dac -> x dp_VIA_t1_cnt_hi=0; // start timer while ((dp_VIA_int_flags & 0x40) == 0); // wait till timer finishes } } else { break; } u+=3; } } while (*u != 2); } #else extern void draw_synced_list_c( const signed char *u, signed int y, signed int x, unsigned int scaleMove, unsigned int scaleList ); #endif // font came from protel hardware, hence the name. (via Nadim el Saleh, thanks.) // Coded with multiple arrays to minimise wasted space if we used a 2D array... // Should really remove the initial redundant move (or accumulate moves internally and only // move the beam once before drawing a line) // Beam should be positioned ready for next character after drawing each character, so // some optimisation possible there too at the cost of fewer Reset0Ref's. const int protel_32[/*' '*/] = { 0,15,15, 0,-15,0x6f, 2 }; const int protel_33[/*'!'*/] = { 0,15,15, -1,16,0, 0,16,0, -1,64,0, 0,-111,32, 2 }; const int protel_34[/*'"'*/] = { 0,15,15, 0,64,0, -1,32,0, 0,0,16, -1,-32,0, 0,-79,32, 2 }; const int protel_35[/*'#'*/] = { 0,15,15, 0,32,0, -1,0,64, 0,32,0, -1,0,-64, 0,32,16, -1,-96,0, 0,0,32, -1,96,0, 0,-111,48, 2 }; const int protel_36[/*'$'*/] = { 0,15,15, 0,16,0, -1,0,48, -1,16,16, -1,16,-16, -1,0,-32, -1,16,-16, -1,16,16, -1,0,48, 0,16,-32, -1,-96,0, 0,-15,64, 2 }; const int protel_37[/*'%'*/] = { 0,15,15, -1,16,0, -1,64,64, -1,16,0, 0,0,-48, -1,0,-16, -1,-16,0, -1,0,16, -1,16,0, 0,-96,48, -1,16,0, -1,0,-16, -1,-16,0, -1,0,16, 0,-15,32, 2 }; const int protel_38[/*'&'*/] = { 0,15,15, 0,32,64, -1,-32,-32, -1,0,-16, -1,16,-16, -1,16,0, -1,32,32, -1,16,0, -1,16,-16, -1,-16,-16, -1,-16,0, -1,-64,64, 0,-15,32, 2 }; const int protel_39[/*'''*/] = { 0,15,15, 0,64,0, -1,32,0, 0,-111,32, 2 }; const int protel_40[/*'('*/] = { 0,15,15, 0,96,32, -1,-32,-32, -1,-32,0, -1,-32,32, 0,-15,32, 2 }; const int protel_41[/*')'*/] = { 0,15,15, -1,32,32, -1,32,0, -1,32,-32, 0,-111,64, 2 }; const int protel_42[/*'*'*/] = { 0,15,15, 0,16,0, -1,64,64, 0,0,-32, -1,-64,0, 0,32,32, -1,0,-64, 0,32,0, -1,-64,64, 0,-31,32, 2 }; const int protel_43[/*'+'*/] = { 0,15,15, 0,48,0, -1,0,64, 0,32,-32, -1,-64,0, 0,-31,64, 2 }; const int protel_44[/*','*/] = { 0,15,15, 0,-46,-46, -1,46,46, -1,16,0, 0,-31,32, 2 }; const int protel_45[/*'-'*/] = { 0,15,15, 0,48,0, -1,0,64, 0,-63,32, 2 }; const int protel_46[/*'.'*/] = { 0,15,15, -1,16,0, 0,-31,32, 2 }; const int protel_47[/*'/'*/] = { 0,15,15, -1,16,0, -1,64,64, -1,16,0, 0,-111,32, 2 }; const int protel_48[/*'0'*/] = { 0,15,15, 0,16,0, -1,64,0, -1,16,16, -1,0,16, -1,-16,16, -1,-64,0, -1,-16,-16, -1,0,-16, -1,16,-16, 0,-31,80, 2 }; const int protel_49[/*'1'*/] = { 0,15,15, -1,0,32, 0,80,-32, -1,16,16, -1,-96,0, 0,-15,48, 2 }; const int protel_50[/*'2'*/] = { 0,15,15, 0,80,0, -1,16,16, -1,0,32, -1,-16,16, -1,-16,0, -1,-16,-16, -1,0,-32, -1,-16,-16, -1,-32,0, -1,0,64, 0,-15,32, 2 }; const int protel_51[/*'3'*/] = { 0,15,15, 0,16,0, -1,-16,16, -1,0,32, -1,16,16, -1,16,0, -1,16,-16, -1,0,-16, 0,0,16, -1,16,16, -1,16,0, -1,16,-16, -1,0,-32, -1,-16,-16, 0,-95,96, 2 }; const int protel_52[/*'4'*/] = { 0,15,15, 0,0,48, -1,96,0, -1,-48,-48, -1,-16,0, -1,0,64, 0,-47,32, 2 }; const int protel_53[/*'5'*/] = { 0,15,15, 0,16,0, -1,-16,16, -1,0,32, -1,16,16, -1,32,0, -1,16,-16, -1,0,-48, -1,32,0, -1,0,64, 0,-111,32, 2 }; const int protel_54[/*'6'*/] = { 0,15,15, 0,48,0, -1,0,48, -1,-16,16, -1,-16,0, -1,-16,-16, -1,0,-32, -1,16,-16, -1,48,0, -1,32,32, -1,0,16, 0,-111,48, 2 }; const int protel_55[/*'7'*/] = { 0,15,15, -1,16,0, -1,64,64, -1,16,0, -1,0,-64, 0,-111,96, 2 }; const int protel_56[/*'8'*/] = { 0,15,15, 0,0,16, -1,16,-16, -1,16,0, -1,16,16, -1,16,-16, -1,16,0, -1,16,16, -1,0,32, -1,-16,16, -1,-16,0, -1,-16,-16, -1,-16,16, -1,-16,0, -1,-16,-16, -1,0,-32, 0,48,0, -1,0,32, 0,-63,48, 2 }; const int protel_57[/*'9'*/] = { 0,15,15, 0,0,16, -1,0,16, -1,32,32, -1,48,0, -1,16,-16, -1,0,-32, -1,-16,-16, -1,-16,0, -1,-16,16, -1,0,48, 0,-63,32, 2 }; const int protel_58[/*':'*/] = { 0,15,15, 0,16,0, -1,16,0, 0,16,0, -1,16,0, 0,-79,32, 2 }; const int protel_59[/*';'*/] = { 0,15,15, 0,-46,-46, -1,46,46, -1,32,0, 0,16,0, -1,16,0, 0,-79,32, 2 }; const int protel_60[/*'<'*/] = { 0,15,15, 0,96,32, -1,-48,-78, -1,-48,78, 0,-15,32, 2 }; const int protel_61[/*'='*/] = { 0,15,15, 0,32,0, -1,0,64, 0,16,0, -1,0,-64, 0,-63,96, 2 }; const int protel_62[/*'>'*/] = { 0,15,15, -1,48,48, -1,48,-48, 0,-111,80, 2 }; const int protel_63[/*'?'*/] = { 0,15,15, 0,80,0, -1,16,16, -1,0,16, -1,-16,16, -1,-16,0, -1,-16,-16, -1,-16,0, 0,-16,0, -1,-16,0, 0,-15,48, 2 }; const int protel_64[/*'@'*/] = { 0,15,15, 0,80,0, -1,16,16, -1,0,32, -1,-16,16, -1,-64,0, -1,-16,-16, -1,0,-32, -1,16,-16, -1,16,0, -1,16,16, -1,-16,16, -1,-16,0, 0,-31,64, 2 }; const int protel_65[/*'A'*/] = { 0,15,15, -1,32,0, -1,64,32, -1,-64,32, -1,0,-64, 0,0,64, -1,-32,0, 0,-15,32, 2 }; const int protel_66[/*'B'*/] = { 0,15,15, -1,0,16, -1,0,32, -1,16,16, -1,16,0, -1,16,-16, -1,16,16, -1,16,0, -1,16,-16, -1,0,-48, 0,0,16, -1,-96,0, 0,48,0, -1,0,32, 0,-63,48, 2 }; const int protel_67[/*'C'*/] = { 0,15,15, 0,80,64, -1,16,-16, -1,0,-32, -1,-16,-16, -1,-64,0, -1,-16,16, -1,0,32, -1,16,16, 0,-31,32, 2 }; const int protel_68[/*'D'*/] = { 0,15,15, -1,0,48, -1,16,16, -1,64,0, -1,16,-16, -1,0,-48, 0,0,16, -1,-96,0, 0,-15,80, 2 }; const int protel_69[/*'E'*/] = { 0,15,15, 0,96,64, -1,0,-64, -1,-96,0, -1,0,64, 0,48,-64, -1,0,32, 0,-63,64, 2 }; const int protel_70[/*'F'*/] = { 0,15,15, -1,96,0, -1,0,64, 0,-48,-64, -1,0,32, 0,-63,64, 2 }; const int protel_71[/*'G'*/] = { 0,15,15, 0,96,64, -1,0,-48, -1,-16,-16, -1,-64,0, -1,-16,16, -1,0,48, -1,48,0, -1,0,-16, 0,-63,48, 2 }; const int protel_72[/*'H'*/] = { 0,15,15, -1,96,0, 0,-48,0, -1,0,64, 0,48,0, -1,-96,0, 0,-15,32, 2 }; const int protel_73[/*'I'*/] = { 0,15,15, -1,0,32, 0,0,-16, -1,96,0, 0,0,-16, -1,0,32, 0,-111,32, 2 }; const int protel_74[/*'J'*/] = { 0,15,15, 0,16,0, -1,-16,16, -1,0,32, -1,16,16, -1,80,0, 0,-111,32, 2 }; const int protel_75[/*'K'*/] = { 0,15,15, -1,96,0, 0,-48,0, -1,0,16, -1,48,48, 0,-48,-48, -1,-48,48, 0,-15,32, 2 }; const int protel_76[/*'L'*/] = { 0,15,15, 0,96,0, -1,-96,0, -1,0,64, 0,-15,32, 2 }; const int protel_77[/*'M'*/] = { 0,15,15, -1,96,0, -1,-64,32, -1,64,32, -1,-96,0, 0,-15,32, 2 }; const int protel_78[/*'N'*/] = { 0,15,15, -1,96,0, -1,-64,64, 0,64,0, -1,-96,0, 0,-15,32, 2 }; const int protel_79[/*'O'*/] = { 0,15,15, -1,96,0, -1,0,64, -1,-96,0, -1,0,-64, 0,-15,96, 2 }; const int protel_80[/*'P'*/] = { 0,15,15, -1,96,0, -1,0,48, -1,-16,16, -1,-16,0, -1,-16,-16, -1,0,-48, 0,-63,96, 2 }; const int protel_81[/*'Q'*/] = { 0,15,15, 0,16,0, -1,64,0, -1,16,16, -1,0,32, -1,-16,16, -1,-48,0, -1,-32,-32, -1,0,-16, -1,16,-16, 0,16,32, -1,-32,32, 0,-15,32, 2 }; const int protel_82[/*'R'*/] = { 0,15,15, -1,96,0, -1,0,48, -1,-16,16, -1,-16,0, -1,-16,-16, -1,0,-48, 0,0,16, -1,-48,48, 0,-15,32, 2 }; const int protel_83[/*'S'*/] = { 0,15,15, 0,16,0, -1,-16,16, -1,0,32, -1,16,16, -1,64,-64, -1,16,16, -1,0,32, -1,-16,16, 0,-95,32, 2 }; const int protel_84[/*'T'*/] = { 0,15,15, 0,96,0, -1,0,64, 0,0,-32, -1,-96,0, 0,-15,64, 2 }; const int protel_85[/*'U'*/] = { 0,15,15, 0,96,0, -1,-80,0, -1,-16,16, -1,0,32, -1,16,16, -1,80,0, 0,-111,32, 2 }; const int protel_86[/*'V'*/] = { 0,15,15, 0,96,0, -1,-96,48, -1,96,48, 0,-111,32, 2 }; const int protel_87[/*'W'*/] = { 0,15,15, 0,96,0, -1,-80,0, -1,-16,16, -1,32,32, -1,16,0, 0,-16,0, -1,-32,32, -1,16,16, -1,80,0, 0,-111,32, 2 }; const int protel_88[/*'X'*/] = { 0,15,15, -1,16,0, -1,64,64, -1,16,0, 0,0,-64, -1,-16,0, -1,-64,64, -1,-16,0, 0,-15,32, 2 }; const int protel_89[/*'Y'*/] = { 0,15,15, 0,96,0, -1,-16,0, -1,-32,32, -1,32,32, -1,16,0, 0,-48,-32, -1,-48,0, 0,-15,64, 2 }; const int protel_90[/*'Z'*/] = { 0,15,15, 0,96,0, -1,0,64, -1,-16,0, -1,-64,-64, -1,-16,0, -1,0,64, 0,-15,32, 2 }; const int protel_91[/*'['*/] = { 0,15,15, 0,96,32, -1,0,-32, -1,-96,0, -1,0,32, 0,-15,32, 2 }; const int protel_92[/*'\'*/] = { 0,15,15, 0,96,0, -1,-16,0, -1,-64,64, -1,-16,0, 0,-15,32, 2 }; const int protel_93[/*']'*/] = { 0,15,15, -1,0,32, -1,96,0, -1,0,-32, 0,-111,64, 2 }; const int protel_94[/*'^'*/] = { 0,15,15, 0,64,0, -1,32,32, -1,-32,32, 0,32,-32, -1,-96,0, 0,-15,64, 2 }; const int protel_95[/*'_'*/] = { 0,15,15, 0,-46,0, -1,0,64, 0,31,32, 2 }; const int protel_96[/*'`'*/] = { 0,15,15, 0,96,0, -1,-32,32, 0,-79,32, 2 }; const int protel_97[/*'a'*/] = { 0,15,15, 0,16,48, -1,-16,-16, -1,0,-16, -1,16,-16, -1,32,0, -1,16,16, -1,0,16, -1,-16,16, -1,-32,0, -1,-16,16, 0,-15,32, 2 }; const int protel_98[/*'b'*/] = { 0,15,15, -1,96,0, 0,-64,0, -1,32,32, -1,0,16, -1,-16,16, -1,-32,0, -1,-16,-16, -1,0,-16, -1,32,-32, 0,-47,96, 2 }; const int protel_99[/*'c'*/] = { 0,15,15, 0,64,64, -1,0,-48, -1,-16,-16, -1,-32,0, -1,-16,16, -1,0,48, 0,-15,32, 2 }; const int protel_100[/*'d'*/] = { 0,15,15, 0,16,0, -1,32,0, -1,16,16, -1,0,16, -1,-32,32, -1,-32,-32, -1,0,-16, -1,16,-16, 0,80,64, -1,-96,0, 0,-15,32, 2 }; const int protel_101[/*'e'*/] = { 0,15,15, 0,32,0, -1,0,48, -1,16,16, -1,16,-16, -1,0,-32, -1,-16,-16, -1,-32,0, -1,-16,16, -1,0,32, 0,-15,48, 2 }; const int protel_102[/*'f'*/] = { 0,15,15, 0,0,16, -1,80,0, -1,16,16, -1,0,16, -1,-16,16, 0,-32,-64, -1,0,48, 0,-63,48, 2 }; const int protel_103[/*'g'*/] = { 0,15,15, 0,-46,0, -1,-16,16, -1,0,32, -1,16,16, -1,94,0, -1,16,-16, -1,0,-32, -1,-16,-16, -1,-32,0, -1,-16,16, -1,0,48, 0,-15,32, 2 }; const int protel_104[/*'h'*/] = { 0,15,15, -1,96,0, 0,-64,0, -1,32,32, -1,0,16, -1,-16,16, -1,-48,0, 0,-15,32, 2 }; const int protel_105[/*'i'*/] = { 0,15,15, -1,48,0, 0,16,0, -1,16,0, 0,-95,32, 2 }; const int protel_106[/*'j'*/] = { 0,15,15, 0,-46,0, -1,-16,16, -1,0,16, -1,16,16, -1,94,0, 0,16,0, -1,16,0, 0,-95,32, 2 }; const int protel_107[/*'k'*/] = { 0,15,15, -1,96,0, 0,-64,0, -1,0,32, -1,32,32, 0,-32,-32, -1,-32,32, 0,-15,32, 2 }; const int protel_108[/*'l'*/] = { 0,15,15, 0,96,0, -1,-80,0, -1,-16,16, 0,-15,32, 2 }; const int protel_109[/*'m'*/] = { 0,15,15, -1,64,0, 0,-16,0, -1,16,16, -1,-16,16, -1,-16,0, 0,16,0, -1,16,16, -1,-16,16, -1,-48,0, 0,-15,32, 2 }; const int protel_110[/*'n'*/] = { 0,15,15, -1,64,0, 0,-16,0, -1,16,16, -1,0,16, -1,-16,16, -1,-48,0, 0,-15,32, 2 }; const int protel_111[/*'o'*/] = { 0,15,15, 0,16,0, -1,32,0, -1,16,16, -1,0,32, -1,-16,16, -1,-32,0, -1,-16,-16, -1,0,-32, -1,16,-16, 0,-31,96, 2 }; const int protel_112[/*'p'*/] = { 0,15,15, -1,0,48, -1,16,16, -1,32,0, -1,16,-16, -1,0,-32, -1,-16,-16, 0,16,0, -1,-126,0, 0,47,96, 2 }; const int protel_113[/*'q'*/] = { 0,15,15, 0,0,64, -1,0,-48, -1,16,-16, -1,32,0, -1,16,16, -1,0,32, -1,-16,16, 0,16,0, -1,-126,0, 0,47,32, 2 }; const int protel_114[/*'r'*/] = { 0,15,15, -1,64,0, 0,-32,0, -1,32,32, -1,0,16, -1,-16,16, 0,-63,32, 2 }; const int protel_115[/*'s'*/] = { 0,15,15, -1,0,48, -1,16,16, -1,16,-16, -1,0,-32, -1,16,-16, -1,16,16, -1,0,48, 0,-79,32, 2 }; const int protel_116[/*'t'*/] = { 0,15,15, 0,96,32, -1,-80,0, -1,-16,16, -1,16,16, 0,48,-64, -1,0,64, 0,-79,32, 2 }; const int protel_117[/*'u'*/] = { 0,15,15, 0,64,0, -1,-48,0, -1,-16,16, -1,0,16, -1,32,32, 0,32,0, -1,-64,0, 0,-15,32, 2 }; const int protel_118[/*'v'*/] = { 0,15,15, 0,64,0, -1,-64,32, -1,64,32, 0,-79,32, 2 }; const int protel_119[/*'w'*/] = { 0,15,15, 0,64,0, -1,-48,0, -1,-16,16, -1,16,16, -1,16,0, 0,-16,0, -1,-16,16, -1,16,16, -1,48,0, 0,-79,32, 2 }; const int protel_120[/*'x'*/] = { 0,15,15, -1,64,64, 0,0,-64, -1,-64,64, 0,-15,32, 2 }; const int protel_121[/*'y'*/] = { 0,15,15, 0,64,0, -1,-48,0, -1,-16,16, -1,0,16, -1,32,32, 0,32,0, -1,-110,0, -1,-16,-16, -1,0,-32, 0,47,80, 2 }; const int protel_122[/*'z'*/] = { 0,15,15, 0,64,0, -1,0,64, -1,-64,-64, -1,0,64, 0,-15,32, 2 }; const int protel_123[/*'{'*/] = { 0,15,15, 0,96,32, -1,-16,-16, -1,-16,0, -1,-16,-16, -1,-16,16, -1,-16,0, -1,-16,16, 0,-15,32, 2 }; const int protel_124[/*'|'*/] = { 0,15,15, -1,96,0, 0,-111,32, 2 }; const int protel_125[/*'}'*/] = { 0,15,15, -1,16,16, -1,16,0, -1,16,16, -1,16,-16, -1,16,0, -1,16,-16, 0,-111,64, 2 }; const int protel_126[/*'~'*/] = { 0,15,15, 0,16,0, -1,16,16, -1,0,32, -1,16,16, 0,-63,32, 2 }; const int *protel[128-32-1] = { // VLp/synched list format protel_32, protel_33, protel_34, protel_35, protel_36, protel_37, protel_38, protel_39, protel_40, protel_41, protel_42, protel_43, protel_44, protel_45, protel_46, protel_47, protel_48, protel_49, protel_50, protel_51, protel_52, protel_53, protel_54, protel_55, protel_56, protel_57, protel_58, protel_59, protel_60, protel_61, protel_62, protel_63, protel_64, protel_65, protel_66, protel_67, protel_68, protel_69, protel_70, protel_71, protel_72, protel_73, protel_74, protel_75, protel_76, protel_77, protel_78, protel_79, protel_80, protel_81, protel_82, protel_83, protel_84, protel_85, protel_86, protel_87, protel_88, protel_89, protel_90, protel_91, protel_92, protel_93, protel_94, protel_95, protel_96, protel_97, protel_98, protel_99, protel_100, protel_101, protel_102, protel_103, protel_104, protel_105, protel_106, protel_107, protel_108, protel_109, protel_110, protel_111, protel_112, protel_113, protel_114, protel_115, protel_116, protel_117, protel_118, protel_119, protel_120, protel_121, protel_122, protel_123, protel_124, protel_125, protel_126, }; // (V and W are a bit of a nuisance but we can live with them being wider than 127.) const unsigned int protel_width[128-32-1] = { 0x68, 47, 63, 111, 111, 111, 111, 47, 79, 79, 111, 111, 47, 111, 47, 111, 95, 79, 111, 111, 111, 111, 111, 111, 111, 111, 47, 47, 79, 111, 95, 95, 111, 111, 111, 111, 111, 111, 111, 111, 111, 79, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 143, 143, 111, 111, 111, 79, 111, 79, 111, 111, 79, 111, 111, 111, 111, 111, 111, 111, 111, 47, 95, 111, 63, 111, 95, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 79, 47, 79, 111, }; void draw_text(char *s, int x_at_move_scale, int y_at_move_scale, unsigned int move_scale, unsigned int draw_scale) { long unsigned int text_width_at_draw_scale = 0; // width of text at draw scale // caller can do this. Intensity_a(127); for (;;) { long unsigned int text_width_at_move_scale; char c = *s++; if (c == '\0') break; if ((c < ' ') || (c >= 127)) continue; // convert the width in draw_scale to move_scale for positioning next character // unfortunately this is an expensive calculation. (but not the reason drawing // vector text is slow) text_width_at_move_scale = (( text_width_at_draw_scale * (unsigned long int)draw_scale ) / (unsigned long int)move_scale ); draw_synced_list_c( (const signed char *)protel[(unsigned int)c-32U], y_at_move_scale, x_at_move_scale+(int)text_width_at_move_scale, // position each character in string, for now. move_scale, draw_scale ); text_width_at_draw_scale += protel_width[c-32]; // accumulate dx using draw_scale } }