<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://63f09.systella.fr/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="en">
	<title>63F09</title>
	<link>https://63F09.systella.fr/</link>
	<description></description>
	<language>en</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://63f09.systella.fr/spip.php?id_rubrique=7&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>63F09</title>
		<url>https://63f09.systella.fr/local/cache-vignettes/L110xH56/kl_motorola_mc6809-0d844.jpg?1716898660</url>
		<link>https://63F09.systella.fr/</link>
		<height>56</height>
		<width>110</width>
	</image>



<item xml:lang="en">
		<title>PTM</title>
		<link>https://63f09.systella.fr/soc-63f09/programming-examples/article/ptm</link>
		<guid isPermaLink="true">https://63f09.systella.fr/soc-63f09/programming-examples/article/ptm</guid>
		<dc:date>2024-06-17T08:32:47Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>63F09</dc:creator>



		<description>
&lt;p&gt;``` &lt;span class=&#034;caps&#034;&gt;ORG&lt;/span&gt; $&lt;span class=&#034;caps&#034;&gt;FFFFFF00&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LDMD&lt;/span&gt; #$31 &lt;span class=&#034;caps&#034;&gt;LDS&lt;/span&gt; #$&lt;span class=&#034;caps&#034;&gt;FFFE0000&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LDU&lt;/span&gt; #$&lt;span class=&#034;caps&#034;&gt;FFFDF000&lt;/span&gt; * Direct mode: address is built with &lt;span class=&#034;caps&#034;&gt;DS&lt;/span&gt;:&lt;span class=&#034;caps&#034;&gt;DP&lt;/span&gt;:8 bits offset &lt;span class=&#034;caps&#034;&gt;LDDS&lt;/span&gt; #$&lt;span class=&#034;caps&#034;&gt;FFFE&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LDDP&lt;/span&gt; #$F0 * Configure &lt;span class=&#034;caps&#034;&gt;PIA0&lt;/span&gt; (&lt;span class=&#034;caps&#034;&gt;PIA0&lt;/span&gt;(0) &lt;= 1). * &lt;span class=&#034;caps&#034;&gt;PIA0&lt;/span&gt;(0) is connected to &lt;span class=&#034;caps&#034;&gt;PTM1&lt;/span&gt;.G(3) &lt;span class=&#034;caps&#034;&gt;LDA&lt;/span&gt; #%00000000 &lt;span class=&#034;caps&#034;&gt;STA&lt;/span&gt; &lt;&lt;span class=&#034;caps&#034;&gt;PIA0&lt;/span&gt;+1 &lt;span class=&#034;caps&#034;&gt;LDA&lt;/span&gt; #%00000001 &lt;span class=&#034;caps&#034;&gt;STA&lt;/span&gt; &lt;&lt;span class=&#034;caps&#034;&gt;PIA0&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LDA&lt;/span&gt; #%00000100 &lt;span class=&#034;caps&#034;&gt;STA&lt;/span&gt; &lt;&lt;span class=&#034;caps&#034;&gt;PIA0&lt;/span&gt;+1 &lt;span class=&#034;caps&#034;&gt;LDA&lt;/span&gt; #%00000001 &lt;span class=&#034;caps&#034;&gt;STA&lt;/span&gt; &lt;&lt;span class=&#034;caps&#034;&gt;PIA0&lt;/span&gt; * 1 : source (0 : external) * 2 : mode (0 : 16 bits)&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://63f09.systella.fr/soc-63f09/programming-examples/" rel="directory"&gt;Programming examples&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; ORG $FFFFFF00 LDMD #$31 LDS #$FFFE0000 LDU #$FFFDF000 * Direct mode: address is built with DS:DP:8 bits offset LDDS #$FFFE LDDP #$F0 * Configure PIA0 (PIA0(0) &lt;= 1). * PIA0(0) is connected to PTM1.G(3) LDA #%00000000 STA &lt;PIA0+1 LDA #%00000001 STA &lt;PIA0 LDA #%00000100 STA &lt;PIA0+1 LDA #%00000001 STA &lt;PIA0 * 1 : source (0 : external) * 2 : mode (0 : 16 bits) * 6 : interrupt enabled * Write to CR2 LDDP #$D0 LDA #%00000001 STA &lt;PTM1+1 * Write to CR1 (CR2(0) = 1) LDA #%00000000 STA &lt;PTM1 * Write to CR2 LDA #%00000000 STA &lt;PTM1+1 * Write to CR3 (CR2(0) = 0) LDA #%11111010 STA &lt;PTM1 * Write to LATCH3 LDD #$0020 STD &lt;PTM1+6 * PTM1.3 : Timer interval mode * Now, try to start timer BSR EDGE BSR EDGE STA &lt;PIA0 * Now, try to restart timer LDB #10 L1: DECB BNE L1 LDDP #$F0 LDA #%00000000 STA &lt;PIA0 LOOP: BRA LOOP * Abort simulation FCB $CF EDGE: LDDP #$F0 LDA #%00000000 STA &lt;PIA0 LDA #%00000001 STA &lt;PIA0 RTS ORG $FFFFFF80 PSHS D,W,DP LDDP #$D0 * Read status register LDB &lt;PTM0+1 * Read timers LDW &lt;PTM0+2 LDW &lt;PTM0+4 PULS D,W,DP RTI ORG $FFFFFFA0 PSHS D,W,DP LDDP #$D0 * Read status register LDB &lt;PTM1+1 * Read timers LDW &lt;PTM1+6 PULS D,W,DP RTI TWI0 EQU $FFFEB000 SPI0 EQU $FFFEC000 PTM0 EQU $FFFED000 PTM1 EQU $FFFED008 ACIA0 EQU $FFFEE000 ACIA1 EQU $FFFEE004 PIA0 EQU $FFFEF000 PIA1 EQU $FFFEF002 PIA2 EQU $FFFEF004 PIA3 EQU $FFFEF006 PIA4 EQU $FFFEF008 * PTM1 interrupt ORG $FFFFFFE8 FDB $FFA0 * PTM0 interrupt ORG $FFFFFFEA FDB $FF80 ORG $FFFFFFF0 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $FF00 END &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="en">
		<title>SPI</title>
		<link>https://63f09.systella.fr/soc-63f09/programming-examples/article/spi</link>
		<guid isPermaLink="true">https://63f09.systella.fr/soc-63f09/programming-examples/article/spi</guid>
		<dc:date>2024-06-17T08:27:32Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>63F09</dc:creator>



		<description>
&lt;p&gt;``` &lt;span class=&#034;caps&#034;&gt;ORG&lt;/span&gt; $&lt;span class=&#034;caps&#034;&gt;FFFFFF00&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LDMD&lt;/span&gt; #$31 &lt;span class=&#034;caps&#034;&gt;LDS&lt;/span&gt; #$&lt;span class=&#034;caps&#034;&gt;FFFF0000&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LDU&lt;/span&gt; #$&lt;span class=&#034;caps&#034;&gt;FFFEF000&lt;/span&gt; * Direct mode: address is built with &lt;span class=&#034;caps&#034;&gt;DS&lt;/span&gt;:&lt;span class=&#034;caps&#034;&gt;DP&lt;/span&gt;:8 bits offset &lt;span class=&#034;caps&#034;&gt;LDDS&lt;/span&gt; #$&lt;span class=&#034;caps&#034;&gt;FFFF&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LDDP&lt;/span&gt; #$00 * &lt;span class=&#034;caps&#034;&gt;SPI0&lt;/span&gt; * Internal registers: * &lt;span class=&#034;caps&#034;&gt;SPI0&lt;/span&gt;+0: data register * &lt;span class=&#034;caps&#034;&gt;SPI0&lt;/span&gt;+1: control register &lt;br class='autobr' /&gt;
* &lt;span class=&#034;caps&#034;&gt;SPI0&lt;/span&gt; control register * Configure divisor (1'000'000) &lt;span class=&#034;caps&#034;&gt;LDA&lt;/span&gt; #%00000001 &lt;span class=&#034;caps&#034;&gt;STA&lt;/span&gt; TX_EMPTY = 1 * &lt;span class=&#034;caps&#034;&gt;TST&lt;/span&gt; Z=0 =&gt; TX_EMPTY = 1 * &lt;span class=&#034;caps&#034;&gt;TST&lt;/span&gt; Z=1 =&gt; TX_EMPTY = 0 &lt;span class=&#034;caps&#034;&gt;BEQ&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;WAIT&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;RTS&lt;/span&gt; &lt;br class='autobr' /&gt;
&lt;span class=&#034;caps&#034;&gt;WAIT2&lt;/span&gt;: &lt;span class=&#034;caps&#034;&gt;LDW&lt;/span&gt; #500 &lt;span class=&#034;caps&#034;&gt;BOUCLE&lt;/span&gt;: &lt;span class=&#034;caps&#034;&gt;DECW&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;BNE&lt;/span&gt;&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://63f09.systella.fr/soc-63f09/programming-examples/" rel="directory"&gt;Programming examples&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; ORG $FFFFFF00 LDMD #$31 LDS #$FFFF0000 LDU #$FFFEF000 * Direct mode: address is built with DS:DP:8 bits offset LDDS #$FFFF LDDP #$00 * SPI0 * Internal registers: * SPI0+0: data register * SPI0+1: control register * SPI0 control register * Configure divisor (1'000'000) LDA #%00000001 STA &lt;SPI0+1 LDD #5 STD &lt;SPI0 LDA #%00000001 STA &lt;SPI0+1 LDW &lt;SPI0 * Configure SPI0 LDA #%00100000 STA &lt;SPI0+1 * Send data JSR WAIT LDA #$AA STA &lt;SPI0 JSR WAIT LDA #$A5 STA &lt;SPI0 JSR WAIT2 * Abort simulation FCB $CF WAIT: LDB &lt;SPI0+1 ANDB #$40 TSTB * loop while SPI0_CC(TX_EMPTY) = 0 * SPI0_CC and #$40 = #$40 =&gt; TX_EMPTY = 1 * TST Z=0 =&gt; TX_EMPTY = 1 * TST Z=1 =&gt; TX_EMPTY = 0 BEQ WAIT RTS WAIT2: LDW #500 BOUCLE: DECW BNE BOUCLE RTS * IRQ SPI0 ORG $FFFFFF80 * Read SPI RX register to release interrupt request PSHU B LDB &lt;SPI0 PULU B RTI TWI0 EQU $FFFEB000 SPI0 EQU $FFFEC000 PTM0 EQU $FFFED000 PTM1 EQU $FFFED008 ACIA0 EQU $FFFEE000 ACIA1 EQU $FFFEE004 PIA0 EQU $FFFEF000 PIA1 EQU $FFFEF002 PIA2 EQU $FFFEF004 PIA3 EQU $FFFEF006 PIA4 EQU $FFFEF008 * TWI0 interrupt ORG $FFFFFFDA FDB $FF80 ORG $FFFFFFF0 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $0000 END &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="en">
		<title>TWI</title>
		<link>https://63f09.systella.fr/soc-63f09/programming-examples/article/twi</link>
		<guid isPermaLink="true">https://63f09.systella.fr/soc-63f09/programming-examples/article/twi</guid>
		<dc:date>2024-06-14T06:40:13Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>63F09</dc:creator>



		<description>
&lt;p&gt;Example ``` &lt;span class=&#034;caps&#034;&gt;ORG&lt;/span&gt; $&lt;span class=&#034;caps&#034;&gt;FFFF0000&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LDMD&lt;/span&gt; #$31 &lt;span class=&#034;caps&#034;&gt;LDS&lt;/span&gt; #$&lt;span class=&#034;caps&#034;&gt;FFFE0000&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LDU&lt;/span&gt; #$&lt;span class=&#034;caps&#034;&gt;FFFDF000&lt;/span&gt; * Direct mode: address is built with &lt;span class=&#034;caps&#034;&gt;DS&lt;/span&gt;:&lt;span class=&#034;caps&#034;&gt;DP&lt;/span&gt;:8 bits offset * i2c controller is at $&lt;span class=&#034;caps&#034;&gt;FFFEB000&lt;/span&gt;-$&lt;span class=&#034;caps&#034;&gt;FFFEB003&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LDDS&lt;/span&gt; #$&lt;span class=&#034;caps&#034;&gt;FFFE&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LDDP&lt;/span&gt; #$B0 * &lt;span class=&#034;caps&#034;&gt;TWI0&lt;/span&gt; control register &lt;span class=&#034;caps&#034;&gt;LDA&lt;/span&gt; #%00000000 ; polling mode &lt;span class=&#034;caps&#034;&gt;STA&lt;/span&gt; &lt;&lt;span class=&#034;caps&#034;&gt;TWI0&lt;/span&gt;+2 * Set &lt;span class=&#034;caps&#034;&gt;TWI0&lt;/span&gt; clock divisor &lt;span class=&#034;caps&#034;&gt;LDD&lt;/span&gt; #0 &lt;span class=&#034;caps&#034;&gt;STD&lt;/span&gt; &lt;&lt;span class=&#034;caps&#034;&gt;TWI0&lt;/span&gt;+4 * Set slave address &lt;span class=&#034;caps&#034;&gt;LDD&lt;/span&gt; #$50 &lt;span class=&#034;caps&#034;&gt;STD&lt;/span&gt; &lt;&lt;span class=&#034;caps&#034;&gt;TWI0&lt;/span&gt;+6 &lt;br class='autobr' /&gt;
* Write into $20 &lt;span class=&#034;caps&#034;&gt;LDA&lt;/span&gt; #$20 &lt;span class=&#034;caps&#034;&gt;STA&lt;/span&gt;&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://63f09.systella.fr/soc-63f09/programming-examples/" rel="directory"&gt;Programming examples&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class='spip_document_7 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;57&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://63f09.systella.fr/IMG/jpg/i2c.jpg' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/jpeg&#034;&gt; &lt;img src='https://63f09.systella.fr/IMG/jpg/i2c.jpg?1718446697' width='500' height='197' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;i2c transaction with an 24C02 &lt;span class=&#034;caps&#034;&gt;EEPROM&lt;/span&gt; (single and burst)
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Example&lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; ORG $FFFF0000 LDMD #$31 LDS #$FFFE0000 LDU #$FFFDF000 * Direct mode: address is built with DS:DP:8 bits offset * i2c controller is at $FFFEB000-$FFFEB003 LDDS #$FFFE LDDP #$B0 * TWI0 control register LDA #%00000000 ; polling mode STA &lt;TWI0+2 * Set TWI0 clock divisor LDD #0 STD &lt;TWI0+4 * Set slave address LDD #$50 STD &lt;TWI0+6 * Write into $20 LDA #$20 STA &lt;TWI0 LDA #%00000001 STA &lt;TWI0+1 LBSR TX_EMPTY ; wait until TX register is loaded in buffer LDA #$4E ; data written at address $20 STA &lt;TWI0 LDA #%00001001 STA &lt;TWI0+1 LDB #%00000011 ; wait until STOP state LBSR POLL * Write into $10 and $11 LDA #$10 STA &lt;TWI0 LDA #%00000001 STA &lt;TWI0+1 LDB #%00010001 ; wait until SLAVE ACK after address LBSR POLL LDA #$3F ; data written at address $10 STA &lt;TWI0 LDA #%00000001 STA &lt;TWI0+1 LDB #%00000101 ; wait until WRITE is started LBSR POLL LDA #$24 ; data written at address $11 STA &lt;TWI0 LDA #%00001001 STA &lt;TWI0+1 LDB #%00000011 ; wait until STOP state LBSR POLL * Read addresses $10 (3F) and $11 (24) LDA #$10 STA &lt;TWI0 * Send data (write mode) LDA #%001 STA &lt;TWI0+1 LDB #%00000101 ; wait until WRITE is started BSR POLL * Receive data (read mode with MACK) LDA #%111 STA &lt;TWI0+1 LDB #%00001000 ; wait until MASTER_ACK state BSR POLL * Wait LDW #$0200 WAIT: DECW BNE WAIT LDF &lt;TWI0 ; read data (#$3F) * TWI0 control register ; IRQ mode LDA #%00100000 STA &lt;TWI0+2 * Receive data (read mode without MACK) LDA #%011 STA &lt;TWI0+1 LDB #%00001001 ; wait until NO_MASTER_ACK state BSR POLL * Read addresses $20 (4E) LDA #$20 STA &lt;TWI0 * Send data (write mode) LDA #%001 STA &lt;TWI0+1 BSR WAIT_ACK * Receive data (read mode without MACK) LDA #%011 STA &lt;TWI0+1 LDB #%00000011 ; wait until STOP state BSR POLL * Read addresses $11 (24) LDA #$11 STA &lt;TWI0 * Send data (write mode) LDA #%001 STA &lt;TWI0+1 BSR WAIT_ACK * Receive data (read mode without MACK) LDA #%011 STA &lt;TWI0+1 LDB #%00000011 ; wait until STOP state BSR POLL ABORT: FCB $CF TX_EMPTY: LDA &lt;TWI0+2 ANDA #$40 BEQ TX_EMPTY RTS WAIT_ACK: LDA &lt;TWI0+2 ANDA #$08 BEQ WAIT_ACK RTS POLL: * Wait for READY state LDA &lt;TWI0+3 CMPR A,B BNE POLL CLR &lt;TWI0 RTS * Interruptions ORG $FFFFFF00 LDE &lt;TWI0 RTI TWI0 EQU $FFFEB000 SPI0 EQU $FFFEC000 PTM0 EQU $FFFED000 PTM1 EQU $FFFED008 ACIA0 EQU $FFFEE000 ACIA1 EQU $FFFEE004 PIA0 EQU $FFFEF000 PIA1 EQU $FFFEF002 PIA2 EQU $FFFEF004 PIA3 EQU $FFFEF006 PIA4 EQU $FFFEF008 * TWI0 interrupt ORG $FFFFFFD8 FDB $FF00 ORG $FFFFFFF0 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $0000 FDB $0000 END &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
