https://bitchin100.com/wiki/api.php?action=feedcontributions&user=Ronwiesen&feedformat=atomBitchin100 DocGarden - User contributions [en]2024-03-28T15:26:05ZUser contributionsMediaWiki 1.39.3https://bitchin100.com/wiki/index.php?title=Model_T_Cross_Map_RAM_Variables&diff=2557Model T Cross Map RAM Variables2012-08-14T12:27:53Z<p>Ronwiesen: </p>
<hr />
<div><table border="1"><br />
<br />
<tr valign="bottom"><br />
<br />
<td colspan="2" align="center">M100 Address</td><br />
<td colspan="2" align="center">PC8201 address</td><br />
<td colspan="2" align="center">T200 address</td><br />
<td>Name1</td><br />
<td>Name2</td><br />
<td>Description</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td align="center" >HEX</td><br />
<td align="center" >DEC</td><br />
<td align="center" >HEX</td><br />
<td align="center" >DEC</td><br />
<td align="center" >HEX</td><br />
<td align="center" >DEC</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<br />
<tr valign="bottom"><br />
<br />
<td align="right" >62960</td><br />
<td></td><br />
<td></td><br />
<td>EEB0</td><br />
<td align="right" >61104</td><br />
<td></td><br />
<td>MAXRAM</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F5F4</td><br />
<td>62964</td><br />
<td>F384</td><br />
<td>62340</td><br />
<td>0000</td><br />
<td></td><br />
<td>HIMEM<br />
</td><br />
<td></td><br />
<td><br />
Highest memory available to BASIC (clear value)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F5F9</td><br />
<td>62969</td><br />
<td>F389</td><br />
<td>62345</td><br />
<td>0000</td><br />
<td></td><br />
<td>INTRPT<br />
</td><br />
<td></td><br />
<td><br />
Rst 5.5 hook normally barcode reader</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F5FC</td><br />
<td>62972</td><br />
<td>F38C</td><br />
<td>62348</td><br />
<td>0000</td><br />
<td></td><br />
<td>R65HOK<br />
</td><br />
<td></td><br />
<td><br />
Rst 6.5 hook normally UART (COM)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F5FF</td><br />
<td>62975</td><br />
<td>F38F</td><br />
<td>62351</td><br />
<td>EEC2</td><br />
<td>61122</td><br />
<td>R75HOK<br />
</td><br />
<td>RS75HK</td><br />
<td><br />
Rst 7.5 hook normally from timer</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F624</td><br />
<td>63012</td><br />
<td>F3B9</td><br />
<td>62393</td><br />
<td>0000</td><br />
<td></td><br />
<td>BRUN<br />
</td><br />
<td></td><br />
<td><br />
This executes second ROM</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F625</td><br />
<td>63013</td><br />
<td>F3BA</td><br />
<td>62394</td><br />
<td>0000</td><br />
<td></td><br />
<td>BRUN2<br />
</td><br />
<td></td><br />
<td><br />
This executes second ROM</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F62A</td><br />
<td>63018</td><br />
<td>F3BF</td><br />
<td>62399</td><br />
<td>0000</td><br />
<td></td><br />
<td>ROMFLG<br />
</td><br />
<td></td><br />
<td><br />
Option ROM flag</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F62B</td><br />
<td>63019</td><br />
<td></td><br />
<td></td><br />
<td>EEF4</td><br />
<td>61172</td><br />
<td></td><br />
<td>CALPPS</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63020</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61177</td><br />
<td></td><br />
<td>FNKMAC</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F639</td><br />
<td>63033</td><br />
<td>F3E5</td><br />
<td>62437</td><br />
<td>EF06</td><br />
<td>61190</td><br />
<td>CSRY<br />
</td><br />
<td></td><br />
<td><br />
Current cursor Y position</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F63A</td><br />
<td>63034</td><br />
<td>F3E6</td><br />
<td>62438</td><br />
<td>EF07</td><br />
<td>61191</td><br />
<td>CSRX<br />
</td><br />
<td></td><br />
<td><br />
Current cursor X positon</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F63B</td><br />
<td>63035</td><br />
<td>F3E7</td><br />
<td>62439</td><br />
<td>0000</td><br />
<td></td><br />
<td>LINCNT<br />
</td><br />
<td></td><br />
<td><br />
Console height</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F63C</td><br />
<td>63036</td><br />
<td>F3E8</td><br />
<td>62440</td><br />
<td>0000</td><br />
<td></td><br />
<td>LINWDT<br />
</td><br />
<td></td><br />
<td><br />
Console width</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63037</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61194</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F63E</td><br />
<td>63038</td><br />
<td>F3EA</td><br />
<td>62442</td><br />
<td>EF0B</td><br />
<td>61195</td><br />
<td>LOKFLG<br />
</td><br />
<td>SCLFLG</td><br />
<td><br />
Flag 00 = screen scrolls</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F640</td><br />
<td>63040</td><br />
<td>F3EC</td><br />
<td>62444</td><br />
<td>0000</td><br />
<td></td><br />
<td>LCDCSY<br />
</td><br />
<td></td><br />
<td><br />
Cursor row (1-8)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F641</td><br />
<td>63041</td><br />
<td>F3ED</td><br />
<td>62445</td><br />
<td>0000</td><br />
<td></td><br />
<td>LCDCSX<br />
</td><br />
<td></td><br />
<td><br />
Cursor column (1-40)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F646</td><br />
<td>63046</td><br />
<td>F3F2</td><br />
<td>62450</td><br />
<td>0000</td><br />
<td></td><br />
<td>ESCCNT<br />
</td><br />
<td></td><br />
<td><br />
ESC mode flag (0 normal/ non-zero escape sequence)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F648</td><br />
<td>63048</td><br />
<td>F3F4</td><br />
<td>62452</td><br />
<td>0000</td><br />
<td></td><br />
<td>REVFLG<br />
</td><br />
<td></td><br />
<td><br />
Reverse video flag (FF=reverse/ 00=normal)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F64E</td><br />
<td>63054</td><br />
<td>F3FA</td><br />
<td>62458</td><br />
<td>0000</td><br />
<td></td><br />
<td>PRVCOO<br />
</td><br />
<td></td><br />
<td><br />
X coordinate of last graphic point plotted</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F64F</td><br />
<td>63055</td><br />
<td>F3FB</td><br />
<td>62459</td><br />
<td>0000</td><br />
<td></td><br />
<td>PRVCO2<br />
</td><br />
<td></td><br />
<td><br />
Y coordinate of last graphic point plotted *</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F650</td><br />
<td>63056</td><br />
<td>F3FC</td><br />
<td>62460</td><br />
<td>EF32</td><br />
<td>61234</td><br />
<td>FNKMOD<br />
</td><br />
<td></td><br />
<td><br />
Function key mode/ BIT 7=in TEXT; BIT 6=in TELCOM</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63058</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61236</td><br />
<td></td><br />
<td>ERRTRP</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63062</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61239</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F658</td><br />
<td>63064</td><br />
<td>F403</td><br />
<td>62467</td><br />
<td>EF39</td><br />
<td>61241</td><br />
<td>FULDUP<br />
</td><br />
<td>DUPFLG</td><br />
<td><br />
Full/half duplex switch (FF=full duplex/ 00=half duplex)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F65A</td><br />
<td>63066</td><br />
<td>F405</td><br />
<td>62469</td><br />
<td>EF3B</td><br />
<td>61243</td><br />
<td>LFFLG<br />
</td><br />
<td></td><br />
<td><br />
Auto linefeed on RS232 output switch (non zero send<br />
line feeds with each carriage return)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F65B</td><br />
<td>63067</td><br />
<td>F406</td><br />
<td>62470</td><br />
<td>EF3C</td><br />
<td>61244</td><br />
<td>SERMOD<br />
</td><br />
<td></td><br />
<td><br />
Serial initialization string</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F660</td><br />
<td>63072</td><br />
<td>F40C</td><br />
<td>62476</td><br />
<td>0000</td><br />
<td></td><br />
<td>TMPHOK<br />
</td><br />
<td></td><br />
<td><br />
Temporary hook</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F661</td><br />
<td>63073</td><br />
<td>F40D</td><br />
<td>62477</td><br />
<td>0000</td><br />
<td></td><br />
<td>TMPAD1<br />
</td><br />
<td></td><br />
<td><br />
Temporary hook address</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F663</td><br />
<td>63075</td><br />
<td>F40F</td><br />
<td>62479</td><br />
<td>0000</td><br />
<td></td><br />
<td>TMPAD2<br />
</td><br />
<td></td><br />
<td><br />
Temporary hook address 2</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F665</td><br />
<td>63077</td><br />
<td>F411</td><br />
<td>62481</td><br />
<td>0000</td><br />
<td></td><br />
<td>TMPAD3<br />
</td><br />
<td></td><br />
<td><br />
Temporary hook address 3</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F672</td><br />
<td>63090</td><br />
<td>F453</td><br />
<td>62547</td><br />
<td>0000</td><br />
<td></td><br />
<td>ERRFLG<br />
</td><br />
<td></td><br />
<td><br />
Error code of last error</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F674</td><br />
<td>63092</td><br />
<td>F455</td><br />
<td>62549</td><br />
<td>0000</td><br />
<td></td><br />
<td>LPTPOS<br />
</td><br />
<td></td><br />
<td><br />
Line printer head position (based from zero)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F675</td><br />
<td>63093</td><br />
<td>F456</td><br />
<td>62550</td><br />
<td>0000</td><br />
<td></td><br />
<td>PRTFLG<br />
</td><br />
<td></td><br />
<td><br />
Flag FF=send output to lpt</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F67A</td><br />
<td>63098</td><br />
<td>F45B</td><br />
<td>62555</td><br />
<td>EF65</td><br />
<td>61285</td><br />
<td>CURLIN<br />
</td><br />
<td></td><br />
<td><br />
Current Basic executing line number</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63099</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61286</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F67C</td><br />
<td>63100</td><br />
<td>F45D</td><br />
<td>62557</td><br />
<td>EF67</td><br />
<td>61287</td><br />
<td>TXTTAB<br />
</td><br />
<td>CURBAS</td><br />
<td><br />
Pointer to start of Basic programs</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63105</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61292</td><br />
<td></td><br />
<td>INPBFR</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F685</td><br />
<td>63109</td><br />
<td>F462</td><br />
<td>62562</td><br />
<td>EF70</td><br />
<td>61296</td><br />
<td>KBUF<br />
</td><br />
<td>INPBUF</td><br />
<td><br />
Start of keyboard crunch buffer for line input routine</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F788</td><br />
<td>63368</td><br />
<td>F6A4</td><br />
<td>63140</td><br />
<td>0000</td><br />
<td></td><br />
<td>TTYPOS<br />
</td><br />
<td></td><br />
<td><br />
Current TTY (horizontal cursor) position (0-39)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F789</td><br />
<td>63369</td><br />
<td>F6A5</td><br />
<td>63141</td><br />
<td>F074</td><br />
<td>61556</td><br />
<td>FNKSTR<br />
</td><br />
<td>KEYDSP</td><br />
<td><br />
Function key definition area</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63449</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61636</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F80A</td><br />
<td>63498</td><br />
<td>F7E6</td><br />
<td>63462</td><br />
<td>0000</td><br />
<td></td><br />
<td>BASFNK<br />
</td><br />
<td></td><br />
<td><br />
BASIC's function keys</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F923</td><br />
<td>63779</td><br />
<td>F832</td><br />
<td>63538</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMSC1<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF: Seconds (ones)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F924</td><br />
<td>63780</td><br />
<td>F833</td><br />
<td>63539</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMSC2<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+1: Seconds (tens)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F925</td><br />
<td>63781</td><br />
<td>F834</td><br />
<td>63540</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMMN1<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+2: Minutes (ones)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F926</td><br />
<td>63782</td><br />
<td>F835</td><br />
<td>63541</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMMN2<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+3: Minutes (tens)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F927</td><br />
<td>63783</td><br />
<td>F836</td><br />
<td>63542</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMHR1<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+4: Hours (ones)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F928</td><br />
<td>63784</td><br />
<td>F837</td><br />
<td>63543</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMHR2<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+5: Hours (tens)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F929</td><br />
<td>63785</td><br />
<td>F838</td><br />
<td>63544</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMDT1<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+6: Day (ones)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92A</td><br />
<td>63786</td><br />
<td>F839</td><br />
<td>63545</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMDT2<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+7: Day (tens)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92B</td><br />
<td>63787</td><br />
<td>F83A</td><br />
<td>63546</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMDAY<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+8: Day of week code (0=Sun / 1=Mon / etc..) **Not implemented?**</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92C</td><br />
<td>63788</td><br />
<td>F83B</td><br />
<td>63547</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMMON<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+9: Current month</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92D</td><br />
<td>63789</td><br />
<td>F83C</td><br />
<td>63548</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMYR1<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+10: Year (ones)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92E</td><br />
<td>63790</td><br />
<td>F83D</td><br />
<td>63549</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMYR2<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+11: Year (tens)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92F</td><br />
<td>63791</td><br />
<td>F83E</td><br />
<td>63550</td><br />
<td>F21F</td><br />
<td>61983</td><br />
<td>TIMCNT<br />
</td><br />
<td>CSRITP</td><br />
<td><br />
Counter (M200: 150 to 1 M100: 125 to 1)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F930</td><br />
<td>63792</td><br />
<td>F83F</td><br />
<td>63551</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMCN2<br />
</td><br />
<td></td><br />
<td><br />
Counter (12 to 1)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F931</td><br />
<td>63793</td><br />
<td>F840</td><br />
<td>63552</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMINT<br />
</td><br />
<td></td><br />
<td><br />
Power</td><br />
<td>down<br />
countdown value</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63794</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61986</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F99A</td><br />
<td>63898</td><br />
<td>F870</td><br />
<td>63600</td><br />
<td>F295</td><br />
<td>62101</td><br />
<td>NULDIR<br />
</td><br />
<td></td><br />
<td><br />
Address of non</td><br />
<td>saved<br />
BASIC program</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F9A5</td><br />
<td>63909</td><br />
<td>F87B</td><br />
<td>63611</td><br />
<td>0000</td><br />
<td></td><br />
<td>SCRDIR<br />
</td><br />
<td></td><br />
<td><br />
Start of paste buffer</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63919</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62122</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64173</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61194</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FABA</td><br />
<td>64186</td><br />
<td>F9AC</td><br />
<td>63916</td><br />
<td>0000</td><br />
<td></td><br />
<td>LSTLIN<br />
</td><br />
<td></td><br />
<td><br />
Address of last BASIC line listed (decrunched)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FABE</td><br />
<td>64190</td><br />
<td>F9AE</td><br />
<td>63918</td><br />
<td>0000</td><br />
<td></td><br />
<td>STAKSV<br />
</td><br />
<td></td><br />
<td><br />
Save area for stack pointer during power off state</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAC0</td><br />
<td>64192</td><br />
<td>F9B0</td><br />
<td>63920</td><br />
<td>F4EE</td><br />
<td>62702</td><br />
<td>BOTTOM<br />
</td><br />
<td>LOMEM</td><br />
<td><br />
Lowest RAM address in system (8000H for 32K system)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64194</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62704</td><br />
<td></td><br />
<td>CAPTUR</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64195</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62705</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64198</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62708</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAC9</td><br />
<td>64201</td><br />
<td>F9BC</td><br />
<td>63932</td><br />
<td>0000</td><br />
<td></td><br />
<td>OFSSAV<br />
</td><br />
<td></td><br />
<td><br />
Offset save for hook dispatch</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64206</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62715</td><br />
<td></td><br />
<td>TOP</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAD0</td><br />
<td>64208</td><br />
<td>F9C2</td><br />
<td>63938</td><br />
<td>F4FD</td><br />
<td>62717</td><br />
<td>BINLEN<br />
</td><br />
<td>LEN</td><br />
<td><br />
Length of last program loaded or saved on tape</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64210</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62719</td><br />
<td></td><br />
<td>EXE</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64216</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62725</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FADA</td><br />
<td>64218</td><br />
<td>F9CC</td><br />
<td>63948</td><br />
<td>F507</td><br />
<td>62727</td><br />
<td>H.CLEAR<br />
</td><br />
<td></td><br />
<td><br />
CLEAR hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FADC</td><br />
<td>64220</td><br />
<td>F9CE</td><br />
<td>63950</td><br />
<td>F509</td><br />
<td>62729</td><br />
<td>H.MAXRAM<br />
</td><br />
<td></td><br />
<td><br />
MAXRAM hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FADE</td><br />
<td>64222</td><br />
<td>F9D0</td><br />
<td>63952</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.CHGET1<br />
</td><br />
<td></td><br />
<td><br />
CHGET hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAE0</td><br />
<td>64224</td><br />
<td>F9D2</td><br />
<td>63954</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.CHSNS<br />
</td><br />
<td></td><br />
<td><br />
CHSNS hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAE2</td><br />
<td>64226</td><br />
<td>F9D4</td><br />
<td>63956</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.CHPUT<br />
</td><br />
<td></td><br />
<td><br />
LCD hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAF0</td><br />
<td>64240</td><br />
<td>F9E4</td><br />
<td>63972</td><br />
<td>F51F</td><br />
<td>62751</td><br />
<td>H.SAVE<br />
</td><br />
<td></td><br />
<td><br />
SAVE hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAF4</td><br />
<td>64244</td><br />
<td>F9E8</td><br />
<td>63976</td><br />
<td>F523</td><br />
<td>62755</td><br />
<td>H.MERGE<br />
</td><br />
<td></td><br />
<td><br />
LOAD/MERGE hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAF6</td><br />
<td>64246</td><br />
<td>F9EA</td><br />
<td>63978</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.NULOPN<br />
</td><br />
<td></td><br />
<td><br />
OPEN hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAFC</td><br />
<td>64252</td><br />
<td>F9F0</td><br />
<td>63984</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.BINSAV<br />
</td><br />
<td></td><br />
<td><br />
SAVE(NM ERROR) hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAFE</td><br />
<td>64254</td><br />
<td>F9F2</td><br />
<td>63986</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.BINLOD<br />
</td><br />
<td></td><br />
<td><br />
LOAD(NM ERROR) hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB00</td><br />
<td>64256</td><br />
<td>F9F4</td><br />
<td>63988</td><br />
<td>F52F</td><br />
<td>62767</td><br />
<td>H.EOF<br />
</td><br />
<td></td><br />
<td><br />
EOF hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64264</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62775</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64266</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62777</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB10</td><br />
<td>64272</td><br />
<td>FA26</td><br />
<td>64038</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.UPLD<br />
</td><br />
<td></td><br />
<td><br />
TELCOM(TERM</td><br />
<td>UP)<br />
hook (retadr)</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB12</td><br />
<td>64274</td><br />
<td>FA28</td><br />
<td>64040</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.TEXT<br />
</td><br />
<td></td><br />
<td><br />
TEXT hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB14</td><br />
<td>64276</td><br />
<td>FA2A</td><br />
<td>64042</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.WIDTHS<br />
</td><br />
<td></td><br />
<td><br />
WIDTH hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB18</td><br />
<td>64280</td><br />
<td>FA2C</td><br />
<td>64044</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.SCREEN<br />
</td><br />
<td></td><br />
<td><br />
SCREEN hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB1A</td><br />
<td>64282</td><br />
<td>FA2E</td><br />
<td>64046</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.TVOPN<br />
</td><br />
<td></td><br />
<td><br />
CRT open hook</td><br />
<td>(fcerr)</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB1E</td><br />
<td>64286</td><br />
<td>FA32</td><br />
<td>64050</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.TVOUT<br />
</td><br />
<td></td><br />
<td><br />
CRT put hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB20</td><br />
<td>64288</td><br />
<td>FA38</td><br />
<td>64056</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.WAOPN<br />
</td><br />
<td></td><br />
<td><br />
WAND open hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB22</td><br />
<td>64290</td><br />
<td>FA3A</td><br />
<td>64058</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.WACLS<br />
</td><br />
<td></td><br />
<td><br />
WAND close hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB24</td><br />
<td>64292</td><br />
<td>FA3C</td><br />
<td>64060</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.WAINP<br />
</td><br />
<td></td><br />
<td><br />
WAND get hook</td><br />
<td>(fcerr)</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB26</td><br />
<td>64294</td><br />
<td>FA3E</td><br />
<td>64062</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.WABCK<br />
</td><br />
<td></td><br />
<td><br />
WAND other hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB28</td><br />
<td>64296</td><br />
<td>FA40</td><br />
<td>64064</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.LOF<br />
</td><br />
<td></td><br />
<td><br />
LOF hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB2A</td><br />
<td>64298</td><br />
<td>FA42</td><br />
<td>64066</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.LOC<br />
</td><br />
<td></td><br />
<td><br />
LOC hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB2C</td><br />
<td>64300</td><br />
<td>FA44</td><br />
<td>64068</td><br />
<td>F55D</td><br />
<td>62813</td><br />
<td>H.LFILES<br />
</td><br />
<td></td><br />
<td><br />
LFILES hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB2E</td><br />
<td>64302</td><br />
<td>FA46</td><br />
<td>64070</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.DSKI$<br />
</td><br />
<td></td><br />
<td><br />
DSKI$ hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB30</td><br />
<td>64304</td><br />
<td>FA48</td><br />
<td>64072</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.DSKO$<br />
</td><br />
<td></td><br />
<td><br />
DSK0$ hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB32</td><br />
<td>64306</td><br />
<td>FA4A</td><br />
<td>64074</td><br />
<td>F563</td><br />
<td>62819</td><br />
<td>H.KILL<br />
</td><br />
<td></td><br />
<td><br />
KILL hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB34</td><br />
<td>64308</td><br />
<td>FA4C</td><br />
<td>64076</td><br />
<td>F565</td><br />
<td>62821</td><br />
<td>H.NAME</a><br />
</td><br />
<td></td><br />
<td><br />
NAME hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB36</td><br />
<td>64310</td><br />
<td>FA4E</td><br />
<td>64078</td><br />
<td>F567</td><br />
<td>62823</td><br />
<td>H.MSAVE<br />
</td><br />
<td></td><br />
<td><br />
SAVEM hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB38</td><br />
<td>64312</td><br />
<td>FA50</td><br />
<td>64080</td><br />
<td>F569</td><br />
<td>62825</td><br />
<td>H.MLOAD<br />
</td><br />
<td></td><br />
<td><br />
LOADM/RUNM hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB62</td><br />
<td>64354</td><br />
<td>FA88</td><br />
<td>64136</td><br />
<td>0000</td><br />
<td></td><br />
<td>TXTEND<br />
</td><br />
<td></td><br />
<td><br />
Pointer to end of .DO storage</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB65</td><br />
<td>64357</td><br />
<td>FA8B</td><br />
<td>64139</td><br />
<td>0000</td><br />
<td></td><br />
<td>VALTYP<br />
</td><br />
<td></td><br />
<td><br />
Type of last variable used </td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB66</td><br />
<td>64358</td><br />
<td>FA8C</td><br />
<td>64140</td><br />
<td>0000</td><br />
<td></td><br />
<td>DORES<br />
</td><br />
<td></td><br />
<td><br />
Flag to tokenize reserved words in strings</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB69</td><br />
<td>64361</td><br />
<td>FABF</td><br />
<td>64191</td><br />
<td>0000</td><br />
<td></td><br />
<td>FRETOP<br />
</td><br />
<td></td><br />
<td><br />
Pointer to next free location in string buffer</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB8E</td><br />
<td>64398</td><br />
<td>FAC1</td><br />
<td>64193</td><br />
<td>0000</td><br />
<td></td><br />
<td>TEMP3<br />
</td><br />
<td></td><br />
<td><br />
Multipurpose string register</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB94</td><br />
<td>64404</td><br />
<td>FAC7</td><br />
<td>64199</td><br />
<td>0000</td><br />
<td></td><br />
<td>DATLIN<br />
</td><br />
<td></td><br />
<td><br />
Line number of active DATA statement</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB9B</td><br />
<td>64411</td><br />
<td>FACE</td><br />
<td>64206</td><br />
<td>0000</td><br />
<td></td><br />
<td>SAVTXT<br />
</td><br />
<td></td><br />
<td><br />
Save for TXTPNT (current basic line/ used by RESUME)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB9D</td><br />
<td>64413</td><br />
<td>FAD0</td><br />
<td>64208</td><br />
<td>F650</td><br />
<td>63056</td><br />
<td>SAVSTK<br />
</td><br />
<td>STKVAL</td><br />
<td><br />
Save for stack pointer (used by RESUME)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB9F</td><br />
<td>64415</td><br />
<td>FAD2</td><br />
<td>64210</td><br />
<td>0000</td><br />
<td></td><br />
<td>ERRLIN<br />
</td><br />
<td></td><br />
<td><br />
Line number of last Basic error</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBA1</td><br />
<td>64417</td><br />
<td>FAD4</td><br />
<td>64212</td><br />
<td>0000</td><br />
<td></td><br />
<td>DOT<br />
</td><br />
<td></td><br />
<td><br />
Most recent entered/ listed/ or edited line</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBA3</td><br />
<td>64419</td><br />
<td>FAD6</td><br />
<td>64214</td><br />
<td>0000</td><br />
<td></td><br />
<td>ERRTXT<br />
</td><br />
<td></td><br />
<td><br />
Points to line where error occurred</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBA5</td><br />
<td>64421</td><br />
<td>FAD8</td><br />
<td>64216</td><br />
<td>0000</td><br />
<td></td><br />
<td>ONELIN<br />
</td><br />
<td></td><br />
<td><br />
Address of "ON ERROR GOTO" line</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBA7</td><br />
<td>64423</td><br />
<td>FADA</td><br />
<td>64218</td><br />
<td>0000</td><br />
<td></td><br />
<td>ONEFLG<br />
</td><br />
<td></td><br />
<td><br />
Error status flag (0=no error/ nz=in error routine)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBA8</td><br />
<td>64424</td><br />
<td>FADB</td><br />
<td>64219</td><br />
<td>0000</td><br />
<td></td><br />
<td>TEMP2<br />
</td><br />
<td></td><br />
<td><br />
Formula evaluator temporary storage</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBAA</td><br />
<td>64426</td><br />
<td>FADD</td><br />
<td>64221</td><br />
<td>0000</td><br />
<td></td><br />
<td>OLDLIN<br />
</td><br />
<td></td><br />
<td><br />
Line number where Break occurred</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBAC</td><br />
<td>64428</td><br />
<td>FADF</td><br />
<td>64223</td><br />
<td>0000</td><br />
<td></td><br />
<td>OLDTXT<br />
</td><br />
<td></td><br />
<td><br />
Next line to execute</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBAE</td><br />
<td>64430</td><br />
<td>FAE1</td><br />
<td>64225</td><br />
<td>F661</td><br />
<td>63073</td><br />
<td>ASCTAB<br />
</td><br />
<td>DOAREA</td><br />
<td><br />
Pointer to start of ASCII files</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBB0</td><br />
<td>64432</td><br />
<td>FAE3</td><br />
<td>64227</td><br />
<td>F663</td><br />
<td>63075</td><br />
<td>BINTAB<br />
</td><br />
<td></td><br />
<td><br />
Pointer to start of binary files</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBB2</td><br />
<td>64434</td><br />
<td>FAE5</td><br />
<td>64229</td><br />
<td>F665</td><br />
<td>63077</td><br />
<td>VARTAB<br />
</td><br />
<td>VARSPC</td><br />
<td><br />
Pointer to start of simple variable space</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBB4</td><br />
<td>64436</td><br />
<td>FAE7</td><br />
<td>64231</td><br />
<td>F667</td><br />
<td>63079</td><br />
<td>ARYTAB<br />
</td><br />
<td>VAREND</td><br />
<td><br />
Pointer to start of array table</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBB6</td><br />
<td>64438</td><br />
<td>FAE9</td><br />
<td>64233</td><br />
<td>F669</td><br />
<td>63081</td><br />
<td>STREND<br />
</td><br />
<td>FRESPC</td><br />
<td><br />
End of storage/ first free byte</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBB8</td><br />
<td>64440</td><br />
<td>FAEB</td><br />
<td>64235</td><br />
<td>0000</td><br />
<td></td><br />
<td>DATPTR<br />
</td><br />
<td></td><br />
<td><br />
Pointer to current data item (message line)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBBA</td><br />
<td>64442</td><br />
<td>FAED</td><br />
<td>64237</td><br />
<td>0000</td><br />
<td></td><br />
<td>DEFTBL<br />
</td><br />
<td></td><br />
<td><br />
Variable type table </td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBE8</td><br />
<td>64488</td><br />
<td></td><br />
<td></td><br />
<td>F69B</td><br />
<td>63131</td><br />
<td></td><br />
<td></td><br />
<td>:number<br />
string stored here when 18187 is called</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC18</td><br />
<td>64536</td><br />
<td>FB24</td><br />
<td>64292</td><br />
<td>0000</td><br />
<td></td><br />
<td>DFACLO<br />
</td><br />
<td></td><br />
<td><br />
Floating Point Accumulator (FAC1)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC69</td><br />
<td>64617</td><br />
<td>FB2E</td><br />
<td>64302</td><br />
<td>0000</td><br />
<td></td><br />
<td>ARGLO<br />
</td><br />
<td></td><br />
<td><br />
Second FAC (FAC2)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC7A</td><br />
<td>64634</td><br />
<td></td><br />
<td></td><br />
<td>F72D</td><br />
<td>63277</td><br />
<td></td><br />
<td>SEEDRD</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC82</td><br />
<td>64642</td><br />
<td>FB62</td><br />
<td>64354</td><br />
<td>0000</td><br />
<td></td><br />
<td>MAXFIL<br />
</td><br />
<td></td><br />
<td><br />
Current maximum file number (read only)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC83</td><br />
<td>64643</td><br />
<td>FB63</td><br />
<td>64355</td><br />
<td>0000</td><br />
<td></td><br />
<td>FILTAB<br />
</td><br />
<td></td><br />
<td><br />
Pointer to basic file table</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC8C</td><br />
<td>64652</td><br />
<td></td><br />
<td></td><br />
<td>F73F</td><br />
<td>63295</td><br />
<td></td><br />
<td>DEVOUT</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC92</td><br />
<td>64658</td><br />
<td></td><br />
<td></td><br />
<td>F745</td><br />
<td>63301</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC93</td><br />
<td>64659</td><br />
<td>FB78</td><br />
<td>64376</td><br />
<td>F746</td><br />
<td>63302</td><br />
<td>FILNAM<br />
</td><br />
<td>FLNM</td><br />
<td><br />
9 byte area for setting file names for search or open</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC99</td><br />
<td>64665</td><br />
<td></td><br />
<td></td><br />
<td>F74C</td><br />
<td>63308</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC9C</td><br />
<td>64668</td><br />
<td>FB81</td><br />
<td>64385</td><br />
<td>F74F</td><br />
<td>63311</td><br />
<td>FILNM2<br />
</td><br />
<td></td><br />
<td><br />
Second file name/ same format as above. Used by NAMEB</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FCA7</td><br />
<td>64679</td><br />
<td></td><br />
<td></td><br />
<td>F75A</td><br />
<td>63322</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FCC0</td><br />
<td>64704</td><br />
<td>FBC0</td><br />
<td>64448</td><br />
<td>F7B0</td><br />
<td>63408</td><br />
<td>LINE0<br />
</td><br />
<td>ALTLCD</td><br />
<td><br />
Screen buffer 0 (Previous page for Telcom)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDA1</td><br />
<td>64929</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td bgcolor="#c0c0c0" >63433</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDD5</td><br />
<td>64981</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td bgcolor="#c0c0c0" >63701</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDD7</td><br />
<td>64983</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td bgcolor="#c0c0c0" >63537</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDEE</td><br />
<td>65006</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td bgcolor="#c0c0c0" >63560</td><br />
<td>MENCNT</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDEF</td><br />
<td>65007</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td bgcolor="#c0c0c0" >63561</td><br />
<td>FA2F</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDFF</td><br />
<td>65023</td><br />
<td>FCFF</td><br />
<td>64767</td><br />
<td>FA2F</td><br />
<td>64047</td><br />
<td>LINE0E<br />
</td><br />
<td>end<br />
ALTLCD</td><br />
<td><br />
End of Screen buffer 0</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FE00</td><br />
<td>65024</td><br />
<td>FD00</td><br />
<td>64768</td><br />
<td>FA30</td><br />
<td>64048</td><br />
<td>LINE1<br />
</td><br />
<td>LCD</td><br />
<td><br />
Screen buffer 1 (LCD memory)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF3F</td><br />
<td>65343</td><br />
<td>FE3F</td><br />
<td>65087</td><br />
<td>FCAF</td><br />
<td>64687</td><br />
<td>LINE1E<br />
</td><br />
<td>end<br />
LCD</td><br />
<td><br />
End of Screen Buffer 1</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF40</td><br />
<td>65344</td><br />
<td>FE40</td><br />
<td>65088</td><br />
<td>FCF2</td><br />
<td>64754</td><br />
<td>XONOFF<br />
</td><br />
<td></td><br />
<td><br />
Flag (00) means XOF has not been received</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF41</td><br />
<td>65345</td><br />
<td>FE41</td><br />
<td>65089</td><br />
<td>0000</td><br />
<td></td><br />
<td>INHDSP<br />
</td><br />
<td></td><br />
<td><br />
Flag (FF) XOF received </td><br />
<td><br />
so freeze display</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF42</td><br />
<td>65346</td><br />
<td>FE42</td><br />
<td>65090</td><br />
<td>0000</td><br />
<td></td><br />
<td>INHBIT<br />
</td><br />
<td></td><br />
<td><br />
Flag (0) XON/XOF disabled</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF46</td><br />
<td>65350</td><br />
<td>FEC4</td><br />
<td>65220</td><br />
<td>0000</td><br />
<td></td><br />
<td>COMBUF<br />
</td><br />
<td></td><br />
<td><br />
Data buffer for COM:</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF86</td><br />
<td>65414</td><br />
<td>FE45</td><br />
<td>65093</td><br />
<td>0000</td><br />
<td></td><br />
<td>CMPNT<br />
</td><br />
<td></td><br />
<td><br />
Number of bytes waiting in serial buffer</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF87</td><br />
<td>65415</td><br />
<td>FE46</td><br />
<td>65094</td><br />
<td>0000</td><br />
<td></td><br />
<td>RDADDR<br />
</td><br />
<td></td><br />
<td><br />
Read pointer for COMBUF</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF88</td><br />
<td>65416</td><br />
<td>FE47</td><br />
<td>65095</td><br />
<td>0000</td><br />
<td></td><br />
<td>WTADDR<br />
</td><br />
<td></td><br />
<td><br />
Write pointer for COMBUF</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF89</td><br />
<td>65417</td><br />
<td>FE48</td><br />
<td>65096</td><br />
<td>0000</td><br />
<td></td><br />
<td>CMERR<br />
</td><br />
<td></td><br />
<td><br />
Number of characters in COMBUF when there was an error</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF8A</td><br />
<td>65418</td><br />
<td>FE49</td><br />
<td>65097</td><br />
<td>0000</td><br />
<td></td><br />
<td>CMFLG<br />
</td><br />
<td></td><br />
<td><br />
Flag (0)=XOF has been sent</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF8B</td><br />
<td>65419</td><br />
<td>FE4A</td><br />
<td>65098</td><br />
<td>0000</td><br />
<td></td><br />
<td>BAUDRT<br />
</td><br />
<td></td><br />
<td><br />
Baud rate table entry address</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF8F</td><br />
<td>65423</td><br />
<td>FE4D</td><br />
<td>65101</td><br />
<td>FD03</td><br />
<td>64771</td><br />
<td>KYSCNX<br />
</td><br />
<td>KBSITP</td><br />
<td><br />
Flag to determine if key scan should be done</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF91</td><br />
<td>65425</td><br />
<td>FE4F</td><br />
<td>65103</td><br />
<td>0000</td><br />
<td></td><br />
<td>KYDATA<br />
</td><br />
<td></td><br />
<td><br />
Keyboard matrix read</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF99</td><br />
<td>65433</td><br />
<td>FE60</td><br />
<td>65120</td><br />
<td>FD0D</td><br />
<td>64781</td><br />
<td>KYMODE<br />
</td><br />
<td>PKGFF</td><br />
<td><br />
Keyboard mode storage (brk//caps/num/cod/gph/ctl/<wbr>sft)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA3</td><br />
<td>65443</td><br />
<td>FE61</td><br />
<td>65121</td><br />
<td>0000</td><br />
<td></td><br />
<td>KYHOW<br />
</td><br />
<td></td><br />
<td><br />
Mode storage of last keypress for repeat</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA2</td><br />
<td>65442</td><br />
<td></td><br />
<td></td><br />
<td>FD16</td><br />
<td>64790</td><br />
<td>KEYGPC</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA4</td><br />
<td>65444</td><br />
<td>FE62</td><br />
<td>65122</td><br />
<td>FD18</td><br />
<td>64792</td><br />
<td>KYREPT<br />
</td><br />
<td></td><br />
<td><br />
Wait count for repeat</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA5</td><br />
<td>65445</td><br />
<td></td><br />
<td></td><br />
<td>FD19</td><br />
<td>64793</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA7</td><br />
<td>65447</td><br />
<td></td><br />
<td></td><br />
<td>FD1B</td><br />
<td>64795</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA8</td><br />
<td>65448</td><br />
<td></td><br />
<td></td><br />
<td>FD1C</td><br />
<td>64796</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFAA</td><br />
<td>65450</td><br />
<td>FE68</td><br />
<td>65128</td><br />
<td>FD1E</td><br />
<td>64798</td><br />
<td>KYBCNT<br />
</td><br />
<td></td><br />
<td><br />
Number of characters in keyboard queue (KYRDBF)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFAB</td><br />
<td>65451</td><br />
<td>FE69</td><br />
<td>65129</td><br />
<td>FD1F</td><br />
<td>64799</td><br />
<td>KYRDBF<br />
</td><br />
<td></td><br />
<td><br />
Keyboard buffer</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFEB</td><br />
<td>65515</td><br />
<td>FEA9</td><br />
<td>65193</td><br />
<td>0000</td><br />
<td></td><br />
<td>BRKCHR<br />
</td><br />
<td></td><br />
<td><br />
0 until break is pressed. 03=Break</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFEC</td><br />
<td>65516</td><br />
<td>FEB1</td><br />
<td>65201</td><br />
<td>0000</td><br />
<td></td><br />
<td>WORK1<br />
</td><br />
<td></td><br />
<td><br />
6 byte buffer holding pattern under the cursor</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFF3</td><br />
<td>65523</td><br />
<td>FEB8</td><br />
<td>65208</td><br />
<td>FEA1</td><br />
<td>65185</td><br />
<td>CSRCNT<br />
</td><br />
<td></td><br />
<td><br />
Time until next cursor blink</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFF4</td><br />
<td>65524</td><br />
<td>FEB9</td><br />
<td>65209</td><br />
<td>0000</td><br />
<td></td><br />
<td>LCTEY<br />
</td><br />
<td></td><br />
<td><br />
LCD row 1</td><br />
<td>8<br />
of character position to be printed</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFF5</td><br />
<td>65525</td><br />
<td>FEBA</td><br />
<td>65210</td><br />
<td>0000</td><br />
<td></td><br />
<td>LCTEX<br />
</td><br />
<td></td><br />
<td><br />
LCD column 1</td><br />
<td>40<br />
of character position to be printed</td><br />
<td></td><br />
</tr><br />
<br />
</table><br />
<br />
[[Category:Model T Developer Reference]] [[Category:Model T Cross Map]]</div>Ronwiesenhttps://bitchin100.com/wiki/index.php?title=Model_T_Cross_Map_RAM_Variables&diff=2556Model T Cross Map RAM Variables2012-08-14T11:45:42Z<p>Ronwiesen: CSRITP is modulo 150 in M200, and is modulo 125 in M100/M102</p>
<hr />
<div><table border="1"><br />
<br />
<tr valign="bottom"><br />
<br />
<td colspan="2" align="center">M100 Address</td><br />
<td colspan="2" align="center">PC8201 address</td><br />
<td colspan="2" align="center">T200 address</td><br />
<td>Name1</td><br />
<td>Name2</td><br />
<td>Description</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td align="center" >HEX</td><br />
<td align="center" >DEC</td><br />
<td align="center" >HEX</td><br />
<td align="center" >DEC</td><br />
<td align="center" >HEX</td><br />
<td align="center" >DEC</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<br />
<tr valign="bottom"><br />
<br />
<td align="right" >62960</td><br />
<td></td><br />
<td></td><br />
<td>EEB0</td><br />
<td align="right" >61104</td><br />
<td></td><br />
<td>MAXRAM</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F5F4</td><br />
<td>62964</td><br />
<td>F384</td><br />
<td>62340</td><br />
<td>0000</td><br />
<td></td><br />
<td>HIMEM<br />
</td><br />
<td></td><br />
<td><br />
Highest memory available to BASIC (clear value)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F5F9</td><br />
<td>62969</td><br />
<td>F389</td><br />
<td>62345</td><br />
<td>0000</td><br />
<td></td><br />
<td>INTRPT<br />
</td><br />
<td></td><br />
<td><br />
Rst 5.5 hook normally barcode reader</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F5FC</td><br />
<td>62972</td><br />
<td>F38C</td><br />
<td>62348</td><br />
<td>0000</td><br />
<td></td><br />
<td>R65HOK<br />
</td><br />
<td></td><br />
<td><br />
Rst 6.5 hook normally UART (COM)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F5FF</td><br />
<td>62975</td><br />
<td>F38F</td><br />
<td>62351</td><br />
<td>EEC2</td><br />
<td>61122</td><br />
<td>R75HOK<br />
</td><br />
<td>RS75HK</td><br />
<td><br />
Rst 7.5 hook normally from timer</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F624</td><br />
<td>63012</td><br />
<td>F3B9</td><br />
<td>62393</td><br />
<td>0000</td><br />
<td></td><br />
<td>BRUN<br />
</td><br />
<td></td><br />
<td><br />
This executes second ROM</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F625</td><br />
<td>63013</td><br />
<td>F3BA</td><br />
<td>62394</td><br />
<td>0000</td><br />
<td></td><br />
<td>BRUN2<br />
</td><br />
<td></td><br />
<td><br />
This executes second ROM</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F62A</td><br />
<td>63018</td><br />
<td>F3BF</td><br />
<td>62399</td><br />
<td>0000</td><br />
<td></td><br />
<td>ROMFLG<br />
</td><br />
<td></td><br />
<td><br />
Option ROM flag</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F62B</td><br />
<td>63019</td><br />
<td></td><br />
<td></td><br />
<td>EEF4</td><br />
<td>61172</td><br />
<td></td><br />
<td>CALPPS</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63020</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61177</td><br />
<td></td><br />
<td>FNKMAC</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F639</td><br />
<td>63033</td><br />
<td>F3E5</td><br />
<td>62437</td><br />
<td>EF06</td><br />
<td>61190</td><br />
<td>CSRY<br />
</td><br />
<td></td><br />
<td><br />
Current cursor Y position</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F63A</td><br />
<td>63034</td><br />
<td>F3E6</td><br />
<td>62438</td><br />
<td>EF07</td><br />
<td>61191</td><br />
<td>CSRX<br />
</td><br />
<td></td><br />
<td><br />
Current cursor X positon</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F63B</td><br />
<td>63035</td><br />
<td>F3E7</td><br />
<td>62439</td><br />
<td>0000</td><br />
<td></td><br />
<td>LINCNT<br />
</td><br />
<td></td><br />
<td><br />
Console height</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F63C</td><br />
<td>63036</td><br />
<td>F3E8</td><br />
<td>62440</td><br />
<td>0000</td><br />
<td></td><br />
<td>LINWDT<br />
</td><br />
<td></td><br />
<td><br />
Console width</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63037</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61194</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F63E</td><br />
<td>63038</td><br />
<td>F3EA</td><br />
<td>62442</td><br />
<td>EF0B</td><br />
<td>61195</td><br />
<td>LOKFLG<br />
</td><br />
<td>SCLFLG</td><br />
<td><br />
Flag 00 = screen scrolls</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F640</td><br />
<td>63040</td><br />
<td>F3EC</td><br />
<td>62444</td><br />
<td>0000</td><br />
<td></td><br />
<td>LCDCSY<br />
</td><br />
<td></td><br />
<td><br />
Cursor row (1-8)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F641</td><br />
<td>63041</td><br />
<td>F3ED</td><br />
<td>62445</td><br />
<td>0000</td><br />
<td></td><br />
<td>LCDCSX<br />
</td><br />
<td></td><br />
<td><br />
Cursor column (1-40)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F646</td><br />
<td>63046</td><br />
<td>F3F2</td><br />
<td>62450</td><br />
<td>0000</td><br />
<td></td><br />
<td>ESCCNT<br />
</td><br />
<td></td><br />
<td><br />
ESC mode flag (0 normal/ non-zero escape sequence)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F648</td><br />
<td>63048</td><br />
<td>F3F4</td><br />
<td>62452</td><br />
<td>0000</td><br />
<td></td><br />
<td>REVFLG<br />
</td><br />
<td></td><br />
<td><br />
Reverse video flag (FF=reverse/ 00=normal)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F64E</td><br />
<td>63054</td><br />
<td>F3FA</td><br />
<td>62458</td><br />
<td>0000</td><br />
<td></td><br />
<td>PRVCOO<br />
</td><br />
<td></td><br />
<td><br />
X coordinate of last graphic point plotted</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F64F</td><br />
<td>63055</td><br />
<td>F3FB</td><br />
<td>62459</td><br />
<td>0000</td><br />
<td></td><br />
<td>PRVCO2<br />
</td><br />
<td></td><br />
<td><br />
Y coordinate of last graphic point plotted *</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F650</td><br />
<td>63056</td><br />
<td>F3FC</td><br />
<td>62460</td><br />
<td>EF32</td><br />
<td>61234</td><br />
<td>FNKMOD<br />
</td><br />
<td></td><br />
<td><br />
Function key mode/ BIT 7=in TEXT; BIT 6=in TELCOM</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63058</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61236</td><br />
<td></td><br />
<td>ERRTRP</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63062</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61239</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F658</td><br />
<td>63064</td><br />
<td>F403</td><br />
<td>62467</td><br />
<td>EF39</td><br />
<td>61241</td><br />
<td>FULDUP<br />
</td><br />
<td>DUPFLG</td><br />
<td><br />
Full/half duplex switch (FF=full duplex/ 00=half duplex)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F65A</td><br />
<td>63066</td><br />
<td>F405</td><br />
<td>62469</td><br />
<td>EF3B</td><br />
<td>61243</td><br />
<td>LFFLG<br />
</td><br />
<td></td><br />
<td><br />
Auto linefeed on RS232 output switch (non zero send<br />
line feeds with each carriage return)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F65B</td><br />
<td>63067</td><br />
<td>F406</td><br />
<td>62470</td><br />
<td>EF3C</td><br />
<td>61244</td><br />
<td>SERMOD<br />
</td><br />
<td></td><br />
<td><br />
Serial initialization string</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F660</td><br />
<td>63072</td><br />
<td>F40C</td><br />
<td>62476</td><br />
<td>0000</td><br />
<td></td><br />
<td>TMPHOK<br />
</td><br />
<td></td><br />
<td><br />
Temporary hook</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F661</td><br />
<td>63073</td><br />
<td>F40D</td><br />
<td>62477</td><br />
<td>0000</td><br />
<td></td><br />
<td>TMPAD1<br />
</td><br />
<td></td><br />
<td><br />
Temporary hook address</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F663</td><br />
<td>63075</td><br />
<td>F40F</td><br />
<td>62479</td><br />
<td>0000</td><br />
<td></td><br />
<td>TMPAD2<br />
</td><br />
<td></td><br />
<td><br />
Temporary hook address 2</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F665</td><br />
<td>63077</td><br />
<td>F411</td><br />
<td>62481</td><br />
<td>0000</td><br />
<td></td><br />
<td>TMPAD3<br />
</td><br />
<td></td><br />
<td><br />
Temporary hook address 3</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F672</td><br />
<td>63090</td><br />
<td>F453</td><br />
<td>62547</td><br />
<td>0000</td><br />
<td></td><br />
<td>ERRFLG<br />
</td><br />
<td></td><br />
<td><br />
Error code of last error</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F674</td><br />
<td>63092</td><br />
<td>F455</td><br />
<td>62549</td><br />
<td>0000</td><br />
<td></td><br />
<td>LPTPOS<br />
</td><br />
<td></td><br />
<td><br />
Line printer head position (based from zero)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F675</td><br />
<td>63093</td><br />
<td>F456</td><br />
<td>62550</td><br />
<td>0000</td><br />
<td></td><br />
<td>PRTFLG<br />
</td><br />
<td></td><br />
<td><br />
Flag FF=send output to lpt</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F67A</td><br />
<td>63098</td><br />
<td>F45B</td><br />
<td>62555</td><br />
<td>EF65</td><br />
<td>61285</td><br />
<td>CURLIN<br />
</td><br />
<td></td><br />
<td><br />
Current Basic executing line number</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63099</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61286</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F67C</td><br />
<td>63100</td><br />
<td>F45D</td><br />
<td>62557</td><br />
<td>EF67</td><br />
<td>61287</td><br />
<td>TXTTAB<br />
</td><br />
<td>CURBAS</td><br />
<td><br />
Pointer to start of Basic programs</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63105</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61292</td><br />
<td></td><br />
<td>INPBFR</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F685</td><br />
<td>63109</td><br />
<td>F462</td><br />
<td>62562</td><br />
<td>EF70</td><br />
<td>61296</td><br />
<td>KBUF<br />
</td><br />
<td>INPBUF</td><br />
<td><br />
Start of keyboard crunch buffer for line input routine</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F788</td><br />
<td>63368</td><br />
<td>F6A4</td><br />
<td>63140</td><br />
<td>0000</td><br />
<td></td><br />
<td>TTYPOS<br />
</td><br />
<td></td><br />
<td><br />
Current TTY (horizontal cursor) position (0-39)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F789</td><br />
<td>63369</td><br />
<td>F6A5</td><br />
<td>63141</td><br />
<td>F074</td><br />
<td>61556</td><br />
<td>FNKSTR<br />
</td><br />
<td>KEYDSP</td><br />
<td><br />
Function key definition area</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63449</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61636</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F80A</td><br />
<td>63498</td><br />
<td>F7E6</td><br />
<td>63462</td><br />
<td>0000</td><br />
<td></td><br />
<td>BASFNK<br />
</td><br />
<td></td><br />
<td><br />
BASIC's function keys</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F923</td><br />
<td>63779</td><br />
<td>F832</td><br />
<td>63538</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMSC1<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF: Seconds (ones)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F924</td><br />
<td>63780</td><br />
<td>F833</td><br />
<td>63539</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMSC2<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+1: Seconds (tens)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F925</td><br />
<td>63781</td><br />
<td>F834</td><br />
<td>63540</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMMN1<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+2: Minutes (ones)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F926</td><br />
<td>63782</td><br />
<td>F835</td><br />
<td>63541</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMMN2<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+3: Minutes (tens)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F927</td><br />
<td>63783</td><br />
<td>F836</td><br />
<td>63542</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMHR1<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+4: Hours (ones)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F928</td><br />
<td>63784</td><br />
<td>F837</td><br />
<td>63543</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMHR2<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+5: Hours (tens)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F929</td><br />
<td>63785</td><br />
<td>F838</td><br />
<td>63544</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMDT1<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+6: Day (ones)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92A</td><br />
<td>63786</td><br />
<td>F839</td><br />
<td>63545</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMDT2<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+7: Day (tens)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92B</td><br />
<td>63787</td><br />
<td>F83A</td><br />
<td>63546</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMDAY<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+8: Day of week code (0=Sun / 1=Mon / etc..) **Not implemented?**</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92C</td><br />
<td>63788</td><br />
<td>F83B</td><br />
<td>63547</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMMON<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+9: Current month</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92D</td><br />
<td>63789</td><br />
<td>F83C</td><br />
<td>63548</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMYR1<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+10: Year (ones)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92E</td><br />
<td>63790</td><br />
<td>F83D</td><br />
<td>63549</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMYR2<br />
</td><br />
<td></td><br />
<td><br />
TIMBUF+11: Year (tens)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F92F</td><br />
<td>63791</td><br />
<td>F83E</td><br />
<td>63550</td><br />
<td>F21F</td><br />
<td>61983</td><br />
<td>TIMCNT<br />
</td><br />
<td>CSRITP</td><br />
<td><br />
Counter (M200: 150 to 1 M100: 125 to 1)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F930</td><br />
<td>63792</td><br />
<td>F83F</td><br />
<td>63551</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMCN2<br />
</td><br />
<td></td><br />
<td><br />
Counter (12 to 1)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F931</td><br />
<td>63793</td><br />
<td>F840</td><br />
<td>63552</td><br />
<td>0000</td><br />
<td></td><br />
<td>TIMINT<br />
</td><br />
<td></td><br />
<td><br />
Power</td><br />
<td>down<br />
countdown value</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63794</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61986</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F99A</td><br />
<td>63898</td><br />
<td>F870</td><br />
<td>63600</td><br />
<td>F295</td><br />
<td>62101</td><br />
<td>NULDIR<br />
</td><br />
<td></td><br />
<td><br />
Address of non</td><br />
<td>saved<br />
BASIC program</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>F9A5</td><br />
<td>63909</td><br />
<td>F87B</td><br />
<td>63611</td><br />
<td>0000</td><br />
<td></td><br />
<td>SCRDIR<br />
</td><br />
<td></td><br />
<td><br />
Start of paste buffer</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>63919</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62122</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64173</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>61194</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FABA</td><br />
<td>64186</td><br />
<td>F9AC</td><br />
<td>63916</td><br />
<td>0000</td><br />
<td></td><br />
<td>LSTLIN<br />
</td><br />
<td></td><br />
<td><br />
Address of last BASIC line listed (decrunched)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FABE</td><br />
<td>64190</td><br />
<td>F9AE</td><br />
<td>63918</td><br />
<td>0000</td><br />
<td></td><br />
<td>STAKSV<br />
</td><br />
<td></td><br />
<td><br />
Save area for stack pointer during power off state</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAC0</td><br />
<td>64192</td><br />
<td>F9B0</td><br />
<td>63920</td><br />
<td>F4EE</td><br />
<td>62702</td><br />
<td>BOTTOM<br />
</td><br />
<td>LOMEM</td><br />
<td><br />
Lowest RAM address in system (8000H for 32K system)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64194</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62704</td><br />
<td></td><br />
<td>CAPTUR</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64195</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62705</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64198</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62708</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAC9</td><br />
<td>64201</td><br />
<td>F9BC</td><br />
<td>63932</td><br />
<td>0000</td><br />
<td></td><br />
<td>OFSSAV<br />
</td><br />
<td></td><br />
<td><br />
Offset save for hook dispatch</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64206</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62715</td><br />
<td></td><br />
<td>TOP</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAD0</td><br />
<td>64208</td><br />
<td>F9C2</td><br />
<td>63938</td><br />
<td>F4FD</td><br />
<td>62717</td><br />
<td>BINLEN<br />
</td><br />
<td>LEN</td><br />
<td><br />
Length of last program loaded or saved on tape</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64210</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62719</td><br />
<td></td><br />
<td>EXE</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64216</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62725</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FADA</td><br />
<td>64218</td><br />
<td>F9CC</td><br />
<td>63948</td><br />
<td>F507</td><br />
<td>62727</td><br />
<td>H.CLEAR<br />
</td><br />
<td></td><br />
<td><br />
CLEAR hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FADC</td><br />
<td>64220</td><br />
<td>F9CE</td><br />
<td>63950</td><br />
<td>F509</td><br />
<td>62729</td><br />
<td>H.MAXRAM<br />
</td><br />
<td></td><br />
<td><br />
MAXRAM hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FADE</td><br />
<td>64222</td><br />
<td>F9D0</td><br />
<td>63952</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.CHGET1<br />
</td><br />
<td></td><br />
<td><br />
CHGET hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAE0</td><br />
<td>64224</td><br />
<td>F9D2</td><br />
<td>63954</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.CHSNS<br />
</td><br />
<td></td><br />
<td><br />
CHSNS hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAE2</td><br />
<td>64226</td><br />
<td>F9D4</td><br />
<td>63956</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.CHPUT<br />
</td><br />
<td></td><br />
<td><br />
LCD hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAF0</td><br />
<td>64240</td><br />
<td>F9E4</td><br />
<td>63972</td><br />
<td>F51F</td><br />
<td>62751</td><br />
<td>H.SAVE<br />
</td><br />
<td></td><br />
<td><br />
SAVE hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAF4</td><br />
<td>64244</td><br />
<td>F9E8</td><br />
<td>63976</td><br />
<td>F523</td><br />
<td>62755</td><br />
<td>H.MERGE<br />
</td><br />
<td></td><br />
<td><br />
LOAD/MERGE hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAF6</td><br />
<td>64246</td><br />
<td>F9EA</td><br />
<td>63978</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.NULOPN<br />
</td><br />
<td></td><br />
<td><br />
OPEN hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAFC</td><br />
<td>64252</td><br />
<td>F9F0</td><br />
<td>63984</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.BINSAV<br />
</td><br />
<td></td><br />
<td><br />
SAVE(NM ERROR) hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FAFE</td><br />
<td>64254</td><br />
<td>F9F2</td><br />
<td>63986</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.BINLOD<br />
</td><br />
<td></td><br />
<td><br />
LOAD(NM ERROR) hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB00</td><br />
<td>64256</td><br />
<td>F9F4</td><br />
<td>63988</td><br />
<td>F52F</td><br />
<td>62767</td><br />
<td>H.EOF<br />
</td><br />
<td></td><br />
<td><br />
EOF hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64264</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62775</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td></td><br />
<td>64266</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td>62777</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB10</td><br />
<td>64272</td><br />
<td>FA26</td><br />
<td>64038</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.UPLD<br />
</td><br />
<td></td><br />
<td><br />
TELCOM(TERM</td><br />
<td>UP)<br />
hook (retadr)</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB12</td><br />
<td>64274</td><br />
<td>FA28</td><br />
<td>64040</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.TEXT<br />
</td><br />
<td></td><br />
<td><br />
TEXT hook (retadr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB14</td><br />
<td>64276</td><br />
<td>FA2A</td><br />
<td>64042</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.WIDTHS<br />
</td><br />
<td></td><br />
<td><br />
WIDTH hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB18</td><br />
<td>64280</td><br />
<td>FA2C</td><br />
<td>64044</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.SCREEN<br />
</td><br />
<td></td><br />
<td><br />
SCREEN hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB1A</td><br />
<td>64282</td><br />
<td>FA2E</td><br />
<td>64046</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.TVOPN<br />
</td><br />
<td></td><br />
<td><br />
CRT open hook</td><br />
<td>(fcerr)</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB1E</td><br />
<td>64286</td><br />
<td>FA32</td><br />
<td>64050</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.TVOUT<br />
</td><br />
<td></td><br />
<td><br />
CRT put hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB20</td><br />
<td>64288</td><br />
<td>FA38</td><br />
<td>64056</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.WAOPN<br />
</td><br />
<td></td><br />
<td><br />
WAND open hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB22</td><br />
<td>64290</td><br />
<td>FA3A</td><br />
<td>64058</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.WACLS<br />
</td><br />
<td></td><br />
<td><br />
WAND close hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB24</td><br />
<td>64292</td><br />
<td>FA3C</td><br />
<td>64060</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.WAINP<br />
</td><br />
<td></td><br />
<td><br />
WAND get hook</td><br />
<td>(fcerr)</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB26</td><br />
<td>64294</td><br />
<td>FA3E</td><br />
<td>64062</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.WABCK<br />
</td><br />
<td></td><br />
<td><br />
WAND other hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB28</td><br />
<td>64296</td><br />
<td>FA40</td><br />
<td>64064</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.LOF<br />
</td><br />
<td></td><br />
<td><br />
LOF hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB2A</td><br />
<td>64298</td><br />
<td>FA42</td><br />
<td>64066</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.LOC<br />
</td><br />
<td></td><br />
<td><br />
LOC hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB2C</td><br />
<td>64300</td><br />
<td>FA44</td><br />
<td>64068</td><br />
<td>F55D</td><br />
<td>62813</td><br />
<td>H.LFILES<br />
</td><br />
<td></td><br />
<td><br />
LFILES hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB2E</td><br />
<td>64302</td><br />
<td>FA46</td><br />
<td>64070</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.DSKI$<br />
</td><br />
<td></td><br />
<td><br />
DSKI$ hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB30</td><br />
<td>64304</td><br />
<td>FA48</td><br />
<td>64072</td><br />
<td>0000</td><br />
<td></td><br />
<td>H.DSKO$<br />
</td><br />
<td></td><br />
<td><br />
DSK0$ hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB32</td><br />
<td>64306</td><br />
<td>FA4A</td><br />
<td>64074</td><br />
<td>F563</td><br />
<td>62819</td><br />
<td>H.KILL<br />
</td><br />
<td></td><br />
<td><br />
KILL hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB34</td><br />
<td>64308</td><br />
<td>FA4C</td><br />
<td>64076</td><br />
<td>F565</td><br />
<td>62821</td><br />
<td>H.NAME</a><br />
</td><br />
<td></td><br />
<td><br />
NAME hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB36</td><br />
<td>64310</td><br />
<td>FA4E</td><br />
<td>64078</td><br />
<td>F567</td><br />
<td>62823</td><br />
<td>H.MSAVE<br />
</td><br />
<td></td><br />
<td><br />
SAVEM hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB38</td><br />
<td>64312</td><br />
<td>FA50</td><br />
<td>64080</td><br />
<td>F569</td><br />
<td>62825</td><br />
<td>H.MLOAD<br />
</td><br />
<td></td><br />
<td><br />
LOADM/RUNM hook (fcerr)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB62</td><br />
<td>64354</td><br />
<td>FA88</td><br />
<td>64136</td><br />
<td>0000</td><br />
<td></td><br />
<td>TXTEND<br />
</td><br />
<td></td><br />
<td><br />
Pointer to end of .DO storage</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB65</td><br />
<td>64357</td><br />
<td>FA8B</td><br />
<td>64139</td><br />
<td>0000</td><br />
<td></td><br />
<td>VALTYP<br />
</td><br />
<td></td><br />
<td><br />
Type of last variable used </td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB66</td><br />
<td>64358</td><br />
<td>FA8C</td><br />
<td>64140</td><br />
<td>0000</td><br />
<td></td><br />
<td>DORES<br />
</td><br />
<td></td><br />
<td><br />
Flag to tokenize reserved words in strings</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB69</td><br />
<td>64361</td><br />
<td>FABF</td><br />
<td>64191</td><br />
<td>0000</td><br />
<td></td><br />
<td>FRETOP<br />
</td><br />
<td></td><br />
<td><br />
Pointer to next free location in string buffer</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB8E</td><br />
<td>64398</td><br />
<td>FAC1</td><br />
<td>64193</td><br />
<td>0000</td><br />
<td></td><br />
<td>TEMP3<br />
</td><br />
<td></td><br />
<td><br />
Multipurpose string register</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB94</td><br />
<td>64404</td><br />
<td>FAC7</td><br />
<td>64199</td><br />
<td>0000</td><br />
<td></td><br />
<td>DATLIN<br />
</td><br />
<td></td><br />
<td><br />
Line number of active DATA statement</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB9B</td><br />
<td>64411</td><br />
<td>FACE</td><br />
<td>64206</td><br />
<td>0000</td><br />
<td></td><br />
<td>SAVTXT<br />
</td><br />
<td></td><br />
<td><br />
Save for TXTPNT (current basic line/ used by RESUME)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB9D</td><br />
<td>64413</td><br />
<td>FAD0</td><br />
<td>64208</td><br />
<td>F650</td><br />
<td>63056</td><br />
<td>SAVSTK<br />
</td><br />
<td>STKVAL</td><br />
<td><br />
Save for stack pointer (used by RESUME)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FB9F</td><br />
<td>64415</td><br />
<td>FAD2</td><br />
<td>64210</td><br />
<td>0000</td><br />
<td></td><br />
<td>ERRLIN<br />
</td><br />
<td></td><br />
<td><br />
Line number of last Basic error</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBA1</td><br />
<td>64417</td><br />
<td>FAD4</td><br />
<td>64212</td><br />
<td>0000</td><br />
<td></td><br />
<td>DOT<br />
</td><br />
<td></td><br />
<td><br />
Most recent entered/ listed/ or edited line</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBA3</td><br />
<td>64419</td><br />
<td>FAD6</td><br />
<td>64214</td><br />
<td>0000</td><br />
<td></td><br />
<td>ERRTXT<br />
</td><br />
<td></td><br />
<td><br />
Points to line where error occurred</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBA5</td><br />
<td>64421</td><br />
<td>FAD8</td><br />
<td>64216</td><br />
<td>0000</td><br />
<td></td><br />
<td>ONELIN<br />
</td><br />
<td></td><br />
<td><br />
Address of "ON ERROR GOTO" line</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBA7</td><br />
<td>64423</td><br />
<td>FADA</td><br />
<td>64218</td><br />
<td>0000</td><br />
<td></td><br />
<td>ONEFLG<br />
</td><br />
<td></td><br />
<td><br />
Error status flag (0=no error/ nz=in error routine)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBA8</td><br />
<td>64424</td><br />
<td>FADB</td><br />
<td>64219</td><br />
<td>0000</td><br />
<td></td><br />
<td>TEMP2<br />
</td><br />
<td></td><br />
<td><br />
Formula evaluator temporary storage</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBAA</td><br />
<td>64426</td><br />
<td>FADD</td><br />
<td>64221</td><br />
<td>0000</td><br />
<td></td><br />
<td>OLDLIN<br />
</td><br />
<td></td><br />
<td><br />
Line number where Break occurred</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBAC</td><br />
<td>64428</td><br />
<td>FADF</td><br />
<td>64223</td><br />
<td>0000</td><br />
<td></td><br />
<td>OLDTXT<br />
</td><br />
<td></td><br />
<td><br />
Next line to execute</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBAE</td><br />
<td>64430</td><br />
<td>FAE1</td><br />
<td>64225</td><br />
<td>F661</td><br />
<td>63073</td><br />
<td>ASCTAB<br />
</td><br />
<td>DOAREA</td><br />
<td><br />
Pointer to start of ASCII files</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBB0</td><br />
<td>64432</td><br />
<td>FAE3</td><br />
<td>64227</td><br />
<td>F663</td><br />
<td>63075</td><br />
<td>BINTAB<br />
</td><br />
<td></td><br />
<td><br />
Pointer to start of binary files</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBB2</td><br />
<td>64434</td><br />
<td>FAE5</td><br />
<td>64229</td><br />
<td>F665</td><br />
<td>63077</td><br />
<td>VARTAB<br />
</td><br />
<td>VARSPC</td><br />
<td><br />
Pointer to start of simple variable space</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBB4</td><br />
<td>64436</td><br />
<td>FAE7</td><br />
<td>64231</td><br />
<td>F667</td><br />
<td>63079</td><br />
<td>ARYTAB<br />
</td><br />
<td>VAREND</td><br />
<td><br />
Pointer to start of array table</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBB6</td><br />
<td>64438</td><br />
<td>FAE9</td><br />
<td>64233</td><br />
<td>F669</td><br />
<td>63081</td><br />
<td>STREND<br />
</td><br />
<td>FRESPC</td><br />
<td><br />
End of storage/ first free byte</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBB8</td><br />
<td>64440</td><br />
<td>FAEB</td><br />
<td>64235</td><br />
<td>0000</td><br />
<td></td><br />
<td>DATPTR<br />
</td><br />
<td></td><br />
<td><br />
Pointer to current data item (message line)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBBA</td><br />
<td>64442</td><br />
<td>FAED</td><br />
<td>64237</td><br />
<td>0000</td><br />
<td></td><br />
<td>DEFTBL<br />
</td><br />
<td></td><br />
<td><br />
Variable type table </td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FBE8</td><br />
<td>64488</td><br />
<td></td><br />
<td></td><br />
<td>F69B</td><br />
<td>63131</td><br />
<td></td><br />
<td></td><br />
<td>:number<br />
string stored here when 18187 is called</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC18</td><br />
<td>64536</td><br />
<td>FB24</td><br />
<td>64292</td><br />
<td>0000</td><br />
<td></td><br />
<td>DFACLO<br />
</td><br />
<td></td><br />
<td><br />
Floating Point Accumulator (FAC1)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC69</td><br />
<td>64617</td><br />
<td>FB2E</td><br />
<td>64302</td><br />
<td>0000</td><br />
<td></td><br />
<td>ARGLO<br />
</td><br />
<td></td><br />
<td><br />
Second FAC (FAC2)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC7A</td><br />
<td>64634</td><br />
<td></td><br />
<td></td><br />
<td>F72D</td><br />
<td>63277</td><br />
<td></td><br />
<td>SEEDRD</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC82</td><br />
<td>64642</td><br />
<td>FB62</td><br />
<td>64354</td><br />
<td>0000</td><br />
<td></td><br />
<td>MAXFIL<br />
</td><br />
<td></td><br />
<td><br />
Current maximum file number (read only)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC83</td><br />
<td>64643</td><br />
<td>FB63</td><br />
<td>64355</td><br />
<td>0000</td><br />
<td></td><br />
<td>FILTAB<br />
</td><br />
<td></td><br />
<td><br />
Pointer to basic file table</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC8C</td><br />
<td>64652</td><br />
<td></td><br />
<td></td><br />
<td>F73F</td><br />
<td>63295</td><br />
<td></td><br />
<td>DEVOUT</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC92</td><br />
<td>64658</td><br />
<td></td><br />
<td></td><br />
<td>F745</td><br />
<td>63301</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC93</td><br />
<td>64659</td><br />
<td>FB78</td><br />
<td>64376</td><br />
<td>F746</td><br />
<td>63302</td><br />
<td>FILNAM<br />
</td><br />
<td>FLNM</td><br />
<td><br />
9 byte area for setting file names for search or open</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC99</td><br />
<td>64665</td><br />
<td></td><br />
<td></td><br />
<td>F74C</td><br />
<td>63308</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FC9C</td><br />
<td>64668</td><br />
<td>FB81</td><br />
<td>64385</td><br />
<td>F74F</td><br />
<td>63311</td><br />
<td>FILNM2<br />
</td><br />
<td></td><br />
<td><br />
Second file name/ same format as above. Used by NAMEB</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FCA7</td><br />
<td>64679</td><br />
<td></td><br />
<td></td><br />
<td>F75A</td><br />
<td>63322</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FCC0</td><br />
<td>64704</td><br />
<td>FBC0</td><br />
<td>64448</td><br />
<td>F7B0</td><br />
<td>63408</td><br />
<td>LINE0<br />
</td><br />
<td>ALTLCD</td><br />
<td><br />
Screen buffer 0 (Previous page for Telcom)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDA1</td><br />
<td>64929</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td bgcolor="#c0c0c0" >63433</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDD5</td><br />
<td>64981</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td bgcolor="#c0c0c0" >63701</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDD7</td><br />
<td>64983</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td bgcolor="#c0c0c0" >63537</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDEE</td><br />
<td>65006</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td bgcolor="#c0c0c0" >63560</td><br />
<td>MENCNT</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDEF</td><br />
<td>65007</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td bgcolor="#c0c0c0" >63561</td><br />
<td>FA2F</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FDFF</td><br />
<td>65023</td><br />
<td>FCFF</td><br />
<td>64767</td><br />
<td>FA2F</td><br />
<td>64047</td><br />
<td>LINE0E<br />
</td><br />
<td>end<br />
ALTLCD</td><br />
<td><br />
End of Screen buffer 0</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FE00</td><br />
<td>65024</td><br />
<td>FD00</td><br />
<td>64768</td><br />
<td>FA30</td><br />
<td>64048</td><br />
<td>LINE1<br />
</td><br />
<td>LCD</td><br />
<td><br />
Screen buffer 1 (LCD memory)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF3F</td><br />
<td>65343</td><br />
<td>FE3F</td><br />
<td>65087</td><br />
<td>FCAF</td><br />
<td>64687</td><br />
<td>LINE1E<br />
</td><br />
<td>end<br />
LCD</td><br />
<td><br />
End of Screen Buffer 1</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF40</td><br />
<td>65344</td><br />
<td>FE40</td><br />
<td>65088</td><br />
<td>FCF2</td><br />
<td>64754</td><br />
<td>XONOFF<br />
</td><br />
<td></td><br />
<td><br />
Flag (00) means XOF has not been received</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF41</td><br />
<td>65345</td><br />
<td>FE41</td><br />
<td>65089</td><br />
<td>0000</td><br />
<td></td><br />
<td>INHDSP<br />
</td><br />
<td></td><br />
<td><br />
Flag (FF) XOF received </td><br />
<td><br />
so freeze display</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF42</td><br />
<td>65346</td><br />
<td>FE42</td><br />
<td>65090</td><br />
<td>0000</td><br />
<td></td><br />
<td>INHBIT<br />
</td><br />
<td></td><br />
<td><br />
Flag (0) XON/XOF disabled</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF46</td><br />
<td>65350</td><br />
<td>FEC4</td><br />
<td>65220</td><br />
<td>0000</td><br />
<td></td><br />
<td>COMBUF<br />
</td><br />
<td></td><br />
<td><br />
Data buffer for COM:</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF86</td><br />
<td>65414</td><br />
<td>FE45</td><br />
<td>65093</td><br />
<td>0000</td><br />
<td></td><br />
<td>CMPNT<br />
</td><br />
<td></td><br />
<td><br />
Number of bytes waiting in serial buffer</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF87</td><br />
<td>65415</td><br />
<td>FE46</td><br />
<td>65094</td><br />
<td>0000</td><br />
<td></td><br />
<td>RDADDR<br />
</td><br />
<td></td><br />
<td><br />
Read pointer for COMBUF</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF88</td><br />
<td>65416</td><br />
<td>FE47</td><br />
<td>65095</td><br />
<td>0000</td><br />
<td></td><br />
<td>WTADDR<br />
</td><br />
<td></td><br />
<td><br />
Write pointer for COMBUF</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF89</td><br />
<td>65417</td><br />
<td>FE48</td><br />
<td>65096</td><br />
<td>0000</td><br />
<td></td><br />
<td>CMERR<br />
</td><br />
<td></td><br />
<td><br />
Number of characters in COMBUF when there was an error</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF8A</td><br />
<td>65418</td><br />
<td>FE49</td><br />
<td>65097</td><br />
<td>0000</td><br />
<td></td><br />
<td>CMFLG<br />
</td><br />
<td></td><br />
<td><br />
Flag (0)=XOF has been sent</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF8B</td><br />
<td>65419</td><br />
<td>FE4A</td><br />
<td>65098</td><br />
<td>0000</td><br />
<td></td><br />
<td>BAUDRT<br />
</td><br />
<td></td><br />
<td><br />
Baud rate table entry address</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF8F</td><br />
<td>65423</td><br />
<td>FE4D</td><br />
<td>65101</td><br />
<td>FD03</td><br />
<td>64771</td><br />
<td>KYSCNX<br />
</td><br />
<td>KBSITP</td><br />
<td><br />
Flag to determine if key scan should be done</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF91</td><br />
<td>65425</td><br />
<td>FE4F</td><br />
<td>65103</td><br />
<td>0000</td><br />
<td></td><br />
<td>KYDATA<br />
</td><br />
<td></td><br />
<td><br />
Keyboard matrix read</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FF99</td><br />
<td>65433</td><br />
<td>FE60</td><br />
<td>65120</td><br />
<td>FD0D</td><br />
<td>64781</td><br />
<td>KYMODE<br />
</td><br />
<td>PKGFF</td><br />
<td><br />
Keyboard mode storage (brk//caps/num/cod/gph/ctl/<wbr>sft)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA3</td><br />
<td>65443</td><br />
<td>FE61</td><br />
<td>65121</td><br />
<td>0000</td><br />
<td></td><br />
<td>KYHOW<br />
</td><br />
<td></td><br />
<td><br />
Mode storage of last keypress for repeat</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA2</td><br />
<td>65442</td><br />
<td></td><br />
<td></td><br />
<td>FD16</td><br />
<td>64790</td><br />
<td>KEYGPC</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA4</td><br />
<td>65444</td><br />
<td>FE62</td><br />
<td>65122</td><br />
<td>FD18</td><br />
<td>64792</td><br />
<td>KYREPT<br />
</td><br />
<td></td><br />
<td><br />
Wait count for repeat</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA5</td><br />
<td>65445</td><br />
<td></td><br />
<td></td><br />
<td>FD19</td><br />
<td>64793</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA7</td><br />
<td>65447</td><br />
<td></td><br />
<td></td><br />
<td>FD1B</td><br />
<td>64795</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFA8</td><br />
<td>65448</td><br />
<td></td><br />
<td></td><br />
<td>FD1C</td><br />
<td>64796</td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFAA</td><br />
<td>65450</td><br />
<td>FE68</td><br />
<td>65128</td><br />
<td>FD1E</td><br />
<td>64798</td><br />
<td>KYBCNT<br />
</td><br />
<td></td><br />
<td><br />
Number of characters in keyboard queue (KYRDBF)</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFAB</td><br />
<td>65451</td><br />
<td>FE69</td><br />
<td>65129</td><br />
<td>0000</td><br />
<td></td><br />
<td>KYRDBF<br />
</td><br />
<td></td><br />
<td><br />
Keyboard buffer</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFEB</td><br />
<td>65515</td><br />
<td>FEA9</td><br />
<td>65193</td><br />
<td>0000</td><br />
<td></td><br />
<td>BRKCHR<br />
</td><br />
<td></td><br />
<td><br />
0 until break is pressed. 03=Break</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFEC</td><br />
<td>65516</td><br />
<td>FEB1</td><br />
<td>65201</td><br />
<td>0000</td><br />
<td></td><br />
<td>WORK1<br />
</td><br />
<td></td><br />
<td><br />
6 byte buffer holding pattern under the cursor</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFF3</td><br />
<td>65523</td><br />
<td>FEB8</td><br />
<td>65208</td><br />
<td>FEA1</td><br />
<td>65185</td><br />
<td>CSRCNT<br />
</td><br />
<td></td><br />
<td><br />
Time until next cursor blink</td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFF4</td><br />
<td>65524</td><br />
<td>FEB9</td><br />
<td>65209</td><br />
<td>0000</td><br />
<td></td><br />
<td>LCTEY<br />
</td><br />
<td></td><br />
<td><br />
LCD row 1</td><br />
<td>8<br />
of character position to be printed</td><br />
<td></td><br />
</tr><br />
<tr valign="bottom"><br />
<br />
<td>FFF5</td><br />
<td>65525</td><br />
<td>FEBA</td><br />
<td>65210</td><br />
<td>0000</td><br />
<td></td><br />
<td>LCTEX<br />
</td><br />
<td></td><br />
<td><br />
LCD column 1</td><br />
<td>40<br />
of character position to be printed</td><br />
<td></td><br />
</tr><br />
<br />
</table><br />
<br />
[[Category:Model T Developer Reference]] [[Category:Model T Cross Map]]</div>Ronwiesenhttps://bitchin100.com/wiki/index.php?title=Model_100_Serial_Interface&diff=2555Model 100 Serial Interface2012-08-06T19:26:49Z<p>Ronwiesen: /* Detect Clear to Send (CTS) */ Corrected bit number of CTS line of I/O address 0xBB.</p>
<hr />
<div>== Overview ==<br />
<br />
The BASIC ROM provides access to the serial port. BASIC ROM support is well documented elsewhere. This article covers direct use of the [[Media:6402.pdf‎|IM6402 UART]] (datasheet) on the Model 100 and Tandy 102.<br />
<br />
== Configuration ==<br />
<br />
Before the serial port can be used, it must be configured both for serial word format (data bits, stop bits, and parity) and baud rate.<br />
<br />
=== Select RS232 Port ===<br />
<br />
At any given time, either the internal modem or the external RS232 connector may be connected to the UART. This is controllable through software.<br />
<br />
For RS232 access, port <code>$BA</code>, bit #3 must be set to 0.<br />
<br />
For Modem access, port <code>$BA</code>, bit #3 must be set to 1.<br />
<br />
Note that <code>$BA</code> is shared with other functions, including power control.<br />
<br />
=== Serial Word Format ===<br />
<br />
Port <code>$D8</code> controls the serial word format.<br />
<br />
Actually, any of <code>$D0 &rarr; $DF</code> can be used.<br />
<br />
{| border="1" cellpadding="5" cellspacing="0" style="border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;"<br />
|Bit || Function || Settings<br />
|-<br />
|0 || Stop Bit Select || 0 &rarr; 1 stop bit<br/>1 &rarr; 2 or 1.5 stop bits (1.5 if character length is 5, 2 otherwise)<br />
|-<br />
|1 || Even Parity Enable || 0 &rarr; Odd parity<br/>1 &rarr; Even<br />
|-<br />
|2 || Parity Inhibit || 0 &rarr; Parity<br/>1 &rarr; No parity<br />
|-<br />
|4-3 || Character Length Select || Bits:<br/>00 &rarr; 5<br/>01 &rarr; 6<br/>10 &rarr; 7<br/>11 &rarr; 8<br />
|-<br />
|7-5 || Unused ||<br />
|}<br />
<br />
=== Baud Rate ===<br />
<br />
CPU selection of baud rate is accomplished by loading a divisor into the PIO register through output ports <code>$BC</code> or <code>$B4</code> and <code>$BD</code> or <code>$B5</code>.<br />
<br />
The master clock is 4.9152MHz; the CPU divides this /2 and the PIO /16; thus the divisor is 4,915,200/2/16/baud, i.e. 153,600/baud.<br />
<br />
Port $BD should contain the integer value of the divisor/256+64.<br />
<br />
Port $BC should contain the remainder (MOD) from the divisor/256.<br />
<br />
The baud rate selection must be committed by writing <code>$C3</code> to register <code>$B8</code>.<br />
<br />
Here is a table of some baud rates that may be of interest:<br />
<br />
{| border="1" cellpadding="5" cellspacing="0" style="border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;"<br />
| Baud Rate || PIO<br/>Divisor || Port <code>$BD</code> || Port <code>$BC</code><br />
|-<br />
| 75 || 2048 || 72 || 0<br />
|-<br />
| 110 || 1396 || 69 || 116<br />
|-<br />
| 300 || 512 || 66 || 0<br />
|-<br />
| 600 || 256 || 65 || 0<br />
|-<br />
| 1200 || 128 || 64 || 128<br />
|-<br />
| 2400 || 64 || 64 || 64<br />
|-<br />
| 4800 || 32 || 64 || 32<br />
|-<br />
| 9600 || 16 || 64 || 16<br />
|-<br />
| 19200 || 8 || 64 || 8<br />
|-<br />
| 38400 || 4 || 64 || 4<br />
|-<br />
| 76800 || 4 || 64 || Either 2 or 1<br />
|}<br />
<br />
I include 76800 since it is are the highest baud rate that the M100 is capable of. Certainly it is usable for communicating with another Model 100. However since is not a "known" baud rate, it is less useful for communicating with PCs or other devices.<br />
<br />
That said, you may be able to [[Serial Devices Supporting 76800bps|find a device]] or bitbang GPIO lines to communicate at these rates. I have read that some USB->Serial adapters are capable of communicating at many more baud rates than the typical built-in serial ports, so there is definitely room for further exploration.<br />
<br />
Also, it turns out that NADSBox hardware is able to support the 76800bps rate! Ken may enable features that leverage the higher rate in future software updates.<br />
<br />
Here is a practical example of using 38400bps using only BASIC code. This program dumps all RAM contents to the serial port.<br />
<br />
<pre><br />
1 DEFINTA-Z:<br />
OPEN"COM:98N1D"FOROUTPUTAS1:<br />
D$="":<br />
A=FRE("0"):<br />
L=VARPTR(D$)+1:<br />
M=L+1:<br />
POKEL-1,128:<br />
OUT180,4:<br />
OUT181,64:<br />
OUT184,195:<br />
FORI=0TO255:<br />
POKEM,128+I/2:<br />
POKEL,(IMOD2)*128:<br />
PRINT#1,D$;:<br />
NEXT<br />
</pre><br />
<br />
Unfortunately this BASIC code does not transmit the 32K of data any faster than the 19200bps code. Both take about 33 seconds to transmit the image.<br />
<br />
So, here's an assembly language version of the same program. It transfers your Model 100's 32K RAM to a serial connection in about 8.5 seconds!<br />
<br />
Note that this code obeys the "clear to send" signal from the PC, so given hardware flow control enabled and properly configured on the PC, we should not overrun the remote UART.<br />
<br />
Further note that if the PC is busy doing something else (like printing to the screen) it might flow control us, and you may not achieve the maximum speed.<br />
<br />
<pre><br />
.org 64704<br />
<br />
; select RS232 port<br />
MVI A, $25<br />
OUT $BA<br />
<br />
; set up 8N1<br />
MVI A, 28<br />
OUT $D8<br />
<br />
; set up 38400 bps<br />
MVI A, 64<br />
OUT $BD<br />
MVI A, 4<br />
OUT $BC<br />
MVI A, $C3<br />
OUT $B8<br />
<br />
LXI H,32768<br />
<br />
WAITEMPTY: IN $D8<br />
ANI $10<br />
JZ WAITEMPTY<br />
<br />
WAITCTS: IN $BB<br />
CMA<br />
ANI $10<br />
JZ WAITCTS<br />
<br />
MOV A,M<br />
OUT $C8<br />
<br />
INX H<br />
MOV A,H<br />
ORA L<br />
<br />
JNZ WAITEMPTY<br />
<br />
RET<br />
<br />
.END<br />
</pre><br />
<br />
== Data Transmission ==<br />
<br />
Once configured, sending a character is simply<br />
<br />
MVI 'A'<br />
OUT $C8<br />
<br />
or, in BASIC,<br />
<br />
OUT 200,ASC("A")<br />
<br />
In the UART, there is room for two characters: the character currently being transmitted, and the next one. This permits you to ensure there is always one character waiting in the wings.<br />
<br />
You should never overflow the transmission buffers. Either do some other work during the "downtime" and/or wait until there is room by polling bit 4 (0x10) of register $D8. The code that follows just does a "busy wait."<br />
<br />
WAITEMPTY: IN $D8<br />
ANI $10<br />
JZ WAITEMPTY<br />
<br />
When deciding whether the other device is ready to receive you should also consider the Clear To Send (CTS) flow control line described later in this document.<br />
<br />
== Data Reception ==<br />
<br />
=== BASIC ROM Interrupt 6.5 Handling ===<br />
<br />
Whenever the UART receives another character, Interrupt 6.5 is signalled. Then, if interrupts are enabled, the CPU stops what it is doing and CALLs location 0x0034 in the BASIC ROM. This code disables further interrupts and jumps to the location 0x6DAC.<br />
<br />
The ISR then jumps to vector 0xFE5C (0xF5FC?) in RAM. Normally this is just a return instruction, but you could hook the interrupt here. [ stack manipulation to avoid/ or include default processing + re-enable interrupts? - TBD ]<br />
<br />
=== Polling Interrupt 6.5 ===<br />
<br />
Accepting the BASIC ROM's handling imposes significant overhead. With each interrupt, the instruction pointer must be placed on the stack and a jump performed at minimum. If the BASIC ROM (as opposed to an Option ROM) is switched in, then you will have the overhead of disabling interrupts, a jump to the DR vector, a return instruction, and then the default processing of reading and enqueing the new character. All that, and at this point no useful work has been performed other than to relieve the UART. <br />
<br />
For maximum efficiency you may wish to poll Interrupt 6.5 pin rather than accept the overhead of an interrupt. This is made possible by the 8085's SIM and RIM instructions.<br />
<br />
Using the SIM instruction, you can set the interrupt mask such that UART DR (data ready), bit 1, will not trigger an interrupt. Then, you can poll this bit using the RIM instruction ANDing with 0x20 to see if DR is set.<br />
<br />
Alternatively, you could disable interrupt processing altogether during your polled routine, but still use RIM to poll. This has the disadvantage of disabling the background ISR. But to achieve higher baud rates, you may not want the background ISR running anyway.<br />
<br />
== Flow Control ==<br />
<br />
The Model T has full support in hardware for the CTS and RTS flow control lines. In the BASIC ROM, however, it is not implemented. Instead the BASIC ROM relies on slow, kludgy XON/XOFF character escapes. This makes it difficult to transmit or receive binary files since the XON/XOFF characters are reserved for flow control.<br />
<br />
Since we are discussing direct control of the UART, we can do better and implement full flow control.<br />
<br />
=== Detect Clear to Send (CTS) ===<br />
<br />
The CTS line is an input to the Model 100. It indicates whether the device attached to the serial port (or the remote equipment behind it) has room to accept new characters. The device can "flow off" the Model T when its receive buffers are full.<br />
<br />
Implementing CTS is easy. The following code performs a busy wait on CTS:<br />
<br />
<pre><br />
WAITCTS: IN $BB<br />
CMA<br />
ANI $10<br />
JZ WAITCTS<br />
</pre><br />
<br />
CTS line is read from bit #4 of I/O address 0xBB. Note that it is inverted; if it is 0, the device is signalling "clear to send." If 1, the device is attempting to flow us off from transmitting.<br />
<br />
=== Request Peer to Send (RTS) ===<br />
<br />
The RTS line is an output from the Model 100 to the device connected on the serial port. It is a signal "requesting" the device to send (or not to send). From the other point of view, the device should transmit if and only if RTS is high. Note that from the device perspective, it sees our RTS as its CTS.<br />
<br />
If the device implements hardware flow control, it will not send if our RTS (and probably DTR) signals are low. So, at least we will want to set these two bits.<br />
<br />
The RTS and DTR lines are located on I/O register 0xBA (186). To assert RTS, clear the bit #7 of 0xBA (set to 0). To deassert RTS, set bit #7 of 0xBA to 1. Similarly for DTR, except that it is Bit #6.<br />
<br />
The following code sample sets RTS corresponding to high and low watermarks of the serial buffer:<br />
<br />
<code><br />
<pre><br />
; Assert RTS if the low water mark is passed (pressure relieved)<br />
CHECK_LOW_WATER: CPI 10<br />
JNC EXIT_LOW_WATER<br />
ASSERT_RTS: IN $BA<br />
ANI $7F<br />
OUT $BA<br />
EXIT_LOW_WATER: POP PSW<br />
RET<br />
<br />
<br />
; Deassert RTS if high water mark is exceeded (high pressure)<br />
CHECK_HIGH_WATER: CPI 40<br />
JC EXIT_HIGH_WATER<br />
DEASSERT_RTS: IN $BA<br />
ORI $80<br />
OUT $BA<br />
EXIT_HIGH_WATER: POP PSW<br />
RET<br />
</pre><br />
</code><br />
<br />
== Handling Communication Errors ==<br />
<br />
(IN PROGRESS)<br />
<br />
== I/O Map ==<br />
<br />
Here, for reference, is the serial I/O map:<br />
<br />
<table border="1" cellpadding="5" cellspacing="0" style="border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;"><br />
<tr><td>Name</td><td>Direction</td><td>Port</td></tr><br />
<tr><td>TX</td> <td>Output</td> <td>$C8 (200)</td></tr><br />
<tr><td>RX</td> <td>Input</td> <td>$C8 (200)</td></tr><br />
<tr><td>RTS</td> <td>Output</td> <td>$BA (186), bit 7</td></tr><br />
<tr><td>CTS</td> <td>Input</td> <td>$BB (187), bit 4</td></tr><br />
<tr><td>DSR</td> <td>Input</td> <td>$BB (187), bit 5</td></tr><br />
<tr><td>DTR</td> <td>Output</td> <td>$BA (186), bit 6</td></tr><br />
</table><br />
<br />
nb: sense on DSR, CTS seem to be inverted. So CTS ==0 means that it is OK to transmit. A '1' means the device is flowing the Model T off.<br />
<br />
nb: Port <code>$BA</code> is called "Port B" in the Model 100 Technical Reference. It has other functions than UART control, including the critical Power On/Off line. See [[Model 100 Port B]] for the breakdown.<br />
<br />
Direction indicates both data flow, and whether to use an <code>IN</code> or <code>OUT</code> instruction to read/write to the given pin.<br />
<br />
[[Category:Model T Developer Reference]]</div>Ronwiesenhttps://bitchin100.com/wiki/index.php?title=TEENY.CO_MANUAL&diff=525TEENY.CO MANUAL2008-12-05T15:48:53Z<p>Ronwiesen: /* Beefs, Tips, Quirks and Humor */</p>
<hr />
<div>==Orientation==<br />
<br />
File TEENY.CO has an image which is simply called "Teeny" throughout<br />
this manual. The name Teeny describes the amount of laptop memory that<br />
is needed to hold the image. For what it does in comparison to similar<br />
software, the name is appropriate -- the image is teeny! Although the<br />
Teeny image is internally specific by Tandy laptop Model type, its size<br />
and its usage are identical for all laptop models. Use of, and<br />
operational aspects of the Teeny image are thoroughly covered in this<br />
manual.<br />
<br />
Teeny gets used most by folks at the extremes of experience with Tandy<br />
laptops. Many neophytes use Teeny because it is in the public domain<br />
and easy to acquire. Many experts use Teeny because its image is so<br />
very small, and it has certain operational aspects that are not found<br />
in commercial software. Often a neophyte starts with Teeny, graduates<br />
to other software, and returns to Teeny usage at the expert stage.<br />
<br />
== Invocation Facts ==<br />
<br />
The image of Teeny is one contiguous block. Its size is 747. A block<br />
of 747 adjacent cells, within the HIMEM region of the laptop memory,<br />
holds the image during a session of its use. In regard to Tandy laptop<br />
operation, there is nothing abnormal about the image of Teeny -- it's<br />
quite conventional. If you are an expert, move on to the "Trigger File<br />
Creation" and "Invocation via Trigger File" sections of this manual<br />
which may be of some interest.<br />
<br />
The laptop menu shows a "Bytes free" quantity. Of the total amount of<br />
Random Access Memory (RAM) that is equipped in the laptop, "Bytes free"<br />
is just one portion among several portions. The "Bytes free" portion<br />
is the amount of RAM that is not (yet) consumed. The amount of RAM<br />
that is consumed is the total of quantities from all other portions.<br />
As consumption increases and decreases, the "Bytes free" quantity of<br />
RAM contracts and expands, respectively. Refer to "About RAM in the<br />
Model 10x laptops", at the Club 100 site, for complete detail.<br />
<br />
Regardless of how the Teeny image is invoked, the HIMEM region of RAM<br />
is where the action is at during a Teeny session. The image within the<br />
HIMEM region is what controls the laptop during a Teeny session. When<br />
or how the image gets placed within the HIMEM region is no longer<br />
pertinent once a Teeny session is under way. When you end a session of<br />
Teeny, the Teeny image no longer controls the laptop but it still is<br />
intact at 747 adjacent cells within the HIMEM region.<br />
<br />
From the laptop menu, there are two ways to invoke the Teeny image: via<br />
its laptop command file named TEENY.CO, or via a trigger file. Both of<br />
these files have a ".CO file descriptor" and an appended image. The<br />
.CO file descriptor describes the specific RAM addresses where the<br />
content of the appended image belongs, as well as where to start<br />
"execution" for an invocation. The descriptor size is 6, and an image<br />
content appends it.<br />
<br />
* TEENY.CO file -- file size is 753: 6 for the descriptor, and 747 for the entire content of the Teeny image. Invocation via TEENY.CO is recommended for a neophyte.<br />
* Trigger file -- file size is 7: 6 for the descriptor, and 1 for its content which is a vestige of the Teeny image. The trigger file consumes 746 less RAM than file TEENY.CO. Invocation via a trigger file is only recommended for experienced folks because of the unforgiving nature of trigger files.<br />
<br />
Each incarnation of laptop command file TEENY.CO is address-specific --<br />
each has a specific HIMEM requirement which must be met for successful<br />
invocation. The trigger file is created from some address-specific<br />
incarnation of file TEENY.CO, so it has an inherited HIMEM requirement.<br />
Whenever you attempt an invocation, the laptop inspects the .CO file<br />
descriptor to identify the HIMEM requirement. Based on the point of<br />
HIMEM, the laptop either allows or disallows the invocation.<br />
<br />
* Where the point of HIMEM indicates that address-specific cells are available within the HIMEM region, the laptop "loads" the cells with content from the appended image and then it relinquishes control to the "execution" cell -- a session of Teeny is under way. For the TEENY.CO file, 747 cells are loaded. For the trigger file, only 1 cell (the execution cell) is loaded and proper operation depends on remnant content (image of Teeny) in the adjacent block of 746 cells.<br />
* Where the point of HIMEM is "too high", the laptop disallows an invocation because the HIMEM requirement is not met. All cells in the HIMEM region remain as-is -- the laptop just issues a beep. A neophyte might think it is Teeny that issues the beep.<br />
<br />
If the HIMEM requirement of an incarnation is not met, there are two<br />
remedies. You set the point of HIMEM low enough for the requirement to<br />
be met, or you leave the point of HIMEM as-is and obtain a different<br />
incarnation (see the "TEENY.BA MANUAL" for detail) that has a HIMEM<br />
requirement which is met. The incarnation that allows the least<br />
consumption of RAM has a HIMEM requirement that is 747 less than the<br />
point of MAXRAM. The chart below lists this HIMEM requirement for the<br />
Model 10x and Model 200 laptops. <br />
<br />
<pre> <br />
MAXRAM-747 | Model 10x | Model 200 |<br />
HIMEM Requirement | 62213 | 60357 |<br />
</pre><br />
<br />
== Invocation via TEENY.CO File ==<br />
<br />
This procedure invokes Teeny by using laptop command file TEENY.CO and,<br />
in cases where it is necessary, this procedure also sets the point of<br />
HIMEM equal to the HIMEM requirement of TEENY.CO.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name TEENY.CO at the laptop menu.<br />
# Press the ENTER key. If the HIMEM requirement is met, the laptop relinquishes control to Teeny and its guide/prompt appears. A session of Teeny is under way -- this procedure is complete.<br>Where the HIMEM requirement is not met, the laptop issues a beep. Go on to step 3 of this procedure.<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop. Type the first entry exactly as shown -- five lines then appear as a result of this entry, and then "Ok" appears at the following line.<br>Study the result where 5-digit values appear in column 6 to column 10. Point of HIMEM is illustrated as "himem". HIMEM requirement is illustrated as "hmreq". A value that is 746 more than the HIMEM requirement is illustrated as "endat".<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |?" pH "HIMEM:LOADM"TEENY | and then press ENTER.<br />
| pH himem | Point of HIMEM<br />
|Top: hmreq | HIMEM requirement<br />
|End: endat | HIMEM requirement+746<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEAR0,hmreq:MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"> <br />
<li>Using the "hmreq" value, type the second entry -- the laptop menu<br />
appears. Go back to step 1 of this procedure.</li><br />
</ol><br />
<br />
== Trigger File Creation ==<br />
<br />
This procedure eliminates the TEENY.CO file and replaces it with a<br />
trigger file named Thmreq.CO where "hmreq" is the 5-digit HIMEM<br />
requirement. This procedure also sets the point of HIMEM equal to the<br />
HIMEM requirement.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# An entry is illustrated below as it appears on the 40-column screen of the laptop. Type the entry exactly as it is shown. As a result of this entry, three lines appear that show the "Top", "End", and "Exe" addresses of file TEENY.CO. The 5-digit value of Top (and Exe) appears in column 6 to column 10. This value is the HIMEM requirement, which is illustrated as "hmreq".<br />
<br />
<pre><br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY":T=PEEK(7300)*7-2821:R=PEEK(|<br />
|T+1)*256+PEEK(T):KILL"TEENY.CO":SAVEM"T"|<br />
|+MID$(STR$(R),2),R,R,R | and then press ENTER.<br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
</pre><br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 5. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"> <br />
<li>Type the entry shown below. The laptop menu appears. File name<br />
TEENY.CO is not found -- it has been eliminated. The trigger file name<br />
(e.g., T60357.CO) is found on the menu -- the five numerals of the name<br />
identify the HIMEM requirement of the trigger file.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |CLEAR0,R:MENU | and then press ENTER.<br />
<br />
</pre><br />
<br />
This procedure is complete. Move on to the "Invocation via Trigger<br />
File" section of this manual.<br />
<br />
<ol start="5"><br />
<li>Using the "hmreq" value, type the entry shown below and then go back to step 3 of this procedure.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Invocation via Trigger File ==<br />
<br />
This procedure invokes Teeny by using a trigger file or, in cases where<br />
it is necessary, this procedure eliminates a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name of the trigger file (e.g., T60357.CO).<br />
# Press the ENTER key. If the HIMEM requirement is met, the laptop relinquishes control to Teeny and its guide/prompt appears. A session of Teeny is under way -- this procedure is complete<br>Where the HIMEM requirement is not met, the laptop issues a beep. Go on to step 3 of this procedure.<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# An entry is illustrated below as it appears on the 40-column screen of the laptop. Type the entry exactly as it is shown. As a result of this entry, the point of HIMEM appears as a 5-digit value in column 2 to column 6 on a line by itself. The value for the point of HIMEM is illustrated as "himem". Directly below it, all of the file names are listed with three names per line starting at columns 1, 13 and 25.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |?HIMEM"pH":FILES | and then press ENTER.<br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | The trigger file name<br />
|Ok |<br />
</pre><br />
<br />
Look at the list of file names and find the trigger file name. A name<br />
of the Thmreq.CO form identifies a trigger file, where "hmreq" is its<br />
5-digit HIMEM requirement. If the point of HIMEM exceeds the HIMEM<br />
requirement of the trigger file by MORE THAN 1, go to step 7. If the<br />
point of HIMEM exceeds the HIMEM requirement of the trigger file by<br />
EXACTLY 1, go to step 6.<br />
<br />
<ol start="6"><li> <br />
Type the entry shown below -- the laptop menu appears. Go back to<br />
step 1 of this procedure.</li><br />
</ol><br />
<br />
<pre> <br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | exactly hmreq + 1<br />
|Ok |<br />
Type |CLEAR0,HIMEM-1:MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="7"><li><br />
Type the entry shown below -- the laptop menu appears. This<br />
eliminates the trigger file -- this procedure is complete.</li><br />
</ol><br />
<br />
<pre> <br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | more than hmreq + 1<br />
|Ok |<br />
Type |KILL"Thmreq.CO":MENU | and then press ENTER.<br />
</pre><br />
<br />
== Guide/Prompt ==<br />
<br />
Teeny issues a two-line guide/prompt: the upper line is the guide, the<br />
lower line is the prompt. These two lines are illustrated below<br />
exactly as they appear on the 40-column screen of the laptop.<br />
<br />
The guide line is only a visual aid. It identifies column positions of<br />
fields in the prompt line, and it has a notation (C=KLSQ) regarding<br />
arguments of the command field. The prompt line has two fields that<br />
are separated. The command field [C] is column 3. Column 4 is merely<br />
a separator [ ] between fields. The file name field [FFFFFF.XX] spans<br />
from column 5 to column 13.<br />
<br />
Teeny provides a blinking cursor (illustrated by _ below) on the prompt<br />
line at column 3, which is the command field. Use of the command field<br />
is mandatory -- you must type a command. You do not have to use the<br />
rest of the prompt line -- its use is optional.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> _ |<br />
</pre><br />
<br />
== Command Syntax ==<br />
<br />
Regarding arguments of the command field, the notation (C=KLSQ) shows<br />
an equal sign followed by four upper case letters: K, L, S, and Q. The<br />
equal sign denotes the query command. Upper case letters K, L, S, and<br />
Q correspond to the Kill, Load, Save, and Quit commands.<br />
<br />
Command syntax is the same for every command -- you may include a file<br />
name, but you are not compelled to do so. If you include a file name,<br />
then you may also append commentary after the file name -- Teeny<br />
ignores anything you type at column 14 and onward.<br />
<br />
Letter "P" is upper case, and letter "p" is lower case. For file names<br />
that you type, the case of each and every letter may be important. For<br />
example, LAPTOP.CO and LApTOP.CO and LAPTOp.CO are slightly different<br />
file names that may refer to three distinct files, or they may all<br />
refer to the same file. Teeny takes each character of a file name<br />
precisely the way you type it and, based on the command, treats the<br />
file name in different ways -- see "File Name Treatment" for detail.<br />
For convenience however, you can keep the CAPS LOCK key engaged during<br />
a Teeny session so that file names are always treated in the same way.<br />
<br />
There are some restrictions on the names of files. The laptop imposes<br />
the first restriction, Teeny enforces it, and it applies to every<br />
command. The first restriction is that the lead-character of a name<br />
can not be a numeral or certain special characters. For example, the<br />
name 4SCORE.DO is illegal. To make it compatible with as large a group<br />
of other masters (e.g., Floppy by Tandy, TS-DOS by Traveling Software)<br />
as practical, Teeny imposes the second restriction, which applies to<br />
the Kill, Load, and Save commands. This second restriction is that the<br />
lead-character of the file name extension must be one of three letters:<br />
B, C, or D. Other masters and Teeny use a convention where the<br />
lead-letter of the file name extension indicates the laptop file type.<br />
There are three file types: BASIC, Command, and ASCII. And the<br />
corresponding letters are: B for BASIC, C for Command, and D for ASCII.<br />
For a Load command with a file name such as WONDER.B4 for example,<br />
Teeny inserts the file content into that portion of laptop memory where<br />
BASIC file types belong.<br />
<br />
The slave device that is attached at the RS-232C port of the laptop (a<br />
Disk Drive, or a PC during a DeskLink session) maintains its disk<br />
directory of file names and file content within its media. Certain<br />
differences among various slave devices are noteworthy and offer useful<br />
operational potential -- see "Slave Device Nuance" for detail.<br />
<br />
See the illustration below. It shows an example for every command.<br />
Each example is a command which includes a file name. Note that the<br />
name included with the example Quit command is not legitimate for use<br />
with any of the other commands. Every example also includes commentary<br />
that begins at column 15. The file name and comment in each example<br />
form an explanation of what the command means. They are elaborate<br />
examples, yet you can use them as-is during a Teeny session because<br />
they are correct in their syntax!<br />
<br />
<pre><br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> = Wonder.B4 Does file exist at disk? | Syntax of query<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> K AtDisk.BA BASIC file erase at disk | Syntax of Kill<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> L Laptop.CO Command file into memory | Syntax of Load<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> S OnDisk.DO ASCII file onto the disk | Syntax of Save<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> Q meansQuit so Teeny session ends | Syntax of Quit<br />
</pre><br />
<br />
For a command (except for Quit command) where you include a file name,<br />
you must type the name so it aligns correctly in the file name field.<br />
Type one or more spaces if needed to pad a name so that the file name<br />
field is completely filled (type NAME .DO for a file named NAME.DO).<br />
<br />
== Command Action ==<br />
<br />
Teeny associates a file name with every command - even with the Quit<br />
command which produces no action except to end the Teeny session. The<br />
action by all the other commands is file name dependent, and the two<br />
restrictions on the names of files are pertinent.<br />
<br />
There are two places a file can exist: at the disk, or in the memory of<br />
the Tandy laptop. A file, of a specific name, either exists or does<br />
not exist. So there are four cases for you to consider with respect to<br />
any file name. For a specific name, a file is found:<br />
<br />
# nowhere (neither place)<br />
# one place, at the disk (not in memory)<br />
# one place, in memory (not at the disk)<br />
# both places<br />
<br />
The chart below summarizes the query, Kill, Load, and Save commands for<br />
all four cases. Below the chart, there is a paragraph for each command<br />
that explains its action. The terms "Identical file name" and<br />
"NORMALIZED file name" appear in these paragraphs to distinguish<br />
between different treatments that Teeny applies to file names. See<br />
"File Name Treatment" for the distinction.<br />
<br />
<pre> <br />
| nowhere | one place, | one place, | both places |<br />
| | AT THE DISK | IN MEMORY | |<br />
___ case #1 ___ ___ case #2 ___ ___ case #3 ___ ___ case #4 ___ <br />
query | "FF Err" | "SN Err" | "FF Err" | "SN Err" |<br />
| (at the disk) | Specific Name | (at the disk) | Specific Name |<br />
Kill | "FF Err" |Possible ERASE | "FF Err" |Possible ERASE |<br />
| (at the disk) | AT THE DISK | (at the disk) | AT THE DISK |<br />
Load | "FF Err" |Possible INSERT| "FF Err" | "AE Err" |<br />
| (at the disk) | IN MEMORY | (at the disk) | (in memory) |<br />
Save | "FF Err" | "AE Err" |Possible INSERT| "AE Err" |<br />
| (in memory) | (at the disk) | AT THE DISK | (at the disk) |<br />
</pre><br />
<br />
The action of the query command merely is to respond with an error. The query command ascertains extant of the Identical file name found AT THE DISK. There are two possible responses by the query command. If Teeny fails to find any file name AT THE DISK by the Identical file name (which is case #1 and also case #3), then the response "FF Err" is given. Otherwise at least one specific name is extant AT THE DISK that is recognized by the Identical file name (which is case #2 and case #4), and the response "SN Err" is given. See "Slave Device Nuance".<br />
<br />
The action of the Kill command is to erase a file of an Identical file<br />
name AT THE DISK. The action is possible for case #2 and case #4. For<br />
either of these cases, Teeny will erase the file AT THE DISK unless<br />
there is some condition (e.g., Write-Protected disk) that prevents the<br />
action. If the action is prevented, Teeny issues an error that is<br />
pertinent. For case #1 and case #3, Teeny issues "FF Err" because it<br />
fails to find the Identical file name AT THE DISK.<br />
<br />
The action of the Load command is to insert IN MEMORY a file, based on<br />
content found at disk. The action is possible for case #2 only. For<br />
this case, Teeny makes an exact copy of the content and assigns a<br />
NORMALIZED file name in the memory directory of the laptop unless there<br />
is some condition (e.g., not enough free memory) that prevents the<br />
action. If the action is prevented, Teeny issues an error that is<br />
pertinent. For case #1 and case #3, Teeny issues "FF Err" because it<br />
fails to find the Identical file name at the disk. For case #4, Teeny<br />
issues "AE Err" because it finds the NORMALIZED file name already is<br />
assigned in the memory directory.<br />
<br />
The action of the Save command is to insert AT DISK a file, based on<br />
content found in memory. The action is possible for case #3 only. For<br />
this case, Teeny makes an exact copy of the content and assigns an<br />
Identical name in the disk directory unless there is some condition<br />
(e.g., Write-Protected disk) that prevents the action. If the action<br />
is prevented, Teeny issues an error that is pertinent. See "Slave<br />
Device Nuance". For case #1, Teeny issues "FF Err" because it fails to<br />
find the NORMALIZED file name in the memory directory of the laptop.<br />
For case #2 and case #4, Teeny issues "AE Err" because it finds the<br />
Identical file name already is assigned in the disk directory.<br />
<br />
== Error Codes ==<br />
<br />
Teeny issues a 2-letter error code, such as "NM Err", if it encounters some condition or fault that prevents command action. The chart below lists each error code with its meaning, and indicates the relationship, if any, to each command: query, Kill, Load, Save, and Quit. Indicators "Disk" and "Memory" identify the place (i.e., at Disk or in Memory) where a condition is pertinent. The "**" indicator is used for error codes that have a clear meaning of place (e.g., Out of Memory), or have a generalized meaning.<br />
<br />
<pre> <br />
|________ Code and Meaning ________|query_|_Kill_|_Load_|_Save_|_Quit_|<br />
| NM NaMe illegal (e.g. 4SCORE.DO) | ** | ** | ** | ** | ** |<br />
| SN Specific Name found | Disk | | | | |<br />
| FF Fail to Find name | Disk | Disk | Disk |Memory| |<br />
| AE file Already Exists | | |Memory| Disk | |<br />
| ND No Disk media in drive | ** | ** | ** | ** | |<br />
| WP Write-Protected disk media | | ** | | ** | |<br />
| DF Drive directory Full | | | | ** | |<br />
| FL FuLL memory directory | | | ** | | |<br />
| OM Out of Memory (i.e. capacity) | | | ** | | | <br />
| NR RS-232 Not Ready (e.g. cable) | ** | ** | ** | ** | |<br />
| IO I/O fault (e.g. RS-232) | ** | ** | ** | ** | |<br />
| CM CoMmunication fault | ** | ** | ** | ** | |<br />
</pre><br />
<br />
The Load command can not overwrite a file in memory. You must Quit Teeny, kill the file in memory, then invoke Teeny again to load the file from disk. The example below shows the "discovery" that the file exists in memory, and the Quit of Teeny.<br />
<br />
<pre> <br />
> L NAME .DO<br />
AE Err (file Already Exists in memory)<br />
> Q<br />
</pre><br />
<br />
The 6-command example below shows a comedy of errors that finally<br />
overwrites a file at the disk. Only the first command includes a file<br />
name -- see "File Name Memory".<br />
<br />
<pre><br />
> S NAME .DO<br />
NR Err (plug in cable, power on drive)<br />
> S<br />
ND Err (insert disk)<br />
> S<br />
WP Err (remove disk write-protect)<br />
> S<br />
AE Err (file Already Exists at disk)<br />
> K<br />
> S<br />
</pre><br />
<br />
== File Name Memory ==<br />
<br />
Teeny remembers the last file name you typed. All commands need a file<br />
name and Teeny uses the remembered file name when you don't explicitly<br />
supply one. Even the Quit command needs a file name, but the name does<br />
not have to be legitimate. The 2-command example below overwrites a<br />
disk file.<br />
<br />
<pre><br />
> K NAME .DO<br />
> S<br />
</pre><br />
<br />
== File Name Treatment ==<br />
<br />
Teeny treats a file name two ways:<br />
<br />
* Identical -- exactly as typed by you<br />
* NORMALIZED -- so that all letters are upper case<br />
<br />
Mixed upper and lower case is allowed for file names at the disk<br />
directory of the slave device. A file identified by an Identical name<br />
at the disk directory is erased at disk, as a result of the Kill<br />
command. Likewise, a file inserted at disk, as a result of the Save<br />
command, gets an Identical name at the disk directory. For DeskLink,<br />
mixed case is not pertinent because the operating system of the PC<br />
treats mixed case as if it is all upper case. For a Disk Drive, mixed<br />
case is pertinent.<br />
<br />
All upper case is the norm for file names within the memory directory<br />
of the laptop. A file inserted in memory, as a result of the Load<br />
command, gets a NORMALIZED name in the memory directory of the laptop.<br />
<br />
The chart below shows the use of file name AnYmIx.Do in the query,<br />
Kill, Load, and Save commands. The Identical file name of AnYmIx.Do<br />
applies at the disk directory of the slave device for each of these<br />
commands. The NORMALIZED file name of ANYMIX.DO applies in the memory<br />
directory of the laptop for only the Load and Save commands.<br />
<br />
<pre> <br />
_______ Directory _______ <br />
__Command __| at Disk | in Memory |____ Overall action summary ____<br />
= AnYmIx.Do | Identical | | By AnYmIx.Do, query at disk.<br />
| | -- |<br />
K AnYmIx.Do | Identical | | By AnYmIx.Do, erase at disk.<br />
| | -- |<br />
L AnYmIx.Do | Identical | | Content of AnYmIx.Do at disk,<br />
| | NORMALIZED | insert for ANYMIX.DO in memory.<br />
S AnYmIx.Do | | NORMALIZED | Content of ANYMIX.DO in memory,<br />
| Identical | | insert for AnYmIx.Do at disk.<br />
</pre><br />
<br />
Where you use Teeny with a Disk Drive, you can use file names that have<br />
differences of letter case to your advantage. You can have content in<br />
memory under a NORMALIZED file name which you actively work with (e.g.,<br />
TEXT), while you have content at disk which reflects your prior<br />
activity under one or more Identical names.<br />
<br />
An example for media back-up purposes uses one Identical name where the<br />
last character is lower case, such as ACTIVE.Do. Use the S ACTIVE.DO<br />
and S ACTIVE.Do commands to save your active content, in duplicate, at<br />
the disk. Should the diskette media suffer from erosion (e.g., by some<br />
physical damage) there's some chance that one disk file is left intact.<br />
Ordinarily you use the L ACTIVE.DO command to insert the active content<br />
in memory under the NORMALIZED file name ACTIVE.DO. But you can resort<br />
to the L ACTIVE.Do command if the need arises.<br />
<br />
An example for archival purposes uses a series of Identical names. A<br />
series such as Series.do, SEries.do, SERies.do and so on can be used to<br />
represent some progressive activity. And a series such as sERIES.DO,<br />
seRIES.DO, serIES.DO and so on can be used to represent some regressive<br />
activity. The query command is very useful for "learning" the limits<br />
of an archival series after you "forgot" the limits.<br />
<br />
== Slave Device Nuance ==<br />
<br />
For the query command with a PC during a DeskLink session, the ? wild<br />
card character can be used within the file name extension. This forms<br />
a "file spec" which covers a range of specific file names. Note that<br />
the name portion is specific, and the extension portion is not<br />
specific. The chart below lists eight query commands for a name of WOW<br />
where each query has a different file spec. The chart assumes nine<br />
files of the name WOW are extant, and has a column for each extension<br />
of the name WOW. For each query, the indicator "met" identifies every<br />
file name that meets the file spec and thus contributes toward the<br />
response "SN Err" for Specific Name. The file spec with extension ??<br />
is global, so all of the nine files contribute toward the response.<br />
<br />
<pre> <br />
query & name| Files with a name of WOW exist, the Extensions are: |<br />
____________| .B | .B4 | .BA | .C | .C1 | .CO | .D | .D4 | .DO |<br />
= WOW .?? | met | met | met | met | met | met | met | met | met |<br />
= WOW .? | met | | | met | | | met | | |<br />
= WOW .B? | met | met | met | | | | | | |<br />
= WOW .C? | | | | met | met | met | | | |<br />
= WOW .D? | | | | | | | met | met | met |<br />
= WOW .?1 | | | | | met | | | | |<br />
= WOW .?4 | | met | | | | | | met | |<br />
= WOW .?O | | | | | | met | | | met |<br />
</pre><br />
<br />
For the Save command with a Disk Drive, there must be at least one file<br />
name slot available at the disk directory, and the directory must<br />
manifest enough capacity in terms of sectors at the media to insert<br />
(i.e., hold) the file content. Otherwise, the response "DF Err" for<br />
Drive directory Full is given. The chart below lists the quantity of<br />
file name slots, and the capacity and quantity of sectors for diskette<br />
media that is formatted by various Disk Drives.<br />
<br />
<pre> <br />
________ Disk Drive _________ _ File Name Slots __ _Capacity/Sectors_ <br />
| Brother Disk Drive FB100 | 40 | 101120 / 79 |<br />
| Purple Computing Disk Drive | 40 | 101120 / 79 |<br />
| Tandy Portable Disk Drive | 40 | 101120 / 79 |<br />
| Tandy Portable Disk Drive 2 | 40 bank0, 40 bank1 | 202240 / 158 |<br />
</pre><br />
<br />
== Diskette Formatter ==<br />
<br />
Teeny does not have a command to format a diskette in a Disk Drive. If<br />
it did, the image of Teeny would not be so teeny! Make your own BASIC<br />
program and use it on occasions when you want to format some diskettes.<br />
<br />
Just invoke the BASIC interpreter at the laptop menu and then type four<br />
entries, the last of which ends the interpretation session. The four<br />
entries are illustrated below exactly as they appear on the 40-column<br />
screen of the laptop as you type them. Note that the second entry is<br />
very long and it wraps into seven lines on the screen.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Type |NEW | and then press ENTER.<br />
|Ok |<br />
Type |0CLEAR1:IFLEN(INKEY$)THENRUNELSE?"FORMAT|<br />
| [Y]es";:IFNOTINPUT$(1)="Y"THENMENUELSE?|<br />
|:MAXFILES=1:OPEN"COM:98N1DNN"FOROUTPUTAS|<br />
|1:?#1,"ZZ"CHR$(6)CHR$(0)CHR$(249);:CLOSE|<br />
|:M=PEEK(919):FORI=0TO0STEP0:IFSGN(M)XORS|<br />
|GN(INP(179+M)AND32+4*M)THENBEEP:RUNELSEN|<br />
|EXT | and then press ENTER.<br />
Type |SAVE"DF21 | and then press ENTER.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
The third entry assigns DF21.BA as the file name of this BASIC program.<br />
After the fourth entry the laptop menu appears and the name DF21.BA can<br />
be seen. This BASIC program is not specific by Tandy laptop Model type<br />
so it can be used by all laptop models (200 or 10x). Use it to format<br />
diskette media placed in the:<br />
<br />
* Purple Computing Disk Drive -- with DIP switches set for 19200 Baud<br />
* Tandy Portable Disk Drive -- with DIP switches set for 19200 Baud<br />
* Tandy Portable Disk Drive 2<br />
<br />
== Change Working Speed ==<br />
<br />
TEENY.EXE casts Teeny with a working speed of either 19200 Baud or 9600<br />
Baud (see the "TEENY.EXE MANUAL" for detail). Where it isn't practical<br />
to recast Teeny (e.g., no PC available), this procedure can be used as<br />
an expedient. It changes the working speed of Teeny. This procedure<br />
may be used with laptop command file TEENY.CO or with a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop: one for laptop command file TEENY.CO, one for a trigger file. Type the appropriate entry exactly as it is shown.<br />
<br />
<pre> <br />
1111111111222222222233333333334 (for TEENY.CO file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY | and then press ENTER.<br />
<br />
1111111111222222222233333333334 (for trigger file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"Thmreq | and then press ENTER.<br />
</pre><br />
<br />
As a result of the entry above, three lines appear that show the "Top",<br />
"End", and "Exe" addresses of the file. The 5-digit value of Top (and<br />
Exe) appears in column 6 to column 10. This value is the HIMEM<br />
requirement, which is illustrated as "hmreq".<br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 6. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"><br />
<li>Carefully type the long entry shown below.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |T=PEEK(7300)*7-2821:R=PEEK(T+1)*256+PEEK|<br />
|(T):C=R+213:IFPEEK(C+1)-56THENMENUELSEFO|<br />
|RI=0TO0STEP0:S=PEEK(C):?MID$("NormalSLOW|<br />
|",82-1.08^S,6)" working speed. [C]hange?|<br />
|":IFINSTR("cC",INPUT$(1))THENPOKEC,1XORS|<br />
|:NEXTELSEIFPEEK(T+2)-1THENSAVEM"TEENY",R|<br />
|,R+746,R | and then press ENTER.<br />
</pre><br />
<br />
If the screen shows either the "Normal working speed. [C]hange?" or<br />
"SLOW working speed. [C]hange?" message, all is well -- go to step 5.<br />
<br />
If the screen shows only the " working speed. [C]hange?" message, the<br />
image of Teeny is not in place -- go back to step 3.<br />
<br />
If the laptop menu appears or if an Error message appears (e.g., FC<br />
Error), something is wrong. Likely, the entry was incorrectly typed --<br />
go back to step 1 (laptop menu) or to step 3 (Error message).<br />
<br />
<ol start="5"><br />
<li>The working speed of Teeny is shown at the screen along with the<br />
"[C]hange?" prompt, as shown below. Normal speed is 19200 Baud. SLOW<br />
speed is 9600 Baud. Each time you press the C key, the working speed<br />
changes.<br><br />
When the desired working speed is shown, press ENTER to accept it and<br />
then type the entry shown below -- the laptop menu appears. This<br />
procedure is complete.<br />
</li><br />
</ol><br />
<br />
<pre> <br />
|Normal working speed. [C]hange? | C changes the speed.<br />
|SLOW working speed. [C]hange? | C changes the speed.<br />
|Normal working speed. [C]hange? | C changes the speed.<br />
|SLOW working speed. [C]hange? | ENTER accepts speed.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"><br />
<li><br />
Using the "hmreq" value, type the entry shown below and then go<br />
back to step 3 of this procedure.<br />
</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Change DSR Sensitivity ==<br />
<br />
TEENY.EXE casts Teeny so that it either is sensitive to the DSR control<br />
line or is not sensitive to the DSR control line (see the "TEENY.EXE<br />
MANUAL" for detail). Where a Nul-modem cable is not appropriate to the<br />
DSR usage of Teeny (e.g., DSR control line not connected while there is<br />
sensitivity to the DSR control line by Teeny) and it isn't practical to<br />
recast Teeny (e.g., no PC available), this procedure can be used as an<br />
expedient. It changes the DSR usage of Teeny. This procedure may be<br />
used with laptop command file TEENY.CO or with a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop: one for laptop command file TEENY.CO, one for a trigger file. Type the appropriate entry exactly as it is shown.<br />
<br />
<pre> <br />
1111111111222222222233333333334 (for TEENY.CO file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY | and then press ENTER.<br />
<br />
1111111111222222222233333333334 (for trigger file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"Thmreq | and then press ENTER.<br />
</pre><br />
<br />
As a result of the entry above, three lines appear that show the "Top",<br />
"End", and "Exe" addresses of the file. The 5-digit value of Top (and<br />
Exe) appears in column 6 to column 10. This value is the HIMEM<br />
requirement, which is illustrated as "hmreq".<br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 6. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"><br />
<li>Carefully type the long entry shown below.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |T=PEEK(7300)*7-2821:R=PEEK(T+1)*256+PEEK|<br />
|(T):C=R+572-341*SGN(91-T/-31):IFPEEK(C+1|<br />
|)-4THENMENUELSEFORI=0TO0STEP0:S=PEEK(C):|<br />
|?"DSR U"MID$("nu",SAND5)"sed. [C]hange?"|<br />
|:IFINSTR("cC",INPUT$(1))THENPOKEC,215XOR|<br />
|S:NEXTELSEIFPEEK(T+2)-1THENSAVEM"TEENY",|<br />
|R,R+746,R | and then press ENTER.<br />
</pre><br />
<br />
If the screen shows either the "DSR Used. [C]hange?" or "DSR Unused.<br />
[C]hange?" message, all is well -- go to step 5.<br />
<br />
If the laptop menu appears or if an Error message appears (e.g., FC<br />
Error), something is wrong. Likely, the entry was incorrectly typed --<br />
go back to step 1 (laptop menu) or to step 3 (Error message).<br />
<br />
<ol start="5"><br />
<li>The sensitivity to the DSR control line by Teeny is shown at the<br />
screen as DSR usage along with the "[C]hange?" prompt, as shown below.<br />
DSR Used means Teeny is sensitive to the DSR control line. DSR Unused<br />
means Teeny is not sensitive to the DSR control line. Each time you<br />
press the C key, the DSR usage changes.<br />
</li><br />
</ol><br />
<br />
When the desired DSR usage is shown, press ENTER to accept it and then<br />
type the entry shown below -- the laptop menu appears. This procedure<br />
is complete.<br />
<br />
<pre><br />
|DSR Used. [C]hange? | C changes DSR usage.<br />
|DSR Unused. [C]hange? | C changes DSR usage.<br />
|DSR Used. [C]hange? | C changes DSR usage.<br />
|DSR Unused. [C]hange? | ENTER accepts usage.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"><br />
<li>Using the "hmreq" value, type the entry shown below and then go<br />
back to step 3 of this procedure.<br />
</li><br />
</ol><br />
<br />
<pre><br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Beefs, Tips, Quirks and Humor ==<br />
<br />
<ol start="1"><li><br />
<p>I keep pressing the Q key but Teeny refuses to Quit.</p><br />
<br />
<p>Type Q Q to Quit -- that's the Q key, a space, and another Q key. Or,<br />
you could press the reset button. But, <BREAK> won't Quit Teeny.</p><br />
<br />
<p>Do you remember that Teeny "remembers" the previous file name? What?<br />
You say you just invoked Teeny, changed your mind and now want to quit<br />
but you haven't even typed any file name. Tough! The first file name<br />
that Teeny initially "remembers" is not something that you typed but is<br />
something that Teeny considers garbage as a file name for the Quit<br />
command. It may be garbage left by a prior operation or by the way<br />
Teeny was invoked (from the menu or from BASIC). Do you think the<br />
image of Teeny can be so teeny by having great gobs of initialization<br />
logic?</p><br />
</li><br />
<li><p>I press a function key and Teeny goes nuts and pukes and scrolls<br />
the screen.</p><br />
<br />
<p>NEWS FLASH -- When running Teeny from BASIC, don't press any function<br />
key. If you do, whatever string is assigned ("Files", "Load ", or God<br />
forbid "K MYFILE.DO") is fed to Teeny for consumption.</p><br />
</li><br />
<li> <br />
<p>Everything was going well. It was cool. I was a Loadin'/Savin'<br />
dude with Teeny -- I mean fast man -- really burnin' up the disk. But<br />
now, like... you know... I mean ... Teeny just sits there -- stoned<br />
-- don't do squat. What it is Bro?</p><br />
<p>The trouble is bad Karma and lack of Cosmic vibes. Really! I checked<br />
with my Guru and she had a vision and saw what went down with you man. <br />
Like... you know... I mean ... your disk drive tuned out man. She<br />
saw you take a smoke break. I know it was some good stuff 'cause she<br />
said you was gone for a quite a while. Your disk drive took a break<br />
too! Went trance-like in low power mode she said.</p><br />
<p>Flip the disk drive power switch off and on. Now reunite with Teeny,<br />
live long & prosper. Later dude!</p><br />
</li><br />
<li><p>I created file DAMNED.2B but Teeny won't Save it. What gives?</p><br />
<p>With some devilish application programs, you can make a file name<br />
extension that's damned to be straight from Hell -- repent. Actually,<br />
the disk drive is willing to Save your file but it's Teeny that doesn't<br />
like the file name extension. The BASIC interpreter's NAME AS command<br />
doesn't change file name extensions, so no help there. Another fine<br />
pickle you've got into Ollie.</p><br />
<p>To absolve your sin, go to BASIC and kill the file. Follow the Marine<br />
Corps motto "Kill 'em all and let God sort 'em out" for any other files<br />
in memory that have condemned file name extensions.</p><br />
</li><br />
<ol></div>Ronwiesenhttps://bitchin100.com/wiki/index.php?title=TEENY.CO_MANUAL&diff=524TEENY.CO MANUAL2008-12-05T15:34:07Z<p>Ronwiesen: /* Error Codes */</p>
<hr />
<div>==Orientation==<br />
<br />
File TEENY.CO has an image which is simply called "Teeny" throughout<br />
this manual. The name Teeny describes the amount of laptop memory that<br />
is needed to hold the image. For what it does in comparison to similar<br />
software, the name is appropriate -- the image is teeny! Although the<br />
Teeny image is internally specific by Tandy laptop Model type, its size<br />
and its usage are identical for all laptop models. Use of, and<br />
operational aspects of the Teeny image are thoroughly covered in this<br />
manual.<br />
<br />
Teeny gets used most by folks at the extremes of experience with Tandy<br />
laptops. Many neophytes use Teeny because it is in the public domain<br />
and easy to acquire. Many experts use Teeny because its image is so<br />
very small, and it has certain operational aspects that are not found<br />
in commercial software. Often a neophyte starts with Teeny, graduates<br />
to other software, and returns to Teeny usage at the expert stage.<br />
<br />
== Invocation Facts ==<br />
<br />
The image of Teeny is one contiguous block. Its size is 747. A block<br />
of 747 adjacent cells, within the HIMEM region of the laptop memory,<br />
holds the image during a session of its use. In regard to Tandy laptop<br />
operation, there is nothing abnormal about the image of Teeny -- it's<br />
quite conventional. If you are an expert, move on to the "Trigger File<br />
Creation" and "Invocation via Trigger File" sections of this manual<br />
which may be of some interest.<br />
<br />
The laptop menu shows a "Bytes free" quantity. Of the total amount of<br />
Random Access Memory (RAM) that is equipped in the laptop, "Bytes free"<br />
is just one portion among several portions. The "Bytes free" portion<br />
is the amount of RAM that is not (yet) consumed. The amount of RAM<br />
that is consumed is the total of quantities from all other portions.<br />
As consumption increases and decreases, the "Bytes free" quantity of<br />
RAM contracts and expands, respectively. Refer to "About RAM in the<br />
Model 10x laptops", at the Club 100 site, for complete detail.<br />
<br />
Regardless of how the Teeny image is invoked, the HIMEM region of RAM<br />
is where the action is at during a Teeny session. The image within the<br />
HIMEM region is what controls the laptop during a Teeny session. When<br />
or how the image gets placed within the HIMEM region is no longer<br />
pertinent once a Teeny session is under way. When you end a session of<br />
Teeny, the Teeny image no longer controls the laptop but it still is<br />
intact at 747 adjacent cells within the HIMEM region.<br />
<br />
From the laptop menu, there are two ways to invoke the Teeny image: via<br />
its laptop command file named TEENY.CO, or via a trigger file. Both of<br />
these files have a ".CO file descriptor" and an appended image. The<br />
.CO file descriptor describes the specific RAM addresses where the<br />
content of the appended image belongs, as well as where to start<br />
"execution" for an invocation. The descriptor size is 6, and an image<br />
content appends it.<br />
<br />
* TEENY.CO file -- file size is 753: 6 for the descriptor, and 747 for the entire content of the Teeny image. Invocation via TEENY.CO is recommended for a neophyte.<br />
* Trigger file -- file size is 7: 6 for the descriptor, and 1 for its content which is a vestige of the Teeny image. The trigger file consumes 746 less RAM than file TEENY.CO. Invocation via a trigger file is only recommended for experienced folks because of the unforgiving nature of trigger files.<br />
<br />
Each incarnation of laptop command file TEENY.CO is address-specific --<br />
each has a specific HIMEM requirement which must be met for successful<br />
invocation. The trigger file is created from some address-specific<br />
incarnation of file TEENY.CO, so it has an inherited HIMEM requirement.<br />
Whenever you attempt an invocation, the laptop inspects the .CO file<br />
descriptor to identify the HIMEM requirement. Based on the point of<br />
HIMEM, the laptop either allows or disallows the invocation.<br />
<br />
* Where the point of HIMEM indicates that address-specific cells are available within the HIMEM region, the laptop "loads" the cells with content from the appended image and then it relinquishes control to the "execution" cell -- a session of Teeny is under way. For the TEENY.CO file, 747 cells are loaded. For the trigger file, only 1 cell (the execution cell) is loaded and proper operation depends on remnant content (image of Teeny) in the adjacent block of 746 cells.<br />
* Where the point of HIMEM is "too high", the laptop disallows an invocation because the HIMEM requirement is not met. All cells in the HIMEM region remain as-is -- the laptop just issues a beep. A neophyte might think it is Teeny that issues the beep.<br />
<br />
If the HIMEM requirement of an incarnation is not met, there are two<br />
remedies. You set the point of HIMEM low enough for the requirement to<br />
be met, or you leave the point of HIMEM as-is and obtain a different<br />
incarnation (see the "TEENY.BA MANUAL" for detail) that has a HIMEM<br />
requirement which is met. The incarnation that allows the least<br />
consumption of RAM has a HIMEM requirement that is 747 less than the<br />
point of MAXRAM. The chart below lists this HIMEM requirement for the<br />
Model 10x and Model 200 laptops. <br />
<br />
<pre> <br />
MAXRAM-747 | Model 10x | Model 200 |<br />
HIMEM Requirement | 62213 | 60357 |<br />
</pre><br />
<br />
== Invocation via TEENY.CO File ==<br />
<br />
This procedure invokes Teeny by using laptop command file TEENY.CO and,<br />
in cases where it is necessary, this procedure also sets the point of<br />
HIMEM equal to the HIMEM requirement of TEENY.CO.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name TEENY.CO at the laptop menu.<br />
# Press the ENTER key. If the HIMEM requirement is met, the laptop relinquishes control to Teeny and its guide/prompt appears. A session of Teeny is under way -- this procedure is complete.<br>Where the HIMEM requirement is not met, the laptop issues a beep. Go on to step 3 of this procedure.<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop. Type the first entry exactly as shown -- five lines then appear as a result of this entry, and then "Ok" appears at the following line.<br>Study the result where 5-digit values appear in column 6 to column 10. Point of HIMEM is illustrated as "himem". HIMEM requirement is illustrated as "hmreq". A value that is 746 more than the HIMEM requirement is illustrated as "endat".<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |?" pH "HIMEM:LOADM"TEENY | and then press ENTER.<br />
| pH himem | Point of HIMEM<br />
|Top: hmreq | HIMEM requirement<br />
|End: endat | HIMEM requirement+746<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEAR0,hmreq:MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"> <br />
<li>Using the "hmreq" value, type the second entry -- the laptop menu<br />
appears. Go back to step 1 of this procedure.</li><br />
</ol><br />
<br />
== Trigger File Creation ==<br />
<br />
This procedure eliminates the TEENY.CO file and replaces it with a<br />
trigger file named Thmreq.CO where "hmreq" is the 5-digit HIMEM<br />
requirement. This procedure also sets the point of HIMEM equal to the<br />
HIMEM requirement.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# An entry is illustrated below as it appears on the 40-column screen of the laptop. Type the entry exactly as it is shown. As a result of this entry, three lines appear that show the "Top", "End", and "Exe" addresses of file TEENY.CO. The 5-digit value of Top (and Exe) appears in column 6 to column 10. This value is the HIMEM requirement, which is illustrated as "hmreq".<br />
<br />
<pre><br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY":T=PEEK(7300)*7-2821:R=PEEK(|<br />
|T+1)*256+PEEK(T):KILL"TEENY.CO":SAVEM"T"|<br />
|+MID$(STR$(R),2),R,R,R | and then press ENTER.<br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
</pre><br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 5. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"> <br />
<li>Type the entry shown below. The laptop menu appears. File name<br />
TEENY.CO is not found -- it has been eliminated. The trigger file name<br />
(e.g., T60357.CO) is found on the menu -- the five numerals of the name<br />
identify the HIMEM requirement of the trigger file.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |CLEAR0,R:MENU | and then press ENTER.<br />
<br />
</pre><br />
<br />
This procedure is complete. Move on to the "Invocation via Trigger<br />
File" section of this manual.<br />
<br />
<ol start="5"><br />
<li>Using the "hmreq" value, type the entry shown below and then go back to step 3 of this procedure.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Invocation via Trigger File ==<br />
<br />
This procedure invokes Teeny by using a trigger file or, in cases where<br />
it is necessary, this procedure eliminates a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name of the trigger file (e.g., T60357.CO).<br />
# Press the ENTER key. If the HIMEM requirement is met, the laptop relinquishes control to Teeny and its guide/prompt appears. A session of Teeny is under way -- this procedure is complete<br>Where the HIMEM requirement is not met, the laptop issues a beep. Go on to step 3 of this procedure.<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# An entry is illustrated below as it appears on the 40-column screen of the laptop. Type the entry exactly as it is shown. As a result of this entry, the point of HIMEM appears as a 5-digit value in column 2 to column 6 on a line by itself. The value for the point of HIMEM is illustrated as "himem". Directly below it, all of the file names are listed with three names per line starting at columns 1, 13 and 25.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |?HIMEM"pH":FILES | and then press ENTER.<br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | The trigger file name<br />
|Ok |<br />
</pre><br />
<br />
Look at the list of file names and find the trigger file name. A name<br />
of the Thmreq.CO form identifies a trigger file, where "hmreq" is its<br />
5-digit HIMEM requirement. If the point of HIMEM exceeds the HIMEM<br />
requirement of the trigger file by MORE THAN 1, go to step 7. If the<br />
point of HIMEM exceeds the HIMEM requirement of the trigger file by<br />
EXACTLY 1, go to step 6.<br />
<br />
<ol start="6"><li> <br />
Type the entry shown below -- the laptop menu appears. Go back to<br />
step 1 of this procedure.</li><br />
</ol><br />
<br />
<pre> <br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | exactly hmreq + 1<br />
|Ok |<br />
Type |CLEAR0,HIMEM-1:MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="7"><li><br />
Type the entry shown below -- the laptop menu appears. This<br />
eliminates the trigger file -- this procedure is complete.</li><br />
</ol><br />
<br />
<pre> <br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | more than hmreq + 1<br />
|Ok |<br />
Type |KILL"Thmreq.CO":MENU | and then press ENTER.<br />
</pre><br />
<br />
== Guide/Prompt ==<br />
<br />
Teeny issues a two-line guide/prompt: the upper line is the guide, the<br />
lower line is the prompt. These two lines are illustrated below<br />
exactly as they appear on the 40-column screen of the laptop.<br />
<br />
The guide line is only a visual aid. It identifies column positions of<br />
fields in the prompt line, and it has a notation (C=KLSQ) regarding<br />
arguments of the command field. The prompt line has two fields that<br />
are separated. The command field [C] is column 3. Column 4 is merely<br />
a separator [ ] between fields. The file name field [FFFFFF.XX] spans<br />
from column 5 to column 13.<br />
<br />
Teeny provides a blinking cursor (illustrated by _ below) on the prompt<br />
line at column 3, which is the command field. Use of the command field<br />
is mandatory -- you must type a command. You do not have to use the<br />
rest of the prompt line -- its use is optional.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> _ |<br />
</pre><br />
<br />
== Command Syntax ==<br />
<br />
Regarding arguments of the command field, the notation (C=KLSQ) shows<br />
an equal sign followed by four upper case letters: K, L, S, and Q. The<br />
equal sign denotes the query command. Upper case letters K, L, S, and<br />
Q correspond to the Kill, Load, Save, and Quit commands.<br />
<br />
Command syntax is the same for every command -- you may include a file<br />
name, but you are not compelled to do so. If you include a file name,<br />
then you may also append commentary after the file name -- Teeny<br />
ignores anything you type at column 14 and onward.<br />
<br />
Letter "P" is upper case, and letter "p" is lower case. For file names<br />
that you type, the case of each and every letter may be important. For<br />
example, LAPTOP.CO and LApTOP.CO and LAPTOp.CO are slightly different<br />
file names that may refer to three distinct files, or they may all<br />
refer to the same file. Teeny takes each character of a file name<br />
precisely the way you type it and, based on the command, treats the<br />
file name in different ways -- see "File Name Treatment" for detail.<br />
For convenience however, you can keep the CAPS LOCK key engaged during<br />
a Teeny session so that file names are always treated in the same way.<br />
<br />
There are some restrictions on the names of files. The laptop imposes<br />
the first restriction, Teeny enforces it, and it applies to every<br />
command. The first restriction is that the lead-character of a name<br />
can not be a numeral or certain special characters. For example, the<br />
name 4SCORE.DO is illegal. To make it compatible with as large a group<br />
of other masters (e.g., Floppy by Tandy, TS-DOS by Traveling Software)<br />
as practical, Teeny imposes the second restriction, which applies to<br />
the Kill, Load, and Save commands. This second restriction is that the<br />
lead-character of the file name extension must be one of three letters:<br />
B, C, or D. Other masters and Teeny use a convention where the<br />
lead-letter of the file name extension indicates the laptop file type.<br />
There are three file types: BASIC, Command, and ASCII. And the<br />
corresponding letters are: B for BASIC, C for Command, and D for ASCII.<br />
For a Load command with a file name such as WONDER.B4 for example,<br />
Teeny inserts the file content into that portion of laptop memory where<br />
BASIC file types belong.<br />
<br />
The slave device that is attached at the RS-232C port of the laptop (a<br />
Disk Drive, or a PC during a DeskLink session) maintains its disk<br />
directory of file names and file content within its media. Certain<br />
differences among various slave devices are noteworthy and offer useful<br />
operational potential -- see "Slave Device Nuance" for detail.<br />
<br />
See the illustration below. It shows an example for every command.<br />
Each example is a command which includes a file name. Note that the<br />
name included with the example Quit command is not legitimate for use<br />
with any of the other commands. Every example also includes commentary<br />
that begins at column 15. The file name and comment in each example<br />
form an explanation of what the command means. They are elaborate<br />
examples, yet you can use them as-is during a Teeny session because<br />
they are correct in their syntax!<br />
<br />
<pre><br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> = Wonder.B4 Does file exist at disk? | Syntax of query<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> K AtDisk.BA BASIC file erase at disk | Syntax of Kill<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> L Laptop.CO Command file into memory | Syntax of Load<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> S OnDisk.DO ASCII file onto the disk | Syntax of Save<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> Q meansQuit so Teeny session ends | Syntax of Quit<br />
</pre><br />
<br />
For a command (except for Quit command) where you include a file name,<br />
you must type the name so it aligns correctly in the file name field.<br />
Type one or more spaces if needed to pad a name so that the file name<br />
field is completely filled (type NAME .DO for a file named NAME.DO).<br />
<br />
== Command Action ==<br />
<br />
Teeny associates a file name with every command - even with the Quit<br />
command which produces no action except to end the Teeny session. The<br />
action by all the other commands is file name dependent, and the two<br />
restrictions on the names of files are pertinent.<br />
<br />
There are two places a file can exist: at the disk, or in the memory of<br />
the Tandy laptop. A file, of a specific name, either exists or does<br />
not exist. So there are four cases for you to consider with respect to<br />
any file name. For a specific name, a file is found:<br />
<br />
# nowhere (neither place)<br />
# one place, at the disk (not in memory)<br />
# one place, in memory (not at the disk)<br />
# both places<br />
<br />
The chart below summarizes the query, Kill, Load, and Save commands for<br />
all four cases. Below the chart, there is a paragraph for each command<br />
that explains its action. The terms "Identical file name" and<br />
"NORMALIZED file name" appear in these paragraphs to distinguish<br />
between different treatments that Teeny applies to file names. See<br />
"File Name Treatment" for the distinction.<br />
<br />
<pre> <br />
| nowhere | one place, | one place, | both places |<br />
| | AT THE DISK | IN MEMORY | |<br />
___ case #1 ___ ___ case #2 ___ ___ case #3 ___ ___ case #4 ___ <br />
query | "FF Err" | "SN Err" | "FF Err" | "SN Err" |<br />
| (at the disk) | Specific Name | (at the disk) | Specific Name |<br />
Kill | "FF Err" |Possible ERASE | "FF Err" |Possible ERASE |<br />
| (at the disk) | AT THE DISK | (at the disk) | AT THE DISK |<br />
Load | "FF Err" |Possible INSERT| "FF Err" | "AE Err" |<br />
| (at the disk) | IN MEMORY | (at the disk) | (in memory) |<br />
Save | "FF Err" | "AE Err" |Possible INSERT| "AE Err" |<br />
| (in memory) | (at the disk) | AT THE DISK | (at the disk) |<br />
</pre><br />
<br />
The action of the query command merely is to respond with an error. The query command ascertains extant of the Identical file name found AT THE DISK. There are two possible responses by the query command. If Teeny fails to find any file name AT THE DISK by the Identical file name (which is case #1 and also case #3), then the response "FF Err" is given. Otherwise at least one specific name is extant AT THE DISK that is recognized by the Identical file name (which is case #2 and case #4), and the response "SN Err" is given. See "Slave Device Nuance".<br />
<br />
The action of the Kill command is to erase a file of an Identical file<br />
name AT THE DISK. The action is possible for case #2 and case #4. For<br />
either of these cases, Teeny will erase the file AT THE DISK unless<br />
there is some condition (e.g., Write-Protected disk) that prevents the<br />
action. If the action is prevented, Teeny issues an error that is<br />
pertinent. For case #1 and case #3, Teeny issues "FF Err" because it<br />
fails to find the Identical file name AT THE DISK.<br />
<br />
The action of the Load command is to insert IN MEMORY a file, based on<br />
content found at disk. The action is possible for case #2 only. For<br />
this case, Teeny makes an exact copy of the content and assigns a<br />
NORMALIZED file name in the memory directory of the laptop unless there<br />
is some condition (e.g., not enough free memory) that prevents the<br />
action. If the action is prevented, Teeny issues an error that is<br />
pertinent. For case #1 and case #3, Teeny issues "FF Err" because it<br />
fails to find the Identical file name at the disk. For case #4, Teeny<br />
issues "AE Err" because it finds the NORMALIZED file name already is<br />
assigned in the memory directory.<br />
<br />
The action of the Save command is to insert AT DISK a file, based on<br />
content found in memory. The action is possible for case #3 only. For<br />
this case, Teeny makes an exact copy of the content and assigns an<br />
Identical name in the disk directory unless there is some condition<br />
(e.g., Write-Protected disk) that prevents the action. If the action<br />
is prevented, Teeny issues an error that is pertinent. See "Slave<br />
Device Nuance". For case #1, Teeny issues "FF Err" because it fails to<br />
find the NORMALIZED file name in the memory directory of the laptop.<br />
For case #2 and case #4, Teeny issues "AE Err" because it finds the<br />
Identical file name already is assigned in the disk directory.<br />
<br />
== Error Codes ==<br />
<br />
Teeny issues a 2-letter error code, such as "NM Err", if it encounters some condition or fault that prevents command action. The chart below lists each error code with its meaning, and indicates the relationship, if any, to each command: query, Kill, Load, Save, and Quit. Indicators "Disk" and "Memory" identify the place (i.e., at Disk or in Memory) where a condition is pertinent. The "**" indicator is used for error codes that have a clear meaning of place (e.g., Out of Memory), or have a generalized meaning.<br />
<br />
<pre> <br />
|________ Code and Meaning ________|query_|_Kill_|_Load_|_Save_|_Quit_|<br />
| NM NaMe illegal (e.g. 4SCORE.DO) | ** | ** | ** | ** | ** |<br />
| SN Specific Name found | Disk | | | | |<br />
| FF Fail to Find name | Disk | Disk | Disk |Memory| |<br />
| AE file Already Exists | | |Memory| Disk | |<br />
| ND No Disk media in drive | ** | ** | ** | ** | |<br />
| WP Write-Protected disk media | | ** | | ** | |<br />
| DF Drive directory Full | | | | ** | |<br />
| FL FuLL memory directory | | | ** | | |<br />
| OM Out of Memory (i.e. capacity) | | | ** | | | <br />
| NR RS-232 Not Ready (e.g. cable) | ** | ** | ** | ** | |<br />
| IO I/O fault (e.g. RS-232) | ** | ** | ** | ** | |<br />
| CM CoMmunication fault | ** | ** | ** | ** | |<br />
</pre><br />
<br />
The Load command can not overwrite a file in memory. You must Quit Teeny, kill the file in memory, then invoke Teeny again to load the file from disk. The example below shows the "discovery" that the file exists in memory, and the Quit of Teeny.<br />
<br />
<pre> <br />
> L NAME .DO<br />
AE Err (file Already Exists in memory)<br />
> Q<br />
</pre><br />
<br />
The 6-command example below shows a comedy of errors that finally<br />
overwrites a file at the disk. Only the first command includes a file<br />
name -- see "File Name Memory".<br />
<br />
<pre><br />
> S NAME .DO<br />
NR Err (plug in cable, power on drive)<br />
> S<br />
ND Err (insert disk)<br />
> S<br />
WP Err (remove disk write-protect)<br />
> S<br />
AE Err (file Already Exists at disk)<br />
> K<br />
> S<br />
</pre><br />
<br />
== File Name Memory ==<br />
<br />
Teeny remembers the last file name you typed. All commands need a file<br />
name and Teeny uses the remembered file name when you don't explicitly<br />
supply one. Even the Quit command needs a file name, but the name does<br />
not have to be legitimate. The 2-command example below overwrites a<br />
disk file.<br />
<br />
<pre><br />
> K NAME .DO<br />
> S<br />
</pre><br />
<br />
== File Name Treatment ==<br />
<br />
Teeny treats a file name two ways:<br />
<br />
* Identical -- exactly as typed by you<br />
* NORMALIZED -- so that all letters are upper case<br />
<br />
Mixed upper and lower case is allowed for file names at the disk<br />
directory of the slave device. A file identified by an Identical name<br />
at the disk directory is erased at disk, as a result of the Kill<br />
command. Likewise, a file inserted at disk, as a result of the Save<br />
command, gets an Identical name at the disk directory. For DeskLink,<br />
mixed case is not pertinent because the operating system of the PC<br />
treats mixed case as if it is all upper case. For a Disk Drive, mixed<br />
case is pertinent.<br />
<br />
All upper case is the norm for file names within the memory directory<br />
of the laptop. A file inserted in memory, as a result of the Load<br />
command, gets a NORMALIZED name in the memory directory of the laptop.<br />
<br />
The chart below shows the use of file name AnYmIx.Do in the query,<br />
Kill, Load, and Save commands. The Identical file name of AnYmIx.Do<br />
applies at the disk directory of the slave device for each of these<br />
commands. The NORMALIZED file name of ANYMIX.DO applies in the memory<br />
directory of the laptop for only the Load and Save commands.<br />
<br />
<pre> <br />
_______ Directory _______ <br />
__Command __| at Disk | in Memory |____ Overall action summary ____<br />
= AnYmIx.Do | Identical | | By AnYmIx.Do, query at disk.<br />
| | -- |<br />
K AnYmIx.Do | Identical | | By AnYmIx.Do, erase at disk.<br />
| | -- |<br />
L AnYmIx.Do | Identical | | Content of AnYmIx.Do at disk,<br />
| | NORMALIZED | insert for ANYMIX.DO in memory.<br />
S AnYmIx.Do | | NORMALIZED | Content of ANYMIX.DO in memory,<br />
| Identical | | insert for AnYmIx.Do at disk.<br />
</pre><br />
<br />
Where you use Teeny with a Disk Drive, you can use file names that have<br />
differences of letter case to your advantage. You can have content in<br />
memory under a NORMALIZED file name which you actively work with (e.g.,<br />
TEXT), while you have content at disk which reflects your prior<br />
activity under one or more Identical names.<br />
<br />
An example for media back-up purposes uses one Identical name where the<br />
last character is lower case, such as ACTIVE.Do. Use the S ACTIVE.DO<br />
and S ACTIVE.Do commands to save your active content, in duplicate, at<br />
the disk. Should the diskette media suffer from erosion (e.g., by some<br />
physical damage) there's some chance that one disk file is left intact.<br />
Ordinarily you use the L ACTIVE.DO command to insert the active content<br />
in memory under the NORMALIZED file name ACTIVE.DO. But you can resort<br />
to the L ACTIVE.Do command if the need arises.<br />
<br />
An example for archival purposes uses a series of Identical names. A<br />
series such as Series.do, SEries.do, SERies.do and so on can be used to<br />
represent some progressive activity. And a series such as sERIES.DO,<br />
seRIES.DO, serIES.DO and so on can be used to represent some regressive<br />
activity. The query command is very useful for "learning" the limits<br />
of an archival series after you "forgot" the limits.<br />
<br />
== Slave Device Nuance ==<br />
<br />
For the query command with a PC during a DeskLink session, the ? wild<br />
card character can be used within the file name extension. This forms<br />
a "file spec" which covers a range of specific file names. Note that<br />
the name portion is specific, and the extension portion is not<br />
specific. The chart below lists eight query commands for a name of WOW<br />
where each query has a different file spec. The chart assumes nine<br />
files of the name WOW are extant, and has a column for each extension<br />
of the name WOW. For each query, the indicator "met" identifies every<br />
file name that meets the file spec and thus contributes toward the<br />
response "SN Err" for Specific Name. The file spec with extension ??<br />
is global, so all of the nine files contribute toward the response.<br />
<br />
<pre> <br />
query & name| Files with a name of WOW exist, the Extensions are: |<br />
____________| .B | .B4 | .BA | .C | .C1 | .CO | .D | .D4 | .DO |<br />
= WOW .?? | met | met | met | met | met | met | met | met | met |<br />
= WOW .? | met | | | met | | | met | | |<br />
= WOW .B? | met | met | met | | | | | | |<br />
= WOW .C? | | | | met | met | met | | | |<br />
= WOW .D? | | | | | | | met | met | met |<br />
= WOW .?1 | | | | | met | | | | |<br />
= WOW .?4 | | met | | | | | | met | |<br />
= WOW .?O | | | | | | met | | | met |<br />
</pre><br />
<br />
For the Save command with a Disk Drive, there must be at least one file<br />
name slot available at the disk directory, and the directory must<br />
manifest enough capacity in terms of sectors at the media to insert<br />
(i.e., hold) the file content. Otherwise, the response "DF Err" for<br />
Drive directory Full is given. The chart below lists the quantity of<br />
file name slots, and the capacity and quantity of sectors for diskette<br />
media that is formatted by various Disk Drives.<br />
<br />
<pre> <br />
________ Disk Drive _________ _ File Name Slots __ _Capacity/Sectors_ <br />
| Brother Disk Drive FB100 | 40 | 101120 / 79 |<br />
| Purple Computing Disk Drive | 40 | 101120 / 79 |<br />
| Tandy Portable Disk Drive | 40 | 101120 / 79 |<br />
| Tandy Portable Disk Drive 2 | 40 bank0, 40 bank1 | 202240 / 158 |<br />
</pre><br />
<br />
== Diskette Formatter ==<br />
<br />
Teeny does not have a command to format a diskette in a Disk Drive. If<br />
it did, the image of Teeny would not be so teeny! Make your own BASIC<br />
program and use it on occasions when you want to format some diskettes.<br />
<br />
Just invoke the BASIC interpreter at the laptop menu and then type four<br />
entries, the last of which ends the interpretation session. The four<br />
entries are illustrated below exactly as they appear on the 40-column<br />
screen of the laptop as you type them. Note that the second entry is<br />
very long and it wraps into seven lines on the screen.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Type |NEW | and then press ENTER.<br />
|Ok |<br />
Type |0CLEAR1:IFLEN(INKEY$)THENRUNELSE?"FORMAT|<br />
| [Y]es";:IFNOTINPUT$(1)="Y"THENMENUELSE?|<br />
|:MAXFILES=1:OPEN"COM:98N1DNN"FOROUTPUTAS|<br />
|1:?#1,"ZZ"CHR$(6)CHR$(0)CHR$(249);:CLOSE|<br />
|:M=PEEK(919):FORI=0TO0STEP0:IFSGN(M)XORS|<br />
|GN(INP(179+M)AND32+4*M)THENBEEP:RUNELSEN|<br />
|EXT | and then press ENTER.<br />
Type |SAVE"DF21 | and then press ENTER.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
The third entry assigns DF21.BA as the file name of this BASIC program.<br />
After the fourth entry the laptop menu appears and the name DF21.BA can<br />
be seen. This BASIC program is not specific by Tandy laptop Model type<br />
so it can be used by all laptop models (200 or 10x). Use it to format<br />
diskette media placed in the:<br />
<br />
* Purple Computing Disk Drive -- with DIP switches set for 19200 Baud<br />
* Tandy Portable Disk Drive -- with DIP switches set for 19200 Baud<br />
* Tandy Portable Disk Drive 2<br />
<br />
== Change Working Speed ==<br />
<br />
TEENY.EXE casts Teeny with a working speed of either 19200 Baud or 9600<br />
Baud (see the "TEENY.EXE MANUAL" for detail). Where it isn't practical<br />
to recast Teeny (e.g., no PC available), this procedure can be used as<br />
an expedient. It changes the working speed of Teeny. This procedure<br />
may be used with laptop command file TEENY.CO or with a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop: one for laptop command file TEENY.CO, one for a trigger file. Type the appropriate entry exactly as it is shown.<br />
<br />
<pre> <br />
1111111111222222222233333333334 (for TEENY.CO file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY | and then press ENTER.<br />
<br />
1111111111222222222233333333334 (for trigger file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"Thmreq | and then press ENTER.<br />
</pre><br />
<br />
As a result of the entry above, three lines appear that show the "Top",<br />
"End", and "Exe" addresses of the file. The 5-digit value of Top (and<br />
Exe) appears in column 6 to column 10. This value is the HIMEM<br />
requirement, which is illustrated as "hmreq".<br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 6. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"><br />
<li>Carefully type the long entry shown below.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |T=PEEK(7300)*7-2821:R=PEEK(T+1)*256+PEEK|<br />
|(T):C=R+213:IFPEEK(C+1)-56THENMENUELSEFO|<br />
|RI=0TO0STEP0:S=PEEK(C):?MID$("NormalSLOW|<br />
|",82-1.08^S,6)" working speed. [C]hange?|<br />
|":IFINSTR("cC",INPUT$(1))THENPOKEC,1XORS|<br />
|:NEXTELSEIFPEEK(T+2)-1THENSAVEM"TEENY",R|<br />
|,R+746,R | and then press ENTER.<br />
</pre><br />
<br />
If the screen shows either the "Normal working speed. [C]hange?" or<br />
"SLOW working speed. [C]hange?" message, all is well -- go to step 5.<br />
<br />
If the screen shows only the " working speed. [C]hange?" message, the<br />
image of Teeny is not in place -- go back to step 3.<br />
<br />
If the laptop menu appears or if an Error message appears (e.g., FC<br />
Error), something is wrong. Likely, the entry was incorrectly typed --<br />
go back to step 1 (laptop menu) or to step 3 (Error message).<br />
<br />
<ol start="5"><br />
<li>The working speed of Teeny is shown at the screen along with the<br />
"[C]hange?" prompt, as shown below. Normal speed is 19200 Baud. SLOW<br />
speed is 9600 Baud. Each time you press the C key, the working speed<br />
changes.<br><br />
When the desired working speed is shown, press ENTER to accept it and<br />
then type the entry shown below -- the laptop menu appears. This<br />
procedure is complete.<br />
</li><br />
</ol><br />
<br />
<pre> <br />
|Normal working speed. [C]hange? | C changes the speed.<br />
|SLOW working speed. [C]hange? | C changes the speed.<br />
|Normal working speed. [C]hange? | C changes the speed.<br />
|SLOW working speed. [C]hange? | ENTER accepts speed.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"><br />
<li><br />
Using the "hmreq" value, type the entry shown below and then go<br />
back to step 3 of this procedure.<br />
</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Change DSR Sensitivity ==<br />
<br />
TEENY.EXE casts Teeny so that it either is sensitive to the DSR control<br />
line or is not sensitive to the DSR control line (see the "TEENY.EXE<br />
MANUAL" for detail). Where a Nul-modem cable is not appropriate to the<br />
DSR usage of Teeny (e.g., DSR control line not connected while there is<br />
sensitivity to the DSR control line by Teeny) and it isn't practical to<br />
recast Teeny (e.g., no PC available), this procedure can be used as an<br />
expedient. It changes the DSR usage of Teeny. This procedure may be<br />
used with laptop command file TEENY.CO or with a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop: one for laptop command file TEENY.CO, one for a trigger file. Type the appropriate entry exactly as it is shown.<br />
<br />
<pre> <br />
1111111111222222222233333333334 (for TEENY.CO file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY | and then press ENTER.<br />
<br />
1111111111222222222233333333334 (for trigger file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"Thmreq | and then press ENTER.<br />
</pre><br />
<br />
As a result of the entry above, three lines appear that show the "Top",<br />
"End", and "Exe" addresses of the file. The 5-digit value of Top (and<br />
Exe) appears in column 6 to column 10. This value is the HIMEM<br />
requirement, which is illustrated as "hmreq".<br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 6. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"><br />
<li>Carefully type the long entry shown below.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |T=PEEK(7300)*7-2821:R=PEEK(T+1)*256+PEEK|<br />
|(T):C=R+572-341*SGN(91-T/-31):IFPEEK(C+1|<br />
|)-4THENMENUELSEFORI=0TO0STEP0:S=PEEK(C):|<br />
|?"DSR U"MID$("nu",SAND5)"sed. [C]hange?"|<br />
|:IFINSTR("cC",INPUT$(1))THENPOKEC,215XOR|<br />
|S:NEXTELSEIFPEEK(T+2)-1THENSAVEM"TEENY",|<br />
|R,R+746,R | and then press ENTER.<br />
</pre><br />
<br />
If the screen shows either the "DSR Used. [C]hange?" or "DSR Unused.<br />
[C]hange?" message, all is well -- go to step 5.<br />
<br />
If the laptop menu appears or if an Error message appears (e.g., FC<br />
Error), something is wrong. Likely, the entry was incorrectly typed --<br />
go back to step 1 (laptop menu) or to step 3 (Error message).<br />
<br />
<ol start="5"><br />
<li>The sensitivity to the DSR control line by Teeny is shown at the<br />
screen as DSR usage along with the "[C]hange?" prompt, as shown below.<br />
DSR Used means Teeny is sensitive to the DSR control line. DSR Unused<br />
means Teeny is not sensitive to the DSR control line. Each time you<br />
press the C key, the DSR usage changes.<br />
</li><br />
</ol><br />
<br />
When the desired DSR usage is shown, press ENTER to accept it and then<br />
type the entry shown below -- the laptop menu appears. This procedure<br />
is complete.<br />
<br />
<pre><br />
|DSR Used. [C]hange? | C changes DSR usage.<br />
|DSR Unused. [C]hange? | C changes DSR usage.<br />
|DSR Used. [C]hange? | C changes DSR usage.<br />
|DSR Unused. [C]hange? | ENTER accepts usage.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"><br />
<li>Using the "hmreq" value, type the entry shown below and then go<br />
back to step 3 of this procedure.<br />
</li><br />
</ol><br />
<br />
<pre><br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Beefs, Tips, Quirks and Humor ==<br />
<br />
<ol start="1"><li><br />
<p>I keep pressing the Q key but Teeny refuses to Quit.</p><br />
<br />
<p>Type Q Q to Quit -- that's the Q key, a space, and another Q key. Or,<br />
you could press the reset button. But, <BREAK> won't Quit Teeny.</p><br />
<br />
<p>Do you remember that Teeny "remembers" the previous file name? What?<br />
You say you just invoked Teeny, changed your mind and now want to quit<br />
but you haven't even typed any file name. Tough! The first file name<br />
that Teeny initially "remembers" is not something that you typed but is<br />
something that Teeny considers garbage as a file name for the Quit<br />
command. It may be garbage left by a prior operation or by the way<br />
Teeny was invoked (from the menu or from BASIC). Do you think the<br />
image of Teeny can be so teeny by having great gobs of initialization<br />
logic?</p><br />
</li><br />
<li><p>I press a function key and Teeny goes nuts and pukes and scrolls<br />
the screen</p><br />
<br />
<p>NEWS FLASH -- When running Teeny from BASIC, don't press any function<br />
key. If you do, whatever string is assigned ("Files", "Load ", or God<br />
forbid "K MYFILE.DO") is fed to Teeny for consumption.</p><br />
</li><br />
<li> <br />
<p>Everything was going well. It was cool. I was a Loadin'/Savin'<br />
dude with Teeny -- I mean fast man -- really burnin' up the disk. But<br />
now, like... you know... I mean ... Teeny just sits there -- stoned<br />
-- don't do squat. What it is Bro?</p><br />
<p>The trouble is bad Karma and lack of Cosmic vibes. Really! I checked<br />
with my Guru and she had a vision and saw what went down with you man. <br />
Like... you know... I mean ... your disk drive tuned out man. She<br />
saw you take a smoke break. I know it was some good stuff 'cause she<br />
said you was gone for a quite a while. Your disk drive took a break<br />
too! Went trance-like in low power mode she said.</p><br />
<p>Flip the disk drive power switch off and on. Now reunite with Teeny,<br />
live long & prosper. Later dude!</p><br />
</li><br />
<li><p>I created file DAMNED.2B but Teeny won't Save it. What gives?</p><br />
<p>With some devilish application programs, you can make a file name<br />
extension that's damned to be straight from Hell -- repent. Actually,<br />
the disk drive is willing to Save your file but it's Teeny that doesn't<br />
like the file name extension. The BASIC interpreter's NAME AS command<br />
doesn't change file name extensions, so no help there. Another fine<br />
pickle you've got into Ollie.</p><br />
<p>To absolve your sin, go to BASIC and kill the file. Follow the Marine<br />
Corps motto "Kill 'em all and let God sort 'em out" for any other files<br />
in memory that have condemned file name extensions.</p><br />
</li><br />
<ol></div>Ronwiesenhttps://bitchin100.com/wiki/index.php?title=TEENY.CO_MANUAL&diff=523TEENY.CO MANUAL2008-12-05T15:21:10Z<p>Ronwiesen: </p>
<hr />
<div>==Orientation==<br />
<br />
File TEENY.CO has an image which is simply called "Teeny" throughout<br />
this manual. The name Teeny describes the amount of laptop memory that<br />
is needed to hold the image. For what it does in comparison to similar<br />
software, the name is appropriate -- the image is teeny! Although the<br />
Teeny image is internally specific by Tandy laptop Model type, its size<br />
and its usage are identical for all laptop models. Use of, and<br />
operational aspects of the Teeny image are thoroughly covered in this<br />
manual.<br />
<br />
Teeny gets used most by folks at the extremes of experience with Tandy<br />
laptops. Many neophytes use Teeny because it is in the public domain<br />
and easy to acquire. Many experts use Teeny because its image is so<br />
very small, and it has certain operational aspects that are not found<br />
in commercial software. Often a neophyte starts with Teeny, graduates<br />
to other software, and returns to Teeny usage at the expert stage.<br />
<br />
== Invocation Facts ==<br />
<br />
The image of Teeny is one contiguous block. Its size is 747. A block<br />
of 747 adjacent cells, within the HIMEM region of the laptop memory,<br />
holds the image during a session of its use. In regard to Tandy laptop<br />
operation, there is nothing abnormal about the image of Teeny -- it's<br />
quite conventional. If you are an expert, move on to the "Trigger File<br />
Creation" and "Invocation via Trigger File" sections of this manual<br />
which may be of some interest.<br />
<br />
The laptop menu shows a "Bytes free" quantity. Of the total amount of<br />
Random Access Memory (RAM) that is equipped in the laptop, "Bytes free"<br />
is just one portion among several portions. The "Bytes free" portion<br />
is the amount of RAM that is not (yet) consumed. The amount of RAM<br />
that is consumed is the total of quantities from all other portions.<br />
As consumption increases and decreases, the "Bytes free" quantity of<br />
RAM contracts and expands, respectively. Refer to "About RAM in the<br />
Model 10x laptops", at the Club 100 site, for complete detail.<br />
<br />
Regardless of how the Teeny image is invoked, the HIMEM region of RAM<br />
is where the action is at during a Teeny session. The image within the<br />
HIMEM region is what controls the laptop during a Teeny session. When<br />
or how the image gets placed within the HIMEM region is no longer<br />
pertinent once a Teeny session is under way. When you end a session of<br />
Teeny, the Teeny image no longer controls the laptop but it still is<br />
intact at 747 adjacent cells within the HIMEM region.<br />
<br />
From the laptop menu, there are two ways to invoke the Teeny image: via<br />
its laptop command file named TEENY.CO, or via a trigger file. Both of<br />
these files have a ".CO file descriptor" and an appended image. The<br />
.CO file descriptor describes the specific RAM addresses where the<br />
content of the appended image belongs, as well as where to start<br />
"execution" for an invocation. The descriptor size is 6, and an image<br />
content appends it.<br />
<br />
* TEENY.CO file -- file size is 753: 6 for the descriptor, and 747 for the entire content of the Teeny image. Invocation via TEENY.CO is recommended for a neophyte.<br />
* Trigger file -- file size is 7: 6 for the descriptor, and 1 for its content which is a vestige of the Teeny image. The trigger file consumes 746 less RAM than file TEENY.CO. Invocation via a trigger file is only recommended for experienced folks because of the unforgiving nature of trigger files.<br />
<br />
Each incarnation of laptop command file TEENY.CO is address-specific --<br />
each has a specific HIMEM requirement which must be met for successful<br />
invocation. The trigger file is created from some address-specific<br />
incarnation of file TEENY.CO, so it has an inherited HIMEM requirement.<br />
Whenever you attempt an invocation, the laptop inspects the .CO file<br />
descriptor to identify the HIMEM requirement. Based on the point of<br />
HIMEM, the laptop either allows or disallows the invocation.<br />
<br />
* Where the point of HIMEM indicates that address-specific cells are available within the HIMEM region, the laptop "loads" the cells with content from the appended image and then it relinquishes control to the "execution" cell -- a session of Teeny is under way. For the TEENY.CO file, 747 cells are loaded. For the trigger file, only 1 cell (the execution cell) is loaded and proper operation depends on remnant content (image of Teeny) in the adjacent block of 746 cells.<br />
* Where the point of HIMEM is "too high", the laptop disallows an invocation because the HIMEM requirement is not met. All cells in the HIMEM region remain as-is -- the laptop just issues a beep. A neophyte might think it is Teeny that issues the beep.<br />
<br />
If the HIMEM requirement of an incarnation is not met, there are two<br />
remedies. You set the point of HIMEM low enough for the requirement to<br />
be met, or you leave the point of HIMEM as-is and obtain a different<br />
incarnation (see the "TEENY.BA MANUAL" for detail) that has a HIMEM<br />
requirement which is met. The incarnation that allows the least<br />
consumption of RAM has a HIMEM requirement that is 747 less than the<br />
point of MAXRAM. The chart below lists this HIMEM requirement for the<br />
Model 10x and Model 200 laptops. <br />
<br />
<pre> <br />
MAXRAM-747 | Model 10x | Model 200 |<br />
HIMEM Requirement | 62213 | 60357 |<br />
</pre><br />
<br />
== Invocation via TEENY.CO File ==<br />
<br />
This procedure invokes Teeny by using laptop command file TEENY.CO and,<br />
in cases where it is necessary, this procedure also sets the point of<br />
HIMEM equal to the HIMEM requirement of TEENY.CO.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name TEENY.CO at the laptop menu.<br />
# Press the ENTER key. If the HIMEM requirement is met, the laptop relinquishes control to Teeny and its guide/prompt appears. A session of Teeny is under way -- this procedure is complete.<br>Where the HIMEM requirement is not met, the laptop issues a beep. Go on to step 3 of this procedure.<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop. Type the first entry exactly as shown -- five lines then appear as a result of this entry, and then "Ok" appears at the following line.<br>Study the result where 5-digit values appear in column 6 to column 10. Point of HIMEM is illustrated as "himem". HIMEM requirement is illustrated as "hmreq". A value that is 746 more than the HIMEM requirement is illustrated as "endat".<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |?" pH "HIMEM:LOADM"TEENY | and then press ENTER.<br />
| pH himem | Point of HIMEM<br />
|Top: hmreq | HIMEM requirement<br />
|End: endat | HIMEM requirement+746<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEAR0,hmreq:MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"> <br />
<li>Using the "hmreq" value, type the second entry -- the laptop menu<br />
appears. Go back to step 1 of this procedure.</li><br />
</ol><br />
<br />
== Trigger File Creation ==<br />
<br />
This procedure eliminates the TEENY.CO file and replaces it with a<br />
trigger file named Thmreq.CO where "hmreq" is the 5-digit HIMEM<br />
requirement. This procedure also sets the point of HIMEM equal to the<br />
HIMEM requirement.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# An entry is illustrated below as it appears on the 40-column screen of the laptop. Type the entry exactly as it is shown. As a result of this entry, three lines appear that show the "Top", "End", and "Exe" addresses of file TEENY.CO. The 5-digit value of Top (and Exe) appears in column 6 to column 10. This value is the HIMEM requirement, which is illustrated as "hmreq".<br />
<br />
<pre><br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY":T=PEEK(7300)*7-2821:R=PEEK(|<br />
|T+1)*256+PEEK(T):KILL"TEENY.CO":SAVEM"T"|<br />
|+MID$(STR$(R),2),R,R,R | and then press ENTER.<br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
</pre><br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 5. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"> <br />
<li>Type the entry shown below. The laptop menu appears. File name<br />
TEENY.CO is not found -- it has been eliminated. The trigger file name<br />
(e.g., T60357.CO) is found on the menu -- the five numerals of the name<br />
identify the HIMEM requirement of the trigger file.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |CLEAR0,R:MENU | and then press ENTER.<br />
<br />
</pre><br />
<br />
This procedure is complete. Move on to the "Invocation via Trigger<br />
File" section of this manual.<br />
<br />
<ol start="5"><br />
<li>Using the "hmreq" value, type the entry shown below and then go back to step 3 of this procedure.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Invocation via Trigger File ==<br />
<br />
This procedure invokes Teeny by using a trigger file or, in cases where<br />
it is necessary, this procedure eliminates a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name of the trigger file (e.g., T60357.CO).<br />
# Press the ENTER key. If the HIMEM requirement is met, the laptop relinquishes control to Teeny and its guide/prompt appears. A session of Teeny is under way -- this procedure is complete<br>Where the HIMEM requirement is not met, the laptop issues a beep. Go on to step 3 of this procedure.<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# An entry is illustrated below as it appears on the 40-column screen of the laptop. Type the entry exactly as it is shown. As a result of this entry, the point of HIMEM appears as a 5-digit value in column 2 to column 6 on a line by itself. The value for the point of HIMEM is illustrated as "himem". Directly below it, all of the file names are listed with three names per line starting at columns 1, 13 and 25.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |?HIMEM"pH":FILES | and then press ENTER.<br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | The trigger file name<br />
|Ok |<br />
</pre><br />
<br />
Look at the list of file names and find the trigger file name. A name<br />
of the Thmreq.CO form identifies a trigger file, where "hmreq" is its<br />
5-digit HIMEM requirement. If the point of HIMEM exceeds the HIMEM<br />
requirement of the trigger file by MORE THAN 1, go to step 7. If the<br />
point of HIMEM exceeds the HIMEM requirement of the trigger file by<br />
EXACTLY 1, go to step 6.<br />
<br />
<ol start="6"><li> <br />
Type the entry shown below -- the laptop menu appears. Go back to<br />
step 1 of this procedure.</li><br />
</ol><br />
<br />
<pre> <br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | exactly hmreq + 1<br />
|Ok |<br />
Type |CLEAR0,HIMEM-1:MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="7"><li><br />
Type the entry shown below -- the laptop menu appears. This<br />
eliminates the trigger file -- this procedure is complete.</li><br />
</ol><br />
<br />
<pre> <br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | more than hmreq + 1<br />
|Ok |<br />
Type |KILL"Thmreq.CO":MENU | and then press ENTER.<br />
</pre><br />
<br />
== Guide/Prompt ==<br />
<br />
Teeny issues a two-line guide/prompt: the upper line is the guide, the<br />
lower line is the prompt. These two lines are illustrated below<br />
exactly as they appear on the 40-column screen of the laptop.<br />
<br />
The guide line is only a visual aid. It identifies column positions of<br />
fields in the prompt line, and it has a notation (C=KLSQ) regarding<br />
arguments of the command field. The prompt line has two fields that<br />
are separated. The command field [C] is column 3. Column 4 is merely<br />
a separator [ ] between fields. The file name field [FFFFFF.XX] spans<br />
from column 5 to column 13.<br />
<br />
Teeny provides a blinking cursor (illustrated by _ below) on the prompt<br />
line at column 3, which is the command field. Use of the command field<br />
is mandatory -- you must type a command. You do not have to use the<br />
rest of the prompt line -- its use is optional.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> _ |<br />
</pre><br />
<br />
== Command Syntax ==<br />
<br />
Regarding arguments of the command field, the notation (C=KLSQ) shows<br />
an equal sign followed by four upper case letters: K, L, S, and Q. The<br />
equal sign denotes the query command. Upper case letters K, L, S, and<br />
Q correspond to the Kill, Load, Save, and Quit commands.<br />
<br />
Command syntax is the same for every command -- you may include a file<br />
name, but you are not compelled to do so. If you include a file name,<br />
then you may also append commentary after the file name -- Teeny<br />
ignores anything you type at column 14 and onward.<br />
<br />
Letter "P" is upper case, and letter "p" is lower case. For file names<br />
that you type, the case of each and every letter may be important. For<br />
example, LAPTOP.CO and LApTOP.CO and LAPTOp.CO are slightly different<br />
file names that may refer to three distinct files, or they may all<br />
refer to the same file. Teeny takes each character of a file name<br />
precisely the way you type it and, based on the command, treats the<br />
file name in different ways -- see "File Name Treatment" for detail.<br />
For convenience however, you can keep the CAPS LOCK key engaged during<br />
a Teeny session so that file names are always treated in the same way.<br />
<br />
There are some restrictions on the names of files. The laptop imposes<br />
the first restriction, Teeny enforces it, and it applies to every<br />
command. The first restriction is that the lead-character of a name<br />
can not be a numeral or certain special characters. For example, the<br />
name 4SCORE.DO is illegal. To make it compatible with as large a group<br />
of other masters (e.g., Floppy by Tandy, TS-DOS by Traveling Software)<br />
as practical, Teeny imposes the second restriction, which applies to<br />
the Kill, Load, and Save commands. This second restriction is that the<br />
lead-character of the file name extension must be one of three letters:<br />
B, C, or D. Other masters and Teeny use a convention where the<br />
lead-letter of the file name extension indicates the laptop file type.<br />
There are three file types: BASIC, Command, and ASCII. And the<br />
corresponding letters are: B for BASIC, C for Command, and D for ASCII.<br />
For a Load command with a file name such as WONDER.B4 for example,<br />
Teeny inserts the file content into that portion of laptop memory where<br />
BASIC file types belong.<br />
<br />
The slave device that is attached at the RS-232C port of the laptop (a<br />
Disk Drive, or a PC during a DeskLink session) maintains its disk<br />
directory of file names and file content within its media. Certain<br />
differences among various slave devices are noteworthy and offer useful<br />
operational potential -- see "Slave Device Nuance" for detail.<br />
<br />
See the illustration below. It shows an example for every command.<br />
Each example is a command which includes a file name. Note that the<br />
name included with the example Quit command is not legitimate for use<br />
with any of the other commands. Every example also includes commentary<br />
that begins at column 15. The file name and comment in each example<br />
form an explanation of what the command means. They are elaborate<br />
examples, yet you can use them as-is during a Teeny session because<br />
they are correct in their syntax!<br />
<br />
<pre><br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> = Wonder.B4 Does file exist at disk? | Syntax of query<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> K AtDisk.BA BASIC file erase at disk | Syntax of Kill<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> L Laptop.CO Command file into memory | Syntax of Load<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> S OnDisk.DO ASCII file onto the disk | Syntax of Save<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> Q meansQuit so Teeny session ends | Syntax of Quit<br />
</pre><br />
<br />
For a command (except for Quit command) where you include a file name,<br />
you must type the name so it aligns correctly in the file name field.<br />
Type one or more spaces if needed to pad a name so that the file name<br />
field is completely filled (type NAME .DO for a file named NAME.DO).<br />
<br />
== Command Action ==<br />
<br />
Teeny associates a file name with every command - even with the Quit<br />
command which produces no action except to end the Teeny session. The<br />
action by all the other commands is file name dependent, and the two<br />
restrictions on the names of files are pertinent.<br />
<br />
There are two places a file can exist: at the disk, or in the memory of<br />
the Tandy laptop. A file, of a specific name, either exists or does<br />
not exist. So there are four cases for you to consider with respect to<br />
any file name. For a specific name, a file is found:<br />
<br />
# nowhere (neither place)<br />
# one place, at the disk (not in memory)<br />
# one place, in memory (not at the disk)<br />
# both places<br />
<br />
The chart below summarizes the query, Kill, Load, and Save commands for<br />
all four cases. Below the chart, there is a paragraph for each command<br />
that explains its action. The terms "Identical file name" and<br />
"NORMALIZED file name" appear in these paragraphs to distinguish<br />
between different treatments that Teeny applies to file names. See<br />
"File Name Treatment" for the distinction.<br />
<br />
<pre> <br />
| nowhere | one place, | one place, | both places |<br />
| | AT THE DISK | IN MEMORY | |<br />
___ case #1 ___ ___ case #2 ___ ___ case #3 ___ ___ case #4 ___ <br />
query | "FF Err" | "SN Err" | "FF Err" | "SN Err" |<br />
| (at the disk) | Specific Name | (at the disk) | Specific Name |<br />
Kill | "FF Err" |Possible ERASE | "FF Err" |Possible ERASE |<br />
| (at the disk) | AT THE DISK | (at the disk) | AT THE DISK |<br />
Load | "FF Err" |Possible INSERT| "FF Err" | "AE Err" |<br />
| (at the disk) | IN MEMORY | (at the disk) | (in memory) |<br />
Save | "FF Err" | "AE Err" |Possible INSERT| "AE Err" |<br />
| (in memory) | (at the disk) | AT THE DISK | (at the disk) |<br />
</pre><br />
<br />
The action of the query command merely is to respond with an error. The query command ascertains extant of the Identical file name found AT THE DISK. There are two possible responses by the query command. If Teeny fails to find any file name AT THE DISK by the Identical file name (which is case #1 and also case #3), then the response "FF Err" is given. Otherwise at least one specific name is extant AT THE DISK that is recognized by the Identical file name (which is case #2 and case #4), and the response "SN Err" is given. See "Slave Device Nuance".<br />
<br />
The action of the Kill command is to erase a file of an Identical file<br />
name AT THE DISK. The action is possible for case #2 and case #4. For<br />
either of these cases, Teeny will erase the file AT THE DISK unless<br />
there is some condition (e.g., Write-Protected disk) that prevents the<br />
action. If the action is prevented, Teeny issues an error that is<br />
pertinent. For case #1 and case #3, Teeny issues "FF Err" because it<br />
fails to find the Identical file name AT THE DISK.<br />
<br />
The action of the Load command is to insert IN MEMORY a file, based on<br />
content found at disk. The action is possible for case #2 only. For<br />
this case, Teeny makes an exact copy of the content and assigns a<br />
NORMALIZED file name in the memory directory of the laptop unless there<br />
is some condition (e.g., not enough free memory) that prevents the<br />
action. If the action is prevented, Teeny issues an error that is<br />
pertinent. For case #1 and case #3, Teeny issues "FF Err" because it<br />
fails to find the Identical file name at the disk. For case #4, Teeny<br />
issues "AE Err" because it finds the NORMALIZED file name already is<br />
assigned in the memory directory.<br />
<br />
The action of the Save command is to insert AT DISK a file, based on<br />
content found in memory. The action is possible for case #3 only. For<br />
this case, Teeny makes an exact copy of the content and assigns an<br />
Identical name in the disk directory unless there is some condition<br />
(e.g., Write-Protected disk) that prevents the action. If the action<br />
is prevented, Teeny issues an error that is pertinent. See "Slave<br />
Device Nuance". For case #1, Teeny issues "FF Err" because it fails to<br />
find the NORMALIZED file name in the memory directory of the laptop.<br />
For case #2 and case #4, Teeny issues "AE Err" because it finds the<br />
Identical file name already is assigned in the disk directory.<br />
<br />
== Error Codes ==<br />
<br />
Teeny issues a 2-letter error code, such as "NM Err", if it encounters<br />
some condition or fault that prevents command action. The chart below<br />
lists each error code with its meaning, and indicates the relationship,<br />
if any, to each command: query, Kill, Load, Save, and Quit. Indicators<br />
"Disk" and "Memory" identify the place (i.e., at Disk or in Memory)<br />
where a condition is pertinent. The "**" indicator is used for error<br />
codes that have a clear meaning of place (e.g., Out of Memory), or have<br />
a generalized meaning.<br />
<br />
<pre> <br />
|________ Code and Meaning ________|query_|_Kill_|_Load_|_Save_|_Quit_|<br />
| NM NaMe illegal (e.g. 4SCORE.DO) | ** | ** | ** | ** | ** |<br />
| SN Specific Name found | Disk | | | | |<br />
| FF Fail to Find name | Disk | Disk | Disk |Memory| |<br />
| AE file Already Exists | | |Memory| Disk | |<br />
| ND No Disk media in drive | ** | ** | ** | ** | |<br />
| WP Write-Protected disk media | | ** | | ** | |<br />
| DF Drive directory Full | | | | ** | |<br />
| FL FuLL memory directory | | | ** | | |<br />
| OM Out of Memory (i.e. capacity) | | | ** | | | <br />
| NR RS-232 Not Ready (e.g. cable) | ** | ** | ** | ** | |<br />
| IO I/O fault (e.g. RS-232) | ** | ** | ** | ** | |<br />
| CM CoMmunication fault | ** | ** | ** | ** | |<br />
</pre><br />
<br />
The Load command can not overwrite a file in memory. You must Quit<br />
Teeny, kill the file in memory, then invoke Teeny again to load the<br />
file from disk. The example below shows the "discovery" that the file<br />
exists in memory, and the Quit of Teeny.<br />
<br />
<pre> <br />
> L NAME .DO<br />
AE Err (file Already Exists in memory)<br />
> Q<br />
</pre><br />
<br />
The 6-command example below shows a comedy of errors that finally<br />
overwrites a file at the disk. Only the first command includes a file<br />
name -- see "File Name Memory".<br />
<br />
<pre><br />
> S NAME .DO<br />
NR Err (plug in cable, power on drive)<br />
> S<br />
ND Err (insert disk)<br />
> S<br />
WP Err (remove disk write-protect)<br />
> S<br />
AE Err (file Already Exists at disk)<br />
> K<br />
> S<br />
</pre><br />
<br />
== File Name Memory ==<br />
<br />
Teeny remembers the last file name you typed. All commands need a file<br />
name and Teeny uses the remembered file name when you don't explicitly<br />
supply one. Even the Quit command needs a file name, but the name does<br />
not have to be legitimate. The 2-command example below overwrites a<br />
disk file.<br />
<br />
<pre><br />
> K NAME .DO<br />
> S<br />
</pre><br />
<br />
== File Name Treatment ==<br />
<br />
Teeny treats a file name two ways:<br />
<br />
* Identical -- exactly as typed by you<br />
* NORMALIZED -- so that all letters are upper case<br />
<br />
Mixed upper and lower case is allowed for file names at the disk<br />
directory of the slave device. A file identified by an Identical name<br />
at the disk directory is erased at disk, as a result of the Kill<br />
command. Likewise, a file inserted at disk, as a result of the Save<br />
command, gets an Identical name at the disk directory. For DeskLink,<br />
mixed case is not pertinent because the operating system of the PC<br />
treats mixed case as if it is all upper case. For a Disk Drive, mixed<br />
case is pertinent.<br />
<br />
All upper case is the norm for file names within the memory directory<br />
of the laptop. A file inserted in memory, as a result of the Load<br />
command, gets a NORMALIZED name in the memory directory of the laptop.<br />
<br />
The chart below shows the use of file name AnYmIx.Do in the query,<br />
Kill, Load, and Save commands. The Identical file name of AnYmIx.Do<br />
applies at the disk directory of the slave device for each of these<br />
commands. The NORMALIZED file name of ANYMIX.DO applies in the memory<br />
directory of the laptop for only the Load and Save commands.<br />
<br />
<pre> <br />
_______ Directory _______ <br />
__Command __| at Disk | in Memory |____ Overall action summary ____<br />
= AnYmIx.Do | Identical | | By AnYmIx.Do, query at disk.<br />
| | -- |<br />
K AnYmIx.Do | Identical | | By AnYmIx.Do, erase at disk.<br />
| | -- |<br />
L AnYmIx.Do | Identical | | Content of AnYmIx.Do at disk,<br />
| | NORMALIZED | insert for ANYMIX.DO in memory.<br />
S AnYmIx.Do | | NORMALIZED | Content of ANYMIX.DO in memory,<br />
| Identical | | insert for AnYmIx.Do at disk.<br />
</pre><br />
<br />
Where you use Teeny with a Disk Drive, you can use file names that have<br />
differences of letter case to your advantage. You can have content in<br />
memory under a NORMALIZED file name which you actively work with (e.g.,<br />
TEXT), while you have content at disk which reflects your prior<br />
activity under one or more Identical names.<br />
<br />
An example for media back-up purposes uses one Identical name where the<br />
last character is lower case, such as ACTIVE.Do. Use the S ACTIVE.DO<br />
and S ACTIVE.Do commands to save your active content, in duplicate, at<br />
the disk. Should the diskette media suffer from erosion (e.g., by some<br />
physical damage) there's some chance that one disk file is left intact.<br />
Ordinarily you use the L ACTIVE.DO command to insert the active content<br />
in memory under the NORMALIZED file name ACTIVE.DO. But you can resort<br />
to the L ACTIVE.Do command if the need arises.<br />
<br />
An example for archival purposes uses a series of Identical names. A<br />
series such as Series.do, SEries.do, SERies.do and so on can be used to<br />
represent some progressive activity. And a series such as sERIES.DO,<br />
seRIES.DO, serIES.DO and so on can be used to represent some regressive<br />
activity. The query command is very useful for "learning" the limits<br />
of an archival series after you "forgot" the limits.<br />
<br />
== Slave Device Nuance ==<br />
<br />
For the query command with a PC during a DeskLink session, the ? wild<br />
card character can be used within the file name extension. This forms<br />
a "file spec" which covers a range of specific file names. Note that<br />
the name portion is specific, and the extension portion is not<br />
specific. The chart below lists eight query commands for a name of WOW<br />
where each query has a different file spec. The chart assumes nine<br />
files of the name WOW are extant, and has a column for each extension<br />
of the name WOW. For each query, the indicator "met" identifies every<br />
file name that meets the file spec and thus contributes toward the<br />
response "SN Err" for Specific Name. The file spec with extension ??<br />
is global, so all of the nine files contribute toward the response.<br />
<br />
<pre> <br />
query & name| Files with a name of WOW exist, the Extensions are: |<br />
____________| .B | .B4 | .BA | .C | .C1 | .CO | .D | .D4 | .DO |<br />
= WOW .?? | met | met | met | met | met | met | met | met | met |<br />
= WOW .? | met | | | met | | | met | | |<br />
= WOW .B? | met | met | met | | | | | | |<br />
= WOW .C? | | | | met | met | met | | | |<br />
= WOW .D? | | | | | | | met | met | met |<br />
= WOW .?1 | | | | | met | | | | |<br />
= WOW .?4 | | met | | | | | | met | |<br />
= WOW .?O | | | | | | met | | | met |<br />
</pre><br />
<br />
For the Save command with a Disk Drive, there must be at least one file<br />
name slot available at the disk directory, and the directory must<br />
manifest enough capacity in terms of sectors at the media to insert<br />
(i.e., hold) the file content. Otherwise, the response "DF Err" for<br />
Drive directory Full is given. The chart below lists the quantity of<br />
file name slots, and the capacity and quantity of sectors for diskette<br />
media that is formatted by various Disk Drives.<br />
<br />
<pre> <br />
________ Disk Drive _________ _ File Name Slots __ _Capacity/Sectors_ <br />
| Brother Disk Drive FB100 | 40 | 101120 / 79 |<br />
| Purple Computing Disk Drive | 40 | 101120 / 79 |<br />
| Tandy Portable Disk Drive | 40 | 101120 / 79 |<br />
| Tandy Portable Disk Drive 2 | 40 bank0, 40 bank1 | 202240 / 158 |<br />
</pre><br />
<br />
== Diskette Formatter ==<br />
<br />
Teeny does not have a command to format a diskette in a Disk Drive. If<br />
it did, the image of Teeny would not be so teeny! Make your own BASIC<br />
program and use it on occasions when you want to format some diskettes.<br />
<br />
Just invoke the BASIC interpreter at the laptop menu and then type four<br />
entries, the last of which ends the interpretation session. The four<br />
entries are illustrated below exactly as they appear on the 40-column<br />
screen of the laptop as you type them. Note that the second entry is<br />
very long and it wraps into seven lines on the screen.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Type |NEW | and then press ENTER.<br />
|Ok |<br />
Type |0CLEAR1:IFLEN(INKEY$)THENRUNELSE?"FORMAT|<br />
| [Y]es";:IFNOTINPUT$(1)="Y"THENMENUELSE?|<br />
|:MAXFILES=1:OPEN"COM:98N1DNN"FOROUTPUTAS|<br />
|1:?#1,"ZZ"CHR$(6)CHR$(0)CHR$(249);:CLOSE|<br />
|:M=PEEK(919):FORI=0TO0STEP0:IFSGN(M)XORS|<br />
|GN(INP(179+M)AND32+4*M)THENBEEP:RUNELSEN|<br />
|EXT | and then press ENTER.<br />
Type |SAVE"DF21 | and then press ENTER.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
The third entry assigns DF21.BA as the file name of this BASIC program.<br />
After the fourth entry the laptop menu appears and the name DF21.BA can<br />
be seen. This BASIC program is not specific by Tandy laptop Model type<br />
so it can be used by all laptop models (200 or 10x). Use it to format<br />
diskette media placed in the:<br />
<br />
* Purple Computing Disk Drive -- with DIP switches set for 19200 Baud<br />
* Tandy Portable Disk Drive -- with DIP switches set for 19200 Baud<br />
* Tandy Portable Disk Drive 2<br />
<br />
== Change Working Speed ==<br />
<br />
TEENY.EXE casts Teeny with a working speed of either 19200 Baud or 9600<br />
Baud (see the "TEENY.EXE MANUAL" for detail). Where it isn't practical<br />
to recast Teeny (e.g., no PC available), this procedure can be used as<br />
an expedient. It changes the working speed of Teeny. This procedure<br />
may be used with laptop command file TEENY.CO or with a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop: one for laptop command file TEENY.CO, one for a trigger file. Type the appropriate entry exactly as it is shown.<br />
<br />
<pre> <br />
1111111111222222222233333333334 (for TEENY.CO file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY | and then press ENTER.<br />
<br />
1111111111222222222233333333334 (for trigger file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"Thmreq | and then press ENTER.<br />
</pre><br />
<br />
As a result of the entry above, three lines appear that show the "Top",<br />
"End", and "Exe" addresses of the file. The 5-digit value of Top (and<br />
Exe) appears in column 6 to column 10. This value is the HIMEM<br />
requirement, which is illustrated as "hmreq".<br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 6. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"><br />
<li>Carefully type the long entry shown below.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |T=PEEK(7300)*7-2821:R=PEEK(T+1)*256+PEEK|<br />
|(T):C=R+213:IFPEEK(C+1)-56THENMENUELSEFO|<br />
|RI=0TO0STEP0:S=PEEK(C):?MID$("NormalSLOW|<br />
|",82-1.08^S,6)" working speed. [C]hange?|<br />
|":IFINSTR("cC",INPUT$(1))THENPOKEC,1XORS|<br />
|:NEXTELSEIFPEEK(T+2)-1THENSAVEM"TEENY",R|<br />
|,R+746,R | and then press ENTER.<br />
</pre><br />
<br />
If the screen shows either the "Normal working speed. [C]hange?" or<br />
"SLOW working speed. [C]hange?" message, all is well -- go to step 5.<br />
<br />
If the screen shows only the " working speed. [C]hange?" message, the<br />
image of Teeny is not in place -- go back to step 3.<br />
<br />
If the laptop menu appears or if an Error message appears (e.g., FC<br />
Error), something is wrong. Likely, the entry was incorrectly typed --<br />
go back to step 1 (laptop menu) or to step 3 (Error message).<br />
<br />
<ol start="5"><br />
<li>The working speed of Teeny is shown at the screen along with the<br />
"[C]hange?" prompt, as shown below. Normal speed is 19200 Baud. SLOW<br />
speed is 9600 Baud. Each time you press the C key, the working speed<br />
changes.<br><br />
When the desired working speed is shown, press ENTER to accept it and<br />
then type the entry shown below -- the laptop menu appears. This<br />
procedure is complete.<br />
</li><br />
</ol><br />
<br />
<pre> <br />
|Normal working speed. [C]hange? | C changes the speed.<br />
|SLOW working speed. [C]hange? | C changes the speed.<br />
|Normal working speed. [C]hange? | C changes the speed.<br />
|SLOW working speed. [C]hange? | ENTER accepts speed.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"><br />
<li><br />
Using the "hmreq" value, type the entry shown below and then go<br />
back to step 3 of this procedure.<br />
</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Change DSR Sensitivity ==<br />
<br />
TEENY.EXE casts Teeny so that it either is sensitive to the DSR control<br />
line or is not sensitive to the DSR control line (see the "TEENY.EXE<br />
MANUAL" for detail). Where a Nul-modem cable is not appropriate to the<br />
DSR usage of Teeny (e.g., DSR control line not connected while there is<br />
sensitivity to the DSR control line by Teeny) and it isn't practical to<br />
recast Teeny (e.g., no PC available), this procedure can be used as an<br />
expedient. It changes the DSR usage of Teeny. This procedure may be<br />
used with laptop command file TEENY.CO or with a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop: one for laptop command file TEENY.CO, one for a trigger file. Type the appropriate entry exactly as it is shown.<br />
<br />
<pre> <br />
1111111111222222222233333333334 (for TEENY.CO file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY | and then press ENTER.<br />
<br />
1111111111222222222233333333334 (for trigger file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"Thmreq | and then press ENTER.<br />
</pre><br />
<br />
As a result of the entry above, three lines appear that show the "Top",<br />
"End", and "Exe" addresses of the file. The 5-digit value of Top (and<br />
Exe) appears in column 6 to column 10. This value is the HIMEM<br />
requirement, which is illustrated as "hmreq".<br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 6. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"><br />
<li>Carefully type the long entry shown below.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |T=PEEK(7300)*7-2821:R=PEEK(T+1)*256+PEEK|<br />
|(T):C=R+572-341*SGN(91-T/-31):IFPEEK(C+1|<br />
|)-4THENMENUELSEFORI=0TO0STEP0:S=PEEK(C):|<br />
|?"DSR U"MID$("nu",SAND5)"sed. [C]hange?"|<br />
|:IFINSTR("cC",INPUT$(1))THENPOKEC,215XOR|<br />
|S:NEXTELSEIFPEEK(T+2)-1THENSAVEM"TEENY",|<br />
|R,R+746,R | and then press ENTER.<br />
</pre><br />
<br />
If the screen shows either the "DSR Used. [C]hange?" or "DSR Unused.<br />
[C]hange?" message, all is well -- go to step 5.<br />
<br />
If the laptop menu appears or if an Error message appears (e.g., FC<br />
Error), something is wrong. Likely, the entry was incorrectly typed --<br />
go back to step 1 (laptop menu) or to step 3 (Error message).<br />
<br />
<ol start="5"><br />
<li>The sensitivity to the DSR control line by Teeny is shown at the<br />
screen as DSR usage along with the "[C]hange?" prompt, as shown below.<br />
DSR Used means Teeny is sensitive to the DSR control line. DSR Unused<br />
means Teeny is not sensitive to the DSR control line. Each time you<br />
press the C key, the DSR usage changes.<br />
</li><br />
</ol><br />
<br />
When the desired DSR usage is shown, press ENTER to accept it and then<br />
type the entry shown below -- the laptop menu appears. This procedure<br />
is complete.<br />
<br />
<pre><br />
|DSR Used. [C]hange? | C changes DSR usage.<br />
|DSR Unused. [C]hange? | C changes DSR usage.<br />
|DSR Used. [C]hange? | C changes DSR usage.<br />
|DSR Unused. [C]hange? | ENTER accepts usage.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"><br />
<li>Using the "hmreq" value, type the entry shown below and then go<br />
back to step 3 of this procedure.<br />
</li><br />
</ol><br />
<br />
<pre><br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Beefs, Tips, Quirks and Humor ==<br />
<br />
<ol start="1"><li><br />
<p>I keep pressing the Q key but Teeny refuses to Quit.</p><br />
<br />
<p>Type Q Q to Quit -- that's the Q key, a space, and another Q key. Or,<br />
you could press the reset button. But, <BREAK> won't Quit Teeny.</p><br />
<br />
<p>Do you remember that Teeny "remembers" the previous file name? What?<br />
You say you just invoked Teeny, changed your mind and now want to quit<br />
but you haven't even typed any file name. Tough! The first file name<br />
that Teeny initially "remembers" is not something that you typed but is<br />
something that Teeny considers garbage as a file name for the Quit<br />
command. It may be garbage left by a prior operation or by the way<br />
Teeny was invoked (from the menu or from BASIC). Do you think the<br />
image of Teeny can be so teeny by having great gobs of initialization<br />
logic?</p><br />
</li><br />
<li><p>I press a function key and Teeny goes nuts and pukes and scrolls<br />
the screen</p><br />
<br />
<p>NEWS FLASH -- When running Teeny from BASIC, don't press any function<br />
key. If you do, whatever string is assigned ("Files", "Load ", or God<br />
forbid "K MYFILE.DO") is fed to Teeny for consumption.</p><br />
</li><br />
<li> <br />
<p>Everything was going well. It was cool. I was a Loadin'/Savin'<br />
dude with Teeny -- I mean fast man -- really burnin' up the disk. But<br />
now, like... you know... I mean ... Teeny just sits there -- stoned<br />
-- don't do squat. What it is Bro?</p><br />
<p>The trouble is bad Karma and lack of Cosmic vibes. Really! I checked<br />
with my Guru and she had a vision and saw what went down with you man. <br />
Like... you know... I mean ... your disk drive tuned out man. She<br />
saw you take a smoke break. I know it was some good stuff 'cause she<br />
said you was gone for a quite a while. Your disk drive took a break<br />
too! Went trance-like in low power mode she said.</p><br />
<p>Flip the disk drive power switch off and on. Now reunite with Teeny,<br />
live long & prosper. Later dude!</p><br />
</li><br />
<li><p>I created file DAMNED.2B but Teeny won't Save it. What gives?</p><br />
<p>With some devilish application programs, you can make a file name<br />
extension that's damned to be straight from Hell -- repent. Actually,<br />
the disk drive is willing to Save your file but it's Teeny that doesn't<br />
like the file name extension. The BASIC interpreter's NAME AS command<br />
doesn't change file name extensions, so no help there. Another fine<br />
pickle you've got into Ollie.</p><br />
<p>To absolve your sin, go to BASIC and kill the file. Follow the Marine<br />
Corps motto "Kill 'em all and let God sort 'em out" for any other files<br />
in memory that have condemned file name extensions.</p><br />
</li><br />
<ol></div>Ronwiesenhttps://bitchin100.com/wiki/index.php?title=TEENY.CO_MANUAL&diff=522TEENY.CO MANUAL2008-12-05T15:05:32Z<p>Ronwiesen: </p>
<hr />
<div>==Orientation==<br />
<br />
File TEENY.CO has an image which is simply called "Teeny" throughout<br />
this manual. The name Teeny describes the amount of laptop memory that<br />
is needed to hold the image. For what it does in comparison to similar<br />
software, the name is appropriate -- the image is teeny! Although the<br />
Teeny image is internally specific by Tandy laptop Model type, its size<br />
and its usage are identical for all laptop models. Use of, and<br />
operational aspects of the Teeny image are thoroughly covered in this<br />
manual.<br />
<br />
Teeny gets used most by folks at the extremes of experience with Tandy<br />
laptops. Many neophytes use Teeny because it is in the public domain<br />
and easy to acquire. Many experts use Teeny because its image is so<br />
very small, and it has certain operational aspects that are not found<br />
in commercial software. Often a neophyte starts with Teeny, graduates<br />
to other software, and returns to Teeny usage at the expert stage.<br />
<br />
== Invocation Facts ==<br />
<br />
The image of Teeny is one contiguous block. Its size is 747. A block<br />
of 747 adjacent cells, within the HIMEM region of the laptop memory,<br />
holds the image during a session of its use. In regard to Tandy laptop<br />
operation, there is nothing abnormal about the image of Teeny -- it's<br />
quite conventional. If you are an expert, move on to the "Trigger File<br />
Creation" and "Invocation via Trigger File" sections of this manual<br />
which may be of some interest.<br />
<br />
The laptop menu shows a "Bytes free" quantity. Of the total amount of<br />
Random Access Memory (RAM) that is equipped in the laptop, "Bytes free"<br />
is just one portion among several portions. The "Bytes free" portion<br />
is the amount of RAM that is not (yet) consumed. The amount of RAM<br />
that is consumed is the total of quantities from all other portions.<br />
As consumption increases and decreases, the "Bytes free" quantity of<br />
RAM contracts and expands, respectively. Refer to "About RAM in the<br />
Model 10x laptops", at the Club 100 site, for complete detail.<br />
<br />
Regardless of how the Teeny image is invoked, the HIMEM region of RAM<br />
is where the action is at during a Teeny session. The image within the<br />
HIMEM region is what controls the laptop during a Teeny session. When<br />
or how the image gets placed within the HIMEM region is no longer<br />
pertinent once a Teeny session is under way. When you end a session of<br />
Teeny, the Teeny image no longer controls the laptop but it still is<br />
intact at 747 adjacent cells within the HIMEM region.<br />
<br />
From the laptop menu, there are two ways to invoke the Teeny image: via<br />
its laptop command file named TEENY.CO, or via a trigger file. Both of<br />
these files have a ".CO file descriptor" and an appended image. The<br />
.CO file descriptor describes the specific RAM addresses where the<br />
content of the appended image belongs, as well as where to start<br />
"execution" for an invocation. The descriptor size is 6, and an image<br />
content appends it.<br />
<br />
* TEENY.CO file -- file size is 753: 6 for the descriptor, and 747 for the entire content of the Teeny image. Invocation via TEENY.CO is recommended for a neophyte.<br />
* Trigger file -- file size is 7: 6 for the descriptor, and 1 for its content which is a vestige of the Teeny image. The trigger file consumes 746 less RAM than file TEENY.CO. Invocation via a trigger file is only recommended for experienced folks because of the unforgiving nature of trigger files.<br />
<br />
Each incarnation of laptop command file TEENY.CO is address-specific --<br />
each has a specific HIMEM requirement which must be met for successful<br />
invocation. The trigger file is created from some address-specific<br />
incarnation of file TEENY.CO, so it has an inherited HIMEM requirement.<br />
Whenever you attempt an invocation, the laptop inspects the .CO file<br />
descriptor to identify the HIMEM requirement. Based on the point of<br />
HIMEM, the laptop either allows or disallows the invocation.<br />
<br />
* Where the point of HIMEM indicates that address-specific cells are available within the HIMEM region, the laptop "loads" the cells with content from the appended image and then it relinquishes control to the "execution" cell -- a session of Teeny is under way. For the TEENY.CO file, 747 cells are loaded. For the trigger file, only 1 cell (the execution cell) is loaded and proper operation depends on remnant content (image of Teeny) in the adjacent block of 746 cells.<br />
* Where the point of HIMEM is "too high", the laptop disallows an invocation because the HIMEM requirement is not met. All cells in the HIMEM region remain as-is -- the laptop just issues a beep. A neophyte might think it is Teeny that issues the beep.<br />
<br />
If the HIMEM requirement of an incarnation is not met, there are two<br />
remedies. You set the point of HIMEM low enough for the requirement to<br />
be met, or you leave the point of HIMEM as-is and obtain a different<br />
incarnation (see the "TEENY.BA MANUAL" for detail) that has a HIMEM<br />
requirement which is met. The incarnation that allows the least<br />
consumption of RAM has a HIMEM requirement that is 747 less than the<br />
point of MAXRAM. The chart below lists this HIMEM requirement for the<br />
Model 10x and Model 200 laptops. <br />
<br />
<pre> <br />
MAXRAM-747 | Model 10x | Model 200 |<br />
HIMEM Requirement | 62213 | 60357 |<br />
</pre><br />
<br />
== Invocation via TEENY.CO File ==<br />
<br />
This procedure invokes Teeny by using laptop command file TEENY.CO and,<br />
in cases where it is necessary, this procedure also sets the point of<br />
HIMEM equal to the HIMEM requirement of TEENY.CO.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name TEENY.CO at the laptop menu.<br />
# Press the ENTER key. If the HIMEM requirement is met, the laptop relinquishes control to Teeny and its guide/prompt appears. A session of Teeny is under way -- this procedure is complete.<br>Where the HIMEM requirement is not met, the laptop issues a beep. Go on to step 3 of this procedure.<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop. Type the first entry exactly as shown -- five lines then appear as a result of this entry, and then "Ok" appears at the following line.<br>Study the result where 5-digit values appear in column 6 to column 10. Point of HIMEM is illustrated as "himem". HIMEM requirement is illustrated as "hmreq". A value that is 746 more than the HIMEM requirement is illustrated as "endat".<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |?" pH "HIMEM:LOADM"TEENY | and then press ENTER.<br />
| pH himem | Point of HIMEM<br />
|Top: hmreq | HIMEM requirement<br />
|End: endat | HIMEM requirement+746<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEAR0,hmreq:MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"> <br />
<li>Using the "hmreq" value, type the second entry -- the laptop menu<br />
appears. Go back to step 1 of this procedure.</li><br />
</ol><br />
<br />
== Trigger File Creation ==<br />
<br />
This procedure eliminates the TEENY.CO file and replaces it with a<br />
trigger file named Thmreq.CO where "hmreq" is the 5-digit HIMEM<br />
requirement. This procedure also sets the point of HIMEM equal to the<br />
HIMEM requirement.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# An entry is illustrated below as it appears on the 40-column screen of the laptop. Type the entry exactly as it is shown. As a result of this entry, three lines appear that show the "Top", "End", and "Exe" addresses of file TEENY.CO. The 5-digit value of Top (and Exe) appears in column 6 to column 10. This value is the HIMEM requirement, which is illustrated as "hmreq".<br />
<br />
<pre><br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY":T=PEEK(7300)*7-2821:R=PEEK(|<br />
|T+1)*256+PEEK(T):KILL"TEENY.CO":SAVEM"T"|<br />
|+MID$(STR$(R),2),R,R,R | and then press ENTER.<br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
</pre><br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 5. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"> <br />
<li>Type the entry shown below. The laptop menu appears. File name<br />
TEENY.CO is not found -- it has been eliminated. The trigger file name<br />
(e.g., T60357.CO) is found on the menu -- the five numerals of the name<br />
identify the HIMEM requirement of the trigger file.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |CLEAR0,R:MENU | and then press ENTER.<br />
<br />
</pre><br />
<br />
This procedure is complete. Move on to the "Invocation via Trigger<br />
File" section of this manual.<br />
<br />
<ol start="5"><li>Using the "hmreq" value, type the entry shown below and then go<br />
back to step 3 of this procedure.</li></ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Invocation via Trigger File ==<br />
<br />
This procedure invokes Teeny by using a trigger file or, in cases where<br />
it is necessary, this procedure eliminates a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name of the trigger file (e.g., T60357.CO).<br />
# Press the ENTER key. If the HIMEM requirement is met, the laptop relinquishes control to Teeny and its guide/prompt appears. A session of Teeny is under way -- this procedure is complete<br>Where the HIMEM requirement is not met, the laptop issues a beep. Go on to step 3 of this procedure.<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# An entry is illustrated below as it appears on the 40-column screen of the laptop. Type the entry exactly as it is shown. As a result of this entry, the point of HIMEM appears as a 5-digit value in column 2 to column 6 on a line by itself. The value for the point of HIMEM is illustrated as "himem". Directly below it, all of the file names are listed with three names per line starting at columns 1, 13 and 25.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |?HIMEM"pH":FILES | and then press ENTER.<br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | The trigger file name<br />
|Ok |<br />
</pre><br />
<br />
Look at the list of file names and find the trigger file name. A name<br />
of the Thmreq.CO form identifies a trigger file, where "hmreq" is its<br />
5-digit HIMEM requirement. If the point of HIMEM exceeds the HIMEM<br />
requirement of the trigger file by MORE THAN 1, go to step 7. If the<br />
point of HIMEM exceeds the HIMEM requirement of the trigger file by<br />
EXACTLY 1, go to step 6.<br />
<br />
<ol start="6"><li> <br />
Type the entry shown below -- the laptop menu appears. Go back to<br />
step 1 of this procedure.</li><br />
</ol><br />
<br />
<pre> <br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | exactly hmreq + 1<br />
|Ok |<br />
Type |CLEAR0,HIMEM-1:MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="7"><li><br />
Type the entry shown below -- the laptop menu appears. This<br />
eliminates the trigger file -- this procedure is complete.</li><br />
</ol><br />
<br />
<pre> <br />
| himem pH | Point of HIMEM<br />
|Thmreq.CO ADRS .DO NOTES .DO | more than hmreq + 1<br />
|Ok |<br />
Type |KILL"Thmreq.CO":MENU | and then press ENTER.<br />
</pre><br />
<br />
== Guide/Prompt ==<br />
<br />
Teeny issues a two-line guide/prompt: the upper line is the guide, the<br />
lower line is the prompt. These two lines are illustrated below<br />
exactly as they appear on the 40-column screen of the laptop.<br />
<br />
The guide line is only a visual aid. It identifies column positions of<br />
fields in the prompt line, and it has a notation (C=KLSQ) regarding<br />
arguments of the command field. The prompt line has two fields that<br />
are separated. The command field [C] is column 3. Column 4 is merely<br />
a separator [ ] between fields. The file name field [FFFFFF.XX] spans<br />
from column 5 to column 13.<br />
<br />
Teeny provides a blinking cursor (illustrated by _ below) on the prompt<br />
line at column 3, which is the command field. Use of the command field<br />
is mandatory -- you must type a command. You do not have to use the<br />
rest of the prompt line -- its use is optional.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> _ |<br />
</pre><br />
<br />
== Command Syntax ==<br />
<br />
Regarding arguments of the command field, the notation (C=KLSQ) shows<br />
an equal sign followed by four upper case letters: K, L, S, and Q. The<br />
equal sign denotes the query command. Upper case letters K, L, S, and<br />
Q correspond to the Kill, Load, Save, and Quit commands.<br />
<br />
Command syntax is the same for every command -- you may include a file<br />
name, but you are not compelled to do so. If you include a file name,<br />
then you may also append commentary after the file name -- Teeny<br />
ignores anything you type at column 14 and onward.<br />
<br />
Letter "P" is upper case, and letter "p" is lower case. For file names<br />
that you type, the case of each and every letter may be important. For<br />
example, LAPTOP.CO and LApTOP.CO and LAPTOp.CO are slightly different<br />
file names that may refer to three distinct files, or they may all<br />
refer to the same file. Teeny takes each character of a file name<br />
precisely the way you type it and, based on the command, treats the<br />
file name in different ways -- see "File Name Treatment" for detail.<br />
For convenience however, you can keep the CAPS LOCK key engaged during<br />
a Teeny session so that file names are always treated in the same way.<br />
<br />
There are some restrictions on the names of files. The laptop imposes<br />
the first restriction, Teeny enforces it, and it applies to every<br />
command. The first restriction is that the lead-character of a name<br />
can not be a numeral or certain special characters. For example, the<br />
name 4SCORE.DO is illegal. To make it compatible with as large a group<br />
of other masters (e.g., Floppy by Tandy, TS-DOS by Traveling Software)<br />
as practical, Teeny imposes the second restriction, which applies to<br />
the Kill, Load, and Save commands. This second restriction is that the<br />
lead-character of the file name extension must be one of three letters:<br />
B, C, or D. Other masters and Teeny use a convention where the<br />
lead-letter of the file name extension indicates the laptop file type.<br />
There are three file types: BASIC, Command, and ASCII. And the<br />
corresponding letters are: B for BASIC, C for Command, and D for ASCII.<br />
For a Load command with a file name such as WONDER.B4 for example,<br />
Teeny inserts the file content into that portion of laptop memory where<br />
BASIC file types belong.<br />
<br />
The slave device that is attached at the RS-232C port of the laptop (a<br />
Disk Drive, or a PC during a DeskLink session) maintains its disk<br />
directory of file names and file content within its media. Certain<br />
differences among various slave devices are noteworthy and offer useful<br />
operational potential -- see "Slave Device Nuance" for detail.<br />
<br />
See the illustration below. It shows an example for every command.<br />
Each example is a command which includes a file name. Note that the<br />
name included with the example Quit command is not legitimate for use<br />
with any of the other commands. Every example also includes commentary<br />
that begins at column 15. The file name and comment in each example<br />
form an explanation of what the command means. They are elaborate<br />
examples, yet you can use them as-is during a Teeny session because<br />
they are correct in their syntax!<br />
<br />
<pre><br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> = Wonder.B4 Does file exist at disk? | Syntax of query<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> K AtDisk.BA BASIC file erase at disk | Syntax of Kill<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> L Laptop.CO Command file into memory | Syntax of Load<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> S OnDisk.DO ASCII file onto the disk | Syntax of Save<br />
<br />
Guide |> C FFFFFF.XX (C=KLSQ) |<br />
Prompt |> Q meansQuit so Teeny session ends | Syntax of Quit<br />
</pre><br />
<br />
For a command (except for Quit command) where you include a file name,<br />
you must type the name so it aligns correctly in the file name field.<br />
Type one or more spaces if needed to pad a name so that the file name<br />
field is completely filled (type NAME .DO for a file named NAME.DO).<br />
<br />
== Command Action ==<br />
<br />
Teeny associates a file name with every command - even with the Quit<br />
command which produces no action except to end the Teeny session. The<br />
action by all the other commands is file name dependent, and the two<br />
restrictions on the names of files are pertinent.<br />
<br />
There are two places a file can exist: at the disk, or in the memory of<br />
the Tandy laptop. A file, of a specific name, either exists or does<br />
not exist. So there are four cases for you to consider with respect to<br />
any file name. For a specific name, a file is found:<br />
<br />
# nowhere (neither place)<br />
# one place, at the disk (not in memory)<br />
# one place, in memory (not at the disk)<br />
# both places<br />
<br />
The chart below summarizes the query, Kill, Load, and Save commands for<br />
all four cases. Below the chart, there is a paragraph for each command<br />
that explains its action. The terms "Identical file name" and<br />
"NORMALIZED file name" appear in these paragraphs to distinguish<br />
between different treatments that Teeny applies to file names. See<br />
"File Name Treatment" for the distinction.<br />
<br />
<pre> <br />
| nowhere | one place, | one place, | both places |<br />
| | AT THE DISK | IN MEMORY | |<br />
___ case #1 ___ ___ case #2 ___ ___ case #3 ___ ___ case #4 ___ <br />
query | "FF Err" | "SN Err" | "FF Err" | "SN Err" |<br />
| (at the disk) | Specific Name | (at the disk) | Specific Name |<br />
Kill | "FF Err" |Possible ERASE | "FF Err" |Possible ERASE |<br />
| (at the disk) | AT THE DISK | (at the disk) | AT THE DISK |<br />
Load | "FF Err" |Possible INSERT| "FF Err" | "AE Err" |<br />
| (at the disk) | IN MEMORY | (at the disk) | (in memory) |<br />
Save | "FF Err" | "AE Err" |Possible INSERT| "AE Err" |<br />
| (in memory) | (at the disk) | AT THE DISK | (at the disk) |<br />
</pre><br />
<br />
The action of the query command merely is to respond with an error.<br />
The query command ascertains extant of the Identical file name found AT<br />
THE DISK. There are two possible responses by the query command. If<br />
Teeny fails to find any file name AT THE DISK by the Identical file<br />
name (which is case #1 and also case #3), then the response "FF Err" is<br />
given. Otherwise at least one specific name is extant AT THE DISK that<br />
is recognized by the Identical file name (which is case #2 and case<br />
#4), and the response "SN Err" is given. See "Slave Device Nuance".<br />
<br />
The action of the Kill command is to erase a file of an Identical file<br />
name AT THE DISK. The action is possible for case #2 and case #4. For<br />
either of these cases, Teeny will erase the file AT THE DISK unless<br />
there is some condition (e.g., Write-Protected disk) that prevents the<br />
action. If the action is prevented, Teeny issues an error that is<br />
pertinent. For case #1 and case #3, Teeny issues "FF Err" because it<br />
fails to find the Identical file name AT THE DISK.<br />
<br />
The action of the Load command is to insert IN MEMORY a file, based on<br />
content found at disk. The action is possible for case #2 only. For<br />
this case, Teeny makes an exact copy of the content and assigns a<br />
NORMALIZED file name in the memory directory of the laptop unless there<br />
is some condition (e.g., not enough free memory) that prevents the<br />
action. If the action is prevented, Teeny issues an error that is<br />
pertinent. For case #1 and case #3, Teeny issues "FF Err" because it<br />
fails to find the Identical file name at the disk. For case #4, Teeny<br />
issues "AE Err" because it finds the NORMALIZED file name already is<br />
assigned in the memory directory.<br />
<br />
The action of the Save command is to insert AT DISK a file, based on<br />
content found in memory. The action is possible for case #3 only. For<br />
this case, Teeny makes an exact copy of the content and assigns an<br />
Identical name in the disk directory unless there is some condition<br />
(e.g., Write-Protected disk) that prevents the action. If the action<br />
is prevented, Teeny issues an error that is pertinent. See "Slave<br />
Device Nuance". For case #1, Teeny issues "FF Err" because it fails to<br />
find the NORMALIZED file name in the memory directory of the laptop.<br />
For case #2 and case #4, Teeny issues "AE Err" because it finds the<br />
Identical file name already is assigned in the disk directory.<br />
<br />
== Error Codes ==<br />
<br />
Teeny issues a 2-letter error code, such as "NM Err", if it encounters<br />
some condition or fault that prevents command action. The chart below<br />
lists each error code with its meaning, and indicates the relationship,<br />
if any, to each command: query, Kill, Load, Save, and Quit. Indicators<br />
"Disk" and "Memory" identify the place (i.e., at Disk or in Memory)<br />
where a condition is pertinent. The "**" indicator is used for error<br />
codes that have a clear meaning of place (e.g., Out of Memory), or have<br />
a generalized meaning.<br />
<br />
<pre> <br />
|________ Code and Meaning ________|query_|_Kill_|_Load_|_Save_|_Quit_|<br />
| NM NaMe illegal (e.g. 4SCORE.DO) | ** | ** | ** | ** | ** |<br />
| SN Specific Name found | Disk | | | | |<br />
| FF Fail to Find name | Disk | Disk | Disk |Memory| |<br />
| AE file Already Exists | | |Memory| Disk | |<br />
| ND No Disk media in drive | ** | ** | ** | ** | |<br />
| WP Write-Protected disk media | | ** | | ** | |<br />
| DF Drive directory Full | | | | ** | |<br />
| FL FuLL memory directory | | | ** | | |<br />
| OM Out of Memory (i.e. capacity) | | | ** | | | <br />
| NR RS-232 Not Ready (e.g. cable) | ** | ** | ** | ** | |<br />
| IO I/O fault (e.g. RS-232) | ** | ** | ** | ** | |<br />
| CM CoMmunication fault | ** | ** | ** | ** | |<br />
</pre><br />
<br />
The Load command can not overwrite a file in memory. You must Quit<br />
Teeny, kill the file in memory, then invoke Teeny again to load the<br />
file from disk. The example below shows the "discovery" that the file<br />
exists in memory, and the Quit of Teeny.<br />
<br />
<pre> <br />
> L NAME .DO<br />
AE Err (file Already Exists in memory)<br />
> Q<br />
</pre><br />
<br />
The 6-command example below shows a comedy of errors that finally<br />
overwrites a file at the disk. Only the first command includes a file<br />
name -- see "File Name Memory".<br />
<br />
<pre><br />
> S NAME .DO<br />
NR Err (plug in cable, power on drive)<br />
> S<br />
ND Err (insert disk)<br />
> S<br />
WP Err (remove disk write-protect)<br />
> S<br />
AE Err (file Already Exists at disk)<br />
> K<br />
> S<br />
</pre><br />
<br />
== File Name Memory ==<br />
<br />
Teeny remembers the last file name you typed. All commands need a file<br />
name and Teeny uses the remembered file name when you don't explicitly<br />
supply one. Even the Quit command needs a file name, but the name does<br />
not have to be legitimate. The 2-command example below overwrites a<br />
disk file.<br />
<br />
<pre><br />
> K NAME .DO<br />
> S<br />
</pre><br />
<br />
== File Name Treatment ==<br />
<br />
Teeny treats a file name two ways:<br />
<br />
* Identical -- exactly as typed by you<br />
* NORMALIZED -- so that all letters are upper case<br />
<br />
Mixed upper and lower case is allowed for file names at the disk<br />
directory of the slave device. A file identified by an Identical name<br />
at the disk directory is erased at disk, as a result of the Kill<br />
command. Likewise, a file inserted at disk, as a result of the Save<br />
command, gets an Identical name at the disk directory. For DeskLink,<br />
mixed case is not pertinent because the operating system of the PC<br />
treats mixed case as if it is all upper case. For a Disk Drive, mixed<br />
case is pertinent.<br />
<br />
All upper case is the norm for file names within the memory directory<br />
of the laptop. A file inserted in memory, as a result of the Load<br />
command, gets a NORMALIZED name in the memory directory of the laptop.<br />
<br />
The chart below shows the use of file name AnYmIx.Do in the query,<br />
Kill, Load, and Save commands. The Identical file name of AnYmIx.Do<br />
applies at the disk directory of the slave device for each of these<br />
commands. The NORMALIZED file name of ANYMIX.DO applies in the memory<br />
directory of the laptop for only the Load and Save commands.<br />
<br />
<pre> <br />
_______ Directory _______ <br />
__Command __| at Disk | in Memory |____ Overall action summary ____<br />
= AnYmIx.Do | Identical | | By AnYmIx.Do, query at disk.<br />
| | -- |<br />
K AnYmIx.Do | Identical | | By AnYmIx.Do, erase at disk.<br />
| | -- |<br />
L AnYmIx.Do | Identical | | Content of AnYmIx.Do at disk,<br />
| | NORMALIZED | insert for ANYMIX.DO in memory.<br />
S AnYmIx.Do | | NORMALIZED | Content of ANYMIX.DO in memory,<br />
| Identical | | insert for AnYmIx.Do at disk.<br />
</pre><br />
<br />
Where you use Teeny with a Disk Drive, you can use file names that have<br />
differences of letter case to your advantage. You can have content in<br />
memory under a NORMALIZED file name which you actively work with (e.g.,<br />
TEXT), while you have content at disk which reflects your prior<br />
activity under one or more Identical names.<br />
<br />
An example for media back-up purposes uses one Identical name where the<br />
last character is lower case, such as ACTIVE.Do. Use the S ACTIVE.DO<br />
and S ACTIVE.Do commands to save your active content, in duplicate, at<br />
the disk. Should the diskette media suffer from erosion (e.g., by some<br />
physical damage) there's some chance that one disk file is left intact.<br />
Ordinarily you use the L ACTIVE.DO command to insert the active content<br />
in memory under the NORMALIZED file name ACTIVE.DO. But you can resort<br />
to the L ACTIVE.Do command if the need arises.<br />
<br />
An example for archival purposes uses a series of Identical names. A<br />
series such as Series.do, SEries.do, SERies.do and so on can be used to<br />
represent some progressive activity. And a series such as sERIES.DO,<br />
seRIES.DO, serIES.DO and so on can be used to represent some regressive<br />
activity. The query command is very useful for "learning" the limits<br />
of an archival series after you "forgot" the limits.<br />
<br />
== Slave Device Nuance ==<br />
<br />
For the query command with a PC during a DeskLink session, the ? wild<br />
card character can be used within the file name extension. This forms<br />
a "file spec" which covers a range of specific file names. Note that<br />
the name portion is specific, and the extension portion is not<br />
specific. The chart below lists eight query commands for a name of WOW<br />
where each query has a different file spec. The chart assumes nine<br />
files of the name WOW are extant, and has a column for each extension<br />
of the name WOW. For each query, the indicator "met" identifies every<br />
file name that meets the file spec and thus contributes toward the<br />
response "SN Err" for Specific Name. The file spec with extension ??<br />
is global, so all of the nine files contribute toward the response.<br />
<br />
<pre> <br />
query & name| Files with a name of WOW exist, the Extensions are: |<br />
____________| .B | .B4 | .BA | .C | .C1 | .CO | .D | .D4 | .DO |<br />
= WOW .?? | met | met | met | met | met | met | met | met | met |<br />
= WOW .? | met | | | met | | | met | | |<br />
= WOW .B? | met | met | met | | | | | | |<br />
= WOW .C? | | | | met | met | met | | | |<br />
= WOW .D? | | | | | | | met | met | met |<br />
= WOW .?1 | | | | | met | | | | |<br />
= WOW .?4 | | met | | | | | | met | |<br />
= WOW .?O | | | | | | met | | | met |<br />
</pre><br />
<br />
For the Save command with a Disk Drive, there must be at least one file<br />
name slot available at the disk directory, and the directory must<br />
manifest enough capacity in terms of sectors at the media to insert<br />
(i.e., hold) the file content. Otherwise, the response "DF Err" for<br />
Drive directory Full is given. The chart below lists the quantity of<br />
file name slots, and the capacity and quantity of sectors for diskette<br />
media that is formatted by various Disk Drives.<br />
<br />
<pre> <br />
________ Disk Drive _________ _ File Name Slots __ _Capacity/Sectors_ <br />
| Brother Disk Drive FB100 | 40 | 101120 / 79 |<br />
| Purple Computing Disk Drive | 40 | 101120 / 79 |<br />
| Tandy Portable Disk Drive | 40 | 101120 / 79 |<br />
| Tandy Portable Disk Drive 2 | 40 bank0, 40 bank1 | 202240 / 158 |<br />
</pre><br />
<br />
== Diskette Formatter ==<br />
<br />
Teeny does not have a command to format a diskette in a Disk Drive. If<br />
it did, the image of Teeny would not be so teeny! Make your own BASIC<br />
program and use it on occasions when you want to format some diskettes.<br />
<br />
Just invoke the BASIC interpreter at the laptop menu and then type four<br />
entries, the last of which ends the interpretation session. The four<br />
entries are illustrated below exactly as they appear on the 40-column<br />
screen of the laptop as you type them. Note that the second entry is<br />
very long and it wraps into seven lines on the screen.<br />
<br />
<pre> <br />
1111111111222222222233333333334<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
Type |NEW | and then press ENTER.<br />
|Ok |<br />
Type |0CLEAR1:IFLEN(INKEY$)THENRUNELSE?"FORMAT|<br />
| [Y]es";:IFNOTINPUT$(1)="Y"THENMENUELSE?|<br />
|:MAXFILES=1:OPEN"COM:98N1DNN"FOROUTPUTAS|<br />
|1:?#1,"ZZ"CHR$(6)CHR$(0)CHR$(249);:CLOSE|<br />
|:M=PEEK(919):FORI=0TO0STEP0:IFSGN(M)XORS|<br />
|GN(INP(179+M)AND32+4*M)THENBEEP:RUNELSEN|<br />
|EXT | and then press ENTER.<br />
Type |SAVE"DF21 | and then press ENTER.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
The third entry assigns DF21.BA as the file name of this BASIC program.<br />
After the fourth entry the laptop menu appears and the name DF21.BA can<br />
be seen. This BASIC program is not specific by Tandy laptop Model type<br />
so it can be used by all laptop models (200 or 10x). Use it to format<br />
diskette media placed in the:<br />
<br />
* Purple Computing Disk Drive -- with DIP switches set for 19200 Baud<br />
* Tandy Portable Disk Drive -- with DIP switches set for 19200 Baud<br />
* Tandy Portable Disk Drive 2<br />
<br />
== Change Working Speed ==<br />
<br />
TEENY.EXE casts Teeny with a working speed of either 19200 Baud or 9600<br />
Baud (see the "TEENY.EXE MANUAL" for detail). Where it isn't practical<br />
to recast Teeny (e.g., no PC available), this procedure can be used as<br />
an expedient. It changes the working speed of Teeny. This procedure<br />
may be used with laptop command file TEENY.CO or with a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop: one for laptop command file TEENY.CO, one for a trigger file. Type the appropriate entry exactly as it is shown.<br />
<br />
<pre> <br />
1111111111222222222233333333334 (for TEENY.CO file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY | and then press ENTER.<br />
<br />
1111111111222222222233333333334 (for trigger file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"Thmreq | and then press ENTER.<br />
</pre><br />
<br />
As a result of the entry above, three lines appear that show the "Top",<br />
"End", and "Exe" addresses of the file. The 5-digit value of Top (and<br />
Exe) appears in column 6 to column 10. This value is the HIMEM<br />
requirement, which is illustrated as "hmreq".<br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 6. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"><br />
<li>Carefully type the long entry shown below.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |T=PEEK(7300)*7-2821:R=PEEK(T+1)*256+PEEK|<br />
|(T):C=R+213:IFPEEK(C+1)-56THENMENUELSEFO|<br />
|RI=0TO0STEP0:S=PEEK(C):?MID$("NormalSLOW|<br />
|",82-1.08^S,6)" working speed. [C]hange?|<br />
|":IFINSTR("cC",INPUT$(1))THENPOKEC,1XORS|<br />
|:NEXTELSEIFPEEK(T+2)-1THENSAVEM"TEENY",R|<br />
|,R+746,R | and then press ENTER.<br />
</pre><br />
<br />
If the screen shows either the "Normal working speed. [C]hange?" or<br />
"SLOW working speed. [C]hange?" message, all is well -- go to step 5.<br />
<br />
If the screen shows only the " working speed. [C]hange?" message, the<br />
image of Teeny is not in place -- go back to step 3.<br />
<br />
If the laptop menu appears or if an Error message appears (e.g., FC<br />
Error), something is wrong. Likely, the entry was incorrectly typed --<br />
go back to step 1 (laptop menu) or to step 3 (Error message).<br />
<br />
<ol start="5"><br />
<li>The working speed of Teeny is shown at the screen along with the<br />
"[C]hange?" prompt, as shown below. Normal speed is 19200 Baud. SLOW<br />
speed is 9600 Baud. Each time you press the C key, the working speed<br />
changes.<br><br />
When the desired working speed is shown, press ENTER to accept it and<br />
then type the entry shown below -- the laptop menu appears. This<br />
procedure is complete.<br />
</li><br />
</ol><br />
<br />
<pre> <br />
|Normal working speed. [C]hange? | C changes the speed.<br />
|SLOW working speed. [C]hange? | C changes the speed.<br />
|Normal working speed. [C]hange? | C changes the speed.<br />
|SLOW working speed. [C]hange? | ENTER accepts speed.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"><br />
<li><br />
Using the "hmreq" value, type the entry shown below and then go<br />
back to step 3 of this procedure.<br />
</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Change DSR Sensitivity ==<br />
<br />
TEENY.EXE casts Teeny so that it either is sensitive to the DSR control<br />
line or is not sensitive to the DSR control line (see the "TEENY.EXE<br />
MANUAL" for detail). Where a Nul-modem cable is not appropriate to the<br />
DSR usage of Teeny (e.g., DSR control line not connected while there is<br />
sensitivity to the DSR control line by Teeny) and it isn't practical to<br />
recast Teeny (e.g., no PC available), this procedure can be used as an<br />
expedient. It changes the DSR usage of Teeny. This procedure may be<br />
used with laptop command file TEENY.CO or with a trigger file.<br />
<br />
# Use the arrow keys to navigate the wide cursor bar over the name BASIC at the laptop menu.<br />
# Press the ENTER key. This invokes the BASIC interpreter.<br />
# Two entries are illustrated below as they appear on the 40-column screen of the laptop: one for laptop command file TEENY.CO, one for a trigger file. Type the appropriate entry exactly as it is shown.<br />
<br />
<pre> <br />
1111111111222222222233333333334 (for TEENY.CO file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"TEENY | and then press ENTER.<br />
<br />
1111111111222222222233333333334 (for trigger file)<br />
1234567890123456789012345678901234567890<br />
________________________________________<br />
|Ok |<br />
Type |LOADM"Thmreq | and then press ENTER.<br />
</pre><br />
<br />
As a result of the entry above, three lines appear that show the "Top",<br />
"End", and "Exe" addresses of the file. The 5-digit value of Top (and<br />
Exe) appears in column 6 to column 10. This value is the HIMEM<br />
requirement, which is illustrated as "hmreq".<br />
<br />
Look at the line that directly follows the line that shows the "Exe"<br />
address. If "?OM Error" is seen at this line, go to step 6. If "Ok"<br />
is seen at this line (then "?OM Error" is not seen), go to step 4.<br />
<br />
<ol start="4"><br />
<li>Carefully type the long entry shown below.</li><br />
</ol><br />
<br />
<pre> <br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|Ok | "?OM Error" not seen<br />
Type |T=PEEK(7300)*7-2821:R=PEEK(T+1)*256+PEEK|<br />
|(T):C=R+572-341*SGN(91-T/-31):IFPEEK(C+1|<br />
|)-4THENMENUELSEFORI=0TO0STEP0:S=PEEK(C):|<br />
|?"DSR U"MID$("nu",SAND5)"sed. [C]hange?"|<br />
|:IFINSTR("cC",INPUT$(1))THENPOKEC,215XOR|<br />
|S:NEXTELSEIFPEEK(T+2)-1THENSAVEM"TEENY",|<br />
|R,R+746,R | and then press ENTER.<br />
</pre><br />
<br />
If the screen shows either the "DSR Used. [C]hange?" or "DSR Unused.<br />
[C]hange?" message, all is well -- go to step 5.<br />
<br />
If the laptop menu appears or if an Error message appears (e.g., FC<br />
Error), something is wrong. Likely, the entry was incorrectly typed --<br />
go back to step 1 (laptop menu) or to step 3 (Error message).<br />
<br />
<ol start="5"><br />
<li>The sensitivity to the DSR control line by Teeny is shown at the<br />
screen as DSR usage along with the "[C]hange?" prompt, as shown below.<br />
DSR Used means Teeny is sensitive to the DSR control line. DSR Unused<br />
means Teeny is not sensitive to the DSR control line. Each time you<br />
press the C key, the DSR usage changes.<br />
</li><br />
</ol><br />
<br />
When the desired DSR usage is shown, press ENTER to accept it and then<br />
type the entry shown below -- the laptop menu appears. This procedure<br />
is complete.<br />
<br />
<pre><br />
|DSR Used. [C]hange? | C changes DSR usage.<br />
|DSR Unused. [C]hange? | C changes DSR usage.<br />
|DSR Used. [C]hange? | C changes DSR usage.<br />
|DSR Unused. [C]hange? | ENTER accepts usage.<br />
|Ok |<br />
Type |MENU | and then press ENTER.<br />
</pre><br />
<br />
<ol start="6"><br />
<li>Using the "hmreq" value, type the entry shown below and then go<br />
back to step 3 of this procedure.<br />
</li><br />
</ol><br />
<br />
<pre><br />
|Top: hmreq | HIMEM requirement<br />
|End: endat |<br />
|Exe: hmreq |<br />
|?OM Error | Out-of-Memory Error<br />
|Ok |<br />
Type |CLEARFRE(""),hmreq | and then press ENTER.<br />
|Ok |<br />
</pre><br />
<br />
== Beefs, Tips, Quirks and Humor ==<br />
<br />
<ol start="1"><li><br />
<p>I keep pressing the Q key but Teeny refuses to Quit.</p><br />
<br />
<p>Type Q Q to Quit -- that's the Q key, a space, and another Q key. Or,<br />
you could press the reset button. But, <BREAK> won't Quit Teeny.</p><br />
<br />
<p>Do you remember that Teeny "remembers" the previous file name? What?<br />
You say you just invoked Teeny, changed your mind and now want to quit<br />
but you haven't even typed any file name. Tough! The first file name<br />
that Teeny initially "remembers" is not something that you typed but is<br />
something that Teeny considers garbage as a file name for the Quit<br />
command. It may be garbage left by a prior operation or by the way<br />
Teeny was invoked (from the menu or from BASIC). Do you think the<br />
image of Teeny can be so teeny by having great gobs of initialization<br />
logic?</p><br />
</li><br />
<li><p>I press a function key and Teeny goes nuts and pukes and scrolls<br />
the screen</p><br />
<br />
<p>NEWS FLASH -- When running Teeny from BASIC, don't press any function<br />
key. If you do, whatever string is assigned ("Files", "Load ", or God<br />
forbid "K MYFILE.DO") is fed to Teeny for consumption.</p><br />
</li><br />
<li> <br />
<p>Everything was going well. It was cool. I was a Loadin'/Savin'<br />
dude with Teeny -- I mean fast man -- really burnin' up the disk. But<br />
now, like... you know... I mean ... Teeny just sits there -- stoned<br />
-- don't do squat. What it is Bro?</p><br />
<p>The trouble is bad Karma and lack of Cosmic vibes. Really! I checked<br />
with my Guru and she had a vision and saw what went down with you man. <br />
Like... you know... I mean ... your disk drive tuned out man. She<br />
saw you take a smoke break. I know it was some good stuff 'cause she<br />
said you was gone for a quite a while. Your disk drive took a break<br />
too! Went trance-like in low power mode she said.</p><br />
<p>Flip the disk drive power switch off and on. Now reunite with Teeny,<br />
live long & prosper. Later dude!</p><br />
</li><br />
<li><p>I created file DAMNED.2B but Teeny won't Save it. What gives?</p><br />
<p>With some devilish application programs, you can make a file name<br />
extension that's damned to be straight from Hell -- repent. Actually,<br />
the disk drive is willing to Save your file but it's Teeny that doesn't<br />
like the file name extension. The BASIC interpreter's NAME AS command<br />
doesn't change file name extensions, so no help there. Another fine<br />
pickle you've got into Ollie.</p><br />
<p>To absolve your sin, go to BASIC and kill the file. Follow the Marine<br />
Corps motto "Kill 'em all and let God sort 'em out" for any other files<br />
in memory that have condemned file name extensions.</p><br />
</li><br />
<ol></div>Ronwiesenhttps://bitchin100.com/wiki/index.php?title=TEENY.BA_MANUAL&diff=521TEENY.BA MANUAL2008-12-05T14:47:11Z<p>Ronwiesen: </p>
<hr />
<div>Laptop file TEENY.BA is a "descendant" of PC file TEENY.EXE, and there<br />
are three "inherited" traits. TEENY.BA inherits:<br />
<br />
* Working speed -- either 9600 Baud or 19200 Baud, based on whether you did or did not supply the /S switch when you invoked TEENY.EXE.<br />
* DSR sensitivity -- either insensitive (i.e., DSR unused/ignored) or sensitive (i.e., DSR used and expected), based on whether you did or did not supply the /IDSR switch when you invoked TEENY.EXE.<br />
* Laptop Model type -- either type 10x or type 200, based on the Model of Tandy laptop that TEENY.EXE detected via the COM port of the PC.<br />
<br />
When you use TEENY.BA, it passes on these three traits! In other<br />
words, you could invoke TEENY.EXE on EIGHT OCCASIONS (both working<br />
speeds and both DSR sensitivities for each of the laptop Model types)<br />
to separately produce EIGHT VARIANTS of laptop file TEENY.BA. Keep<br />
"heritage" in mind should the time come to uses "some" TEENY.BA file in<br />
"some" laptop.<br />
<br />
Laptop file TEENY.BA is a "loader" of TEENY.CO, in a sense. It creates<br />
an incarnation of file TEENY.CO that is address-specific. You dictate<br />
a specific address -- TEENY.BA constructs TEENY.CO accordingly. As is<br />
true of any conventional .CO file, file TEENY.CO has a .CO file<br />
descriptor and an appended image. TEENY.BA constructs both the .CO<br />
file descriptor and the appended image of TEENY.CO based on the End<br />
address which you dictate. If an incarnation of file TEENY.CO exists,<br />
TEENY.BA replaces it with the specified incarnation.<br />
<br />
Twelve seconds after you invoke TEENY.BA, it prompts you to specify the<br />
End address for TEENY.CO. WARNING -- specify an End address which is<br />
at least one less than the point of MAXRAM that you anticipate will be<br />
in effect during the use of TEENY.CO. For example, if you anticipate<br />
that no MAXRAM software will be present when you use TEENY.CO, then the<br />
highest possible value is:<br />
<br />
<pre>62959 (for Models 100 and 102)<br />
61103 (for Model 200)<br />
</pre><br />
<br />
Either type a 5-digit value to specify an End address and then press<br />
ENTER, or just press ENTER without typing anything for an END address<br />
that is one less than the current point of HIMEM. When you press<br />
ENTER, TEENY.BA constructs file TEENY.CO in accordance with the End<br />
address, but TEENY.BA does not alter the current point of HIMEM.<br />
<br />
After TEENY.BA constructs the address-specific incarnation of file<br />
TEENY.CO, it ends by reporting "Loaded TEENY .CO", and "Ok" appears on<br />
the laptop screen. If you want to record the address specifics of<br />
TEENY.CO at this time, type the following and press ENTER. The Top,<br />
End, and Exe addresses are listed on the laptop screen.<br />
<br />
<pre>CALL9643 (for Models 100 and 102)<br />
CALL13072 (for Model 200)<br />
</pre></div>Ronwiesenhttps://bitchin100.com/wiki/index.php?title=TEENY.EXE_MANUAL&diff=520TEENY.EXE MANUAL2008-12-05T14:36:49Z<p>Ronwiesen: </p>
<hr />
<div>This manual has five sections. They are in the order that is naturally<br />
occurring for TEENY.EXE usage. The first section answers questions of<br />
where, how, and why with respect to TEENY.EXE invocation.<br />
<br />
The next two sections bear on your interaction with TEENY.EXE while it<br />
controls your PC, and how your interactions relate to your current and<br />
future circumstances.<br />
<br />
The last two sections are meaningful after TEENY.EXE control of your PC<br />
has ended. Be sure to read the "Bonus" section, lest your PC screen<br />
display fool you into believing that TEENY.EXE still controls your PC.<br />
Both of these last sections cover DeskLink invocations: by TEENY.EXE,<br />
and manually by you.<br />
<br />
== TEENY.EXE Placement and Syntax ==<br />
<br />
TEENY.EXE is an executable file for a PC. The ideal locale for this<br />
file is C:\ROOT in a fixed disk drive, and A:\ROOT in a floppy<br />
diskette. Place it there now!<br />
<br />
The command name is TEENY. The command TEENY /? explains everything,<br />
and the syntax it reveals is especially important. Do the TEENY /?<br />
command now!<br />
<br />
<pre> <br />
-------------------------------------------------------------------------------<br />
C:\ROOT> TEENY /?<br />
-------------------------------------------------------------------------------<br />
Purpose: Boot the Tandy laptop Model 100, 102, or 200 with TEENY for later use.<br />
The boot speed applies now, the working speed of TEENY applies later.<br />
Syntax: TEENY [/p] [/BS] [/S] [/IDSR] [/DOS] [pace]<br />
/p is COM port number. Range: 1 to 4. Default: 1.<br />
/BS is boot speed at 9600 Baud, rather than 19200 Baud.<br />
/S sets TEENY to 9600 Baud working speed, rather than 19200 Baud.<br />
/IDSR makes TEENY insensitive to DSR control line (i.e., DSR unused).<br />
/DOS declares Op Sys as DOS in order to have no pace (i.e., override).<br />
pace is useful only if the Op Sys is Windows, rather than DOS. Where<br />
you don't specify pace, the Op Sys is surveyed: for Windows a<br />
medium pace is set, DOS has no pace. The value set by the survey<br />
is reliable in most cases. Low pace values work well, high values<br />
work fast but can fail. Range: 10 to 99. Set by survey: 40.<br />
Examples:<br />
Port 1 Boot at 19200. TEENY set to 19200, DSR is used. If Windows, pace by 40.<br />
TEENY<br />
Port 1 Boot at 9600. TEENY set to 9600, DSR is used. If Windows, pace by 40.<br />
TEENY /BS /S<br />
Port 2 Boot at 9600. TEENY set to 19200, DSR unused. If Windows, pace by 40.<br />
TEENY /2 /BS /IDSR<br />
Port 3 Boot at 19200. TEENY set to 19200, DSR is used. Windows, pace is 25.<br />
TEENY /3 25<br />
Port 4 Boot at 9600. TEENY set to 9600, DSR is used. DOS declared, no pace.<br />
TEENY /4 /BS /S /DOS<br />
C:\ROOT><br />
-------------------------------------------------------------------------------<br />
</pre><br />
<br />
TEENY boots the laptop. The end result is creation of an incarnation<br />
of laptop command file TEENY.CO within the laptop.<br />
<br />
The switches /1, /2, /3, and /4 steer the boot to any of four COM ports<br />
of the PC: COM1, COM2, COM3, or COM4. If you don't explicitly supply<br />
one of these switches, the default is boot to the COM1 port.<br />
<br />
There's a /BS switch for boot at 9600 Baud. This is needed for a PC<br />
where its COM port(s) can not operate any higher than 9600 Baud. If<br />
you don't explicitly supply this switch, the default is boot at 19200<br />
Baud. Note: do not confuse this /BS switch with the /S switch.<br />
<br />
There's a /S switch for creation of an incarnation of TEENY.CO that<br />
works at 9600 Baud. If you don't explicitly supply this switch, the<br />
default is creation of TEENY.CO that works at 19200 Baud. Where the<br />
Tandy Portable Disk Drive 2 is the slave device, it only operates at<br />
19200 Baud -- do not supply the /S switch. Where the Brother Disk<br />
Drive FB100 is the slave device, it only operates at 9600 Baud --<br />
supply the /S switch. For the other Disk Drives (note #1), you have a<br />
choice: 19200 Baud, or 9600 Baud. Where the cable to the slave device<br />
runs through an area of high electrical noise, select 9600 Baud so you<br />
have some immunity to noise. If you plan to use Disk Drive emulation<br />
by "some PC" (note #2) and its COM port(s) can not operate any higher<br />
than 9600 Baud, then select 9600 Baud. <br />
<br />
<blockquote> <br />
Note #1 Prior to the use of TEENY.CO with the Tandy Portable Disk Drive<br />
or the Purple Computing Disk Drive, you must establish its <br />
operational speed so that it matches the working speed of<br />
TEENY.CO. See the "Slave Disk Devices" section of the "TEENY<br />
MANUAL" for detail.<br />
</blockquote><br />
<br />
<blockquote> <br />
Note #2 The PC used for TEENY.EXE is not, necessarily, the "same PC"<br />
which you might subsequently use for Disk Drive emulation. See<br />
"About DeskLink" for Disk Drive emulation and 9600 Baud detail.<br />
</blockquote><br />
<br />
There's a /IDSR switch for creation of an incarnation of TEENY.CO that<br />
is insensitive to the DSR control line (i.e., DSR unused). If you<br />
don't explicitly supply this switch, the default is creation of<br />
TEENY.CO that is sensitive to the DSR control line. Where the cable to<br />
the slave device is an inferior arrangement that has no connection to<br />
DSR at the laptop side (e.g., a PalmOS device with a deficient serial<br />
HotSync cable), you consequently must make TEENY.CO insensitive to the<br />
DSR control line -- supply the /IDSR switch.<br />
<br />
There's a /DOS switch that in all cases is not needed but in certain<br />
cases may be desirable to use. If you don't explicitly supply this<br />
switch, the boot operation might proceed in a slow-paced fashion that's<br />
appropriate for a Windows Op Sys despite that fact that the Op Sys<br />
which currently controls the PC is a DOS Op Sys. For example, some<br />
dual-boot arrangements are cases that allow a PC to be controlled by<br />
either a Windows Op Sys or a DOS Op Sys. Also there are cases where<br />
removal of a Windows Op Sys from a PC is incomplete in the sense that<br />
the PC environment still retains traces of the former Windows Op Sys<br />
while the current Op Sys is a DOS Op Sys. In such cases you may, by<br />
supplying the /DOS switch, declare the Op Sys as DOS in order to have<br />
no pace (i.e., fastest possible boot operation) which overrides pacing<br />
that would occur for a Windows Op Sys.<br />
<br />
There's a "pace" argument you might need to supply to avoid failure of<br />
the boot. If you don't explicitly supply this argument, the operating<br />
system is surveyed: for Windows the boot is conducted at a medium pace<br />
of 40, for DOS the boot is conducted as quickly as possible without any<br />
pace. If you do supply this argument, there is no survey (i.e.,<br />
Windows is assumed) and the boot is conducted at the pace you specify:<br />
from 10 to 99 characters per second.<br />
<br />
Initially you don't know whether to supply a pace argument or not. The<br />
practical approach is to not supply it and see what happens. If the<br />
boot completes, you're done. During the boot, the PC screen shows a<br />
reducing down-count to indicate progress toward completion. Also, a<br />
[Wait] shows during any period of suspension and it disappears whenever<br />
boot progress continues. Should the boot fail, the [Wait] persists and<br />
the down-count hangs (i.e., stops), but no harm occurs. The PC screen<br />
also shows the pace value and explains how to escape from the hung-up<br />
condition at both the PC and at the laptop. If it fails, just use the<br />
TEENY command again with a lower value for the pace.<br />
<br />
What lower value of pace should be tried? Nobody can know that. It's<br />
a matter of how Windows "mediates" the COM ports of your PC, and that<br />
depends upon a lot of things -- things that change. But it has nothing<br />
to do with the hardware in your PC. Clock speed of the CPU doesn't<br />
matter. Type of UART at the COM port doesn't matter. And restarting<br />
Windows in so-called "DOS mode" doesn't help because Windows still<br />
mediates the COM ports in that mode. Just guess at a lower value of<br />
pace and try it!<br />
<br />
== Primary Objective ==<br />
<br />
TEENY.EXE has one primary objective -- creation of an incarnation of<br />
command file TEENY.CO within the Tandy laptop. Once file TEENY.CO is<br />
created, you might not ever need to use TEENY.EXE again! Note that<br />
TEENY.CO has three traits that it "inherits" from TEENY.EXE.<br />
<br />
* working speed -- either 9600 Baud or 19200 Baud, based on whether you did or did not supply the /S switch when you invoked TEENY.EXE.<br />
* DSR sensitivity -- either insensitive (i.e., DSR unused/ignored) or sensitive (i.e., DSR used and expected), based on whether you did or did not supply the /IDSR switch when you invoked TEENY.EXE.<br />
* laptop Model type -- either type 10x or type 200, based on the Model of Tandy laptop that TEENY.EXE detected via the COM port of the PC.<br />
<br />
TEENY.EXE interacts with you; read and follow the directions that<br />
appear on the PC screen. TEENY.EXE directs you step by step. In some<br />
steps you are directed with terminology that's peculiar to a Tandy<br />
laptop. For example, "At laptop, type an End address and press Enter"<br />
does not precisely tell you what to type, but "End address" is peculiar<br />
to a Tandy laptop in regard to .CO type files. Perhaps you have no<br />
idea about what is an appropriate End address for file TEENY.CO -- the<br />
PC screen gives you some limiting guidance such as "Do not use an End<br />
address higher than 62959" which corresponds to "stuff" TEENY.EXE has<br />
extracted from your Tandy laptop. In other steps you are directed in<br />
precise ways. For example, "At laptop, type ?HIMEM:CALL9643 and press<br />
Enter" does tell you precisely what to do.<br />
<br />
== Option ==<br />
<br />
After it creates an incarnation of file TEENY.CO, TEENY.EXE then leaves<br />
you an option. Said another way, the primary objective has been<br />
achieved but you have a decision to make now that might matter to you<br />
in the future. The decision is not critical, there is no right or<br />
wrong choice -- just choose! Do you want to:<br />
<br />
* conserve memory in the Tandy laptop. The Tandy laptop now is consuming memory that holds BASIC statements, should you purge the statements to recover the memory they consume? NEW recovers the memory.<br />
* be able to re-create TEENY.CO without using TEENY.EXE, a PC, and a null-modem cable. Such stand-alone ability now is held within the Tandy laptop, should you retain it for future use? SAVE"TEENY retains it in the form of a BASIC program file named TEENY.BA.<br />
<br />
File TEENY.CO, like any conventional .CO file, is immutable. TEENY.EXE<br />
has cast an incarnation of file TEENY.CO in concrete -- so to speak.<br />
It inherits laptop Model type, working speed, and DSR sensitivity as<br />
traits. It has an End address that you specified. These fit your<br />
circumstance now, but the future may present you with a different<br />
circumstance that requires another incarnation of file TEENY.CO that is<br />
different. Consider the future -- TEENY.EXE leaves you an option for<br />
how to handle a future circumstance: use TEENY.EXE again, or use<br />
TEENY.BA. Using TEENY.EXE, you can select a different working speed<br />
and/or DSR sensitivity and/or specify a different End address. Using<br />
TEENY.BA, you can only specify a different End address.<br />
<br />
== Bonus ==<br />
<br />
Make no mistake about it, TEENY.EXE finishes! It knows when it is<br />
done, and it ends. When TEENY.EXE ends, it no longer has control of<br />
your PC. It has done its work -- end of story, finito, that's all<br />
folks.<br />
<br />
TEENY.EXE has a bonus that is related to DeskLink and it gives you that<br />
bonus if it can. If it is technically possible, TEENY.EXE gives you<br />
the bonus when it finishes. You may get the bonus, you may not get it.<br />
If you do get the bonus then your PC screen shows two listings of<br />
"laptop-type" file names, and directly below these two file name<br />
listings "To exit Desk-Link, press F10." is seen.<br />
<br />
The bonus is that TEENY.EXE invokes DeskLink on your behalf just after<br />
TEENY.EXE lists, on the PC screen, laptop-type file names that it finds<br />
within:<br />
<br />
* the memory of the Tandy laptop. File names TEENY.CO and TEENY.BA are not in this (first) listing.<br />
* a particular drive and directory of the PC. The particular drive and directory (e.g., C:\ROOT) are indicated above this (second) listing.<br />
<br />
If you plan to immediately use TEENY.CO at the Tandy laptop to transfer<br />
laptop files to or from the PC, then this bonus has value to you. With<br />
manual invocation of DeskLink, a "brag screen" is all that appears at<br />
the PC -- it does not list any file names whatsoever. The bonus is<br />
that TEENY.EXE provides two listings of file names and then it invokes<br />
DeskLink in a way that leaves the screen intact.<br />
<br />
It is DeskLink that has control of your PC. So don't expect to see any<br />
change in the file name listings at the PC screen while you are using<br />
TEENY.CO to transfer files. TEENY.EXE gave you a bonus, not magic<br />
intervention in a session DeskLink.<br />
<br />
== About DeskLink ==<br />
<br />
DeskLink (also known as BOOSTER-LINK) is freeware placed in the public<br />
domain by Club 100. Sessions of DeskLink provide Disk Drive emulation.<br />
DeskLink is useful to Personal Computer (PC) owners who also own a<br />
Tandy laptop or NEC notebook, and have a suitable null-modem cable.<br />
The "Null-modem Cable" section of the "TEENY MANUAL" details what is<br />
suitable for DeskLink. DeskLink freeware is distributed as the PC<br />
command file DESKLINK.COM.<br />
<br />
Although your usage of TEENY.EXE might invoke a session of DeskLink,<br />
you must manually invoke it for other sessions. So placement of<br />
DESKLINK.COM and its command line syntax for manual invocation are<br />
necessarily detailed here. Certain desirable aspects of DeskLink that<br />
pertain to its operation as a slave to TEENY.CO, and generally do not<br />
pertain to other masters, are explained in the "Slave Device Nuance"<br />
section of "TEENY.CO MANUAL".<br />
<br />
DESKLINK.COM is a command file for a PC. The ideal locale for this<br />
file is C:\ROOT in a fixed disk drive, and A:\ROOT in a floppy<br />
diskette. Place it there now!<br />
<br />
The command name is DESKLINK. The command DESKLINK /? explains<br />
everything, and the syntax for its switches has much in common with<br />
the syntax of TEENY.EXE. Do the DESKLINK /? command now!<br />
<br />
<pre> <br />
-------------------------------------------------------------------------------<br />
C:\ROOT> DESKLINK /?<br />
<br />
DESK-LINK (version 1.05)<br />
(c) 1987, Traveling Software, Inc.<br />
<br />
Usage: DESKLINK dir<br />
Function: PC disk emulation of a TANDY Disk Drive via "COM1:" at 19200 baud.<br />
Notation: dir - root directory name (\ROOT used if omitted).<br />
Switches: /2 - to communicate through "COM2:".<br />
/S - to communicate at 9600 baud.<br />
<br />
C:\ROOT><br />
-------------------------------------------------------------------------------<br />
</pre> <br />
<br />
<br />
DeskLink makes a COM port of a PC respond, to stimulation, in the slave<br />
fashion that a Disk Drive (e.g., Tandy Portable Disk Drive) exhibits.<br />
Although the disk media of a PC differs considerably from the media of<br />
a Disk Drive, stimulations and responses are alike. Thus, DeskLink is<br />
an emulator of a Disk Drive. Thus, the stimulations by a master such<br />
as TEENY.CO evoke operations which involve "laptop type" files and some<br />
file repository within a PC.<br />
<br />
There's a "dir" argument so you can specify what directory in the PC<br />
current drive you want to use as the repository of "laptop type" files.<br />
If you don't explicitly supply this argument, the default directory<br />
\ROOT of the current drive is the repository.<br />
<br />
There's a /2 switch which steers operation to the COM2 port of the PC.<br />
If you don't explicitly supply this switch, the default is the COM1<br />
port.<br />
<br />
There's a /S switch for 9600 Baud operation. This is needed for a PC<br />
where its COM port(s) can not operate any higher than 9600 Baud. Where<br />
the null-modem cable runs through an area of high electrical noise,<br />
supply the /S switch for immunity to noise. If you don't explicitly<br />
supply this switch, the default is 19200 Baud operation.</div>Ronwiesen