<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://gunkies.org/index.php?action=history&amp;feed=atom&amp;title=Term-Mite_ST_Smart_Terminal%2FTermMite.asm</id>
		<title>Term-Mite ST Smart Terminal/TermMite.asm - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://gunkies.org/index.php?action=history&amp;feed=atom&amp;title=Term-Mite_ST_Smart_Terminal%2FTermMite.asm"/>
		<link rel="alternate" type="text/html" href="https://gunkies.org/w/index.php?title=Term-Mite_ST_Smart_Terminal/TermMite.asm&amp;action=history"/>
		<updated>2026-05-14T23:31:21Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.1</generator>

	<entry>
		<id>https://gunkies.org/w/index.php?title=Term-Mite_ST_Smart_Terminal/TermMite.asm&amp;diff=20398&amp;oldid=prev</id>
		<title>Jnc: +cat</title>
		<link rel="alternate" type="text/html" href="https://gunkies.org/w/index.php?title=Term-Mite_ST_Smart_Terminal/TermMite.asm&amp;diff=20398&amp;oldid=prev"/>
				<updated>2018-12-27T01:05:38Z</updated>
		
		<summary type="html">&lt;p&gt;+cat&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 01:05, 27 December 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1371&quot; &gt;Line 1,371:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1,371:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category: Source Code]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki-wiki_:diff:version:1.11a:oldid:16699:newid:20398 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jnc</name></author>	</entry>

	<entry>
		<id>https://gunkies.org/w/index.php?title=Term-Mite_ST_Smart_Terminal/TermMite.asm&amp;diff=16699&amp;oldid=prev</id>
		<title>Jnc: Add notes about origins, etc</title>
		<link rel="alternate" type="text/html" href="https://gunkies.org/w/index.php?title=Term-Mite_ST_Smart_Terminal/TermMite.asm&amp;diff=16699&amp;oldid=prev"/>
				<updated>2018-06-06T20:57:10Z</updated>
		
		<summary type="html">&lt;p&gt;Add notes about origins, etc&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 20:57, 6 June 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;This code was produced by Jon Elson, ca. 1985; it was used to make some tweaks to the video sync timing on his Term-Mite.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;It was apparently produced by dumping the PROMs, and then dis-assembling the code; a set of listings of the original which came with the Term-Mite was likely used as a guide through the code in this process.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; steve Ciarcia term-mite standard program rom&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; steve Ciarcia term-mite standard program rom&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; mod 1/3/85 to change sync pulse delays&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; mod 1/3/85 to change sync pulse delays&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;disassembled by Jon Elson's disns455 program&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;Known bugs in the term-mite :&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;Known bugs in the term-mite :&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; 1	when in no-parity mode, parity is still checked on control chars&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; 1	when in no-parity mode, parity is still checked on control chars&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki-wiki_:diff:version:1.11a:oldid:16692:newid:16699 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jnc</name></author>	</entry>

	<entry>
		<id>https://gunkies.org/w/index.php?title=Term-Mite_ST_Smart_Terminal/TermMite.asm&amp;diff=16692&amp;oldid=prev</id>
		<title>Jnc: Upload</title>
		<link rel="alternate" type="text/html" href="https://gunkies.org/w/index.php?title=Term-Mite_ST_Smart_Terminal/TermMite.asm&amp;diff=16692&amp;oldid=prev"/>
				<updated>2018-06-05T19:15:33Z</updated>
		
		<summary type="html">&lt;p&gt;Upload&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
; steve Ciarcia term-mite standard program rom&lt;br /&gt;
; mod 1/3/85 to change sync pulse delays&lt;br /&gt;
;&lt;br /&gt;
;Known bugs in the term-mite :&lt;br /&gt;
; 1	when in no-parity mode, parity is still checked on control chars&lt;br /&gt;
;	such as cr, lf, etc.&lt;br /&gt;
; 2	escape code handler table is unprotected -- unknown escape sequences&lt;br /&gt;
;	make random jumps in the program.&lt;br /&gt;
; 3	in show control-codes mode, esc sequences are still processed-&lt;br /&gt;
;	this is exactly what sho ctrl mode is used for-to verify that esc&lt;br /&gt;
;	seqs are being sent right&lt;br /&gt;
; 4	switch 1, pos 7 is : on=hi/lo intensity   off=F0 clock&lt;br /&gt;
; 5	switch 1, pos 4 &amp;amp; 5 are interchanged in manual&lt;br /&gt;
; 6	if CTS is not true, terminal locks up in tight loop and must be reset.&lt;br /&gt;
;	should give error msg on status line after timeout&lt;br /&gt;
; 7	not only is 8th bit ignored, also will not send NULL char&lt;br /&gt;
;&lt;br /&gt;
;&lt;br /&gt;
;  register usage&lt;br /&gt;
;&lt;br /&gt;
; r5  --  current line #&lt;br /&gt;
; r6  --  current col  #&lt;br /&gt;
; r7  --  general status&lt;br /&gt;
;	0	aux on&lt;br /&gt;
;	1	kbd on&lt;br /&gt;
;	2	3 char esc flag&lt;br /&gt;
;	3	4 char esc flag&lt;br /&gt;
;	4	fdx&lt;br /&gt;
;	5	on line&lt;br /&gt;
;	6	sho ctl mode&lt;br /&gt;
;	7	last char was escape&lt;br /&gt;
;&lt;br /&gt;
; r20 --  outqueue index -- for chars taken from input queue&lt;br /&gt;
; r21 --  inque index&lt;br /&gt;
; r22 .. 36  receive queue&lt;br /&gt;
; r37 --  stores char from esc/i&lt;br /&gt;
; r3e --  stores first data char (x pos) from esc/m sequence&lt;br /&gt;
;&lt;br /&gt;
; flags -	f0 - time to scan scanned keyboard&lt;br /&gt;
rstvec	jmp reset	;start of prog from system reset&lt;br /&gt;
	nop&lt;br /&gt;
	jmp extint	;loc 3 - external interrupt vector&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	jmp	intint	;loc 9 - internal interrupt vector&lt;br /&gt;
reset	call getsw1&lt;br /&gt;
	jb0 stok	;if sw1.1 off, skip self test&lt;br /&gt;
	jb5 inttest	;if sw1.6 on , &amp;quot;internal test&amp;quot;&lt;br /&gt;
	sel mb1		;jump to external memory&lt;br /&gt;
	jmp rstvec	;wait for switch to be thrown&lt;br /&gt;
inttest	dis ii		;disable all interrupts&lt;br /&gt;
	dis xi&lt;br /&gt;
	mov r0,#3FH	;test internal ram memory&lt;br /&gt;
stlup	mov a,#0AAH	;test regs with pattern=AA&lt;br /&gt;
	mov @r0,a&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	cpl a		;1's compl pattern&lt;br /&gt;
	mov @r0,a&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	xrl a,#55H	;check result&lt;br /&gt;
	jnz L0025	;error&lt;br /&gt;
	djnz r0,stlup	;loop until all regs tested&lt;br /&gt;
	call bell	;beep once&lt;br /&gt;
L0025	mov a,#01H	;both recv &amp;amp; xmit at same baud rate&lt;br /&gt;
	mov umx,a&lt;br /&gt;
	mov a,#41H	;loop back, 8 bit chars&lt;br /&gt;
	mov ucr,a&lt;br /&gt;
	mov r0,#3DH&lt;br /&gt;
	mov a,#02H&lt;br /&gt;
	mov @r0,a&lt;br /&gt;
	mov r4,a&lt;br /&gt;
sthispd	mov r2,a	;test uart with AA &amp;amp; 55&lt;br /&gt;
	call setbrm&lt;br /&gt;
stxwt	mov a,stat	;wait until xmtr ready&lt;br /&gt;
	cpl a&lt;br /&gt;
	jb5 stxwt&lt;br /&gt;
	mov a,#0AAH&lt;br /&gt;
L003A	out xmtr&lt;br /&gt;
	mov r1,#60H&lt;br /&gt;
stdly	call dlaysub	;delay 60H x dlaysub&lt;br /&gt;
	djnz r1,stdly&lt;br /&gt;
	mov a,stat	;recv buf better be full&lt;br /&gt;
	cpl a&lt;br /&gt;
	jb0 sterror	;error - recv buffer not full&lt;br /&gt;
	in rcvr		;get char recv'd&lt;br /&gt;
	cpl a		;change AA to 55 and do again&lt;br /&gt;
	djnz r2,l003a&lt;br /&gt;
	xrl a,#55H	;check result&lt;br /&gt;
	jnz sterror&lt;br /&gt;
	mov a,#02H	;do again with a different baud rate&lt;br /&gt;
	mov @r0,#0DH&lt;br /&gt;
	djnz r4,sthispd&lt;br /&gt;
	call bell	;beep again if all ok&lt;br /&gt;
	jmp stok&lt;br /&gt;
sterror	in rcvr		;clear garbage perhaps left in receiver&lt;br /&gt;
stok	mov r0,#3FH	;clear all regs&lt;br /&gt;
	clr a&lt;br /&gt;
iniclrr	mov @r0,a&lt;br /&gt;
	djnz r0,iniclrr&lt;br /&gt;
	call L02CF&lt;br /&gt;
	mov ucr,a&lt;br /&gt;
	call getsw1	;get switch #1&lt;br /&gt;
	mov r2,a	;save&lt;br /&gt;
	mov r4,#25H&lt;br /&gt;
	jb2 dkbkgnd	;if dark-bkgnd then r4=25 else r4=2d&lt;br /&gt;
	mov r4,#2DH&lt;br /&gt;
dkbkgnd	jb1 L0070&lt;br /&gt;
	xch a,r4&lt;br /&gt;
	orl a,#10H&lt;br /&gt;
	xch a,r4&lt;br /&gt;
L0070	mov a,#0DH	;set cursor size&lt;br /&gt;
	mov tcp,a&lt;br /&gt;
	mov a,r2	;get sw1 again&lt;br /&gt;
	jb4 L007A	;if block cursor then csr=0F else csr=79&lt;br /&gt;
	mov a,#79H	;1 line cursor&lt;br /&gt;
	jmp L007C&lt;br /&gt;
L007A	mov a,#0FH	;full block cursor&lt;br /&gt;
L007C	mov @tcp,a&lt;br /&gt;
	mov a,r2	;get sw1 again&lt;br /&gt;
	jb3 L0084	;if not blink cursor then r4=r4 OR 2&lt;br /&gt;
	mov a,r4&lt;br /&gt;
	orl a,#02H&lt;br /&gt;
	mov r4,a&lt;br /&gt;
L0084	mov a,r2	;get sw1 again, check dual intens/F0 clock&lt;br /&gt;
	cpl a&lt;br /&gt;
	anl a,#40H&lt;br /&gt;
	orl a,#14H	;scr=bus mode, 9 dots/cell, sequential, clk / 1&lt;br /&gt;
	mov scr,a	;set system control reg&lt;br /&gt;
	call getsw3	;get switch # 3&lt;br /&gt;
	swap a		;move baud rate bits to lo nibble&lt;br /&gt;
	anl a,#0FH	;mask baud rate bits&lt;br /&gt;
	mov r3,a&lt;br /&gt;
	mov r0,#3DH&lt;br /&gt;
	mov @r0,a	;store baud rate at r3d&lt;br /&gt;
	call setbr	;set the baud rate&lt;br /&gt;
	jmp ldvtmg	;load video timing chain (continue with init sequence)&lt;br /&gt;
;&lt;br /&gt;
;&lt;br /&gt;
setbrm	mov r0,#3DH	;set baud rate from memory (reg 3d)&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	mov r3,a&lt;br /&gt;
setbr	add a,#0B6H	;set baud rate without affecting memory (reg 3d)&lt;br /&gt;
	movp a,@a&lt;br /&gt;
	mov psr,a	;set prescale reg (hi 4 bits=prescale, lo 3 bits=hi baud rate divisor)&lt;br /&gt;
	mov a,r3&lt;br /&gt;
	add a,#0A6H&lt;br /&gt;
	movp a,@a&lt;br /&gt;
	mov baud,a	;set baud rate reg (low 8 bits of baud rate divisor)&lt;br /&gt;
	ret&lt;br /&gt;
;  this is the baud rate divisor table&lt;br /&gt;
lbdtbl	db	018H,059H,0ffH,07fh,0bfh,05fh,03fh,02fh&lt;br /&gt;
	db	01fh,017h,00fh,00bh,005h,005h,005h,017h&lt;br /&gt;
hbdtbl	db	064h,063h,062h,061h,060h,060h,060h,060h&lt;br /&gt;
	db	060h,060h,060h,060h,060h,060h,060h,060h&lt;br /&gt;
;&lt;br /&gt;
ldvtmg	clr a		;load video timing chain&lt;br /&gt;
	mov tcp,a	;point tcp at tcp reg 0&lt;br /&gt;
	mov a,r2	;get sw1 from a while back&lt;br /&gt;
	sel rb1&lt;br /&gt;
	jb7 hz60	;jmp if 60 Hz&lt;br /&gt;
	mov r2,#7EH	;50 hz H len&lt;br /&gt;
	mov r5,#0B9H	;50 hz char scan height&lt;br /&gt;
	mov r3,#0CCH	;50 hz blink rate&lt;br /&gt;
	jmp ldvtog&lt;br /&gt;
hz60	mov r2,#67H	;60 hz H len&lt;br /&gt;
	mov r5,#98H	;60 hz char scan height,9 extra scans at end of frame&lt;br /&gt;
	mov r3,#0ACH	;60hz blink rate, 50% duty cycle&lt;br /&gt;
ldvtog	mov a,r2&lt;br /&gt;
	mov @tcp,a	;set H len&lt;br /&gt;
	mov a,#4FH&lt;br /&gt;
	mov @tcp,a	;set HBR - Horiz blank begin&lt;br /&gt;
	mov a,#56H&lt;br /&gt;
	mov @tcp,a	;set HSBR- Horiz sync begin&lt;br /&gt;
	mov a,#65H&lt;br /&gt;
	mov @tcp,a	;set HSER - Horiz sync end&lt;br /&gt;
	mov a,r5&lt;br /&gt;
	mov @tcp,a	;set CSHR - Char scan height in Hi nibble, ES/F in LO&lt;br /&gt;
	mov a,#1AH&lt;br /&gt;
	mov @tcp,a	;Vertical length&lt;br /&gt;
	mov a,#18H&lt;br /&gt;
	mov @tcp,a	;Vertical blanking&lt;br /&gt;
	mov a,#08H&lt;br /&gt;
	mov @tcp,a	;Vertical sync begin&lt;br /&gt;
	mov a,#17H&lt;br /&gt;
	mov @tcp,a	;Status row begin&lt;br /&gt;
	mov a,r3&lt;br /&gt;
	mov @tcp,a	;Blink rate&lt;br /&gt;
	mov a,#30H&lt;br /&gt;
	mov @tcp,a	;gfx col reg&lt;br /&gt;
	mov a,#35H&lt;br /&gt;
	mov @tcp,a	;gfx row&lt;br /&gt;
	mov a,#89H&lt;br /&gt;
	mov @tcp,a	;underline size = 8 (hi) 9 (lo)&lt;br /&gt;
	sel rb0&lt;br /&gt;
	mov a,r4&lt;br /&gt;
	mov vcr,a&lt;br /&gt;
	call L052B&lt;br /&gt;
	mov endd,a&lt;br /&gt;
	mov srow,a&lt;br /&gt;
	clr a&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	mov begd,a	;beginning of display ram = 0000&lt;br /&gt;
	mov home,a	;home address = 0000	(this changes with scrolling)&lt;br /&gt;
	mov vint,a	;vertical interrupt reg &amp;lt;= 0&lt;br /&gt;
	mov a,#0FFH&lt;br /&gt;
	mov al0,a	;attribute latch &amp;lt;=ff (none)&lt;br /&gt;
	mov r0,#37H	;r37 &amp;lt;= ff&lt;br /&gt;
	mov @r0,a&lt;br /&gt;
	mov a,#0FCH	;attribute latch1&amp;lt;=FC (reverse, half intens)&lt;br /&gt;
	mov al1,a&lt;br /&gt;
	call getsw2	;read sw # 2&lt;br /&gt;
	mov r4,a&lt;br /&gt;
	anl a,#30H	;mask off all but HDX/FDX &amp;amp; local/on-line (bits 5,6)&lt;br /&gt;
	orl a,#02H&lt;br /&gt;
	mov r7,a	;set r7 with fdx,on-line switches, and enable kbd&lt;br /&gt;
	mov a,r4	;get sw2 back&lt;br /&gt;
	rr a		;move split baud switches to a1,0&lt;br /&gt;
	anl a,#07H	;keep xmit/rcv slow &amp;amp; split baud divisor&lt;br /&gt;
	add a,#lo spbdtb ;index into split baud rate table&lt;br /&gt;
	movp a,@a&lt;br /&gt;
	mov umx,a	;load uart multiplex reg&lt;br /&gt;
	mov a,r4	;get sw2 back&lt;br /&gt;
	jb6 L012A	;jmp if encoded kbd&lt;br /&gt;
	mov a,#0FFH	;load timer with -1 and start (a short time)&lt;br /&gt;
	mov t,a&lt;br /&gt;
	strt t&lt;br /&gt;
L012A	mov a,#50H	;enab timer int &amp;amp; uart rcv buf full masks&lt;br /&gt;
	mov mask,a&lt;br /&gt;
	orl port,#40H	;drop rts&lt;br /&gt;
	mov r1,#3FH&lt;br /&gt;
	mov @r1,#07H	;to fill mem?&lt;br /&gt;
L0133	mov a,#10H	;move 1000 to cursor address&lt;br /&gt;
L0135	mov hacc,a&lt;br /&gt;
L0136	mov r0,a	;ro &amp;lt;= 10h&lt;br /&gt;
	clr a&lt;br /&gt;
L0138	mov curs,a	;set curs addr&lt;br /&gt;
	mov a,@r1	;r1-&amp;gt;r3f = 07h&lt;br /&gt;
	movx @curs,a	;write 07h into video mem (attributes =?)&lt;br /&gt;
	mov a,curs&lt;br /&gt;
	inc a&lt;br /&gt;
	jnz L0138	;continue until lo a =0&lt;br /&gt;
	djnz r0,L0138	;do above 10H times&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	mov curs,a&lt;br /&gt;
	call updstat&lt;br /&gt;
	en xi&lt;br /&gt;
	en ii&lt;br /&gt;
	jmp clrscrn&lt;br /&gt;
spbdtb	db	020h,010h,040h,010h,0a0h,090h,084h,081h&lt;br /&gt;
	page&lt;br /&gt;
;	internal interrupt handler&lt;br /&gt;
intint	sel rb1&lt;br /&gt;
	mov r7,a&lt;br /&gt;
	mov a,intr	;find out which device&lt;br /&gt;
nxtint	mov r5,a&lt;br /&gt;
	jb4 rcvchar	;uart recv full&lt;br /&gt;
	jb6 timer	;timer interrupt&lt;br /&gt;
	xch a,r7&lt;br /&gt;
	sel rb0		;all ints have been serviced, return&lt;br /&gt;
	retr&lt;br /&gt;
timer	mov r0,#3CH&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	jb6 L0162&lt;br /&gt;
	cpl f0		;set semaphore for keyboard scanner&lt;br /&gt;
L0162	mov a,r5	;cut real time and timer interrupts from INTR reg copy&lt;br /&gt;
	anl a,#3FH&lt;br /&gt;
	jmp	nxtint	;check for other ints&lt;br /&gt;
rcvchar	mov r1,#07H&lt;br /&gt;
	mov a,@r1&lt;br /&gt;
	cpl a&lt;br /&gt;
	mov r1,#1AH	;if on-line - put char in r1a, if local put in screen queue&lt;br /&gt;
	jb5 L0171	;jmp if on line&lt;br /&gt;
	call gqueptr	;get address of where to put char in queue&lt;br /&gt;
L0171	in rcvr		;get char from uart&lt;br /&gt;
	mov @r1,a	;enqueue&lt;br /&gt;
	anl a,#0FEH	;if char was 0 or 1, don't check status ???&lt;br /&gt;
	jz L017E&lt;br /&gt;
	mov a,stat	;check for overrun, framing, parity error&lt;br /&gt;
	anl a,#0EH&lt;br /&gt;
	jz L017E	;no error&lt;br /&gt;
	mov @r1,#7FH	;error, replace char with blot&lt;br /&gt;
L017E	mov a,r5	;cut RT,recv,xmtr emty &amp;amp; xmtr buf emty from intr copy&lt;br /&gt;
	anl a,#63H&lt;br /&gt;
	jmp	nxtint	;check for other ints&lt;br /&gt;
	page&lt;br /&gt;
; scanned keyboard service routine&lt;br /&gt;
scankbd	clr f0&lt;br /&gt;
	mov a,r5&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	movl r0,a&lt;br /&gt;
	mov a,r7&lt;br /&gt;
	cpl a&lt;br /&gt;
	jb1 L01AC&lt;br /&gt;
	mov r0,#38H&lt;br /&gt;
	clr a&lt;br /&gt;
	mov @r0,a&lt;br /&gt;
	mov r2,#10H&lt;br /&gt;
L0191	mov a,r2&lt;br /&gt;
	dec a&lt;br /&gt;
	orl a,#40H&lt;br /&gt;
	out port&lt;br /&gt;
	call getsckb&lt;br /&gt;
	jnz L01DD&lt;br /&gt;
L019A	djnz r2,L0191&lt;br /&gt;
L019C	mov r0,#38H&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	jz L01A5&lt;br /&gt;
	add a,#0FCH&lt;br /&gt;
	jnc L01B1&lt;br /&gt;
L01A5	clr a&lt;br /&gt;
	mov r2,#05H&lt;br /&gt;
L01A8	mov @r0,a&lt;br /&gt;
	inc r0&lt;br /&gt;
	djnz r2,L01A8&lt;br /&gt;
L01AC	movl a,r0&lt;br /&gt;
	mov a,hacc&lt;br /&gt;
	mov r5,a&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
L01B1	mov r2,#03H&lt;br /&gt;
L01B3	inc r0&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	jb7 L01C3&lt;br /&gt;
	jz L01C3&lt;br /&gt;
	call L01D5&lt;br /&gt;
	call L0205&lt;br /&gt;
	jb3 L01C7&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	orl a,#80H&lt;br /&gt;
	mov @r0,a&lt;br /&gt;
L01C3	djnz r2,L01B3&lt;br /&gt;
	jmp	L01AC&lt;br /&gt;
L01C7	mov r0,#3CH&lt;br /&gt;
	mov r3,#28H&lt;br /&gt;
	mov @r0,#40H&lt;br /&gt;
L01CD	call dlaysub&lt;br /&gt;
	djnz r3,L01CD&lt;br /&gt;
	mov @r0,#80H&lt;br /&gt;
	jmp	L01AC&lt;br /&gt;
L01D5	dis ii&lt;br /&gt;
	sel rb1&lt;br /&gt;
	cpl f0&lt;br /&gt;
	call L0335&lt;br /&gt;
	sel rb0&lt;br /&gt;
	en ii&lt;br /&gt;
	ret&lt;br /&gt;
L01DD	mov r3,a&lt;br /&gt;
	call dlaysub&lt;br /&gt;
	call getsckb&lt;br /&gt;
	xrl a,r3&lt;br /&gt;
	jnz L019A&lt;br /&gt;
	mov r0,#06H&lt;br /&gt;
	mov r4,a&lt;br /&gt;
	mov a,r3&lt;br /&gt;
	cpl a&lt;br /&gt;
	jb0 L01ED&lt;br /&gt;
	cpl f1&lt;br /&gt;
L01ED	jb0 L01F1&lt;br /&gt;
	call L0209&lt;br /&gt;
L01F1	rr a&lt;br /&gt;
	xch a,r4&lt;br /&gt;
	add a,#10H&lt;br /&gt;
	xch a,r4&lt;br /&gt;
	djnz r0,L01ED&lt;br /&gt;
	jmp	L019A&lt;br /&gt;
	page&lt;br /&gt;
dlaysub	mov a,#0FFH&lt;br /&gt;
L01FC	dec a&lt;br /&gt;
	jnz L01FC&lt;br /&gt;
	mov a,#0C8H&lt;br /&gt;
L0201	dec a&lt;br /&gt;
	jnz L0201&lt;br /&gt;
	ret&lt;br /&gt;
L0205	call getsckb&lt;br /&gt;
	mov a,hacc&lt;br /&gt;
	ret&lt;br /&gt;
L0209	mov r3,a&lt;br /&gt;
	mov a,r4&lt;br /&gt;
	add a,r2&lt;br /&gt;
	add a,#77H&lt;br /&gt;
	movp a,@a&lt;br /&gt;
L020F	xch a,r5&lt;br /&gt;
	mov a,r2&lt;br /&gt;
	add a,#0F2H&lt;br /&gt;
	jc L021F&lt;br /&gt;
	jf1 L021F&lt;br /&gt;
	call L0205&lt;br /&gt;
	jb1 L0223&lt;br /&gt;
	jb0 L0231&lt;br /&gt;
	jb2 L0228&lt;br /&gt;
L021F	clr f1&lt;br /&gt;
	mov a,r5&lt;br /&gt;
	jmp L0253&lt;br /&gt;
L0223	mov a,r5&lt;br /&gt;
	anl a,#1FH&lt;br /&gt;
	jmp L0253&lt;br /&gt;
L0228	mov a,r5&lt;br /&gt;
	add a,#9FH&lt;br /&gt;
	jnc L021F&lt;br /&gt;
	add a,#0E6H&lt;br /&gt;
	jc L021F&lt;br /&gt;
L0231	mov a,#5CH&lt;br /&gt;
L0233	xrl a,r5&lt;br /&gt;
	jnz L023A&lt;br /&gt;
	mov r5,#40H&lt;br /&gt;
	jmp L021F&lt;br /&gt;
L023A	mov a,#0D4H&lt;br /&gt;
	add a,r5&lt;br /&gt;
	jnc L021F&lt;br /&gt;
	add a,#0FCH&lt;br /&gt;
	jc L0247&lt;br /&gt;
L0243	mov a,#10H&lt;br /&gt;
L0245	jmp L0252&lt;br /&gt;
L0247	mov a,#0C4H&lt;br /&gt;
	add a,r5&lt;br /&gt;
	jc L0250&lt;br /&gt;
L024C	mov a,#0F0H&lt;br /&gt;
	jmp L0252&lt;br /&gt;
L0250	mov a,#0E0H&lt;br /&gt;
L0252	add a,r5&lt;br /&gt;
L0253	jnz L0259&lt;br /&gt;
	call L01D5&lt;br /&gt;
	jmp	L019C&lt;br /&gt;
L0259	dis ii&lt;br /&gt;
	mov r5,a&lt;br /&gt;
	xch a,r6&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	mov r6,#03H&lt;br /&gt;
	mov r1,#38H&lt;br /&gt;
	inc @r1&lt;br /&gt;
L0262	inc r1&lt;br /&gt;
	mov a,@r1&lt;br /&gt;
	jz L0271&lt;br /&gt;
	xrl a,r5&lt;br /&gt;
	anl a,#0DFH&lt;br /&gt;
	clr c&lt;br /&gt;
	rlc a&lt;br /&gt;
	jz L026F&lt;br /&gt;
	djnz r6,L0262&lt;br /&gt;
L026F	jmp L0273&lt;br /&gt;
L0271	mov a,r5&lt;br /&gt;
	mov @r1,a&lt;br /&gt;
L0273	mov a,hacc&lt;br /&gt;
	mov r6,a&lt;br /&gt;
	en ii&lt;br /&gt;
	xch a,r3&lt;br /&gt;
	ret&lt;br /&gt;
	page&lt;br /&gt;
;  keyboard encoder table&lt;br /&gt;
enctbl	db	01bh		;esc&lt;br /&gt;
	db	13h		;ctrl/s&lt;br /&gt;
	db	0ch		;ctrl/l (FF)&lt;br /&gt;
	db	0ah		;line feed&lt;br /&gt;
	db	0bh		;vert tab&lt;br /&gt;
	db	00h&lt;br /&gt;
	db	09h		;tab&lt;br /&gt;
	db	0eh		;ctrl/n&lt;br /&gt;
	db	08h		;back-space&lt;br /&gt;
	db	10h		;ctrl/p&lt;br /&gt;
	db	11h		;ctrl/q&lt;br /&gt;
	db	12h		;ctrl/r&lt;br /&gt;
	db	0fh		;ctrl/o&lt;br /&gt;
	db	'78923465718'	;digits row&lt;br /&gt;
	db	'\9-0'&lt;br /&gt;
	db	07eh		;tilde&lt;br /&gt;
	db	0,0,0&lt;br /&gt;
	db	'werytuqi'&lt;br /&gt;
	db	05fh		;underbar&lt;br /&gt;
	db	'o[p]'&lt;br /&gt;
	db	'456'		;numeric pad&lt;br /&gt;
	db	'sdfhgjak'&lt;br /&gt;
	db	0dh		;carriage ret&lt;br /&gt;
	db	'l:'&lt;br /&gt;
	db	03bh		;semi-colon&lt;br /&gt;
	db	'\'&lt;br /&gt;
	db	'123'		;numeric pad&lt;br /&gt;
	db	'xcvnbmz,'&lt;br /&gt;
	db	07fh		;rubout&lt;br /&gt;
	db	0,'/.',0&lt;br /&gt;
	db	'0',0,'.'	;numeric pad&lt;br /&gt;
	db	0,0,0,0,0,0&lt;br /&gt;
	db	' '		;space bar&lt;br /&gt;
	page&lt;br /&gt;
L02CF	call getsw3&lt;br /&gt;
	cpl a&lt;br /&gt;
	anl a,#0FH&lt;br /&gt;
	mov r3,a&lt;br /&gt;
	call getsw2&lt;br /&gt;
	rrc a&lt;br /&gt;
	mov a,r3&lt;br /&gt;
	rlc a&lt;br /&gt;
	mov r3,a&lt;br /&gt;
	ret&lt;br /&gt;
	page&lt;br /&gt;
;  get loc to put char into queue&lt;br /&gt;
gqueptr	mov r1,#21H	;r21 is ring buffer enqueue index&lt;br /&gt;
	mov a,@r1&lt;br /&gt;
	mov r2,a&lt;br /&gt;
	mov r3,a&lt;br /&gt;
	inc a&lt;br /&gt;
	xrl a,#15H	;check if time to wrap ring queue around&lt;br /&gt;
	jnz L02E8&lt;br /&gt;
	mov r3,#0FFH&lt;br /&gt;
L02E8	mov a,r3&lt;br /&gt;
	inc a&lt;br /&gt;
	mov @r1,a&lt;br /&gt;
	mov a,r2&lt;br /&gt;
	add a,#22H	;queue starts at r22, 14 hex long&lt;br /&gt;
	mov r1,a	;r1 is pointer to entry&lt;br /&gt;
	ret&lt;br /&gt;
lfandcr	call getsw2	;check lf+cr switch (for local mode)&lt;br /&gt;
	jb7 L02F8&lt;br /&gt;
	call gqueptr&lt;br /&gt;
	mov @r1,#0AH	;if on, shove in an extra lf&lt;br /&gt;
L02F8	ret&lt;br /&gt;
lfcr	call getsw2	;same as above for on-line mode&lt;br /&gt;
	jb7 L02F8&lt;br /&gt;
	mov r4,#0AH&lt;br /&gt;
	call SEND1CH&lt;br /&gt;
	mov r4,#0DH&lt;br /&gt;
	ret&lt;br /&gt;
; read setup dip switches into A&lt;br /&gt;
getsw1	mov a,#80H&lt;br /&gt;
	jmp getasw&lt;br /&gt;
getsw2	mov a,#0A0H&lt;br /&gt;
	jmp getasw&lt;br /&gt;
getsw3	mov a,#0C0H&lt;br /&gt;
	jmp getasw&lt;br /&gt;
getsckb	mov a,#0E0H&lt;br /&gt;
getasw	mov hacc,a&lt;br /&gt;
	movl r1,a&lt;br /&gt;
	movx a,@r1&lt;br /&gt;
	ret&lt;br /&gt;
SEND1CH	mov a,stat	;send 1 char out uart&lt;br /&gt;
	cpl a		;wait for xmit buf empty&lt;br /&gt;
	jb5 SEND1CH&lt;br /&gt;
s1cwait	in port		;check clear to send&lt;br /&gt;
	cpl a&lt;br /&gt;
	jb7 s1cgo&lt;br /&gt;
	anl port,#3FH	;raise request to send&lt;br /&gt;
	jmp s1cwait	;wait for clr to send&lt;br /&gt;
s1cgo	anl port,#7FH	&lt;br /&gt;
	mov a,r4	;get saved char&lt;br /&gt;
	out xmtr	;transmit char&lt;br /&gt;
	ret&lt;br /&gt;
L0327	sel rb1&lt;br /&gt;
	mov r4,a&lt;br /&gt;
	call SEND1CH&lt;br /&gt;
	sel rb0&lt;br /&gt;
	ret&lt;br /&gt;
	page&lt;br /&gt;
;	external interrupt handler&lt;br /&gt;
;		the only external int is the encoded keyboard&lt;br /&gt;
extint	sel rb1&lt;br /&gt;
	xch a,r7&lt;br /&gt;
	mov a,hacc&lt;br /&gt;
	xch a,r6&lt;br /&gt;
	in port		;read kbd char&lt;br /&gt;
	anl a,#7FH	;strip bit 7&lt;br /&gt;
	clr f0&lt;br /&gt;
L0335	mov r4,a	;put char in r4 (also entry from scanned kbd code)&lt;br /&gt;
	mov r0,#07H	;sel r7&lt;br /&gt;
	jnz L0340	;if char&amp;lt;&amp;gt;0 then r7=r7 AND df&lt;br /&gt;
	mov a,@r0	;get r7&lt;br /&gt;
	anl a,#0DFH	;set on-line/local bit to local ???&lt;br /&gt;
	mov @r0,a&lt;br /&gt;
	jmp L0353&lt;br /&gt;
L0340	mov a,@r0&lt;br /&gt;
	cpl a&lt;br /&gt;
	jb1 L035D&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	cpl a&lt;br /&gt;
	jb5 L0353&lt;br /&gt;
	call SEND1CH&lt;br /&gt;
	xrl a,#0DH	;is it cr ?&lt;br /&gt;
	jnz L0350	;no&lt;br /&gt;
	call lfcr	;send lf if lf+cr mode selected&lt;br /&gt;
L0350	mov a,@r0&lt;br /&gt;
	jb4 L035D	;test hdx/fdx bit, jmp if fdx&lt;br /&gt;
L0353	call gqueptr&lt;br /&gt;
	mov a,r4	;get kbd char in a&lt;br /&gt;
	mov @r1,a	;store in queue&lt;br /&gt;
	xrl a,#0DH&lt;br /&gt;
	jnz L035D&lt;br /&gt;
	call lfandcr&lt;br /&gt;
L035D	jnf0 realint	;if handler entered by kbd scanner rather than a real&lt;br /&gt;
	clr f0		;interrupt, we must return the right way. also clear&lt;br /&gt;
	ret		;kbd scan needed flag (f0)&lt;br /&gt;
realint	xch a,r6&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
L0363	xch a,r7&lt;br /&gt;
	sel rb0&lt;br /&gt;
L0365	jnxi L0365	;spin waiting for ext int to go away&lt;br /&gt;
	retr		;return and restore psw&lt;br /&gt;
L0368	jmp escpcod&lt;br /&gt;
L036A	jmp scankbd&lt;br /&gt;
	page&lt;br /&gt;
;	main terminal service loop&lt;br /&gt;
mainlp	jf0 L036A	;if flag 0 set, scan kbd&lt;br /&gt;
	mov r0,#20H&lt;br /&gt;
	mov a,@r0	;r2 &amp;lt;= r20&lt;br /&gt;
	inc r0&lt;br /&gt;
	mov r2,a&lt;br /&gt;
	mov a,@r0	;a&amp;lt;=r21&lt;br /&gt;
	xrl a,r2&lt;br /&gt;
L0375	jz mainlp	;if outque index=inque index, no data in queue&lt;br /&gt;
	inc r0&lt;br /&gt;
	mov a,r0	;a&amp;lt;=22&lt;br /&gt;
	add a,r2	;add index&lt;br /&gt;
	mov r1,a	;save outque ptr&lt;br /&gt;
	dis xi&lt;br /&gt;
	dis ii&lt;br /&gt;
	mov a,@r1	;get char from queue&lt;br /&gt;
	mov r3,a	;save in r3&lt;br /&gt;
	dec r0&lt;br /&gt;
	dec r0		;point back at r20&lt;br /&gt;
	mov a,r2&lt;br /&gt;
	xrl a,#14H	;check if queue has wrapped around&lt;br /&gt;
	jnz L0388&lt;br /&gt;
	mov r2,#0FFH	;reset to beginning of ring buf queue&lt;br /&gt;
L0388	mov a,r2&lt;br /&gt;
	inc a		;bump index&lt;br /&gt;
	mov @r0,a	;write index to r20&lt;br /&gt;
	en ii&lt;br /&gt;
	en xi&lt;br /&gt;
	mov a,r7	;check if last char was esc&lt;br /&gt;
	jb7 L0368&lt;br /&gt;
	mov a,r3	;get char back&lt;br /&gt;
	anl a,#60H	;get which ascii 'stick'&lt;br /&gt;
	jnz L0397&lt;br /&gt;
	jmp cntlcod	;if a ctrl char&lt;br /&gt;
L0397	mov r0,#3FH&lt;br /&gt;
	mov a,curs&lt;br /&gt;
	mov r1,a&lt;br /&gt;
	mov a,hacc&lt;br /&gt;
	add a,#10H&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	mov a,r1&lt;br /&gt;
	movl r1,a&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	movx @r1,a&lt;br /&gt;
	mov r0,#37H&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
L03A7	mov a,r3&lt;br /&gt;
	movx @curs,a&lt;br /&gt;
	call L04E6&lt;br /&gt;
	mov a,r7&lt;br /&gt;
	cpl a&lt;br /&gt;
	jb0 L03B8&lt;br /&gt;
	mov a,#0F0H&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	movl r1,a&lt;br /&gt;
L03B3	movx a,@r1&lt;br /&gt;
	jb0 L03B3&lt;br /&gt;
	mov a,r3&lt;br /&gt;
	movx @r1,a&lt;br /&gt;
L03B8	inc r6&lt;br /&gt;
	mov a,r6&lt;br /&gt;
	add a,#0AFH&lt;br /&gt;
	jnc mainlp&lt;br /&gt;
	inc r5&lt;br /&gt;
	mov r6,#01H&lt;br /&gt;
	call L03F1&lt;br /&gt;
	jc L03CA&lt;br /&gt;
	mov a,curs&lt;br /&gt;
	call L03DB&lt;br /&gt;
	jmp L03D8&lt;br /&gt;
L03CA	dec r5&lt;br /&gt;
	call clrline&lt;br /&gt;
	mov a,home&lt;br /&gt;
	add a,#50H&lt;br /&gt;
	mov home,a&lt;br /&gt;
	call L03EA&lt;br /&gt;
	jnc L03D8&lt;br /&gt;
	clr a&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	mov home,a&lt;br /&gt;
L03D8	jmp mainlp&lt;br /&gt;
	page&lt;br /&gt;
clrline	mov a,home	; clear a line&lt;br /&gt;
L03DB	movl r0,a&lt;br /&gt;
	mov r2,#50H	;80 base 10&lt;br /&gt;
L03DE	dis ii&lt;br /&gt;
	mov a,#0FFH	;no attributes&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	mov a,#20H	;space&lt;br /&gt;
L03E4	movx @r0,a	;write space to video mem&lt;br /&gt;
	incl r0&lt;br /&gt;
	djnz r2,L03E4&lt;br /&gt;
	en ii&lt;br /&gt;
	ret&lt;br /&gt;
L03EA	mov a,home&lt;br /&gt;
L03EB	add a,#80H&lt;br /&gt;
	mov a,hacc&lt;br /&gt;
	add a,#0F8H&lt;br /&gt;
	ret&lt;br /&gt;
L03F1	mov a,r5&lt;br /&gt;
	add a,#0E7H&lt;br /&gt;
	ret&lt;br /&gt;
L03F5	clr c		;sets cy if curs=00xx&lt;br /&gt;
	mov a,hacc&lt;br /&gt;
	xrl a,#0FFH&lt;br /&gt;
	jnz L03FC&lt;br /&gt;
	cpl c&lt;br /&gt;
L03FC	ret&lt;br /&gt;
	page&lt;br /&gt;
; process control chars&lt;br /&gt;
; an error here is that 'show control codes' mode should be tested first&lt;br /&gt;
cntlcod	mov a,r3	;get char&lt;br /&gt;
	xrl a,#1BH	;see if esc&lt;br /&gt;
	jz ctlesc&lt;br /&gt;
	mov a,r7&lt;br /&gt;
	jb6 shoctrl	;in show ctrl chars mode&lt;br /&gt;
	mov a,r3	;get char&lt;br /&gt;
	jnz L0412&lt;br /&gt;
	jmp illesc	;illegal esc seq, sho stat line and return to main loop&lt;br /&gt;
shoctrl	mov a,r3	;show control codes&lt;br /&gt;
	orl a,#0C0H	;force ctrl code to upper case, rev. video&lt;br /&gt;
	mov r3,a&lt;br /&gt;
	call L078B&lt;br /&gt;
	jmp L03A7&lt;br /&gt;
L0412	add a,#0EBH	;greater than 14H ?&lt;br /&gt;
	jc L043C&lt;br /&gt;
	mov a,r3	;get char&lt;br /&gt;
	add a,#0F9H&lt;br /&gt;
	jnc L0457	;ignore&lt;br /&gt;
	add a,#1EH	;add table index&lt;br /&gt;
	jmpp @a&lt;br /&gt;
ctltbl	db	lo cbell ;control chars jump table - starts with ctrl/g&lt;br /&gt;
	db	062h&lt;br /&gt;
	db	086h&lt;br /&gt;
	db	0abh&lt;br /&gt;
	db	0c5h&lt;br /&gt;
	db	02ch&lt;br /&gt;
	db	0dfh&lt;br /&gt;
	db	030h&lt;br /&gt;
	db	032h&lt;br /&gt;
	db	062h&lt;br /&gt;
	db	034h&lt;br /&gt;
	db	036h&lt;br /&gt;
	db	038h&lt;br /&gt;
	db	03ah&lt;br /&gt;
	mov	r1,#3fh	;off page jumps for ctrl char table&lt;br /&gt;
	jmp L0133&lt;br /&gt;
	jmp L050A&lt;br /&gt;
	jmp L0520&lt;br /&gt;
	jmp L0531&lt;br /&gt;
	jmp L0542&lt;br /&gt;
	jmp L054A&lt;br /&gt;
	jmp L0559&lt;br /&gt;
L043C	add a,#42H&lt;br /&gt;
	movp a,@a&lt;br /&gt;
	mov r3,a&lt;br /&gt;
	jmp L0397&lt;br /&gt;
	inc r2&lt;br /&gt;
	mov srow,a&lt;br /&gt;
	inc r4&lt;br /&gt;
	orl a,r2&lt;br /&gt;
	anl a,r0&lt;br /&gt;
	orl a,r4&lt;br /&gt;
	anl a,r6&lt;br /&gt;
	anl a,r2&lt;br /&gt;
	orl a,r6&lt;br /&gt;
	inc r6&lt;br /&gt;
	anl a,r4&lt;br /&gt;
	page&lt;br /&gt;
;  ctrl char was escape&lt;br /&gt;
ctlesc	xch a,r7	;set r7.7, clr r7.3&lt;br /&gt;
	orl a,#80H&lt;br /&gt;
	anl a,#0F7H&lt;br /&gt;
	xch a,r7&lt;br /&gt;
	mov r0,#3EH&lt;br /&gt;
	mov @r0,#00H&lt;br /&gt;
L0457	jmp mainlp&lt;br /&gt;
cbell	call bell	;beep and back to mainloop&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
bell	anl port,#0DFH	;trigger the one shot on the port&lt;br /&gt;
	orl port,#20H&lt;br /&gt;
	ret&lt;br /&gt;
L0462	mov a,r6&lt;br /&gt;
	xrl a,#01H&lt;br /&gt;
	jz L0469&lt;br /&gt;
	djnz r6,L047A&lt;br /&gt;
L0469	mov r6,#50H&lt;br /&gt;
	dec r5&lt;br /&gt;
	mov a,r5&lt;br /&gt;
	jnz L0471&lt;br /&gt;
	mov r5,#18H&lt;br /&gt;
L0471	mov a,curs&lt;br /&gt;
	dec a&lt;br /&gt;
	call L03F5&lt;br /&gt;
	jnc L047A&lt;br /&gt;
	call L052B&lt;br /&gt;
	mov curs,a&lt;br /&gt;
L047A	dec curs&lt;br /&gt;
	mov a,r3&lt;br /&gt;
	xrl a,#08H&lt;br /&gt;
	jnz L0484&lt;br /&gt;
	movx a,@curs&lt;br /&gt;
L0481	mov a,#20H&lt;br /&gt;
	movx @curs,a&lt;br /&gt;
L0484	jmp mainlp&lt;br /&gt;
	mov a,r6&lt;br /&gt;
	mov r4,a&lt;br /&gt;
	add a,#08H&lt;br /&gt;
	anl a,#0F8H&lt;br /&gt;
	inc a&lt;br /&gt;
	mov r6,a&lt;br /&gt;
	add a,#0AFH&lt;br /&gt;
	jnc L049C&lt;br /&gt;
L0492	dec curs&lt;br /&gt;
	djnz r4,L0492&lt;br /&gt;
	inc curs&lt;br /&gt;
	mov r6,#01H&lt;br /&gt;
	call L04AF&lt;br /&gt;
	jmp L04A9&lt;br /&gt;
L049C	mov a,curs&lt;br /&gt;
	add a,#08H&lt;br /&gt;
	anl a,#0F8H&lt;br /&gt;
	mov curs,a&lt;br /&gt;
	call L03EB&lt;br /&gt;
	jnc L04A9&lt;br /&gt;
	clr f1&lt;br /&gt;
	call L04FE&lt;br /&gt;
L04A9	jmp mainlp&lt;br /&gt;
	page&lt;br /&gt;
;  preform line feed&lt;br /&gt;
lfhand	call L04AF&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
L04AF	inc r5		;bump line counter to next line&lt;br /&gt;
	call L03F1	;check if on bottom line&lt;br /&gt;
	jnc L04C2	;no - don't scroll&lt;br /&gt;
	dec r5		;yes, put line # back to 18 and scroll instead&lt;br /&gt;
	call clrline	;clear a line&lt;br /&gt;
	mov a,home	;move the home line down one&lt;br /&gt;
	add a,#50H	;...by adding 80 to it&lt;br /&gt;
	mov home,a&lt;br /&gt;
	call L03EA&lt;br /&gt;
	jnc L04C2	;if no carry, ok&lt;br /&gt;
	clr a		;otherwise, we have wrapped all the way around,&lt;br /&gt;
	mov hacc,a	;so put home back to first place in memory&lt;br /&gt;
	mov home,a&lt;br /&gt;
L04C2	call L04EB&lt;br /&gt;
	ret&lt;br /&gt;
	mov r4,#08H&lt;br /&gt;
L04C7	call L04AF&lt;br /&gt;
	djnz r4,L04C7&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
clrscrn	mov r5,#18H	;clear entire screen (24 lines)&lt;br /&gt;
	clr a&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	mov home,a&lt;br /&gt;
	mov curs,a&lt;br /&gt;
L04D3	call clrline&lt;br /&gt;
	mov a,home&lt;br /&gt;
	add a,#50H&lt;br /&gt;
	mov home,a&lt;br /&gt;
	djnz r5,L04D3&lt;br /&gt;
	mov a,curs&lt;br /&gt;
	mov home,a&lt;br /&gt;
	jmp L0544&lt;br /&gt;
crhand	dec curs	;carriage return handling&lt;br /&gt;
	djnz r6,crhand	;back up cursor column_no times&lt;br /&gt;
	inc curs&lt;br /&gt;
	inc r6&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
L04E6	clr f1&lt;br /&gt;
	inc curs&lt;br /&gt;
	mov a,curs&lt;br /&gt;
	jmp L04EF&lt;br /&gt;
L04EB	cpl f1&lt;br /&gt;
	mov a,curs&lt;br /&gt;
	add a,#50H&lt;br /&gt;
L04EF	movl r0,a&lt;br /&gt;
	mov a,r6&lt;br /&gt;
	xrl a,#48H&lt;br /&gt;
	jnz L04F7&lt;br /&gt;
	call bell&lt;br /&gt;
L04F7	movl a,r0&lt;br /&gt;
	call L03EB&lt;br /&gt;
	jc L04FE&lt;br /&gt;
	jmp L0506&lt;br /&gt;
L04FE	clr a&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	movl r0,a&lt;br /&gt;
	jnf1 L0506&lt;br /&gt;
	mov a,r6&lt;br /&gt;
	dec a&lt;br /&gt;
	mov r0,a&lt;br /&gt;
L0506	clr f1&lt;br /&gt;
	movl a,r0&lt;br /&gt;
	mov curs,a&lt;br /&gt;
	ret&lt;br /&gt;
L050A	mov r1,#50H	;back up cursor 1 full line&lt;br /&gt;
L050C	dec curs&lt;br /&gt;
	djnz r1,L050C&lt;br /&gt;
	mov a,curs&lt;br /&gt;
	call L03F5&lt;br /&gt;
	jnc L051A&lt;br /&gt;
	call L052B&lt;br /&gt;
	mov a,#2FH&lt;br /&gt;
	add a,r6&lt;br /&gt;
	mov curs,a&lt;br /&gt;
L051A	djnz r5,L051E&lt;br /&gt;
	mov r5,#18H&lt;br /&gt;
L051E	jmp mainlp&lt;br /&gt;
L0520	inc r5&lt;br /&gt;
	call L03F1&lt;br /&gt;
	jnc L0527&lt;br /&gt;
	mov r5,#01H&lt;br /&gt;
L0527	call L04EB&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
L052B	mov a,#07H&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	mov a,#80H&lt;br /&gt;
	ret&lt;br /&gt;
L0531	call L04E6&lt;br /&gt;
	inc r6&lt;br /&gt;
	mov a,r6&lt;br /&gt;
	add a,#0AFH&lt;br /&gt;
	jnc L0540&lt;br /&gt;
	mov r6,#01H&lt;br /&gt;
	inc r5&lt;br /&gt;
	call L03F1&lt;br /&gt;
	jc L0542&lt;br /&gt;
L0540	jmp mainlp&lt;br /&gt;
L0542	mov a,home&lt;br /&gt;
	mov curs,a&lt;br /&gt;
L0544	mov a,#01H&lt;br /&gt;
	mov r5,a&lt;br /&gt;
	mov r6,a&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
L054A	call L02CF&lt;br /&gt;
	orl a,#20H&lt;br /&gt;
	mov ucr,a&lt;br /&gt;
	mov r2,#96H&lt;br /&gt;
L0551	call dlaysub&lt;br /&gt;
	djnz r2,L0551&lt;br /&gt;
	mov a,r3&lt;br /&gt;
	mov ucr,a&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
L0559	mov r0,#3DH&lt;br /&gt;
	inc @r0&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	anl a,#0FH&lt;br /&gt;
	mov @r0,a&lt;br /&gt;
	call setbrm&lt;br /&gt;
	jmp L05FF&lt;br /&gt;
	page&lt;br /&gt;
;  escape code handling&lt;br /&gt;
escpcod	anl a,#7FH	;turn off esc flag in r7&lt;br /&gt;
	jb2 esc3ch&lt;br /&gt;
	jb3 L05A3&lt;br /&gt;
	xch a,r7	;put r7 back&lt;br /&gt;
	mov a,r3	;get char&lt;br /&gt;
	add a,#0BFH	;offset for 'A'&lt;br /&gt;
	jb7 illesc	;if less than 'A', do nothing&lt;br /&gt;
	add a,#73H	;index to table&lt;br /&gt;
	jmpp @a&lt;br /&gt;
esctbl	db	0e7h	;A&lt;br /&gt;
	db	0ffh	;B&lt;br /&gt;
	db	0efh	;C&lt;br /&gt;
	db	0a5h	;D&lt;br /&gt;
	db	0a9h	;E&lt;br /&gt;
	db	0f3h	;F&lt;br /&gt;
	db	0aeh	;G&lt;br /&gt;
	db	0c0h	;H&lt;br /&gt;
	db	0c5h	;I&lt;br /&gt;
	db	09fh	;J&lt;br /&gt;
	db	0f7h	;K&lt;br /&gt;
	db	003h	;L&lt;br /&gt;
	db	08ch	;M&lt;br /&gt;
	db	09fh	;N&lt;br /&gt;
	db	0fbh	;O&lt;br /&gt;
	db	08eh	;P&lt;br /&gt;
	db	090h	;Q&lt;br /&gt;
	db	092h	;R&lt;br /&gt;
	db	094h	;S&lt;br /&gt;
	db	096h	;T&lt;br /&gt;
	db	09fh	;U&lt;br /&gt;
	db	0d9h	;V&lt;br /&gt;
	db	09fh	;W&lt;br /&gt;
	db	0ebh	;X&lt;br /&gt;
	db	098h	;Y&lt;br /&gt;
	jmp esc$m	;OFF PAGE JMPS - esc/M&lt;br /&gt;
	jmp L060F&lt;br /&gt;
	jmp inttest	;esc/Q - reset and self test&lt;br /&gt;
	jmp L0638&lt;br /&gt;
L0594	jmp L064A&lt;br /&gt;
	jmp L0670&lt;br /&gt;
L0598	jmp L067E&lt;br /&gt;
setb7	orl a,r7&lt;br /&gt;
	jmp L059E&lt;br /&gt;
clrb7	anl a,r7&lt;br /&gt;
L059E	mov r7,a&lt;br /&gt;
illesc	call updstat	;on illegal esc seq - update status line and return to loop&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
L05A3	jmp L06A5&lt;br /&gt;
L05A5	mov a,#20H&lt;br /&gt;
	jmp L05AB&lt;br /&gt;
	mov a,#10H&lt;br /&gt;
L05AB	xrl a,r7&lt;br /&gt;
	jmp L059E&lt;br /&gt;
	mov r3,#7FH&lt;br /&gt;
L05B0	call L0733	;strip bit 7 from status line (rev vid?)&lt;br /&gt;
	movl r0,a&lt;br /&gt;
	mov r1,#50H&lt;br /&gt;
L05B5	movx a,@r0&lt;br /&gt;
	anl a,#7FH&lt;br /&gt;
	movx @r0,a&lt;br /&gt;
	incl r0&lt;br /&gt;
	djnz r1,L05B5&lt;br /&gt;
	mov a,r3&lt;br /&gt;
	mov al1,a&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
	mov a,#0FCH&lt;br /&gt;
	mov al1,a&lt;br /&gt;
	jmp illesc&lt;br /&gt;
	mov a,r7&lt;br /&gt;
	orl a,#84H	;turn on esc &amp;amp; r7.2 flags for 3 char esc seq&lt;br /&gt;
	jmp L059E&lt;br /&gt;
esc3ch	jb3 L05DE	;if r7.2 on bit 3 off, then 3 char esc seq is complete&lt;br /&gt;
	anl a,#7BH	;remove bit 2&lt;br /&gt;
	mov r7,a&lt;br /&gt;
	mov r0,#37H	;store char in r37&lt;br /&gt;
	mov a,r3&lt;br /&gt;
	mov @r0,a&lt;br /&gt;
	call getsw1	;check if internal attributes&lt;br /&gt;
	jb1 L05B0&lt;br /&gt;
	jmp mainlp	;ignore&lt;br /&gt;
	mov a,r7&lt;br /&gt;
	orl a,#8CH&lt;br /&gt;
	jmp L059E&lt;br /&gt;
L05DE	anl a,#73H	;turn off all esc func bits&lt;br /&gt;
	mov r7,a&lt;br /&gt;
	mov r0,#3FH	;put char in 3f&lt;br /&gt;
	mov a,r3&lt;br /&gt;
	mov @r0,a&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
	mov a,#01H	;aux printer on&lt;br /&gt;
	jmp setb7&lt;br /&gt;
	mov a,#0FEH	;aux printer off&lt;br /&gt;
	jmp clrb7&lt;br /&gt;
	mov a,#40H	;ctl mode on&lt;br /&gt;
	jmp setb7&lt;br /&gt;
	mov a,#0BFH	;ctl mode off&lt;br /&gt;
	jmp clrb7&lt;br /&gt;
	mov a,#02H	;&lt;br /&gt;
	jmp setb7&lt;br /&gt;
	mov a,#0FDH&lt;br /&gt;
	jmp clrb7&lt;br /&gt;
L05FF	call L0739&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
	mov a,hpen&lt;br /&gt;
	add a,#20H&lt;br /&gt;
	call L0327&lt;br /&gt;
	mov a,vpen&lt;br /&gt;
	add a,#20H&lt;br /&gt;
	call L0327&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
L060F	dis ii&lt;br /&gt;
	orl port,#80H&lt;br /&gt;
	mov a,home&lt;br /&gt;
	movl r0,a&lt;br /&gt;
	mov r2,#18H&lt;br /&gt;
	mov a,#0F0H&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	movl r1,a&lt;br /&gt;
L061A	mov r3,#50H&lt;br /&gt;
L061C	movx a,@r1&lt;br /&gt;
	jb0 L061C&lt;br /&gt;
	movx a,@r0&lt;br /&gt;
	movx @r1,a&lt;br /&gt;
	incl r0&lt;br /&gt;
	djnz r3,L061C&lt;br /&gt;
L0624	movx a,@r1&lt;br /&gt;
	jb0 L0624&lt;br /&gt;
	mov a,#0DH&lt;br /&gt;
	movx @r1,a&lt;br /&gt;
	movl a,r0&lt;br /&gt;
	call L03EB&lt;br /&gt;
	jnc L0632&lt;br /&gt;
	clr a&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	movl r0,a&lt;br /&gt;
L0632	djnz r2,L061A&lt;br /&gt;
	anl port,#7FH&lt;br /&gt;
	jmp L0666&lt;br /&gt;
L0638	mov a,r6&lt;br /&gt;
	dec a&lt;br /&gt;
	mov r3,a&lt;br /&gt;
	jz L0666&lt;br /&gt;
	mov a,curs&lt;br /&gt;
L063E	dec a&lt;br /&gt;
	djnz r3,L063E&lt;br /&gt;
	movl r0,a&lt;br /&gt;
	mov a,r6&lt;br /&gt;
	dec a&lt;br /&gt;
	mov r3,a&lt;br /&gt;
	dis ii&lt;br /&gt;
	call L0669&lt;br /&gt;
	jmp L0666&lt;br /&gt;
L064A	mov a,home&lt;br /&gt;
	movl r0,a&lt;br /&gt;
	mov a,r5&lt;br /&gt;
	mov r2,a&lt;br /&gt;
	dis ii&lt;br /&gt;
L064F	mov a,r2&lt;br /&gt;
	xrl a,#01H&lt;br /&gt;
	jz L0638&lt;br /&gt;
	mov r3,#50H&lt;br /&gt;
	call L0669&lt;br /&gt;
	mov a,#0DH&lt;br /&gt;
	call L0327&lt;br /&gt;
	movl a,r0&lt;br /&gt;
	call L03EB&lt;br /&gt;
	jnc L0664&lt;br /&gt;
	clr a&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	movl r0,a&lt;br /&gt;
L0664	djnz r2,L064F&lt;br /&gt;
L0666	en ii&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
L0669	movx a,@r0&lt;br /&gt;
	call L0327&lt;br /&gt;
	incl r0&lt;br /&gt;
	djnz r3,L0669&lt;br /&gt;
	ret&lt;br /&gt;
L0670	clr f1&lt;br /&gt;
L0671	mov a,curs&lt;br /&gt;
	movl r0,a&lt;br /&gt;
	mov a,r6&lt;br /&gt;
	cpl a&lt;br /&gt;
	add a,#52H&lt;br /&gt;
	mov r2,a&lt;br /&gt;
	call L03DE&lt;br /&gt;
	jnf1 L0699&lt;br /&gt;
	clr f1&lt;br /&gt;
	ret&lt;br /&gt;
L067E	cpl f1&lt;br /&gt;
	call L0671&lt;br /&gt;
	inc r5&lt;br /&gt;
	call L03F1&lt;br /&gt;
	jc L0698&lt;br /&gt;
	mov a,r5&lt;br /&gt;
	cpl a&lt;br /&gt;
	add a,#1AH&lt;br /&gt;
	mov r4,a&lt;br /&gt;
L068B	movl a,r0&lt;br /&gt;
	call L03EB&lt;br /&gt;
	jnc L0693&lt;br /&gt;
	clr a&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	movl r0,a&lt;br /&gt;
L0693	movl a,r0&lt;br /&gt;
	call L03DB&lt;br /&gt;
	djnz r4,L068B&lt;br /&gt;
L0698	dec r5&lt;br /&gt;
L0699	jmp mainlp&lt;br /&gt;
esc$m	xch a,r7	;esc/M - 4 char esc seq&lt;br /&gt;
	orl a,#88H	;set flags to get rest of sequence&lt;br /&gt;
	xch a,r7&lt;br /&gt;
	clr a&lt;br /&gt;
	mov r1,#3EH	;clear r3e - indicates next char is 3rd of 4&lt;br /&gt;
	mov @r1,a&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
L06A5	mov r1,#3EH	;handles 3rd &amp;amp; 4th chars of 4 char esc&lt;br /&gt;
	clr a		;checking if 3rd or 4th&lt;br /&gt;
	xrl a,@r1&lt;br /&gt;
	jnz L06C0	;if a char is in r3e (x coord) we now have 4th char&lt;br /&gt;
	mov a,r3	; no - get 3rd char (x coord)&lt;br /&gt;
	add a,#0E0H&lt;br /&gt;
	jc L06B1&lt;br /&gt;
	clr a&lt;br /&gt;
L06B1	mov r3,a&lt;br /&gt;
	add a,#0AFH&lt;br /&gt;
	jnc L06BA&lt;br /&gt;
	mov a,#50H&lt;br /&gt;
	jmp L06BB&lt;br /&gt;
L06BA	mov a,r3	;get char&lt;br /&gt;
L06BB	inc a&lt;br /&gt;
	mov @r1,a	;put x addr in r3e, so we have it next time thru...&lt;br /&gt;
	mov r6,a	;and it also indicates that we have already got 3rd&lt;br /&gt;
	jmp mainlp&lt;br /&gt;
L06C0	mov a,r3	;now process the 4th&lt;br /&gt;
	add a,#0E0H	;char offset&lt;br /&gt;
	jc L06C6&lt;br /&gt;
	clr a&lt;br /&gt;
L06C6	mov r3,a&lt;br /&gt;
	add a,#0E6H&lt;br /&gt;
	jnc L06CF&lt;br /&gt;
	mov a,#18H&lt;br /&gt;
	jmp L06D0&lt;br /&gt;
L06CF	mov a,r3&lt;br /&gt;
L06D0	mov r4,a&lt;br /&gt;
	inc a&lt;br /&gt;
	mov r5,a&lt;br /&gt;
	mov a,home&lt;br /&gt;
	mov curs,a&lt;br /&gt;
L06D5	mov a,r4&lt;br /&gt;
	jz L06DC&lt;br /&gt;
	call L04EB&lt;br /&gt;
	djnz r4,L06D5&lt;br /&gt;
L06DC	mov a,curs	;move cursor&lt;br /&gt;
	add a,@r1&lt;br /&gt;
	dec a&lt;br /&gt;
	mov curs,a&lt;br /&gt;
	xch a,r7&lt;br /&gt;
	anl a,#77H	;turn off esc and r7.3 flags&lt;br /&gt;
	xch a,r7&lt;br /&gt;
	jmp mainlp	;done&lt;br /&gt;
	page&lt;br /&gt;
;  status line handling&lt;br /&gt;
L06E6	call L0733&lt;br /&gt;
	movl r1,a&lt;br /&gt;
	mov r2,#50H&lt;br /&gt;
	call L078B&lt;br /&gt;
	mov a,#0A0H&lt;br /&gt;
L06EF	movx @r1,a	;mover : r1 = lo cursor addr of start of string&lt;br /&gt;
	incl r1		;r2 = addr of string&lt;br /&gt;
	djnz r2,L06EF	;r3 = char count&lt;br /&gt;
	ret&lt;br /&gt;
L06F4	mov r1,#0CAH	;move 'ready'&lt;br /&gt;
	mov r2,#0D0H&lt;br /&gt;
	jmp L071A&lt;br /&gt;
L06FA	mov r1,#80H	;on line&lt;br /&gt;
	mov r2,#0D5H&lt;br /&gt;
	jmp L0722&lt;br /&gt;
L0700	mov r1,#90H	;key off&lt;br /&gt;
	mov r2,#0E0H&lt;br /&gt;
	mov r3,#07H&lt;br /&gt;
	jmp L072C&lt;br /&gt;
L0708	mov r1,#8AH	;fdx&lt;br /&gt;
	mov r2,#0EDH&lt;br /&gt;
	jmp L0712&lt;br /&gt;
L070E	mov r1,#8AH	;hdx&lt;br /&gt;
	mov r2,#0F0H&lt;br /&gt;
L0712	mov r3,#03H&lt;br /&gt;
	jmp L072C&lt;br /&gt;
L0716	mov r1,#80H	;local&lt;br /&gt;
	mov r2,#0DBH&lt;br /&gt;
L071A	mov r3,#05H&lt;br /&gt;
	jmp L072C&lt;br /&gt;
L071E	mov r1,#9CH	;aux on&lt;br /&gt;
	mov r2,#0E7H&lt;br /&gt;
L0722	mov r3,#06H&lt;br /&gt;
	jmp L072C&lt;br /&gt;
L0726	mov r1,#0A4H	;ctl mode&lt;br /&gt;
	mov r2,#0F7H&lt;br /&gt;
	mov r3,#08H&lt;br /&gt;
L072C	call L0733&lt;br /&gt;
	mov a,r1&lt;br /&gt;
	movl r1,a&lt;br /&gt;
	call wrstat&lt;br /&gt;
	ret&lt;br /&gt;
L0733	mov a,#07H&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	mov a,#80H&lt;br /&gt;
	ret&lt;br /&gt;
L0739	call L0733&lt;br /&gt;
	mov a,#0BEH&lt;br /&gt;
	movl r0,a&lt;br /&gt;
	call getsw3&lt;br /&gt;
	cpl a&lt;br /&gt;
	mov r2,#0B1H&lt;br /&gt;
	jb3 L0747&lt;br /&gt;
L0745	mov r2,#0B0H&lt;br /&gt;
L0747	call L078F&lt;br /&gt;
	jb2 L074D&lt;br /&gt;
	mov r2,#0B0H&lt;br /&gt;
L074D	call L078F&lt;br /&gt;
	incl r0&lt;br /&gt;
	jb1 L0754&lt;br /&gt;
	mov r2,#0B0H&lt;br /&gt;
L0754	call L078F&lt;br /&gt;
	incl r0&lt;br /&gt;
	jb0 L075B&lt;br /&gt;
	mov r2,#0B0H&lt;br /&gt;
L075B	call L078F&lt;br /&gt;
	call getsw2&lt;br /&gt;
	incl r0&lt;br /&gt;
	jb0 L0764&lt;br /&gt;
	mov r2,#0B0H&lt;br /&gt;
L0764	call L078F&lt;br /&gt;
	call L0733&lt;br /&gt;
	mov a,#0B2H&lt;br /&gt;
	movl r1,a&lt;br /&gt;
	call L078B&lt;br /&gt;
	mov r0,#3DH&lt;br /&gt;
	mov a,@r0&lt;br /&gt;
	add a,#00H&lt;br /&gt;
	da a&lt;br /&gt;
	mov r0,a&lt;br /&gt;
	swap a&lt;br /&gt;
	call L0784&lt;br /&gt;
	mov a,r0&lt;br /&gt;
	call L0784&lt;br /&gt;
	incl r1&lt;br /&gt;
	mov r2,#0F3H&lt;br /&gt;
	mov r3,#04H&lt;br /&gt;
	call wrstat&lt;br /&gt;
	call L079D&lt;br /&gt;
	ret&lt;br /&gt;
L0784	anl a,#0FH&lt;br /&gt;
	add a,#0B0H&lt;br /&gt;
	movx @r1,a&lt;br /&gt;
	incl r1&lt;br /&gt;
	ret&lt;br /&gt;
L078B	mov a,#0FEH&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	ret&lt;br /&gt;
L078F	mov r3,#0FEH		;select reverse video, full intens&lt;br /&gt;
	xch a,r3&lt;br /&gt;
	mov hacc,a&lt;br /&gt;
	xch a,r3&lt;br /&gt;
	xch a,r2&lt;br /&gt;
	movx @r0,a&lt;br /&gt;
	incl r0&lt;br /&gt;
	xch a,r2&lt;br /&gt;
	mov r2,#0B1H&lt;br /&gt;
	ret&lt;br /&gt;
updstat	call L06E6	;using r7 flags, update status line&lt;br /&gt;
L079D	mov a,r7&lt;br /&gt;
	jb5 L07A4&lt;br /&gt;
	call L0716&lt;br /&gt;
	jmp L07A6&lt;br /&gt;
L07A4	call L06FA&lt;br /&gt;
L07A6	mov a,r7&lt;br /&gt;
	jb4 L07AD&lt;br /&gt;
	call L070E&lt;br /&gt;
	jmp L07AF&lt;br /&gt;
L07AD	call L0708&lt;br /&gt;
L07AF	mov a,r7&lt;br /&gt;
	jb1 L07B4&lt;br /&gt;
	call L0700&lt;br /&gt;
L07B4	mov a,r7&lt;br /&gt;
	jb0 L07B9&lt;br /&gt;
	jmp L07BB&lt;br /&gt;
L07B9	call L071E&lt;br /&gt;
L07BB	mov a,r7&lt;br /&gt;
	cpl a&lt;br /&gt;
	jb6 L07C1&lt;br /&gt;
	call L0726&lt;br /&gt;
L07C1	call L06F4&lt;br /&gt;
	ret&lt;br /&gt;
wrstat	call L078B	;write chars to status line&lt;br /&gt;
	mov a,r2&lt;br /&gt;
	movp a,@a&lt;br /&gt;
	orl a,#80H&lt;br /&gt;
	movx @r1,a&lt;br /&gt;
	incl r1&lt;br /&gt;
	inc r2&lt;br /&gt;
	djnz r3,wrstat&lt;br /&gt;
	ret&lt;br /&gt;
rdytxt	db	'V 1.1'&lt;br /&gt;
OLTXT	DB	'ONLINE'&lt;br /&gt;
LOCTXT	DB	'LOCAL'&lt;br /&gt;
KOFTXT	DB	'KEY OFF'&lt;br /&gt;
AUXTXT	DB	'AUX ON'&lt;br /&gt;
FDXTXT	DB	'FDX'&lt;br /&gt;
HDXTXT	DB	'HDX'&lt;br /&gt;
BAUTXT	DB	'BAUD'&lt;br /&gt;
CTLTXT	DB	'CTL MODE'&lt;br /&gt;
	DB	0FFH&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jnc</name></author>	</entry>

	</feed>