home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / cpmug / cpmug035.ark / PATH.ASM < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  2.6 KB  |  115 lines

  1. ; 30 AUG 79: PRINT MOVED TO 5690H.
  2. ; WITH 'PRINT' (UNTESTED) ADDED.
  3. ;
  4. ; PATH - MOSHELL - 23 JULY 79
  5. ;
  6. ; USE:  PATH  OBJECT, PATHOBJECT     -TAKES 'OBJECT'
  7. ;
  8. ; ALONG THE TRAJECTORY DEFINED BY 'PATHOBJECT',ONE
  9. ; PIXEL PER CALL TO 'PATH'. WHEN OBJECT HITS END OF 
  10. ; PATH-OBJECT IT CAUSES ZERO-FLAG TO BE SET. NEXT 
  11. ; CALL TO 'PATH' STARTS OBJECT OVER AT FIRST PATH
  12. ; PLACE. HITTING SPECIAL CODE 82H IN PATH 'FREEZES'
  13. ; OBJECT AND SETS Z-FLAG.
  14.  
  15. ;IF THE OBJECT HITS A COLOR-CHANGE IN THE 
  16. ; PATH-OBJECT THE MOVING OBJECT IS RECOLORED
  17. ; TO THE NEW COLOR. INITIAL PATH-COLOR 
  18. ; DOESN'T AFFECT OBJECT COLOR,THOUGH.
  19. ;
  20. ;
  21. FFLAGS    EQU    114H
  22. INPAR    EQU    5030H
  23. OBJR    EQU    5006H
  24. OBJW    EQU    5009H
  25. POSIT    EQU    2DBEH
  26.     ORG    5620H
  27. ;
  28. PATH:    CALL    INPAR
  29.     MOV    B,E    ;B HAS OBJECT-NAME.
  30.     CALL    INPAR
  31.     MOV    C,E    ;C HAS PATH-NAME.
  32.     MOV    D,B    ;GO GET PATH-POSITION.
  33.     MVI    E,255    ;STORED AT LOC.255 IN OBJ.
  34.  
  35.     CALL    OBJR
  36.     CPI    0    ;IS THIS THE FIRST CALL TO 'PATH'?
  37.     JNZ    MIDRUN    ;NO
  38. ;
  39.     MVI    A,4    ;YES;STORE CORRECT POSITION.
  40. MIDRUN:    MOV    E,A    ;SELECT POSITION IN THE PATH.
  41.     MOV    D,C    ;AND ALSO SELECT THE PATH.
  42. POSITION:CALL    OBJR    ;AND SEE WHAT WE HAVE.
  43.     MOV    L,A    ;STASH X
  44.     INR    E
  45.     CALL    OBJR
  46.     MOV    H,A    ;STASH Y
  47.     INR    E
  48.     MOV    A,L    ;NOW CHECK X
  49.     CPI    255    ;SPECIAL?
  50.     JNZ    NOSPECIAL
  51. ;
  52. ;SPECIAL CODES:END OF PATH, OR FREEZE?
  53. ;
  54.     MOV    A,H
  55.     CPI    82H    ;FREEZE?
  56.     JNZ    TEST80
  57. ;
  58. ; FREEZE: THE OBJECT HANGS HERE FOREVER
  59. ; (BUT OF COURSE CAN BE MOVED BY 'FLY',ETC.)
  60. ;
  61.     DCR    E
  62.     DCR    E    ;THIS IS SO WE'LL HIT THIS
  63.     JMP    ENDOBJ    ;CODE ON ALL FUTURE 'PATH'OPS.
  64. ;
  65. TEST80: CPI    80H
  66.     JNZ    COLOR    ;TWARN'T NEITHER OF 'EM.
  67. ;
  68. ; END OF OBJECT: RESET TO BEGINNING OF PATH.
  69. ;
  70.     MVI    E,4
  71. ENDOBJ:    MOV    A,E;    WHAT TO WRITE?
  72.     MOV    D,B    ;SELECT OBJECT AGAIN
  73.     MVI    E,255    ;TAIL-END(PATHPLACE)MARKER.
  74.     CALL    OBJW
  75.     LDA    FFLAGS
  76.     ORI    40H    ;SET ZERO FLAG.
  77.     STA    FFLAGS
  78.     RET
  79. ;
  80. COLOR:    PUSH    D    ;SAVE PATHNAME&POSITION.
  81.     MOV    D,B    ;WE CHANGE OBJECTS.
  82.     MVI    E,0    ;COLOR-BYTE.
  83.     CALL    OBJW    ;A ALREADY HAD Y-CODE.
  84.     POP    D
  85.     JMP    POSITION
  86. ;
  87. ; MERELY MOVE THE OBJECT
  88. ;
  89. NOSPECIAL:MOV    D,B    ;RESET TO CORRECT OBJECT
  90.     MOV    A,E    ;AND SAVE POSITION
  91.     MVI    E,255
  92.     CALL    OBJW
  93.     MOV    B,L
  94.     MOV    C,H    ;INTERFACE TO 'POSIT'
  95.     CALL    POSIT
  96.     LDA    FFLAGS
  97.     ANI    0BFH    ;CLEAR ZERO FLAG
  98.     STA    FFLAGS
  99.     RET
  100. ;
  101. ;
  102. ; PRINT - THIS OP JUST PRINTS THE STRING POINTED TO BY
  103. ; THE PARM,UNTIL A '$' IS ENCOUNTERED. IF YOU DON'T GIVE
  104. ; A VARIABLE:TYPE LABEL (I.E. AN ADDRESS POINTER TO THE
  105. ; STRING) THIS WILL PRINT GARBAGE... JMM 31 JY 79
  106. ;
  107.     ORG    5690H
  108. PRINT    EQU    502DH
  109.     CALL    INPAR    ;ADDRESS OF STRING IN DE.
  110.     XCHG        ;OUR 'PRINT' TAKES HL FOR POINTER.
  111.     CALL    PRINT    ;AND SQUIRT IT OUT...
  112.     RET
  113.     CALL    INPAR    ;    
  114.     END
  115.