home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / MBUG / MBUG099.ARC / TEXT.I < prev    next >
Text File  |  1979-12-31  |  2KB  |  59 lines

  1. Procedure Text(CursX,CursY : Byte; Writing : Script; F : Operation);
  2. {Given : 1. CursX   - Byte in [1..64]
  3.          2. CursY   - Byte in [1..16]
  4.          3. Writing - A String of any length
  5.          4. F       - ResDot,SetDot,InvDot
  6.  
  7. it will : 1. Read ROM data for Writing[Loop] into $3000
  8.           2. Mask 'Writing' onto screen at position
  9.              CursX,CursY}
  10. var
  11.   PCG, Temp, ASCII : Integer;
  12.   Loop, MaskData, Mask : Byte;
  13. Begin
  14.   for Loop := 1 to Length(Writing) do
  15.   begin
  16.     ASCII := Ord(Writing[Loop]);
  17.     Inline($3E/$01/          {       LD      A,1          }
  18.            $D3/$0B/          {       OUT     (0BH),A      }
  19.            $2A/ASCII/        {       LD      HL,ASCII     }
  20.            $11/0/$F0/        {       LD      DE,$F000     }
  21.            $29/              {       ADD     HL,HL        }
  22.            $29/              {       ADD     HL,HL        }
  23.            $29/              {       ADD     HL,HL        }
  24.            $29/              {       ADD     HL,HL        }
  25.            $19/              {       ADD     HL,DE        }
  26.            $11/0/$30/        {       LD      DE,$3000     }
  27.            6/$10/            {       LD      B,16         }
  28.            $7E/              {READ   LD      A,(HL)       }
  29.            $12/              {       LD      (DE),A       }
  30.            $13/              {       INC     DE           }
  31.            $23/              {       INC     HL           }
  32.            $10/$FA/          {       DJNZ    READ         }
  33.            $AF/              {       XOR     A            }
  34.            $D3/$0B);         {       OUT     (0BH),A      }
  35.  
  36.     if ((CursX>0) and (CursX<65) and (CursY>0) and (CursY<17)) then
  37.     begin
  38.       PCG := Mem[$EFBF + CursX +  CursY * 64];
  39.       Port[28] := 128 + ((CursY - 1) div 2);
  40.       for MaskData := 0 to 15 do
  41.         begin
  42.         Temp := $F000 + PCG * 16 + MaskData;
  43.         Mask := Mem[$3000 + MaskData];
  44.           case F of
  45.             ResDot : Mem[Temp] := Mem[Temp] And not Mask;
  46.             SetDot : Mem[Temp] := Mem[Temp] Or Mask;
  47.             InvDot : Mem[Temp] := Mem[Temp] Xor Mask;
  48.           end;
  49.         end;
  50.       Port[28] := 128;
  51.     end;
  52.     CursX := CursX + 1;
  53.     if CursX > 64 then
  54.       begin
  55.         CursX := 1;
  56.         CursY := CursY + 1;
  57.       end;
  58.   end;
  59. End;