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

  1. HSIZE    EQU    64
  2. VSIZE    EQU    64
  3. LONYB    EQU    0FH
  4. HINYB    EQU    0F0H
  5. * THIS ROUTINE TAKES A GIVEN COLOR (IN REG D) AND PUTS IT IN
  6. * A PIXEL LOCATED AT CO-ORDINATES (B,C) ON THE SCREEN IN 64 BY 64
  7. * DAZZLER MODE.  IF THE CO-ORDINATE PAIR LOCATES OUT OF THE SCREEN
  8. * AREA, WE RETURN WITH THE CARRY SET TO INDICATE AN ERROR.
  9. * IT IS ASSUMED THAT THE HIGH-ORDER NYBBLE OF D IS CLEAR.
  10.     ORG    050A0H
  11. ONBUF    EQU    5090H    ;POINTER TO CURRENT WORKING BUFFER (OFF)
  12. PUTF:    MOV    A,B    ;GET X CO-ORDINATE
  13.     CPI    HSIZE    ;IS IT TOO LARGE?
  14.     CMC
  15.     RC    ;YES--RETURN WITH ERROR
  16.     MOV    A,C    ;GET Y CO-ORDINATE
  17.     CPI    VSIZE    ;IS IT TOO LARGE?
  18.     CMC
  19.     RC    ;YES--RETURN WITH ERROR
  20.     PUSH    H
  21.     PUSH    D
  22.     LHLD    ONBUF    ;GET START @ OF BUFFER INTO HL
  23. * SET UP Y CO-ORDINATE PART OF ADDRESS (FROM REG C)
  24. * REMEMBER--Y CO-ORDINATE IS ALREADY IN A
  25.     CMA        ;CHANGE FROM SCREEN TO DAZZLER CO-ORDS
  26.     RAL        ;SET THE CARRY IF WE WILL BE
  27.     RAL        ;IN ONE OF THE LOWER TWO DAZZLER 
  28.     RAL        ;QUADRANTS
  29.     JNC    $+3+4    ;UPPER HEMISPHERE REQUIRES NO @ ADJUSTMENT
  30.     INR    H    ;HOWEVER, THE LOWER HEMISPHERE REQUIRES
  31.     INR    H    ;BIT 3 OF H SET
  32.     INR    H
  33.     INR    H
  34.     RAL        ;SET BIT 0 OF H IF THE FIFTH (I.E. BIT 4) BIT
  35.     JNC    $+3+1    ;OF Y IS SET
  36.     INR    H
  37.     ANI    HINYB    ;THE TOP NYB OF A IS NOW PROPERLY SET AS
  38.     MOV    L,A    ;THE TOP NYB OF THE LO-BYTE OF THE ADDRESS
  39. * SET UP X CO-ORDINATE PART OF ADDRESS (FROM REG B)
  40.     MOV    A,B    ;GET X CO-ORDINATE
  41.     RAL        ;ARE WE IN THE RIGHT OR LEFT QUADRANT OF
  42.     RAL        ;OUR GIVEN HEMISPHERE.  SET THE CARRY TO
  43.     RAL        ;FIND OUT
  44.     JNC    $+3+2    ;JUMP IF LEFT QUAD
  45.     INR    H    ;ELSE ADJUST REG H
  46.     INR    H
  47.     RRC        ;MOVE ZEROS TO HI-NYBBLE OF A AND SET
  48.     RRC        ;CARRY ACCORDING TO WHETHER THE
  49.     RRC        ;COLOR IS TO BE STORED IN THE HI OR LO-
  50.     RAR        ;ORDER NYBBLE
  51. * PUT THE COLOR IN D IN MEMORY.  REMEMBER, A STILL HOLDS THE
  52. * LO-NYBBLE OF THE ADDRESS
  53.     JNC    LOSEC    ;IF CY IS NOT SET, PUT IN LO-NYB
  54.     ORA    L    ;PUT LO-NYB OF @ INTO L
  55.     MOV    L,A
  56.     MOV    A,D    ;GET COLOR INTO HI-NYBBLE OF D
  57.     RRC
  58.     RRC
  59.     RRC
  60.     RRC
  61.     MOV    D,A
  62.     MOV    A,M    ;GET MEMORY BYTE
  63.     ANI    LONYB    ;(JUST LO-NYBBLE)
  64.     JMP    JOINM    ;& PUT COLOR IN PLACE
  65. LOSEC:    ORA    L    ;PUT LO-NYB OF @ INTO L
  66.     MOV    L,A
  67.     MOV    A,M    ;GET MEMORY BYTE
  68.     ANI    HINYB    ;(JUST HI-NYBBLE)
  69. JOINM:    ORA    D    ;FORM NEW MEMORY BYTE
  70.     MOV    M,A    ;AND STORE IT IN CURRENT BUFFER
  71.     POP    D
  72.     POP    H
  73.     RET
  74.