UDG Custom Graphics

Developer(s): George White
Date: 1986
Type: Program
Platform(s): TS 2068

User defined graphics character editor.

Content

Appears On

Capital Area Timex Sinclair User Group’s Library Tape.

Related Products

Related Articles

Related Content

Image Gallery

UDG Custom Graphics

Source Code

    1 REM  "UDG"  CUSTOM GRAPHICSG.E.WHITE              FEB 1986
    2 REM Graphic on "U" Key mustnot be a standard Character..    If necessary POKE USR "U",247   
    3 LET g$="+": LET k$="": POKE 23658,8
    4 LET m$="INSTALL GRAPHIC ON WHICH KEY?"
    5 ON ERR GO TO 9900
    7 GO TO 80
   10 PRINT OVER 1;AT r,c;g$
   11 IF INKEY$<>"" THEN GO TO 10
   12 PRINT OVER 1;AT r,c;g$
   13 IF INKEY$="" THEN GO TO 12
   14 LET k$=INKEY$
   17 PRINT OVER 0;AT r,c;g$
   20 IF k$="5" THEN LET c=c-1
   21 IF k$="8" THEN LET c=c+1
   23 IF k$="6" THEN LET r=r+1
   24 IF k$="7" THEN LET r=r-1
   26 IF k$="1" THEN LET g$="\u": PRINT AT r,c;"\u"
   27 IF k$="0" THEN LET g$="+": PRINT AT r,c;"+"
   29 RETURN 
   30 PRINT AT 20,3;"KEY-   AbcdEfghIjklMnopQrstU": PRINT "GRAPHIC   \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u"
   35 RETURN 
   40 PRINT "   -Arrow keys control cursor-","TOUCH ""1"" to blacken pixel","      ""0"" to clear pixel","      ""Z"" to clear character","      ""K"" to keep character"
   42 RETURN 
   50 PRINT : PRINT "   ""A""";TAB 26;"""J"""
   52 REM  * DRAW 23X24 SPRITES *
   54 PRINT : PRINT "   \a\b\c";TAB 26;"\j\k\l": PRINT "   \d\e\f";TAB 26;"\m\n\o": PRINT "   \g\h\i";TAB 26;"\p\q\r"
   56 RETURN 
   80 FOR i=USR "U" TO 65535
   82 POKE i,255
   84 NEXT i
   86 POKE 65532,247
   90 PRINT AT 7,5;"** CUSTOM GRAPHICS **";AT 10,4;"(User Defined Graphics)"
  100 INPUT "   ENTER  ""1"" = Single Digit       OR     ""2"" = 16X16 Sprite              ""3"" = 23X24 SPRITE";w$
  105 LET w$=w$(1)
  110 IF (w$<"1" OR w$>"3") THEN GO TO 100
  115 CLS 
  120 IF w$="2" THEN GO TO 2000
  130 IF w$="3" THEN GO TO 5000
 1000 REM  -Single Digit-
 1005 GO SUB 40
 1008 GO SUB 30
 1010 PRINT AT 8,1;m$
 1011 INPUT l$
 1015 IF (l$<"A" OR l$>"U") THEN GO TO 1011
 1018 LET l$=l$(1)
 1020 PRINT AT 8,1;"       ";l$;"          ";CHR$ ((CODE l$)+79);"          "
 1050 FOR r=9 TO 16
 1055 FOR c=10 TO 17
 1060 PRINT AT r,c;"+"
 1065 NEXT c
 1068 NEXT r
 1070 IF k$="Z" THEN GO TO 1200
 1099 REM -Write old GRAPHIC-
 1100 FOR R=0 TO 7
 1110 LET L=PEEK (USR l$+R)
 1120 FOR C=7 TO 0 STEP -1
 1130 IF L/2<>INT (L/2) THEN PRINT AT 9+R,10+C;"\u"
 1150 LET L=INT (L/2)
 1160 NEXT C
 1190 NEXT R
 1200 BEEP .08,30
 1300 LET r=9: LET c=10
 1310 LET g$="+"
 1312 IF CODE SCREEN$ (r,c)=0 THEN LET g$="\u"
 1315 PRINT AT r,c;g$
 1320 GO SUB 10
 1330 IF r=8 THEN LET r=9
 1332 IF r=17 THEN LET r=16
 1334 IF c=9 THEN LET c=10
 1336 IF c=18 THEN LET c=17
 1340 IF k$="Z" THEN PRINT AT 8,19;" ": GO TO 1050
 1350 IF k$<>"K" THEN GO TO 1310
 1400 REM -Install new Graphic-
 1402 BEEP .08,17
 1403 PRINT AT 20,2;"  ""K"" PRESSED FOR KEEPER!","       Installed at ";USR l$;"      "
 1410 FOR r=9 TO 16
 1420 LET BYTE=0
 1430 FOR c=10 TO 17
 1440 LET BYTE=BYTE*2+(CODE SCREEN$ (r,c)=0)
 1460 NEXT c
 1480 PRINT AT r,20;BYTE: POKE (USR l$+(r-9)),BYTE
 1490 NEXT R
 1500 PAUSE 300
 1510 CLS : GO SUB 30
 1520 PRINT AT 10,10;"ANOTHER? Y/N"
 1530 PAUSE 0: IF INKEY$="Y" THEN CLS : GO TO 1000
 1540 IF INKEY$<>"N" THEN GO TO 1510
 1550 GO TO 9000
 2000 REM  -16X16 Sprite-
 2001 CLS : PRINT "Use ARROW keys to move cursor."
 2002 PRINT "   ""K"" To KEEP Graphic"
 2003 PRINT AT 8,7;"REMEMBER!";TAB 7;"""1""=\u Pixel";TAB 7;"""0""=Clear Pixel";TAB 7;"""Z""=Clear CHR$": PRINT : PRINT TAB 8;"16 X 16"
 2004 PRINT AT 3,2;m$: GO SUB 30
 2005 INPUT l$
 2008 IF l$<"A" OR l$>"R" THEN GO TO 2004
 2009 LET l$=l$(1)
 2010 PRINT AT 3,2;"  ";l$+CHR$ (CODE l$+1);"                ";CHR$ (CODE l$+79)+CHR$ (CODE l$+80);"             "
 2011 PRINT AT 4,4;CHR$ (CODE l$+2)+CHR$ (CODE l$+3);TAB 22;CHR$ (CODE l$+81)+CHR$ (CODE l$+82);"       "
 2030 FOR i=3 TO 18
 2050 PRINT AT i,6;"++++++++++++++++"
 2070 NEXT i
 2080 IF k$="Z" THEN GO TO 2300
 2085 REM  -OLD CHR$-
 2090 LET o=0
 2100 FOR r=0 TO 15
 2115 IF r=8 THEN LET o=8
 2120 LET l=PEEK (USR l$+r+o)
 2130 FOR c=7 TO 0 STEP -1
 2140 IF l/2<>INT (l/2) THEN PRINT AT 3+r,6+c;"\u"
 2150 LET l=INT (l/2)
 2160 NEXT c
 2200 LET l=PEEK (USR l$+r+8+o)
 2230 FOR c=7 TO 0 STEP -1
 2240 IF l/2<>INT (l/2) THEN PRINT AT 3+r,14+c;"\u"
 2250 LET l=INT (l/2)
 2260 NEXT c
 2270 NEXT r
 2300 BEEP .08,30
 3010 LET r=3: LET c=6
 3020 LET g$="+"
 3025 IF CODE SCREEN$ (r,c)=0 THEN LET g$="\u"
 3030 PRINT AT r,c;g$
 3040 GO SUB 10
 3070 IF k$="Z" THEN PRINT AT 3,22;"  ";AT 4,22;"  ": GO TO 2030
 3075 IF k$="K" THEN GO TO 4000
 3080 IF r=2 THEN LET r=3
 3082 IF r=19 THEN LET r=18
 3084 IF c=5 THEN LET c=6
 3086 IF c=22 THEN LET c=21
 3900 GO TO 3020
 3999 REM -INSTALL NEW CHR$-
 4000 PRINT AT 20,2;"  ""K"" PRESSED FOR KEEPER!","       Installed at ";USR l$;"      "
 4003 BEEP .08,17
 4005 LET o=0
 4010 FOR r=3 TO 18
 4015 LET c=13
 4020 LET BYTE=0
 4025 IF r=11 THEN LET o=8
 4030 FOR i=7 TO 0 STEP -1
 4040 LET BYTE=BYTE*2+(CODE SCREEN$ (r,c-i)=0)
 4060 NEXT i
 4065 PRINT AT r,0;BYTE: POKE (USR l$+(o+r-3)),BYTE
 4067 LET c=21
 4068 LET BYTE=0
 4070 FOR i=7 TO 0 STEP -1
 4072 LET BYTE=BYTE*2+(CODE SCREEN$ (r,c-i)=0)
 4074 NEXT i
 4080 PRINT AT r,28;BYTE: POKE (USR l$+(o+r+5)),BYTE
 4090 NEXT r
 4095 PAUSE 300
 4100 CLS : GO SUB 30
 4110 PRINT AT 10,10;"ANOTHER? Y/N"
 4120 PAUSE 0: IF INKEY$="Y" THEN GO TO 2000
 4130 IF INKEY$<>"N" THEN GO TO 4100
 4140 GO TO 9000
 5000 REM -23X24 PIXEL SPRITE-
 5005 CLS : PRINT "      Screen will be full.          Remember these commands!",,,
 5010 GO SUB 40
 5012 PRINT : PRINT 
 5015 GO SUB 50
 5020 PRINT AT 20,2;m$
 5025 INPUT "* ""A"" or ""J"" (recommended)";l$
 5026 IF l$<"A" OR l$>"M" THEN GO TO 5020
 5027 LET l$=l$(1)
 5028 LET h=CODE l$
 5030 CLS : PRINT AT 3,0;l$;CHR$ (h+1);CHR$ (h+2)
 5032 PRINT AT 4,0;CHR$ (h+3);CHR$ (h+4);CHR$ (h+5)
 5034 PRINT AT 5,0;CHR$ (h+6);CHR$ (h+7);CHR$ (h+8)
 5040 PRINT AT 10,0;CHR$ (h+79);CHR$ (h+80);CHR$ (h+81),,CHR$ (h+82);CHR$ (h+83);CHR$ (h+84),,CHR$ (h+85);CHR$ (h+86);CHR$ (h+87)
 5100 PRINT AT 5,30;"1";AT 6,30;"0";AT 8,30;"A";AT 9,30;"R";AT 10,30;"R";AT 11,30;"O";AT 12,30;"W";AT 13,30;"S";AT 16,30;"K";AT 17,30;"Z"
 5200 POKE 23659,0
 5210 FOR r=0 TO 22
 5220 PRINT AT r,4;"++++++++++++++++++++++++"
 5230 NEXT r
 5240 IF k$="Z" THEN GO TO 5590
 5245 REM  -WRITE OLD SPRITE-
 5250 LET o=0
 5260 FOR r=0 TO 22
 5262 IF r=8 THEN LET o=16
 5264 IF r=16 THEN LET o=32
 5270 LET l=PEEK (USR l$+r+o)
 5280 FOR c=7 TO 0 STEP -1
 5290 IF l/2<>INT (l/2) THEN PRINT AT r,4+c;"\u"
 5300 LET l=INT (l/2)
 5310 NEXT c
 5320 LET l=PEEK (USR l$+r+8+o)
 5330 FOR c=7 TO 0 STEP -1
 5340 IF l/2<>INT (l/2) THEN PRINT AT r,12+c;"\u"
 5350 LET l=INT (l/2)
 5360 NEXT c
 5370 LET l=PEEK (USR l$+r+16+o)
 5380 FOR c=7 TO 0 STEP -1
 5390 IF l/2<>INT (l/2) THEN PRINT AT r,20+c;"\u"
 5400 LET l=INT (l/2)
 5410 NEXT c
 5570 NEXT r
 5590 BEEP .08,30
 5600 LET r=0: LET c=4
 5610 LET g$="+"
 5612 IF CODE SCREEN$ (r,c)=0 THEN LET g$="\u"
 5618 PRINT AT r,c;g$
 5620 GO SUB 10
 5630 IF r<0 THEN LET r=0
 5632 IF r=23 THEN LET r=22
 5634 IF c=3 THEN LET c=4
 5636 IF c=28 THEN LET c=27
 5650 IF k$="K" THEN GO TO 5700
 5660 IF k$="Z" THEN PRINT AT 10,0;"   ": PRINT "   ": PRINT "   ": GO TO 5210
 5670 GO TO 5610
 5699 REM -INSTALL NEW GRAPHIC-
 5700 PRINT AT 19,0; FLASH 1;"WAIT"
 5703 BEEP .08,17
 5705 LET o=0
 5710 FOR r=0 TO 22
 5720 LET BYTE=0
 5722 IF r=8 THEN LET o=16
 5724 IF r=16 THEN LET o=32
 5730 FOR c=4 TO 11
 5740 LET BYTE=BYTE*2+(CODE SCREEN$ (r,c)=0)
 5760 NEXT c
 5765 POKE (USR l$+(o+r)),BYTE
 5768 LET BYTE=0
 5770 FOR c=12 TO 19
 5772 LET BYTE=BYTE*2+(CODE SCREEN$ (r,c)=0)
 5774 NEXT c
 5780 POKE (USR l$+(o+r+8)),BYTE
 5788 LET BYTE=0
 5790 FOR c=20 TO 27
 5792 LET BYTE=BYTE*2+(CODE SCREEN$ (r,c)=0)
 5794 NEXT c
 5800 POKE (USR l$+(o+r+16)),BYTE
 5890 NEXT r
 5900 POKE 23659,2: CLS 
 5905 GO SUB 50
 5910 PRINT AT 10,10;"ANOTHER? Y/N"
 5912 BEEP .08,22
 5915 GO SUB 30
 5920 PAUSE 0: IF INKEY$="Y" THEN GO TO 5000
 5930 IF INKEY$<>"N" THEN GO TO 5910
 9000 BEEP .08,9
 9010 PRINT AT 10,2;"** SAVE GRAPHIC FILE? Y/N **"
 9020 PRINT : PRINT " (File resides above RAMTOP and     must be saved separately)"
 9030 PAUSE 0: IF INKEY$="N" THEN STOP 
 9040 IF INKEY$<>"Y" THEN GO TO 9030
 9050 CLS : INPUT "SAVE (name)CODE 65368,168        -ENTER name-";N$
 9060 SAVE N$CODE 65368,168
 9070 STOP 
 9900 POKE 23659,2
 9901 ON ERR RESET 
 9902 STOP 
 9950 SAVE "UDG" LINE 9960: SAVE "udg"CODE 65368,168
 9955 STOP 
 9960 LOAD ""CODE 
 9970 RUN 

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top