IT, Programmer, CoCoNut
Ironton, OH
mmassie@custom-builtpcs.com
7405325471 x1
Listening to CoCoCrew during the Pandemic has inspired me to play around with the CoCo again. I originally owned a CoCo 1, I upgraded the Ram to 64K, and did many modifications. I now have a CoCo3 with an upgraded 6309 CPU and 512K of ram, 5.25 Floppies, MPI, CoCoSDC, Laptop configured with Drive Wire. I have also started following the CoCo3FPGA project and have several Altera DE-1's running CoCo3FPGA project. I love Retro computers and really like to gain electronics, FPGA, programming knowledge along the way.
I remember at age 12 playing around with poking graphic characters into strings in my basic programs. When you list the programs you will see Basic commands for Characters 128 and higher. You can print the strings and get graphics or see other uses below.
To find the start address of your basic program on a CoCo
PRINT PEEK(25)*256+PEEK(26)
10 A$="0123456789"
20 PRINT A$
POKE 9737,128
LIST
10 A$="FOR123456789"
20 PRINT A$
Notice the address 9737 Character of 128 is now displayed as the Basic command 'FOR'. To be clear the 0 is replaced with FOR. You can see the unraveling of the Basic commands as encoded by Basic. If you run the program you will see the first character is a graphic now.
Program to dump Ram:
FOR X = 9729 TO 9739:PRINT X, CHR$(PEEK(X)):NEXT X
The following values produce the following commands.
128 = FOR
129 = GO
130 = RE
131 = '
132 = ELSE
133 = IF
134 = DATA
135 = PRINT
136 = ON
137 = INPUT
138 = END
139 = NEXT
140 = DIM
141 = READ
142 = RUN
143 = RESTORE
144 = RETURN
145 = STOP
146 = POKE
147 = CONT
148 = LIST
149 = CLEAR
150 = NEW
151 = CLOAD
152 = CSAVE
153 = OPEN
154 = CLOSE
155 = LLIST
156 = SET
157 = RESET
158 = CLS
159 = MOTOR
160 = SOUND
161 = AUDIO
162 = EXEC
163 = SKIP
164 = TAB(
165 = TO
166 = SUB
167 = THEN
168 = NOT
169 = STEP
170 = OFF
171 = +
172 = -
173 = *
174 = /
175 = ^ UP ARROW
176 = AND
177 = OR
178 = >
179 = =
180 = <
181 = DEL
182 = EDIT
183 = TRON
184 = TROFF
185 = DEF
186 = LET
187 = LINE
188 = PCLS
189 = PSET
190 = PRESET
191 = SCREEN
192 = PCLEAR
193 = COLOR
194 = CIRCLE
195 = PAINT
196 = GET
197 = PUT
198 = DRAW
199 = PCOPY
200 = PMODE
201 = PLAY
202 = DLOAD
203 = RENUM
204 = FN
205 = USING
206 = DIR
207 = DRIVE
208 = FIELD
209 = FILES
210 = KILL
211 = LOAD
212 = LSET
213 = MERGE
214 = RENAME
215 = RSET
216 = SAVE
217 = WRITE
218 = VERIFY
219 = UPLOAD
220 = DSKINI
221 = BACKUP
222 = COPY
223 = DSKI$
224 = DSKO$
225 = DOS
226 = WIDTH
227 = PALETTE
228 = HSCREEN
229 = LPOKE
230 = HCLS
231 = HCOLOR
232 = HPAINT
233 = HCIRCLE
234 = HLINE
235 = HGET
236 = HPUT
237 = HBUFF
238 = HPRINT
239 = ERR
240 = BRK
241 = LOCATE
242 = HSTAT
243 = HSET
244 = HRESET
245 = HDRAW
246 = CMP
247 = RGB
248 = ATT
249 = WILL NOT LIST
250 = WILL NOT LIST - GRAF CHAR


The code actually starts poking 128 in to the first address then incrementing address and graphic character in the loop. Each byte is actually being displayed as multiple characters. The list command can only display up to 255 characters per line. Notice my print statement is not obvious by listing the program. It is evident by running the program. Hope to see you at Tandy Assembly 2021!
Hope you find this helpful.