// // THRTEST.C - (DCC-MB) Show throttle values. Requires DCC-MB.COM to be installed. // #include #include short DCCQueryDriver(short *, short *); short DCCReadThrottles(THROTTLE *); // This structure holds both switch and pot values for a throttle typedef struct { char bSwitch; unsigned char cPot; } THROTTLE; THROTTLE Th[4]; main() { short i, nDriverMode, nLocos; if (DCCQueryDriver(&nDriverMode, &nLocos) != 0xFACE) { printf("\007Error: DCC-MB Driver is not installed."); return 1; } printf("\nReading throttle values, hit any key to exit.\n"); do { DCCReadThrottles(Th); printf("\r"); for (i=0; i<=3; ++i) printf ("%3d %1d ", Th[i].cPot, Th[i].bSwitch); } while (!kbhit()); return 0; } //--------------------------------------------------------------------------- // DCC-MB Driver Calls //--------------------------------------------------------------------------- union _REGS regs; // structure that holds values of all registers //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: short DCCQueryDriver(short *nDriverMode, short *nActiveLocos) { regs.x.ax = 0x00FF; // "Query" function _int86(0x70, ®s, ®s); // Call the software driver *nDriverMode = regs.x.bx; *nActiveLocos = regs.x.cx; return regs.x.ax; } //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: short DCCReadThrottles(THROTTLE *ThArray) { regs.h.ah = 202; // "Read Throttles" function _int86(0x70, ®s, ®s); // Call the software driver ThArray[0].cPot = regs.h.ch; ThArray[0].bSwitch = regs.h.al & 1; ThArray[1].cPot = regs.h.cl; ThArray[1].bSwitch = (regs.h.al & 2) >> 1; ThArray[2].cPot = regs.h.dh; ThArray[2].bSwitch = (regs.h.al & 4) >> 2; ThArray[3].cPot = regs.h.dl; ThArray[3].bSwitch = (regs.h.al & 8) >> 3; return regs.x.ax; } //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::