home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpmug / cpmug035.ark / SHOWSWAP.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  152 lines

  1. ; 19 JUNE: FIXED SHOW'S DOUBLE ZERO PROBLEM
  2. ;
  3. ; SHOW   --  --  
  4. ;
  5. ; WITTENBERG & MOSHELL.
  6. ;
  7.     ORG    2BD0H
  8. FILL2K    EQU    503CH
  9. ONBUF    EQU    5090H
  10. CODE    EQU    0FFH
  11. FINISH    EQU    080H
  12. INPAR    EQU    5030H
  13. BACKGRND EQU    5092H    ;AT LEAST AT THE MOMENT.
  14. COLOR    EQU    0FH
  15. PUT    EQU    5000H
  16. OBJR    EQU    5006H
  17. OBJW    EQU    5009H
  18. ROTATE    EQU    2CD0H
  19. ONLIST    EQU    130H
  20. * NEW VERSION OF SHOW (JUNE 19, 1979)
  21. * IN THIS VERSION, THE FIRST BYTE IN THE LIST TELLS US THE NUMBER OF
  22. * OBJECTS IN THE LIST (I.E., HOW MANY OBJECTS TO SHOW)
  23. SHOW:    LXI    H,ONLIST
  24.     MOV    A,M    ;GET # OF OBJECTS TO A
  25.     ORA    A
  26.     JZ    SWAP    ;SHOW NO OBJECTS IF NONE TO SHOW
  27. SHLOOP:    INX    H    ;LOOK AT ONLIST ELEMENT
  28.     MOV    D,M    ;OBJECT # INTO D
  29.     PUSH    PSW    ;SAVE COUNT AND POINTER INTO ONLIST
  30.     PUSH    H
  31.     CALL    SHOWONE
  32.     POP    H
  33.     POP    PSW    ;RETRIEVE COUNT AND POINTER
  34.     DCR    A    ;ONE LESS OBJECT TO WORRY ABOUT
  35.     JNZ    SHLOOP    ;CONTINUE IF MORE OBJECTS TO SHOW
  36.     JMP    SWAP    ;DISPLAY OBJECTS SHOWN
  37. ;
  38. * OLD SHOW ALGORITHM
  39. SHOWONE:MVI    E,0    ;START W/ THE 1ST OBJECT BYTE (COLOR)
  40.     MOV    L,D    ;SAVE THE OBJECT # FOR FURTHER REFERENCE
  41.     CALL    OBJR    ;GET THE FIRST BYTE OF THE OBJECT INTO A
  42.     ANI    COLOR    ;LEAVE JUST THE COLOR IN A
  43.     MOV    H,A    ;STORE THE COLOR IN H FOR FURTHER REF.
  44. * IF THE OBJECT HAS AN ORIENTATION OTHER THAN ZERO, WE MUST CALL
  45. * "ROTATE" TO DO THE JOB
  46.     INR    E    ;LOOK AT THE 2ND OBJECT BYTE (ORIENTATION)
  47.     CALL    OBJR    ;
  48.     CPI    0    ;IS ITS ORIENTATION NON-ZERO?
  49.     JNZ    ROTATE    ;YES--LET 'ROTATE' TURN&SHOW IT.
  50. ;
  51. * DISPLAY THE OBJECT
  52.     INR    E ! INR E ;SKIP OVER CENTRE OF GRAVITY
  53. SHWLP:    INR    E    ;LOOK AT NEXT OBJECT BYTE
  54.     CALL    OBJR
  55.     CPI    CODE    ;IS IT A SPECIAL CODE?
  56.     JZ    SPEC    ;YES--TAKE CARE OF IT
  57.     MOV    B,A    ;NO--IT'S AN X CO-ORDINATE
  58.     INR    E    ;GET THE Y CO-ORDINATE
  59.     CALL    OBJR
  60.     MOV    C,A
  61.     MOV    D,H    ;GET THE COLOR INTO D FOR A CALL TO "PUT"
  62.     CALL    PUT
  63.     MOV    D,L    ;GET OBJECT # BACK INTO D
  64.     JMP    SHWLP    ;NEXT.
  65. * TAKE CARE OF SPECIAL CODES
  66. SPEC:    INR    E    ;LOOK AT THE BYTE WITH THE CODE
  67.     CALL    OBJR
  68.     CPI    FINISH    ;IS IT THE END-OF-OBJECT CODE?
  69.     RZ        ;YES--WE'RE FINISHED.
  70.     CPI    COLOR    ;IS IT A CHANGE OF COLOR?
  71.     JNC    SHWLP    ;NO--IGNORE IT
  72.     MOV    H,A    ;ELSE STORE THE NEW COLOR FOR POSTERITY
  73.     JMP    SHWLP    ;AND GET NEXT BYTE.
  74. ;
  75. ; SWAP -- THIS MOVES DAZZLER'S ATTENTION TO 'ONBUF',THE BUFFER WHICH
  76. ; HAS BEEN THE TARGET OF AL THE 'PUTS' AND 'GETS' LATELLY. IT ALSO
  77. ; CHANGES THE 'ONBUF'POINTER TO POINT TO THE BUFFER THAT WAS BEING
  78. ; SHOWN BEFORE, AND FILLS THAT ONE WITH THE BACKGROUND SCENE.
  79. SWAP:    LDA    ONBUF+1    ;'ONBUF' POINTS TO BUFFER CURRENTLY RECEIVING
  80.     MOV    E,A    ;'PUT'-RESULTS...ACTUALLY THE OTHER BUFFER IS
  81.     XRI    08H    ;BEING SHOWN BY DAZZLER.WE SWITCH HERE.
  82.     MOV    D,A    ;'E' HAS (HI-PART OF)NEXT SHOW-BUFF.
  83.     STA    ONBUF+1    ;'D' HAS (HI-PART OF)NEXT ON-BUFF..
  84.     MOV    A,E
  85.     STC
  86.     RAR        ;THIS PREPARES DAZZLER CONTROL WORD FOR DMA
  87.     OUT    0EH    ;CONTROL: BIT 7 SET, BITS 6-0 ARE HIGH-ADDR.
  88.     LHLD    BACKGRND
  89.     XCHG        ;NOW DE POINTS TO BACKGRND,H HAS 'ONBUF'-HI.
  90.     MVI    L,0    ;HL IS READY TO POINT TO THE FILLABLE BUFFEER.
  91. ;
  92.     CALL    FILL2K
  93. ;
  94.     RET
  95. ;
  96. ; ONLIST:  JMM  3/79
  97. ; REVISED TO GO WITH NEW SHOW BY LEE WITTENBERG (JUNE 19, 1979)
  98. ; PREPARES A LIST AT 130 OF OBJECTS TO BE 'ON' AT
  99. ; THIS TIME.  FIRST PARM IS ASSUMED TO BE THE NUMBER
  100. ; OF OBJECTS IN THE LIST AND IS SAVED AS SUCH
  101. ; (THE FIRST ITEM IN THE LIST IS THE NUMBER OF OBJECTS FOLLOWING)
  102. ;
  103. ; CALLS:INPAR
  104. ;
  105. ONLIST    EQU    130H
  106.     ORG    2C50H
  107. LISTOP:    LXI    H,ONLIST
  108.     CALL    INPAR    ;GET # OF OBJECTS IN LIST
  109.     MOV    M,E    ;SAVE THAT #
  110.     MOV    A,E    ;USE IT AS A COUNTER
  111.     ORA    A
  112.     RZ        ;RETURN IF EMPTY ONLIST WANTED
  113. LSTLP:    CALL    INPAR    ;GET OBJECT #
  114.     INX    H    ;AND STORE IT AT NEXT
  115.     MOV    M,E    ;POSITION IN ONLIST
  116.     DCR    A    ;ARE WE FINISHED?
  117.     JNZ    LSTLP    ;NO--GET NEXT OBJECT # FOR ONLIST
  118.     RET        ;YES--RETURN
  119. ;
  120. ;
  121. ; BACKGRND OP - PLACE AN OBJECT IN BACK-BUFFER. 
  122. ; CALLS: SHOWONE (THIS SOURCEFILE), INPAR
  123. ;
  124.     ORG    2C80H
  125.     LHLD    ONBUF
  126.     PUSH    H    ;SAVE CURRENT 'ONBUF'
  127.     LHLD    BACKGRND
  128.     SHLD    ONBUF
  129.     CALL    INPAR    ;'E' NOW NAMES THE OBJECT
  130.     MOV    D,E
  131.     CALL    SHOWONE
  132.     POP    H
  133.     SHLD    ONBUF    ;UNDO OUR 'FIX'.
  134.     RET
  135. ;
  136. ; RECOLOR OP - SETS OBJECT (FIRST ELEMENT) TO NEW COLOR.
  137. ; USELESS UNLESS OBJECT IS A SINGLE COLOR....
  138. ;
  139.     ORG    2CA0H
  140.     CALL    INPAR    ;GET OBJECT NR
  141.     MOV    B,E    ;AND STASH IT.
  142.     CALL    INPAR    ;GET NEW COLOR
  143.     MOV    A,E
  144.     MOV    D,B    ;OBJ NR. IN D.
  145.     MVI    E,0    ;SPECIFY FIRST ELEMENT.
  146.     CALL    OBJW
  147.     RET
  148. ;
  149. ;THAT'S ALL,FOLKS...
  150. ;
  151.     END
  152.