THE PAST MASTER CLUB

;;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


UPDATED DISPLAY

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)



RETURN TO TOP
RETURN TO PMC MENU
HOME PAGE
1