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

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