F746_Show_MMBasic

Hier ein etwas größeres Projekt.
Und zwar der Port vom MMBasic von Geoff Graham auf das
STM32F746-Discovery Board.

Hier der Link zur Quelle von MMBasic : MMBasic
und hier der Link zu seiner Color-Maximite-Seite : Maximite
(dort gibt es auch eine super Doku zu allem)

Status (02.02.2016) :
Ich habe das Projekt abgeschlossen,
den Quellcode von Version 1.00 gibts bei Geoff als download : F746_MMBasic
Wer patches hat, kann sie mir in meinen Dropbox Ordner schieben
(nur die geänderten Files) ich füge sie dann der neusten Version hinzu.
(Bitte auch gleich die Doku mit abändern !!)

Der Befehlsumfang vom MMBasic ist sehr groß
(siehe Language-Manual von Geoff)
Es sind nicht alle Funktionen portiert.
Bei allen Befehlen die nicht funktionieren,
wird eine Fehlermeldung auf dem Display angezeigt.
In meinem PDF zum Projekt gibts auch eine Liste
welche Befehle funktionieren “sollten” :-)

Hier ein Link zu einem englischen Forums Thread : FORUM

Das BIN-File für das STM32F746-Disco Board
muss per ST-Link Utility geflasht oder
per Drag&Drop mit einem Filebrowser auf das Board
kopiert werden.

Mit dem Sprite-Editor und Map-Konverter können
am PC Sprites und Maps erstellt werden.

Downloads :

Version : 1.07 / 20.02.2016
BIN-File : F746_MMBasic_v107

Doku
PDF : MMBasic_F746_V107

Sprite Editor von Fabrice
EXE : Sprite_Editor_v22b

Map Konverter von Fabrice
EXE : map_converter_v2

Polygon Editor von Fabrice
EXE : polyedit_v2.0

3D Konverter von Fabrice
EXE : algo3d_v1.0

Dropbox Ordner (für Patches) :

dropbox

Funktionen :
MMBasic Version 4.5
-Basic Grundfunktionen
-Graphic, Sprite, Polygon, 3D-Funktionen (DANKE an Fabrice !!)
-File-Funktionen
-FullScreen-Editor
-GPIO-Funktionen
-Multi-Touch-Funktionen
-Touch-Objekte
-Sound-Funktionen
-UART (COM1+COM2)
-SPI (SPI1+SPI2)
-I2c (I2C1)
-Onewire

Ein/Ausgabe über VCP (CN14) mit 115200bd (8N1)
Ausgabe auf dem Display vom Disco-Board
Eingabe per USB-Keyboard an CN13 (3 Keyboard Layouts)
Laufwerke (b:=uSD an CN3 und c:=USB-Drive an CN12)
Laden/speichern/löschen von Files
Erzeugen/löschen von Unterverzeichnissen
Anzeigen/ändern vom Direktory
FullScreen Editor-Mode
6 verschiedene Fonts
Sprites laden/anzeigen (color=ARGB1555)
Maps laden/anzeigen (color=ARGB1555)
JPG+BMP laden/anzeigen
Polygone laden/erstellen/anzeigen
3D-Objekte laden/anzeigen
23 GPIO-Pins (Digital-IO, Analog-IN, Ext-Int, Frq)
MultiTouch (bis zu 5 Positionen)
WAVE-Files laden/abspielen (bis zu 4 gleichzeitig)
Zwei einstellbare UARTs (4800,9600,19200,38400,57600,115200)
Zwei einstellbare SPIs im Master-Mode (195 kHz bis 50MHz)
Eine einstellbare I2C im Master-Mode (10 kHz bis 400 kHz)
Settings im externen Flash speicherbar
Basic-Funktionen für : PCF8563, PCF8583, MPU6050, Joystick, DS18B20,
HC-SR04, DHT-22, IR

Tastenbelegung :

ALT+F11 = umschalten vom Keyboard-Layout (QWERTZ, QWERTY, AZERTY)
ALT+F12 = Screenshot per VCP senden (Übertragung dauert ca. 30sek)

GPIO-Pins STM32F746-Disco:

01 = CN4/1  Arduino D0 (DIN,DOUT, COM1_RX)
02 = CN4/2  Arduino D1 (DIN,DOUT, COM1_TX)
03 = CN4/3  Arduino D2 (DIN,DOUT)
04 = CN4/4  Arduino D3 (DIN,DOUT)
05 = CN4/5  Arduino D4 (DIN,DOUT)
06 = CN4/6  Arduino D5 (DIN,DOUT)
07 = CN4/7  Arduino D6 (DIN,DOUT)
08 = CN4/8  Arduino D7 (DIN,DOUT)
09 = CN7/1  Arduino D8 (DIN,DOUT)
10 = CN7/2  Arduino D9 (DIN,DOUT)
11 = CN7/3  Arduino D10 (DIN,DOUT, SPI1_SS)
12 = CN7/4  Arduino D11 (DIN,DOUT, SPI1_MOSI)
13 = CN7/5  Arduino D12 (DIN,DOUT, SPI1_MISO)
14 = CN7/6  Arduino D13 User-LED (DIN,DOUT, SPI1_SCK)
15 = CN7/9  Arduino D14 (DIN,DOUT, I2C_SDA)
16 = CN7/10  Arduino D15 (DIN,DOUT, I2C_SCL)
17 = CN5/1  Arduino A0 (DIN,DOUT,AIN)
18 = CN5/2  Arduino A1 (DIN,DOUT,AIN)
19 = CN5/3  Arduino A2 (DIN,DOUT,AIN, COM2_CTS, SPI2_MOSI)
20 = CN5/4  Arduino A3 (DIN,DOUT,AIN, COM2_RTS, SPI2_MISO)
21 = CN5/5  Arduino A4 (DIN,DOUT,AIN, COM2_TX, SPI2_SCK)
22 = CN5/6  Arduino A5 (DIN,DOUT,AIN, COM2_RX, SPI2_SS)
23 = User-Button       (DIN)

Basic-Test-Programme :

primes : berechnet die ersten 1000 Primzahlen und stoppt die Zeit dafür
gfxtst : demo der Grafik-Funktionen
QUAD : demo der zwei Grafik-Layer mit einem sich drehenden Rechteck
maptest : demo der Sprite+Map Funktionen
mtouch : demo vom Multitouch
obj3d : demo der 3D-Objekte
polygon3 : demo der Polygon Funktion
POLYGON6 : moving Polygon
blitter2 : demo der Blitter Funktion
gyro3 : demo vom MPU6050 am I2C-Bus
BUTTON1 : demo der Touch-Objekte
jpg2 : demo der JPG load funktion

Screenshot :

Demo-Videos bei Youtube:

maptest video : LINK
multitouch video : LINK
3d-objects video : LINK
mpu6050 video : LINK
polygon video : LINK
RTC video : LINK
Touch-Objekte video : LINK

46 Antworten auf F746_Show_MMBasic

  1. Fabrice sagt:

    Aktuell müssen wir Linien Nummer eingeben , erste wird dann Programm von USB Stick laden :) … so konnten wir alles in strukturierte Basic machen ;)
    Gut gemach wie immer !

    Gruß.

    Fabrice.

  2. Fabrice sagt:

    Für die erste 1000 primes , Optimierung von Compiler auf -o3 gibt nur noch 6996mS ;)

    Gruß.

    Fabrice.

  3. phantomnet sagt:

    My config:
    CN14>PuTTy
    CN12>Flash drive 8GB
    CN13>USB keyboard
    CN3>uSD 8GB

    Issues:
    1. command CLS do not clearing screen on Putty
    2. keyboard is QWERTZ (for someone why using QWERTY it’s difficult)
    3. BackSpace not working on Putty

    by the way, good job

    • admin_ub sagt:

      thanks for the bug report. please download version A.24
      1. clear screen on cls should work now.
      2. Change Keyboard Layout with “ALT+F11″ to QWERTY
      3. Switch the putty keyboard setting for the backspace key
      from “Control-?” to “Control-H”

  4. phantomnet sagt:

    You said “..hier das BIN-File für das STM32F746-Disco Board rein.
    (das muss per ST-Link Utility geflasht werden)”
    There is another way to flash new BIN file to memory without ST-Link Utility.
    In Windows after install board drivers, you have a small HD (1MB) with two files: Mbed.htm and Details.txt. If you “copy” Bin file and “paste” it to that drive it will be saved to program flash. Easy and painless

  5. Fabrice sagt:

    Hallo ,
    in Grafik Funktionen List kannst die addieren …
    SetLayer , Showlayer , CopyLayer , Quad
    und Gleich Sprite und Maps und wenn noch platz in der stm32f7 Flash platz ist mache in eine Konvertierung von alle meine 3D graphisch Funktion auch :)

    Gruß.

    Fabrice.

  6. phantomnet sagt:

    Are commands for serial, SPI and I2C comunication of MMBasic working ??

  7. phantomnet sagt:

    update to last issue: “After finish any basic program which using colors and then start full screen editor, some lines on lcd are left in background color.
    Above and under “ESC:exit F1:save ……”.
    and no mater did you will use “cls black” or not it is still visible on edit command and changing background color after that command.

  8. phantomnet sagt:

    any way to break runing program?
    “10 goto 10″
    at now only board reset working

    • admin_ub sagt:

      its a bug in alpha version. you must readout keyboard periodically :
      “10 k=keydown”
      “20 goto 10″
      then “CTRL+c” works

      • phantomnet sagt:

        mayby something like in ZX Spectrum :

        BREAK(CRTL+c or/and ESC) to break program and CONTINUE command to continue run??? :)

        • admin_ub sagt:

          command “option break 27″ configs the “esc” key as break button. and “continue” is a command but throws an error at the moment.

  9. phantomnet sagt:

    In full screen editor cursor just “OR” some fonts.
    Change the font spacing to have a room for the cursor.
    It will decrease screeen capacity, but it will look much better.
    It’s just a visual effect.

  10. phantomnet sagt:

    When You planning to :
    1. Implement SPI, I2C, Serial comunication functions?( for pins available on Arduino connectors)
    2. Implement “setpin” interrupt (INTH, INTL, INTB)
    3. Implement LIBRARY LOAD file$ and LIBRARY UNLOAD $file
    4. Use SDRAM (except “lcd buffer” of course) for basic programs and libraries (aprox 7.75 MBytes free for use)
    5. Use some file name like “autorun.bas” for files to automatically run after system start.

    New features :
    1. precompiled library files for faster run (it will be a lot of work to do)
    2. Fully implement “CTRL-C” to break running program without “keydown” reading

    It will be very useful for me and other users who planning to use MMBasic
    to control additional hardware.
    I have change my plans and i will use MMBasic for my project.

    • admin_ub sagt:

      CTRL+c should work in actual Version A.33
      I have just made an account at “http://www.thebackshed.com/”
      and waiting for confirmation.
      Its easier to post news and receive bugreports in a forum.
      GPIO and communication is a big topic but it will work
      sooner or later :-)
      Fabrice is using a big amount of RAM for Graphic and Sprites
      (ARGB1555 background picture with 800×600 Pixel needs 1Mbyte :-)
      but JPG is also working and needs much less ram.
      Perhaps we can make a “priority list” in the forum to
      see whats comming next.

  11. Fabrice sagt:

    @Phantomnet : you said :
    4. Use SDRAM (except “lcd buffer” of course) for basic programs and libraries (aprox 7.75 MBytes free for use)
    Do not forget that sdram run at 100Mhz …. it’s the halve than the cpu SRAM :)
    Actually , Sprite , map , video buffer use SDRAM. Music modules , 3D Graphics and
    other stuff will use SDRAM too for keep free the SRAM.
    And , allot of Fast SRAM will be available due to that … he he .
    Actually it is so :
    Still available in SDRAM : 8.388.608 – 5.809.364 = 2.579.244 bytes
    This is after we allocated 3 video buffer , 500 Sprites , 1.000.000 pixels for Map , 1.000.000 bytes for Music module , and 1.000.000 bytes for 3D Graphics.
    If it is really needed , I’m sure we found a way to use some of the more than 2Mb rest for MMBasic variable and/or Library.

    Cheers.

  12. phantomnet sagt:

    if i’ll write :
    10 color red,black
    20 cls 0
    30 color blue,white
    40 print “anything”

    it should to be printed on lcd as fore color: blue and background color: white
    but is not?! :(
    lines 10 and 20 doing their job but line 30 isnt

    • admin_ub sagt:

      should be fixed in Version A36
      the command “color” in a running basic program
      change the color until the end of the program.
      if you want to change the color of the editor
      and input promt use the “color” command at the promt.

  13. Edmonton sagt:

    It’s very cool project, programming could be simplified. If there are many DSP functions in C, and they have to be used in a project. Is it possible to be built in MMbasic?

    • admin_ub sagt:

      if you work with the source code you can add every c-function you want
      and call it from the basic program. but at the moment (in alpha state) we only generates binary files. Here you must use what we added :-)

  14. sgyuri sagt:

    Lieber Fabrice!

    Herzlichen Glückwunsch und vielen Dank für die gute Arbeit.
    Will der Veröffentlichung der Quelle, denn ich will an die Ethernet IoT Projekte drehen, um zu tun.
    Autorun.bas Konto ist das Betriebssystem ?

    Grüße, George

  15. Fabrice sagt:

    @sgyuri :

    Ich habe Graphik Sache programmiert.
    Uwe ist der Spezialist für die ändere komische Dings :)

    Gruß.

  16. Giporu sagt:

    Excuse me! This translation of Google.
    The English do not know.
               Installed firmware V107.
    Result:
       – MM Basic benchmak showed deterioration at ~ 4%
       – Ceased to run “demo der 3D-Objekte”
       – In the “demo der Sprite+Map Funktionen” picture was “twitch”
               I returned to the firmware V05. All is well!
    What’s my mistake? Or is it a glitch V107 firmware?
    Thank you!

  17. Giporu sagt:

    What is 1.7

  18. Ruppi sagt:

    Hallo,
    erstmal Gratulation zu der phantastischen Arbeit von euch Dreien.
    Jetzt hab ich eine Frage zur USB-Tastatur an CN13.
    Ich habe mir jetzt auch eine KL-688 gekauft und verwende auch den
    gleichen USB-Adapter, aber bekomme kein Lebenszeichen von der
    Tastatur (am PC funktioniert sie).
    Auch an einem zweiten STM32F7 Disco und mit externer 5V-Versorgung gleiches Bild.
    Muss ich noch wo drücken oder könnt Ihr mir hier bitte Hilfestellung geben.
    Im Voraus besten Dank
    Gruß Ruppi

  19. Jo sagt:

    Bei mir funktioniert der Analoginput nicht. (Version 1.07)
    10 REM Analog Test
    20 setpin a0,ain
    30 setpin a1,ain
    40 setpin a2,ain
    99 rem Jetzt geht’s los
    100 for i=0 to 1000
    110 print i, “x=” ; pin(a0) , “y=” ; pin(a1) , “z=” ; pin(a2)
    120 next i
    Mache ich etwas falsch?
    Basic ist so lange her.

  20. Jo sagt:

    Sorry, Fehlerbeschreibung vergessen:
    Bei mir wird immer 0 ausgegeben unabhängig von der Eingangsspannung

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


fünf − fünf =

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>