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

  1. HIGH2    EQU    03FH
  2. LONYB    EQU    0FH
  3. HINYB    EQU    0F0H
  4. * THIS ROUTINE TAKES A GIVEN CO-ORDINATE PAIR (REGS B, C IN 64 X 64
  5. * DAZZLER MODE AND RETURNS THE PIXEL LOCATED ON THE SCREEN AT
  6. * THAT LOCATION.  IF THE CO-ORDINATE PAIR LOCATES OUT OF THE SCREEN
  7. * AREA, IT IS "WRAPPED AROUND" THE SCREEN UNTIL IT IS DISPLAYABLE.
  8. * IT IS ASSUMED THAT THE HIGH-ORDER NYBBLE OF D IS CLEAR.
  9.     ORG    50EAH
  10. ONBUF    EQU    5090H
  11. GETW:    PUSH    H
  12.     LHLD    ONBUF    ;GET START @ OF BUFFER INTO HL
  13. * SET UP Y CO-ORDINATE PART OF ADDRESS (FROM REG C)
  14.     MOV    A,C    ;GET Y CO-ORDINATE
  15.     CMA        ;ADJUST FROM SCREEN TO DAZZLER CO-ORDS
  16.     RAL        ;SET THE CARRY IF WE WILL BE
  17.     RAL        ;IN ONE OF THE LOWER TWO DAZZLER 
  18.     RAL        ;QUADRANTS
  19.     JNC    $+3+4    ;UPPER HEMISPHERE REQUIRES NO @ ADJUSTMENT
  20.     INR    H    ;HOWEVER, THE LOWER HEMISPHERE REQUIRES
  21.     INR    H    ;BIT 3 OF H SET
  22.     INR    H
  23.     INR    H
  24.     RAL        ;SET BIT 0 OF H IF THE FIFTH (I.E. BIT 4) BIT
  25.     JNC    $+3+1    ;OF Y IS SET
  26.     INR    H
  27.     ANI    HINYB    ;THE TOP NYB OF A IS NOW PROPERLY SET AS
  28.     MOV    L,A    ;THE TOP NYB OF THE LO-BYTE OF THE ADDRESS
  29. * SET UP X CO-ORDINATE PART OF ADDRESS (FROM REG B)
  30.     MOV    A,B    ;GET X CO-ORDINATE
  31.     ANI    HIGH2    ;CLEAR HI-BITS AND CY (WRAPAROUND)
  32.     RAL        ;ARE WE IN THE RIGHT OR LEFT QUADRANT OF
  33.     RAL        ;OUR GIVEN HEMISPHERE.  SET THE CARRY TO
  34.     RAL        ;FIND OUT
  35.     JNC    $+3+2    ;JUMP IF LEFT QUAD
  36.     INR    H    ;ELSE ADJUST REG H
  37.     INR    H
  38.     RRC        ;MOVE ZEROS TO HI-NYBBLE OF A AND SET
  39.     RRC        ;CARRY ACCORDING TO WHETHER THE
  40.     RRC        ;COLOR IS TO BE STORED IN THE HI OR LO-
  41.     RAR        ;ORDER NYBBLE
  42. * GET THE SPECIFIED COLOR FROM MEMORY INTO D
  43.     PUSH    PSW    ;SAVE THE CY FOR FURTHER REFERENCE
  44.     ORA    L    ;COMPLETE THE ADDRESS
  45.     MOV    L,A
  46.     POP    PSW    ;GET THE CY BACK
  47.     MOV    A,M    ;GET THE TWO PIXELS POINTED TO BY THE @
  48.     JNC    $+3+4    ;IF WE WANT LO-NYB PIXEL, WE'RE OKAY
  49.     RRC        ;ELSE--GET HI-NYB PIXEL INTO LO-NYB
  50.     RRC        ;OF A
  51.     RRC
  52.     RRC
  53.     ANI    LONYB    ;STRIP THE SUPERFLOUS HI-NYBBLE
  54.     MOV    D,A    ;GET PIXEL INTO PROPER REG AND RETURN
  55.     POP    H
  56.     RET
  57.