;;THIS STEPPER MOTOR PROGRAM WORKED IN MS-DOS VERS5 AND ;;MY BONDWELL LAPTOP. IT WILL NEED TO BE ALTERED FOR ;;NEWER VERSIONS OF DOS AND IS NOT FULLY PORT TESTED NAME STEPPER.ASM TITLE DESIGNED: BY NICK K. VAN VLIET AUGUST/98 UPDATED OCT23/99 K0100 JMP K020B ;PROGRAM START K0103 ;RAY OF CALL ROUTINE FOR MENU K0106 ;frequency check = 1=AL K0109 JMP K06F0 ;<- ->direction 4/2 = 110 K010C JMP K0760 ;^ v full/half step 10/8 = 1.1000 K010F ;step increments K0112 ;motor selection =1110.0000=AL K0115 JMP K07E6 ;program sample.stp K0118 JMP K0200 ;RETURN TO DOS K01F3 DW AX ;PORT INFO K01F5 DW AX ;PORT ADDRESS K01F7 DW DX ;?CALL OFFSET K01F9 DW DX ;LINE CALL OFFSET K01FB DW BX ;OLD BLUE LINE K01FD DW AX ;NEW WHITE LINE K07DC DW AX ;END OF FILE LOW K07DE DW DX ;END OF FILE HIGH K07E0 DW AX ;START OF FILE LOW K07DE DW DX ;START OF FILE HIGH K020B: MOV AX,0003 ;16 COLOR TXT K020E INT 10 K0210 MOV BH,03 ;CLS CYAN K0212 MOV CX,0000 K0215 MOV DX,174F K0218 MOV AX,0600 K021B INT 10 K021D MOV BH,0F ;CLS WHITE LINE TOP K021F MOV CX,0000 K0222 MOV DX,004F K0225 MOV AX,0600 K0228 INT 10 K022A MOV BH,01 ;CLS LBLUE K022C MOV CX,0511 K022F MOV DX,1341 K0232 MOV AX,0600 K0235 INT 10 K0237 MOV BH,09 ;CLS LBLUE K0239 MOV CX,040F K023C MOV DX,123F K023F MOV AX,0600 K0242 INT 10 K0244 MOV CX,0780 K0247: MOV DL,DB K0249 MOV AX,0200 K024C INT 21 K024E LOOP K0247 ;FILL SCREEN K0250 CALL K02A4 K0253 DB 'STEPPER PROGRAM DESIGNED BY: NICK K. VAN VLIET AUG/98 (416) 921-4653 $' K02A4 MOV AH,02 ;SET CRSR K02A6 MOV DX,0101 K02A9 INT 10 K02AB MOV AH,0F K02AD INT 10 K02AF MOV AX,0900 ;PRINT COMPANY LOGO K02B2 POP DX K02B3 INT 21 K02B5 CALL K0A70 ;CHANGE DEFAULT PORT 2F8 TO PORT ON PSP K02B8 JMP K04B0 K02BB NOP K02BC NOP K02BD JMP K04B0 ;QUESTIONS OFFSET K02D0: CALL K02FE K02D3 DB 'PORT IS NOT ACTIVE $$.........Z. K0300 CALL K032E K0303 DB 'DELAY IN MILLISECONDS 200 $$.........Z. K0330 CALL K035E K0333 DB 'TOGGLE DIRECTIONS . / . $$.........Z. K0360 CALL K038E K0363 DB 'TOGGLE HALF/FULL STEP . / . $$.........Z. K0390 CALL K03BE K0393 DB 'ENTER NUMBER OF STEPS XXX $$.........Z. K03C0 CALL K03EE K03C3 DB 'ENTER MOTOR NUMBER XX $$.........Z. K03F0 CALL K041E K03F3 DB 'ENTER PROGRAM NAME XXXXXXXX$$.........Z. K0420 CALL K044E K0423 DB 'HIT ENTER TO QUIT$$$ XX $$.........Z. K0450 CALL K047E K0453 DB 'ERROR DETECTED$$$R XX $$.........Z. K0480 CALL K04AE K0483 DB 'STEPPER MOTOR MENU$$ XX $$.........Z. K04B0: MOV AH,02 ;SET CRSR K04B2 MOV DX,0215 K04B5 INT 10 K04B7 PUSH DX K04B8 PUSH AX K04B9 CALL K0480 ;PRNT MAIN MENU TITLE K04BC MOV AH,09 K04BE INT 21 K04C0 POP AX K04C1 POP DX K04C2 INC DH K04C4 INC DH ;SKIP 2 LINES K04C6 INC DH K04C8 INT 10 K04CA PUSH DX K04CB PUSH AX K04CC CALL K02D0 ;PRNT 1. PORT ACTIVE YES/NO K04CF MOV AH,09 K04D1 INT 21 K04D3 POP AX K04D4 POP DX K04D5 INC DH K04D7 INT 10 K04D9 PUSH DX K04DA PUSH AX K04DB CALL K0300 ';PRNT 2. DELAY K04DE MOV AH,09 K04E0 INT 21 K04E2 POP AX K04E3 POP DX K04E4 INC DH K04E6 INT 10 K04E8 PUSH DX K04E9 PUSH AX K04EA CALL K0330 ;PRNT 3. DIRECTION K04ED MOV AH,09 K04EF INT 21 K04F1 POP AX K04F2 POP DX K04F3 INC DH K04F5 INT 10 K04F7 PUSH DX K04F8 PUSH AX K04F9 CALL K0360 ;PRNT 4. HALF/FULL STEP K04FC MOV AH,09 K04FE INT 21 K0500 POP AX K0501 POP DX K0502 INC DH K0504 INT 10 K0506 PUSH DX K0507 PUSH AX K0508 CALL K0390 ;PRNT 5. ENTER STEPS K050B MOV AH,09 K050D INT 21 K050F POP AX K0510 POP DX K0511 INC DH K0513 INT 10 K0515 PUSH DX K0516 PUSH AX K0517 CALL K03C0 ;PRNT 6. MOTOR # K051A MOV AH,09 K051C INT 21 K051E POP AX K051F POP DX K0520 INC DH K0522 INT 10 K0524 PUSH DX K0525 PUSH AX K0526 CALL K03F0 ;PRNT 7. ENTER FILE SAMPLE K0529 MOV AH,09 K052B INT 21 K052D POP AX K052E POP DX K052F INC DH K0531 INT 10 K0533 PUSH DX K0534 PUSH AX K0535 CALL K0420 ;PRNT 8. RETURN TO DOS K0538 MOV AH,09 K053A INT 21 K053C POP AX K053D POP DX K053E MOV AX,0715 ;STORE WHITE LINE PRES LOCTN K0541 MOV BX,0615 ;STORE OLD LOCTN K0544 MOV SI,01FD ;ADDRESS NEW LINE K0547 MOV [SI],AX K0549 DEC SI K054A DEC SI K054B MOV [SI],BX ;ADDRESS OLD LINE K054D: NOP ;<<== MAIN LOOP K054E MOV AH,0F ;PG # K0550 INT 10 K0552 MOV DX,[01F5] ;PORT K0556 MOV CX,FFFF K0559: IN AX,DX ;INPUT AX WORD FROM PORT K055A AND AX,0001 ;IS STEPPER ATTACHED / CAME LOOSE K055D CMP AX,0000 K0560 JZ K0564 ;LOW DETECTED K0562 LOOP K0559 K0564: XOR SI,SI K0566 CMP AX,0000 K0569 JZ K056D ;OK LOW DETECTED K056B JMP K05A0 ;NO LOW FREQUENCY K056D: MOV CX,FFFF ;FREQ ZERO START K0570 MOV DI,0100 K0573: DEC DI K0574 JNZ K0573 ;DELAY K0576: IN AX,DX K0577 AND AX,0001 K057A CMP AX,0000 K057D JNZ K0584 ;OK HIGH DETECTED K057F INC SI K0580 LOOP K0576 K0582 JMP K05A0 ;NO FREQUENCY DETECTED K0584: CMP SI,+00 ;??TEST NOT NEEDED ;OK FREQ K0587 JZ K05A0 K0589 MOV AH,02 ;SET CRSR K058B MOV DX,052B ;??NEW LOCTN K058E INT 10 K0590 CALL K0598 ;POKE YES K0593 DB 'YES' K0597 NOP K0598 POP DX K0599 MOV AH,09 ;'YES ACTIVE' K059B INT 21 K059D JMP K05B4 K059F NOP K05A0: MOV AH,02 ;SET CRSR K05A2 MOV DX,052B ;??NEW LOCTN K05A5 INT 10 K05A7 CALL K05AF K05AA DB 'NOT' K05AF POP DX K05B0 MOV AH,09 ;'NOT ACTIVE' K05B2 INT 21 K05B4: MOV CX,0000 K05B7 CALL K05C7 ;ENTER KEY K05BA CALL K069A ;ERASE MSSG K05BD JMP K054D ;MAIN LOOP ==^ K05BF RET ;;;;;;;;;;;;;;;;;;;;;;;;;;; SUBROUTINES K05C7: MOV DX,[01FD] ;NEW WHITE LINE CURSOR LOCATION K05CB MOV CX,DX K05CD ADD DX,+15 K05D0 NOP K05D1 MOV BH,0F ;WHITE HIGHLIGHTED LINE K05D3 MOV AX,0601 K05D6 INT 10 K05D8 MOV DL,[01FD] ;NEW LINE CURSOR LOCATION K05DC MOV DH,00 K05DE SUB DL,05 K05E1 MOV [01F9],DX ;STORE LINE # K05E5 MOV AX,0030 K05E8 MUL DX ;AXxDX = DX:AX K05EA ADD AX,02D0 ;OFFSET K05ED PUSH AX ;AX=AXxDX+2D0 K05EE MOV AH,0F ;PG # K05F0 INT 10 K05F2 MOV DX,[01FB] ;OLD K05F6 MOV AH,02 ;SET CRSR K05F8 INT 10 K05FA POP AX ;2D0+30xN=200/330/360/390/3C0/3F0/420/450/480 K05FB CALL KAX ;GET DX NEW LINE K05FD MOV AH,09 ;PRINT PRESENT LINE WHITE K05FF INT 21 K0601 NOP K0602 MOV DX,[01FB] ;OLD LINE K0606 MOV CX,DX K0608 ADD DX,+15 K060B NOP K060C MOV BH,09 ;BLUE DEHIGHLIGHT K060E MOV AX,0601 K0611 INT 10 K0613 MOV DL,[01FB] K0617 MOV DH,00 K0619 SUB DL,05 K061C MOV [01F7],DX ;TRUE LINE CALL OFFSET K0620 MOV AX,0030 K0623 MUL DX K0625 ADD AX,02D0 K0628 PUSH AX K0629 MOV AH,0F ;FIND PG# K062B INT 10 K062D MOV DX,[01FB] ;OLD K0631 MOV AH,02 ;SET CRSR K0633 INT 10 K0635 POP AX K0636 CALL KAX ;GET DS:DX OLD LINE K0638 MOV AH,09 ;PRINT OLD LINE K063A INT 21 K063C MOV DX,[01FD] ;NEW LINE K0640 MOV AX,[01FB] ;OLD LINE K0643 MOV [01FB],DX ;STORE PRESENT LCTN IN OLD LOCTN K0647 MOV CX,0000 K064A: MOV AH,01 ;WAIT FOR KEY INPUT K064C INT 16 K064E JZ K064A K0650 MOV AH,08 ;READ KEY INTO AL K0652: INT 21 K0654 CMP AL,00 ;2 DIGIT ARROW KEY? K0656 JZ K0652 ;YES K0658 CMP AL,50 ;UP A LINE ^ K065A JZ K0668 K065C CMP AL,48 ;DOWN A LINE v K065E JZ K0662 K0660 JMP K0683 K0662: DEC BYTE PTR [01FD] ;NEW ;DEC CRSR K0666 JMP K066C K0668: INC BYTE PTR [01FD] ;NEW ;INC CRSR K066C: MOV AL,[01FD] ;NEW K066F CMP AL,0D K0671 JC K0677 K0673 MOV AL,05 ;CHECK LIMITS K0675 JMP K067D K0677: CMP AL,05 K0679 JNC K067D K067B MOV AL,0C K067D: MOV [01FD],AL ;STORE NEW LOCTN K0680 RET K0681 RET K0682 RET K0683: MOV BX,[01F9] ;LINE # K0687 MOV AX,0003 K068A MUL BX K068C ADD AX,0103 K068F CALL KAX ;RAY OF CALL ROUTINES TO LINES K0691 RET K0692 RET K0693 RET K0694 RET K0695 RET K0696 RET K0697 RET K0698 RET K0699 RET K069A MOV AH,0F K069C INT 10 K069E MOV DX,[01FD] ;NEW K06A2 MOV DH,0E ;CHNGE LINE Y K06A4 MOV AH,02 K06A6 INT 10 K06A8 CALL K06E7 ;CLEAR REPLY LINE K06Ab DB DB DB DB DB DB DB DB DB DB DB DB DB-DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB-DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB '$' K06E7 POP DX K06E8 MOV AH,09 ;CLEAR LINE K06EA INT 21 K06EC RET K06ED RET K06EE RET K06EF RET K06F0: NOP ;;<<<<>>>>> K06F1 CALL K069A K06F4 MOV DX,[01FD] ;NEW K06F8 MOV DH,0E K06FA MOV AH,02 ;SET REPLY CRSR K06FC INT 10 K06FE CALL K072B ;PRNT PROMPT K0701 DB 'ENTER CHANGE IN DIRECTION . / . / HOME$$N$.Z...! K072B POP DX K072C MOV AH,09 ;PRNT REPLY PROMPT K072E INT 21 K0730 MOV DX,[01F5] ;PORT ADDRESS K0734 MOV AL,[01F3] ;GET PORT INFO K0737 AND AL,F9 ;MASK OFF F9 = 1111.1001 K0739 PUSH AX K073A: MOV AH,01 ;WAIT KEY INPUT K073C INT 16 K073E JZ K073A K0740 MOV AH,08 K0742 INT 21 K0744 INT 21 K0746 CMP AL,4B ;<- ANTI CLOCKWISE K0748 JZ K0751 K074A CMP AL,4D ;-> CLOCKWISE K074C JZ K0756 K074E POP AX K074F RET K0750 RET K0751: POP AX K0752 OR AL,04 K0754 JMP K0759 K0756: POP AX K0757 OR AL,02 K0759: OUT DX,AL ;DIRECTION OUT K075A MOV [01F3],AL ;STORE PORT ECHO K075D JMP K0B10 K0760: ;;<<<< >>>>> NOP K0761 CALL K069A ;CLEAR REPLY LINE K0764 MOV DX,[01FD] ;NEW K0768 MOV DH,0E K076A MOV AH,02 ;SET CRSR REPLY LINE K076C INT 10 K076E CALL K079B K0771 DB 'ENTER CHANGE IN STEP ^ / v / HOME$$$TURN$.Z...! K079B POP DX K079C MOV AH,09 ;PRINT REPLY PROMPT K079E INT 21 K07A0: MOV DX,[01F5] ;PORT ADDRESS K07A4 MOV AL,[01F3] ;GET PORT INFO K07A7 AND AL,E7 ;MASK OFF E7 = 1110.0111 K07A9 PUSH AX K07AA: MOV AH,01 ;WAIT KEY INPUT K07AC INT 16 K07AE JZ K07AA K07B0 MOV AH,08 K07B2 INT 21 ;READ ZERO K07B4 INT 21 ;READ ARROW CHOICE K07B6 CMP AL,48 ;^ FULL STEP K07B8 JZ K07C1 K07BA CMP AL,50 ;V HALF STEP K07BC JZ K07C6 K07BE POP AX K07BF RET K07C0 RET K07C1: POP AX K07C2 OR AL,10 K07C4 JMP K07C9 K07C6: POP AX K07C7 OR AL,08 K07C9: OUT DX,AL ;STEP H/F OUT K07CA MOV [01F3],AL ;STORE PORT ECHO K07CD JMP K0B10 K07D0: ;NOT USED CALL K07D8 K07D3 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 K07D8: POP CX K07DA RET K07DB RET ;K07DC DW AX ;END OF FILE LOW ;K07DE DW DX ;END OF FILE HIGH ;K07E0 DW AX ;START OF FILE LOW ;K07DE DW DX ;START OF FILE HIGH K07DC RET K07DD RET K07DE RET K07DF RET K07E0 RET K07E1 RET K07E2 RET K07E3 RET K07E4 RET K07E5 RET K07E6: ;;<<<< >>>> NOP K07E7 CALL K069A K07EA MOV DX,[01FD] ;NEW K07EE MOV DH,0E K07F0 MOV AH,02 ;SET CRSR K07F2 INT 10 K07F4 CALL K0821 K07F8 DB 'ENTER FILE NAME WITHOUT STP > $TURN$TURN$ K0821 POP DX K0822 MOV AH,09 K0824 INT 21 K0826 MOV CX,09 ;READ FILE ON PSP K0829 MOV SI,80 K082C MOV DI,SI K082E: NOP K082F MOV AH,01 ;PRINT CHAR K0831 INT 21 K0833 INC DI K0834 CMP AL,0D ;END OF FILE NAME K0836 JZ K0841 K0838 NOP K0839 CMP AL,2E ;'.' K083B JZ K0841 K083D MOV [DI],AL ;[PSP+I],AL K083F LOOP K082E ;ENTER FILE NAME 8 BYTES K0841: MOV AL,2E ;'.' ;ADD EXTENSION K0843 MOV [DI],AL K0845 INC DI K0846 MOV AL,53 ;'S' K0848 MOV [DI],AL K084A INC DI K084B MOV AL,54 ;'T' K084D MOV [DI],AL K084F INC DI K0850 MOV AL,50 ;'P' K0852 MOV [DI],AL K0854 INC DI K0855 MOV BYTE PTR [DI],00 ;ADD .STP'0' K0858 SUB DI,SI K085A MOV AX,DI K085C MOV [SI],AL K085E MOV DX,SI K0860 INC DX K0861 MOV AX,3D02 K0864 INT 21 ;OPEN FILE K0866 JC K086C ;ERROR K0868 MOV BX,AX ;BX=HNDL # K086A JMP K08B3 K086C: NOP K086D CALL K069A ;CLS K0870 MOV DX,[01FD] ;PRES LOCTN K0874 MOV DH,0E K0876 MOV AH,02 ;ST CRSR K0878 INT 10 K087A CALL K08A7 K087D DB 'ERROR: HIT ENTER $THOUT STP$ RETURN$TURN$.Z...!...! K08A7 POP DX K08A8 MOV AH,09 ;PRNT MSSG K08AA INT 21 K08AC MOV AH,08 ;WAIT K08AE INT 21 K08B0 JMP K07E6 ;RETRY K08B3: NOP K08B4 MOV DI,DX K08B6 PUSH DS K08B7 POP ES K08B8 PUSH CS K08B9 POP DS K08BA XOR CX,CX K08BC XOR DX,DX K08BE MOV AX,4202 ;OPEN FILE AT END # BYTES OFFST=DX:AX K08C1 INT 21 K08C3 MOV [07DC],AX ;END TOTAL # BYTES K08C6 MOV [07DE],DX K08CA XOR CX,CX K08CC XOR DX,DX K08CE MOV AX,4200 ;OPEN AT START TOTAL # BYTES=DX:AX K08D1 INT 21 K08D3 MOV [07E0],AX ;START TOTAL # BYTES K08D6 MOV [07E2],DX K08DA MOV CX,0001 K08DD PUSH BX ;PPG# K08DE: ;<--. MAIN READING PROGRAM LOOP NOP ; K08DF POP BX K08E0 PUSH BX K08E1 CALL K095B ;READ 50 BYTES INTO BUFFER AT 80=PSP K08E4 MOV AL,[80] K08E7 CMP AL,3B ;';'=COMMENTED LINE K08E9 JNZ K08EF K08EB JMP K0935 K08ED JMP K0935 K08EF: CMP AL,48 ;'H'=HALF STEP KEY K08F1 JNZ K08F9 K08F3 CALL K0AF8 ;HALF STEP ECHO K08F6 JMP K0935 K08F8 NOP K08F9: CMP AL,46 ;'F'=FULL STEP KEY K08FB JNZ K0903 K08FD CALL K0AE0 ;FULL STEP ECHO K0900 JMP K0935 K0902 NOP K0903: CMP AL,43 ;'C'=COUNTER CLOCKWISE KEY K0905 JNZ K090D K0907 CALL K0AB0 ;COUNTER CLOCKWISE ECHO K090A JMP K0935 K090C NOP K090D: CMP AL,4B ;'K'=CLOCKWISE KEY K090F JNZ K0917 K0911 CALL K0AC8 ;CLOCKWISE ECHO K0914 JMP K0935 K0916 NOP K0917: CMP AL,4D ;'M'=MOTOR KEY K0919 JNZ K0921 K091B CALL K09F5 ;MOTOR ECHO K091E JMP K0935 K0920 NOP K0921: CMP AL,44 ;'D'=DELAY KEY K0923 JNZ K092B K0925 CALL K09A0 ;DELAY ECHO K0928 JMP K0935 K092A NOP K092B: CMP AL,53 ;'S'=STEP KEY K092D JNZ K0935 K092F: CALL K0A1A ;STEP ECHO K0935: NOP K0936 MOV CX,0001 K0939 MOV DI,07E2 ;START/PRES LOCTN OF FILE HIGH K093C MOV SI,07DE ;END OF FILE HIGH K093F CMPSW ;CMP[ESDI],[DSSI] K0940 JNZ K0951 K0942 MOV DI,07E0 ;START/PRES LOCTN OF FILE LOW K0945 MOV SI,07DC ;END OF FILE LOW K0948 CMPSW ;CMP[ESDI],[DSSI] K0949 JZ K0953 K0951: JMP K08DE ;-^ KEEP ON READING K0953: NOP ;FILE DONE K0954 POP BX ;PG# K0955 JMP K0B10 ;CONTINUE --, ; V K0958 RET K0959 RET K095A RET K095B: ;<<<<< >>>>> NOP K095C MOV DX,[07E0] ;CURENT FILE POINTER K0960 MOV CX,[07E2] K0964 MOV AX,4201 K0967 INT 21 ;OPEN FILE AT PRESENT=BYTE COUNT K0969 MOV AX,3F00 ;READ 50 BYTES STORE INTO BUFFER AT 80 K096C MOV CX,0050 K096F MOV DX,0080 K0972 INT 21 K0974 MOV SI,0080 K0977 CLD K0978: LODSW ;AX,[DSSI] LOAD 2 BYTES AT DS:SI K0979 MOV DX,[07E0] ;PRESENT ;INC LOW FILE POINTER K097D INC DX K097E MOV [07E0],DX ;INC LOW WORD K0982 JNC K0988 K0984 INC WORD PTR [07E2] ;START ;INC HIGH WORD K0988: DEC SI ;1 BYTE AT A TIME K0989 CMP AX,0A0D ;LOCATE END OF LINE 0D,0A K098C JNZ K0978 K098E MOV DX,[07E0] ;START K0992 INC DX ;ADD NEWLINE K0993 MOV [07E0],DX ;START K0997 JNZ K099D K0999 INC WORD PTR [07E2] ;START HIGH ADD CARRY K099D: RET K099E RET K099F RET K09A0: ;;<<<< >>>>> NOP K09A1: ;CALCULATE NUMBER OF DELAY ON PSP CALL K095B ;PREPARE PSP AND ADD LINE TO POINTER K09A4 MOV CX,0000 K09A7 MOV BX,0000 K09AA MOV SI,80 ;PSP K09AD: ;<<==. LOOP LODSB ;AL,[DSSI] LOAD CHAR ON PSP SI++ K09AE CMP AL,30 ;30='0' K09B0 JC K09B8 K09B2 CMP AL,3A ;39='9' K09B4 JNC K09B8 K09B6 JMP K09BB ;OK READ K09B8: JMP K09DD ;ERROR/DFLT=1 K09BA NOP K09BB: ;CONVERT TO NUMBER XCHG CX,AX K09BC MOV CL,0A K09BE MUL CL ;MUL OLD HIGH WORD BY 10d K09C0 XCHG CX,AX K09C1 XCHG BX,AX K09C2 MOV BX,000A K09C5 MUL BX ;MUL OLD LOW WORD BY 10d K09C7 ADD CX,DX ;ADD CARRY TO HIGH WORD K09C9 XCHG AX,BX K09CB MOV AH,00 K09CD MOV AL,[SI-01] ;OLD SI K09D0 SUB AL,30 K09D2 MOV DL,0A K09D4 MUL DL ;MUL NEXT DIGIT BY 10d K09D6 ADD BX,AX ;ADD TO OLD LOW WORD K09D8 JNC K09DB K09DA INC CX ;ADD CARRY TO HIGH WORD K09DB: ; JMP K09AD ;-' ;LOOP TOTAL K09DD: MOV DX,[01F5] ;GET PORT ADDRESS K09E1 MOV AL,00 K09E3 INC BX K09E4 INC CX K09E5: OUT DX,AL ;OUT SIGNAL PAUSE K09E6 PUSH CX ;HIGH WORD DELAY K09E7 MOV CX,BX ;LOW WORD DELAY K09E9: LOOP K09E9 K09EB POP CX K09EC LOOP K09E5 ;DELAY K09EE MOV AL,[01F3] ;GET PORT ECHO K09F1 OUT DX,AL ;RESTORE PORT ECHO K09F2 RET K09F3 RET K09F4: K09F4 NOP K09F5 CALL K095B ;PREPARE PSP AND ADD LINE TO POINTER ;GET MOTOR NUMBER FROM PSP K09F8 MOV DL,[01F3] ;GET PORT ECHO K09FC AND DL,9F K09FF MOV AL,[80] K0A02 AND AL,03 ;1/2/3 ;MASK OFF 0000.0011 K0A04 MOV CL,05 K0A06 ROL AL,CL ;0110.0000 K0A08 OR AL,DL K0A0A MOV DX,[01F5] ;GET PORT ADDRESS K0A0E OUT DX,AL K0A0F MOV [01F3],AL ;STORE PORT ECHO K0A12 RET K0A13 RET K0A14 RET K0A15 RET K0A16 RET K0A17 RET K0A18 RET K0A19 RET K0A1A: ;;<<<< >>>>> NOP K0A1B CALL K095B ;PREPARE PSP AND ADD LINE TO POINTER K0A1E MOV CX,0000 K0A21 MOV BX,0000 K0A24 MOV SI,0080 K0A27: ;<<==. LOOP LODSB K0A28 CMP AL,30 ;30='0' K0A2A JC K0A32 K0A2C CMP AL,3A ;39='9' K0A2E JNC K0A32 K0A30 JMP K0A35 K0A32: JMP K0A57 ;ERROR<0>/DONE K0A34 NOP K0A35: XCHG CX,AX K0A36 MOV CL,0A K0A38 MUL CL ;MUL HIGH WORD BY 10d K0A3A XCHG CX,AX K0A3B XCHG BX,AX K0A3C MOV BX,000A K0A3F MUL BX ;MUL LOW WORD BY 10d K0A41 ADD CX,DX ;ADD CARRY TO HIGH WORD K0A43 XCHG AX,BX K0A45 MOV AH,00 K0A47 MOV AL,[SI-01] ;OLD SI K0A4A SUB AL,30 K0A4C MOV DL,0A K0A4E MUL DL ;MUL NEXT DIGIT BY 10d K0A50 ADD BX,AX K0A52 JNC K0A55 K0A54 INC CX ;ADD CARRY TO HIGH WORD K0A55: JMP K0A27 ;;;;;;;;;;;;;; K0A53 JMP K0A27 K0A55 JMP K0A27 K0A57: MOV DX,[01F5] ;PORT ADDRESS K0A5B MOV AL,[01F3] ;PORT ECHO K0A5E INC BX K0A5F INC CX K0A60: PUSH CX K0A61 MOV CX,BX K0A63: OUT DX,AL K0A64 LOOP K0A63 ;>>==^ LOOP K0A66 POP CX K0A67 LOOP K0A60 K0A69 RET K0A6A RET K0A6B RET K0A6C RET K0A6D RET K0A6E RET K0A6F RET K0A70: ;;<<<< >>>>> NOP ;GET PORT ADDRESS DEFAULT 2F8 K0A71 MOV SI,80 ;80=PSP K0A74 MOV AL,[SI] K0A76 CMP AL,04 ;TRUE LENGTH=4 K0A78 JNZ K0AA0 K0A7A INC SI K0A7B INC SI K0A7C MOV DH,[SI] K0A7E SUB DH,30 ;1ST BYTE=0/1/2/3 K0A81 CMP DH,04 K0A84 JNC K0AA0 K0A86 INC SI K0A87 MOV DL,[SI] K0A89 CMP DL,46 ;'F' 0/1/2/3F8 COM4/3/2/1 K0A8C JNZ K0A92 K0A8E MOV DL,F8 K0A90 JMP K0AA3 K0A92: CMP DL,37 ;'7' 378 PTL1 K0A95 JNZ K0AA0 K0A97 MOV DL,78 K0A99 CMP DH,03 K0A9C JNZ K0AA0 K0A9E JMP K0AA3 K0AA0: MOV DX,02F8 ;DEFAULT COM2=2F8 K0AA3: MOV [01F5],DX ;STORE PORT ADDRESS K0AA7 MOV AX,0000 K0AAA MOV [01F3],AX ;INIT PORT ECHO K0AAD RET K0AAE RET K0AAF RET K0AB0 RET K0AB0: ;;<<<< >>>>> NOP K0AB1 MOV DX,[01F5] ;PORT ADDRESS K0AB5 MOV AL,[01F3] ;PORT ECHO K0AB8 AND AL,F9 K0ABA OR AL,04 K0ABC MOV [01F3],AL ;STORE PORT ECHO K0ABF OUT DX,AL K0AC0 RET K0AC1 RET K0AC2 RET K0AC3 RET K0AC4 RET K0AC5 RET K0AC6 RET K0AC7 RET K0AC8: ;;<<<< >>>>> NOP K0AC9 MOV DX,[01F5] ;PORT ADDRESS K0ACD MOV AL,[01F3] ;PORT ECHO K0AD0 AND AL,F9 K0AD2 OR AL,02 K0AD4 MOV [01F3],AL ;STORE PORT ECHO K0AD7 OUT DX,AL K0AD8 RET K0AD9 RET K0ADA RET K0ADB RET K0ADC RET K0ADD RET K0ADE RET K0ADF RET K0AE0: ;;<<<< >>>>> NOP K0AE1 MOV DX,[01F5] ;PORT ADDRESS K0AE5 MOV AL,[01F3] ;PORT ECHO K0AE8 AND AL,E7 K0AEA OR AL,10 K0AEC MOV [01F3],AL ;STORE PORT ECHO K0AEF OUT DX,AL K0AF0 JMP K0A1A K0AF3 RET K0AF4 RET K0AF5 RET K0AF6 RET K0AF7 RET K0AF8: ;;<<<< >>>>> NOP K0AF9 MOV DX,[01F5] ;PORT ADDRESS K0AFD MOV AL,[01F3] ;PORT ECHO K0B00 AND AL,E7 K0B02 OR AL,08 K0B04 MOV [01F3],AL ;STORE PORT ECHO K0B07 OUT DX,AL K0B08 JMP K0A1A K0B0B RET K0B0C RET K0B0D RET K0B0E RET K0B0F RET K0B10: ;;<<<< >>>>> CALL K069A ;ERASE INPUTLINE K0B13 INC BYTE PTR [01FD] ;NEW ;NEXT LINE K0B17 CALL K05C7 ;HIGHLIGHT LINE K0B1A RET K0B1B RET K0B1C RET K0B1D RET K0B1E RET K0B1F RET K0B20 RET ;;<<<< >>>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;Sample Sepper Motor Control test Program AUG/98 ;;;Only capital lettters are used. DESIGNED BY NICK K. VAN VLIET M ;motor 1 ;motor # D ;delay 100 ;# of .5 second delay H ;half step mode 200 ;# of half steps C ;counterclockwise direction S ;step mode 50000 ;# of Step K ;klockwise direction F ;full steps 123 ;# of full steps D 50 S 20 C S 25 K S 25 D 20 C S 50 M ;motor 2 D 100 K S 20 C S 50 D 2 K S 10 C S 9 K S 8 M ;motor 3 C S 7 K S 6 C S 5 M ;motor 1 S 3000 ;done
Would you like to order my
'Machine Code Training For The IBM-PC Using Debug.Exe'
which contains a complete desciption, with comments,
of all updated Chess COM programs and other COM programs.
Contact Louie.Pace@Xlibris.com at Xlibris.com.
(refer your order to BID 38633)