Topics

► Games

► Sound & Music

► Watches & Clocks

► GPS

► Power Supplies

► Computers

► Graphics

► Thermometers

► Wearables

► Test Equipment

► Tutorials

► Libraries

► PCB-Based Projects

By processor

AVR ATtiny

► ATtiny10

► ATtiny2313

► ATtiny84

► ATtiny841

► ATtiny85

► ATtiny861

► ATtiny88

AVR ATmega

► ATmega328

► ATmega1284

AVR 0-series and 1-series

► ATmega4809

► ATtiny1604

► ATtiny1614

► ATtiny3216

► ATtiny3227

► ATtiny402

► ATtiny404

► ATtiny414

► ATtiny814

AVR DA/DB-series

► AVR128DA28

► AVR128DA32

► AVR128DA48

► AVR128DB28

ARM

► ATSAMD21

► RP2040

► RA4M1

About me

  • About me
  • Twitter
  • Mastodon

Feeds

RSS feed

Sample MINIL Programs

Here are some sample MINIL programs to illustrate the operation of the MINIL Machine-Code Monitor.

Pulsating light

This is MINIL's answer to the Arduino Blink program. It smoothly pulsates the LED on and off:

// Pulsating light
00 0E  Start: ENT  R0
01 1C         CLR  R1
02 1B  Up:    BRI  R1
03 1A         ADD1 R1
04 0D         DEC  R0
05 C2         JNZ  Up
06 1B  Down:  BRI  R1
07 0A         ADD1 R0
08 1D         DEC  R1
09 C6         JNZ  Down
0A 82         JZ   Up

To run this enter 0255 and press Enter.

Raise x to the y

This routine finds x^y:

// Find x^y
00 0E  Start: ENT  R0   // x
01 1E         ENT  R1   // y
02 20         R2 = R0
03 1D  Nexty: DEC  R1
04 C6         JNZ  Power
05 02         R0 = R2
06 80  Power: JZ   Start
07 32         R3 = R2
08 2C         CLR  R2
09 40  Timesx:R4 = R0
0A 2A  Inc:   ADD1 R2
0B 4D         DEC  R4
0C CA         JNZ  Inc
0D 3D         DEC  R3
0E C9         JNZ  Timesx
0F 83         JZ   Nexty

For example, entering 7 and 3 will display 343.

Greatest Common Divisor

This program uses Euclid's algorithm to find the greatest common divisor of two numbers:

// Greatest common divisor
00 0E  GCD:   ENT  R0
01 1E         ENT  R1
02 21  Again: R2 = R1
03 10  Loop:  R1 = R0
04 02         R0 = R2
05 2D  Minus: DEC  R2
06 8A         JZ   Stop
07 1D         DEC  R1
08 C5         JNZ  Minus
09 83         JZ   Loop
0A 1D  Stop:  DEC  R1
0B C2         JNZ  Again
0C 80         JZ   GCD   // Display GCD in R0

For example, if you enter 111 and 185 you'll get 37.

Highest prime factor

This program prompts for a number, and then finds the highest prime factor of that number.

// Highest Prime Factor
00 0E  Go:    ENT  R0
01 30  Not:   R3 = R0
02 23  New:   R2 = R3
03 10  Next:  R1 = R0
04 1D  Loop:  DEC  R1
05 83         JZ   Next
06 2D         DEC  R2
07 C4         JNZ  Loop
08 0D         DEC  R0
09 1D         DEC  R1
0A C2         JNZ  New
0B 20         R2 = R0
0C 2D         DEC  R2
0D C1         JNZ  Not
0E 3E         ENT  R3   // Display result
0F C0         JNZ  Go
10 80         JZ   Go   // Return

This program is particularly slow; for example, on a 1MHz ATtiny85 it takes about 4 minutes to find the highest prime factor of 407, 37!


blog comments powered by Disqus