PicoMite V6.01.00 betas


Author Message
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 11984
Posted: 10:43am 22 Jul 2025      

Attached is the first beta of the RP2350 standard PicoMite firmware.

PicoMite.zip

6.01.00 will focus exclusively on the rp2350, making use of its extra memory (and to some extent PSRAM)

In this first beta there are a number of changes as follows:

Enhanced KEYPAD command
The existing KEYPAD command supports a 4x3 or 4x4 keypad using the syntax
KEYPAD var, int, r1, r2, r3, r4, c1, c2, c3 [, c4]
This release supports n x m keypads using the syntax
KEYPAD keymapmap!(),var!,int, startcolpin, nocols, startrowpin, norows

'startcolpin' is the pin that begins 'nocols' of contiguous GP pins used as the column scans
'startrowpin' is the pin that begins 'norows' of contiguous GP pins used as the row scans
'var!' is the variable that will contain the value returned to the interrupt routine 'int' when a key is pressed
keymapmap!() is a two dimensional array that contains the user supplied mapping for every key. The array dimensions must match the number of columns and rows specified

So for example if I have a keypad with 3 columns and 4 rows
123
456
789
*0#

And I wire gp1 to the left column, gp1 to the middle and gp2 to the right, then the 4 rows from top to bottom to gp3 to gp6

My program could be
Option base 1
Dim keymap(3,4)=(1,4,7,10, 4,5,6,0, 3,6,9,11)
Keypad keymap(),keyret,myint,gp1,3,gp4,4
Do
Loop
Sub myint
Print keyret
End Sub


Of course this simple example could be done with the existing command but the new command syntax can cater for any rectangular sized keyboard and has been tested with a 6x12 keyboard (72 keys) AND you can specify the reurn value for each key.

High speed buffered display drivers
The new release supports the following new display drivers
ILI9341BUFF: 320 x 240
ST7796SPBUFF: 320 x 320
ST7796SBUFF: 480 x 320
ILI9488PBUFF: 320 x 320
ILI9488BUFF: 480 x 320
ILI9488WBUFF: 480 x 320 'Waveshare Pico-Restouch-lcd-3.5
ST7789_320BUFF: 320 x 240 'Waveshare Pico-Restouch-lcd-2.8

In all cases enabling one of these drivers steals a RGB332 framebuffer from the heap so in the worst case of a ILI9488BUFF heap is reduced by 150K bytes (from 300K)

To use one of these drivers you first need to allocate the SPI pins to be used

OPTION LCD PINS clkpin, mosipin, misopin


These pins are dedicated to the display and must be separate from any pins used for the SYSTEM SPI which may still be required for touch and the sdcard (NB: in the case of the Waveshare boards using this driver will conflict with also using touch and the sdcard as they share the SPI channel)
The reason for the dedicated pins is that the screen updates will all take place on the second processor and for maximum performance this cannot share the SPI channel.

How much faster are these drivers? I've included in GUI TEST LCDPANEL an output when you exit the test that reports the number of circles drawn per second.



MUCH FASTER!!!

AFAIK all normal graphics work using the new drivers and they are tested with Petscii and work properly. Using these drivers, the use of the ILI9488 and particularly the ST7796S displays work very well as console devices. For maximum performance with the ST7796S display a CPU speed of 360MHz is recommended. This allows the SPI channel to the display to run at 90MHz giving a full screen refresh time of about 14mSec with no load on the main processor.
Of course the downside is that the screen is only using 256 colours instead of the full 65536. A later beta will include a MAP capability so that you can select the 256 colours to be used out of the full RGB888 palette.