<?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?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>BAC 63F81</title>
		<link>https://63f09.systella.fr/soc-63f09/peripherals/article/bac-63f81</link>
		<guid isPermaLink="true">https://63f09.systella.fr/soc-63f09/peripherals/article/bac-63f81</guid>
		<dc:date>2024-08-23T17:22:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>63F09</dc:creator>



		<description>

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


		</description>


 <content:encoded>
		</content:encoded>


		

	</item>
<item xml:lang="en">
		<title>DMC 63F41</title>
		<link>https://63f09.systella.fr/soc-63f09/peripherals/article/dmc-63f41</link>
		<guid isPermaLink="true">https://63f09.systella.fr/soc-63f09/peripherals/article/dmc-63f41</guid>
		<dc:date>2024-08-23T17:22:01Z</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;DMC&lt;/span&gt; 63F41 is a level-1 direct mapped cache controller. It is not configurable. &lt;br class='autobr' /&gt;
Characteristics: full speed; direct mapped; write through; 64 &lt;span class=&#034;caps&#034;&gt;KB&lt;/span&gt; of synchronous &lt;span class=&#034;caps&#034;&gt;RAM&lt;/span&gt;; usable in &lt;span class=&#034;caps&#034;&gt;SMP&lt;/span&gt; configuration as it contains a cache invalidation subsystem.&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;&lt;span class=&#034;caps&#034;&gt;DMC&lt;/span&gt; 63F41 is a level-1 direct mapped cache controller. It is not configurable.&lt;/p&gt;
&lt;p&gt;Characteristics:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; full speed;&lt;/li&gt;&lt;li&gt; direct mapped;&lt;/li&gt;&lt;li&gt; write through;&lt;/li&gt;&lt;li&gt; 64 &lt;span class=&#034;caps&#034;&gt;KB&lt;/span&gt; of synchronous &lt;span class=&#034;caps&#034;&gt;RAM&lt;/span&gt;;&lt;/li&gt;&lt;li&gt; usable in &lt;span class=&#034;caps&#034;&gt;SMP&lt;/span&gt; configuration as it contains a cache invalidation subsystem.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<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>
<item xml:lang="en">
		<title>ROM initialization</title>
		<link>https://63f09.systella.fr/soc-63f09/tools/article/rom-initialization</link>
		<guid isPermaLink="true">https://63f09.systella.fr/soc-63f09/tools/article/rom-initialization</guid>
		<dc:date>2024-06-14T06:38:34Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>63F09</dc:creator>



		<description>
&lt;p&gt;System on chip contains 64 Kbytes of read only memory between addresses $&lt;span class=&#034;caps&#034;&gt;FFFF0000&lt;/span&gt; and $&lt;span class=&#034;caps&#034;&gt;FFFFFFFF&lt;/span&gt;. This memory is created with &lt;span class=&#034;caps&#034;&gt;RAM&lt;/span&gt; blocks and initialized in a file created by memblcks.rpl tool. &lt;br class='autobr' /&gt;
memblcks.rpl is a program written in &lt;span class=&#034;caps&#034;&gt;RPL&lt;/span&gt;/2 and takes a &lt;span class=&#034;caps&#034;&gt;SREC&lt;/span&gt; file generated by A09 assembler in 32 bits mode. It splits S-records into bits arrays to create a usable 27F512.vhd file. &lt;br class='autobr' /&gt;
This tool is downloadable from ftp site. &lt;br class='autobr' /&gt;
``` hilbert:[&#160;/vhdl/63F09asmb/tests] &gt; ./memblcks.rpl -A \&#8220;i2c.s09\&#8221;&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;System on chip contains 64 Kbytes of read only memory between addresses $&lt;span class=&#034;caps&#034;&gt;FFFF0000&lt;/span&gt; and $&lt;span class=&#034;caps&#034;&gt;FFFFFFFF&lt;/span&gt;. This memory is created with &lt;span class=&#034;caps&#034;&gt;RAM&lt;/span&gt; blocks and initialized in a file created by memblcks.rpl tool.&lt;/p&gt;
&lt;p&gt;memblcks.rpl is a program written in &lt;a href=&#034;http://www.rpl2.net&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;span class=&#034;caps&#034;&gt;RPL&lt;/span&gt;/2&lt;/a&gt; and takes a &lt;span class=&#034;caps&#034;&gt;SREC&lt;/span&gt; file generated by A09 assembler in 32 bits mode. It splits S-records into bits arrays to create a usable 27F512.vhd file.&lt;/p&gt;
&lt;p&gt;This tool is downloadable from &lt;a href='https://63f09.systella.fr/files/article/anonymous-ftp' class=&#034;spip_in&#034;&gt;ftp site&lt;/a&gt;.&lt;/p&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;hilbert:[~/vhdl/63F09asmb/tests] &gt; ./memblcks.rpl -A \&#034;i2c.s09\&#034; +++RPL/2 (R) version 4.1.36 (Jeudi 08/02/2024, 17:52:53 CET) +++Copyright (C) 1989 &#224; 2023, 2024 BERTRAND Jo&#235;l S315FFFF0000113D3110CEFFFE0000CEFFFDF00010C800 S315FFFF0010FFFE10C6B086009702CC0000DD04CC00C1 S315FFFF002050DD068620970086019701170000008C9A S315FFFF0030864E970086099701C603170000008B8639 S315FFFF004010970086019701C611170000007C863FB7 S315FFFF0050970086019701C605170000006D86249756 S315FFFF00600086099701C603170000005E86109700FA S315FFFF007086019701C6058D5286079701C6088D4AE9 S315FFFF008010860200105A26FC11D60086209702869C S315FFFF0090039701C6098D3386209700860197018D49 S315FFFF00A02286039701C6038D218611970086019746 S315FFFF00B0018D1086039701C6038D0FCF96028440ED S315FFFF00C027FA399602840827FA39960310378926C5 S309FFFF00D0F90F0039E7 S309FFFFFF001196003B17 S307FFFFFFD8FF0024 S315FFFFFFF000000000000000000000000000000000FD S9030000FC hilbert:[~/vhdl/63F09asmb/tests] &gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="en">
		<title>RAM 61F512</title>
		<link>https://63f09.systella.fr/soc-63f09/peripherals/article/ram-61f512</link>
		<guid isPermaLink="true">https://63f09.systella.fr/soc-63f09/peripherals/article/ram-61f512</guid>
		<dc:date>2024-06-14T06:37:13Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>63F09</dc:creator>



		<description>

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


		</description>


 <content:encoded>
		</content:encoded>


		

	</item>
<item xml:lang="en">
		<title>ROM 27F512</title>
		<link>https://63f09.systella.fr/soc-63f09/peripherals/article/rom-27f512</link>
		<guid isPermaLink="true">https://63f09.systella.fr/soc-63f09/peripherals/article/rom-27f512</guid>
		<dc:date>2024-06-14T06:36:44Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>63F09</dc:creator>



		<description>
&lt;p&gt;System on chip contains a 64 Kbytes &lt;span class=&#034;caps&#034;&gt;ROM&lt;/span&gt; between $&lt;span class=&#034;caps&#034;&gt;FFFF0000&lt;/span&gt; and $&lt;span class=&#034;caps&#034;&gt;FFFFFFFF&lt;/span&gt;. Memory is created with &lt;span class=&#034;caps&#034;&gt;RAM&lt;/span&gt; blocks in a read only configuration. &lt;br class='autobr' /&gt;
This &lt;span class=&#034;caps&#034;&gt;ROM&lt;/span&gt; is hardcoded and initialized with memblcks.rpl.&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;System on chip contains a 64 Kbytes &lt;span class=&#034;caps&#034;&gt;ROM&lt;/span&gt; between $&lt;span class=&#034;caps&#034;&gt;FFFF0000&lt;/span&gt; and $&lt;span class=&#034;caps&#034;&gt;FFFFFFFF&lt;/span&gt;. Memory is created with &lt;span class=&#034;caps&#034;&gt;RAM&lt;/span&gt; blocks in a read only configuration.&lt;/p&gt;
&lt;p&gt;This &lt;span class=&#034;caps&#034;&gt;ROM&lt;/span&gt; is hardcoded and initialized with &lt;a href='https://63f09.systella.fr/soc-63f09/tools/article/rom-initialization' class=&#034;spip_in&#034;&gt;memblcks.rpl&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="en">
		<title>MMU 63F29</title>
		<link>https://63f09.systella.fr/soc-63f09/peripherals/article/mmu-63f29</link>
		<guid isPermaLink="true">https://63f09.systella.fr/soc-63f09/peripherals/article/mmu-63f29</guid>
		<dc:date>2024-06-14T06:35:58Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>63F09</dc:creator>



		<description>

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


		</description>


 <content:encoded>
		</content:encoded>


		

	</item>
<item xml:lang="en">
		<title>SPI 63F52</title>
		<link>https://63f09.systella.fr/soc-63f09/peripherals/article/spi-63f52</link>
		<guid isPermaLink="true">https://63f09.systella.fr/soc-63f09/peripherals/article/spi-63f52</guid>
		<dc:date>2024-06-14T06:35:26Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>63F09</dc:creator>



		<description>
&lt;p&gt;This controller acts as master or slave &lt;span class=&#034;caps&#034;&gt;SPI&lt;/span&gt; device. External signals &lt;span class=&#034;caps&#034;&gt;MISO&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;MOSI&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;SCLK&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;CS&lt;/span&gt; (16 bits) &lt;br class='autobr' /&gt;
In slave mode, &lt;span class=&#034;caps&#034;&gt;CS&lt;/span&gt;(0) is mandatory SS_n signal. In master mode, &lt;span class=&#034;caps&#034;&gt;CS&lt;/span&gt; is used to address slaves's chip select lines. This controller can directly drive 16 &lt;span class=&#034;caps&#034;&gt;SPI&lt;/span&gt; slaves or more slave with an additional address decoder. Internal registers Registers Address Access 7 6 5 4 3 2 1 0 base + 0 when &lt;span class=&#034;caps&#034;&gt;CC&lt;/span&gt;(0) = 0 read &lt;span class=&#034;caps&#034;&gt;RX&lt;/span&gt; register write &lt;span class=&#034;caps&#034;&gt;TX&lt;/span&gt; register base + 0 when &lt;span class=&#034;caps&#034;&gt;CC&lt;/span&gt;(0) = 1&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;This controller acts as master or slave &lt;span class=&#034;caps&#034;&gt;SPI&lt;/span&gt; device.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; External signals &lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;span class=&#034;caps&#034;&gt;MISO&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;span class=&#034;caps&#034;&gt;MOSI&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;span class=&#034;caps&#034;&gt;SCLK&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;span class=&#034;caps&#034;&gt;CS&lt;/span&gt; (16 bits)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;In slave mode, &lt;span class=&#034;caps&#034;&gt;CS&lt;/span&gt;(0) is mandatory SS_n signal. In master mode, &lt;span class=&#034;caps&#034;&gt;CS&lt;/span&gt; is used to address slaves's chip select lines. This controller can directly drive 16 &lt;span class=&#034;caps&#034;&gt;SPI&lt;/span&gt; slaves or more slave with an additional address decoder.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; Internal registers &lt;/h2&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;caption&gt;Registers&lt;/caption&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='idb81d_c0'&gt; Address &lt;/th&gt;&lt;th id='idb81d_c1'&gt; Access &lt;/th&gt;&lt;th id='idb81d_c2'&gt; 7 &lt;/th&gt;&lt;th id='idb81d_c3'&gt; 6 &lt;/th&gt;&lt;th id='idb81d_c4'&gt; 5 &lt;/th&gt;&lt;th id='idb81d_c5'&gt; 4 &lt;/th&gt;&lt;th id='idb81d_c6'&gt; 3 &lt;/th&gt;&lt;th id='idb81d_c7'&gt; 2 &lt;/th&gt;&lt;th id='idb81d_c8'&gt; 1 &lt;/th&gt;&lt;th id='idb81d_c9'&gt; 0 &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td rowspan='2' headers='idb81d_c0'&gt;base + 0 when &lt;span class=&#034;caps&#034;&gt;CC&lt;/span&gt;(0) = 0&lt;/td&gt;
&lt;td headers='idb81d_c1'&gt;read&lt;/td&gt;
&lt;td colspan='8' headers='idb81d_c2'&gt;&lt;span class=&#034;caps&#034;&gt;RX&lt;/span&gt; register&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idb81d_c1'&gt;write&lt;/td&gt;
&lt;td colspan='8' headers='idb81d_c2'&gt;&lt;span class=&#034;caps&#034;&gt;TX&lt;/span&gt; register&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idb81d_c0'&gt;base + 0 when &lt;span class=&#034;caps&#034;&gt;CC&lt;/span&gt;(0) = 1&lt;/td&gt;
&lt;td headers='idb81d_c1'&gt;read/write&lt;/td&gt;
&lt;td colspan='8' headers='idb81d_c2'&gt;Clock divisor (&lt;span class=&#034;caps&#034;&gt;MSB&lt;/span&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td rowspan='2' headers='idb81d_c0'&gt;base + 1&lt;/td&gt;
&lt;td rowspan='2' headers='idb81d_c1'&gt;read/write&lt;/td&gt;
&lt;td colspan='8' headers='idb81d_c2'&gt;Control register&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idb81d_c2'&gt;BUSY_n/&lt;span class=&#034;caps&#034;&gt;RX&lt;/span&gt; data ready&lt;/td&gt;
&lt;td headers='idb81d_c3'&gt;&lt;span class=&#034;caps&#034;&gt;TX&lt;/span&gt; empty&lt;/td&gt;
&lt;td headers='idb81d_c4'&gt;&lt;span class=&#034;caps&#034;&gt;RX&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;IRQ&lt;/span&gt; enabled&lt;/td&gt;
&lt;td headers='idb81d_c5'&gt;&lt;span class=&#034;caps&#034;&gt;TX&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;IRQ&lt;/span&gt; enabled&lt;/td&gt;
&lt;td headers='idb81d_c6'&gt;&lt;span class=&#034;caps&#034;&gt;CPOL&lt;/span&gt;&lt;/td&gt;
&lt;td headers='idb81d_c7'&gt;&lt;span class=&#034;caps&#034;&gt;CPHA&lt;/span&gt;&lt;/td&gt;
&lt;td headers='idb81d_c8'&gt;Slave &lt;span class=&#034;caps&#034;&gt;SPI&lt;/span&gt;&lt;/td&gt;
&lt;td headers='idb81d_c9'&gt;Clock divisor access&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idb81d_c0'&gt;base + 1 when &lt;span class=&#034;caps&#034;&gt;CC&lt;/span&gt;(0) = 1&lt;/td&gt;
&lt;td headers='idb81d_c1'&gt;read/write&lt;/td&gt;
&lt;td colspan='8' headers='idb81d_c2'&gt;Clock divisor (&lt;span class=&#034;caps&#034;&gt;LSB&lt;/span&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idb81d_c0'&gt;base + 2 when &lt;span class=&#034;caps&#034;&gt;CC&lt;/span&gt;(0) = 0&lt;/td&gt;
&lt;td headers='idb81d_c1'&gt;read/write&lt;/td&gt;
&lt;td colspan='8' headers='idb81d_c2'&gt;Chip select register (&lt;span class=&#034;caps&#034;&gt;MSB&lt;/span&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idb81d_c0'&gt;base + 3 when &lt;span class=&#034;caps&#034;&gt;CC&lt;/span&gt;(0) = 0&lt;/td&gt;
&lt;td headers='idb81d_c1'&gt;read/write&lt;/td&gt;
&lt;td colspan='8' headers='idb81d_c2'&gt;Chip select register (&lt;span class=&#034;caps&#034;&gt;LSB&lt;/span&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h2 class=&#034;spip&#034;&gt; Notes &lt;/h2&gt;
&lt;p&gt;Please note that &lt;span class=&#034;caps&#034;&gt;CS&lt;/span&gt;(0) is only used to read or write clock divisor register. This bit returns to 0 after first access to clock register (&lt;span class=&#034;caps&#034;&gt;LSB&lt;/span&gt;). Chip select register cannot be selected when &lt;span class=&#034;caps&#034;&gt;CS&lt;/span&gt;(0) = 1 (write operation is ignored and read operation always returns $00).&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
