OCM_SM 3.9c - Release v2
OCM-PLD v3.9c
Para ler em português do Brasil, continue rolando a tela. :)
#WARNING
While I and some testers do our best to make sure there are no issues
that should cause device bricking or causing hardware failures, we are
in no way responsible for any issues that might arise.
Also, notice this has been tested on MC2+, SM-X, SM-X Mini and
SMX-HB, but not tested on SX2 as currently no one with SX2 has shown
interest on testing it. If you have a SX2, an USB Blaster and is willing
to make a few tests, please contact me. So, for SX2 users, I'm sorry
but while I did my best to make sure it will work fine, it is untested on
that platform.
Release v2
- only MC2+ changed
- possible improvement on compatibility with expansion #02
New in relation to v3.9b
- MC2+ supported
- Fixes for MC2+ related to original 3.8 build from Focosi/Trucco
- Improvements and fixes to MSX Mouse emulation over PS/2 mouse
- As a result, paddle emulation also is now smooter
Release notes
OCM-PLD v3.9c is an extension on KdL OCM release v3.9. What this extension
brings to the table:
-
New supported devices:
-
SMX-HB: It is a 1.75gen device. Its FPGA has about 1/3 less logic cells
as a fruit of component shortage. It is meant to replace the motherboard
of Hotbit MSX Computers, adding (almost) the full OCM-SM experience. As
being a device with real MSX Keyboard, it has its own needs:-
I've allowed Joystick port debounce to be disabled, this perhaps can
alleviate the issues some users were having with paddles. To turn off
Joystick port debounce use the command SETSMART -89 , to turn it back
on use SETSMART -8A , power cycle will restore default, on. -
I've added support to a third keyboard map table, so you have the one
from the build (us/br/fr/es), japanese and one for the built-in MSX
keyboard Hotbit has. Built-in keyboard of Hotbit is not standard and
its map is very peculiar and PS/2 keyboards have a different mapping.
DIP switch 9 set to OFF is the default, using the internal mapping, if
set to ON it will use the mapping the firmware was built-in, that is
handy when you want to use an external PS/2 keyboard. -
Fix: Select key was not working on original 3.7.1 based release, it
works now. -
Improvement: SELECT + UP and SELECT + DOWN replaces Page Up and Page
Down, so it is possible to activate the autofire module using only
SMX-HB internal keyboard. Also, SELECT + F1 to F4 replaces F9 to F12,
making it possible to use most of the keyboard shortcuts. -
Missing: it doesn't support OPL3 as it won't fit on the FPGA used.
-
-
Multicore 2+: it is like a MiSTER device, but with less FPGA capacity (
more than double of second gen devices, but about half of MiSTER) and also
without an extra ARM core to help with USB devices (so it uses SEGA Genesis
/ Mega Drive controllers or SEGA Master System controllers and PS/2 mouse
and keyboards). One advantage it has over MiSTER is that it was made with
an expansion slot that you can insert expansions that allows to use real
cartridges/interfaces for the device. There is a SM-X expansion available
that adds three MSX Slots and ESP Wi-Fi.-
Legacy: all features from OCM 3.8 build by Roberto Focosi and Victor
Trucco were ported, so it supports the external slots extension, usage
of images instead of needing a dedicated SD card, keyboard layout
selection using OSD menu, etc. -
Fix: when using images instead of dedicated SD card, writing to the
card could cause errors / failures, now it should be working fine
everytime. -
Improvement: MC2+ has SEGA Genesis / Mega Drive joystick port. As
such, my initial 3.7.1 version used only two buttons of any joystick
and allowed invoking OSD using MODE + START on an eight button joystick
, Focosi release ditched invoking OSD for sake of simplicity of design,
I've restored invoking OSD and now ALL 8 buttons can be used on Joymega
compatible games/software as well, for both joysticks. It also works
with 4 buttons joysticks (Joymega) and 2 buttons joysticks (Master
System joystick detected as regular MSX joystick). -
Unique behavior: since MC2+ doesn't have dip switches but uses OSD
being invoked through F12 key, turbo changing through F12 key was
removed and it can be adjusted only on the OSD menu (F12 or MODE+START
on joystick 1) or using switched I/O or software that sets the CPU
speed. Since you need to hit F12 to invoke OSD and hit it back to
remove it, it was not nice having F12 also switching the CPU clock. -
Unique behavior: paddle emulation is turned on/off through the OSD
menu, SETSMART commands for paddle won't have any effect. -
Improvement: in general all DIP settings are done through the OSD. If
you are using a disk image, settings are saved / kept on the SD Card,
and restored back when OSD is invoked. NOTE: the following is valid if
you have a STM firmware lower than 2.01, on STM firmware 2.01 there
is an OSD option, SAVE & RESET, that overcomes this at the expense of
rebooting the MSX. On STM 2.00, when using a dedicated SD Card,
since the card is owned by the MSX as a whole, it is not possible to
save settings in it as the SD Card I/O is not assigned to the MC2+
microcontroller that makes the OSD a reality, so whenever you pop up
the OSD, settings are reset to "default values", since microcontroller
doesn't know settings on FPGA and could not save the settings into the
SD Card to read back when invoked again. Due to that I've changed a few
of those settings to alow sane defaults. Remember: if using dedicated
SD card, set all settings the way you want before exiting OSD. If you
invoke OSD again the default values will be loaded and your settings
all lost / need to set it again. There is no other way around it
currently. -
Extra: if you have a ZX Next Expansion for MC2+ but doesn't have the
SM-X one, you can use it after enabling it on the OSD. Currently the
only feature supported is use of Wi-Fi / ESP. IMPORTANT: SM-X / Second
Gen OCM devices use a customized ESP firmware, and ZX Next use standard
"AT" firmware from Espressif. In order to make this feature useful, you
need to have a second ESP-01 module flashed with the customized ESP
firmware, so you can just put it into the extension when using it for
MSX, and put back the original one when using it for ZX Next.
Instructions on how to flash the custom ESP firmware are available at:
https://youtu.be/uoaiEamWUUg
-
-
-
For devices/builds supporting OPL3:
-
Fix: I've fixed OPL3, it had two issues that prevented it to work with
the latest VGMPlay version:-
IRQ was not connected, so timers programmed wouldn't trigger,
instead only the VDP interrupt, to slow, so music would play darn
slow with VGMPlay. -
Even after fixing that, playing speed was almost half of the correct
speed for VGMs. The timer scaler was not properly set causing it to
trigger slower than programmed.
Since VGMPlay 1.3 relies on OPL3 timer when present to drive a high speed
interrupt, not having IRQ and not having the proper scaler for timer
caused its timing to be slow, darn slow... -
-
Fix for second gen devices: I've fixed OPL3 sound rendering as it was
discarding all information that is on right output channel only,
unfortunately we do not have enough FPGA resources to run the sequencer
for two channels, but a clever trick allows all songs content to be
properly played in MONO glory :P Try as an example Doom soundtrack track
3 before updating and after updating it. :) -
Improvement for Multicore 2+: since MC2+ has a really large FPGA, OPL3
works in real stereo mode since it can acommodate the extra registers
needed for it that do not fit on regular second gen devices.
-
-
For devices supporting SN76489 / Second PSG:
-
Extra: I've added partial support to a built-in Franky. That partial
support is good enough to work with SG1000, COL4MMM (using COM\Franky
versions) VGMPLAY, ROBOPLAY and Sofarun (remember to set it to use MSX
VDP and Franky's PSG). As Franky sound uses I/O ports 0x48 and 0x49, and
those ports are part of the switched I/O, it is usually disabled, as OCM
IPL loader will leave switched I/O selected after booting. There are
different ways to enable Franky sound:-
Latest release of COL4MMM automatically disables switched I/O, so no
need for a SETSMART command or using VGMPLAY before. -
VGMPLAY will automatically disable switched I/O, so you can play a
VGM song that uses SN76489 and after exiting VGMPLAY you can use other
software. -
De-select the internal switched I/O by sending the basic command
OUT &H40,0 -
Use SETSMART -8C to enable the I/O ports 0x48 and 0x49 for that, so
any program relying on reading OCM information on those ports won't
get it.
-
-
Extra: Second PSG on ports 0x10 to 0x13. It also allows the PSG registers
to be read back.
-
-
For all devices:
-
Improved: Victor Trucco made improvements on the SDRAM controller so it
is able to work with different chips. Some SM-X mini and SMX-HB use chips
that need this to work. -
Extra: I've added Paddle emulation when using a PS/2 mouse. To enable
VAUS (Arkanoid/Taito) Paddle emulation use SETSMART -8E, to enable MSX
standard paddle emulation use SETSMART -8F, to disable it (default) use
SETSMART -8D. Note that MSX Standard paddle only works properly if Z80
clock is 3.58MHz, like a real MSX Standard paddle on a MSX machine with
turbo CPU. Supported on all builds except SMX-HB with Franky sound. -
Fix: I've fixed mouse emulation. It was not possible to move a single
pixel on X axis, now it is. Also, four different levels of sensibility
are available by clicking the third mouse button (if your mouse is not an
intellimouse compatible mouse w/ 3 buttons, sensibility will be fixed
almost the same as before) -
Fix: Mouse emulation would not work nice if you had an eight button mega
drive joystick connected with joymega. Now it detects properly -
Fix: When switching from mouse to joystick or joystick to mouse, joystick
port is "disconnected" for 1 second. On a real MSX it is not possible to
change from joystick to mouse without disconnecting each one so HIDTEST
and software that uses HIDLIB to detect rely on the device being
disconnected for a while to detect its removal and then be able to see
the new device being connected -
Improvement: ported the Multicore 2+ Mouse emulation to all devices. It
is a better approach as it has a time-out to return to the first state
after a few time without communication, like a real MSX mouse.
-
-
Future, devices that have full franky build:
-
Missing: FPGA in those devices can't fit OPL3 along with Franky VDP and
PSG, so that build won't have OPL3 support. Exception will be MC2+ that
can have it all. -
Extra: this is a WIP, please wait, but it will have Franky VDP :P
-
All source code and binaries that changed in relation to OCM 3.9:
(c)2022 Oduvaldo Pavan Junior - ducasp@gmail.com
All source code from OCM 3.9 originally is a work of many people, including
KdL and Hara-san that are really huge contributors to it!
All code can be re-used, re-written, derivative work can be sold, as long as the
source code of changes is made public as well.
#AVISO
Eu e algumas pessoas testamos da melhor maneira possível para nos
certificarmos que não há qualquer problema que possa causar danos aos
dispositivos testados ou bricking (necessitando um USB Blaster para
restaurar o dispositivo), não somos de forma alguma responsáveis por
quaisquer problemas que possam acontecer.
Também, note que foi testado no MC2+, SM-X, SM-X Mini e SMX-HB,
mas não foi testado no SX2 já que atualmente ninguém que tenha um
SX2 se mostrou interessado em testar. Se tiver um SX2 e um USB Blaster
e puder fazer alguns testes, por favor entre em contato. Então, usuários do
SX2, sinto mas apesar dos meus esforços para garantir que funcione em seu
dispositivo, essa é uma plataforma que segue sem testes e sem garantias.
Release v2
- mudanças apenas pro MC2+
- uma possível melhoria no suporte a expansão #02 do MC2+
Novidades em relação a v3.9b
- Suporte ao MC2+
- Algumas correções para o MC2+ em relação ao build 3.8 original do Focosi/Trucco
- Melhorias e correções na emulação de mouse MSX usando mouse PS/2
- Como resultado, a emulação do paddle ficou mais suave
Notas de liberação da versão
OCM-PLD v3.9c é uma extensão da OCM v3.9 do KdL. O que essa versão tem de
diferente:
-
Novos dispositivos suportados:
-
SMX-HB: É um dispositivo geração "1.75". Seu FPGA tem cerca de 1/3 menos
células como resultado da falta de components. Seu uso principal é de
substituir a placa princial de um Hotbit, tendo (praticamente) toda a
experiência OCM-SM. Por ter um teclado próprio de MSX, tem suas
peculiaridades:-
Permite o debounce das portas de joystick ser desligado, talvez possa
ajudar com problemas que algumas pessoas estavam tendo com paddles.
Para desligar o debounce use o comando SETSMART -89 , para religar use
SETSMART -8A , ao desligar e religar a placa, o padrão é debounce
ligado. -
Suporte a um terceiro mapa de teclados, então tem o mapa da versão
(us/br/fr/es), japonês e um para o teclado do Hotbit. O teclado do
Hotbit não segue o padrão dos teclados de PC portanto seu mapa é bem
diferente dos teclados PS/2. A chave DIP 9 em OFF é o padrão, uso do
mapa Hotbit, configurada em ON irá usar o mapa da versão do firmware,
útil quando quiser conectar um teclado PS/2 externo. -
Correção: a tecla Select não estava funcionando na versão 3.7.1 que
as placas foram enviadas, agora funciona. -
Melhoria: SELECT + CIMA e SELECT + BAIXO substitui Page Up e Page
Down, sendo possível ativar o disparo automático usando apenas teclas
do Hotbit. Também temos SELECT + F1 a F4 sbustituindo F9 a F12, sendo
possível utilizar a maioria dos atalhos de teclados do OCM. -
Ausente: não há suporte a OPL3, não cabe no FPGA do SMX-HB. Também
não foi possível suportar emulação de paddle na versão frankysnd pela
mesma razão.
-
-
Multicore 2+: parecido com o MiSTER, porém com um FPGA menor que o mesmo(
mais que o dobro dos OCM segunda geração, mas cerca da metade do MiSTER) e
sem o ARM embutido no FPGA que é utilizado para interface com dispositivos
USB (MC2+ usa controles SEGA, Mega Drive ou Master System e mouse/teclados
PS/2). Uma vantagem sobre o MiSTER é o slot de expansão aonde podem ser
colocadas expansões que permitem utilizar cartuchos/interfaces reais dos
dispositivos. Existe uma expansão SM-X que dá três slots de MSX e o Wi-Fi
usando ESP-01.-
Legado: tudo que a versão OCM 3.8 do Roberto Focosi e Victor Trucco
tem a mais foi trazido, então tem suporte a extensão SM-X, uso de
imagens de disco para não ter que dedicar um cartão SD para MSX, mapas
do teclado todos em uma única versão escolhidos pelo menu OSD, etc. -
Correção: no uso de imagens ao invés do cartão SD dedicado, erros de
escrita occorriam às vezes, agora deve estar funcionando sempre. -
Melhoria: MC2+ usa controles SEGA. Inicialmente, a versão 3.7.1 que
eu havia feito primeiro usava apenas dois botões de qualquer cotrole, e
permitia chamar o OSD com MODE + START usando controle de 8 botões, o
Focosi na 3.8 dele optou por uma solução simples que também usava apenas
dois botões mas não permitia mais chamar o OSD. Agora nessa versão eu
fiz com que os dois controles fossem mapeados internamentes para um
"Joymega" interno. Com isso, dá para usar 4 ou 8 botões aonde o Joymega
funciona (desde que use um controle com 4 ou 8 botões), chamar o OSD na
combinação de START + MODE, tudo automático. -
Comportamento único: o MC2+ não tem DIP switch, utiliza um OSD que é
chamado pela tecla F12, portanto alterar o turbo da CPU com F12 key foi
desabilitado e pode ser ajustado apenas pelo menu OSD (F12 ou MODE+START
no controle 1) ou utilizando I/O chaveado ou software que configure a
velocidade da CPU. Como o uso de F12 é necessário para chamar e depois
tirar o OSD da tela, ter a velocidade da CPU sendo alterada por essa
tecla não funcionava bem. -
Comportamento único: a emulação de paddle é ligada/desligada apenas
pelo menu OSD, os comandos SETSMART para paddle não tem efeito no MC2+. -
Melhoria: as configurações do DIP são feitas pelo OSD. Se estiver
utilizando uma imagem de disco, as mudanças são salvas no cartão SD e
restauradas novamente quando o OSD é chamado ou ao religar. NOTA:
a descrição a seguir é valida caso seu STM firmware esteja em na versão
2.00 ou menor, STM firmware 2.02 adiciona uma opção no OSD, SAVE &
RESET, que resolve essa questão ao custo de resetar o MSX. Ao usar um
cartão SD diretamente, como o cartão é "controlado" pelo MSX, não é
possível ao microcontrolador do OSD salvar configurações no cartão,
então nesse caso sempre que o menu OSD é chamado as configurações que
aparecem são configurações padrão, já que o microcontrolador do OSD não
sabe das mudanças no FPGA e não pode salvar as mesmas no cartão que
está dedicado para o MSX. Por isso alterei algumas das configurações
de forma que os valores padrões atendam a maioria. Lembre: ao usar um
cartão dedicado ao MSX ao invés de imagem, configure tudo que deseja
ANTES de sair do OSD. Ao entrar novamente no OSD, as configurações
padrão serão restauradas, então terá que configurar tudo novamente.
Infelizmente, no momento não há maneira de contornar isso (a não ser
utilizar uma imagem de SD ao invés de um SD dedicado). -
Novidade: se tiver a expansão "ZX Next" do MC2+ mas não tiver a
expansão SM-X, poderá usar a do ZX Next após habilitar a mesma no OSD.
Atualmente a única característica adicionada com isso é o uso de Wi-Fi.
IMPORTANTE: SM-X / dipositivos OCM de segunda geração usam um firmware
customizado para o ESP, e o ZX Nest utiliza um firmware "AT" padrão da
Espressif. Para o Wi-Fi funcionar no MSX, necessita um segundo módulo
ESP-01 com o firmware customizado, assim pode colocar o ESP do MSX na
extensão quando for usar MSX, e colocar o ESP original de volta quando
for usar a extensão para ZX Next. Instruções de como gravar o firmware
customizado do ESP estão disponíveis em:
https://youtu.be/uoaiEamWUUg
-
-
-
Para dispositivos/firmwares suportando OPL3:
-
Correção: Arrumei a OPL3, tinha dois problemas que faziam OPL3 não
funcionar com a última versão do VGMPlay:-
IRQ estava desconectado, então os temporizadores programados não
geravam interrupção, e com apenas a interrupção do VDP, a música
tocava muito devagar. -
Mesmo com IRQ conectado, a velocidade melhorou mas estava lenta. O
temporizador tem uma escala que estava com valor incorreto para o
clock utilizado, causando os temporizadores demorarem mais que o
programado para acionar a interrupção.
O VGMPlay 1.3 depende dos temporizadores da OPL3 quando a mesma está
presente, como um temporizador de alta resolução, e não ter o IRQ ligado
e não ter a escala correta nos temporizadores causava o mal funcionamento
do mesmo... -
-
Correção para dispositivos segunda geração: originalmente a OPL3 estava
apenas com um canal conectado, descartando qualquer som tocando apenas no
canal desconectado. Imagino que a razão disso é que ao conectar e mixar
ambos canais, o uso de recursos FPGA vão além do que os FPGA de segunda
geração tem disponível (o sequenciador de cada canal usa vários registros
e ao ter um canal conectado apenas, o Quartus simplesmente corta esses
registradores já que a saída não é conectada a nada). Fiz um pequeno
truque para resolver essa situação, permitindo que todo o conteúdo seja
tocado em apenas um canal sem ter que renderizar ambos e mixar depois. :P
Tente por exemplo a terceira música da trilha sonora do Doom antes e
depois da correção para sentir a diferença. :) -
Melhoria pro MC2+: como o MC2+ tem um FPGA enorme, a OPL3 funciona em
estéreo real. Permiti que a OPL3 possa ser usada em MONO pelo OSD.
-
-
Para dispositivos/firmwares suportando SN76489 e 2xPSG:
-
Novidade: suporte parcial a uma "Franky" embutida. Esse suporte parcial
é suficiente para que SG1000, COL4MMM (usando as versões COM\Franky),
VGMPLAY, ROBOPLAY e Sofarun (lembre de configurar de forma que use o VDP
do MSX e PSG do Franky para SMS/SG1000). Como a Franky utiliza as portas
0x48 e 0x49 que fazem parte das portas reservadas para I/O chaveado, irá
estar desabilitado inicialmente, já que o módulo que carrega a BIOS MSX
deixa o dispositivo de I/O chaveado selecionado após o boot. Há várias
opções para habilitar o som da Franky:-
A última versão do COL4MMM automaticamente desabilita o I/O chaveado,
então não é necessário nada para que funcione. :)re. -
VGMPLAY também desabilita automaticante o I/O chaveado, então se usar
o VGMPLAY e tocar uma música que usa o SN76489, após sair do VGMPLAY
poderá utilizar qualquer outro software que o som irá funcionar. -
Enviar pelo BASIC o comando OUT &H40,0 que desabilita o I/O chaveado.
-
Usar SETSMART -8C para reservar as portas 0x48 e 0x49 para o Franky,
ao fazer isso qualquer programa que dependa dessas portas para ler
informações do OCM não irá obter a informação correta.
-
-
Novidade: Segundo PSG nas porta 0x10-0x13. Também permite que os
regsitradores do segundo PSG sejam lidos.
-
-
Para todos dispositivos / firmwares:
-
Melhoria: Victor Trucco fez melhorias no controlador de SDRAM que agora é
capaz de trabalhar com diferentes chips. Alguns SM-X mini e SMX-HB usam
chips que precisam dessa melhoria pra funcionar. -
Novidade: Emulação de Paddle usando um mouse PS/2. Para habilitar o modo
VAUS (Arkanoid/Taito) use SETSMART -8E, to habilitar o modo MSX use
SETSMART -8F, para desabilitar (padrão) use SETSMART -8D. Note que um
paddle MSX apenas funciona corretamente se o Z80 estiver a 3.58MHz, como
um veradeiro paddle MSX em um MSX com CPU turbo. A única exceção é o
firmware para SMX-HB com som Franky, já que não há espaço no FPGA para o
SN76489, o segundo PSG e o paddle. -
Correção: Não era possível mover apenas um ponto no eixo X. Também
adicionei quatro níveis de sensibilidade que podem ser alternados com o
clique do terceiro botão do mouse (se seu mouse não for compatível com o
padrão intellimouse / três botões, a sensibilidade estará fixa próximo ao
que era originalmente). -
Correção: a emulação de Mouse MSX não funcionava muito bem se um controle
SEGA de quatro ou oito botões estivesse conectado com um Joymega. Agora o
mouse é detectado adequadamente, porém, o controle só retoma o uso da
porta de Joystick se apertar os botões A, B, C ou START (ou 1 e 2 em
controles de 2 botões). -
Correção: ao mudar de controle para mouse e vice versa, agora a porta de
controles é "desconectada" por 1 segundo. Em um MSX real não é possível
mudar de controle para mouse (e vice versa) sem desconectar o mesmo da
porta, HIDTEST e jogos/programas que usem a HIDLIB dependem desse evento
de desconexão e posterior conexão para detectar a troca de dispositivo. -
Melhoria: a emulação de mouse MSX do MC2+ foi portada para todos. É uma
forma melhor que contam com time-out para retornar sozinho ao primeiro
estado após algum tempo sem leitura, assim como um mouse MSX real.
-
-
Futuro, dispositivos que terão um build Franky Completo:
-
Ausente: salvo pelo MC2+, o FPGA nos dispositivos OCM segunda geração não
tem espaço suficiente para ter OPL3 junto com o VDP e PSG do Franky, logo
esse build não terá suporte a OPL3. O MC2+ terá também a OPL3 junto com o
Franky completo. -
Novidade: ainda está em desenvolvimente, por favor aguarde, logo teremos
o Franky com VDP e PSG :P
-
Todo código fonte e binários alterados em relação ao OCM 3.9:
(c)2022 Oduvaldo Pavan Junior - ducasp@gmail.com
Todo código fonte do OCM 3.9 é um trabalho de muitas pessoas, incluindo KdL e
Hara-san que são grandes contribuidores!
Todo código adicional pode ser reutilizado, re-escrito, trabalhos derivados
podem ser vendidos DESDE QUE o código fonte das mudanças seja publicado também.
Para o código original do OCM 3.9, verifique a licença do mesmo.