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

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