For a "Quick Start Guide" see at the end of post!
For technical help, please head over to https://www.cpcwiki.eu/forum/hardware-related/usifac-ii-technical-problems-support/ .
Universal
Serial
Interface
for
Amstrad
CPC II (a.k.a. USIfAC II or...
THE GOTEK KILLER FOR AMSTRAD CPC! :D), is an evolution of my previous Design (http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/universal-serial-interface-for-amstrad-cpc) USIfAC (with which is fully compatible), based on a modern and much more powerful 40pin 18F47Q10@64Mhz 8bit PIC microcontroller, which offers many new amazing features:
(https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-iimake-your-pc-or-usb-stick-an-hdd-for-amstrad-access-dsk-and-many-more!/?action=dlattach;attach=34008;image)
- Receive buffer of 3100bytes (~3,5times than of previous interface)
- Serial port speeds of up to 1.065.000bps!
- Full 16bit address decoding,
- AMSDOS and PARADOS ROM emulation,
- 765 Floppy Disk Controller emulation,
- Use a Usb storage device, by utilizing a cheap CH376 usb host module (https://www.ebay.ie/itm/1-2-5-IC-CH376S-U-Disk-Read-Write-Module-For-USB-Control-Transfer-6MHz-Arduino/263442126488?ssPageName=STRK%3AMEBIDX%3AIT&var=562464833678&_trksid=p2057872.m2749.l2649),
- Many RSX commands that offer full access of PC Hard Drive or a usb storage drive, for change/create/delete directories and load/save/delete programs/games (even Ascii files)!
- Incredible loading speeds of up to ~30kb/sec (more than 6-7 times faster ,than a usual speed of a gotek/floppy disk drive)!
- Full read/write access of DSK images of both AMSODS and PARADOS formats!
- Access up to four DSK images and choose them "on the fly", to support all multi-image Games!
- Load SNA snapshot files!
- Extra RSX commands to copy files from/to floppy disks,transfer DSK images to floppy disks, and quick Format disks!
- 1kb EEPROM for use as extra memory or for storing/executing your own routines.
- Includes 3 classic games, GALACHIP, PACMAN and KILLER GORILLA!
- Equipped with a reset button and a Pause switch!
Here (https://www.youtube.com/watch?v=AmeqV5Z8Ziw&t) is a small presentation of the board using a usb flash drive on a CPC 6128 and
Here (https://www.youtube.com/watch?v=4ZjLQcK0i98) on a CPC 464!.
(Mind also that it can be perfectly used with CPC 464 too, in fact
USIfAC II might be the easiest fastest and cheapest solution for loading games on a CPC464! )
All previous utilities (like terminal, file copy, format disk etc) are now easily accessible through RSX commands, with the addition of some new RSX commands for easy setup and configure Serial port speed (
|SET), Wifi/Bluetooth Modules (
|WiFi,|COM), show status of Interface(
|STAT), and finally, an on line help (
|HELP) which gives you a short description of all RSX commands supported!
- First,
here is the files for a case for 3D printing: https://www.thingiverse.com/thing:4974135(http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-iimake-your-pc-or-usb-stick-an-hdd-for-amstrad-access-dsk-and-many-more!/?action=dlattach;attach=35274;image)
And
Here (https://www.dropbox.com/sh/ezzga2dppm6jlm7/AACwFC_rv2QatWh_ndKc9fhma?dl=0) you can find:
- The new
User's Guide (Amstrad CPC Serial Interface II User Guide.pdf)
- The new
windows utility program ('Windows program' folder), for Direct connection with a PC, that have some improvements too (for example, direct mode now works with WiFi module too,and program have more stable operation)
- A
File manager (filemanager.zip) for easy manage & loading files/dsk images/snapshots! Copy contents of the folder to usb flash drive root dir,and give to Basic prompt: RUN"FM". Select 'Y'/'y' (Check with |STAT if you board has rev_4c firmware or newer, and then you can also choose "n"/"N"). Use keys:
- Left-Right arrows for changing pages.
- Up/Down arrows for seeking file/dir names into each page.
- <Return> for taking action: If selected name is a directory it will move into it, if it's a "DSK" image it will give you a catalogue of the disk image(CPC6128/664) or it will reset (CPC464) and then you can access image by giving "CAT".Finally, if it's a file,it will try to execute it.
- <SPACE> Moves up a directory, if you are inside a sub folder you can also use "." or ".." at the top of first page.
-
A utility (disk2image.zip) for creating disk images from old Floppy disks, in just 40 seconds!. You can use it with older and newer boards, just extract the zip file to usb stick and run "disk2img.bas". You will be asked to give a disk image name (you can use the included TEMP.DSK or any other standard DATA format dsk image). For root directory you should also add a '/' in front of name, e.g.: '/TEMP.DSK', but if you use a folder, you don't need to add '/'. Utility can transfer only standard "data format" floppy disks (40 tracks with 9sectors/track, 512 byte/sector), which i believe was, the vast majority of disks used back in the '80s.
-
CPCLoad utility that offers an easy batch extraction of files from dsk images, in order to benefit from the amazing loading speeds!
- A Dsk manager for easy mounting images manually, to the 4 available slots (Multi_dsk_manager.zip)
- A small utility to type ASCII/txt files on screen (type.zip). Run TYPE.BAS, give file name. Use any key to pause text, press again to unpause.
-
Basic loader creator utility (cpc_loader.zip) for
creating small Basic loaders for your games/programs, and make loading process much easier:
(https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-iimake-your-pc-or-usb-stick-an-hdd-for-amstrad-access-dsk-and-many-more!/?action=dlattach;attach=34068;image)
It supports direct file folders, DSK images and SNA snapshot files. It will be especially useful for CPC 464, where giving RSX commands with arguments is rather tiresome (instead of giving directly commands,like with CPC 6128, you need to set first a string variable, for example, the command: |CD,"DIR", is given as: A$="DIR":|CD,@A$)
Also,
here (https://www.dropbox.com/sh/hzp3a4b7fktcn8c/AAAj2U8otKw26j-chnd8uUxla?dl=0) you can find a public list of good games that are tested,and
with your help (https://www.cpcwiki.eu/forum/games/how-about-making-a-'worth-to-play'-collection-of-amstrad-games/) i intend to update it constantly!
And now, for the best part, i can offer:
- Stand alone Board+usb host module (if you have an MX4 or similar board) for 23 euros
- Board+usb host module+edge connector cable for 26 euros
- Board+usb host module+centronics connector cable for 28 euros
All prices include registered/tracked postage!
Anyone interested, please contact at: ikonsgr745@hotmail.com
Quick Start Guide:You can now use file manager (https://www.dropbox.com/s/aaeqqvvuuln3pcc/File%20manager.zip?dl=0) for easy browsing and loading games/programs from usb device, without needing to give any RSX command manually!
|HELP: Get a list of all available RSX commands with short descriptions
AMSTRAD CPC 664/6128:For direct file access:
-
|USB to enable usb host module (with firmware _2d and newer, this required
only once,after initial power up)
-
|CAT to get a catalogue of root directory
-
|CD,"dir" to change directory to "dir"
-
|CAT to get catalaogue of "dir"
Then you just give RUN"NAME" of the BAS/BIN file, exactly like you do when using a floppy disk!
For Amsdos dsk image access:
-
|USB to enable usb host module
-
|CAT to get a catalogue
-
|MG,"name" to select the image file you want to use
-
|FDC, to enable Floppy Disk Controller emulation
From now on, any CAT,LOAD,RUN,SAVE command will access dsk image!
And by giving again "|FDC" command, FDC emulation will be disabled and CAT,LOAD,RUN,SAVE commands will access again the usb flash drive!
For Parados dsk image access:
Follow the above first 3 steps,but then give:
-
|DOS,2,for Selecting PARADOS Emulation
-
|464 ,Amstrad will reset, and then you can access the PARADOS dsk image using CAT,LOAD,RUN,SAVE commands.
Note that RSX commands can't be used in this mode of operation, until you RESET Amstrad again.
AMSTRAD CPC 464:For direct file access:
-
ONLY ONCE, after first power up you should give:
|464 and then press RESET button on the board No need to do it with boards sent after Feb 2021,(firmware 2c and newer,)
-
|USB to enable usb host module
-
|CAT to get a catalogue of root directory
-
a$="dirname"-
|CD,@a$ to change directory to "dirname"
-
|CAT to get catalaogue of subdir
Then you just give RUN"NAME" of the BAS/BIN file, exactly like you do when using a floppy disk!
For Amsdos dsk image access:
-
ONLY ONCE, after first power up you should give:
|464 and then press RESET button on the board No need to do it with boards sent after Feb 2021,(firmware 2c and newer,)
-
|USB to enable usb host module
-
|CAT to get a catalogue
-
a$="imagename"-
|MG,@a$ to select the above disk image file
-
|DOS,1,for Selecting AMSDOS Emulation
-
|464, Amstrad will Reset, to enable Floppy Disk Controller & DOS emulation,
From now on, any CAT,LOAD,RUN,SAVE command will access dsk image!
For Parados dsk image access:
Follow the above first 4-5 steps,but then give:
-
|DOS,2,for Selecting PARADOS Emulation
-
|464 ,Amstrad will reset, and then you can access the PARADOS dsk image using CAT,LOAD,RUN,SAVE commands.
Note that RSX commands can't be used in this mode of operation, until you RESET Amstrad again.
Update Firmware:Latest firmware release (rev6d):
27/3/2022 18F47Q10_6d: https://www.dropbox.com/s/kurhjh7loyktytu/18f47q10_6d.zip?dl=0 (for all boards, older boards will not have dsk swap button functionallity)
List of updates since initial version (1/12/2020):
-
Update DSK image transfer function (RSX command:|DSK), you can now Copy DSK images to floppy disks from either a PC or usb stick (initial firmware supported transfers only from PC)
- Major code optimization in
file access speeds on direct mode, resulting in
~20%-25% speed increase!
- Further optimization in file loading code, witch offers ~2% extra loading speed increase!
- Some other minor code optimizations which offer a small overall performance boost.
- Dsk image transfer,now supports practically any format (DATA, SYSTEM, IBM, PARADOS etc), with any number of tracks (up to 80) and any sector size from 512byte up to 4096bytes.Also writing speed to disk, is increased with most images (having 9sectors/track & 10sectors/track,either in sequential or interleaved order)
-
No need for performing the CPC 464 Initial procedure after first power up, now Amstrad automatically resets a couple of times after "cold start", and then you can directly give "|USB" command, exactly like for CPC 6128!
-
No need to give |USB command after every Reset,but only after Amstrad's initial power up (for ALL Amstrad models, with firmware _3a and newer).
-
NEW feature added:
Access multiple dsk images "on the fly"! Using the new "dsk swap" button on the new board, you can "round select" up to 4 different dsk images,and
be able to load ALL mutli image games/programs/demos!
- Bug fix: File extension was ommited when saving a file with full 8+3 characters (e.g. "filename.bas" was saved as "filename" without the extension)
-
Get faster catalogue lists from Usb device (~25% faster on mode 1, and ~50% faster on mode 2, firmware _3 and newer)
- Amsdos/Parados Emulation is now saved into PIC's EEPROM, so Board will always "remember" your choice.
- New ability:
choose if you want to Return to Usb device Root directory after Reset, just give
OUT &FBD1,66 to enable or
OUT &FBD1,65 to disable. Again, board will "Remember" your choice. This could be very usefull if you use the BASIC loader listings mentioned above to load Games/programs, as after RESET, you will automatically return to Root directory, without needing to give |CDR command! ;)
- |STAT command now shows Firmware revision and if return2root directory after Reset is enabled.
- Bug fix: When saving a file, Dsk Image name in slot 1, changed to name of saved file.
- Code optimization of Board's Rom assembly code.
- |CD & |CAT arguments, now support lower case letters too.
-
New RSX Command: |SNA, for loading SNA snapshot files.
-
RSX commands: |SET,|COM,|WIFI,|TER,|GALA,|PACMAN,|KGOR are now
executed directly on CPC464, without needing to give "RUN" anymore!
- SNA routine now checks if Amstrad has 64k only, and loads only the 1st 64k ram dump even if snapshot file is for 128k. The reason i did this is because i noticed that the snapshot archive has a lot of game files that are 128k but actually only the 1st 64k iis used, so now you will be able to load most of the SNA files on CPC464 too.
- Minor optimization of board's ROM code this time:replace "cp 0" with "or A" , reduce the size of hex file by dumping initial zeros of arrays & variables used in routines transferred to RAM.
- Fix a small bug in |format routine- now shows correctly formatted track numbers.
- Fix a bug in |2PC routine when use the "invert file selection" function.
-
New RSX command: |DISK,name,(1), for getting an image to a usb device from a floppy disk. Supports DATA/SYSTEM/IBM formats & up to 42 tracks. Optional '1' argument, is for auto creating new image filenames, based on the name you give, by adding a letter at the begining of the name (Aname,Bname, Cname etc), in order to take many backups in a row, by only changing disks and pressing a button.
-
New RSX command: |MAN This resembles |CAT, but instead of getting the list of files/subfolders of a usb device to screen,it outputs the list of files/subfolders into RAM, starting from &2b000 and using '1' as separator,'2' to mark end, e.g.: 1NAME1NAME1NAME...1NAME2
Function is used by filemanger utility, but it would also be useful for anyone want to develop it's own programs.
-
New RSX command: |UCOPY,"name1","folder path",("name2"). Copy a file into usb device, named "name1", from it's current position, into another folder. Optionally you can give "Name2" to copy file with a new name.For example,command: |UCOPY,"GAME.BAS","/DIR1/GAMES","GAME2.BAS" will copy GAME.BAS file to /DIR1/GAMES subfolder with name "GAME2.BAS". If you omit the last argument, then file will be copied with same name. Function can be used with any file, regardless the size. Actual copy speed is ~5-10kb/sec (depending on the speed of usb flash drive you are using),so large files like DSK images, will need some time to be copied.
-
Better Respond & Error handling, to minimize crashes,hang-ups and erroneous messages. For example,until now, giving |CAT or |DEL without serial connection or usb device enabled, Amstrad hangs up and needed reset.Now, it will try to get respond for a couple of seconds,and then gives you an error message.Also, using |COPY or |DEL commands repeatedly, sometimes caused problems with |CAT,after.All these weird responds, should be now fixed.
- Bug Fix: Swapping dsk images didn't function in some stituations.
- Bug fix: Loading eeprom (|WROM) from usb device file,didn't work right.
- Overall optimization of Board's main ROM code.
- Update |HELP to include the new RSX commands.
-
GREAT direct file loading speed increase of ~+25% now reaching up to ~30kb/sec!Affects direct file and snapshot loading speeds.
-
|UCOPY: Bug fixes and much better error handling.
-
|DISK: Bug fixed: image files created didn't work with emulators.
- Minor overall code optimization (overall ~0.5%-1% speed increase... ::) )
-
Changed file loading code in order to follow Amstrad's file name search order: first tries name as it is, then tries with .BAS extension, final with .BIN extension (previous version tried only with .BIN extension)
-
Major speed improvement in access of ASCII files, effectively doubles reading speeds and ~50% faster writes.
- Bug fix: Unable to Load/Save file right after deleting files from usb flash drive (gave a "file not found" msg, and needed to load/save file again)
- Firmware revision is now shown in boot message
- |CAT,CAT commands, now show lists in 2 columns for MODE 1 and 4 columns for Mode 2.
- |FORMAT now places sectors in interleaved order (instead of sequential).This will not affect the format time of a disk, BUT,it will offer MUCH faster reading (~100%) and writing (~50%) speeds!
- |FDC now checks for valid image name and gives an error message if there isn't any. This will help to avoid hang ups, if you try to access non-existant image name or if image slot is empty (forgot to give |MG,"name" before activating FDC emulation).
-
New RSX command: |SIZE,"filename shows size of filename in bytes.
Quick PIC program Guide:- You will need a rather cheap
PIC KIT 3 programmer (https://www.ebay.ie/sch/i.html?_from=R40&_trksid=p2334524.m570.l1313&_nkw=pickit+3+programmer&_sacat=0&LH_TitleDesc=0&_osacat=0&_odkw=pic+kit+32).
- Plug the icsp connector from pickit3 to ICSP connector on the board (on some boards might need to solder the ICSP pins) or remove PIC chip from on-board socket, and place it on
cheap zif socket (https://www.ebay.ie/itm/PIC-ICD2-PICKit-2-PICKIT-3-Programming-Adapter-Universal-Programmer-Seat-board/191851404539?hash=item2cab3c1cfb:g:rncAAOSwd3dXFaZ-).
- Use the
MPLAB IPE (https://www.microchip.com/en-us/development-tools-tools-and-software/embedded-software-center/mplab-integrated-programming-environment#), (which is part of MPLAB IDE and you can download from
here (https://www.microchip.com/mplabx-ide-windows-installer)), to re-program PIC (18F47Q10).
After re-programming PIC MCU, you should assign a rom number to the board, by giving: out &FBD2,5 on basic prompt, and then reset.
Finally,
Here (https://www.dropbox.com/s/pymv4sbxch3psin/Updating%20the%20Firmware%20of%20USIfAC%20II%20via%20ICSP%20v1.pdf?dl=0) you will find a very detailed guide for updating firmware made by good CPCWiki member
Richard_Lloyd (thanks Richard!)
Guide for older boards, to manually connect a usb host module on the board The usb host module is connected easily through the 4 dupont wires (which i will also send you) as follows:
[attach=2,msg194893]
Board with module attached should look like this:
[attach=1,msg194893]
I am interested in a unit, please :)
So you can actually run games normally from their files (not dsk images) from the mass storage? At this price it's really good!!! How about compatibility?
Quote from: Gryzor on 08:49, 01 December 20
So you can actually run games normally from their files (not dsk images) from the mass storage? At this price it's really good!!! How about compatibility?
Yeap! Exactly that! Practically the usb stick is converted to a huge HDD for your amstrad! And the GREAT benefit of "getting rid" of the dsk container is... SPEED! Loading is so fast that is actually compared to a rom board, most games load in 2-3 seconds! :)
Check the small presentation (https://www.youtube.com/watch?v=AmeqV5Z8Ziw&t) i've made, and see for yourself!
Compatibility is very good too, most multi-file games load just fine, only "drawback" is that you can't load games that use track loaders or non standard amsdos routines. But for these, i developed a floppy controller emulation in order to access dsk images too! So in practice
USIfAC II is like having an HDD flash drive disk along with a gotek drive together! ;-)
Holy cow this sounds beautiful! I want one, please :)
Yeah I realise that some games will run into problems loading but I guess there are always cracked releases one could use. But if there's a solution to also access dsk images... then wow.
I did watch (most of) the presentation before rushing here to post, I didn't see anything about this last part, I now saw it's around the 2:30 mark!
Quote from: Gryzor on 08:49, 01 December 20At this price it's really good!!!
The price of the CPC passion by not selling for the features.
Quote from: Gryzor on 09:16, 01 December 20
I did watch (most of) the presentation before rushing here to post, I didn't see anything about this last part, I now saw it's around the 2:30 mark!
Also at the begining of the video, the 1st load of star sabre is done through a dsk image, where loading is like from a normal drive ~4-5kb/second, but after that, i'm using the direct file method to load the same game and speed is "boosted" to ~18-19kb/sec!
The last loading in video, is done through a very large and bulky 800kb parados image file, and that's why speed is rather slow, but if you use normal amsdos dsk images, actual speed is usually a bit faster than a real disk drive.
Mind also that games using large images but with amsdos boot sectors (like orion prime for example), are loading VERY fast, even from the dsk image! ;-)
Quote from: TotO on 09:38, 01 December 20
The price of the CPC passion by not selling for the features.
Well,if i had to consider the 100's and 100's of hours in the last many months, that took me to develop these features, then i should sell it for 100euros! :)
But again, the main purpose is to offer fetaures to the community as practical, as easy and... as CHEAP as it can be! ;)
Quote from: ikonsgr on 09:49, 01 December 20
Well,if i had to consider the 100's and 100's of hours in the last many months, that took me to develop these features, then i should sell it for 100euros! :)
Exactly. And some games on CPC have to be sold for 500/1000€ instead of being free! ;D
Your new expansion is a really promising alternative to a bunch of other hardware. 8)
Hello; it seems to be a great affordable interface that combines both HXC-like features and M4-like features !I have looked at the documentation, and available functionalities are fascinating.However, I'm not a gamer and my CPC use case probably differ of what most users expects. There are some points that forbid me to buy it at the moment:
- have you planned to add a snapshot loading ability (I mainly test my developments by creating a snapshot sent to the CPC over wifi with the M4); without that I would have no use of this card- have you planned to write an os agnostic PC tool (I mainly develop from Linux) or a kind of HTTP API as the M4; without that I could not automatize PC project construction and CPC test by typing a single line of command
For the FDC emulation stuff, does it also work when the dsk in on the PC and accessible over the WIFI connection ?
SNA loading would be interesting indeed, especially with the latest SNA batches!
Quote from: krusty_benediction on 10:23, 01 December 20
- have you planned to add a snapshot loading ability (I mainly test my developments by creating a snapshot sent to the CPC over wifi with the M4);
I'm not sure if understand that correctly, you mean the ability to directly load a file from pc and place it anywhere in Amstrad's ram? This can be already done in a way, as you can directly load a binary file from pc and if you want to load a headerless file, you can do it as ascii (which are also supported) using either "openout" and "read #9" commands from basic or CAS_IN_OPEN and CAS_IN_CHAR from assemly. Of course this would be rather slow, but i think it would be rather easy to add another RSX command in order to load any file from PC and place it anywhere in RAM very fast and without restrictions! ;)
Quote from: krusty_benediction on 10:23, 01 December 20
have you planned to write an os agnostic PC tool (I mainly develop from Linux) or a kind of HTTP API as the M4; without that I could not automatize PC project construction and CPC test by typing a single line of command
For the development of windows utility program, i mainly used DELPHI (or RAD STUDIO XE3 to be more exact). All functions are embedded into main's program source code, but if you want to develop any software for USIfAC everything is going down to simple input/output commands using only 2 ports! Btw, here are a couple of "3rd party" software that utilized the previous Usifac interface (and most probable will work on the new one too, as they are 100% compatible on the serial port section)
A midi interface (https://www.youtube.com/watch?v=960FIh6B_3g&feature=youtu.be)
Real time player using a Arkos sound tracker (https://www.youtube.com/watch?v=wZ8rREBnknM&feature=emb_rel_pause)
And as far as i remember both of the guys told me that it was rather easy to make them! :)
Quote from: krusty_benediction on 10:23, 01 December 20
For the FDC emulation stuff, does it also work when the dsk in on the PC and accessible over the WIFI connection ?
Yes, you can use dsk images either in a usb flash drive mounted on the CH376 host module, or access them directly from a PC using Wifi module or Direct serial/bluetooth module connection.
Quote from: ikonsgr on 12:12, 01 December 20I'm not sure if understand that correctly, you mean the ability to directly load a file from pc and place it anywhere in Amstrad's ram? This can be already done in a way, as you can directly load a binary file from pc and if you want to load a headerless file, you can do it as ascii (which are also supported) using either "openout" and "read #9" commands from basic or CAS_IN_OPEN and CAS_IN_CHAR from assemly. Of course this would be rather slow, but i think it would be rather easy to add another RSX command in order to load any file from PC and place it anywhere in RAM very fast and without restrictions!
No, I was literally talking of snapshots ;) https://www.cpcwiki.eu/index.php/Snapshot. (https://www.cpcwiki.eu/index.php/Snapshot)
For example, M4 allows to do that xfer -y cpcip file.sna to load the snapsjot on cpc
Quote from: krusty_benediction on 12:14, 01 December 20
No, I was literally talking of snapshots ;) https://www.cpcwiki.eu/index.php/Snapshot. (https://www.cpcwiki.eu/index.php/Snapshot)
For example, M4 allows to do that xfer -y cpcip file.sna to load the snapsjot on cpc
Well, to tell you the truth i never got involved with snapshots... :) What exactly you do with these files?
My main goal with USIfAC II, was not to take the "traditional" approach of trying to "adapt" and utilize the existed file containers and tools developed for Amstrad emulators, (like dsk image files or sna files)but instead,
provide a simple,fast and straight forward file access to large storage devices (either an HDD of a connected PC or a usb flash drive).
By doing this,
i was freed from floppy controller constraints (that imposed by the strictly use of dsk image containers) and manage to acheive
MUCH faster read/write access to files! ;)
Of course, in the end, i've decided to add dsk image access functionality too, in order to be able to load some games/programs that used "low level" sector loaders, or for any game/program that the direct file loading didn't work for some reason.
In 2 words, USIfAC II is aimed mainly for the simple Amstrad user who want an easy fast and rather cheap way to load games/programs and also offer some extra functions for floppy disks (like quick format or copy files to floppy disks) for any "hard core" Amstrad user, that prefers the... "real thing" :)
And i think, it's the easiest,fastest and probably the cheapest way to have a lot of fun with a CPC 464! ;)
Indeed it is. For a simple user like myself, it sounds near perfect*. But the addition of snapshot support would probably eliminate much of the incompatibility cases, that's where the use would lie, for me!
Now, how can I buy one? :)
*if someone can make a case for it... ;)
Quote from: ikonsgr on 13:58, 01 December 20Well, to tell you the truth i never got involved with snapshots... :) What exactly you do with these files?
We specify the content of each memory byte as well as the content of crtc, z80 registers and some information for the gate array. So it is simply the state of a program when loaded in memory.
It is really useful when you have not yet created the loader/linker of the program.
For my case, I code each demo effect screen individually and test them in real time on CPC with snapshot send by the PC on the M4 that fill it in the CPC. Was doing the same when coding https://www.pouet.net/prod.php?which=87382 (https://www.pouet.net/prod.php?which=87382)
For other guyz, I guess it is interesting to start a game at a specific point during the play
Quote from: krusty_benediction on 17:02, 01 December 20
We specify the content of each memory byte as well as the content of crtc, z80 registers and some information for the gate array. So it is simply the state of a program when loaded in memory.
It is really useful when you have not yet created the loader/linker of the program.
For my case, I code each demo effect screen individually and test them in real time on CPC with snapshot send by the PC on the M4 that fill it in the CPC. Was doing the same when coding https://www.pouet.net/prod.php?which=87382 (https://www.pouet.net/prod.php?which=87382)
For other guyz, I guess it is interesting to start a game at a specific point during the play
I see...but how you create such snapshots? Can you take a snapshot with M4 on a real amstrad? Because otherwise, i don't think it's very practical, at least from a "game point of view".. I mean, if you can take a snapshot only from an emulator, you would need to start playing a game on emulator, reach some point in game, then take a snapshot, and then continue to a real amstrad cpc with a M4 board ... Not very practical don't you think? :)
On my cases, I build them from scratch on my PC when assembling my asm code.
For the others, I do not know ;) But I'm pretty sure such interface (or M4) associated to an Hacker-like rom could build such snapshots. No idea if someone has implemented that already with M4.
Anyway, I'll follow this project and eventually buy one card lateer
Nice device! I sent you a PM for buying one ;)
What an great idea and expansion!!!
Can it actually simulate the Vortex F1-D FDC with different I/O addresses too?
Can we use X-DDOS instead of ParaDOS?
Well, I would like to sign up for 3 devices.
Quote from: GUNHED on 21:30, 01 December 20
Can it actually simulate the Vortex F1-D FDC with different I/O addresses too?
We already discussed (https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/universal-serial-interface-for-amstrad-cpc/msg190714/#msg190714) that, and i believe that Vortex will be directly supported too!
Quote from: GUNHED on 21:30, 01 December 20
Can we use X-DDOS instead of ParaDOS?
Well, if you want to have amsdos and X-DDOS emulation, tell me which one of the
X-DDOS ROM file (https://www.cpcwiki.eu/index.php/X-DDOS) you want, and i'll "custom" replace parados with it, for your boards! ;-)
Count me in !
Hi ikonsgr
PM Sent
Thanks for all your work
Keep Safe
Ray
This is brilliant and a great example of what can be done if the MCU is fast enough - everything that requires extra glue logic chips for address decoding with slower MCUs can just be done in software with all these extra MHz's. Did you program the firmware in ASM or C? Good choice of the MCU.
Quote from: ikonsgr on 21:47, 01 December 20We already discussed (https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/universal-serial-interface-for-amstrad-cpc/msg190714/#msg190714) that, and i believe that Vortex will be directly supported too!Well, if you want to have amsdos and X-DDOS emulation, tell me which one of the X-DDOS ROM file (https://www.cpcwiki.eu/index.php/X-DDOS)you want, and i'll "custom" replace parados with it, for your boards! ;-)
Thanks a lot for your answer. Sorry, I don't know the usifac 2 as well as you. So don't bother if I ask something twice. If Vortex FDC works, this will be great. I would volunteer for testing if you want.
About the X-DDOS ROM... the best one is attached to this post. See below.Can we burn the chip on the card by myself to alter the ROM content? Maybe this would make things more easy for you
Quote from: VintageAdvantage on 17:35, 02 December 20
This is brilliant and a great example of what can be done if the MCU is fast enough - everything that requires extra glue logic chips for address decoding with slower MCUs can just be done in software with all these extra MHz's. Did you program the firmware in ASM or C? Good choice of the MCU.
Well, actually the extra logic needed for the required address bus and signal decoding, wasn't done in software at all (even at that speed, analyzing the required address bits and Cpu signals in software loops, would affect seriously responce and speed).
Instead i use an extra feature of these Microcontrollers called "Configurable Logic Cells" or CLC's.
These are small programmable logic modules where you can assign type of logic (AND OR gates, Flip-Flops etc,and even combination of them), and set for, up to 4 inputs and an output. When module is activated (which can be done "on the fly" in microcontroller program) it will act like a real logic chip, e.g. have INSTANT responce on input signal changes! :)
So,i design separate logic cell modules to accommodate various functions, like when Amstrad is addressed to Serial Port or Floppy disk controller,or when it reads upper rom or when gate array selects rom number (e.g. an out &DF00,x is sent from Gate Array chip). All in all, i needed to design 5 different logic modules, 4 for the above functions, and one "master" module ,that take the outputs of the other modules and gives a single ouput that pauses Amstrad (ready signal forced to '0') and enables Microcontroller program.
By doing that, the only thing that needs to run constantly on the PIC microcontroller, is a small loop for checking the output of master module, which can be done VERY fast, every ~0.15 usec! ;-)
I use cow basic (http://gcbasic.sourceforge.net/Typesetter/index.php/Home) as main tool for PIC program developing, which produce REALLY good and optimized asm code! ;)
And finally, for anyone interested,
you can find the assembly code for the main USIfAC II ROM, which holds the code for the dozens of RSX commands ,in the attached file (this can also be very helpful for anyone wants to use the CH376 USB host module, as the documentation was not very good, it took me A LOT of testing and effort to finally make it work as it should... :) ).
The binary of this code is placed inside a table into PIC's program.
I also used a "trick": When Amstrad reads from USIfAC II Rom and code reaches specific addresses,it jumps to start reading from first byte @&C000,while at the same time, Microcontroller program changes table to other tables (that hold large utlitites or the 3 games included). By doing that
,i've managed to fit ~80kb of data into a 16kb address space of a single upper rom!
Quote from: ikonsgr on 19:20, 02 December 20
These are small programmable logic modules where you can assign type of logic (AND OR gates, Flip-Flops etc,and even combination of them), and set for, up to 4 inputs and an output. When module is activated (which can be done "on the fly" in microcontroller program) it will act like a real logic chip, e.g. have INSTANT responce on input signal changes!
That is interesting. How do you program these? Is that done from the MPLAB Microchip IDE?
And the main firmware is in BASIC? Wow! I should switch over to PICs...
So this is combinational logic only it seems. No Flipflops or Latches in the logic cells possible? It seems you still need to pause the Z80 via pulling READY to not "miss" the databus... correct?
Quote from: GUNHED on 18:36, 02 December 20
Thanks a lot for your answer. Sorry, I don't know the usifac 2 as well as you. So don't bother if I ask something twice.
No bother at all my friend! I didn't remember the details too, but i remembered we had discussed the matter a few months ago, so i've made a quick search and gave you the link directly! ;)
Quote from: GUNHED on 18:36, 02 December 20
About the X-DDOS ROM... the best one is attached to this post. See below.[/font]
Can we burn the chip on the card by myself to alter the ROM content? Maybe this would make things more easy for you
My friend, changing parados to X-DDOS rom, is half a minute work: Just convert the binary to a large pile of numbers with commas (i've already developed such a utility and used it all the time) ,and copy it into PIC's program in place of PARADOS table! ;)
If you have a PICKIT3 i can give you the custom HEX file with X-DDOS and burn it yourself easily, this time i add an ICSP connector to the board, so you can flash PIC directly on board! ;)
Oh, the PIC is too new for my Vspeed Stager (2015). Maybe I can get a software update for it.
Do you have the ParaDOS at position 7 like the Amsdos? In this case I wouldn't need XDDOS. Need to read the USIfAC manual again...
Cant't wait to use it to emulate an real FDC. :) :) :)
Quote from: VintageAdvantage on 19:41, 02 December 20
That is interesting. How do you program these? Is that done from the MPLAB Microchip IDE?
Yes, these need to be configured through MPLAB's MCC (MPLAB Code Configurator),then i export the configuration file for each CLC and place it into Cow basic's source code, once you learn to do it it's rather easy task.
Quote from: VintageAdvantage on 19:41, 02 December 20
And the main firmware is in BASIC? Wow! I should switch over to PICs...
Yes,the source code for PIC microcontroller was made using COW Basic as i already told you. But the compiler produces a very good and optimized assembly code!
It's really a very good tool, which makes programming 8bit PIC's (especially for large complex projects as this one) a much easier and enjoyable task! :)
Quote from: VintageAdvantage on 19:41, 02 December 20
So this is combinational logic only it seems. No Flipflops or Latches in the logic cells possible?
Well, not exactly. This is taken from PIC 18F47Q10 data sheet:
Possible configurations include:
• Combinatorial Logic:
– AND
– NAND
– AND-OR
– AND-OR-INVERT
– OR-XOR
– OR-XNOR
• Latches:
– S-R
– Clocked D with Set and Reset
– Transparent D with Set and Reset
– Clocked J-K with ResetAnd there are 8 CLC's in total, enough to develop quite complex logic, don't you think? :)
Practically it's like having a small CLPD or PAL inside Pic! ;)
Quote from: VintageAdvantage on 19:41, 02 December 20It seems you still need to pause the Z80 via pulling READY to not "miss" the databus... correct?
Well since most of the tasks,when interface is enabled, usually need some microseconds, Amstrad must be paused.But the good thing is that the procedure of unpausing amstrad and unlatching data bus (after finishing the job),is made in "real time" without any added delays (like with previous usifac). And this is where the extra speed becasue of running at 64Mhz, really helped! ;)
Quote from: GUNHED on 19:59, 02 December 20
Oh, the PIC is too new for my Vspeed Stager (2015). Maybe I can get a software update for it.
Do you have the ParaDOS at position 7 like the Amsdos? In this case I wouldn't need XDDOS. Need to read the USIfAC manual again...
Cant't wait to use it to emulate an real FDC. :) :) :)
Well, yes i suppose it does. If you give "|DOS,2" to select Parados for emulation, and then "|464" command, Amstrad will reset (in this state ,you can't use any RSX commands as upper rom 7 is exclusively points to either AMsods or Parados emulation tables) ,and any rom read from Upper ROM 7 will be done from Parados table inside PIC's code!
I could even run the parados utility program by giving |DRIVE, but of course, disk drive doesn't work. In this special mode, you can only access the dsk image you have previously selected.
I named this function |464 because its main purpose is to give a cpc464 the ability to access dsk images. And in order to do that, you need to "replace"-emulate both missing 765FDC and AMsods/parados rom chips. However, on Amstrad cpc664/6128 ,because Amsdos rom already exists, you only need to emulate 765FDC ("|FDC" command), in order to gain access on a dsk image . This offers speed (responce is a bit faster than using a real gotek/disk drive) and you can also use all RSX commands too! What i found out though,is that you can also use this special mode for 464, with a cpc6128 too, in order to have access to parados dsk images (i demonstrate this in the presentation video too)! It's like having a rom switcher that provides both amsdos and parados! ;)
I took a look at the snapshot sna file structure (http://cpctech.cpcwiki.de/docs/snapshot.html), that some noted before, and i think it might be not too difficult to develop a routine for using them with Usifac II too.
But, as i never got involved with snapshots, and before i start, i would like to ask some things first:
- Is the ability to use sna files on real CPC, something useful for the average user or it's more of a tool, addressed to the advanced user/developer/programmer?
- I've noticed in sna archive (https://www.cpcwiki.eu/index.php/Snapshot_Archive) that almost all snapshots are for CPC464. Does this mean, that their main usefulness concerns CPC464? And is this because quite a few games found in dsk images can't be loaded on a CPC464? (i've noticed this while testing usifac ii on CPC 464 too, some games ,for example Cauldron II or ikari warriors, couldn't load on CPC 464 , giving error messages or hang up/crash, while others, i had to "tamper" the basic loader listing to remove any "CPC6128" only commands they have)
-On the technical side, i suppose there must be a specific way to properly restore all the registers, counters and interrupts apart from memory dump. Can someone give me a rough "walkthrough" of how exactly i will do that? (i have a rough idea of how to restore registers from various chips using proper OUT commands (http://www.cpctech.org.uk/docs/iopord.html) but what about restoring interrupts or special counters of CRTC? And what about the order of restoring?)
- Finally, is there a way to create a snapshot on a real amstrad apart from using multiface II (although i'm not quite sure that snapshot files taken with multiface ii are the same as sna files...)? And how exactly could someone do that? Maybe activating NMI (non maskable interrupt) on Z80, and placing @&0066 RAM address, an RST3 call to a routine?
As a simple user I'd find snapshot support useful for those programs that refuse to load, for whatever reasons, from the device...
Quote from: Gryzor on 21:00, 04 December 20
As a simple user I'd find snapshot support useful for those programs that refuse to load, for whatever reasons, from the device...
From the 100's of games/programs i've tested so far, the only ones i couldn't run was:
- Batman for ever demo single disk (gave me a "wrong disk configuration", but it works from normal 180kb image file)
- R-Type 128, at some point stops loading, (this was impossible for me to fix, what ever i tried... :( )
- Dragon Ninja, original, crashed after loading (but the cracked version works fine ;D )
This means that,statistically, you can probably load, either directly from files or dsk images, more than 99% of existed games/programs.
So, if the only practical use of snapshot is a way of loading games that refuse to load, i don't think it would be very useful for USIfAC II... ::)
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) , with http://cngsoft.no-ip.org/cpcec.htm , takes custom snapshots of used memory: automatically detects if the first 64k is enough.
Quote from: XeNoMoRPH on 08:39, 05 December 20
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) , with http://cngsoft.no-ip.org/cpcec.htm , takes custom snapshots of used memory: automatically detects if the first 64k is enough.
Ok,but i was talking of taking snapshots from a real CPC not from an emulator.
If compatibility is so high then I guess it's a small luxury😊
Of course hunting for a version that will work is a waste of time, but now we're talking first world problems😁
First of all, congratulations for your excellent work regarding this board! It looks like the most straightforward way to have your entire collection at one USB stick and run everything from there!
As a happy owner of the excellent Duke's M4 board, I have some questions regarding USifAC II.
1. Since M4 has already the ability to load games (either from files or from .DSK), what are the benefits of running games/programs through USifAC? I guess the loading time will be faster, but will I be able to run programs that are not cracked? For example, I have not been able to run "The Pawn" through M4 in whatever version I tried.
2. Shall I need a Mother X4 board (or similar) in order to have both M4 and USifAC connected at the same time? My understanding is that they both use CPC's expansion port (and for those who have Mother X4: can I connect an M4 with an Edge Adapter directly on Mother X4 or will I need another cable/adapter?)
Keep up the good work!
Takis
Quote from: Takis Kalatzis on 15:18, 06 December 20
1. Since M4 has already the ability to load games (either from files or from .DSK), what are the benefits of running games/programs through USifAC? I guess the loading time will be faster, but will I be able to run programs that are not cracked? For example, I have not been able to run "The Pawn" through M4 in whatever version I tried.
Well,i would say that, the most obvious difference is COST!
USIfAC II is a LOT cheaper than a M4 board (~less than half the price)! ;D
Also,i think that M4 doesn't offer the "direct mode" to load files directly from a usb flash drive instead from image containers, at least not at such great speeds of ~20kb/sec. (false assumption... :) )
Of course,
M4 is a much more powerful and modern/proffesional board (it uses very powerful ARM 32bit MCU and smd chips), and also, it's been developed for years ,offering many extra tools and functionality.
USIfAC II it's more of a hobbyist "low budget" board. But if you see it from the "average Amstrad user" perspective, where the main thing they want, is an easy, fast and cheap way to load games, USIfAC II might be the best "Value for money" choice for that! ;)
Especially for CPC 464 users, i think it's BY FAR the most affordable way to load easy and fast games compared to everything else on the market.Quote from: Takis Kalatzis on 15:18, 06 December 20
2. Shall I need a Mother X4 board (or similar) in order to have both M4 and USifAC connected at the same time? My understanding is that they both use CPC's expansion port (and for those who have Mother X4: can I connect an M4 with an Edge Adapter directly on Mother X4 or will I need another cable/adapter?)
Keep up the good work!
Takis
Well,i suppose you could do that, but if you already have a M4 board, i don't find any reason for having a USIfAC II,unless you are an Amstrad collector and you want to have all existed hardware ...
Quote from: Takis Kalatzis on 15:18, 06 December 20
I have not been able to run "The Pawn" through M4 in whatever version I tried.
You mean this (https://www.mobygames.com/game/cpc/pawn) game?
I found it in my collection, this is a 2 dsk image game, so you need a way to "change disks" in order to load it.
I don't know if you can change "on the fly" mounted images with M4, but currently you can't do that with USIfAC II. BUT, i happen to be in a process of developing such an ability for a future version (where you will be able to mount up to 3 dsk images, and "round" select them "on the fly" by pressing a small button like the one i have for RESET :)) and i gave it a try. Game loaded just fine ;D (i've also test it with XYPHOBES (a 3 dsk image game!), Savage, OUT RUN europa and turbo out run, all 2 dsk image games, and also they seem to load fine!). Of course, only a very small portion of games is more than a dsk image in size, and most of them ,(especially recent games)you can find them in "big" single dsk images too (like the very good adventure "orion prime", which i've played it using a single 800kb image, instead of having 4 "normal" images), which USIfAC II also supports.
All in all, compatibility seems to be very good, out of 100's of games/demos i've tried only a few didn't seem to load. But even for these games you can usually find them in cracked versions which most probable will work! :)
Quote from: ikonsgr on 20:51, 06 December 20
Also,i think that M4 doesn't offer the "direct mode" to load files directly from a usb flash drive instead from image containers, at least not at such great speeds of ~20kb/sec.
Quote
Well,i suppose you could do that, but if you already have a M4 board, i don't find any reason for having a USIfAC II, unless,perhaps, you want to load games even faster!
Well you are wrong.
Just for the kicks I quickly wrote a simple basic test to measure the speed of accessing the microSD card via firmware on M4 board.
The speed after a 4 minute run is around 100 KB/s.
Unless my program is completely wrong, you could try it on your device aswell:
10 MEMORY &1FFF
20 MODE 2
30 u = TIME
40 t = 0
50 a = TIME
60 FOR i=1 TO 10
70 LOAD"32KB_BLK.BIN",&2000
80 t=t+32
90 NEXT
100 b = TIME
110 PRINT 320/((b-a)/300);" KB/s - total : ",t;" KB/", (TIME-u)/300;" Sec"
120 GOTO 50
First save a 32KB block, ie. like this save"32KB_BLK.BIN",b,&2000,&8000
And you may want to start a timer next to it in case you have any interrupt disabling (I used my phone and ran the test for 4 minutes).
Also it could be much faster written in assembler and doing direct access. The microSD on M4 board is connected via SDIO 4 bit, its very fast if the card allows it ;)
Other than that. Congrats on your device, it looks promising - good job :)
Quote from: Duke on 22:34, 06 December 20
Well you are wrong.
Just for the kicks I quickly wrote a simple basic test to measure the speed of accessing the microSD card via firmware on M4 board.
The speed after a 4 minute run is around 100 KB/s.
Unless my program is completely wrong, you could try it on your device aswell:
10 MEMORY &1FFF
20 MODE 2
30 u = TIME
40 t = 0
50 a = TIME
60 FOR i=1 TO 10
70 LOAD"32KB_BLK.BIN",&2000
80 t=t+32
90 NEXT
100 b = TIME
110 PRINT 320/((b-a)/300);" KB/s - total : ",t;" KB/", (TIME-u)/300;" Sec"
120 GOTO 50
First save a 32KB block, ie. like this save"32KB_BLK.BIN",b,&2000,&8000
And you may want to start a timer next to it in case you have any interrupt disabling (I used my phone and ran the test for 4 minutes).
Also it could be much faster written in assembler and doing direct access. The microSD on M4 board is connected via SDIO 4 bit, its very fast if the card allows it ;)
Other than that. Congrats on your device, it looks promising - good job :)
100kb/sec? Wow! :o Although it seems a bit... "too much",i mean, even copying a memory block in Amstrad's RAM can't be faster than ~60-65kb/sec.... Unless you are using MCU's internal RAM and not Amstrad's ram.... ::)
Anyway, i would be surprised if your 32bit ARM "monster" with ~200MIPS "horse power", couldn't do less than that and be..."defeated" by my "puny" 8bit PIC, giving "only" 16MIPS.... :)
Bur since you got bother answering my ...."challenge" :), perhaps you could clear up some things about M4:
- Apart from the above speed test, can M4 also run games/programs directly from files at such speeds? Because the ~20kb/sec USIfAC II can achieve, is not just a speed test, but the ACTUAL average loading speed of REAL games!
- Does M4 is able to also take snapshots or only load ones? And could you give some details on how exactly you do that? (i never got involved with snapshots, so i would appreciate any help on that)
- Can M4 mount more than one dsk images and somehow select them "on the fly", for supporting "in game" disk (image) swapping? (i'm experimenting on that too with USIfAC II)
- Does M4 support dsk image access of large non AMSDOS formats, like the various dual head and/or 80tracks PARADOS formats of up to 800kb?
Thanks again for looking at my "humble" project "master" Duke! ;)
Quote from: ikonsgr on 01:11, 07 December 20
100kb/sec? Wow! :o Although it seems a bit... "too much",i mean, even copying a memory block in Amstrad's RAM can't be faster than ~60-65kb/sec.... Unless you are using MCU's internal RAM and not Amstrad's ram.... ::)
Actually as far as I remember we can move around 4KB of data per frame using ldi/ldir/stack on CPC, so that would amount to roughly 200 KB/s.
Quote
- Apart from the above speed test, can M4 also run games/programs directly from files at such speeds? Because the ~20kb/sec USIfAC II can achieve, is not just a speed test, but the ACTUAL average loading speed of REAL games!
Yes, of course, there really isnt any difference.
Quote
- Does M4 is able to also take snapshots or only load ones? And could you give some details on how exactly you do that? (i never got involved with snapshots, so i would appreciate any help on that)
Yes, it can take snapshots via the HACK menu... The HACK menu source code is available here, if it can be of any help:
https://github.com/M4Duke/m4hackmenu (https://github.com/M4Duke/m4hackmenu)
Quote
- Can M4 mount more than one dsk images and somehow select them "on the fly", for supporting "in game" disk (image) swapping? (i'm experimenting on that too with USIfAC II)
You can change .dsk´s using the web-interface. An option to do it via hack menu was planned...
Quote
- Does M4 support dsk image access of large non AMSDOS formats, like the various dual head and/or 80tracks PARADOS formats of up to 800kb?
Yes it does. Ie. ROMDOS (D1/D2/D10/D20/D40) and PARADOS 80.
And lets not derail your thread even further, it should not be about M4 but your project, I only had to correct the incorrect assumptions :)
Quote from: Duke on 02:40, 07 December 20
Actually as far as I remember we can move around 4KB of data per frame using ldi/ldir/stack on CPC, so that would amount to roughly 200 KB/s.
Do you have any video of loading a game directly from files? I would LOVE to see running a game in... half a second! :)
Quote from: Duke on 02:40, 07 December 20
Yes, it can take snapshots via the HACK menu... The HACK menu source code is available here, if it can be of any help:
https://github.com/M4Duke/m4hackmenu (https://github.com/M4Duke/m4hackmenu)
That's really could be great help! Thanks a lot for letting me know! One last question: to enable my "save snapshot" routine installed in interface's rom, i should place at boot (probable in the initialization routine of usifac's rom) an RST3 command @&66 ram address, so when NMI is activated, execution will jump to &66 ,and from there, call my routine. Is this the correct approach?
Quote from: ikonsgr on 02:55, 07 December 20
Do you have any video of loading a game directly from files? I would LOVE to see running a game in... half a second! :)
Sure, why not..
First example it loads a 38KB binary (zorro).
2nd example, I run Commando, save a 64 KB snapshot and reload it.
Both take less than 1 second.
Here you go:
https://www.youtube.com/watch?v=8A7eV4mu6SY (https://www.youtube.com/watch?v=8A7eV4mu6SY)
Quote
That's really could be great help! Thanks a lot for letting me know! One last question: to enable my "save snapshot" routine installed in interface's rom, i should place at boot (probable in the initialization routine of usifac's rom) an RST3 command @&66 ram address, so when NMI is activated, execution will jump to &66 ,and from there, call my routine. Is this the correct approach?
Yes you will need to have your NMI jump at &66, best is to map the area with your own lower-rom replacement.
Prior to that you will need to store the hardware regs so they can be retrieved once you enter your nmi rom/code.
@Duke (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1624)
Unable to Play Video
"Private". ??
Thanks
Keep Safe
Ray
Quote from: Audronic on 08:37, 07 December 20
Unable to Play Video
Oups, fixed now I hope. Thanks.
@Duke (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1624)
Ok Thanks
Keep Safe
Ray
Quote from: ikonsgr on 20:51, 06 December 20
Well,i suppose you could do that, but if you already have a M4 board, i don't find any reason for having a USIfAC II,unless you are an Amstrad collector and you want to have all existed hardware ...
Well, ...
- Real fast serial interface
- FDC emulation (of Vortex FDC too!!!)
- And if you want, to learn how to work with an external CPU
- Also much more I still don't know
Even if most CPC users have an FDC, the possibility of FDC hardware emulation is IMHO super awesome. Imagine for example how easy it will be to copy an 0,7 MB format DSK to a real 3.5" disc and vice versa.
Also backup copies of real 0.7 MB format discs to DSK will be super easy now.
Quote from: Duke on 02:40, 07 December 20
Yes it does. Ie. ROMDOS (D1/D2/D10/D20/D40) and PARADOS 80.
Please - everybody - consider to also support the 0,7 MB Vortex format. In Gemany (at least) it still is/was the 80 track standard format for floppy discs. The big companies like Dobbertin, Vortex ... all did support it. :) :) :)
Quote from: GUNHED on 20:00, 07 December 20
Well, ...
- Real fast serial interface
- FDC emulation (of Vortex FDC too!!!)
- And if you want, to learn how to work with an external CPU
- Also much more I still don't know
Well, regarding speeds, M4 board is undoubtly the champion! :)
But, as USIfAC II uses an 8bit MCU and DIP socket, i would say it seems a lot more "close" and familiar to an amstrad cpc.
USIfAC II board looks like a "physical" extension to Amstrd cpc motherboard, while a M4 board looks more like a... BORG implant on Amstrad, from 24th century! :P
Quote from: GUNHED on 20:00, 07 December 20
Even if most CPC users have an FDC, the possibility of FDC hardware emulation is IMHO super awesome. Imagine for example how easy it will be to copy an 0,7 MB format DSK to a real 3.5" disc and vice versa.
Also backup copies of real 0.7 MB format discs to DSK will be super easy now.
If anyone want to try to develop such "low level" disk routines based on the fdc emulation, it would be awesome! For the moment, i only have the utility developed for the previous USIfAC e.g. transfer only amsdos dsk images to floppy disks from a pc.
Quote from: GUNHED on 20:19, 07 December 20
Please - everybody - consider to also support the 0,7 MB Vortex format. In Gemany (at least) it still is/was the 80 track standard format for floppy discs. The big companies like Dobbertin, Vortex ... all did support it. :) :) :)
If you want, give me me a couple of such images, and i'll try them on USIfAC II! ;)
Quote from: ikonsgr on 20:23, 07 December 20
If you want, give me me a couple of such images, and i'll try them on USIfAC II! ;)
Great, thanks. At the moment I'm far off home, but you find plenty of them at www.futureos.de (http://www.futureos.de)
Because FutureOS does support it. All 0.7 MB DSKs there are in Vortex format
From memory:
- 80 tracks
- two sides
- First two tracks are system tracks
- The directory is 4 KB and has space for 128 DIR entries
- Block size is 4 KB
- Space free is 704 KB
- 9 sectors per track (on each side)
- Sector numbers are 1 to 9
Well,i've tried this: create a vortex 0.7mb image using cpcdiskxp, copy it to a usb stick and then mount it on usifac ii. I select vortex image,then PARADOS emulation and reset. At this "dual emulation mode" (where both FDC and DOS ROM are emulated at the same time), i was able to cat vortex image and i also tried to save a sceen dump and then load it from it, everything was done fine! I suppose this means you can access 0.7mb vortex images through usifac ii and parados emulation.
Only draw back, is a bit slow because of the dual emulation mode, screen dump took ~7 sec to load from vortex image....
BUT, if you have a real VORTEX ROM installed on your Amstrad, you should be able to use vortex images directly (giving the usual: "|FDC" command) at "full speed"! ;)
Quote from: Duke on 07:55, 07 December 20
Sure, why not..
First example it loads a 38KB binary (zorro).
2nd example, I run Commando, save a 64 KB snapshot and reload it.
Both take less than 1 second.
Here you go:
https://www.youtube.com/watch?v=8A7eV4mu6SY (https://www.youtube.com/watch?v=8A7eV4mu6SY)
Well you are obviously using an emulator ! ;D
I got people to ask me to put a pause in the loading screen because the games load so fast from M4 that they can't see it :laugh:
I already have an M4 with a 3D printed enclosure (not perfect, but close!), but this project looks fantastic!
I know it is hard for one single person to have all the skills, enough that people like Duke, ikonsgr, ToTo, etc gift us with these devices for our CPCs; but I was wondering if it would be possible to get an enclosure designed for this. I guess it is a more general thought, independently of the project (and only if it makes sense, really).
Having small children at home, I'm not a fan of having naked PCBs sticking out of my 8-bit machines.
Ok, but could you please stop referring and comment about M4 board on this thread?
I'm afraid it might transform it, to a... M4-BORG drone, like it did with Amstrad CPC!
We are the M4-Board....
Lower your disks and surrender your Amstrad.....
We will add it's technological distinctiveness to our own.....
Your Amstrad will adapt to service M4-Board...
Resistance is futile
:laugh: :laugh: :laugh: :laugh: :laugh:
btw,that could be a great advertise for M4 board, don't you think? :P
My M4 Board is looking for someone named "Sarah Connor", never heard of her...
Does the M4 work with an Atari Portfolio?
Ok, ok, enough off topic really, let's get back on track :)
Great to hear that Vortex format works. Yes, ParaDOS can work with it, but it needs to be switched on in the 'Format Menu', or use VaraDOS (that's ParaDOS with switched ON Vortex format).
All the 664, 6128 and 464+DDI1 already have a floppy, but the FDC emulation can be used by them, so they can have some drives more. Great thing! :) :) :)
Can this work alongside an Albireo, and given the Albireo+Albidos has some SD/USB support at the filesystem level is this card useful for providing .dsk image support/fdc emulation?
I also have a DDI-4, I feel i'll end up with too many stacked up AMSDOS replacements.
I just want to let you know that i have open a new topic (https://www.cpcwiki.eu/forum/games/how-about-making-a-'worth-to-play'-collection-of-amstrad-games/msg195289/#msg195289), in order to update the public list (https://www.dropbox.com/sh/hzp3a4b7fktcn8c/AAAj2U8otKw26j-chnd8uUxla?dl=0) of tested games with more "Worth to play" games (i thought it would be a great idea,instead of having the usual BULKY and hard to manage HUGE lists of 1000's of games, to create a rather smaller compilation of "worth to play" games), so feel free to go there and suggest any game you would like to add!
Great stuff!
Perhaps this would be more suitable for the wiki proper?
Hi Ikonsgr, I received the board, thanks!
Is it possible to run games or apps directly from .dsk files stored on the usb key?, I looked at the pdf manual but I don't see if it's possible.
(https://i.ibb.co/qrkhvhN/IMG-20201214-120500.jpg) (https://ibb.co/qrkhvhN)
Quote from: slugman on 12:10, 14 December 20
Hi Ikonsgr, I received the board, thanks!
Is it possible to run games or apps directly from .dsk files stored on the usb key?, I looked at the pdf manual but I don't see if it's possible.
(https://i.ibb.co/qrkhvhN/IMG-20201214-120500.jpg) (https://ibb.co/qrkhvhN)
Yes,it is. First you have to select an image by giving: "|MG,"image name" (the "|CD" command you where using in the screenshot, is for changing directory, and that's why you got the error message)
Then, you only have to enable the floppy disc controller, by giving: "|FDC"
*From now on, any cat,load,run,save etc command you give, will access the selected image!
And you can still use rsx commands, so you can still change directory, or catalogue the usb stick and by giving another "|MG" command, select another dsk image directly! ;)
Note also, that if you reset amstrad using the RESET button on the board, you don't need to select again the disk image, as board will "remember" the last image used!
Just give |USB and then |FDC and you can access again the previous selected image.
Finally,by giving: |HELP you can have a short description of all available RSX commands.
* This is needed, because the default operation is the "Direct file" mode,which is enabled with"|EN" command (it's done automatically with |USB command). And with "|STAT" you can see the currently selected mode.Also "|FDC" and "|USB" commands are used for both enable/disable the fdc controller and usb host module, e.g. if your in "FDC mode" and give "|FDC" it will be disabled, giving again "|FDC" will enable it again.
And don't forget that if you have a lot of image files in your usb stick, you can filter the catalogues, by using argument with |CAT command.
For example,if you want to get a list of images starting from "IK" you just give: |CAT,"IK"! ;)
Does the on board software have any sort of help?
Yes,give "|HELP" and you will get a list of all rsx commands with short descriptions and usage! ;)
Please find attached the VaraDOS for CPC and Plus computers.
This is the newest ParaDOS with Vortex formats enabled by default.
Feel free to use it or put it into the Wiki.
Quote from: ikonsgr on 18:10, 14 December 20Yes,give "|HELP" and you will get a list of all rsx commands with short descriptions and usage! ;)
Maybe this can be renamed to "|UHELP", because lot's of ROMs already use the "|HELP" command.
@GUNHED (https://www.cpcwiki.eu/forum/index.php?action=profile;u=2029)
Perhaps the help could be " |Vhelp " to indicate VaraDos
Keep Safe
Merry Christmas
Ray
Quote from: Audronic on 23:08, 14 December 20
@GUNHED (https://www.cpcwiki.eu/forum/index.php?action=profile;u=2029)
Perhaps the help could be " |Vhelp " to indicate VaraDos
Keep Safe
Merry Christmas
Ray
But it's purpose it to indicate USIfAC II
@GUNHED (https://www.cpcwiki.eu/forum/index.php?action=profile;u=2029)
Ok Just a thought.
Keep Safe
Merry Christmas
Ray
Quote from: GUNHED on 22:23, 14 December 20
Please find attached the VaraDOS for CPC and Plus computers.
This is the newest ParaDOS with Vortex formats enabled by default.
Feel free to use it or put it into the Wiki.
Ok, i'll integrate this varados version and give it a try. I've already tested the newer PARADOS 1.2 from 2015 and it worked fine (although 1.2+ is not, i suppose because this was meant for plus models ::) )
Quote from: GUNHED on 22:23, 14 December 20
Maybe this can be renamed to "|UHELP", because lot's of ROMs already use the "|HELP" command.
Hmmm, you think so? I wonder what will happen if there are 2 expansions having the same HELP rsx command. What will happen if you give |HELP? I guess it will execute the command from the board with the greatest rom number? Btw, for added compatibility with other expansion cards, you can change the rom number of USIFAC II ,by giving a simple OUT &FBD2,x, so if any other card you might have, uses the default USIfAC II rom 5, you can easily change it to another. And this change will be permanent, as it is stored in the integrated EEPROM of PIC MCU! ;)
Quote from: ikonsgr on 00:12, 15 December 20
Ok, i'll integrate this varados version and give it a try. I've already tested the newer PARADOS 1.2 from 2015 and it worked fine (although 1.2+ is not, i suppose because this was meant for plus models ::) )
You're right, the + Version is for 6128 Plus only. The Varados equals the Parados 2015.
Quote from: ikonsgr on 00:12, 15 December 20
I wonder what will happen if there are 2 expansions having the same HELP rsx command. What will happen if you give |HELP? I guess it will execute the command from the board with the greatest rom number? ;)
Actually the command it always take from the ROM with the smallest number, because it got initialized at last. To have different commands would be great, then the commands of all ROMs could be used. The !HELP command usually displays a list of ROMs or RSX of a rom when used with the parameter rom_number.
So !UHELP would be very helpful, because it's not part of any other ROM.
Quote from: ikonsgr on 00:12, 15 December 20
Btw, for added compatibility with other expansion cards, you can change the rom number of USIFAC II ,by giving a simple OUT &FBD2,x, so if any other card you might have, uses the default USIfAC II rom 5, you can easily change it to another. And this change will be permanent, as it is stored in the integrated EEPROM of PIC MCU! ;)
Ah, we can use OUT &FBD2,rom_number to set any ROM number. That's awesome!
Quote from: ikonsgr on 18:10, 14 December 20
Yes,give "|HELP" and you will get a list of all rsx commands with short descriptions and usage! ;)
Great stuff. Many times I've attached a peripheral I haven't touched in a while and I'm thinking "hm, must go to the PC and download a manual"... :)
Quote from: GUNHED on 00:46, 15 December 20
Actually the command it always take from the ROM with the smallest number, because it got initialized at last.
Yeap, mea culpa! :) I knew that initialization rom walk starts from greatest rom number (7 for CPC464, 15 for CPC6128), but i didn't thought ,that for the KL FIND command, the opposite is true, thus rsx commands from last rom, would be the first to be searched! :D
Yes, that's unexpected. Firmware does go backwards.
Therefore the DOS ROM with the smallest number is always dominant. :) :) :)
I finally receive the new batch of usb host modules, so the "full pack" is available again!
I've also made some optimization on the code of direct load/save routines, resulting in increased speed ~15-20%, up to ~23-24kb/sec! ;)
The way this goes if we wait a month or so it will boost the Z80 by 100% or something :D
I made a quick comparison test, using MASK II disk image.
I remembered back from the 80's that this game took quite more time to load than most games of the era, as it used the hole 128k of memory, and loads ~125kb in total.
The 4 "candidates" was: 3" floppy disk, Gotek drive, Usifac ii with fdc emulation, and Usifac ii with direct file loading.
The results are:
Loading MASK II from 3" floppy disk: ~78seconds
Loading MASK II from Gotek drive: ~80seconds
Loading MASK II from USIfAC II using FDC emulation: ~32seconds
Loading MASK II from USIfAC II using direct file mode: less than 9seconds
Obviously floppy disk and gotek drive speeds are almost identical, but what it seems rather curious is the exceptional difference between these two and the FDC emulation.
Using the same disk image on the same usb stick as with gotek drive, USIfAC II FDC emulation is ~2.5times faster than gotek/disk drive and direct file loading almost 9 times faster! I knew from previous tests with many other games that FDC emulation is faster than a disk drive/gotek drive but the difference was ~10-20%,not... 250% faster! :)
Although some delay due to head movements and disk motor setup times is expected, and also sectors on each track of the dsk image,are not interleaved (&C1, &C6,&C2etc) for faster loading but in sequential order (&c1,&c2,&c3 etc), still, such ENORMOUS difference is something i can't explain...
Any ideas? ::)
Your FDC emualation seems to be a big gain. Can't wait to try it with FutureOS. :) :) :)
Hello, I connected device like in the image and connected it to AMSDAP42 slot which is connected to my CPC6128+
I was able to type "|USB" and "|CAT" which gave me a list with .dsk files on usb.
Then I tried "|CD bubble.dsk" and that returned some error after which I restarted computer and device and tried many times to get it working again but it looks like it's not working anymore.
There are no lights on device, no message in the boot screen.
Is it possible that I broke it? (the reset and pause buttons do work)
(https://i.ibb.co/rFmDPHS/usifac2.jpg) (https://ibb.co/7jXscK5)
In order to use a dsk image, after giving the initial |USB command, you should:
- Select an image by giving: "|MG,"image name" (the "|CD" command you where using , is for changing directory, and that's why you got the error message)
- Enable the floppy disc controller, by giving: "|FDC"
From now on, any cat,load,run,save command you give, will access the selected image!
And you can still use rsx commands, so you can still change directory, or catalogue the usb stick and by giving another "|MG" command, select another dsk image directly! ;)
Note also, that if you reset amstrad using the RESET button on the board, you don't need to select again the disk image, as board will "remember" the last image used!
Just give |USB and then |FDC and you can access again the previous selected image.
Finally,by giving: |HELP you can have a short description of all available RSX commands.
Quote from: ikonsgr on 01:32, 28 December 20In order to use a dsk image, after giving the initial |USB command, you should:
Thanks for the "|MG" command - I didn't use it but I can't use any command since the board acts as it is not connected (after the described steps in my previous post).
Is it possible that I "killed" the hardware or the firmware somehow as there are no lights on the device and no "usifac" written on boot?
Can I somehow re-upload firmware or test where is the problem?
Can I detect where is the issue - hardware or firmware? (I posted a picture showing how I connected the wires in my previous post)
Try to give: OUT &FBD2,5
This will reset USIfAC II to ROM 5 and you should see the "USIfAC II Enhanced" message, after resetting with button from the board.
You can also try: OUT &FBD1,30
This actually calls the status routine and it should retrurn characters which can be print on screen by using this small loop:
10 IF INP(&FBD1)=255 THEN PRINT CHR$(INP(&FBD0));:GOTO 10
If you get the status message on screen,this means that the MCU chip is ok.
I will send the next batch of boards early next week, including a new firmware update:
- Update DSK image transfer function (RSX command:|DSK), you can now Copy DSK images to floppy disks from either a PC or usb stick (initial firmware supported transfers only from PC)
- Major code optimization in file access speeds on direct mode, resulting in ~20%-25% speed increase!
- Further optimization in file loading code, witch offers ~2% extra loading speed increase!
- Some other minor code optimizations which offer a small overall performance boost.
It's possible to update firmware?
Quote from: XeNoMoRPH on 19:00, 08 January 21
It's possible to update firmware?
Yes, it is!
You will need a rather cheap
PIC KIT 3 programmer (https://www.ebay.ie/sch/i.html?_from=R40&_trksid=p2334524.m570.l1313&_nkw=pickit+3+programmer&_sacat=0&LH_TitleDesc=0&_osacat=0&_odkw=pic+kit+32).
You plug the icsp connector from pickit3 to ICSP connector on the board (on some boards might need to solder the ICSP pins) or remove PIC chip from on-board socket, and place it on a zif socket.
Then, you can use the
MPLAB IPE (https://www.microchip.com/en-us/development-tools-tools-and-software/embedded-software-center/mplab-integrated-programming-environment#), which is part of MPLAB IDE and you can download from
here (https://www.microchip.com/content/dam/mchp/documents/DEV/ProductDocuments/SoftwareTools/mplabx-v5.45-windows-installer.exe), to re-program PIC.
I will attach the latest firmware (along with a quick DIY guide) on the beggining of the thread, for anyone who wants to do it!
Another small ehancement: DSK image transfer routine from usb stick, now supports non amsdos formats too, but single side only. I've test it with a parados 80 image (80 tracks,10sectors/track giving ~400kb storage capacity), and worked fine!
I'm also thinking of the possibility to write even large dual side disk images, using "single head" amsdos routines. If you have a ribbon cable for the external 3.5" drive, that has a head selection switch, like the one i also make (https://www.ebay.ie/itm/272378426083), it should be possible to write the entire "head 0" side,then switch to other disk side (probably by prompting on screen), and write the entire "head 1" side... ::)
I just finished developing and testing the (hopefully) final version of the DSK image transfer from usb device function.
So now, except from weird copy protected images, you should be able to copy to disk, almost any kind of dsk image!
It supports practically any format (DATA, SYSTEM, IBM, PARADOS etc), with any number of tracks (up to 80) and any sector size from 512byte up to 4096bytes.
And for the best part: it supports writing "dual head" images too! And all this, using only the on board Amsdos Rom! :)
Now, you may ask:"how can you write dual head images to disk, when amsdos support only "single side" writing"?
Well, as already noted, i've managed to do it, by using the head switch on external drive ribbon cable mentioned before: First, by prompting a pause message to set head switch to "Head 1", then writing all tracks on "head 1" side, then, prompt again for switching head/side and finally writing all tracks on "Head 0" side!
It took a little more than 2minutes to write a single 40tracks/dual head /10 sectors/track (~400kb in total) RTYPE 128 single image!
I also developed a "tweak" for the write order of sectors by applying interleave sector writing (according to format sector id's order, taken from dsk image for each track), resulting in rather fast writing of less than a minute (otherwise it needs ~95 seconds...) for the typical 180kb image. And this tweak applies, not only to "normal" DATA format 9sectors/track images, but also to any format type with either 9 sectors/track or 10sectors/track! ;)
I think it's safe to say that this is "as good as you can get" using good old Amsdos! :D
And here is some "proof of concept":
[attach=1,msg196618]
[attach=2,msg196618]
It took ~4,5minutes, but even so, you can now transfer to disk a "huge" 800kb PARADOS D10 image to a single disk, using Amsdos (although you will need a PARADOS rom to access it...) ;D
But, even if you don't have a parados rom, it could be useful for copying to real disks any big "single disk" game/demo, which is accesible using Amsdos too (for example, Rtype 128)
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Hi John
This is just a thought that may be usefull ?
Is it possible to Identify that the USIfAC II is connected to a CPC464
So that it will automatically Do the equivalent of |464 and then do a reset ???
To save the operator from going through the setup requirements ??
Thanks
Keep Safe
Ray
Unfortunately this can't be done. You see, CPC 464 doesn't have amsdos rom on board, so, after initial power up and initialization of ROMS, a reset is mandatory in order to enable the direct file access mode routines (which "grab" the various Amsdos ROM 7, routines and redirect them to USIFAC II ROM).
BUT, the good thing is that, this "|464"+reset procedure is needed ONLY at FIRST power up of your amstrad!
After that, you DON'T need to do it again.
You just reset your 464 by pressing reset button (or with a quick on/off of power switch) and then you follow the "Standard" CPC 6128 procedure!
So in 2words, it's a 3seconds task, that needed to be done only once at initial power up of cpc 464, not much of an effort dont you think? :)
Note also, that the same goes for accessing dks images on a cpc 464: the lack of a 765 Floppy Disk controller, imposes the need of reset amstrad (to enable the 765 FDC emulation on USIFAC II) using the "|464" command.
Finally, the "|464" is needed on all models if you want to access a non amsdos image
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Ok Thanks for the information.
I will experiment with replacing the Version 1 Basic Rom with a Version 1.1 and see what happens
Have a Look Here :- https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/universal-serial-interface-for-amstrad-cpc/250/.
Keep Up the Good work.
Keep Safe
Ray
Quote from: ikonsgr on 21:40, 04 December 20
From the 100's of games/programs i've tested so far, the only ones i couldn't run was:
- Batman for ever demo single disk (gave me a "wrong disk configuration", but it works from normal 180kb image file)
You should ask @Rhino (https://www.cpcwiki.eu/forum/index.php?action=profile;u=174) what are the conditions for this message to appear. It may help solve future problems.
Thanks for the suggestion, i've already sent a pm! ;)
After a little help from rhino (thanks for sharing the codes! ;)) and a bit study, i finally manage to load batman forever usign the large single disk image!
The problem was a little mess with physical and logical drive head selection. My code didn't distinguish between these two, and when the FDC command requests physical head 1 (the "HD" bit on the 2nd command byte) but logical head 0 (the 4th command byte), my emulation fetched data from physical head 0, thus the problem.
I have now fix this, although batman forever is the only known image that had problems with that.
Ok,i found out that dual head images, although they seem to be written correctly on floppy disks (using the "head hack" i described earlier), and i was able to "CAT" them, there are in fact, loading problems, most probable because Amsdos routines can't manage tracks/sectors marked on Head=1, so, although i forced them (with the head select switch) to be written on the correct side of disk, they still have wrong head markings (head=0 instead of head=1).
So, finally, i manage to get rid of amsdos, and use custom fdc routines that can cope correctly with dual head images!
And now, you can use the |DSK command to directly transfer to disk (no "select head" prompt needed any more...), practically any format with any heads/tracks/sectors (except copyprotected images)!
I've already use it to tranfer succesfully:
- orion prime 800kb image,
- R-type128 400k dual head disk image (this one is the only that you couldn't load using FDC emulation too ;) )
- 800kb parados 80tracks/dual head image
- 720kb pcw/+3dos and vortex images!
Of course,dual head images can be written only on a 3.5" disk drive, as 3" drives have only one head... ;D
So,it seems that now, you will be able to use amstrad cpc to copy spectrum +3 and amstrad pcw images to floppy disks too!
For a typical 180kb cpc image ~55seconds is needed, where for larger images, time is proportinally longer, e.g. for ~400kb images 2x that time, for 800kb images 4x that time.
Also, unusual tracks (e.g. without 9 or 10 sectors/track and 512byte/sector) will need extra time too.
Great. Have you tried with the Phortem and Phx demo too? :)
Quote from: TotO on 09:12, 01 February 21
Great. Have you tried with the Phortem and Phx demo too? :)
I've tried both and they load just fine from usb stick using the FDC emulation.And also transfer to a 3.5" disk works too! ;)
Thank you for this nice device, I received it this january ! I've just tested it this evening but I can't manage to copy a file from a CPC disk to an USB key!
I tried this:
|USB
|2PC
then when I select a file and press return, the message:
Transfering myfile... appears at the bottom of the screen, but everything is frozen and then the file is created on the USB key but the file is empty (0 bytes)...
I tried with different USB keys from 16Gb to 1Gb... I tried to create smaller partitions from 250Mb to 10Mb (FAT) but none of these tries is working, the result is always the same: the file is created but everything freezes and the result file is empty !
Any clues to help me ?
I tried the same as you and it succesfully copied the selected files in the usb stick
ah ok :o
What do you suggest ? Is it because I'm using a CPC 6128+ or because I'm not lucky with my USB keys and I should try others ?
Quote from: JimQML on 22:22, 10 February 21
ah ok :o
What do you suggest ? Is it because I'm using a CPC 6128+ or because I'm not lucky with my USB keys and I should try others ?
I dont know. Only ikonsgr can answer that ;D
I've not had much of a chance to play with my USIfAC II much - but I'm also having issues on my 6128 Plus with some random crashing....
Unfortunately i don't own a 6128+ so no testing was made on that machine. Moreover, i don't know much about hardware/firmware differences and "peculiarities" of "plus" machines, so, i'm afraid i can't provide any help with problems on "plus" machines... ::)
BUT, what i DO know though, is that, at least "basic" functionality of loading games (either directly or form dsk images) seems to work on 6128+ too. ;)
p.s: If you haven't done it, try to update the firmware (check 1st post of this thread), maybe this will help resolve the problem on 6128 plus.
I tried something today, out of curiocity. I exported the files of random games (with managedsk) that consist of more than one 1 dsk. I put them all in a folder and run the game. To my surprise, I had partial success. When the game required to insert disc2 or side2, it bypassed it and continue. Needs testing though because games with hidden sectors or loaders etc are not read well by managedsk
For that, i use CPCLOADER included in CPCGamesCD, as you can "Batch" extract 1000's of dsk images into separate folders in a few seconds! :)
Unfortunately some multi dsk image games, are using custom sector/track loaders so there are no files to be extracted,thus you can't use the direct file loading method. Also, it's better to use separate folders for each multi dsk game to avoid conflicts in names etc.
Anyway, in then near future,i'm planing of Resolving the problem of how to load multi dsk image games, by adding on the board, a "hot dsk swap" button (similar to the reset button), and also, add multiple |MG commands (|MG2, |MG3 etc) in order to mount multiple dsk images (up to four). These images would be "round" selected, "on the fly", by pressing the swap button! I've already test this, using a prototype board and seems to work very well! And using this method, you should be able to load multi dsk games that use sector loaders too! ;-)
Quote from: ikonsgr on 01:02, 13 February 21Also, it's better to use separate folders for each multi dsk game to avoid conflicts in names etc.
Even if we do that, I dont think we "change" discs during game. Correct?
Changing actual disk images will be "literrally" done, using the swap button i mentined before.
But, in direct file loading method, there is no meaning of "change disks" ,since you get rid of the disk images and access files directly! ;)
So, for now, you can try to extract all files from all dsk images of a multi-image game, into a single folder. Then you can try to run game as usual.
Of course this method has some restrictions:
- Game must use Amsdos FILE routines and not sector/track loaders
- File names in different dsk images should have different names (otherwise you will have conflicts when extracted on the same folder)
If game fulfills the above conditions, then it should run without problem, since game code will be able to find all required files directly from the folder!
If you are in a mood, you can try some and give us the results ;)
Any new firmware uptades maybe ? hehe :D
Ok,i just upload a new firmware (_2b) which contains the updated |DSK command for writing any kind of image using custom floppy drive routines instead of Amsdos.
Also, this is how the new boards will be:
[attach=1,msg198811]
As you can see,the usb host module is now soldered on the main board, which saves the need for extra wires and making the interface a neater, compact single board! ;)
I'm also working on adding the ability to load snapshot files (|SNA command). As there are now more than 200 snapshots in the cpcwiki snapshot archive (https://www.cpcwiki.eu/index.php/Snapshot_Archive), these can proove useful for CPC 464 users, as many games from dsk images, can't load on a CPC 464, so you can use a snapshot instead. Of course, there is another option to use directly files (like most games in this list (https://www.cpcwiki.eu/forum/games/how-about-making-a-'worth-to-play'-collection-of-amstrad-games/)), but it's good to have another alternative :-)
Btw, i'm still waitng for the new batches of usb host modules, but i believe i will have them pretty soon...
While I am waiting for my USIFAC, I am trying to understand how it works from the hardware side.It would be nice to have a wiki on simple port expansion communication (but I have not found it, if I manage to get a clear idea, I can write an simple expansion card wiki)
Following explanations for expansion port communications from http://magic-cookie.co.uk/CPC/expport.html
I have seen that IOREQ, WR, RD lines are used to communicate with the Z80.
Thus, writing on data port OUT &FBD0,x should activate IOREQ and WR and place the bits in D0-D7?For the way back, INP(&FBD0) will check if RD activated from MCU and read D0-D7 ?
Maybe all these questions are solved in usifac code, don't know if it is available or not.
Sorry if this is not the appropriate thread for these questions, but I guess, here are the main experts.
Check here:
http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/universal-serial-interface-for-amstrad-cpc/msg169466/#msg169466
here:
http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/universal-serial-interface-for-amstrad-cpc/msg170045/#msg170045
and here:
http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/universal-serial-interface-for-amstrad-cpc/msg190714/#msg190714
It's from the previous usifac project thread, but the principles are the same, and you will get a lot of "inner workings" ;)
The 2 major hardware differences with USIfAC II is ,first that i use CLC's (Configurable Logic Cells, a feature of the 18F47Q10 PIC mcu) instead of discrete logic chips for all address/signal decoding, and with the procedure of unlatching the data bus, the new PIC is fast enough to do it "on the fly" without needing to have a "pause/unpause" procedure and "sample&hold" circuit of READY signal i described above! ;)
Now,i have uploaded another firmware update, this time for all CPC 464 users: It ELIMINATES the need for the "Start up" procedure of giving "|464" and then pressing "Reset" button! ;)
The only "side effect" is that, at "cold start", your CPC 464 will reset automatically a couple of times... :D
I finally receive the usb host modules today, so anyone interested please contact: ikonsgr745@hotmail.com
I just spoke with a friend of mine that has a 3D printer, and he wants to start designing a case for USIFAC II! :)
Nice.
I would recommend you to add mouning holes to the pcb. Thus, in the case you can put threaded inserts, captive nuts or just nuts on the outside part.
Quote from: issalig on 16:36, 08 March 21
Nice.
I would recommend you to add mouning holes to the pcb. Thus, in the case you can put threaded inserts, captive nuts or just nuts on the outside part.
Well,i'm not involved in case design,but my friend told me that he can do it without adding any holes to the pcb, probably case will have some kind of inner ledges at the bottom, for the board to fix in place.
Ι have just upload another firmware update, adding another small usability improvement: You don't need to type |USB after every RESET of Amstrad,but only once, at initial power up!
This means that,after you finish playing a game,you just press reset button, board will automatically enable usb host module,set to "direct mode",and then,you can access directly the usb stick, without needing to re-issue |USB command! ;)
is it possible to order a complete set but with a centronics connector for schneider cpc6128?
Hi Ikonsgr, interested in a full package.
can you tell me if it's possible ? no matter when, no hurry.
Thanks
Phil
Quote from: amai on 16:41, 16 March 21
is it possible to order a complete set but with a centronics connector for schneider cpc6128?
Yeap! That's why i use a dual row pin connector on the board, to use it directly on a MX4 or similar board, or with edge connector cable for "classic" Amstrad CPC's, or with centronics cable for schneider cpc's! ;)
Give me a note at ikonsgr745@hotmail.com to arrange it.
Quote from: Philippe Lardenois on 08:13, 17 March 21
Hi Ikonsgr, interested in a full package.
can you tell me if it's possible ? no matter when, no hurry.
Thanks
Phil
Give me a note at ikonsgr745@hotmail.com to arrange it.
great - email sent
Hello
First of all, congratulations about your work. I'm sure you have learnt a lot developing it.
I have seen there is a 4-pin slot for wifi module. Does it mean that we can connect an ESP-01 and connect to a wifi? Are there commands to configure wifi and download files from web?
How easy is it to update it with new firmware?
Thank you for all.
Quote from: Fran123 on 19:27, 18 March 21
Hello
First of all, congratulations about your work. I'm sure you have learnt a lot developing it.
I've spent more than 1000 hours in the last 15 months on this project, so i think that i've learn one or two things in the process... :D
Quote from: Fran123 on 19:27, 18 March 21
I have seen there is a 4-pin slot for wifi module. Does it mean that we can connect an ESP-01 and connect to a wifi? Are there commands to configure wifi and download files from web?
Yes, there is an RSX command |WIFI, for easy configuring the module (set serial speed, connect to access point and then to a tcp server) in order to connect to a PC that runs the windows utility i've also developed, (which activates a small TCP server where the esp module connects as client). There is also |COM command, a small terminal specifically designed for comunicating with wifi modules through AT commands.You can find more details in USER'S GUIDE available at the 1st post.
Quote from: Fran123 on 19:27, 18 March 21
How easy is it to update it with new firmware?
Check the 1st post on this thread at "update firmware" section.
I think a rsx command like |wget (for example) is indispensable, downloading a file from web with AT commands is very tedious.
I don't know how difficult was replace one of the ROMS using the same method of firmware update. (I don't know if I mean well)
And last doubt: Can you use |CPM too after |mg,"cpm22.dsk" (for example) ?
I'll get one soon.
Actually the utility i've developed for windows PC, take it FAR more than just ..."downloading" a file. After you connect to the TCP server (which activated automatically when you run the windows utility) ,using the wifi module connected on USIfAC II, you can actually RUN "on the fly" games ,directly through internet! You can also access dsk images, transfer dsk files from your pc, direclty to your Amstrad 3" or 3.5" drive, and of course copy files between your PC and Amstrad! And all these functions are controlled from Amstrad using RSX commands!
For more details, please check USER'S MANUAL (https://www.dropbox.com/s/ibua98leg79uxgr/Amstrad%20CPC%20Serial%20Interface%20II%20User%20Guide.pdf?dl=0) on "windows communication utility" section.
p.s. you can perfectly use images of cp/m disks too,i've already test a few games that used CPM to load (by giving "|CPM" at basic prompt) and worked just fine! :)
MAJOR UPDATE!
New board design, with an amazing new feature: Access multiple Dsk images "on the fly" and be able to run ALL multi-image Games/demos/utilities!
Along with the pre-existing command |MG that places an image to the default slot 1, some extra RSX commands are added:
- |MG2,"image name" places "image name" to slot 2
- |MG3,"image name" places "image name" to slot 3
- |MG4,"image name" places "image name" to slot 2
Finally with |SMG command you will get a list of all images placed in the 4 different slots,along with the currently selected slot!
The "ring selection" of the dsk image (e.g. every time you press "Dsk_Swap" button, selects the next slot: 1->2->3->4->1 ,of course empty slots are omitted) is made "on the fly" by using an extra small button on the board. I've already test it with a few multi image games like OUTRUN EUROPA (2 images), SAVAGE (2 images), Xyphoes (3 images), TURBO OUT RUN(2 images) and PAWN (2 images).
In most cases, when game needs another image it will give you rolling bars at the border, when you see this, you just press the swap button and the loading continues! ;)
Soon i will start adding these games on the "Classic and worth to play (http://www.cpcwiki.eu/forum/games/how-about-making-a-'worth-to-play'-collection-of-amstrad-games/)" list, and also i'm thinking of adding a small Basic loader on each game, which will automatically load all images to slots and run game directly ,so you will not have to do anything by yourself! ;)
[attach=1,msg199600]
So is the new board called USIfAC II+ or USIfAC III :P
Another good job from the ikonsgr group :laugh:
shifters
That's awesome, is it possible for me to add this button myself? Which pins do I need to attach it to? ;D
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Got some questions before I order one ...
As you may remember (maybe not) I already purchased Usifac I from you and I use it with my mp3 module .... is it possible to use both ? Or better : is it possible to attach USB Host Module AND mp3 module at the same time ?
If not : is it possible to use Usifac I and II at the same time ???
I guess both answers will be "NO" but hey, have to ask anyway :D
Quote from: ikonsgr on 17:52, 19 March 21New board design, w
this means new hardware?
Quote from: Skunkfish on 19:02, 19 March 21
That's awesome, is it possible for me to add this button myself? Which pins do I need to attach it to? ;D
Indeed, the only thing you need to do is to add a button and attach one end on a specific pin:
[attach=1]
The other end of the button goes to gnd. If you do that on older boards you can actaully use the new firmware and have the new feature! ;)
Quote from: eto on 19:12, 19 March 21
this means new hardware?
Not exactly, i would say it's more of a small extension to add the new feature. The only difference from older design (apart from the color of board and bit different placement of parts) is the addition of the small dsk swap button! Of course there is also a new firmware for PIC MCU (hex file) to include the extra RSX commands.
So, if you have an older board version without the dsk swap button, then yes, it would need to have the new board, although it's possible to add this feature on older boards too (see above post)
Is there somebody using USIfAC II with FutureOS and clicked at drive E, F, G or H to see if FDC emulation actually works with the Vortex FDC?
Quote from: SkulleateR on 19:08, 19 March 21
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Got some questions before I order one ...
As you may remember (maybe not) I already purchased Usifac I from you and I use it with my mp3 module .... is it possible to use both ? Or better : is it possible to attach USB Host Module AND mp3 module at the same time ?
If not : is it possible to use Usifac I and II at the same time ???
I guess both answers will be "NO" but hey, have to ask anyway :D
Since the usb module is now soldered on board, the 4pin UART port is available to add another device.
So in theory, if connected devices use the same serial speed, you might be able to use both mp3 module along with the usb host module. Of course this would require writing custom software for it, and managing comunication with each module without conflicts or interferences between them, might be tricky...
Btw, you can't use both USIfAC and USIfAC II as they respond to the same ports. On the other hand, USIfAC II is 100% "backward compatible" with previous USIfAC, so any software written for USIfAC should work directly with II too! :)
Quote from: ikonsgr on 19:59, 19 March 21
So in theory, if connected devices use the same serial speed, you might be able to use both mp3 module along with the usb host module. :)
This should work, because the MP3 module expects its commands embedded in key bytes. Well, that's at least the case with the one I use. :)
Quote from: GUNHED on 20:04, 19 March 21
Well, that's at least the case with the one I use. :)
I also use the Catalex device as your LS does, and since this is just given instructions via some OUT codes in basic, the speed of the serial port shouldn't matter ... guess I´ll give it a try ;D
Ok, i've updated the game list (https://www.cpcwiki.eu/forum/games/how-about-making-a-'worth-to-play'-collection-of-amstrad-games/) with a few multi image games, and also i've add in all games folders, that are in dsk image form (~10 in total), a small Basic loader that sets image(s) to slots, enables floppy controller emulation, and runs the game directly, so you can now run games from dsk images directly!
This also could be a great idea for simplify loading process for any game in dsk image form!
Ιt's very easy to do it by yourself, and it will save you the need to re-place image and re-enable FDC controller emulation for every game!
The procedure is really very simple:
- Go to the folder with the image(s) you want to use (using the known |CD,"dirname" command)
- Get a list of all images by giving: |CAT
Make a small Basic program in the form:
10 |MG,"1st image name"
20 |MG2,"2nd image name" (this is needed if game has 2nd image)
30 |MG3,"2nd image name" (this is needed if game has 3rd image)
40 |MG4,"2nd image name" (this is needed if game has 4th image)
50 |FDC
Then you just save the above basic program into current game's directory by giving: save"name.bas"
From now on,every time you want to play the game,you just run the above basic program and then, directly give CAT and RUN to load it, without needing to retype all the above commands! ;)
Finally, if you want to take it a bit further with "automation" of the loading process, you can also include the RUN command into the Basic listing.
For this, after running the above program and give a CAT command (that will give you the contents of the image placed in the 1st slot), you just give:
- |FDC to disable FDC emulation,
- |EN,
And then add a Basic line at the bottom of the listing:
60 RUN"(Name of game loader inside Dsk image)"
Save the program, and you are Ready!
Now, next time you want to load the game,you will run this small basic program you just saved, and it will automatically run the game! ;)
Quote from: SkulleateR on 20:36, 19 March 21
I also use the Catalex device as your LS does, and since this is just given instructions via some OUT codes in basic, the speed of the serial port shouldn't matter ... guess I´ll give it a try ;D
IIRC, the speed was 9600 Baud, but see their doc (well, it's not complete I'm afraid).
No reason not to work with the USIfAC.
Quote from: GUNHED on 22:29, 20 March 21
IIRC, the speed was 9600 Baud, but see their doc (well, it's not complete I'm afraid).
No reason not to work with the USIfAC.
I know it works with USifAC I ... so it should with II ;D
The big question is, does it work side by side with the USB Host Module ... guess I'll find out when package arrives ;) :D
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Hi John
I have a small concern.
I am using the 2nd generation board.
I am using a CPC464.
I have just updated to Version 2c which works well no Problems
As I have a few spare 18f47q10s I flashed an other with 2D
The concerns are, Unable to intermittently enable the USB (The light comes on)
But I am unable to restart the USB, Power off for 20 seconds power up again then it MAY enable the USB
Can you help
I have gone back to Version 2C.
Keep Safe
Ray
Well,i haven't noticed something like that with my tests on CPC464 and _2d firmware. After some more thorough tests,the only "bug" i discover is that sometimes you get a "bad command" at initial screen after reset (and it might shown when executing some rsx commands) but this doesn't seem to affect the operation of the board, everything seems to works fine despite this msg.
So, if you are using the same board+usb host module with the same usb stick and you just changed the PIC CHIP with another flashed with _2d firmware, this would be really very strange...
BUT, what i have discovered from my experience so far, is that one VERY "sensitive" matter is the good contact of the edge connector to the expansion port of Amstrad!
I remember some time ago, i wanted to test some boards, and suddenly i began to have very strange behaviors, for example, hung-ups out of the blue, delayed respond on execution of RSX commands,and the most strange of all: direct file loading worked fine, but i got problems when accessing dsk images (something that is completely insane,either both loading methods should work or both methods should NOT work...)! ???
In the end,i discover that the ribbon cable i was using (obviously from the 100's plug on and offs, as i'm using it for many months now), developed some kind of "contact fatigue", which caused all the problems! When i've changed it with a brand new ribbon cable, all boards worked perfect! :)
And this "contact" issue goes to EVERYTHING that can be plugged on/off, e.g. usb stick, ribbon cable ,expansion port. And since you've changed the PIC CHIP, even a bad contact between socket and chip legs could cause a problem!
[UPDATE]
After more thorough testing,i've decided to remove the "|USB" automation for CPC 464, as the absenece of Amsdos Rom, seem to cause some bugs to this process (the "bad command" appearence on boot screen, and rare hung-ups when accessing usb stick after initial "cold start" booting of Amstrad).
Both Firmwares are updated on the 1st post (with some extra minor updates for the new "_3" firmware,check 1st post for details), with this change. Note that these affect ONLY cpc464 behavior, there is nothing different for CPC 6128 models. Mind also that you can use the new _3 firmware on older boards too, but the extra RSX commands for using multiple image files, will have no affect as there is no "dsk swap" button present on board.
btw,i test a couple of multi image games on CPC 464, and it seems they work fine too! ;)
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Ok Thanks for the update information.
I will have a GOOD look at the Expansion (Male) connector.
and if needed I will solder a 50 Pin header socket to the CPC464 ( this is my test computer that I use)
I also had the same error messages.
I will flash the update to 3 ?
Thanks for your quick work
Thanks
Keep Safe
Ray
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
The fault turned out to be a "Soft" Z80 ? It could not handle the extra load of the USIfAC II
Replaced the Z80 and away it went on the CPC464.
PS:- all my tests are using xxxx.dsk Images.
I am having Problems with Version 3 at the moment- Will leave more detail Later.
Thanks
Ray
Hi @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
I'm enjoying experimenting with the Usifac. Thanks again. What are the chances of a virtual romboard?
A ROM board got nothing to do with a serial interface.
To ask for a ROM board here is like to ask "And how to have a beer with my toaster".
For a virtual ROM board look at the thread of the M4 card.
Quote from: GUNHED on 15:42, 23 March 21
A ROM board got nothing to do with a serial interface.
To ask for a ROM board here is like to ask "And how to have a beer with my toaster".
For a virtual ROM board look at the thread of the M4 card.
Well this serial interface comes with a FDC emulator, games and utilities and serves up its own rom. So I guess it must do Rom decoding.
So my question is if I can have bacon with my toaster may I have a beer too? :)
@kolleykibber (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4071), well,i don't know if you can call it "rom board", but since the PIC is equipped with 1kb EPROM, i add a few rsx commands to utilize it!
You can load data either from memory or from a binary file directly (|WROM), and then use another rsx command (|LROM) to retrieve the data! You can also access it in asm code using a simple RST3,&FC00 (on the rom number of USIFAC interface, deafult:5).
And now something that i think you would love it, especially the CPC 464 owners.....
As i already wrote you, i made a few small basic loaders for the multi image games, in order to save you from placing each image into slot and enabling FDC controller manually.
And then it hits me: Amstrad Basic, can load, apart from basic listings, AND plain text ascii files that contain a basic listing! You can check this if you save into usb stick a basic program, using 'a' attribute (e.g. save"filename.bas",a) and then take usb stick and open it from your pc, you will see that it will give you the BASIC listing!
So, since i already supported ascii files on usb stick, what if i make a small PC utility to expand these small BASIC loaders for ANY game, either in file or dsk image form?
Well, it took me a few hours, but i finally manage to make such a utility and use it to create 100's of loaders for all games in the known list (https://www.cpcwiki.eu/forum/games/how-about-making-a-'worth-to-play'-collection-of-amstrad-games/), in a split of a second! ;)
I uploaded a small zip file here: https://www.dropbox.com/s/cdd59bfubyv9g7f/loaders.zip?dl=0
You can download it and extract all the files into the root of your usb stick. Then, you just copy the "direct load games" folder into usb's stick root dir, and that's it!
Instead of manually using |CD, |MG, |FDC etc commands, you can just run the small basic loader!
Each listing is custom made depending on the specific game form:
- For games in dsk images, it will change directories, mount the image and then either reset using |464 (for CPC 464) or enabling FDC emulation and directly give you a CAT list!
- For games in file form, it will also change directories and give you a cat list, and so you can choose the game loader and run it directly!
The program searches and create Basic loaders, for multiple dsk image files in a single folder, and for files or dsk images in separate sub-folders for each game!
Here is an example:
10 A$="DIRECT~1":|CD,@A$
20 A$="SUBHUN~1":|CD,@A$
30 IF INP(&FBDC)=&83 THEN 40 ELSE 50
40 A$="SUBHUN~1.DSK":|MG,@A$:|464
50 A$="SUBHUN~1.DSK":|MG,@A$:|FDC:CAT
This is the procedure to use SUBHUN~1.DSK image file inside DIRECT~1/SUBHUN~1/ subfolder.
As you can see,i'm using the Basic 1.0 form of loading arguments in RSX commands, in order for the listings to load on CPC 464 too!
You can also see the "smart" selection of actions according to you CPC model! Judging from my quick experience on a CPC 464, this method can VASTLY improve the speed and "Ease of use" for loading games,especially for CPC 464! ;)
Soon i will upload the utility, for anyone to create loaders for his custom game collections! ;)
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Hi John
Tha Zip file (Basic Loader for any Game) on dropbox has been deleted ??
Thanks
Ray
There must be an issue with the [ url ] [ /url ] tags,anyway i post the link directly now, but you can also get it from the 1st post from user's manual and windows program link too! :)
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Hi John
Thanks
Keep Safe
Ray
Quote from: kolleykibber on 17:08, 23 March 21
Well this serial interface comes with a FDC emulator, games and utilities and serves up its own rom. So I guess it must do Rom decoding.
So my question is if I can have bacon with my toaster may I have a beer too? :)
It got few space on chip left! But that's not an unlimited ROM box. So Cheers! :)
ok,i just finish the small utility:
[attach=1,msg199885]
As you can see, i've include a mini help guide, so, no need to explain anything! ;)
You can download it from here:
https://www.dropbox.com/s/jk5sgeey2f5zor8/cpc_loader.zip?dl=0
So, if you have a CPC 464 and you got tired of giving all the time:
A$="mplampla":|RSX COMMNAND,@A$ commands...
This utility will definitely..."ease your pain"! ;)
Ι have a small request to make:
If you happen to have an Amstrad with custom ROMs or a CPC 664, i would like to give a:
print peek(6)
just after boot, and report me the number you receive.
Standard Amstrad CPC 6128 should give '145' and standard CPC 464 '128', and because i'm using these values to find out the CPC model, it would help me make the code more precise with "custom" models! :)
Hi John
CPC664 Info
THIS has been corrected I misread it to be &78 - Real Value &7B
The rom used is a 40022
The Byte info is :-
&7B (Hex)
123 (Decimal)
Included is the Rom
Keep Safe
Ray
Quote from: Audronic on 22:57, 24 March 21
Hi John
CPC664 Info
The rom used is a 40022
The Byte info is :-
&78 (Hex)
120 (Decimal)
Included is the Rom
Keep Safe
Ray
Thanks Ray! That will definetely help to distinguish CPC 664 from CPC 464 as obviously 664 doesn't need the boot proccess of 464 as it is equipped with Amsdos and FDC ;-)
Hi,
My CPC664 gives a value of 123 (dec).
ROM is also a 40022.
Hi have just seen that @llopis (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1728) is doing model detection for his Amstrad Diagnostics.
Maybe it can help.
https://github.com/llopis/amstrad-diagnostics/blob/42c1dd99cd86d8d3fbe8ac3739d87464fc5b8c8c/src/Model.asm
Quote from: ikonsgr on 20:52, 23 March 21
@kolleykibber (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4071), well,i don't know if you can call it "rom board", but since the PIC is equipped with 1kb EPROM, i add a few rsx commands to utilize it!
You can load data either from memory or from a binary file directly (|WROM), and then use another rsx command (|LROM) to retrieve the data! You can also access it in asm code using a simple RST3,&FC00 (on the rom number of USIFAC interface, deafult:5).
Thanks for the explanation.
I'm curious if it would be possible to serve roms from the usb using the ready signal trickery that you mention? Or would it just be too slow? Maybe page in 1k rom data into the memory to reduce reads?
Otherwise i need to get myself an MX4 expansion board!
Quote from: kolleykibber on 18:25, 25 March 21
Thanks for the explanation.
I'm curious if it would be possible to serve roms from the usb using the ready signal trickery that you mention? Or would it just be too slow? Maybe page in 1k rom data into the memory to reduce reads?
Otherwise i need to get myself an MX4 expansion board!
Well, back at last summer ,when i was developing all the functions of the board,i was planing on making such a thing,e.g. use usb stick to access 16kb rom files as extra roms, but unfortunately, speed and responce prooved to be very slow, comparing to a real ROM, so i decided to abandon it.
To have a measure of it, when you use |464 command to enable virtual amsdos/parados from PIC along with FDC controller on a CPC464, you will notice a significant delay (~50%) in responce of various Disk commands (CAT, LAOD ,RUN, SAVE ) compared to that of a CPC 6128, where no AMSDOS/PARADOS emulation is done (and FDC emulation gives slgihthly faster responces ~10-20% than with a real gotek/disk drive). Now imagine that a ROM emulation from a file accessed from a usb stick, will add extra overhead+delays, so in theory a virtual "Rom board" can be done, but in practice , responce will be so slow (i guess it will be at least ~15-20times slower than a real rom) that it will have no practical use ::)
Quote from: ajcasado on 12:41, 25 March 21
Hi,
My CPC664 gives a value of 123 (dec).
ROM is also a 40022.
Thanks for noting. What Basic version CPC 664 has? v1.0 like cpc 464 or v1.1 like cpc 6128?
Quote from: ikonsgr on 21:24, 25 March 21
Thanks for noting. What Basic version CPC 664 has? v1.0 like cpc 464 or v1.1 like cpc 6128?
Basic v1.1 like the 6128, but the basic rom is different.
RetroVirtualMachine emulator also gives 123.
Hi John
Corrected the ID Byte to 7B I had read the Hex incorrectly Grrrr
also a Photo of the USIfAC II and Voltmeter Hmnnnn
Keep safe
Ray
That's surely ok. I'm using mine, with ~4.4volts at Usifac's power pins and works perfect! ;)
Btw, in most cases voltage drop from ~5volts (usually given from a 5V PSU), happens when you use extra power leads, obviously due to the extra small impedance of the power cables.
Quote from: ajcasado on 00:46, 26 March 21
Basic v1.1 like the 6128, but the basic rom is different.
RetroVirtualMachine emulator also gives 123.
Do you have a USIfAC II board? And if yes, did you test it with a CPC 664? As far as i can remeber, i never had any feedback from someone with CPC664...
But then,CPC664 owners its kind of a... "rare spiece" :laugh:
Quote from: Audronic on 04:55, 26 March 21
also a Photo of the USIfAC II and Voltmeter Hmnnnn
Inside CPC, the voltage drops around 0.3V.
I am using a 5.2V dc power supply (from an old PDA) which results in 4.8V-4.9V.
An option could be sth like this https://aliexpress.com/item/32996444485.html
Quote from: ikonsgr on 12:27, 26 March 21
Do you have a USIfAC II board? And if yes, did you test it with a CPC 664? As far as i can remeber, i never had any feedback from someone with CPC664...
But then,CPC664 owners its kind of a... "rare spiece" :laugh:
Yes, I'm the one that sent you a PM when corrupted the PIC flash switching the usifac off and on with the MX4 motherboard PSU switch ( :picard: again). I reprogrammed it and works ok.
About being a rare species, I guess that my 664 could be the only one working in mainland african continent so definitively yes :P .
Hi @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
I continue on my investigations with your interesting piece of kit!
I've bought a few ESP-07s and have tried them on the board. But if I call |WIFI I get 'NO WiFi module detected!'.
I have a cpc6128, the ESP-07s are switched to UART (I tried program too!).
I've tried |USB on and off, before I call |WIFI. I've used the ESP-07 reset switch, before the RSX.
If I call |WIFI a second time the system crashes.
The ESP-07 is connected correctly (GND to GND) and the lights come on and you can hear the wifi signal pulsing through the CPC's speaker.
I've tried different ESP-07s
Am I doing something wrong?
Thanks!
First, usb host module MUST be "off", when using Wifi modules so definitely you DONT enable it using |USB.
Also, mind that wifi modules can draw a lot of current (up to a few 100's mAmps) so they need a decent power supply that can hold at least 4.7-4.8volts on power pins of USIFAC board.
Now,i would suggest first, to try communicate with module, using a PC terminal and a usb2serial cable, just to see if module is ok. Wifi modules usually have 115200 as default serial speed.
Then try to set USIFAC's serial port speed at 115200 using |SET command and then try |WIFI.
You can also use the small terminal i have,|COM, in order to communicate manually with module by giving AT commands.
Judging from my experience with Wifi modules,i would say that they are a bit "picky" at boot, you need to let them a few seconds to boot before trying to communicate.
Also, they don't seem to be very reliable either, i have an esp-07 and an esp-01 module that worked perfect a few months ago, but when i try to use them a few days ago, one was not responding at all, and the other, was not able to connect to the TCP server of the windows utility! I even tried to reflash them but with no success....
I do not know how do you power the ESP module but it should be powered with 3.3VFrom the photos of usifac (still waiting for mine, pls postman hurry up) I cannot see the 3.3V the regulator in usifac board.
If there is no 3.3V on usifac you could get it from the regulator of the usb board.
Also TX/RX lines for WIFI module should be 3.3VFrom the ESP side TX could probably be like it is (3.3V) and the microcontroller will read 3.3 has HIGH. For RX a simple resistor divider R1=10k R2=20k would convert it from 5V to 3.3V
Quote from: issalig on 00:50, 27 March 21
I do not know how do you power the ESP module but it should be powered with 3.3VFrom the photos of usifac (still waiting for mine, pls postman hurry up) I cannot see the 3.3V the regulator in usifac board.
If there is no 3.3V on usifac you could get it from the regulator of the usb board.
Also TX/RX lines for WIFI module should be 3.3VFrom the ESP side TX could probably be like it is (3.3V) and the microcontroller will read 3.3 has HIGH. For RX a simple resistor divider R1=10k R2=20k would convert it from 5V to 3.3V
There are "5v adapter boards" where you can use esp-01 modules without problems.Also esp-07 can be used directly with 5v supply, i note this in user's manual:
[attach=1,msg199981]
I'm using these wifi modules for years (since with 1st USIfAC board) and never had any problems, most probable all the extra circuits that required for esp modules to be "5v tollerant" are on these adapter boards. :)
:) Yes, these modules look good (1117 regulator for power and transistors for RX/TX signals) . I thought you were using normal 3.3v modules.
Hi Friends,
I design a little box with my 3D printer. for those interested....Attached the STL (2 parts and 2 buttons).
inside this archive, 2 Top cover (one for those like me who need a hole for adding a 7cm button for disk swap / one without)
pictures :
https://ibb.co/ZBcdRs3 (https://ibb.co/ZBcdRs3)
https://ibb.co/ftLkZxq (https://ibb.co/ftLkZxq)
(https://ibb.co/ZBcdRs3)
(https://ibb.co/ZBcdRs3)
++
Phil
(https://ibb.co/ftLkZxq)
(https://ibb.co/ZBcdRs3)
Hi, is it possible to copy from and to a .dsk in USB drive and real floppy in FDD please ?
just one question John.
I noticed on a CPC464, after a disk mount and play, or when you simply do nothing, when you push the Pause button, and reset, screen flashes grey like a bad Z80 Rom. Even if you turn the computer completly off and restart after a few seconds, the same happens until you push the Pause Button again.
When you do a hard reset, the rom of the cart is not reseted ?
Hello,
Can you make a pair of drawings where we can watch how we must use esp-07 and esp-01 with Usifac??
Excuse, but my English isn't good and some things I don't understand very well.
Thank you.
Quote from: ikonsgr on 09:50, 27 March 21
There are "5v adapter boards" where you can use esp-01 modules without problems.Also esp-07 can be used directly with 5v supply, i note this in user's manual:
I'm using these wifi modules for years (since with 1st USIfAC board) and never had any problems, most probable all the extra circuits that required for esp modules to be "5v tollerant" are on these adapter boards. :)
Quote from: Philippe Lardenois on 20:20, 27 March 21
just one question John.
I noticed on a CPC464, after a disk mount and play, or when you simply do nothing, when you push the Pause button, and reset, screen flashes grey like a bad Z80 Rom. Even if you turn the computer completly off and restart after a few seconds, the same happens until you push the Pause Button again.
When you do a hard reset, the rom of the cart is not reseted ?
Great, so the pause button works perfectly.
Quote from: WrathOfThePixel on 19:06, 27 March 21
Hi, is it possible to copy from and to a .dsk in USB drive and real floppy in FDD please ?
You can't copy files from a dsk image directly, but you can first copy the entire image to a real disk (using |DSK), and then, use |2PC command,to copy files containing in the dsk image to the usb device.
Also, you can use |COPY to do the opposite, copy files from usb device to the real disk.
Quote from: Fran123 on 21:00, 27 March 21
Hello,Can you make a pair of drawings where we can watch how we must use esp-07 and esp-01 with Usifac??
Excuse, but my English isn't good and some things I don't understand very well.Thank you.
Check the user's guide:
https://www.dropbox.com/preview/Amstrad%20serial%20port%20II/Amstrad%20CPC%20Serial%20Interface%20II%20User%20Guide.pdf?role=personal
I have detailed info and instructions regarding setup and use of Wifi modules with USIfAC II! ;)
Sorry, I didn't understand GUNHEAD note about my question.
But from what I understand, a hard reset of the CPC doesn't produce a full reset of the USIFAC card...That's it ?
2 others questions/remarks, is there a way to know what version of the eeprom we have before updating IT ? and do you plan a better Emualtion of disks (protected disks or CPM disks for example) ? If you really want to kill our Goteks... :P
[/size][size=78%]Thanks anyway [/size]
Hi Philippe,
I believe the pause button works by physically pulling Pin 39 (Ready) to ground, thereby stalling the Z80 in the CPC until it is released (pin 39 connects to the /WAIT pin on the Z80).
That's why it's unaffected by resetting the CPC or the USifAC.
Quote from: Skunkfish on 19:24, 28 March 21Hi Philippe,
I believe the pause button works by physically pulling Pin 39 (Ready) to ground, thereby stalling the Z80 in the CPC until it is released (pin 39 connects to the /WAIT pin on the Z80).
That's why it's unaffected by resetting the CPC or the USifAC.
Exactly that! ;)
Quote from: Philippe Lardenois on 17:56, 28 March 21
Sorry, I didn't understand GUNHEAD note about my question.
But from what I understand, a hard reset of the CPC doesn't produce a full reset of the USIFAC card...That's it ?
2 others questions/remarks, is there a way to know what version of the eeprom we have before updating IT ? and do you plan a better Emualtion of disks (protected disks or CPM disks for example) ? If you really want to kill our Goteks... :P
Thanks anyway
Pause switch, just enables the WAIT signal on Z80 CPU, thus Amstrad will wait as long as Switch is enabled.
Reset button on the other hand, is the one that really resets BOTH amstrad & USIfAC board.
About FDC emulation, i'm afraid this is as far as it can goes, but apart from a few hard protected dsk game images (which most certain you can find them in cracked versions ...;D ), everything else seem to work fine! You can access almost any kind of dsk image existed, from usual Amsdos images, up to CP/M disks, PARADOS disks, even spectrum +3 and PCW disks should be readable too! ;) Mind also that, |DSK command which transferrs an image to a real disk, has almost the same compatibility (as i finally got rid of amsdos routines and use low level custom routines that communicate directly with 765 FDC).
Now
i consider USIfAC II a "gotek killer" for amstrad, not so much for offering the "perfect/load everything" compatibility with dsk images that gotek offers (thanks to the extraordinay work of keir freiser, the creator of Flash FLoppy, the firmware that all gotek drives are flashed with),
but mostly for EASE of use and easily manage 100's (or even 1000's) of dsk images, especially now with the addition of the Basic loader creator utility, which practically eliminates the need of typing RSX commands!
Just imagine that you have a usb stick with 100's of dsk images in it, and you want to access a specific image using gotek....
Endless pressings of gotek buttons to find the image you want, and even if you have popular addons, like rotary enconders or oled screens ,
you will still end up turning left-right the enconder (like trying to tune with a radio station :laugh: ), and
continiously struggling to read the image names from the tiny oled screen... ;D
Same thing using USIfAC is a "piece of cake": just give a filtered |CAT command and you will instantly get the image (or a very small list of images) you want!
BUT, the thing is, that
USIfAC II, is not just a "gotek replacement", it is MUCH more than a mere floppy drive emulator:-
It transforms any connected usb device, to a HUGE HDD for Amstrad cpc, where you can load/save/delete files directly (
at ~5 times faster than gotek), as change/make/delete directories too!
-
It offers many extra functionality, like use of bluetooth/wifi modules, copy files between flopy disks and usb device, copy images to real disks, format disks etc.
-
You can use it directly with Amstrad CPC 464 (gotek connects only to 664/6128, for 464 you need to have a rather expensive DDI like interface)
-
It costs MUCH less than a gotek drive and extra equipment needed, for external (ribbon cable+power cable) connection or internal (cable adapter+front face) replacement of the 3" drive! Especially if you want to have the extra addons like oled screen+rotary encoder, total cost for a "full Gotek pack" for Amstrad, can be more than 3 times the cost of USIfAC II!
Or, in 2 words...
A TRUE GOTEK KILLER FOR AMSTRAD CPC! :P
Very true! Why should a CPC expansion care about some weird disc formats of other systems?
It's for CPC and that's good that way! Amazing how U2 does evolve every week!
Quote from: ikonsgr on 23:34, 26 March 21
First, usb host module MUST be "off", when using Wifi modules so definitely you DONT enable it using |USB.
Also, mind that wifi modules can draw a lot of current (up to a few 100's mAmps) so they need a decent power supply that can hold at least 4.7-4.8volts on power pins of USIFAC board.
Now,i would suggest first, to try communicate with module, using a PC terminal and a usb2serial cable, just to see if module is ok. Wifi modules usually have 115200 as default serial speed.
Then try to set USIFAC's serial port speed at 115200 using |SET command and then try |WIFI.
You can also use the small terminal i have,|COM, in order to communicate manually with module by giving AT commands.
Judging from my experience with Wifi modules,i would say that they are a bit "picky" at boot, you need to let them a few seconds to boot before trying to communicate.
Also, they don't seem to be very reliable either, i have an esp-07 and an esp-01 module that worked perfect a few months ago, but when i try to use them a few days ago, one was not responding at all, and the other, was not able to connect to the TCP server of the windows utility! I even tried to reflash them but with no success....
Turns out my DM-101 ( ESP-07 ESP-8266 ) modules had no firmware on them at all. The flashing process is a bit involved. These modules seem to work only with old firmware. ESP_8266_BIN0.92.bin (attached) was the one I got working. It's possible that newer firmware will work, but I had no joy. I set up the access point though the usb-ttl and then stuck it in the usifac.
But it's recognised by the usifac now and I can communicate with it through the 464. So all is good :)
@ kolleykibber Great! :)
Btw, you could do all the Wifi module setup directly from Amstrad using |WIFI too. The Utility first checks for ESP's serial port speed and ask you if you want to change it, then it asks for Access point name&password, and after it is connected, asks for ip address and port no. of the tcp server to be connected (these are given on the windows utility i made for USIfAC II, but i suppose it could work with any other TCP server you might want to use for ;) )
Quote from: ikonsgr on 20:30, 28 March 21Pause switch, just enables the WAIT signal on Z80 CPU, thus Amstrad will wait as long as Switch is enabled.
I thought that you cannot maintain *WAIT signal low indefinitely because it prevents the DRAM to be refreshed.
Quote from: ikonsgr on 20:30, 28 March 21
Pause switch, just enables the WAIT signal on Z80 CPU, thus Amstrad will wait as long as Switch is enabled.
Reset button on the other hand, is the one that really resets BOTH amstrad & USIfAC board.
About FDC emulation, i'm afraid this is as far as it can goes, but apart from a few hard protected dsk game images (which most certain you can find them in cracked versions ... ;D ), everything else seem to work fine! You can access almost any kind of dsk image existed, from usual Amsdos images, up to CP/M disks, PARADOS disks, even spectrum +3 and PCW disks should be readable too! ;) Mind also that, |DSK command which transferrs an image to a real disk, has almost the same compatibility (as i finally got rid of amsdos routines and use low level custom routines that communicate directly with 765 FDC).
Now i consider USIfAC II a "gotek killer" for amstrad, not so much for offering the "perfect/load everything" compatibility with dsk images that gotek offers (thanks to the extraordinay work of keir freiser, the creator of Flash FLoppy, the firmware that all gotek drives are flashed with), but mostly for EASE of use and easily manage 100's (or even 1000's) of dsk images, especially now with the addition of the Basic loader creator utility, which practically eliminates the need of typing RSX commands!
Just imagine that you have a usb stick with 100's of dsk images in it, and you want to access a specific image using gotek....
Endless pressings of gotek buttons to find the image you want, and even if you have popular addons, like rotary enconders or oled screens , you will still end up turning left-right the enconder (like trying to tune with a radio station :laugh: ), and continiously struggling to read the image names from the tiny oled screen... ;D
Same thing using USIfAC is a "piece of cake": just give a filtered |CAT command and you will instantly get the image (or a very small list of images) you want!
BUT, the thing is, that USIfAC II, is not just a "gotek replacement", it is MUCH more than a mere floppy drive emulator:
- It transforms any connected usb device, to a HUGE HDD for Amstrad cpc, where you can load/save/delete files directly (at ~5 times faster than gotek), as change/make/delete directories too!
- It offers many extra functionality, like use of bluetooth/wifi modules, copy files between flopy disks and usb device, copy images to real disks, format disks etc.
- You can use it directly with Amstrad CPC 464 (gotek connects only to 664/6128, for 464 you need to have a rather expensive DDI like interface)
- It costs MUCH less than a gotek drive and extra equipment needed, for external (ribbon cable+power cable) connection or internal (cable adapter+front face) replacement of the 3" drive! Especially if you want to have the extra addons like oled screen+rotary encoder, total cost for a "full Gotek pack" for Amstrad, can be more than 3 times the cost of USIfAC II!
Or, in 2 words... A TRUE GOTEK KILLER FOR AMSTRAD CPC! :P
Hi John, thanks for the clarifications.
Agree with all the things you said. It's a great tool for our 464 especially. Thanks for that, no offense as your tools are always great :D
You did not answer to the question : how to check the version numer of the program flashed into the PIC ?
cheers.
Quote from: ajcasado on 10:00, 29 March 21
I thought that you cannot maintain *WAIT signal low indefinitely because it prevents the DRAM to be refreshed.
Well,i think that DRAM refresh is made by 40010 Gate Array Chip, and because this is working even when Z80 is paused, this might explain the fact that you can pause Amstrad without time limit.
Quote from: Philippe Lardenois on 12:54, 29 March 21
You did not answer to the question : how to check the version numer of the program flashed into the PIC ?
Well, you can't, at least not directly using some command. But there are indirect ways to find out, for example, on CPC 464, if you get multiple resets on "cold start", then you have a newer firmware installed. Also, boards sent after february have the latest firmware too.
Hi John
Would it be possible to Put the revision number in the |help text ?
Keep Safe
Ray
Well, it would be easier to use the |STAT command, i could add a remark with the firmware rev. number (which will be "Hard coded" with each different revision), but of course you will need the new frimware for the board to see it
Hi all, I made some tests using USIfACII for calling a BBS with success ^^
I use TCPSER for emulate a modem and made a Telnet connection, (maybe I will try with a real modem) => https://github.com/go4retro/tcpser
https://ibb.co/sKkydwW
BBS => http://amstrad.simulant.uk/
It's fun ;D
A small firmware update (_3a):
- On CPC 464, you can (again :) ) eliminate giving |USB after Reset, this time i think i made it work right (no "bad command" messages upon reset any more...)! :D
- Amsdos/Parados Emulation is now saved into PIC's EEPROM, so Board will always "remember" your choice.
- New ability:choose if you want to Return to Usb device Root directory after Reset (until now,board always remembered the directory you were before reset), just give OUT &FBD1,66 to enable or OUT &FBD1,65 to disable. Again, board will "Remember" your choice.
This could be very usefull if you use the BASIC loader listings mentioned above to load Games/programs, as after RESET, you will automatically return to Root directory (where all the BASIC loader programs are), without needing to give |CDR command! ;)
- |STAT command now shows Firmware revision and if "return2root directory after Reset" is enabled:
[attach=1,msg200316]
The "Direct Mode 1 Enabled" message on boot screen, is shown when you Reset CPC464 with Usb module enabled, and then, you can directly access usb stick, without giving any extra commands! ;)
Note also the additions of firmware rev. number and Return2root dir after reset, mentioned above.
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Unfortunately the new Firmware continually reboots ?
This is on a STANDARD CPC464 (No Modifications)
Late Update :- This also happens on a STANDARD CPC6128.
I did not have a chance to do the OUT FBD2,5 ?
The screen shows the USBIfAC II and then reboots.
Thanks
keep Safe
Ray
Well, i've tried the new firmware with all 3 Amstrad CPCs i have, two CPC6128 (one with dual amsdos/parados rom and a modern CMOS Z80/20Mhz) and one Schneider CPC464, and in all cases worked fine, so most probable the problem you mention doesn't have to do with firmware.
In most cases, such behavior is more hardware related, than software. For example, there might be connection problems, between Amstrad and USIFAC II board (for example, bad connection of the ribbon cable with the edge connector). Also, there might be some kind of short circuit somewhere that causes these repeated reboots.
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Ok Point taken
I have a second USIfAC II board I will set that up and see what happens.
The 464 has pin headers soldered to the expansion and an appopriate cable.
The 6128 is a standard edge connector and a standard cable.
Keep Safe
Ray
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Ok have setup the second board and the same result using 3a (I am NOT having problems with version 3 √√√√)
some information using MPLAB IPE below :-
The CP=OFF Checksum is different for Version 3a ??
18f47q10 Version 3 Firmware Checksums:- shown Using MPLAB IPE
CP=OFF Checksum = CD79
Below that
Checksum = CD79
I am able to Verify this Firmware after programming √√√√. GOOD
The faulty one is below - 3a ???
18f47q10 Version 3a Firmware Checksums:-
CP=OFF Checksum = FAD0. ??? ??? ??? ??
Below that
Checksum = 13A6
I am UNABLE to Verify this Firmware after programming. XXXXX
I can write the firmware and it says verified BUT
When I do a seperate Verify Pass it FAILS (4 Chips Tested) ??? ?
Perhaps there is a concern with the File 18f47q10 Version 3a
Thanks
Keep Safe
Ray
Yes, checksum of 3a version is CD79, but it seems that i enabled code protection when i compiled the hex file, that's why you can't verify it.
So, since previous firmware works ok, and you only have problems with 3a (when it works perfect on all Amstrads i have), the only logical thing to assume, is that somehow, your programmer+software can't handle properly code protected hex files ::)
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Ok I don't know how to write ? Protected hex files.
Perhaps as I use the same Programmer software as what was recommended you could tell me what I have to do to write them correctly ?
I spent some hours trying to find a solution but was unable to write a working file ?
Or as an option release an UnProtected file as none of the other files that you have release are Protected ?
Thanks
Keep Safe
Ray
Will firmware 3a work with my older (non-white) board?
I assume so, I'm planning to update the firmware and install a push button today.
There is no actual hardware difference between the old boards and the new white one, appart from the added dsk swap button, so you can perfectly use the latest firmware with old boards too, but if you don't have the button, then all extra rsx commands for supporting multiple dsk image access will be useless ::)
@ikongsgr
I just flashed the firmware with 3a version from page 1 and same problem Audronic has.
keep reseting, no access to CPC and bad Checksum.
Don't have the 3.0 firm on computer, where to download it ? or can we have the actual firm unprotected ?
Tried to reflash with the 2D and OUT &FBD2,5 is ok). so Erase, reflash with 3A and no luck...
helppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp. I mounted the Swap Button. Would like to use it.
Thanks.
Ok,i just confirm the problem myself.
It seems that using pickit3 to update new firmware is causing this problem, but everything works ok, when you use PICKIT4 programmer (which i'm lately using) ::)
Anyway, i've correct the problem, and now you should be able to use the latest _3a firmware (i uploaded at 1st post) with PICKIT3 programmer too.
Sorry for the incovenience! ;)
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Well done.
I will test the 3a Update tomorrow.
Thanks for all your work on this project
Keep Safe
Ray
Great, thanks. Gonna try it now and tell you if it's ok
EDIT : Ok tried it and working well. But I need to check wires on my Swap button as it doesn't swap... :P
Thanks
Sorry
but getting MAD with the SWAP Button
solder GND to WIFI GND connection and other to pin on the PIC.
When I press the button, it sometimes swap to next disk, sometimes jump from disk 1 to 4, and most of the time freeze the CPC or blurry the screen or send a TAPE CAT command...
What's wrong according to you ?
attached a photo of the cart. video too if interested https://1fichier.com/?u5ob5v6wlly6znwazj0s
Well, it sounds like bad contact to me. I can't see form photo if you have soldered the cable to PIC's pin, but it's better to do it from the bottom of the board by soldering the cable to socket's pin. Mind also that, while button is pressed, Amstrad freezes, and also you should have dsk images mounted on at least slot 1 & another slot (2-4), in order for the swap to work.
And don't forget you can check current state by giving |SMG.
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Hi John
Well done it works well.
Tested on a CPC464, and a CPC6128.
I did not have to do an " out &fbd2,5 " ( ROM 5) on the CPC464 Only as it automatically does this to ROM 4.
Does it matter if the Interface Rom is 4 or 5 ?
Or do I just leave the default ROM 4 for version 3a
Thanks
Keep Safe
Ray
@Audronic (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1169), as long as there is no other device using rom 4, it doesn't make any difference.
After reflashing PIC, and according to the initial value of the EEPROM byte where the rom number is stored, it might indeed work directly, without needing to give OUT &FBD2,5 to set it.
In anycase, you could give the out command just to ensure that board gets the correct rom number, afterall, this needs to be done only once after re-flashing pic :)
I've added a small txt file (https://www.dropbox.com/s/ux5ujgy2kn8ilkc/help.txt?dl=0) which includes the |HELP text, so you can easily print all the RSX commands in a single paper for quick reference! ;)
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
I will set my systems up for your default of ROM 5 .
Thanks for the Help documentation it is appreciated.
Keep up the good work
Keep Safe
Ray
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) please as I'm a total noob, what is the best GND pin that I should solder the cable for disk swap button ?
I don't want to fire the cart...
tested the button putting the GND to a metal thing and it works.
maybe my button has too much impedance or something like that...
so I prefer asking you
[SOLVED] I forgot to activate it with OUT &FBD2,5 (as described in https://www.dropbox.com/s/pymv4sbxch3psin/Updating%20the%20Firmware%20of%20USIfAC%20II%20via%20ICSP%20v1.pdf?dl=0 (https://www.dropbox.com/s/pymv4sbxch3psin/Updating%20the%20Firmware%20of%20USIfAC%20II%20via%20ICSP%20v1.pdf?dl=0))
Hi all, finally postal service has delivered my USIFAC (last green version I guess)
But the problem is I am getting "Unknown command" for each RSX function I call |HELP |CAT , ...., etc
At startup I do not get any USIFAC message, is it normal? Reset and pause button work.Votlage on + - is 4.6V which I assume is enough
I am going to clean again the expansion port contacts.
Any hint?
BR.
Does it say "USIfAC II Enhanced" on Bootscreen ? if not, try a "OUT &FBD2,5" to set the rom to slot 5 and restart the USIfAC with the reset button ... worth a try
Quote from: Philippe Lardenois on 15:34, 11 April 21
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) please as I'm a total noob, what is the best GND pin that I should solder the cable for disk swap button ?
I don't want to fire the cart...
tested the button putting the GND to a metal thing and it works.
maybe my button has too much impedance or something like that...
so I prefer asking you
On my development board (it's one of the 1st pcbs i designed), i'm using the same gnd pin you used (gnd from the 4pin WiFi module connector) but i got a small cable soldered at the bottom of the board that goes to a button exactly the same as the reset button.
Hi all, I keep on exploring USIFAC2 and now I want to connect to wifi
I have selected 115200 bps with OUT &FBD1,16 and |STAT says it is like this but |WIFI gets "NO Wifi module detected!" :( I am using an ESP-07 WIFI board with the switch in the UART position (down) and the led is ON.
I had to flash the file @kolleykibber (https://www.cpcwiki.eu/forum/profile/?u=4071) provided, and now it is communicating BUT SSID and PASSWD is skipped ??? (see atached image)
Connecting to the module from the PC, it seems that firmware does not have AT+CWJAP neither AT+CWLAP and maybe USIFAC is ignoring it and thus it is not asking for SSID/PASS
My version of AT firmware is
AT+GMR
00170901Which version are you using?
YES, my RCA conversion is horrible)
You can try |COM to get a small terminal that can be used for giving AT commands. I used various v1.6 and v1.7 firmwares for esp8266 modules, either esp-01 or esp-07.
bTW, SSID and passwd is skipped, when the module is already connected to an access point (usually router's), so it directly asks for ip and port no. , and tries to connect to a TCP server (a tcp server is activated every time you run my windows utility for usifac ii, but i suppose it could work with any other tcpserver too :) )
Ok, in addition to the auto mount script from ikonsgr I wrote a little basic program that let's you easily switch between DSK images to all 4 Slots and after that just use them with the image switch button on the USIfAC II.
So, how does this work ?
First of all, put the USB Stick in your PC, open a command prompt and navigate to your directory with some DSK files in it. Once there, just do : DIR *.DSK /-N > INDEX.TXT
Be sure not to forget the "/-N" option, because we need 8+3 naming for the CPC to recognize the image files. After that just add the NC.BAS file (attached to this post) in the same directory as the INDEX.TXT !
Now put the USB Stick back into the USIfAC II , navigate to the folder where those files are and simply type RUN"NC.BAS". After you finished using the DSK images, just do a reset on USIfAC, type |USB and RUN"NC.BAS" again to change your chosen images. This is nothing fancy or well coded, it just helps to save time and typing :)
Of course you can do that for all the directories on your USB Stick if wanted. You can also edit the INDEX.TXT with any editor and put DSK files in there if you want, just be sure to stick to the 8+3 filename.
Limitations : only 60 DSK images in a folder are allowed
Finally, "3rd party support" for USIfAC II started!
Well done! ;)
btw, if you want, we could add this in the download link of usifac ii windows utility prorgam,and why not, add a section in User's guide too! ;)
And here is the Basic utility in ascii text form:
[attach=1]
In this form, you can easily edit/view the listing from your PC and run it directly to your Amstrad! ;)
Quote from: ikonsgr on 22:49, 15 April 21
Finally, "3rd party support" for USIfAC II started!
Well done! ;)
btw, if you want, we could add this in the download link of usifac ii windows utility prorgam,and why not, add a section in User's guide too! ;)
You are of course free to do so ... I'm still working on larger directory support with more DSK files but the main structure stays the same... And of course still investigate the issue we wrote about ;)
Quote from: kolleykibber on 22:18, 28 March 21
Turns out my DM-101 ( ESP-07 ESP-8266 ) modules had no firmware on them at all. The flashing process is a bit involved. These modules seem to work only with old firmware. ESP_8266_BIN0.92.bin (attached) was the one I got working. It's possible that newer firmware will work, but I had no joy. I set up the access point though the usb-ttl and then stuck it in the usifac.
But it's recognised by the usifac now and I can communicate with it through the 464. So all is good :)
Hi, got the same problem. Can we flash the module with the Pickit 3.5 ? or do you have a noob procedure for us to do that ?
Thanks
Quote from: Philippe Lardenois on 16:47, 16 April 21
Hi, got the same problem. Can we flash the module with the Pickit 3.5 ? or do you have a noob procedure for us to do that ?
Thanks
No, Philippe, this should be done with a usb-serial module like this one https://es.aliexpress.com/item/1005001510943320.html
In particular I use the black one with CP2102 but you could use others for example PL2303HX that is used in the documentation for Direct Serial Connection https://www.dropbox.com/sh/ezzga2dppm6jlm7/AACwFC_rv2QatWh_ndKc9fhma?dl=0&preview=Amstrad+CPC+Serial+Interface+II+User+Guide.pdf
For flashing it you can find instructions in http://nerdclub-uk.blogspot.com/2016/09/upgrading-firmware-in-esp8266-wifi.html
But I guess, maybe your module is OK and you just need to change the baudrateIf it is reporting strange characters (it is working but in an unknown baudrate probably)
It looks that some of the modules use 9600bps and also the "exotic" 74880bps , so you could give a try to set that baudrate in the arduino serial monitor or in Realterm or in CPC with |TER
Additionally, in my case I needed to set station mode for wifi AT+CWMODE=1 and then AT+CWJAP="WIFINAME","YOURPASS"Then , setup baudrate AT+CIOBAUD=115200 and the same speed in USIFAC
Thanks. Gonna look for it. Stay tuned.
Phil
Quote from: Philippe Lardenois on 16:47, 16 April 21
Hi, got the same problem. Can we flash the module with the Pickit 3.5 ? or do you have a noob procedure for us to do that ?
Thanks
Download this: https://www.dropbox.com/s/vkq6ghmf39a0qx7/ESP8266_flasher.zip?dl=0
Just run "esp8266_flasher.exe", click "BIN" button and select the included: "HS06F014 ESP-01S.bin", set your com port number and press "download".
This must be the easiest way to flash a wifi module.
Btw, i found out why mysteriously all my wifi modules stopped working: firewall blocked access to windows utility TCP server (i suspect the antivirus involved in this...)
So, if your Wifi module can't connect to PC check windows firewall settings, if there is any inbound rule that block access of the Amstrad utility.
Quote from: issalig on 18:13, 16 April 21
But I guess, maybe your module is OK and you just need to change the baudrateIf it is reporting strange characters (it is working but in an unknown baudrate probably)
It looks that some of the modules use 9600bps and also the "exotic" 74880bps , so you could give a try to set that baudrate in the arduino serial monitor or in Realterm or in CPC with |TER
Additionally, in my case I needed to set station mode for wifi AT+CWMODE=1 and then AT+CWJAP="WIFINAME","YOURPASS"Then , setup baudrate AT+CIOBAUD=115200 and the same speed in USIFAC
Well, you can do all that, by simply giving |WIFI. There is also no need to preset wifi module's speed to usufac's serial port speed, as program will scan all available speeds automatically and set to current speed of the wifi module (i simply give an AT command and check respond, if it's the right one then obviously this is the correct serial port speed! ;) btw, the |WIFI utility is in BASIC, so it can be a good source for learning too! ;))
After that, you'll be asked if you want to change the speed, and then set Access point name+password (this is ommited if module is already connected to an access point), and finally establish a TCP conection by giving ip address+port of a tcp server.
The only thing that you need to take care, is that, after initial power up (of Amstrad+usifac+wifi module), you should wait for a few seconds for the wifi module to boot properly, and then give "|WIFI" command. If you give the command too quick, you might get a lot of garbage on screen, even hang-ups and resets, although no harm is done with that, as you can simply reset amstrad and give "|WIFI" again! ;)
Quote from: ikonsgr on 21:16, 17 April 21
btw, the |WIFI utility is in BASIC, so it can be a good source for learning too! ;) )
Nice info @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) but how can this BASIC code be listed? (BTW, I still have to learn how to program RSX commands :) )
Well, after finishing setting up wifi module, you just give "LIST" at basic prompt, and you will get the BASIC listing! :D
And here is the asm code for the |WIFI command:
data_size equ 3465
addr equ &170
org &c000
ld hl, setwifi_code
ld de, addr
ld bc, data_size
ldir
ld a ,#FB
in a,(#Dc)
ld l, a
ld h,&ae
ld de,data_size+&170
ld B,4
patch_mems: ;length+1678+368 (&170)
ld (HL),e
INC HL
LD (HL),d
INC HL
dec b
jr nz,patch_mems
ld a,l
cp &6e
jp z,runcommand
ret
runcommand:
ld hl,&ae29
ld a,0
ld (hl),a
ld hl, run_code
ld de, &7900
ld bc, 8
ldir
jp &7900
Run_code:
defb 14,0,33,149,234,205,27,0
setwifi_code:
defb 19,0,10,0,173,32,16,1,130,32,14,32,32,32,32,32,32,32,0,31,0,17,0,185,32,28,208,251,44,25,43,1,185,32,28,208,251,44,25,43,1,185
defb 32,28,208,251,44,25,43,0,60,0,20,0,147,32,3,0,0,83,208,40,25,10,41,1,13,0,0,115,101,114,115,112,101,101,228,239,25,24,1,13,0
defb 0,99,117,114,115,112,101,101,228,239,255,11,40,28,221,251,41,32,32,32,32,32,32,32,32,32,0,25,0,30,0,162,32,14,44,15,1,162,32,16,44
defb 14,1,186,32,16,1,138,32,32,32,0,10,0,40,0,159,32,30,136,19,0,36,0,50,0,3,0,0,225,239,34,65,84,43,67,87,77,79,68,69,61
defb 49,34,1,159,32,30,176,4,32,32,32,32,32,32,32,0,19,0,100,0,197,32,115,101,114,105,97,108,32,115,101,116,117,112,0,60,0,110,0,138,1
defb 216,32,35,14,44,25,18,44,25,55,44,17,44,22,1,124,0,83,84,65,212,1,216,32,35,14,44,25,18,44,25,55,44,18,44,22,1,138,1,216,32
defb 35,14,44,15,44,25,79,44,15,44,25,25,0,60,0,115,0,169,32,25,22,44,19,1,191,34,83,101,116,32,110,101,119,32,115,112,101,101,100,63,32
defb 40,89,47,78,41,34,1,131,32,28,3,187,1,13,0,0,111,102,102,115,101,244,239,14,32,32,32,32,32,32,32,0,34,0,116,0,161,32,255,10,40
defb 25,43,41,239,14,32,235,32,30,120,0,32,32,32,32,32,32,32,32,32,32,32,32,32,0,41,0,117,0,161,32,255,10,40,25,46,41,239,14,32,235
defb 32,13,0,0,111,102,102,115,101,244,239,25,11,1,160,32,30,84,1,32,32,32,32,32,0,10,0,118,0,160,32,30,116,0,0,58,0,120,0,191,1
defb 191,34,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,80,114,101,115,115,58,34,1,158,32,13,0,0,248,239
defb 21,32,236,32,25,14,32,32,32,32,0,75,0,130,0,195,32,3,0,0,83,208,40,13,0,0,248,245,20,41,1,169,32,25,32,44,13,0,0,248,1
defb 191,32,34,60,34,59,172,40,255,25,40,13,0,0,216,245,20,41,44,16,44,15,41,59,34,62,58,34,59,3,0,0,83,208,40,13,0,0,248,245,20
defb 41,32,32,0,11,0,140,0,176,32,13,0,0,248,0,60,0,160,0,140,32,57,54,48,48,44,53,55,54,48,48,44,49,49,53,50,48,48,44,50,51
defb 48,52,48,48,44,52,54,48,56,48,48,44,53,55,54,48,48,48,44,57,50,49,54,48,48,44,49,48,54,53,54,48,48,0,21,0,170,0,13,0,0
defb 115,101,114,115,240,239,14,1,131,32,28,3,187,0,51,0,180,0,161,32,255,10,40,25,64,41,239,14,32,235,32,13,0,0,115,101,114,115,240,239,25
defb 12,1,3,0,0,83,208,239,34,57,54,48,48,34,32,32,32,32,32,32,32,32,32,0,54,0,190,0,161,32,255,10,40,25,65,41,239,14,32,235,32
defb 13,0,0,115,101,114,115,240,239,25,15,1,3,0,0,83,208,239,34,53,55,54,48,48,34,32,32,32,32,32,32,32,32,32,32,32,0,52,0,200,0
defb 161,32,255,10,40,25,57,41,239,14,32,235,32,13,0,0,115,101,114,115,240,239,25,16,1,3,0,0,83,208,239,34,49,49,53,50,48,48,34,32,32
defb 32,32,32,32,32,32,0,51,0,210,0,161,32,255,10,40,25,56,41,239,14,32,235,32,13,0,0,115,101,114,115,240,239,25,17,1,3,0,0,83,208
defb 239,34,50,51,48,52,48,48,34,32,32,32,32,32,32,32,0,50,0,220,0,161,32,255,10,40,25,49,41,239,14,32,235,32,13,0,0,115,101,114,115
defb 240,239,25,18,1,3,0,0,83,208,239,34,52,54,48,56,48,48,34,32,32,32,32,32,32,0,54,0,230,0,161,32,255,10,40,25,48,41,239,14,32
defb 235,32,13,0,0,115,101,114,115,240,239,25,19,1,3,0,0,83,208,239,34,53,55,54,48,48,48,34,32,32,32,32,32,32,32,32,32,32,0,44,0
defb 240,0,161,32,255,10,40,25,41,41,239,14,32,235,32,13,0,0,115,101,114,115,240,239,25,21,1,3,0,0,83,208,239,34,57,50,49,54,48,48,34
defb 0,51,0,250,0,161,32,255,10,40,25,40,41,239,14,32,235,32,13,0,0,115,101,114,115,240,239,25,23,1,3,0,0,83,208,239,34,49,48,54,53
defb 54,48,48,34,32,32,32,32,32,32,0,25,0,24,1,161,32,13,0,0,115,101,114,115,240,239,14,32,235,32,160,32,30,180,0,0,54,0,44,1,3
defb 0,0,193,239,34,65,84,43,85,65,82,84,95,68,69,70,61,34,244,3,0,0,83,208,244,34,44,56,44,49,44,48,44,48,34,32,32,32,32,32,32
defb 32,32,32,32,32,32,32,0,33,0,54,1,159,32,30,176,4,1,185,32,28,209,251,44,13,0,0,115,101,114,115,240,1,185,32,28,209,251,44,15,0
defb 25,0,64,1,158,32,13,0,0,233,239,15,32,236,32,25,100,1,176,32,13,0,0,233,0,110,0,84,1,216,32,35,16,44,15,44,25,79,44,25,21
defb 245,13,0,0,79,70,70,83,69,212,44,25,25,245,13,0,0,79,70,70,83,69,212,1,186,32,35,16,44,14,1,187,32,35,16,44,15,1,216,32,35
defb 17,44,15,44,25,79,44,25,19,245,13,0,0,79,70,70,83,69,212,44,25,20,245,13,0,0,79,70,70,83,69,212,1,186,32,35,17,44,14,1,187
defb 32,35,17,44,15,1,159,32,30,208,7,0,37,0,86,1,3,0,0,225,239,34,65,84,43,67,73,80,77,79,68,69,61,49,34,1,159,32,30,176,4
defb 32,32,32,32,32,32,32,0,28,0,89,1,3,0,0,225,239,34,65,84,43,67,73,80,83,69,78,68,34,1,159,32,30,176,4,0,55,0,94,1,169
defb 32,25,30,44,25,22,245,13,0,0,79,70,70,83,69,212,1,191,34,87,105,70,105,32,77,111,100,117,108,101,32,99,111,110,110,101,99,116,101,100,33
defb 34,32,32,32,32,32,32,32,0,17,0,104,1,131,32,28,3,187,1,152,32,32,32,32,32,0,31,0,176,4,197,32,83,69,78,68,32,65,84,32,67
defb 79,77,77,65,78,68,83,32,82,79,85,84,73,78,69,0,24,0,196,4,158,32,13,0,0,235,239,15,32,236,32,255,14,40,3,0,0,225,41,0,29
defb 0,206,4,185,32,28,208,251,44,255,1,40,172,40,3,0,0,193,44,13,0,0,203,44,15,41,41,0,11,0,216,4,176,32,13,0,0,203,0,24,0
defb 226,4,185,32,28,208,251,44,28,13,0,1,185,32,28,208,251,44,28,10,0,0,12,0,236,4,3,0,0,193,239,34,34,0,6,0,246,4,201,0,24
defb 0,0,5,197,32,83,69,78,68,32,84,69,88,84,32,82,79,85,84,73,78,69,0,25,0,60,5,158,32,13,0,0,235,239,15,32,236,32,255,14,40
defb 3,0,0,225,41,32,0,38,0,70,5,185,32,28,208,251,44,255,1,40,172,40,3,0,0,193,44,13,0,0,203,44,15,41,41,32,32,32,32,32,32
defb 32,32,32,0,14,0,80,5,176,32,13,0,0,203,32,32,32,0,36,0,85,5,161,32,13,0,0,99,114,108,230,238,14,32,235,32,185,32,28,208,251
defb 44,25,13,1,185,32,28,208,251,44,25,10,0,36,0,90,5,191,32,35,15,44,255,3,40,25,10,41,244,255,3,40,25,13,41,1,3,0,0,225,239
defb 34,34,32,32,32,32,32,0,6,0,100,5,201,0,22,0,208,7,197,32,87,73,70,73,32,67,79,78,78,69,67,84,73,79,78,0,22,0,210,7,3
defb 0,0,193,239,34,65,84,69,48,34,1,159,32,30,176,4,0,12,0,213,7,185,32,28,209,251,44,15,0,10,0,218,7,159,32,30,184,11,0,10,0
defb 223,7,131,32,28,3,187,0,32,0,224,7,161,32,13,0,0,83,84,65,84,85,211,239,14,32,235,32,13,0,0,83,84,65,84,85,211,239,15,0,40
defb 0,228,7,178,32,13,0,0,115,116,97,116,117,243,32,160,32,30,2,8,44,30,152,8,44,30,238,7,44,30,152,8,44,30,2,8,32,32,0,6,0
defb 238,7,201,0,52,0,2,8,169,32,25,27,44,25,19,245,13,0,0,111,102,102,115,101,244,1,163,34,65,46,80,46,32,115,115,105,100,58,34,44,3
defb 0,0,115,115,105,228,32,32,32,32,32,32,32,32,0,52,0,12,8,169,32,25,28,44,25,20,245,13,0,0,111,102,102,115,101,244,1,163,34,112,97
defb 115,115,119,111,114,100,58,34,44,3,0,0,112,97,115,243,32,32,32,32,32,32,32,32,32,0,73,0,22,8,3,0,0,225,239,34,65,84,43,67,87
defb 74,65,80,95,68,69,70,61,34,244,255,3,40,25,34,41,244,3,0,0,83,83,73,196,244,255,3,40,25,34,41,244,34,44,34,244,255,3,40,25,34
defb 41,244,3,0,0,80,65,83,211,244,255,3,40,25,34,41,0,15,0,32,8,159,32,30,176,4,32,32,32,32,32,0,53,0,42,8,169,32,25,30,44
defb 25,21,245,13,0,0,111,102,102,115,101,244,1,191,34,67,111,110,110,101,99,116,105,110,103,46,46,46,34,59,32,32,32,32,32,32,32,32,32,32,32
defb 32,32,0,10,0,52,8,159,32,30,184,11,0,45,0,62,8,161,32,13,0,0,115,116,97,116,117,243,239,16,32,235,32,191,34,79,75,34,1,138,32
defb 35,17,1,160,32,30,228,7,32,32,32,32,32,32,32,32,0,73,0,72,8,169,32,25,15,44,25,22,245,13,0,0,111,102,102,115,101,244,1,191,34
defb 69,114,114,111,114,58,82,101,116,114,121,40,49,41,32,111,114,32,73,110,115,101,114,116,32,110,101,119,32,65,99,99,101,115,115,32,80,111,105,110,116
defb 40,50,41,63,34,32,32,0,36,0,82,8,161,32,255,10,40,25,64,41,239,14,32,235,32,138,32,35,16,1,160,32,30,32,8,32,32,32,32,32,32
defb 32,32,0,46,0,92,8,161,32,255,10,40,25,65,41,239,14,32,235,32,138,32,35,16,1,138,32,35,17,1,131,32,28,3,187,1,160,32,30,2,8
defb 32,32,32,32,32,32,32,0,10,0,102,8,160,32,30,82,8,0,60,0,152,8,138,32,35,16,1,131,32,28,3,187,1,169,32,25,27,44,25,19,245
defb 13,0,0,111,102,102,115,101,244,1,163,34,72,111,115,116,32,105,112,58,34,44,3,0,0,104,111,115,244,32,32,32,32,32,32,32,0,52,0,162,8
defb 169,32,25,30,44,25,20,245,13,0,0,111,102,102,115,101,244,1,163,34,112,111,114,116,58,34,44,3,0,0,112,111,114,244,32,32,32,32,32,32,32
defb 32,32,32,32,32,32,0,53,0,172,8,3,0,0,72,79,83,212,239,255,3,40,25,34,41,244,3,0,0,72,79,83,212,244,255,3,40,25,34,41,244
defb 34,44,34,244,3,0,0,80,79,82,212,32,32,32,32,32,32,32,0,56,0,182,8,3,0,0,225,239,34,65,84,43,67,73,80,83,84,65,82,84,61
defb 34,244,255,3,40,25,34,41,244,34,84,67,80,34,244,255,3,40,25,34,41,244,34,44,34,244,3,0,0,72,79,83,212,0,25,0,192,8,3,0,0
defb 99,111,110,110,101,99,244,239,3,0,0,225,32,32,32,32,32,0,10,0,197,8,159,32,30,176,4,0,56,0,202,8,169,32,25,30,44,25,21,245,13
defb 0,0,111,102,102,115,101,244,1,191,34,67,111,110,110,101,99,116,105,110,103,46,46,46,34,59,1,159,32,30,184,11,32,32,32,32,32,32,32,32,32
defb 32,0,22,0,212,8,161,32,13,0,0,83,84,65,84,85,211,239,17,32,235,32,201,0,70,0,222,8,169,32,25,15,44,25,22,245,13,0,0,111,102
defb 102,115,101,244,1,191,34,69,114,114,111,114,58,82,101,116,114,121,40,49,41,32,111,114,32,73,110,115,101,114,116,32,110,101,119,32,72,111,115,116,32
defb 83,101,114,118,101,114,40,50,41,63,34,0,31,0,232,8,161,32,255,10,40,25,64,41,239,14,32,235,32,138,32,35,16,1,160,32,30,182,8,32,32
defb 32,0,38,0,242,8,161,32,255,10,40,25,65,41,239,14,32,235,32,138,32,35,16,1,138,32,35,17,1,160,32,30,152,8,32,32,32,32,32,0,10
defb 0,252,8,160,32,30,232,8,0,13,0,184,11,197,32,115,116,97,116,117,115,0,12,0,189,11,185,32,28,209,251,44,15,0,38,0,194,11,3,0,0
defb 225,239,34,65,84,43,67,73,80,83,84,65,84,85,83,34,1,159,32,30,176,4,32,32,32,32,32,32,32,32,0,11,0,204,11,13,0,0,201,239,15
defb 0,40,0,214,11,214,32,40,13,0,0,201,241,22,41,32,250,32,40,255,11,40,28,209,251,41,239,25,255,41,32,32,32,32,32,32,32,32,32,32,0
defb 38,0,224,11,13,0,0,193,239,255,11,40,28,208,251,41,1,13,0,0,201,239,13,0,0,201,244,15,32,32,32,32,32,32,32,32,32,0,6,0,234
defb 11,213,0,25,0,244,11,13,0,0,83,84,65,84,85,211,239,255,11,40,28,208,251,41,245,25,48,0,42,0,249,11,161,32,40,13,0,0,83,84,65
defb 84,85,211,241,16,41,32,252,32,40,13,0,0,115,116,97,116,117,243,238,19,41,32,235,32,30,189,11,0,6,0,254,11,201,0,18,0,160,15,13,0
defb 0,225,239,15,1,13,0,0,233,239,14,0,27,0,170,15,214,32,40,13,0,0,225,239,15,41,32,250,32,40,13,0,0,233,241,25,15,41,0,29,0
defb 180,15,13,0,0,225,239,255,11,40,28,209,251,41,1,13,0,0,233,239,13,0,0,233,244,15,0,6,0,190,15,213,0,6,0,200,15,201,0,46,0
defb 136,19,197,32,97,117,116,111,109,97,116,105,99,32,115,112,101,101,100,32,100,101,116,101,99,116,105,111,110,32,111,102,32,119,105,102,105,32,32,32,32
defb 32,32,0,21,0,146,19,185,32,28,209,251,44,15,32,32,32,32,32,32,32,32,32,0,19,0,156,19,3,0,0,225,239,34,65,84,34,32,32,32,32
defb 32,0,16,0,166,19,159,32,30,176,4,1,159,32,30,160,15,0,19,0,176,19,161,32,13,0,0,193,239,15,32,235,32,30,196,19,0,51,0,186,19
defb 13,0,0,225,239,255,11,40,28,208,251,41,1,161,32,13,0,0,225,239,25,65,32,252,32,13,0,0,225,239,25,13,32,252,32,13,0,0,225,239,25
defb 79,32,235,32,201,0,30,0,196,19,13,0,0,83,69,82,83,80,69,69,196,239,13,0,0,83,69,82,83,80,69,69,196,245,15,0,77,0,201,19,161
defb 32,13,0,0,83,69,82,83,80,69,69,196,239,23,32,235,32,185,32,28,209,251,44,13,0,0,67,85,82,83,80,69,69,196,1,191,34,78,79,32,87
defb 105,70,105,32,109,111,100,117,108,101,32,100,101,116,101,99,116,101,100,33,34,1,152,32,32,32,32,32,32,32,0,28,0,206,19,185,32,28,209,251,44
defb 13,0,0,115,101,114,115,112,101,101,228,1,160,32,30,146,19,0,0,0
This is actaully a method of passing Basic files through assembly code, and i'm using it in many other RSX commands!
The bytes transferred to &170 is the actual basic listing, and it's nothing more that the saved BAS file, without the first 128 bytes of header! ;)
After that, you only need to set some variables in memory (the "patch_mems" section) , and you are ready!
And finally, the best part: the few bytes in the "run code" section, allows you to automatically run the inserted basic program, without giving "RUN" command! ;)
It's only a few instructions:
ld c,0
ld hl,&ea92
call &001b
This,as small as it may seems, was rather tricky and hard to accomplish, as it required to intercept the "Run" command in basic rom at specific address (far call RST 3 to &ea92 of rom 0=Basic (http://cpctech.cpcwiki.de/docs/basic.asm))!
And because i couldn't find a dissasmble code of CPC 464 BASIC 1.0 rom, this automation is only available for CPC 6128 :)
btw, here is all you need to know about creating your own rsx commands: http://cpctech.cpc-live.com/docs/manual/s158se09.pdf
@SkulleateR (https://www.cpcwiki.eu/forum/index.php?action=profile;u=3124) , i made a simple windows app,in order to create the index.txt without needing writing a cli command, and added all (multi_dsk_manager.zip) to USIfAC II assets directory!. First post also updated to include a short description of new additions! ;)
Quote from: ikonsgr on 21:59, 17 April 21
Well, after finishing setting up wifi module, you just give "LIST" at basic prompt, and you will get the BASIC listing! :D
I thought about LIST but it seemed too obvious. :)
Thanks for the explanation, this is what I like from projects like USIFAC, learning from experts and sharing knowledge is priceless. I hope one day I will be able to develop an expansion card.
If anyones interested, I've gone down the rabbit hole of the strange world of the esp8266 and have flashed ESP-Link. I've connected the module to the uart connector instead of the wifi plug on the usifac. This gives the CPC a web server and I can telnet to it using the |ter and |com programs. It's all very exciting. I imagine Duke is using something like a customised version of esplink in the M4 board.
I can't connect the CPC to a shell yet. I've tried ncat -e and socat but the encoding appears to be bad. Any tips?
@kolleykibber (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4071) , How exactly you connect to this shell you mention?
Did you use |WIFI command?
Also take a look at user manual (https://www.dropbox.com/s/ibua98leg79uxgr/Amstrad%20CPC%20Serial%20Interface%20II%20User%20Guide.pdf?dl=0) in Configure esp8266 module section, you will find a list of most useful commands for setting up module manually,use module as TCP server etc
Hi @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) ,
It's an alternative firmware https://github.com/jeelabs/esp-link (https://github.com/jeelabs/esp-link).
It provides a serial-wifi bridge. After flashing you connect your pc/mac directly to the module's ssid and then through web pages, connect to your local network. Then you can telnet directly to the ip address of the module and communicate over serial directly to the UART pins.
It can also be used to flash the microcontroller over wifi. There's examples for Arduino and ARM. I read something about updating a PIC bootloader to flash over the UART rather than ISCP, but I can't find it now..
I set the speed of the Usifac though your |set command and matched the speed of the esp though the admin web page. I was trying to get a reverse shell from osx using ncat/netcat/socat but I had no joy. I think it's a unix TERM issue.
Using
ncat IPADDRESS 23 -e /bin/sh
commands were sent from your |ter program but not recognised. I had no problems sending plain text each way.
Since you can send/receive characters without problem, maybe commands need <CR>+<LF> at the end to be executed, just like AT commands.
I've added this kind of functionality on |TER terminal, by pressing <clr> key. So, before giving the ncat command, press clr,you will get <CR>+<LF>=ON message (this means that <CR>+<LF> will be also sent at the end of string), and then type the command, maybe this way it ill work.
Hi, I am trying Amstrad Diagnostics (https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/amstrad-diagnostics-rom/ (https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/amstrad-diagnostics-rom/))
I think it would be nice to make it work and have it available under |DIAG command or similar (if there is still space on the PIC)
I attach the 2 files I have tested (built from last version https://github.com/llopis/amstrad-diagnostics ):
- If I try the bin file (|USB ,run "DIAG) i get "Line too long"
- If I try the dsk file (|USB, |MG,"AMSTRA~1.DSK", |FDC, RUN "DIAG) it get a red screen that vanishes into blue and gets stacked while it should not.
I have contacted @llopis (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1728) and he says this about the dsk execution "What you describe is the lower RAM test, which sounds like it runs through, but then it gets stuck maybe trying to page out lower ROM or something like that."
Any hint?
With a DSK build, the lower RAM test only works on the screen, so that shouldn't be it. I suspect the problem comes from paging ROMs in and out maybe?
Unfortunately I don't have one of those devices (hoping they become available soon again because I'd love to try it), but since you're building the diagnostics yourself, you can try narrowing down the problem by commenting out some of these calls:
https://github.com/llopis/amstrad-diagnostics/blob/main/src/SystemInfo.asm
Try doing it without the CalculateTotalUpperRAM call and without the DetectModel call and let me know which of those two fixes it. That should help quite a bit. Maybe there's something I can fix from my end to make it work then.
Thanks!
Thanks Noel, commenting out "call CalculateTotalUpperRAM" made it work 8) . (Pls, see attached DSK file without Upper RAM function)
Then checking Lower ROM works good until ROM5 which is the slot using USFIAC and it is filled with small yellow dots but we are on the good track.
Nice utility, but unfortunately the diag.bin inside dsk (i used |DSK command to copy image to a real disk and run it from floppy disk ;D ), dosen't seem to work on my CPC 6128.
It gives the vanishing red pixels, one long beep, then 2 short beeps and then.... nothing. I tried it, with and without USIfACII connected, i got exactly the same behavior.
Have you tried the DSK without upper RAM (DIAGWOUR.DSK https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-iimake-your-pc-or-usb-stick-an-hdd-for-amstrad-access-dsk-and-many-more!/?action=dlattach;attach=34254 (https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-iimake-your-pc-or-usb-stick-an-hdd-for-amstrad-access-dsk-and-many-more!/?action=dlattach;attach=34254) ) or the one in the first post?
Anyway, @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) how could USIFAC be enabled/disabled/detected?
I tried OUT &FBD1,30 in order to detect it but it gives me error.
Ok, DIAGWOUR.DSK loads program, but it crashes on rom checking when it goes where USIfAC II rom is (i got "Unknown" with red letters on Rom 5)
If you want to disable completely USIfAC board you can just select a rom number bigger the 15 for example: out &fbd2,16. This should set board's rom number to 16, so it will never initialized, thus it would be like board is not connected (and you will not get the USIfAC message on boot) :-)
As for detection, i think the "USIfAC II Enhanced" message on boot screen is quite straight forward :)
Finally, you can check the status of various functions with |STAT command, if all is "OFF", then it's like be in "Stand by" mode, only RSX commands are functioning (and if you want to disable it completely you can set rom number as i already told you).
Yes, Diagnostics fails when analising ROM5 which is USIFAC default and could probably be avoided disabling USIFAC with the command you provided.
Boot message is ok for human interaction but I was thinking a way of detecting USIFAC from code like reading an port address and get a status byte or some signature.Thus Diagnostics could detect USIFAC, disable it, perform ROM tests, and enable it again.
The problem is not the usifac, it's the test rom. it needs to be adapted.
Quote from: ikonsgr on 17:16, 20 April 21
Ok, DIAGWOUR.DSK loads program, but it crashes on rom checking when it goes where USIfAC II rom is (i got "Unknown" with red letters on Rom 5)
If you want to disable completely USIfAC board you can just select a rom number bigger the 15 for example: out &fbd2,16. This should set board's rom number to 16, so it will never initialized, thus it would be like board is not connected (and you will not get the USIfAC message on boot) :-)
Yes, that's not a problem that it says unknown. It says that about any ROM that is not one of the official system ROMs. The part I should try to fix is why it crashes when checking the upper RAM total. USIfAC doesn't add any RAM, right? That's really puzzling.
If nobody figures it out before and sends a fix, whenever I get my own USIfAC board I'll try to figure it out and see if I can modify the diagnostics ROM to work with it.
Quote from: issalig on 18:12, 20 April 21
Yes, Diagnostics fails when analising ROM5 which is USIFAC default and could probably be avoided disabling USIFAC with the command you provided.
Boot message is ok for human interaction but I was thinking a way of detecting USIFAC from code like reading an port address and get a status byte or some signature.Thus Diagnostics could detect USIFAC, disable it, perform ROM tests, and enable it again.
Ok, here is an "advance" trick,to find out if a USIfAC II board is installed (even if it doesn't show boot msg e.g. give a non initiliazed rom number):
out &fbd1,30: if inp(&fbd0)=83 then print "USIfAC II board is installed"
kids don't try it at home! :laugh:
Btw,i tried what you proposed and it seems to work: if you give an out &fbd2,16, usifac is disabled (no program will find anything at rom 5 :) ) , but then you can change it back to rom 5 (by simply giving again out &fbd2,5) , and everything works again, without needing to reset or anything! ;)
Quote from: ikonsgr on 20:52, 20 April 21
Ok, here is an "advance" trick,to find out if a USIfAC II board is installed (even if it doesn't show boot msg e.g. give a non initiliazed rom number):
out &fbd1,30: if inp(&fbd0)=83 then print "USIfAC II board is installed"
kids don't try it at home! :laugh:
In theory there's nothing that USIfAC does that should be causing that. So I'd rather figure out what's going on than add a detection and disable it. It's just an upper ROM, right? I can't imagine why it would be causing the program to hang like that.
@llopis (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1728), if it helps, this is the starting part and initialization code of the USIfAC II rom code:
ORG #C000 ;Start of ROM
DEFB 1 ;Background ROM
DEFB 0 ;Mark 0
DEFB 5 ;Version 5
DEFB 0 ;Modification 0
DEFW NAME_TABLE ;Address of name table
JP initialize
JP terminal
JP help
JP galachip
JP pacman
JP kgor
JP setwifi
JP format
JP change_dir
JP enable
JP enable2
JP topc
JP frompc
JP catalogue
JP comm
JP image
JP fdc
JP setspeed
JP dsk
JP delete
JP cpc464
JP status
JP usbset
JP filecopy
JP writerom
JP readrom
JP rootdir
JP deleteroutine
JP dos
JP makedir
JP disable
JP image2
JP image3
JP image4
JP showimage
JP snap
NAME_TABLE:
DEFB ' IREC','T'+#80
DEFB 'TE','R'+#80
DEFB 'HEL','P'+#80
DEFB 'GAL','A'+#80
DEFB 'PACMA','N'+#80
DEFB 'KGO','R'+#80
DEFB 'WIF','I'+#80
DEFB 'FORMA','T'+#80
DEFB 'C','D'+#80
DEFB 'E','N'+#80
DEFB 'EN','2'+#80
DEFB '2P','C'+#80
DEFB '2CP','C'+#80
DEFB 'CA','T'+#80
DEFB 'CO','M'+#80
DEFB 'M','G'+#80
DEFB 'FD','C'+#80
DEFB 'SE','T'+#80
DEFB 'DS','K'+#80
DEFB 'DE','L'+#80
DEFB '46','4'+#80
DEFB 'STA','T'+#80
DEFB 'US','B'+#80
DEFB 'COP','Y'+#80
DEFB 'WRO','M'+#80
DEFB 'LRO','M'+#80
DEFB 'CD','R'+#80
DEFB 'DEL','D'+#80
DEFB 'DO','S'+#80
DEFB 'M','D'+#80
DEFB 'DI','S'+#80
DEFB 'MG','2'+#80
DEFB 'MG','3'+#80
DEFB 'MG','4'+#80
DEFB 'SM','G'+#80
DEFB 'SN','A'+#80
DEFB 0 ;End of table marker
; ######################################----initialize----##################################################
initialize:
push de
push hl
ld bc,&fbd1
ld hl,init_message
call printmessage
ld bc,&fbd9
ld a,1
out (c),a
ld a,&FB
in a,(&D3)
cp "/"
jr z,no_clear_path
ld bc,&fbd1
ld a,53
out (c),a ;start of sub dir, 0=no sub dir
no_clear_path:
ld bc,&FBD4
ld hl,&0006
ld a,(hl)
cp 128 ;128=cpc 464, 145=cpc6128
jr nz,cpc6128
ld a,&FB
in a,(&DC)
cp &83
jr z,con464
cp 120
jr z,set464
LD a,120
out (c),a
ld bc,&FBD1
ld a,5
out (c),a
call 0
set464:
LD a,&83
out (c),a
ld bc,&FBD1
ld a,4
out (c),a
call 0
con464:
ld hl,&be7d
ld a,&ff
ld (hl),a
ld a,&FB
in a,(&De)
cp 0
jr z,end3_init
call enable
jr end3_init
cpc6128:
LD a,&66
out (c),a
end3_init:
pop hl
pop de
scf
ret
init_message:
defb " USIfAC II Enhanced",13,10,13,10,0
As you said, is nothing more than a "usual" upper rom, and in compliance with register usage for background roms:
http://cpctech.cpc-live.com/docs/manual/s158se09.pdf
Entry:
DE contains the address of the lowest byte in the memory pool.
HL contains the address of the highest byte in the memory pool.
Exit:
If the initialization was successful:
Carry true.
DE contains the new address of the lowest byte in the memory pool.
HL contains the new address of the highest byte in the memory pool. (HL ,DE returned unchanged)
If the initialization failed:
Carry false.
DE and HL preserved.
Always:
A, BC and other flags corrupt.
All other registers preserved.
I was going to check that FW but the file appears not to be available anymore. :(
[EDIT] [SOLVED] You can get it from here https://www.dropbox.com/sh/ezzga2dppm6jlm7/AACwFC_rv2QatWh_ndKc9fhma?dl=0 (https://www.dropbox.com/sh/ezzga2dppm6jlm7/AACwFC_rv2QatWh_ndKc9fhma?dl=0)
I have fought a lot in order to flash the ESP-07, thus I leave here some recipes that I hope it will help you (if you try in Linux you should be in dialout group and maybe you will require root privileges)
Before start flashing I recommend to back up the existing fw, so you can always go back.
#backup
esptool.py --port /dev/ttyUSB0 read_flash 0x00000 0x100000 backup.bin
#flash
esptool.py --port /dev/ttyUSB0 write_flash --flash_size 1MB --flash_mode dout 0x00000 YOUR_NEW_FW.bin
Esptool can be installed with "pip install –upgrade esptool"
Quote from: ikonsgr on 17:15, 17 April 21Download this: https://www.dropbox.com/s/bt29v0a32ucktvv/ESP8266_flasher.zip?dl=0 (https://www.dropbox.com/s/bt29v0a32ucktvv/ESP8266_flasher.zip?dl=0)
Just run "esp8266_flasher.exe", click "BIN" button and select the included: "HS06F014 ESP-01S.bin", set your com port number and press "download".
This must be the easiest way to flash a wifi module.
Btw, i found out why mysteriously all my wifi modules stopped working: firewall blocked access to windows utility TCP server (i suspect the antivirus involved in this...)
So, if your Wifi module can't connect to PC check windows firewall settings, if there is any inbound rule that block access of the Amstrad utility.
Quote from: GUNHED on 20:19, 07 December 20
Please - everybody - consider to also support the 0,7 MB Vortex format. In Gemany (at least) it still is/was the 80 track standard format for floppy discs. The big companies like Dobbertin, Vortex ... all did support it. :) :) :)
Please everyone support the Vortex CP/M format too, that is super popular here in Australia and we usually use the SUPER formatter on the SUPER ROM which is easily available online.
@issalig (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4140), link is working again :)
@zhulien (https://www.cpcwiki.eu/forum/index.php?action=profile;u=58), most probable Vortex is directly supported as explained (https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/universal-serial-interface-for-amstrad-cpc/msg190714/#msg190714) to Gunhead some time ago
Great - now Everything is working well after reflashing my ESP Wifi Module.
fully opérationnal.
Thanks for your help mates
+
Quote from: ikonsgr on 10:47, 03 May 21
@zhulien (https://www.cpcwiki.eu/forum/index.php?action=profile;u=58), most probable Vortex is directly supported as explained (https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/universal-serial-interface-for-amstrad-cpc/msg190714/#msg190714) to Gunhead some time ago
Let's be careful. One is a disc format - the other one is a disc drive. But I'm confident they both work. :)
has anyone tried a USB floppy drive with USIfAC II?
@zhulien (https://www.cpcwiki.eu/forum/index.php?action=profile;u=58)
Yes, it does not work
I tried 5 external USB Drives
Ray
Major Update:
Firmware update (ver. 4):
- Bug fix: When saving a file, Dsk Image name in slot 1, changed to name of saved file.
- Code optimization of Board's Rom assembly code.
- |CD & |CAT arguments, now support lower case letters too.
- New Command: |SNA, for loading SNA snapshot files (note that snapshot files must be uncompressed)!
Update Amstrad CPC Loader creator program: Add support for sna snapshot files, along with direct files & dsk images. Also Subfolders inside main folder,can now have multiple .dsk or .sna files (previous version supported only one dsk image in each subfolder)!
Update User's Guide: Many additions and changes to match the new board with extra features.
Add a new "inner working" section: Here: https://www.dropbox.com/sh/ua4vgf6qjjmqlnq/AACT6kqTr-sst-iqDeBnE9gRa?dl=0], you can find all assembly code used in the Usifac II project, along with board schematics, and hex file/assembly source code for PIC18F47Q10 mcu.
Now, this one (loading snapshot files),as easy as it may sound (just copy mem dump to amstrad's memory and set all registeres), was really tough to make it work right, to get an idea, here is the code for the routine:
snap:
cp 0
jp z,no_file_sel
ld b,a
call check_usb_en
ld a,b
cp 1
jr z,sna_def_addr
cp 2
jr z,sna_load_addr
jp error_ucd ;error more than one parameters!
sna_def_addr:
ld a,220
ld bc,&fbde ;next_in=220
out (c),a
ld c,&d7 ;with no address argument set fix address=&ffa6
ld a,&a6 ;low byte of final code address
out (c),a ;put it to buffer(220)
ld a,&ff ;high byte of final code address
out (c),a ;put it to buffer(221)
call get_arg ;e=snapshot name size, hl=address of name
jr continue_1
sna_load_addr:
ld a,220
ld bc,&fbde ;next_in=220
out (c),a
ld c,&d7
ld a,(ix+0) ;low byte of final code address
out (c),a ;put it to buffer(220)
ld a,(ix+1) ;high byte of final code address
out (c),a ;put it to buffer(221)
ld l,(ix+2) ;image name is on the 2nd argument
ld h,(ix+3)
call get_arg2
continue_1:
call set_directory
ld bc,&fbd0
ld a,&57
out (c),a
ld a,&ab
out (c),a
ld a,&2f
out (c),a
ld c,&d9
ld a,1
out (c),a
ld c,&d0
ld a,&FB
in a,(&D3)
cp 0
jp nz,continue_snaopen
ld a,"/"
out (c),a
continue_snaopen:
inc b
outi ; ld a,(hl)->out (c),a->hl=hl+1
dec e
jr nz,continue_snaopen
xor a
out (c),a
call clear_buffer
ld a,&57
out (c),a
ld a,&ab
out (c),a
ld a,&32
out (c),a
call check_responce2
ld A,&FB
in A,(&D0)
cp &14
jp z,continue_snaload
inc c
ld a,5
out (c),a
jp no_file_sel
continue_snaload: ;; &1f2 first 7 bytes checksum fro snapshot files!
ld hl,0
ld de,0
call seek
in a,(c)
cp &14
jp nz,error_ucd
ld e,8
call fetch
ld b,8
ld hl,0
ld de,0
crc_sum:
ld a,&FB
in a,(&D0)
ld e,a
add hl,de
djnz ,crc_sum
; dec b
; jr nz,crc_sum
ld a,l
cp &f2
jp nz,no_file_sel
ld a,h
cp 1
jp nz,no_file_sel
ld bc,&fbd0
ld hl,&6b
ld de,0
call seek
in a,(c)
cp &14
jp nz,error_ucd
ld e,1
call fetch
in a,(c) ;;byte &6b, MEMORY DUMP SIZE:&80=128kb else 64kb
ld c,&dc
out (c),a
ld c,&d0
ld hl,&180 ;set sna file pointer to 1st byte of 1st 64k memory dump
ld de,0
call seek
in a,(c)
cp &14
jp nz,error_ucd
;#######################----------------------------------------------------------------------------------
di
ld bc,&7f84
out (c),c ;disable lower rom
sna_ram_code:
ld hl, sna_code
ld de, 0
ld bc, 102
ldir
ld hl,&7f
ld sp,hl ;set temporary stack pointer to &7f
ld hl,&80 ;#####
ld bc,&fbd1
ld a,40 ;empty data buffer=0
out (c),a
dec c
jp 0 ;call routine to transfer all 64K except first 128bytes
inc c
ld a,41 ;empty data buffer=1
out (c),a
;--------------------------------------------------
ld hl,&bff0 ;temporary stack pointer @ &bff0
ld sp,hl ;set temporary stack pointer
dec hl ;hl=sp-1 address position
ld bc,&fbde
ld a,210
out (c),a ;next_in=210
ld e,10
ld c,&d7
stack_save:
ld a,(hl) ;save 5 postions of temp stack pointer to buffer(210-219)
out (c),a
dec hl
dec e
jr nz,stack_save
;--------------------------------------------------
ld c,&d0 ;bc=&fbd0
ld a,&FB
in a,(&D7) ;if inp(&fbd7)=128 then copy 2nd 64k dump
cp 128
jr z,large_sna
cp 100 ;if inp(&fbd7)=100 then copy of 2nd 64k dump is finished proceed
jr nz,normal_sna ; else
ld de,1
call sna_copy_128
ld hl,&bfef ;hl=sp->-1 address position &bff0-1
ld bc,&fbdb
ld a,210
out (c),a ;next_out=210
ld e,10
ld c,&d0
stack_load3: ;restore 5 postions of temp stack pointer from buffer(210-219)
in a,(c)
ld (hl),a
dec hl
dec e
jr nz,stack_load3
ld b,&7f
ld a,192
out (c),a ;change to 1st 64k RAM bank
jp end_sna_routine
normal_sna:
ld de,0
call sna_copy_128
ld hl,&bfef ;hl=sp->-1 address position &bff0-1
ld bc,&fbdb
ld a,210
out (c),a ;next_out=210
ld e,10
ld c,&d0
stack_load: ;restore 5 postions of temp stack pointer from buffer(210-219)
in a,(c)
ld (hl),a
dec hl
dec e
jr nz,stack_load
jr end_sna_routine
large_sna:
ld de,0
call sna_copy_128
ld hl,&bfef ;hl=sp->-1 address position &bff0-1
ld bc,&fbdb
ld a,210
out (c),a ;next_out=210
ld e,10
ld c,&d0
stack_load2: ;restore 5 postions of stack pointer to buffer(210-219)
in a,(c)
ld (hl),a
dec hl
dec e
jr nz,stack_load2
ld b,&7f
ld a,194
out (c),a ;change to 2nd 64k RAM bank
ld bc,&fbdc
ld a,100 ;from now on inp(&FBD7) will return 100
out (c),a
ld c,&D0
ld de,1
ld hl,&180 ;set file pointer to 1st byte of 1st 64k memory dump
call seek
in a,(c)
cp &14
jp nz,error_ucd
jp sna_ram_code
;-----------------------------####################################---------------------------------------------------
sna_copy_128:
ld hl,&100 ;set file pointer to 1st byte of 1st 64k memory dump
call seek
in a,(c)
cp &14
jp nz,error_ucd
ld e,128
call fetch
ld hl,0
ld bc,&fbd0
load_data_loop2:
inc c
check_sna:
in a,(c)
cp 1
JR Z,check_sna
dec c
ini
inc b
dec e
jr nz, load_data_loop2
ret
;--------------###############################################-----------------------
end_sna_routine:
ld bc,&fbde ;set next_in=150
ld a,150
out (c),a
ld hl,temp_code
ld d,5
ld c,&d7
save_bytes:
ld a,(hl) ;buffer(next_in)=(hl) ;save the 5bytes where temp_code goes,to restore them in final code
out (c),a
inc hl
dec d
jr nz,save_bytes
ld hl,temp_code+4
ld sp,hl ;put temporary stack pointer at address (temp code+4)
ld bc,&fbd0
ld de,0
ld hl,0 ;set file pointer to 1st byte of 1st 64k memory dump
call seek
in a,(c)
cp &14
jp nz,error_ucd
ld e,115
call fetch
ld bc,5000
call delay_loop ;give time to recieve 115 bytes from header snap file
ld bc,&fbd0
ld a,&57 ;close file
out (c),a
ld a,&ab
out (c),a
ld a,&36
out (c),a
xor a
out (c),a
;##############################--------------snap_registers---------------------------############################
call get_final_addr
ld e,l
ld d,h
ld hl, final_code ;this is the final code & executed from ram just before jump to PC
ld bc, 41
ldir
ld bc,&fbdb
ld a,&1b ;buffer pointer to &19 position R register
out (c),a
ld a,&FB ;R register
in a,(&D0)
ld r,a
ld a,&FB ;I register
in a,(&D0)
ld i,a
ld a,&FB ;interrupt Flip flop
in a,(&D0)
cp 0
jr z,cont_sna_2
call get_final_addr
ld bc,37 ;offset +37 for save interrupt FLIP-FLOP state at final code
add hl,bc
ld a,&fb ;&FB=EI
ld (hl),a
cont_sna_2:
; out (c),a
ld a,&FB ;IFF2=IFF1 pass to next byte
in a,(&D0)
ld a,&FB
in a,(&D0) ;a=X
ld l,a
ld a,&FB
in a,(&D0) ;a=I
ld h,a
push hl
pop IX
ld a,&FB
in a,(&D0) ;a=Y
ld l,a
ld a,&FB
in a,(&D0) ;a=I
ld h,a
push hl
pop IY
ld bc,&fbde ;next_in=200
ld a,200
out (c),a
ld a,&FB ;Save Stack pointer at buffer(200+201)
in a,(&D0) ;a=P
ld c,&d7
out (c),a
ld a,&FB
in a,(&D0) ;a=S
out (c),a
call get_final_addr
ld bc,&27 ;offset for placing Program counter to final code
add hl,bc
ld a,&FB
in a,(&D0)
ld (hl),a
inc hl
ld a,&FB
in a,(&D0)
ld (hl),a
ld a,&FB ;interrupt mode
in a,(&D0)
cp 0
jr nz, not_im0
im 0
jr cont_sna_1
not_im0:
cp 1
jr nz, not_im1
im 1
jr cont_sna_1
not_im1:
im 2
cont_sna_1:
ld a,&FB
in a,(&D0) ;a=F'
ld l,a
ld a,&FB
in a,(&D0) ;a=A'
ld h,a
push hl
pop af
ex af,af'
ld a,&FB
in a,(&D0) ;a=C'
ld c,a
ld a,&FB
in a,(&D0) ;a=B'
ld b,a
ld a,&FB
in a,(&D0) ;a=E'
ld e,a
ld a,&FB
in a,(&D0) ;a=D'
ld d,a
ld a,&FB
in a,(&D0) ;a=L'
ld l,a
ld a,&FB
in a,(&D0) ;a=H'
ld h,a
exx
ld bc,&fbdb ;+2 offset for all bytes from buffer
ld a,&43 ;buffer pointer to &1a position R register
out (c),a
ld a,&FB ; ram config
in a,(&c0) ;&FBC0=REVERSE order next_out=next_out-1!
or &c0 ;set bit 7&6 to '1'->setup ram configuration
ld bc,&7f00
out (c),a
call get_final_addr
ld bc,&12
add hl,bc ;place GA multi configuration byte to final code
ld a,&FB ;GA multi configuration byte, screen mode & roms upper/lower en/dis
in a,(&C0)
set 7,a
res 6,a ;bit 7=1, bit 5,6=0
res 5,a
ld (hl),a ;place GA multi configuration byte to final code
inc hl
ld a,&7f
ld (hl),a
ld bc,&7F10
SNA_SetupGA:
out (c),c
ld a,&FB
in a,(&C0)
set 6,a
out (c),a
dec c
jp p,SNA_SetupGA
; Select last active pen
ld a,&FB
in a,(&C0)
out (c),a
; CRTC setup
ld bc,&fbdb ;+2 offset for all bytes from buffer
ld a,&57 ; current rom selection and then CRTC registers
out (c),a
call get_final_addr ;;place upper rom selection byte to final code
ld bc,&17
add hl,bc
ld a,&FB
in a,(&C0)
ld (hl),a
inc hl
ld a,&df
ld (hl),a
ld bc,&BC00+17
SNA_SetupCRTC: ;out &bcxx select register out &BDXX WRITE REGISTER
out (c),c
ld a,&FB
in a,(&C0)
inc b
out (c),a
dec b
dec c
jp p,SNA_SetupCRTC
; Select active CRTC register
ld a,&FB
in a,(&C0)
out (c),a
ld bc,&f782
out (c),c ;set PSG PORT A to output for writing registers first!
ld bc,&fbdb ;+2 offset for all bytes from buffer
ld a,&6c ;buffer pointer to &1a position R register
out (c),a
ld e,15
SNA_SetupAY3:
ld bc,&F4C0
out (c),e
ld b, &F6
out (c),c
defb &ED, &71
dec b
dec b
ld a,&FB
in a,(&C0)
out (c),a
ld bc,&F680
out (c),c
defb &ED, &71
dec e
jp p,SNA_SetupAY3
; Select last active AY3 register
ld bc,&F4C0
ld a,&FB
in a,(&C0)
out (c),a
ld b,&F6
out (c),c
defb &ED, &71
ld bc,&f700
ld a,&FB ;PPI control port byte
in a,(&C0)
out (c),a
ld l,a
ld b,&F6
ld a,&FB ;set PORT C byte
in a,(&C0)
out (c),a
ld a,l
cp &82
jr nz,no_set_porta
ld a,&FB ;PORT B byte, always input-no use
in a,(&C0)
ld a,&FB ;set PORT A byte
in a,(&C0)
ld b,&F4
out (C),a
no_set_porta:
;------end of routine
ld bc,&fbdb
ld a,&13 ;buffer pointer to &12 position F register
out (c),a
ld a,&FB
in a,(&D0) ;a=F
ld l,a
ld a,&FB
in a,(&D0) ;a=A
ld h,a
push hl
ld bc,&fbde ;next_in=202
ld a,202
out (c),a
ld c,&d7 ;save A register to buffer(202)
out (c),h
call get_final_addr
ld bc,&1c ;place BC to final code
add hl,bc
ld a,&FB
in a,(&D0) ;a=C
ld (hl),a
inc hl
ld a,&FB
in a,(&D0) ;a=B
ld (hl),a
ld a,&FB
in a,(&D0) ;a=E
ld e,a
ld a,&FB
in a,(&D0) ;a=D
ld d,a
inc hl
inc hl
ld a,&FB ;place HL to final code
in a,(&D0) ;a=L
ld (hl),a
inc hl
ld a,&FB
in a,(&D0) ;a=H
ld (hl),a
cont_sna_end:
pop af ;restore flag register from temporary stack@address temp_code+4
ld bc,temp_code
ld a,&ed ;ED 79= OUT(C),A
ld (bc),a
inc bc
ld a,&79
ld (bc),a
inc bc
ld a,&c3 ;JUMP TO
ld (bc),a
ld l,c
ld h,b
ld bc,&fbde
ld a,220
out (c),a ;next_in=220
ld c,l
ld b,h
inc bc
ld a,&fb ;a=buffer(next_in)
in a,(&c1)
ld (bc),a
inc bc
ld a,&fb ;a=buffer(next_in)
in a,(&c1)
ld (bc),a
ld bc,&fbdb ;restore SP from buffer(200-201)
ld a,200
out (c),a
ld a,&fb
in a,(&d0)
ld l,a
ld a,&fb
in a,(&d0)
ld h,a
ld sp,hl
ld bc,&7f00
ld a,&8c ;disable both upper+lower roms!
ld hl,temp_code
jp temp_code ;last instruction!
final_code:
defb 1,222,251,62,150,237,121,6,5,62,251,219,193,119,35,16,248,1,0,0,237,73,1,0,0,237,73,1,0,0,33,0,0,62,251,219,208,0,195,0,0
sna_code:
defb 30,128,205,95,0,62,87,237,121,62,171,237,121,62,58,237,121,237,89,175,237,121,205,88,0,237,120,205,95,0,62,87,237,121,62,171,237,121,62,39,237,121
defb 205,88,0,237,120,202,144,245,95,12,237,120,40,252,13,237,162,4,29,32,244,205,95,0,62,87,237,121,62,171,237,121,62,59,237,121,205,88,0,124,181
defb 32,171,195,144,245,12,237,120,40,252,13,201,12,62,1,237,121,13,201
The main problem i encountered was placement of the Stack and a small final code that needs to be executed from ram (GA rom configuraton and final jump to PC along with restoring of a few bytes). Using spare parts in video memory (for example: &FFD0-&FFFF) is not working all the time, because tests revealed that games often use these parts for placing code! So in order to find a way to overcome this problem, i designed |SNA command with an optional memory address argument (|SNA,"name",&xxxx) to place final code into the specific address instead of the deafult @&FFA6 (e.g. some screen bytes at right bottom corner,which prooved to have better results than using a spare part).
But where will that address be, you may ask?
Well, in order to find out that,i expand the Basic loader creator utlity, to include sna files, that, apart from creating the required commands in the Basic listing, it also searches the entire snapshot memory dump to find an "empty" place (search for 40 sequnetial bytes that have same value) for the final code. Using this method, i've have tested more than 100 sna files and all seem to load fine!
The only "problem" i still have is that sna files need to be uncompressed, but the sna archive (https://www.cpcwiki.eu/index.php/Snapshot_Archive) in cpc wiki have all files in compressed form. Is there any easy way to create uncompressed sna files from compressed ones?
Wow, this is a great update. I am gonna flash the new FW ASAP
And thanks a lot @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) for sharing the "Inner Workings".
There is a lot of interesting stuff there. In the beginning I was surprised you coded the PIC directly in ASM :o , but then I have realized that GBC generates those files before linking them into the hex file. Now struggling to generate flash from asm file. It looks that pic18f47q10.inc is missing in GBC distribution, maybe mpasm has it.
Quote from: issalig on 10:33, 04 May 21
Wow, this is a great update. I am gonna flash the new FW ASAP
And thanks a lot @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) for sharing the "Inner Workings".
There is a lot of interesting stuff there. In the beginning I was surprised you coded the PIC directly in ASM :o , but then I have realized that GBC generates those files before linking them into the hex file. Now struggling to generate flash from asm file. It looks that pic18f47q10.inc is missing in GBC distribution, maybe mpasm has it.
This is an intermediate file generated by cowbasic compiler so i doubt you can find it anywhere. :)
Anyway, i've added the GCB source code too (18f47q10_gcb_source), so you can install cowbasic (use the latest RC from here: https://sourceforge.net/projects/gcbasic/files/Release%20Candidates/ ) and compile it from there ;)
Quote from: ikonsgr on 09:09, 05 May 21Anyway, i've added the GCB source code too
Thanks for the source!!!, it's a great contribution.
what am I doing wrong if I get that message after typing |USB?
USB Stick is 4GB Fat32, USB 2.0
Update:
I tried with 2 more sticks: USB 3.0, 32GB and 64GB
First the 32GB stick didn't work. I could type |USB, but then it said it would be empty. As I had to format with the 64GB stick with a third party tool, I recognized that this stick was accepted and showed the contents. I then also formatted the 32GB stick with the same tool, and then the stick was recognized and worked also.
Unfortunately the 4GB sticks still don't work, even if formatted with the same tool.
Is there any known limitation regarding which sticks will not be accepted?
Quote from: eto on 20:47, 05 May 21
what am I doing wrong if I get that message after typing |USB?
USB Stick is 4GB Fat32, USB 2.0
Update:
I tried with 2 more sticks: USB 3.0, 32GB and 64GB
First the 32GB stick didn't work. I could type |USB, but then it said it would be empty. As I had to format with the 64GB stick with a third party tool, I recognized that this stick was accepted and showed the contents. I then also formatted the 32GB stick with the same tool, and then the stick was recognized and worked also.
Unfortunately the 4GB sticks still don't work, even if formatted with the same tool.
Is there any known limitation regarding which sticks will not be accepted?
Indeed, some usb host modules seem to be a bit "picky", regarding the flash drive you will use, but i have found an easy solution to that: Just create a small (like 256mb or so) FAT partition:
https://www.diskpart.com/articles/how-to-partition-usb-drive-3889.html
I've try this method with 4gb and 32gb usb sticks and worked, so i guess this "trick" most probable will solve the problem.
Quote from: ikonsgr on 21:39, 05 May 21so i guess this "trick" most probable will solve the problem.
unfortunately not. They don't work :-( Too sad.
Ok, does the usb host module lights up when you give |USB?
If not, and you get an error message all the time (eve if you have a small fat partition) , then the usb stick you are using is probably... "too incompatible" for the module to recognize it at first place.
You can also try a real small usb drive (of less than 512mb), as they are still available (https://www.ebay.ie/itm/393109671969?_trkparms=ispr%3D1&hash=item5b87299021:g:SLMAAOSwfS5gD8ly&amdata=enc%3AAQAFAAACgBaobrjLl8XobRIiIML1V4Imu%252Fn%252BzU5L90Z278x5ickkyMJZWL%252BqFSgQ3TOOe%252FNr7tDu5VxGM0%252FuCNEA2FMfbI71%252BldQsZE1gx968SMSnwh20KZpwrKOBFobrvf7PnrGTrnmubuSg%252FlrYuh%252Fs5QfW3ZjUgWoJLz6wz9lqAW8Z143prbnbS70PMZOKq9QFoK9%252FTHgCF35zYx713OiCk66ETp1fN4t7HYdNAPQ5s78Dq6wUc%252FV5ASaS16fXBGRoEANmO1qQR9BevsznTxQAmZMZrK2s1clM2dqN3h6VNtSNTNASRy0WsrkI1qb1eAN6aRrcr0%252F1Vr%252FeVw5DQGDG82hXbEsBTmjINoK3bZLeMPYCmIN6q0wKmhFP%252BgRAuCB%252B8jaTprBcZE83GMYNJN5QZT5BCVFWGOdIlh8WVGmjR3nj8amsDw9mq%252FAn0UBFCouYt8wnYt92DNB%252BZEV2y52qIHqgi%252BpmCuX9Ds3pvfBEA1fpiIe5q6Gp8vGSGpe2bqvEIDocEcMKRK%252BlxvULeQLIJ3y8HV1nG%252BPCZVsnU0BG7pg08o6nY8lnt%252BiMi4V84nNjN77qvtKFcIXO5QzTmzZKB8sHb0RvJ1ikSlpsfW%252B5%252BpODetKhDHBML7zjJCSAjpL77fpfsxVTiCh9RbPtnKHEESheg8MdFCvpplMF33PG%252Be6o2eM5nTZWshPxTJEvIHzt%252FuxUoay9N3jbDjT38tj7Ke%252FqG0UPJNKuryp8y9jTHxiGOHyl0hEgvVvL%252BjXvWlQ2QLXgJDks2Awyemvons4YyJEhC2EApyABbAMPwU9Ls0NhADBpfu6YSaSLAilW2ReLwid3IfdKesjvqUFuUhG801NOzo%253D%7Ccksum%3A393109671969dea9c1fa6477415c8724f0bdba288f3c%7Campid%3APL_CLK%7Cclp%3A2334524)at very cheap prices
Quote from: ikonsgr on 21:39, 05 May 21I've try this method with 4gb and 32gb usb sticks and worked, so i guess this "trick" most probable will solve the problem.
So none of my sticks worked in the first place but I could get ALL the USB 3.0 sticks to work with their full size by doing the following:
- delete partition and then create a new partition in Windows Computer Management, assign a drive letter (e.g. X), BUT do not format it here. (Windows will assign the drive letter and immediately moan about the non-formatted stick. DO NOT FORMAT!)
- then run command line tool "h2format.exe X:" (http://www.heise.de/software/download/h2format/40825 - German, just use Google translate, pretty straight forward)
After this, the USB stick will be accepted.
The USB 2.0 sticks do still not work. The USB host module lights up, but then I get the "no USB Device found" error message.
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
John I will do a test with Version 4 on my old boards and see what happens
Keep Safe
Ray
Two further issues:
1) One of my USIfAC II doesn't do anything. It's connected and nothing happens. Any idea what I could check?
UPDATE: out &fbd2,5 fixed this issue. It probably was because I was trying it on both the 6128 and the 464 and then on the 464 I also typed |FDC. After a reset, the Usifac was inactive. As this can easily happen, it might be good to add that to the hints section.
2) My other UsiFac works fine on my 6128, but on the 464 it behaves differently. When turning on, the 464 stops when displaying the start up screen, just before the USIFAC message should appear. After pressing reset, it boots fully to the READY prompt (at least most of the times, but not always). Then I can navigate through the USB directories and start something - but when I then press RESET, the startup screen will again stop in between and a reset will no longer help. I have to turn off the computer for a few seconds, then I can start it again.
UPDATE: added screenshot
@eto (https://www.cpcwiki.eu/forum/index.php?action=profile;u=3625)
Perhaps the edge connection on the Motherboard is dirty ?
Keep Safe
Ray
Quote from: Audronic on 00:35, 06 May 21Perhaps the edge connection on the Motherboard is dirty ?
Unlikely. The second USIfAC works without problems.
Also the non-working USUfAC also doesn't work on a 6128 with Centronics connector.
UPDATE: non working usifac fixed. See post above
Quote from: Audronic on 00:29, 06 May 21
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
John I will do a test with Version 4 on my old boards and see what happens
Version 4 appears to be Ok with the old Boards, |USB OK, files OK. .DSK OK
Thanks
Ray
Quote from: eto on 00:31, 06 May 21
2) My other UsiFac works fine on my 6128, but on the 464 it behaves differently. When turning on, the 464 stops when displaying the start up screen, just before the USIFAC message should appear. After pressing reset, it boots fully to the READY prompt (at least most of the times, but not always). Then I can navigate through the USB directories and start something - but when I then press RESET, the startup screen will again stop in between and a reset will no longer help. I have to turn off the computer for a few seconds, then I can start it again.
This is most likely a connection problem, usually with the ribbon cable. I had such erratic behavior some time ago, boot problems, hang ups and crashes for no apparent reason etc. Finally i discover that the culprit was the edge connector ribbon cable i was using. When i've change it with a new one, all problems solved! :)
Whaou. huge update.
Will test it on sunday..
Thanks for the SNA add-on
Phil
I've added an SNA folder in to USIfAC II assets place:
https://www.dropbox.com/s/35p7s61gvem1r8b/SNA.zip?dl=0
It contains more than 350 snapshot files of games, along with Basic loaders for easy loading! ;)
Just copy the entire SNA folder to a usb stick and choose any BAS file for direct loading of snapshot!:-)
Btw, is there an easy way to get the uncompressed form of a compressed snapshot file, like the ones in cpcwiki archive (https://www.cpcwiki.eu/index.php/Snapshot_Archive)?
As a linux user I have tried to use AmstradUtilityII.exe with little luck. Sometimes it works under WINE but other does not.
Option A python way
So, I decided to get Wireshark and do a python script that now has receiveFromCPC and Terminal options. The other options I guess are more difficult to implement that just sniffing network traffic.
https://github.com/issalig/cpc/blob/main/sw/usifac_transfer.py (https://github.com/issalig/cpc/blob/main/sw/usifac_transfer.py)
To get a file from the CPC just call first "python usifac_transfer.py -r -p YOURPORT"
There is also a tools to convert a binary to defb in order to call BASIC from RSX 8) https://github.com/issalig/cpc/blob/main/sw/bin2txt.py (https://github.com/issalig/cpc/blob/main/sw/bin2txt.py)
Enjoy.
Option B just from bash (simple but effective):https://github.com/issalig/cpc/blob/main/sw/usifac_receive.sh (https://github.com/issalig/usifac_tools/blob/main/usifac_transfer.py)
#Set a server listening on a given port and redirect output to a file
#|2PC on the CPC
#Then press 1 and enter on the PC to start transferring from CPC
#Finish reception with Ctrl+C when motor stops or use -w10
MYPORT="10000"
echo "Server started. Press 1 + Enter to start downloading"
echo "Set -w10 to a proper value if not enough"
nc -w10 -l $MYPORT > MYFILERAW
#Get name and remove spaces
MYFILE=`head -12c MYFILERAW | tr -d " " `
echo "Saving $MYFILE"
#Then, strip first 12 bytes and we are done
tail +13c MYFILERAW > $MYFILE
rm MYFILERAW
Another "3rd party support" for USIfAC II, Great! :)
Hi, I have started looking at the code of USIFAC but I have realised I need to learn a lot of things before, thus I am documenting my learning process and you can check it on https://www.cpcwiki.eu/forum/programming/my-journey-into-z80-and-cpc/
I have included the code to write BASIC on RAM that @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) uses and will I include more things for sure. My final idea is to describe how to do a simple foreground ROM, so that more people understand it and can contriubute to USIFAC development and new ideas.
Enjoy it!
Hi All,
I noticed a mention in the forum about getting the USIFAC working with Ewenterm, but I couldn't find any code so I had a go today and managed to get it working. Apologies if this is already up somewhere.
I'm using esp-link on the esp8266 wifi module, which has a serial/wifi socket link. And I'm using ncat on a bash box to connect to servers. I've attached a couple of pics of the amstrad BBS and a local retropie. It's very usable.
Here's an example of the netcat command I'm using where the IP address is the esp8266
stty -icanon && ncat -C 192.168.1.124 23 -e "telnet amstrad.simulant.uk 464"
I've attached a dsk with updated readme and code.
Thanks to @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) and Ewen of Ewenterm for giving me some fun with this!
@kolleykibber (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4071), very nice work, and well documented! :)
I could also add this to Usifac's public folder for anyone who want to use it, under a "Connect to bbs" folder maybe? ::)
Btw, i've extracted readme and manual text files from dsk image, for easier acccess (and maybe it would be a good idea to make a small program for reading txt files on Amstrd cpc directly :D )
Thanks @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541). The USIFAC has started me off on a journey into microcontrollers, so thanks for that too!
Good idea on adding to the folder, Have you thought about putting your work up on github?
Now you've been generous enough to release your code I was going to have a go at z80dart support from the usifac side. That way we could use all the old software. Need to buy more gear though :)
I've upload a new firmware (4a), only minor optimization of board's ROM code this time (replace "cp 0" with "or A" ,fix a small bug in |format routine- now shows correctly formatted track numbers, reduce the size of hex file by dumping initial zeros of arrays & variables used in routines transferred to RAM).
Btw, we reach 100 USIfAC II boards produced!
It's been ~6months since initial presentation, but production was stalled for more than 2months in total (due to various part shortages), so in reality this number is acheived in less than 4months!
How do you weld USB board and USIFAC??
I can't see how pins of each board are connected. The VCC and GND pins on USB module aren't beside TX and RX pins.
Thank you
Quote from: Philippe Lardenois on 14:14, 27 March 21
Hi Friends,
I design a little box with my 3D printer. for those interested....Attached the STL (2 parts and 2 buttons).
inside this archive, 2 Top cover (one for those like me who need a hole for adding a 7cm button for disk swap / one without)
pictures :
https://ibb.co/ZBcdRs3 (https://ibb.co/ZBcdRs3)
https://ibb.co/ftLkZxq (https://ibb.co/ftLkZxq)
(https://ibb.co/ZBcdRs3)
(https://ibb.co/ZBcdRs3)
++
Phil
(https://ibb.co/ftLkZxq)
(https://ibb.co/ZBcdRs3)
Quote from: Fran123 on 08:27, 28 May 21
How do you weld USB board and USIFAC??
I can't see how pins of each board are connected. The VCC and GND pins on USB module aren't beside TX and RX pins.
Thank you
This is how underneath of board+usb host module is:
[attach=1,msg202620]
As you can see,i custom design the board to accept the pins of module and solder it in place. And yes, for some reason, they didn't use the usual "4pin approach" of having Tx,Rx, 5v and gnd in a single row, but instead, CH376 module (https://www.cpcwiki.eu/forum/index.php?action=dlattach;topic=17425.0;attach=33013;image) has a 3pin connector, (with one of gnd pins in the middle... :o ) and 5v is given through a pin in the large dual row header!
This is why the first version used dupont wires to connect the usb module.... ::)
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) Hi John,
First of all, congrats on your fantastic job!! ;)
Regarding the wifi connection, can we change the host ip in your Windows Amstrad utility tool? I tried to change the ip in the setup.txt, may be i'm doing wrong, but the tool still seems to reset the ip to 192.168.56.1?
Thank you
The ip is taken automatically from the ip of the computer running the Windows utility (port number can be changed though).
If you want this to be changed you will have to assign a different ip to your pc first :)
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) , Great it works ! ;D
Thank you John.
I solved my issue by deactivating my VirtualBox network adaptater (which was assigned to the ip 192.168.56.1) and then, the Windows Amstrad tool was able to get my PC ip and the cpc succeeded in connecting to the host ip.
Sent an email - These look super cool!
(here we go!!!)
When using the Multiface 2 it will freeze up during the Save. Test game was Kane from Mastertronic (using a CPC6128)
|USB
|MG,"KANE.DSK"
|FDC
run"kane"
Some of the MF2 BIN files will save in the DSK image, but not everything required to reload it again. Above procedure works fine when running the game via Gotek
I've updated the PIC to 18F47Q10_4 in this thread today
Got the MF2 board and parts from rewinding. Works great!
https://www.va-de-retro.com/foros/viewtopic.php?f=63&t=8102 (https://www.va-de-retro.com/foros/viewtopic.php?f=63&t=8102)
I'm really not familiar with MF2 interface...
Does it uses the same dsk game image to save the files it needs? But i wonder, since memory dump files are pretty large (64k or 128k), there might be no room for them, if game files take up more than ~100kb on disk... ::)
If that's the case, you might try to mount a 2nd dsk image of an empty disk, and before enabling MF2, change the active dsk image, by pressing the dsk_swap button. That way, USIfAC II will use the empty disk image to store files.
For this game there is enough space on the DSK image. If there is not the MF2 will report an error. I will try the game outside DSK image and see if the problem is the same. I've got USB-TTL, WIFI and Bluetooth modules on order, so keen to try these out too
Quote from: darkhalf on 14:11, 03 June 21
For this game there is enough space on the DSK image. If there is not the MF2 will report an error. I will try the game outside DSK image and see if the problem is the same. I've got USB-TTL, WIFI and Bluetooth modules on order, so keen to try these out too
One other thing that might worth a try is to create in your usb flash drive a small partition of 256Mb (https://www.anyrecover.com/external-device-recovery-data/partition-flash-drive/?gclid=Cj0KCQiAk53-BRD0ARIsAJuNhpuV-XmTqEs_lVQwvnu_S89mZZcUEZ_KMaaHUuETleV5quw2XX6V63saAn1_EALw_wcB#tip2) and format it, using FAT file sytem. From my experience, sometimes usb host modules might be a bit "picky" with specific flash drives, especially regarding writing activities (e.g. you might have no problems reading/loading files/dsk images etc, but ONLY in writing files/images). The above method of using a small FAT partition, in most cases seems to resolve the issues.
Quote from: ikonsgr on 20:35, 03 June 21One other thing that might worth a try is to create in your usb flash drive a small partition of 256Mb and format it,
Have you tried to format it with a third party tool and NOT with the Windows format tool? Almost none of my sticks worked with the Windows formatter (even with just 256MB partitions) but except for a single USB drive every stick worked with its full capacity, if formatted with h2format.exe (http://translate.google.com/translate?hl=en&sl=de&u=http://www.heise.de/software/download/h2format/40825&ei=bDAHSu_CGqDCM7_M0KID&sa=X&oi=translate&resnum=2&ct=result&prev=/search%3Fq%3Dh2format%26hl%3Den%26client%3Dfirefox-a%26rls%3Dorg.mozilla:en-US:official%26hs%3D9ju) .
Hello,
How much current does USIFAC II need to work?
Thank you
It arrived!
After one very thorough scrub of my expansion port (fnar) it's working beautifully. I'm afraid to unplug it now because of just how firmly it's stuck in place.
(edit: i twooted a pic, and a video)
https://twitter.com/magic_bane/status/1401852804147318784
https://twitter.com/magic_bane/status/1401864000598589441
Quote from: Fran123 on 08:39, 05 June 21
Hello,
How much current does USIFAC II need to work?
Thank you
The board itself draws very little current, ~20-30mA, but the usb host module+usb flash drive probably need ~100mA (or even more, depending on the flash drive you use). So i would say that a rough estimation of total current consumption would be ~150-200mA
Is there any way to tell which games in the direct loading folder *require* 128k?
Running into a lot of assumingly buggy games because they're expecting 128k but don't find it (and some that explicitly don't start without it)
EDIT:
I made a "direct load" version of Infernal Runner (a personal favourite of mine) it works on a 464, and some simple instructions are in the zip.
it should be attached to the post, now.
Well, unfortunately all "direct load" games are actually extracted from dsk images, meaning that orignally were intended only for CPC 664/6128. Although mostly compatible, there are some minor differences between 464 and 6128 regarding the "inner workings" of the machine that can cause problems for a game designed on a cpc6128,to load on a cpc464 (even if it uses only 64k ram). Also, many games that have Basic loaders, might use commands or syntax that is not recognized from CPC 464 Basic 1.0 version.
So,in most cases, games that are not running on a cpc464 is not because they need 128k but because they were not supposed to run on cpc464 machines :)
One solution for non working games might be to use snapshot files instead (which can be easily created from an emulator like winape), as this is the most "brutal-direct" method that forces the entire game into the RAM directly, without needing to load any files! ;)
p.s. i add infernal runner in the official list (https://www.cpcwiki.eu/forum/games/how-about-making-a-'worth-to-play'-collection-of-amstrad-games/25/) and with a basic loader (https://www.dropbox.com/s/cdd59bfubyv9g7f/loaders.zip?dl=0) for easy access:)
Quote from: ikonsgr on 20:44, 07 June 21Well, unfortunately all "direct load" games are actually extracted from dsk images, meaning that orignally were intended only for CPC 664/6128. Although mostly compatible, there are some minor differences between 464 and 6128 regarding the "inner workings" of the machine that can cause problems for a game designed on a cpc6128,to load on a cpc464 (even if it uses only 64k ram). Also, many games that have Basic loaders, might use commands or syntax that is not recognized from CPC 464 Basic 1.0 version. So,in most cases, games that are not running on a cpc464 is not because they need 128k but because they were not supposed to run on cpc464 machines :) One solution for non working games might be to use snapshot files instead (which can be easily created from an emulator like winape), as this is the most "brutal-direct" method that forces the entire game into the RAM directly, without needing to load any files! ;) p.s. i'll see to add infernal runner in the official list :)
Yeah, that's mostly what I thought. Probably just system specific//BASIC stuff and not particularly a RAM requirement.
Most 664 stuff should work at the very least -
all four games or however many came out before it was axed - knowing which stuff is for 128k/6128-only and not for a 464 would be helpful to know.
Snapshots i'm avoiding for now (i don't really like them, and they're limited for multi-load games)
wrt: Infernal Runner / that's why i uploaded it :)
Has a 3d-printable case been made for the USIfAC 2 yet? My current solution is less than ideal, and I'd prefer it in a case to prevent damaging my table/usifac2.
Hi @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) , I finally took the time to study your code to run basic from asm and I have some questions
defb 14,0,33,149,234,205,27,0
that corresponds to
0000 0E 00 LD C,00
0002 21 95 EA LD HL,EA95
0005 CD 1B 00 CALL 001B ; KL_FAR_PCHL
and you said it was LD HL, EA92 (I guess it is just a mistake when writing by heart)
Second question is what cp &6e is for? You are checking the low part of the sum of &170 + basic_code_size to &6e, ??
Third question is what ae29 does? it is just a variable that holds 0? and what is the purpose of copying and calling defb 14,0,33,149,234,205,27,0 on 7900, could not be called just from a label before defb line?
I have also tried similar code (https://www.cpcwiki.eu/forum/programming/asm-source-code/msg158311/#msg158311 (https://www.cpcwiki.eu/forum/programming/asm-source-code/msg158311/#msg158311)) and also in M4 ROM (https://github.com/M4Duke/m4rom/blob/a8a029134bc2412896c71dcdb4fedba9d417128d/M4ROM.s#L1936 (https://github.com/M4Duke/m4rom/blob/a8a029134bc2412896c71dcdb4fedba9d417128d/M4ROM.s#L1936)) and both run in 464 that you said it was not working for you in USIFAC, you can give it a try.
- And the forth question is, what are the main differences between these two ways of running basic?In this code they detect basic version and also copy 4x times &170+basic_code_size but instead of using RST 3 and go to &ea95 (inside RUN routine)
they go directly to the beginning of RUN routine at &ea78 (cpc6128)
I have found a disassembly of CPC464 in case you need it https://acpc.me/ACME/LITTERATURE_LIVRES/%5BGER%5DGERMAN/MARKT-UND-TECHNIK/ROM-Listing_CPC464-664-6128(Jorn_W_ANNECK_Till_MOSSAKOWSKI).pdf (https://acpc.me/ACME/LITTERATURE_LIVRES/%5BGER%5DGERMAN/MARKT-UND-TECHNIK/ROM-Listing_CPC464-664-6128(Jorn_W_ANNECK_Till_MOSSAKOWSKI).pdf)
Yes, I had too many questions.
Quote from: ikonsgr on 21:59, 17 April 21Well, after finishing setting up wifi module, you just give "LIST" at basic prompt, and you will get the BASIC listing! :D
And here is the asm code for the |WIFI command:
data_size equ 3465
addr equ &170
org &c000
ld hl, setwifi_code
ld de, addr
ld bc, data_size
ldir
ld a ,#FB
in a,(#Dc)
ld l, a
ld h,&ae
ld de,data_size+&170
ld B,4
patch_mems: ;length+1678+368 (&170)
ld (HL),e
INC HL
LD (HL),d
INC HL
dec b
jr nz,patch_mems
ld a,l
cp &6e
jp z,runcommand
ret
runcommand:
ld hl,&ae29
ld a,0
ld (hl),a
ld hl, run_code
ld de, &7900
ld bc, 8
ldir
jp &7900
Run_code:
defb 14,0,33,149,234,205,27,0
setwifi_code:
defb 19,0,10,0,173,32,16,1,130,32,14,32,32,32,32,32,32,32,0,31,0,17,0,185,32,28,208,251,44,25,43,1,185,32,28,208,251,44,25,43,1,185
defb 32,28,208,251,44,25,43,0,60,0,20,0,147,32,3,0,0,83,208,40,25,10,41,1,13,0,0,115,101,114,115,112,101,101,228,239,25,24,1,13,0
defb 0,99,117,114,115,112,101,101,228,239,255,11,40,28,221,251,41,32,32,32,32,32,32,32,32,32,0,25,0,30,0,162,32,14,44,15,1,162,32,16,44
defb 14,1,186,32,16,1,138,32,32,32,0,10,0,40,0,159,32,30,136,19,0,36,0,50,0,3,0,0,225,239,34,65,84,43,67,87,77,79,68,69,61
defb 49,34,1,159,32,30,176,4,32,32,32,32,32,32,32,0,19,0,100,0,197,32,115,101,114,105,97,108,32,115,101,116,117,112,0,60,0,110,0,138,1
defb 216,32,35,14,44,25,18,44,25,55,44,17,44,22,1,124,0,83,84,65,212,1,216,32,35,14,44,25,18,44,25,55,44,18,44,22,1,138,1,216,32
defb 35,14,44,15,44,25,79,44,15,44,25,25,0,60,0,115,0,169,32,25,22,44,19,1,191,34,83,101,116,32,110,101,119,32,115,112,101,101,100,63,32
defb 40,89,47,78,41,34,1,131,32,28,3,187,1,13,0,0,111,102,102,115,101,244,239,14,32,32,32,32,32,32,32,0,34,0,116,0,161,32,255,10,40
defb 25,43,41,239,14,32,235,32,30,120,0,32,32,32,32,32,32,32,32,32,32,32,32,32,0,41,0,117,0,161,32,255,10,40,25,46,41,239,14,32,235
defb 32,13,0,0,111,102,102,115,101,244,239,25,11,1,160,32,30,84,1,32,32,32,32,32,0,10,0,118,0,160,32,30,116,0,0,58,0,120,0,191,1
defb 191,34,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,80,114,101,115,115,58,34,1,158,32,13,0,0,248,239
defb 21,32,236,32,25,14,32,32,32,32,0,75,0,130,0,195,32,3,0,0,83,208,40,13,0,0,248,245,20,41,1,169,32,25,32,44,13,0,0,248,1
defb 191,32,34,60,34,59,172,40,255,25,40,13,0,0,216,245,20,41,44,16,44,15,41,59,34,62,58,34,59,3,0,0,83,208,40,13,0,0,248,245,20
defb 41,32,32,0,11,0,140,0,176,32,13,0,0,248,0,60,0,160,0,140,32,57,54,48,48,44,53,55,54,48,48,44,49,49,53,50,48,48,44,50,51
defb 48,52,48,48,44,52,54,48,56,48,48,44,53,55,54,48,48,48,44,57,50,49,54,48,48,44,49,48,54,53,54,48,48,0,21,0,170,0,13,0,0
defb 115,101,114,115,240,239,14,1,131,32,28,3,187,0,51,0,180,0,161,32,255,10,40,25,64,41,239,14,32,235,32,13,0,0,115,101,114,115,240,239,25
defb 12,1,3,0,0,83,208,239,34,57,54,48,48,34,32,32,32,32,32,32,32,32,32,0,54,0,190,0,161,32,255,10,40,25,65,41,239,14,32,235,32
defb 13,0,0,115,101,114,115,240,239,25,15,1,3,0,0,83,208,239,34,53,55,54,48,48,34,32,32,32,32,32,32,32,32,32,32,32,0,52,0,200,0
defb 161,32,255,10,40,25,57,41,239,14,32,235,32,13,0,0,115,101,114,115,240,239,25,16,1,3,0,0,83,208,239,34,49,49,53,50,48,48,34,32,32
defb 32,32,32,32,32,32,0,51,0,210,0,161,32,255,10,40,25,56,41,239,14,32,235,32,13,0,0,115,101,114,115,240,239,25,17,1,3,0,0,83,208
defb 239,34,50,51,48,52,48,48,34,32,32,32,32,32,32,32,0,50,0,220,0,161,32,255,10,40,25,49,41,239,14,32,235,32,13,0,0,115,101,114,115
defb 240,239,25,18,1,3,0,0,83,208,239,34,52,54,48,56,48,48,34,32,32,32,32,32,32,0,54,0,230,0,161,32,255,10,40,25,48,41,239,14,32
defb 235,32,13,0,0,115,101,114,115,240,239,25,19,1,3,0,0,83,208,239,34,53,55,54,48,48,48,34,32,32,32,32,32,32,32,32,32,32,0,44,0
defb 240,0,161,32,255,10,40,25,41,41,239,14,32,235,32,13,0,0,115,101,114,115,240,239,25,21,1,3,0,0,83,208,239,34,57,50,49,54,48,48,34
defb 0,51,0,250,0,161,32,255,10,40,25,40,41,239,14,32,235,32,13,0,0,115,101,114,115,240,239,25,23,1,3,0,0,83,208,239,34,49,48,54,53
defb 54,48,48,34,32,32,32,32,32,32,0,25,0,24,1,161,32,13,0,0,115,101,114,115,240,239,14,32,235,32,160,32,30,180,0,0,54,0,44,1,3
defb 0,0,193,239,34,65,84,43,85,65,82,84,95,68,69,70,61,34,244,3,0,0,83,208,244,34,44,56,44,49,44,48,44,48,34,32,32,32,32,32,32
defb 32,32,32,32,32,32,32,0,33,0,54,1,159,32,30,176,4,1,185,32,28,209,251,44,13,0,0,115,101,114,115,240,1,185,32,28,209,251,44,15,0
defb 25,0,64,1,158,32,13,0,0,233,239,15,32,236,32,25,100,1,176,32,13,0,0,233,0,110,0,84,1,216,32,35,16,44,15,44,25,79,44,25,21
defb 245,13,0,0,79,70,70,83,69,212,44,25,25,245,13,0,0,79,70,70,83,69,212,1,186,32,35,16,44,14,1,187,32,35,16,44,15,1,216,32,35
defb 17,44,15,44,25,79,44,25,19,245,13,0,0,79,70,70,83,69,212,44,25,20,245,13,0,0,79,70,70,83,69,212,1,186,32,35,17,44,14,1,187
defb 32,35,17,44,15,1,159,32,30,208,7,0,37,0,86,1,3,0,0,225,239,34,65,84,43,67,73,80,77,79,68,69,61,49,34,1,159,32,30,176,4
defb 32,32,32,32,32,32,32,0,28,0,89,1,3,0,0,225,239,34,65,84,43,67,73,80,83,69,78,68,34,1,159,32,30,176,4,0,55,0,94,1,169
defb 32,25,30,44,25,22,245,13,0,0,79,70,70,83,69,212,1,191,34,87,105,70,105,32,77,111,100,117,108,101,32,99,111,110,110,101,99,116,101,100,33
defb 34,32,32,32,32,32,32,32,0,17,0,104,1,131,32,28,3,187,1,152,32,32,32,32,32,0,31,0,176,4,197,32,83,69,78,68,32,65,84,32,67
defb 79,77,77,65,78,68,83,32,82,79,85,84,73,78,69,0,24,0,196,4,158,32,13,0,0,235,239,15,32,236,32,255,14,40,3,0,0,225,41,0,29
defb 0,206,4,185,32,28,208,251,44,255,1,40,172,40,3,0,0,193,44,13,0,0,203,44,15,41,41,0,11,0,216,4,176,32,13,0,0,203,0,24,0
defb 226,4,185,32,28,208,251,44,28,13,0,1,185,32,28,208,251,44,28,10,0,0,12,0,236,4,3,0,0,193,239,34,34,0,6,0,246,4,201,0,24
defb 0,0,5,197,32,83,69,78,68,32,84,69,88,84,32,82,79,85,84,73,78,69,0,25,0,60,5,158,32,13,0,0,235,239,15,32,236,32,255,14,40
defb 3,0,0,225,41,32,0,38,0,70,5,185,32,28,208,251,44,255,1,40,172,40,3,0,0,193,44,13,0,0,203,44,15,41,41,32,32,32,32,32,32
defb 32,32,32,0,14,0,80,5,176,32,13,0,0,203,32,32,32,0,36,0,85,5,161,32,13,0,0,99,114,108,230,238,14,32,235,32,185,32,28,208,251
defb 44,25,13,1,185,32,28,208,251,44,25,10,0,36,0,90,5,191,32,35,15,44,255,3,40,25,10,41,244,255,3,40,25,13,41,1,3,0,0,225,239
defb 34,34,32,32,32,32,32,0,6,0,100,5,201,0,22,0,208,7,197,32,87,73,70,73,32,67,79,78,78,69,67,84,73,79,78,0,22,0,210,7,3
defb 0,0,193,239,34,65,84,69,48,34,1,159,32,30,176,4,0,12,0,213,7,185,32,28,209,251,44,15,0,10,0,218,7,159,32,30,184,11,0,10,0
defb 223,7,131,32,28,3,187,0,32,0,224,7,161,32,13,0,0,83,84,65,84,85,211,239,14,32,235,32,13,0,0,83,84,65,84,85,211,239,15,0,40
defb 0,228,7,178,32,13,0,0,115,116,97,116,117,243,32,160,32,30,2,8,44,30,152,8,44,30,238,7,44,30,152,8,44,30,2,8,32,32,0,6,0
defb 238,7,201,0,52,0,2,8,169,32,25,27,44,25,19,245,13,0,0,111,102,102,115,101,244,1,163,34,65,46,80,46,32,115,115,105,100,58,34,44,3
defb 0,0,115,115,105,228,32,32,32,32,32,32,32,32,0,52,0,12,8,169,32,25,28,44,25,20,245,13,0,0,111,102,102,115,101,244,1,163,34,112,97
defb 115,115,119,111,114,100,58,34,44,3,0,0,112,97,115,243,32,32,32,32,32,32,32,32,32,0,73,0,22,8,3,0,0,225,239,34,65,84,43,67,87
defb 74,65,80,95,68,69,70,61,34,244,255,3,40,25,34,41,244,3,0,0,83,83,73,196,244,255,3,40,25,34,41,244,34,44,34,244,255,3,40,25,34
defb 41,244,3,0,0,80,65,83,211,244,255,3,40,25,34,41,0,15,0,32,8,159,32,30,176,4,32,32,32,32,32,0,53,0,42,8,169,32,25,30,44
defb 25,21,245,13,0,0,111,102,102,115,101,244,1,191,34,67,111,110,110,101,99,116,105,110,103,46,46,46,34,59,32,32,32,32,32,32,32,32,32,32,32
defb 32,32,0,10,0,52,8,159,32,30,184,11,0,45,0,62,8,161,32,13,0,0,115,116,97,116,117,243,239,16,32,235,32,191,34,79,75,34,1,138,32
defb 35,17,1,160,32,30,228,7,32,32,32,32,32,32,32,32,0,73,0,72,8,169,32,25,15,44,25,22,245,13,0,0,111,102,102,115,101,244,1,191,34
defb 69,114,114,111,114,58,82,101,116,114,121,40,49,41,32,111,114,32,73,110,115,101,114,116,32,110,101,119,32,65,99,99,101,115,115,32,80,111,105,110,116
defb 40,50,41,63,34,32,32,0,36,0,82,8,161,32,255,10,40,25,64,41,239,14,32,235,32,138,32,35,16,1,160,32,30,32,8,32,32,32,32,32,32
defb 32,32,0,46,0,92,8,161,32,255,10,40,25,65,41,239,14,32,235,32,138,32,35,16,1,138,32,35,17,1,131,32,28,3,187,1,160,32,30,2,8
defb 32,32,32,32,32,32,32,0,10,0,102,8,160,32,30,82,8,0,60,0,152,8,138,32,35,16,1,131,32,28,3,187,1,169,32,25,27,44,25,19,245
defb 13,0,0,111,102,102,115,101,244,1,163,34,72,111,115,116,32,105,112,58,34,44,3,0,0,104,111,115,244,32,32,32,32,32,32,32,0,52,0,162,8
defb 169,32,25,30,44,25,20,245,13,0,0,111,102,102,115,101,244,1,163,34,112,111,114,116,58,34,44,3,0,0,112,111,114,244,32,32,32,32,32,32,32
defb 32,32,32,32,32,32,0,53,0,172,8,3,0,0,72,79,83,212,239,255,3,40,25,34,41,244,3,0,0,72,79,83,212,244,255,3,40,25,34,41,244
defb 34,44,34,244,3,0,0,80,79,82,212,32,32,32,32,32,32,32,0,56,0,182,8,3,0,0,225,239,34,65,84,43,67,73,80,83,84,65,82,84,61
defb 34,244,255,3,40,25,34,41,244,34,84,67,80,34,244,255,3,40,25,34,41,244,34,44,34,244,3,0,0,72,79,83,212,0,25,0,192,8,3,0,0
defb 99,111,110,110,101,99,244,239,3,0,0,225,32,32,32,32,32,0,10,0,197,8,159,32,30,176,4,0,56,0,202,8,169,32,25,30,44,25,21,245,13
defb 0,0,111,102,102,115,101,244,1,191,34,67,111,110,110,101,99,116,105,110,103,46,46,46,34,59,1,159,32,30,184,11,32,32,32,32,32,32,32,32,32
defb 32,0,22,0,212,8,161,32,13,0,0,83,84,65,84,85,211,239,17,32,235,32,201,0,70,0,222,8,169,32,25,15,44,25,22,245,13,0,0,111,102
defb 102,115,101,244,1,191,34,69,114,114,111,114,58,82,101,116,114,121,40,49,41,32,111,114,32,73,110,115,101,114,116,32,110,101,119,32,72,111,115,116,32
defb 83,101,114,118,101,114,40,50,41,63,34,0,31,0,232,8,161,32,255,10,40,25,64,41,239,14,32,235,32,138,32,35,16,1,160,32,30,182,8,32,32
defb 32,0,38,0,242,8,161,32,255,10,40,25,65,41,239,14,32,235,32,138,32,35,16,1,138,32,35,17,1,160,32,30,152,8,32,32,32,32,32,0,10
defb 0,252,8,160,32,30,232,8,0,13,0,184,11,197,32,115,116,97,116,117,115,0,12,0,189,11,185,32,28,209,251,44,15,0,38,0,194,11,3,0,0
defb 225,239,34,65,84,43,67,73,80,83,84,65,84,85,83,34,1,159,32,30,176,4,32,32,32,32,32,32,32,32,0,11,0,204,11,13,0,0,201,239,15
defb 0,40,0,214,11,214,32,40,13,0,0,201,241,22,41,32,250,32,40,255,11,40,28,209,251,41,239,25,255,41,32,32,32,32,32,32,32,32,32,32,0
defb 38,0,224,11,13,0,0,193,239,255,11,40,28,208,251,41,1,13,0,0,201,239,13,0,0,201,244,15,32,32,32,32,32,32,32,32,32,0,6,0,234
defb 11,213,0,25,0,244,11,13,0,0,83,84,65,84,85,211,239,255,11,40,28,208,251,41,245,25,48,0,42,0,249,11,161,32,40,13,0,0,83,84,65
defb 84,85,211,241,16,41,32,252,32,40,13,0,0,115,116,97,116,117,243,238,19,41,32,235,32,30,189,11,0,6,0,254,11,201,0,18,0,160,15,13,0
defb 0,225,239,15,1,13,0,0,233,239,14,0,27,0,170,15,214,32,40,13,0,0,225,239,15,41,32,250,32,40,13,0,0,233,241,25,15,41,0,29,0
defb 180,15,13,0,0,225,239,255,11,40,28,209,251,41,1,13,0,0,233,239,13,0,0,233,244,15,0,6,0,190,15,213,0,6,0,200,15,201,0,46,0
defb 136,19,197,32,97,117,116,111,109,97,116,105,99,32,115,112,101,101,100,32,100,101,116,101,99,116,105,111,110,32,111,102,32,119,105,102,105,32,32,32,32
defb 32,32,0,21,0,146,19,185,32,28,209,251,44,15,32,32,32,32,32,32,32,32,32,0,19,0,156,19,3,0,0,225,239,34,65,84,34,32,32,32,32
defb 32,0,16,0,166,19,159,32,30,176,4,1,159,32,30,160,15,0,19,0,176,19,161,32,13,0,0,193,239,15,32,235,32,30,196,19,0,51,0,186,19
defb 13,0,0,225,239,255,11,40,28,208,251,41,1,161,32,13,0,0,225,239,25,65,32,252,32,13,0,0,225,239,25,13,32,252,32,13,0,0,225,239,25
defb 79,32,235,32,201,0,30,0,196,19,13,0,0,83,69,82,83,80,69,69,196,239,13,0,0,83,69,82,83,80,69,69,196,245,15,0,77,0,201,19,161
defb 32,13,0,0,83,69,82,83,80,69,69,196,239,23,32,235,32,185,32,28,209,251,44,13,0,0,67,85,82,83,80,69,69,196,1,191,34,78,79,32,87
defb 105,70,105,32,109,111,100,117,108,101,32,100,101,116,101,99,116,101,100,33,34,1,152,32,32,32,32,32,32,32,0,28,0,206,19,185,32,28,209,251,44
defb 13,0,0,115,101,114,115,112,101,101,228,1,160,32,30,146,19,0,0,0
This is actaully a method of passing Basic files through assembly code, and i'm using it in many other RSX commands!
The bytes transferred to &170 is the actual basic listing, and it's nothing more that the saved BAS file, without the first 128 bytes of header! ;)
After that, you only need to set some variables in memory (the "patch_mems" section) , and you are ready!
And finally, the best part: the few bytes in the "run code" section, allows you to automatically run the inserted basic program, without giving "RUN" command! ;)
It's only a few instructions:
ld c,0
ld hl,&ea92
call &001b
This,as small as it may seems, was rather tricky and hard to accomplish, as it required to intercept the "Run" command in basic rom at specific address (far call RST 3 to &ea92 of rom 0=Basic (http://cpctech.cpcwiki.de/docs/basic.asm))!
And because i couldn't find a dissasmble code of CPC 464 BASIC 1.0 rom, this automation is only available for CPC 6128 :)
btw, here is all you need to know about creating your own rsx commands: http://cpctech.cpc-live.com/docs/manual/s158se09.pdf (http://cpctech.cpc-live.com/docs/manual/s158se09.pdf)
Quote from: Devlin on 13:33, 08 June 21Has a 3d-printable case been made for the USIfAC 2 yet? My current solution is less than ideal, and I'd prefer it in a case to prevent damaging my table/usifac2.
R
Somewhere in this thread someone has posted a 3d case. However it doesn't fit every Usifac II as I recognized. They differ slightly and I guess also the Reset-Button (or Pause?) has changed. And it doesn't close on its own, so I used some double-sided strip to keep the lid in place. Better than nothing though and it looks much better than the pure board.
Quote from: issalig on 17:41, 08 June 21
Hi @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) , I am having a look at your code to run basic from asm and I have some questions
defb 14,0,33,149,234,205,27,0
corresponds to
0000 0E 00 LD C,00
0002 21 95 EA LD HL,EA95
0005 CD 1B 00 CALL 001B ; KL_FAR_PCHL
and you said it was LD HL, EA92 (I guess it is just a mistake when writing by heart)
the bytes correspond to a far call RST 3 to &ea92 of rom 0=Basic:
ld c,0
ld hl,&ea92
call &001b
Quote from: issalig on 17:41, 08 June 21
Second question is what cp &6e is for? You are checking the low part of the sum of &170 + basic_code_size to &6e, ??
If you check firmware guide you will see that @ &AE66 (and also &AE68, &AE6A, &AE6C) are the addresses used by basic to store the start address of free space (or start of variables & arrays area). This address can be calculated by adding &170 offset to the size of the basic program. Now, for Amstrad CPC464 this address is in slightly different place (&ae83), so, i'm using the low byte of this address (&83 or &66) to store it in USIfAC's ram, and fetch it whenever is needed (using a simple inp &fbdc), BUT also to DISTINGUISH cpc464 from cpc6128.
Now, if you add 8 to &66 you will have &6e, and that would be the value of l register at the end of loop, IF we are running on a cpc 6128 (e.g. basic 1.1)! So in 2 words, the cp &6e is for distinguish cpc 464 form 6128 (or better basic 1.0 from 1.1).
Quote from: issalig on 17:41, 08 June 21
Third question is what ae29 does? it is just a variable that holds 0? and what is the purpose of copying and calling defb 14,0,33,149,234,205,27,0 on 7900, could not be called just from a label before defb line?
again reading from firmware guide, you will see that &ae29 is for storing file type byte, where for Basic program, must be 0. Now, in order to run basic program i needed to execute the "RUN" code @ &ea78 of basic 1.1 rom. What i found out though, is that i needed to skip the first section (which is relevant to run from a BAS file) as i needed to run a basic code already in ram, that's why i start the execution of routine from &ea92. Executing the run command is actually a far call RST 3 to &ea92 of rom 0=Basic. This can't be done from usifac's rom directly (as the RST3 changes upper rom to basic rom), so it must be first placed in ram to execute it, thus the copying @ &7900.
Quote from: issalig on 17:41, 08 June 21
- And the forth question is, what are the main differences between these two ways of running basic?In this code they detect basic version and also copy 4x times &170+basic_code_size but instead of using RST 3 and go to &ea95 (inside RUN routine)
they go directly to the beginning of RUN routine at &ea78 (cpc6128)
The cpc6128 "way" is direct running of basic program through the proccess i described. To do so, i needed the disasemble basic rom to find out at what address i need to jump to ,for executing a run command properly. And so, because i couldn't fine a disassemble of basic 1.0 rom,in case of cpc464, this must be ommited, and instead, you will need to give the "run" command manually at the prompt.
Quote from: issalig on 17:41, 08 June 21
I have found a disassembly of CPC464 in case you need it https://acpc.me/ACME/LITTERATURE_LIVRES/%5BGER%5DGERMAN/MARKT-UND-TECHNIK/ROM-Listing_CPC464-664-6128(Jorn_W_ANNECK_Till_MOSSAKOWSKI).pdf (https://acpc.me/ACME/LITTERATURE_LIVRES/%5BGER%5DGERMAN/MARKT-UND-TECHNIK/ROM-Listing_CPC464-664-6128(Jorn_W_ANNECK_Till_MOSSAKOWSKI).pdf)
Thanks, i'll take a look and see if i can make it work for CPC464 too. :)
Thanks for all the details, I will need some time to digest it all
Anyway, I have assembled this code again
defb 14,0,33,149,234,205,27,0
and it gives ea 95 again
0E 00
21 95 EA ld hl, ea95
CD 1B 00
So if ea92 is the correct one, shouldn't be this defb?
defb 14,0,33,146,234,205,27,0
Yes, the correct is &ea95 ;D
Quote from: ikonsgr on 18:55, 08 June 21
Thanks, i'll take a look and see if i can make it work for CPC464 too. :)
I extracted the run function for BASIC 1.0 from the book (https://acpc.me/ACME/LITTERATURE_LIVRES/%5BGER%5DGERMAN/MARKT-UND-TECHNIK/ROM-Listing_CPC464-664-6128(Jorn_W_ANNECK_Till_MOSSAKOWSKI).pdf (https://acpc.me/ACME/LITTERATURE_LIVRES/%5BGER%5DGERMAN/MARKT-UND-TECHNIK/ROM-Listing_CPC464-664-6128(Jorn_W_ANNECK_Till_MOSSAKOWSKI).pdf)) and translated comments into English (Danke schöne Google Tanslator) and mixed it with this code https://www.cpcwiki.eu/forum/programming/asm-source-code/msg158311/#msg158311 (https://www.cpcwiki.eu/forum/programming/asm-source-code/msg158311/#msg158311)
I attach a working code 8) for 464,664 and 6128
The changes are:
- Address of start of BASIC variables ld l, &83 for 464 ld l, &66 for 6128 and 664
- RUN entry point EA95 is for 6128, EA7D for 664, and E9DB for 464
- file type byte AE29 (6128 and 664), AE42 (464)
kl_rom_select equ &B90F
data_size equ 35 ; size of BASIC file
addr equ &170 ; BASIC files normally start at 170, let's write in this area
org &1200 ; and store our program in &1200
main:
; we will use 16-bit registers (hl, de, ... to deal with memory addresses that take 2 bytes &AABB)
ld hl, basic_code ; hl = address where basic_code is starts, i.e. org + something but the assembler does it for us
ld de, addr ; de = &170
ld bc, data_size ; bc = data size
ldir ; ldir copies a block from hl address to de address of length bc (i.e. memcpy)
; do not forget to go back from call
; Address of start of variables (&AE66-67 in cpc6128-664, &AE83-84 in cpc464)
;basic_version:
ld c, 0
call kl_rom_select ;select upper rom given by C -> upper rom 0 -> BASIC
ld a,(&c002) ;basic 1.0 byte 2 is 0; basic 1.1 664 is 1; basic 1,1 byte 2 is 2;
ld (basic_version), a
cp 0
jr z,cpc464
ld l, &66 ; basic 1.1 at AE66
ld a, &29
ld (file_type), a
ld (basic_version), a
cp 1
jr z,cpc664
ld hl, run_entry
ld (hl) , &95 ;ea95 for 6128
inc hl
ld (hl) , &ea
jr patch_mems
cpc664:
ld hl, run_entry
ld (hl) , &7d ;ea7d for 664
inc hl
ld (hl) , &ea
jr patch_mems
cpc464:
ld l, &83 ; basic 1.0 at AE83
ld a, &42
ld (file_type), a
ld hl, run_entry
ld (hl) , &db
inc hl
ld (hl) , &e9
patch_mems:
ld h,&ae ; hl =AExx
ld de, data_size+&170 ;end of data
ld B,4 ; 4 bytes
patch_loop:
;write data_size+170 to AExx
ld (hl),e
inc hl
ld (hl),d
inc hl
dec b
jr nz,patch_loop
ld a,l
jr run_command
ret
run_command:
;ld hl,&ae29 ; file type 0
;ld hl,&ae42 ; file type 0 cpc464
ld h, &ae
ld a, (file_type)
ld l, a
ld a,0
ld (hl),a
ld hl, run_code
ld de, &7900
ld bc, 9 ; run code size,
ldir
jp &7900 ; copy run code in memory and call it
run_code:
ld c, 0
;ld hl, &ea95 ;6128
;ld hl, &e9db ;464
ld hl, (run_entry)
call &001b
ret
basic_code: ;35 bytes long
defb &0c,&00,&0a,&00,&c5,&20,&48,&65,&6c,&6c,&6f,&00,&15,&00,&14,&00
defb &bf,&20,&22,&48,&65,&6c,&6c,&6f,&20,&57,&6f,&72,&6c,&64,&21,&22
defb &00,&00,&00
basic_code_end:
basic_version: defb 0
file_type: defb 0
run_entry: defw 0
Firmware code of RUN function for 464 for reference
E9BD CD 51 DD CALL DD51 End of statement?
E9C0 EB EX DE, HL
E9C1 2A 81 AE LD HL, (AE81) program start after DE
E9C4 EB EX DE, HL
E9C5 38 1C JR C, E9E3 then from program start
E9C7 FE 1E CP 1E Token for line number?
E9C9 28 15 JR Z, E9E0 then from program line
E9CB FE 1D CP 1D Token for line address?
E9CD 28 11 JR 2, E9E0 then from the program line
E9CF CD 0D EA CALL EA0D 1. Read and evaluate block
E9D2 21 30 EA LD HL, EA30 Addr. Load binary file
E9D5 D2 13 BD JP NC, BD13 Binadrdat. ? d. MC BOOT PROGRAM
E9D8 CD A8 EB CALL EBA8 otherwise load program
E9DB 2A 81 AE LD HL, (AE81) Pointer to program start
E9DE 18 11 JR E9F1 start program
E9EO CD 67 E7 CALL E767 Get line address
E9E3 D5 PUSH DE Save pointer to entry point
E9E4 CD AD D2 CALL D2AD initialize cassette
E9E7 CD 8C C1 CALL C18C delete variables
E9EA CD 7A C1 CALL C17A Initialize basic pointer
E9ED CD 5E C1 CALL C15E Printout select. and I / O init.
E9F0 E1 POP HL new program pointer
E9F1 23 INC HL Pass over zero at the end of the line
E9F2 F1 POP AF delete call address
E9F3 C3 93 DD JP DD93 for interpreter loop
That's great! I have too, check the code (https://www.cpcwiki.eu/forum/programming/asm-source-code/msg158311/#msg158311) and manage to create a new "run command" code, that now works for CPC464 and CPC6128 (and most probable CPC664, although i don't have one to test it :D ):
kl_rom_select equ &B90F
org &7900
write"DIRECT_ROM.BIN"
ld c,0
call kl_rom_select
ld a,(&c002)
cp 0
jp z,cpc_464
cp 1
jp z,cpc_664
jp &ea78+&1d ;; run BASIC CPC6128
cpc_664:
jp &ea7d+&1d ;; run BASIC CPC664
cpc_464:
jp &e9bd+&1d ;; run BASIC CPC464
The above code is transferred to ram and executed from there using this code:
ld hl, run_code
ld de, &7900
ld bc, 27
ldir
jp &7900
Run_code:
defb 14,0,205,15,185,58,2,192,254,0,202,24,121,254,1,202,21,121,195,149,234,195,154,234,195,218,233
As i explained before,the offset i'm using is for skipping the first section (which is relevant to run from a BAS file) of Basic's "Run" routine, which i assume is the same for all 3 models, so i used the same offset.
New firmware update (_4b) with the following improvements:
- RSX commands: |SET,|COM,|WIFI,|TER,|GALA,|PACMAN,|KGOR are now executed directly on CPC464, without needing to give "RUN" anymore!
- SNA routine now checks if Amstrad has 64k only, and loads only the 1st 64k ram dump even if snapshot file is for 128k. The reason i did this is because i noticed that the snapshot archive has a lot of game files that are 128k but actually only the 1st 64k iis used, so now you will be able to load most of the SNA files on CPC464 too!
- Minor optimization of board's ROM code this time:replace "cp 0" with "or A" , reduce the size of hex file by dumping initial zeros of arrays & variables used in routines transferred to RAM.
- Fix a small bug in |format routine- now shows correctly formatted track numbers.
- Fix a bug in |2PC routine when use the "invert file selection" function.
Maybe it is time for a fork with USIFAC support
https://github.com/yawor/m4board-enclosure
Quote from: eto on 17:49, 08 June 21
Somewhere in this thread someone has posted a 3d case. However it doesn't fit every Usifac II as I recognized. They differ slightly and I guess also the Reset-Button (or Pause?) has changed. And it doesn't close on its own, so I used some double-sided strip to keep the lid in place. Better than nothing though and it looks much better than the pure board.
Quote from: ikonsgr on 16:12, 09 June 21
New firmware update (_4b) with the following improvements:
Hi John
Well done
Ps I can now delete the Macintosh extra files that are added to a USB stick (Known as TURDS)
Thanks for that.
A small request Is it possible to sort the Cat EG:- a-z etc
Keep up the GOOD Work
Keep Safe
Ray
Quote from: Audronic on 02:18, 10 June 21
A small request Is it possible to sort the Cat EG:- a-z etc
I'm afraid usb host module doesn't allow that. Files/dirs will be shown in order of how they were initially written in usb flash drive, usually this is alphabetically anyway. But any new file saved will be added at the end of list.
In anycase, i thnk that using the filter argument of the |CAT (to filter the list of files taken), is what can really makes catalogue management ..."piece of cake"! :)
I've noticed when doing a CAT on a folder that a large number of said folders do not identify themselves with the <DIR> marker - And that any folder with a long name, and a period (.) in them, will incorrectly split their names - f.ex: "Dizzy. Amstrad Action Special Edition" will display as "DIZZY~1.AMS" which causes an error if trying to navigate to it with cd
Quote from: ikonsgr on 09:18, 10 June 21
I'm afraid usb host module doesn't allow that. Files/dirs will be shown in order of how they were initially written in usb flash drive, usually this is alphabetically anyway. But any new file saved will be added at the end of list.
In anycase, i thnk that using the filter argument of the |CAT (to filter the list of files taken), is what can really makes catalogue management ..."piece of cake"! :)
the filter is nice but inconvenient to use on a 464 though - that said, a proper file manager (please don't just bake it into the next fw) would be a gods-send
I feel like it'd be a "killer utility" for the usifac2 and massively improve an already fantastic device.
Quote from: Devlin on 13:52, 10 June 21
the filter is nice but inconvenient to use on a 464 though - that said, a proper file manager (please don't just bake it into the next fw) would be a gods-send
I feel like it'd be a "killer utility" for the usifac2 and massively improve an already fantastic device.
It would be most unlikely for such a utility as a file manager to be incorporated into fw, because there is almost no space in microcontroller program memory left :)
But if i may say, judging from my (rather time consuming...) personal experience, the Basic loader utlity already masisvely imrpoved the user experience with cpc464, as it practically eliminates the need of issuing rsx commands! You just have a bunch of BAS files to select from, and run directly!
And although filtering is a bit tiresome on a CPC464, still, is MUCH easier and faster to load a game, than doing it "manually", using rsx commands (and the "sadistic" way of issuing arguments on a cpc 464 :laugh: )!
In fact, i believe that ,for collections of up to a few 100's of games, you don't need filtering anyway, as with a simple cat, you get pages of 25 games (BAS files) in less than a second, so, practically you can "Scan" your entire collection in a few seconds! ;)
In a more general perspective,i would say that a little bit of CLI typing in usage, always adds to the "nostlagia feeling" of using an 80's home micro Amstrad CPC in 2021. It's like a kind of a small "ritual" :)
Αnd the same goes the "other way":
Just imagine in a few years from now...
"man, this file manager looks too boring and tedious anymore, why don't add vocal recognition for loading games? Or even better, wouldn't be great if i could just think of a game, and amstrad instantly load it?" (yes, yes, my "tech-freak" driven boredom and laziness shows no limit...) :P
Τoo much easines and conveniences, and you will certainly loose the... "feeling"! ;D
Unless you are too young and this really doesn't matter for you... :)
In the end, if someone wants to just load and play games, as fast and easy as possible, well... that's what Amstrad emulators are for! :)
Quote from: ikonsgrIt would be most unlikely for such a utility as a file manager to be incorporated into fw, because there is almost no space in microcontroller program memory left :)
That, is entirely fair, and if honest, a bit of a relief.
QuoteIn the end, if someone wants to just load and play games, as fast and easy as possible, well... that's what Amstrad emulators are for! :)
I did not buy a usifac ii, so I could play in an emulator.. I like my real hardware :)
Quote from: Devlin on 13:43, 10 June 21
I've noticed when doing a CAT on a folder that a large number of said folders do not identify themselves with the <DIR> marker - And that any folder with a long name, and a period (.) in them, will incorrectly split their names - f.ex: "Dizzy. Amstrad Action Special Edition" will display as "DIZZY~1.AMS" which causes an error if trying to navigate to it with cd
Unfortunately this is a constraint (all names are converted in 8.3 dos type, so better not have too "fancy" long file names :) ) & a bug (sometimes not identifying a directory name with <DIR>,this mostly happens when you have many sub dirs ) of the CH376 usb host module... ::)
Quote from: ikonsgr on 23:52, 10 June 21all names are converted in 8.3 dos type
Btw: Is it possible to get the long file names? Even if it cannot be used for the RSX commands, for a menu application, they could be used to display a more meaningful name.
I'm afraid not. The 8.3 names is not something i make for "compatibility" reasons (as amstrad cpc also uses 8.3 filenames) but it's what the usb module actually responds to.
hi @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
is there softwares for Linux or documentation to create those softwares?
Hello
Is there any way to create the DSK of current disk file into USB ?
Would you give us a program in BASIC or ASM or BIN?
Thank you.
Quote from: roudoudou on 16:46, 11 June 21
hi @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
is there softwares for Linux or documentation to create those softwares?
I think you should ask issalig as he has already develop some utilities on linux: https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-iimake-your-pc-or-usb-stick-an-hdd-for-amstrad-access-dsk-and-many-more!/msg201894/#msg201894
Quote from: Fran123 on 17:24, 11 June 21
Hello
Is there any way to create the DSK of current disk file into USB ?
Would you give us a program in BASIC or ASM or BIN?
Thank you.
For now, there is no such ability to create a dsk image from a floppy disk. But you can copy directly files from a floppy disk to a usb flash drive using |2PC.
Such a utility would certainly need quite a lot of work to develop, as it would require to recreate the whole structure of an image file (https://www.cpcwiki.eu/index.php/Format:DSK_disk_image_file_format), and for now i'm not thinking to get involved with that (i'm working on another project... ;D )
I thought it would be easier, reading a sector and writing it to the file
Quote from: ikonsgr on 18:37, 11 June 21
(i'm working on another project... ;D )
Hmmmmnnn I wonder what that is ?
Keep up the good work
Keep Safe
Ray
@Audronic (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1169) ,it's a 512k ram expansion, but instead of the usual CPLD approach, i use (again ;D ) a PIC mcu! :)
@Devlin (https://www.cpcwiki.eu/forum/index.php?action=profile;u=389) , i had some thoughts about the "most wanted" file manager, and i think it would be rather easy to convert the existed assembly code for |CAT RSX command to output the list of names into memory instead of the screen. Then, using BASIC i could take the data from there and create a table of strings for each name for further proccess. Unfortunately the Basic routine for this it's rather slow (it would take ~4-5 seconds to get each page), but i'm thinking of using Turbo basic compiler to speed things up ;)
The USIfAC II is a great expansion. May be the FDC emulation can be improved by 3rd party?
I tried to run CPM (disk 1) with |MG and |FDC and it doesn't work :(
The disk are http://www.cpcwiki.eu/imgs/b/b1/CPC6128_System_Disks_%28SP%29.zip
Have you tried?
Did you try on an (unmodified) 6128? Was it CP/M Plus?
Quote from: Fran123 on 11:06, 13 June 21
I tried to run CPM (disk 1) with |MG and |FDC and it doesn't work :(
The disk are http://www.cpcwiki.eu/imgs/b/b1/CPC6128_System_Disks_%28SP%29.zip
Have you tried?
CPM 2.2 (disk 3) works fine but it seems that CPM3/plus can't be used from dsk image as it uses a completely different boot method:
https://www.youtube.com/watch?v=PYur2S_pByk
And this somehow causes problems when loading from image. But i suppose you can copy cpm/plus image to a real disk and use it from disk ;)
Quote from: TotO on 10:38, 12 June 21
The USIfAC II is a great expansion. May be the FDC emulation can be improved by 3rd party?
FDC emultion is implemented entirely in PIC mcu code using cowbasic. If anyone has experience with cowbasic, he can check the source code inside "inner workings" folder for further details.
New utility:
Finally, the most wanted (by some.... :D) FILEMANAGER is READY! You can download it from here (https://www.dropbox.com/s/aaeqqvvuuln3pcc/File%20manager.zip?dl=0)
Folder contains small guide (readme.txt) and the source codes (.txt and .asm files) for anyone interested.
I made 2 versions:
One that uses a new RSX command: |MAN (this will be added to a new fw from now on).
and,
One that loads the assmebly routine from a file (can be used with any board),"MANAG.BIN" binary,which is the same RSX routine in file form:
memory &17ff:load"manag.bin",&1800;call &1800
Once executed (either with |MAN or call &1800), it will outputs into RAM ,all the file names inside the current usb directory, starting from address &2000 and in the form of:
1name1name1name1....1name12 ('1' is the separator and '2' points the end of the list)
Using this, it's easy to grab the names and place them inside an array of strings for further proccess.
Now, as i previuolsy noted, i used turbobasic to compile the main Basic program (which contains the navigation and page creation code), in order to achieve fast respond, when you change pages or directories. You can view this code in MANAGER.TXT Basic file (which is compiled to MANAGER.BIN used). And you can also see a BASIC example of placing names into a string of arrays too.
Finally here is the quick guide:
Copy contents of the folder to usb flash drive root dir,and give to Basic prompt: RUN"FM
Select 'Y'/'y' (Check with |STAT if you board has rev_4d firmware or newer, and then you can also choose "n"/"N")
Use keys:
- Left-Right arrows for changing pages.
- Up/Down arrows for seeking file/dir names into each page.
- <Return> for taking action: If selected name is a directory it will move into it, if it's a "DSK" image it will give you a catalogue of the disk image(CPC6128/664) or it will reset (CPC464) and then you can access image by giving "CAT".Finally, if it's a file,it will try to execute it.
- <SPACE> Moves up a directory, if you are inside a sub folder you can also use "." or ".." at the top of first page
notes:
- by continiously pressing up/down arrows you will get faster movement for quicker seeking,press momentarily for slower "row by row" seeking.
-.txt and .asm contains the source codes.
- FM file is a small BASIC program, if you want,you can customize it, to remove the initial question,changing colors of letters/background etc.
AWESOME!
Thanks for the gentle prod! this will be extremely useful :)
However, I already broke it :( . It tries to run folders as programs if it doesn't have the <DIR> marker at the end of it
Quote from: Devlin on 19:27, 13 June 21
Thanks for the gentle prod! this will be extremely useful :)
However, I already broke it :( . It tries to run folders as programs if it doesn't have the <DIR> marker at the end of it
If you have a lot of such "un marked" folders, then maybe we can change a bit the code of the BASIC program in order to change the behavior:
10 MODE 2:posi=1:total=0:endline=0:page=1:delay=1000:keypress=0
16 CALL &1800
20 DIM name$(25),startmem(100)
25 FOR i=1 TO 100:startmem(i)=0:NEXT i
40 page=1:i=0:mem=&2000:GOSUB 2000
100 CLS:posi=1:total=i:i=1:IF total<25 THEN endline=total-1 ELSE endline=25
105 PAPER 0:PEN 1
110 WHILE (i<=endline)
120 PRINT name$(i):i=i+1
130 WEND
140 GOSUB 3005
145 FOR l=1 TO delay:NEXT l
150 IF INKEY(0)=0 AND posi>1 THEN GOSUB 3000:posi=posi-1:GOSUB 3005:IF (keypress=1) THEN delay=1:GOTO 145 ELSE delay=1000:keypress=1:GOTO 145
160 IF INKEY(2)=0 AND posi<endline THEN GOSUB 3000:posi=posi+1:GOSUB 3005:IF (keypress=2) THEN delay=1:GOTO 145 ELSE delay=1000:keypress=2:GOTO 145
170 IF INKEY(8)=0 AND page>1 THEN page=page-1:posi=1:mem=startmem(page):GOTO 2000
180 IF INKEY(1)=0 AND b<>2 THEN page=page+1:posi=1:GOTO 2000
190 IF INKEY(18)=0 THEN GOSUB 1000
195 IF INKEY(47)=0 THEN |CD:CALL &1800:GOTO 40
196 keypress=0
200 GOTO 145
500 WHILE LEN(name$(i))>0:PRINT name$(i):i=i+1:WEND
510 END
1000 A$=RIGHT$(NAME$(POSI),3):IF A$="IR>" THEN 1050
1010 POKE &17F0,LEN(name$(posi))
1015 FOR i=0 TO LEN(name$(posi))-1
1020 POKE &17F1+i,ASC(MID$(name$(posi),i+1,1))
1030 NEXT i:END
1050 IF LEFT$(name$(posi),1)="." THEN |CD ELSE A$=LEFT$(NAME$(POSI),(LEN(NAME$(POSI))-6)):|CD,@A$
1060 CALL &1800:GOTO 40
2000 i=0
2005 IF startmem(page)=0 THEN startmem(page)=mem
2010 b=PEEK(mem)
2020 IF (b=1) AND (i<25) THEN i=i+1:mem=mem+1:name$(i)="":GOTO 2010
2030 IF (b=1) AND (i=25) THEN 100
2040 IF b=2 THEN 100
2050 name$(i)=name$(i)+CHR$(b):mem=mem+1:GOTO 2010
3000 PAPER 0:PEN 1:GOTO 3010
3005 PAPER 1:PEN 0
3010 LOCATE 1,posi:PRINT name$(posi):PAPER 0:PEN 1:RETURN
Perhaps if i assign one more key where when you press it, it will ommit the checking if string name ending in <DIR> and treat name as DIRECTORY will solve the problem.
And you could be informed by a small message on the right corner of screen if this is enabled or not too! ;)
That's pretty much exactly what I was thinking for now (and am somewhat halfway through editing) - have an override key for browsing into directories that don't mark themselves as such as a workaround.
Am I correct in understanding MANAG.BIN is a compiled version of MANAGER.TXT?
Not worry,i've already done it! just reload the file manager folder.
I've added key <1>, when pressed all names are treated as directories and you will get a notification at the top right of screen! And if you press it again it's deactivated! And the best thing is , even if you have this mode enabled and try to run a real file or dsk image, it's just give an instant error (no directory found) and... it continues without problem! :)
So, even if you forgot to deactivate it, for running a file, you just press '1' and you are ready to go!
And now, i think we solve the problem for good! ;)
"Manag.bin", is the binary of the aseembly routine that extracts directory lists to ram (the equivalent of the new |MAN command). FMANAGER.TXT is the source code for the compiled "FMANAGER.BIN" binary file.
I've done a bit of tinkering here too, and discovered that folders will show their correct directory status *IF* that folder doesn't have the *archive* bit set in Windows - If it does, it doesn't show the <DIR> part CPC-side - downloading the new manager now anyway. having the option to override is helpful.
Run into another issue though - Some games don't load their loading screens correctly, or just outright fail to load when launched through the file manager - I think it's down to memory, is there a way to clear the ram before launching something
I execute a: "CLEAR:MEMORY 42600" before running the selected file (check the "FM" BASIC program, you can easily change it if you want). Most games work fine with that, but some might have problems.
In that case you can reset (by having the "return to root dir" disabled in order to maintain the current game dir), give a cat, and run the file from "clean start" ;)
btw,i noticed a couple of games that report "out of memory" error (for example gauntlet), but this turns out to be an incompatibility with cpc464 as the games runned fine (using the Filemanager) on a cpc6128, and also, i got the same error on cpc464, even when i tried to run them from "clean start"....
Quote from: Devlin on 20:57, 13 June 21
I've done a bit of tinkering here too, and discovered that folders will show their correct directory status *IF* that folder doesn't have the *archive* bit set in Windows - If it does, it doesn't show the <DIR> part CPC-side.
WOW! That's a great discovery! I'll add this tip into user's guide!
So if you just remove all archive bits from all dirs in the usb stick, then all Directories will be shown correctly ;)
I'm waiting my USIFAC II. exciting times for me :)
What is the source of FMANAG.BIN?
New boards only need FMANAG.BIN
Is it possible to retrieve file sizes at same time?
Quote from: Mark_wllms on 14:11, 13 June 21
Did you try on an (unmodified) 6128? Was it CP/M Plus?
I tried to run CP/M plus, the first disk
CP/M 2.2 runs
Quote from: ikonsgr on 23:47, 13 June 21
So if you just remove all archive bits from all dirs in the usb stick, then all Directories will be shown correctly ;)
Seems to be the case. The override is still useful though, so don't ditch it because there's an alternative solution.
Any plans to add a bootloader/auto-update feature to the usifac2? I don't mind getting the kit to reprogram it but would massively prefer an easier way to update
Quote from: Fran123 on 12:44, 14 June 21
What is the source of FMANAG.BIN?
New boards only need FMANAG.BIN
The source code for FMANAG.BIN is the "file_manager.asm". This is needed for all boards with current or older firmwares, but, as i manage to add it as RSX command ("|MAN"), it will not be needed for newer boards. Practically the only difference in utilizing the routine in a BASIC program is that, instead of initially loading the binary in memory:
MEMORY &17FF:LOAD"FMANAG.BIN",&1800
and use it by giving a CALL &1800,
You will just give a: "|MAN", which loads and executes the routine directly from USIfAC with the new firmware.
Quote from: Fran123 on 13:18, 14 June 21
Is it possible to retrieve file sizes at same time?
There is actually a function that returns the file size, but i think you can use it, only after a file is opened, and not when you get a catalogue of files. I have to see it more carefully, if it's easy to implement and doesn't take much space, i might add another RSX command to get size of a specific file.
Quote from: Devlin on 15:52, 14 June 21
Any plans to add a bootloader/auto-update feature to the usifac2? I don't mind getting the kit to reprogram it but would massively prefer an easier way to update
Actually,there is a project for bootloaders with PIC mcu: https://sourceforge.net/projects/tinypicbootload/
But i don't know if the specific PIC is supported and also, bootloaders need some program memory too, and currently we left with less than a 1kb.
In anycase, you would still need to use a programmer for the initial flashing of firmware with the bootloader, so practically you can't avoid the ICSP programmer... ::)
Still, i don't think there will be any significant fw updates in the future, even the latest addtion of |MAN RSX command for the file manager, is not required for older boards ;D
Is it possible to put DIR info into a higher address than &1800?Or an option to select that initial address?
I would make a file explorer with more functions
Thank you
Quote from: Fran123 on 10:28, 15 June 21
Is it possible to put DIR info into a higher address than &1800?Or an option to select that initial address?
I would make a file explorer with more functions
Thank you
There is a reason for why i put this code so "low" in ram: The compiled Basic program (using Hisoft Turbobasic compiler) for file manager ,starts &5AC0 ,this is where turbo basic puts all binaries (and i don't think you can change it). Now, the code for creating directory in RAM, pre-loads the ENTIRE directory, not only the current page. So if we want to support large directories with many filenames (up to ~1000) we will need plenty of room in ram. And since each file name usually takes ~15 bytes , means that for ~1000 names we will need ~15k. So if you subtract 15000 from &5AC0 you will end up ~&2000. The code for DIR is ~500bytes, e.g. start would be ~&1800 ;)
Of course, if you want to support less filenames for example ~500, you can put DIR code maybe ~&3800, which will leave plenty of room for a rather large Basic program.
Now,changing the address for the DIR binary, is something you can do yourself, rather easy! Inside file manager folder, you will find the asm code for the DIR code, "file_manager.asm":
write"DIRECT_ROM.BIN"
ORG &1800
data equ &2000
.txt_output equ &bb5a
.km_read_char equ &bb09
ld a,&FB
in a,(&De)
or a
jp z,no_usb
;CATALOGUE A USB DIRECTORY
call set_directory
ld bc,&fbd0
call clear_buffer
call usb_cmd
ld a,&2f
out (c),a
ld c,&d9
ld a,1
out (c),a
ld a,&FB
in a,(&D3)
or a
jp nz,continue_man
ld c,&d0
ld a,"/"
out (c),a
continue_man:
ld bc,&fbd0
ld a,"*"
out (c),a
ld a,0
out (c),a
call usb_cmd
ld a,&32
out (c),a
call check_responce2
ld A,&FB
in A,(&D0)
cp &1d
jp nz,error_4
ld hl,data
ld a,1
ld (hl),a
loop_mancatalogue:
ld bc,&fbd0
call clear_buffer
call usb_cmd
ld a,&27
out (c),a
call check_responce2
ld A,&FB
in A,(&D0)
or a
jp z,ending_mancatalogue
ld b,8
call print_man_loop
call check_responce2
ld A,&FB
in A,(&D0)
cp &20
jp z,continue2_mancat
ld b,a
ld a,"."
inc hl
ld (hl),a
ld a,b
inc hl
ld (hl),a
continue2_mancat:
ld b,2
call print_man_loop
continue_mancat:
call check_responce2
ld A,&FB
in A,(&D0)
cp &10
jr nz,continue_manloop
ld a," "
inc hl
ld (hl),a
ld a,"<"
inc hl
ld (hl),a
ld a,"D"
inc hl
ld (hl),a
ld a,"I"
inc hl
ld (hl),a
ld a,"R"
inc hl
ld (hl),a
ld a,">"
inc hl
ld (hl),a
continue_manloop:
ld a,1
inc hl
ld (hl),a
call clear_buffer
call usb_cmd
ld a,&33
out (c),a
call check_responce2
ld a,&FB
in a,(&D0)
cp &1d
jp z,loop_mancatalogue
ending_mancatalogue:
ld a,2
inc hl
ld (hl),a
ret
print_man_loop:
call check_responce2
ld A,&FB
in A,(&D0)
cp &20
jr z,cont_print_man
inc hl
ld (hl),a
cont_print_man:
djnz ,print_man_loop
ret
no_usb:
ld hl,message_no_usb_msg
call printmessage
ret
;-----------------------------------------------------------------------------------------
set_directory:
add_sub_dirs2:
ld bc,&fbd9
ld a,1
out (c),a
ld a,&FB
in a,(&D3)
cp "/"
jp nz,continue_usbcat
add_sub_dirs:
;Add sub dirs
ld bc,&fbd0
call clear_buffer
call usb_cmd
ld a,&2f
out (c),a
ld a,&FB
in a,(&D6)
CP 2
jr nz,dir_catname
ld a,"/"
out (c),a
dir_catname:
ld a,&FB
in a,(&D3)
cp "/"
jr z,continue_subdir_loop
or a
jr z,continue_subdir_loop
out (c),a
jr dir_catname
continue_subdir_loop:
ld d,a
ld a,0
out (c),a
call clear_buffer
call usb_cmd
ld a,&32
out (c),a
call check_responce2
ld A,&FB
in A,(&D0)
cp &41
jp nz,error_ucd
ld a,d
or a
jr z,continue_usbcat
jp add_sub_dirs
continue_usbcat:
ret
;-----------------------------------------------------------------------------------------
usb_cmd:
ld a,&57
out (c),a
ld a,&ab
out (c),a
ret
;-----------------------------
;---------------------------------------------------------------------------------------
check_responce2:
ld a,&FB
in a,(&D1)
dec a
jr z,check_responce2
ret
clear_buffer:
inc c ;clear buffer
ld a,1
out (c),a
dec c
ret
;-----------------------------------------------------------------------------------------
error_4:
ld bc,&fbd1
ld a,9
out (c),a
ld hl,error4_message
call printmessage
ret
;-----------------------------------------------------------------------------------------
printmessage:
ld a,(hl)
or a
ret z
call &bb5a
inc hl
jr printmessage
;-----------------------------------------------------------------------------------------
error_ucd:
ei
ld hl,error3_message
call printmessage
ret
message_no_usb_msg:
defb "Usb Device not enabled!",13,10,0
error4_message:
defb "No File(s) or Dir(s) Found!",13,10,0
error3_message:
defb "Unexpected error!",13,10,0
As you can see, you can easily change the starting address by replacing the ORG directive and data tag ,at the top of the code. Then you can simply use an assembler (i use winape's assembler, but i suppose you can use any other assembler you want) to produce the binary file. Finally i use CPDDISKXP to create the amsdos header for the binary (just create new dsk image and add the binary, program will ask you if you want to add header and give start&execution addresses, which both should be the address used in ORG directive). Then you simply extract the file created by cpcdiskxp which can be used with any basic program by giving: Memory addr-1:load"FMANGER.BIN",addr:call &addr (where addr is the address given in ORG directive)
is there any error when you put some commands??
I have done a program that sends |DIS, |USB and |EN several times in a minute, and CPC freezes or reboots
Why on earth you need to do such a thing? :)
In anycase, i doubt that |DIS and |EN commands can cause any problem (they are simple out commands to the board), but |USB, especially when it activates the usb host module, does a lot of things (in order to enable and activate module and any usb device attached),so i wouldn't recommend to "play" with that. But maybe issuing a delay between enable/disable of usb host module, could avoid unpleasant behaviors
I want copy the disk image to file, then I read a track and then write to usb (each track is a file and later I join them on PC). I use a 2-second delay between rsx commands. You have to do something similar for |2PC command.
Quote from: Fran123 on 07:01, 16 June 21
I want copy the disk image to file, then I read a track and then write to usb (each track is a file and later I join them on PC). I use a 2-second delay between rsx commands. You have to do something similar for |2PC command.
Perhaps you mean you write a dsk image to a floppy disk (with |DSK) and then read a track from disk and save it to a usb file?
Anyway, you don't have to use |USB for enabling/disabling the disk drive,this command is intended to be used
ONLY once, after initial powering of amstrad!
In order to read/write from floppy disk drive, you just give |DIS (or an out &fbd1,4 which is essentially the same thing, you can see that in the first lines, if you get a list of the BASIC listing of the |2PC) , this will direct all amsdos routines (like CAS IN OPEN, CAS OUT OPEN, BIOS READ SECTOR, BIOS WRITE SECTOR, BIOS FORMAT TRACK etc) to the disk drive!
At the same time, access to a usb file can be made without problem, as this is done using the I/O serial port of USIfAC II (&FBD0) that comunicates directly with USB host module! ;)
So in 2 words if you want to read from disk drive and write to a usb file at the same time, the only thing you need to do is to give |DIS or OUT &FBD1,4 . And ofcourse you can always use |EN -or out &fbd1,5- to re-enable redirection of all Amsdos routines back to usb! ;)
I want to create DSK files of my old disks.
I will follow your advices this afternoon
Thank you!
My pleasure :)
And if you need anything else feel free to ask! ;)
Quote from: ikonsgr on 18:02, 15 June 21So if we want to support large directories with many filenames (up to ~1000) we will need plenty of room in ram
You could use a temporary file in the USB drive instead of RAM.
I only removed |USB from my code and it works now!
In the PC, I remove the 128-byte header of each file, join them and get the raw disk image.
For getting the dsk file I have my own program.
Quote from: ajcasado on 09:49, 16 June 21
You could use a temporary file in the USB drive instead of RAM.
I'm afraid using a usb file will still need a buffer to store all names in ram first. You see, usb host module is not multitasking, meaning that, when you ask to get the name list of a directory, you CAN'T have a file opened and write it at the same time! The only way to do it, is to store all names in a buffer, and then write them to a usb file.
One other alternative would be to use the RAM of the PIC Microcontroller (usb host module uses only 128bytes for buffering, so we would have ~3,5KB of ram ), but this could store ~250 names....
Quote from: Fran123 on 19:57, 16 June 21
I only removed |USB from my code and it works now!
In the PC, I remove the 128-byte header of each file, join them and get the raw disk image.
For getting the dsk file I have my own program.
Great! Perhaps you could write a small guide for anyone want to get a dsk image from floppy disks too :)
I wonder if there is any way to get CP/M Plus discs to boot? I was trying to run some Infocom games, which I think would work better under CP/M plus. I considered running a snapshot, but I can't think how to load a disk image and a snapshot at the same time.
Quote from: Mark_wllms on 15:23, 17 June 21
I wonder if there is any way to get CP/M Plus discs to boot? I was trying to run some Infocom games, which I think would work better under CP/M plus. I considered running a snapshot, but I can't think how to load a disk image and a snapshot at the same time.
Well, you can always use |DSK to copy image to a real disk and boot from the disk ;)
Quote from: ikonsgr on 22:35, 16 June 21
Great! Perhaps you could write a small guide for anyone want to get a dsk image from floppy disks too :)
It's easy.
Steps:
From CPC: Copy each track of disk to file in USB, 40 tracks -> 40 files
Each track has 9 sectors of 512 bytes, then the track file size is 128+512*9
From PC: Remove the AMSDOS header of each file (the first 128 bytes) and join them. You have your disk on RAW format.
How to read a sector:
You have to store these bytes in #a000. It's a function coded in asm.
DATA
&21,&1c,&a0,&cd,&d4,&bc,&22,&1d, &a0,&79,&32,&1f,&a0,&21,&20,&a0
&5e,&23,&56,&23,&4e,&21,&30,&a0, &df,&1d,&a0,&c0,&84
setting parameters:
POKE &A017, addrh : POKE &A016, 0
'address where sector bytes will be stored = addrh*256
POKE &A020, drive : POKE &A021, track : POKE &A022, sector
Invoquing the function
CALL &A000
Now sector bytes are in (addrh*256)
Creating DSK file
The truth is out there:
https://www.cpcwiki.eu/index.php/Format:DSK_disk_image_file_format (https://www.cpcwiki.eu/index.php/Format:DSK_disk_image_file_format)
The "approach" you used of getting the raw sector data and then create the dsk image, gave me an idea:
Since creation of a dsk image "from the scratch" would need a lot of code (and effort), why don't we use a ready made dsk image and then just place sector data into it, something much easier and simpler thing to do! ;)
And since 99% of old disks we had back in the 80's was standard "Data format" disks, we can use a standard 40tracks/ 9sectors/track disk image!
The whole procedure would look like this:
- First, select the pre-made (i use CPCDISKXP to make such an empty image in 2 seconds :-) ), using the currently existed RSX command: |MG.
- Run a loop for tracks 0 to 39
- Run a nested loop for sectors C1 to C9 with the simple code:
- Disable fdc emulation and call READ SECTOR routine for reading Disk drive (with the appropriate Drive,Track,sector numbers)
- Enable fdc emulation and call WRITE SECTOR routine (this will redirect amsdos calls to usb host module and the selected DSK image)
The code for the above procedure would be a rather easy thing to, and you will get an image from a floppy disk in a single step! I'll see if i can make it in the weekend! ;)
Quote from: eto on 18:32, 13 June 21Finally, the most wanted (by some.... ) FILEMANAGER is READY! You can download it from here
This is very helpful. I have used it like this:
I have got rid of CPCLoader Basic shortcuts and put the file manager into the root of the USB. Then I made folders for #,A..Z and put all my direct load folders, snapshots and disk files into the appropriate folder.
Now I ¦USB: RUN"FM and then just select a folder, select a snapshot / disk image / folder and then run the game. It's very easy, and straight forward to maintain. None of my folders runs more than 2 pages at the moment.
Quote from: ikonsgr on 11:56, 18 June 21
The "approach" you used of getting the raw sector data and then create the dsk image, gave me an idea:
Since creation of a dsk image "from the scratch" would need a lot of code (and effort), why don't we use a ready made dsk image and then just place sector data into it, something much easier and simpler thing to do! ;)
And since 99% of old disks we had back in the 80's was standard "Data format" disks, we can use a standard 40tracks/ 9sectors/track disk image!
The whole procedure would look like this:
- First, select the pre-made (i use CPCDISKXP to make such an empty image in 2 seconds :-) ), using the currently existed RSX command: |MG.
- Run a loop for tracks 0 to 39
- Run a nested loop for sectors C1 to C9 with the simple code:
- Disable fdc emulation and call READ SECTOR routine for reading Disk drive (with the appropriate Drive,Track,sector numbers)
- Enable fdc emulation and call WRITE SECTOR routine (this will redirect amsdos calls to usb host module and the selected DSK image)
The code for the above procedure would be a rather easy thing to, and you will get an image from a floppy disk in a single step! I'll see if i can make it in the weekend! ;)
I did a java program to generate the dsk file, it's very simple, I'll try to post this evening.
Anyway I like your idea and I'll try do it as you say.Other question, is it possible to create an empty disk (as dsk file) from basic? Is there any command? If I want to pass X disks, I have to have X dsk files previously.
I have tested some DSK of CPM and none of them works with |CPM :(
Quote from: Fran123 on 13:03, 18 June 21
Other question, is it possible to create an empty disk (as dsk file) from basic? Is there any command? If I want to pass X disks, I have to have X dsk files previously.
I'm afraid it's not possible. But it might help to use the multiple dsk image function, where you can load up to 4 empty dsk images and select them using the dsk_swap button.
Quote from: Fran123 on 16:56, 18 June 21
I have tested some DSK of CPM and none of them works with |CPM :(
Did you try to copy them to disks (using |DSK) and see if they work?
I think that this problem with cpm plus images, has to do, not so with the FDC emulation itslef, but rather with amsdos calls when fdc emulation is enabled.
I have tried the above method i described, i manage to copy a floppy disk to a dsk image successfully, but the "Side effect" is that WRITE SECTOR routine somehow destroys the disk!
I suspect that although fdc emulation takes control of the communication with asmtrad, because disk drive is also attached ,it receives the commands and somehow this, results in detroying disk sectors! I've tried to write protect disk, but unfortunately this didn't help either (i got an error message or if i disable error messages amstrad crashes)
One solution might be to write the readed sector in both usb file and disk drive , or we throw away write sector routine and use cutom routines that write data to usb file directly... ::)
May be adding a "write track" feature can be a work around? (don't exist on the UPD765, but on other FDC like WD)
Quote from: ikonsgr on 18:08, 18 June 21
I have tried the above method i described, i manage to copy a floppy disk to a dsk image successfully, but the "Side effect" is that WRITE SECTOR routine somehow destroys the disk!
I suspect that although fdc emulation takes control of the communication with asmtrad, because disk drive is also attached ,it receives the commands and somehow this, results in detroying disk sectors! I've tried to write protect disk, but unfortunately this didn't help either (i got an error message or if i disable error messages amstrad crashes)
One solution might be to write the readed sector in both usb file and disk drive , or we throw away write sector routine and use cutom routines that write data to usb file directly... ::)
In that case, we have to remove the amsdos header in a pc
I'm trying copy a disk in winape firstly, but my write sector function crashes the emulator :(
Finally, i finished it!
So, another new utility, for creating disk images from old floppy disks in just 40 seconds!
You can use it with older and newer boards, just extract the zip file (https://www.dropbox.com/s/8bvtqmbz0k3o4na/Disk2image.zip?dl=0) to usb stick and run "disk2img.bas".
You will be asked to give a disk image name (you can use the included TEMP.DSK or any other standard DATA format dsk image).
For root directory you should also add a '/' in front of name, e.g.: '/TEMP.DSK', but if you use a folder, you don't need to add '/'.
Utility can transfer only standard "data format" floppy disks (40 tracks with 9sectors/track, 512 byte/sector), which i believe was, the vast majority of disks used back in the '80s.
And here is the code:
;; firmware function to find a RSX
.kl_find_command equ &bcd4
write"get.BIN"
name_adr equ &9000
org &8000
;nolist
;;------------------------------------------------
;; find BIOS: READ SECTOR command
ld hl,2
ld (position),hl
ld hl,cmd_bios_read_sector
call kl_find_command
ret nc
;; command found
;; store address of command
ld (bios_read_sector),hl
;; store "rom select" of command
ld a,c
ld (bios_read_sector+2),a
ld bc,&fbd1
ld a,4
out (c),a
ld a,7
out (c),a
ld hl,message1
call print_msg
dec bc
ld a,&57
out (c),a
ld a,&ab
out (c),a
ld a,&2f
out (c),a
ld hl,name_adr
name_loop:
ld a,(hl)
or a
jr z,contin
out (c),a
inc hl
jr nz,name_loop
contin:
xor a
out (c),a
call clear_buffer
ld a,&57
out (c),a
ld a,&ab
out (c),a
ld a,&32
out (c),a
call check_responce
ld A,&FB
in A,(&D0)
cp &14
jp nz,no_file
call seek
in a,(c)
cp &14
jp nz,no_file
;;------------------------------------------------
;; disable FDC emualation for reading sector data from disk drive
cont1:
;; D = track number
xor a
ld (track),a
;; C = sector id
ld bc,sector_list
ld (current_sector),bc
ld a,(bc)
ld c,a
main_loop:
;; disable FDC emualation for writing sector data to selected image file
;; E = drive number (0 or 1)
ld e,0
ld hl,buffer
ld a,(track)
ld d,a
ld bc,(current_sector)
ld a,(bc)
ld c,a
;; execute command
rst 3
defw bios_read_sector
call write_sector
;; C = sector id
ld bc,(current_sector)
inc bc
ld a,(bc)
or a
jr z,reset_sector
ld (current_sector),bc
ld c,a
jr main_loop
reset_sector:
ld a,"."
call &bb5a
ld bc,sector_list
ld (current_sector),bc
ld a,(sector_list)
ld c,a
;; D = track number
;; (change this value to define the track to write to)
ld a,(track)
inc a
cp 40
jr z,end_routine
ld (track),a
ld hl,(position)
ld bc,&13
add hl,bc
ld (position),hl
call seek
in a,(c)
cp &14
jp nz,no_file
jr main_loop
end_routine:
ld a,&57 ;close file
out (c),a
ld a,&ab
out (c),a
ld a,&36
out (c),a
xor a
out (c),a
ret
write_sector:
ld bc,&fbd0
ld hl,buffer
ld d,4
next_chunk:
ld e,128
call clear_buffer
ld a,&57
out (c),a
ld a,&ab
out (c),a
ld a,&3c
out (c),a
out (c),e
xor a
out (c),a
call check_responce
call clear_buffer
ld a,&57
out (c),a
ld a,&ab
out (c),a
ld a,&2d
out (c),a
call check_responce
ld A,&FB
in A,(&D0)
loading:
inc b
outi
dec e
jr nz, loading
call clear_buffer
ld a,&57
out (c),a
ld a,&ab
out (c),a
ld a,&3d
out (c),a
call check_responce
dec d
ld a,d
or a
jp nz,next_chunk
ret
;------------------------------------------------------------
check_responce:
LD A,&FB
iN A,(&D1)
DEC A
JR Z,check_responce
ret
clear_buffer:
inc bc ;clear buffer
ld a,1
out (c),a
dec bc
ret
seek:
ld hl,(position)
ld d,0
ld e,h
ld h,l
ld l,0
ld bc,&fbd0
call clear_buffer
ld a,&57
out (c),a
ld a,&ab
out (c),a
ld a,&39
out (c),a
out (c),l
out (c),h
out (c),e
out (c),d
call check_responce
ret
print_msg:
ld a,(hl)
or a
ret z
call &bb5a
inc hl
jr print_msg
no_file:
ld hl,no_file_msg
call print_msg
ret
no_file_msg:
defb "Image file not found!",13,10,0
message1:
defb "Copying to dsk image:",13,10,0
;; this is initialised when the "BIOS: READ SECTOR" RSX has been found.
bios_read_sector:
defw 0 ;; address of function
defb 0 ;; "rom select" for function
cmd_bios_read_sector:
defb 4+&80 ;; this is the "BIOS: READ SECTOR" RSX
;;------------------------------------------------------------------
sector_list:
defb &c1,&c6,&c2,&c7,&c3,&c8,&c4,&c9,&c5,0
; defb &c1,&c2,&c3,&c4,&c5,&c6,&c7,&c8,&c9,0
current_sector:
defw 0
position:
defw 0
track:
defb 0
buffer:
defs 1
By modifying the bytes under "sector list" tag, it would be easy to modify routine to take backup images of different disks too (like system/cpm disks or with more tracks or sectors/track) but note that you should use the appropriate image file too. Empty Disk images can be easily made using cpcdiskxp utility (http://www.cpcmania.com/cpcdiskxp/cpcdiskxp.htm).
Thank you!!
The difference between standard and system disks is the name of sectors (&c1-&c9 and &41-&49). Maybe you can support any kind of parameter.
Ok, i made a slight mod to the assembly code and the Basic program, and now you can take backup from either DATA or SYSTEM disks! ;)
Program will also ask to choose for DATA or SYSTEM disk. I've included in the zip file DATA.DSK and CPM.DSK images to use.
The sector list is now accesible from BASIC program (lines 250-260), so it's easier to modify it for any special needs (like a disk with more than 40 tracks and/or more than 9sectors/track):
10 CLS
15 MEMORY &7FFF:LOAD"GETIMG.BIN",&8000
20 INPUT"Dsk image name";A$
30 SIZE=LEN(A$)
40 FOR i=1 TO SIZE
50 POKE &8FFF+i,ASC(MID$(a$,i,1))
60 NEXT i
70 INPUT"Data(1) or System(2)";a
80 IF a<1 OR a>2 THEN 70
90 IF a=1 THEN GOTO 200 ELSE 210
200 RESTORE 250:GOTO 220
210 RESTORE 260
220 FOR I=0 TO 9
230 READ a:POKE &8500+i,a
240 NEXT i
245 CALL &8000:PRINT:GOTO 20
250 DATA &C1,&C6,&C2,&C7,&C3,&C8,&C4,&C9,&C5,0
260 DATA &41,&46,&42,&47,&43,&48,&44,&49,&45,0
Note also that, if some disks use sequential order of sectors instead of interleaved (&c1,&c2,&c3... instead of the usual &c1,&c6,&c2...), you can easily change the order of sectors too (along with using an appropriate disk image of course)
I've made some modifications to the File manager too.
I've increased the delay for key press to get more accurate and smooth movement. Also, i move buffer for directory and code higher in ram @&2900 (instead of previous &1800, it can now support less names but still ~1000/directory which i think is more than enough ::) ), so now you will have ~10k available for any BASIC program that needs to utilize the directory routine. ;)
Quote from: ikonsgr on 11:28, 20 June 21I've made some modifications to the File manager too. I've increased the delay for key press to get more accurate and smooth movement. Also, i move buffer for directory and code higher in ram @&2900 (instead of previous &1800, it can now support less names but still ~1000/directory which i think is more than enough ::) ), so now you will have ~10k available for any BASIC program that needs to utilize the directory routine. ;)
i needs it :3
btw,i've just copy (using |DSK) the cpm/plus disk 1 (that doesn't seem to work using FDC emulation, and the image) to a floppy disk, and now it can loads fine from disk! ;)
A thousand of thanks for your support!
Quote from: Fran123 on 21:07, 20 June 21
A thousand of thanks for your support!
Well, i'm thinking to improve disk2image function by making it completely automated:
- Use GET_SECTOR_DATA Amsdos routine to automatically determine the type of inserted disk (System,Data or IBM), so no need to ask for disk type.
- Use BIOS_READ_SECTOR routine to automatically determine the number of sectors/track (9 or 10) and automatically use the appropriate image file.
- Use BIOS_MOVE_TRACK routine to automatically determine the number of tracks of the disk (i suppose i can use 42 track image files for all disks, normal disks will just not use the last couple of tracks).
- Add mutliple DATA and CPM disk images to folder (with names like DATA1.DSK, DATA2.DSK etc), and modify BASIC program to choose automatically one image after the other,program will inform you for the name of image used for each disk! So,if i add 10 disks, you will be able to take back up of 10 floppy disks in a row! ;) And the good thing is, that you can copy these images from usb flash drive to your PC, laptop etc and then re-use them directly for taking backup images of another 10 disks!
So practically the only thing you will need to do is to change disks and press a key! ;D
btw, i'm in a process of creating a "get file size" routine that will help adding file size information to the name catalogues even with file manager too! :)
I was going to tell you the first point.Another question, is it possible to create an empty file without headers. I guess it must be done from the chip on board.
On the other hand, I want to improve the file explorer, but I need some easy routines (for you). I need execute |stat command, but I need the results in memory address, not as console output.
0
Quote from: Fran123 on 08:08, 21 June 21
I was going to tell you the first point.Another question, is it possible to create an empty file without headers. I guess it must be done from the chip on board.
You can save headerless(=ascii) files using Basic's openout command. From assembly, you can use all Firmware routines to create a headerless file too, using CAS_OUT_OPEN, CAS_OUT_CHAR and CAS_OUT_CLOSE. This way you can create headerless custom made files, and read them using CAS_IN_CHAR. Only drawback is that read/write would be rather slow (comparing to the CAS_DIRECT routines which give you the maximum speed).
Quote from: Fran123 on 08:08, 21 June 21
I need execute |stat command, but I need the results in memory address, not as console output.
That's easy. Just give OUT &FBD1,30. You will get the results char by char, by reading USIfAC II buffer:
10 DIM STATUS(200):I=1:OUT &FBD1,1:OUT &FBD1,30 (&FBD1,1 is for clearing buffer before getting report)
20 WHILE INP(&FBD1)=255
30 STATUS(I)=INP(&FBD0):i=i+1
40 WEND
After executing the above program, you will have the status report saved into STATUS array! ;)
I am taking a look at the schematics and I have seen that microcontroller pin 37 (RB4) is not connected but in my board (green with usb soldered and no SWAP) it is connected to A5.
Looking the PIC code it is only set as an input ( DIR portB.4 IN ) but it looks like it is not used.
Maybe this schematic is for new boards (white ones)?
I just update the file manager,it now includes an alternative one (fsm) which gives you also size of each file next to filename: [attach=1,msg203948]
Appart from having a bit slower respond (due to extra proccess), the 2 managers are working with exact the same way. You can check FSMANAG.BAS to see how exactly i did it (this is the source code for making FSMANAG.BIN binary, using turbo basic compiler).
Quote from: issalig on 11:16, 21 June 21
I am taking a look at the schematics and I have seen that microcontroller pin 37 (RB4) is not connected but in my board (green with usb soldered and no SWAP) it is connected to A5.
Looking the PIC code it is only set as an input ( DIR portB.4 IN ) but it looks like it is not used.
Maybe this schematic is for new boards (white ones)?
This pin is connected to A.5 pin (which is actually A5 bit of the address bus). It's a result of a restriction in the pins you can use as inputs, for the CLC modules.
Quote from: ikonsgr on 19:42, 21 June 21
I just update the file manager,it now includes an alternative one (fsm) which gives you also size of each file next to filename:
Appart from having a bit slower respond (due to extra proccess), the 2 managers are working with exact the same way. You can check FSMANAG.BAS to see how exactly i did it (this is the source code for making FSMANAG.BIN binary, using turbo basic compiler).
This pin is connected to A.5 pin (which is actually A5 bit of the address bus). It's a result of a restriction in the pins you can use as inputs, for the CLC modules.
Oh my. That's ace!
It seems also that the issue from before where certain games would fail to load from the file manager was fixed too. thank you for saving my 464 keyboard <3
Quote from: ikonsgr on 19:42, 21 June 21
I just update the file manager,it now includes an alternative one (fsm) which gives you also size of each file next to filename:
Hi John
The Readme.txt Mentions "Check with |STAT if you board has rev_4c firmware or newer"I can only find Revision 4B Firmware ??
Is there a link to rev-4c or above ?
Keep Safe
Ray
Quote from: Audronic on 00:10, 22 June 21
I can only find Revision 4B Firmware ??
Is there a link to rev-4c or above ?
I haven't upload this version yet,i want first to make the modifications to the disk2image routine, and see if i can also add it as an extra RSX command, along with |MAN for getting the directory filenames into ram. This most probable, would be the final firmware version, there is no space left for anything else, and besides, i don't think there is anything else to add anymore! :)
Ok Thanks
I will await the update
Thanks
Keep Safe
Ray
I've upload the new version of disk2image routine with a few enhancements:
- Automatically recognize System,Data or IBM Disk format.
- Transfer up to 9 disks in a row by automatically selection of ready made image files.
- Support up to 42 tracks.
Inside zip file, you will find 9 dsk images for each format (DATx.DSK , CPMx.DSK, IBMx.DSK), program informs you which image file is used for each floppy disk:
[attach=1,msg204045]
All image files are reusable,meaning that you can overwrite them with backups of new disks, without needing to use "empty" images.
I'm also planing to add this "disk2image" routine as a new RSX commamnd into firmware, and along with the addition of RSX command |MAN for filemanager, would probably be the last firmware update :)
Hello
I think the utilities dsk2image and image2dsk mustn't be as RSX command using ROM memory. If there was memory to spare, yeah.
I dont't know why you need a DSK file previously, I think you can create it on execution time.
Quote from: Fran123 on 07:33, 24 June 21
I think the utilities dsk2image and image2dsk mustn't be as RSX command using ROM memory. If there was memory to spare, yeah.
Image2disk is an rsx command (|DSK) even from the first firmware release. I manage to make ~1kb of free space in microcontroller program memory, which i can use to add the recent reverse "Disk2image" utility as an rsx command too.
Quote from: Fran123 on 07:33, 24 June 21
I dont't know why you need a DSK file previously, I think you can create it on execution time.
You need to have a ready made proper dsk image (e.g. of DATA, SYSTEM or IBM format, which use different sector code numbers) because,
the Disk2image utility only copies the raw sector data to the corresponding positions of the image file, it DOESN'T create a NEW image! This would require a lot more code and effort, as structure of a dsk image is rather complex: https://www.cpcwiki.eu/index.php/Format:DSK_disk_image_file_format
But even so, you can just copy all the pre-made dsk images to your usb flash drive, run the utility, and make up to 9 backups of disks in a row, in just a few minutes (it takes only 40seconds to get each disk image)! Then, you can copy your backup images from the usb stick and rewrite the same images to backup other disks.
Practically this might be even easier and faster compared to giving an image file name for each disk (if utility could create one)... ;D
And the last utility we need is a copier for files inside usb, maybe something like that |COPYUSB,"src","dest", and the program (.bin) for older boards (I got one two weeks ago).
The copier program must ask SRC and DEST.
;)
At the end Usifac will be very complete extension ;)
Quote from: ikonsgr on 08:21, 21 June 21by reading USIfAC II buffer:
Code: [Select]
Quote from: ikonsgr on 08:21, 21 June 2110 DIM STATUS(200):I=1:OUT &FBD1,1:OUT &FBD1,30 (&FBD1,1 is for clearing buffer before getting report)
20 WHILE INP(&FBD1)=255
30 STATUS(I)=INP(&FBD0):i=i+1
40 WEND
After executing the above program, you will have the status report saved into STATUS array!
I get 165 zeros :(
I added 35 print status(i)
Strange, on my amstrad works fine. Check again your listing maybe you have some type error somewhere.
What exactly you mean by copy files inside usb? Move a file to another directory perhaps?
Anyway,i manage to modify the disk2image routine to an rsx command (|DISK,"name") which also creates a dsk image file, without needing a pre-existed one ;D
I'll see to make it as a stand alone program and upload it in the weekend.
Quote from: ikonsgr on 23:02, 24 June 21What exactly you mean by copy files inside usb? Move a file to another directory perhaps?
just copy, like "COPY A B" or "copy /dir1/dir2/A /dir3/dir4/B"
and as you say, a MOVE too.
Hello
I have just got and ESP01 and adaptor from Aliexpres. Can I plug directly to the UsifacII board? Or have I flash the ESP01?
Quote from: Fran123 on 10:29, 25 June 21
Hello
I have just got and ESP01 and adaptor from Aliexpres. Can I plug directly to the UsifacII board? Or have I flash the ESP01?
I think it's good to go. I assume the adaptor is the the one with the 3.3V LDO regulator?
Quote from: Fran123 on 07:49, 25 June 21
just copy, like "COPY A B" or "copy /dir1/dir2/A /dir3/dir4/B"
and as you say, a MOVE too.
Filecopy between different dirs in usb device, might sound easy in theory, but it would be rather difficult to make it in practice. The problem is that, you can't have 2 files ,one to read and one to write, both openned at the same time.So it would require to use a buffer in Amstrad's ram, and manage access of read & write files sequentially. As for MOVE, is nothing but a file copy that deletes the source file in the end. I will have to give it a thought and see if and how can be done.
Now,
i just upload a new version of image2disk function!This time,
it creates the image file by the given name, so no need to have premade images in flash drive.
Again, it supports data,system/cpm and ibm formats and up to 42 tracks. It usually takes ~40seconds for each disk transfer.
I have also developed it as a
new RSX command: |DISK,"name",(1) . The optional 2nd argument '1', is for automatically creating new image files, based on the name you give ,by adding a letter at the beginig of the name. If for example you give name: "BACKUP.DSK" ,with the extra argument '1', program will name images: "ABACKUP.DSK", "BBACKUP.DSK","CBACKUP.DSK" etc. So you could take many backups in a row, by only changing disks and pressing a button ;)
From this point, it could be possible to develop a more complex (and of course slower ) routine, to support non standard disks, like with more than 9sectors/track or various formats for each track, but i really don't know if it's worth the trouble, as this function would be mostly needed to back up old 3" disks which 99,9% chances are they would be
standard data or system/cpm format disks. Besides, non standard disks where in most cases copy protected games that would be practically impossible to produce a working image from them... ::)
p.s. @FRAN123, you really have become a... "motivation engine" for further USIfAC development :laugh:
Quote from: ikonsgr on 17:01, 25 June 21p.s. @FRAN123, you really have become a... "motivation engine" for further USIfAC development
Thank you, I'm programmer and I think a lot of things, but with your device, you'll always be one step in front of me (obviously). I would like help more, but I have my asm and basic rusty.
Sometimes I have had an idea, and later I have seen you hast post my idea or similar.
I hope you give me a unit because mine is going to be very outdated ;)
More...
I used Arduino and ESP01 some years ago and I got to do a request to a web server and receive the page.
I don't know how ESP01 is configured with UsifacII and if it is possible to make request to servers (using AT commands), because with |wifi command it ask about a server and a port (I guess the server and port used by windows application), and it gets the network configuration with DHCP.
Hi @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
If you're thinking of doing more..!
I wonder if there could be a way to use the serial port and the usb without relying on cpc side code. So if the cpc requested files then enable the usb or if it requested the serial port then enable the port. From the schematic I think they share the same tracks, so I imagine this may require a change to the hardware?
Thanks again for all the inspiration!
Quote from: Fran123 on 20:38, 25 June 21
More...
I used Arduino and ESP01 some years ago and I got to do a request to a web server and receive the page.
I don't know how ESP01 is configured with UsifacII and if it is possible to make request to servers (using AT commands), because with |wifi command it ask about a server and a port (I guess the server and port used by windows application), and it gets the network configuration with DHCP.
For manually configuring Esp modules you can use |COM, it's a small terminal desgined exactly for that purpose. :)
Quote from: kolleykibber on 21:13, 25 June 21
Hi @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
If you're thinking of doing more..!
I wonder if there could be a way to use the serial port and the usb without relying on cpc side code. So if the cpc requested files then enable the usb or if it requested the serial port then enable the port. From the schematic I think they share the same tracks, so I imagine this may require a change to the hardware?
Thanks again for all the inspiration!
Usb module can be activated or deactivated on demand (using the |USB command). Also the direct serial connection to a pc can be activated/deactivated with |EN command.
In any case, the serial port is completely independant, and you can use it directly by giving OUT or IN commands to ports &FBD0 and &FBD1.
I got some problems:
I executed run"getimg.bas", wrote the disk name, but I didn't find the DSK file. Where does the program save the DSK file?
I turned off and on the CPC and run"getimg.bas" doesn't work. If I want to use it again, I have to copy to usb again. Not useful :(
The board version is 4a
I attach a image where I load first the BAS file and then run. It seems BIN file got corrupted. That happened twice.
I just test 4a firmware and worked fine. I even test it with an old 2a firmware and program also worked fine.
You should also place program files to root dir of usb flash drive, i haven't test it inside a subdir to see if it works ok too (|DISK command works ok though)
Anyway, this kind of behavior, running a Basic program resulting in corruption of the basic code itself, is something highly irregular, that usually is not caused by software.
Try using a different usb flash drive, or make a small fat partition and see if the problem solves.
Also, if you experience and other strange behaviors with the board, there might be a connection problem somewhere (usually it's bad contact with edge connector or in rare cases,a bad contact of ribbon cable).
Finally, if you still have such problems,i'm afraid something is wrong with your amstrad... ::)
Well
If I have that files (GETIMG.*) in root directory it works, but it is a mess having many files in root.
Another trouble,
When I boot with usb and wifi, and I write |usb sometimes the response is "unexpected error" or "CH376 USB module not found" or something similar. And sometimes it is resolved reseting.
Quote from: Fran123 on 10:22, 27 June 21
Another trouble,
When I boot with usb and wifi, and I write |usb sometimes the response is "unexpected error" or "CH376 USB module not found" or something similar. And sometimes it is resolved reseting.
This might be a power problem. Esp 8266 Wifi modules draw quite a lot of current (especially at start), and if you add the power needs of the usb host module + USIfAC board and the connected usb flash drive (which also might draw a lot of extra current), 5v supply pin from amstrad might not be enough.
Try use bigger 5v psu that can supply more current, or a smaller (with less power needs) usb flash drive, this might solve the problem.
I use one of 5V/3A. CPC needs 1.7V, the rest is for Usifac2, USB module and ESP01. I think it is enough. ESP01 needs 100mA at start up.
Quote from: Fran123 on 07:50, 30 June 21
I use one of 5V/3A. CPC needs 1.7V, the rest is for Usifac2, USB module and ESP01. I think it is enough. ESP01 needs 100mA at start up.
Get an Y cable, and measure what you really measure when everything is ON and running (Volts!).
Often they drop to 4,5 Volts of so, when being used even at half the Amps they offer. Sad, but true.
Quote from: GUNHED on 10:56, 01 July 21
Get an Y cable, and measure what you really measure when everything is ON and running (Volts!).
Often they drop to 4,5 Volts of so, when being used even at half the Amps they offer. Sad, but true.
Exactly! Judging from my rather large experience with many different small 5v/12 psu's, in almost all cases, Amperage advertized, is the MAX, and not the RMS (=Sustained) Amperage!
This means that in practice, a psu rated @ 3Amps can only provide ~half of it (or even less...), and if load, needs to draw more than that, you will have a voltage drop => problems! ;)
Now, i have measured the power consumption of an Amstrad CPC which is ~1000mA. USIfAC II board+usb host module can draw another ~100-200mA, and Esp Wifi module needs ~200mA sustained (but it can peak to 500mA in some cases, especially when it powers up). Finally, if you add the power needs of a typical USB flash drive (which is usually rated at few 100's mA when you access it), you can easily have a total draw of more than 1500mA. IMO, if you want to have all these together, you should get a psu with advertized current of 4A (or even 5A) . Also it's good to avoid cheap ones, their actual amperage might be even less than half! One good and cheap psu i have tested and worked ok is this:
https://www.ebay.ie/itm/324101244457?var=513150090529
The 5V/5A costs less than 7euros, and it can surely provide more than 2Amps without problems (i've test it with Amstrad+usifac+usb host module+ old 3.5" Pc Floppy drive which draws ~500mA and 1000mA@peak)
To get a stable 5V output in the whole 3A working range you can use a regulated buck chopper like https://www.ebay.com/itm/402847202305?hash=item5dcb907c01:g:gAsAAOSwkkxgn5pj (https://www.ebay.com/itm/402847202305?hash=item5dcb907c01:g:gAsAAOSwkkxgn5pj).
Feed it with a supply that can deliver 15W at 9V or 12V (maybe anything higher than 7.5V could do the job) and adjust the output to 5V with the potentiometer screw.
EDIT: It's wise to put a 3A FUSE in series with this kind of stuff.
Flashing firmware.... will a Pickit2 also work? Or does it need to be a Pickit3?
Hi Dear Firends,
My usifacII came to me. I will start using on Amtrad CPC 464. I have got some questions about USIFACII. Do you have USIFACII 3d models? I want to use my USIFACII device in own case. Also, if we add a wifi card to the wifi section, can we use the internet features on symbos?
Quote from: DoctorCPC on 01:44, 03 July 21
Do you have USIFACII 3d models? I want to use my USIFACII device in own case.
I don't, but i think others have made 3d models for cases.
Quote from: DoctorCPC on 01:44, 03 July 21
Also, if we add a wifi card to the wifi section, can we use the internet features on symbos?
You should ask symbos creators for that :)
MAJOR UPDATE:
- Add new RSX command: |DISK,name,(1). Creates a dsk image file from Floppy disk. Supports DATA/SYSTEM/IBM formats and up to 42 tracks. The optional 2nd argument '1', is for auto creating new image filenames, based on the name you give, by adding a letter at the begining of the name. For example,if you give name: "BACKUP.DSK" ,with the extra argument '1', program will name images: "ABACKUP.DSK", "BBACKUP.DSK","CBACKUP.DSK" etc. So you could take many backups in a row, by only changing disks and pressing a button.
- Add new RSX command: |MAN. This resembles |CAT, but instead of getting the list of files/subfolders of a usb device to screen,it outputs the list of files/subfolders into RAM, starting from &2b00 and using '1' as separator,'2' to mark end, e.g.: 1NAME1NAME1NAME...1NAME2
Function is used by filemanger utility, but it would also be useful for anyone want to develop it's own programs.
- Add new RSX command: |UCOPY,"name1","folder path",("name2").With this command you can copy a file into usb device, named "name1", from it's current position, into another folder. Optionally you can give "Name2" to copy file with a new name.For example,command: |UCOPY,"GAME.BAS","/DIR1/GAMES","GAME2.BAS" will copy GAME.BAS file to /DIR1/GAMES subfolder with name "GAME2.BAS". If you omit the last argument, then file will be copied with same name. Function can be used with any file, regardless the size. Actual copy speed is ~5-10kb/sec (depending on the speed of usb flash drive you are using),so large files like DSK images, will need some time to be copied.
- Better Respond & Error handling, to minimize crashes,hang-ups and erroneous messages. For example,until now, giving |CAT or |DEL without serial connection or usb device enabled, Amstrad hangs up and needed reset.Now, it will try to get respond for a couple of seconds,and then gives you an error message.Also, using |COPY or |DEL commands repeatedly, sometimes caused problems with |CAT,after.All these weird responds, should be now fixed.
- Bug Fix: Swapping dsk images didn't function in some stituations.
- Bug fix: Loading eeprom (|WROM) from usb device file,didn't work right.
- Overall optimization of Board's main ROM code.
- Update |HELP to include the new RSX commands.
- Update user's manual and "inner workings" folder too.
And this, most probable, would be the last firmware update (Rev 5).
Btw, soon,i will upload an |UCOPY version for older boards (like with disk2image and file manager) :)
will be those improvements/utilities as binary files?
Quote from: ikonsgr on 10:48, 03 July 21- Add new RSX command: |MAN. This resembles |CAT, but instead of getting the list of files/subfolders of a usb device to screen,it outputs the list of files/subfolders into RAM, starting from &2b00 and using '1' as separator,'2' to mark end, e.g.: 1NAME1NAME1NAME...1NAME2
Function is used by filemanger utility, but it would also be useful for anyone want to develop it's own programs.
What happens if there is a file called "mifile.tx2". Does it mean the end of the list?
AWESOME update!
Quote from: ikonsgr on 10:48, 03 July 21Add new RSX command: |MAN. This resembles |CAT, but instead of getting the list of files/subfolders of a usb device to screen,it outputs the list of files/subfolders into RAM, starting from &2b00 and using '1' as separator,'2' to mark end, e.g.: 1NAME1NAME1NAME...1NAME2
What happens if the filename contains "1" or "2"? Like Who dares Wins II (wdw2).
btw: would it be possible to get long filenames too? It would be great if the filemanager could show long filenames (but of course then execute the short filenames).
Quote from: eto on 14:41, 03 July 21
What happens if the filename contains "1" or "2"? Like Who dares Wins II (wdw2).
Quote from: Fran123 on 12:05, 03 July 21
What happens if there is a file called "mifile.tx2". Does it mean the end of the list?
Well,i'm afraid you both forgot one thing: A file name is translated to the ASCII code for each character, so if you have '1' in the name, you will actually get a value of 49, or for '2' a value of 50 ;)
So, using values 1 and 2 for name separator and end marking, causes no conflict, whatever is the name! ;D
Quote from: eto on 14:41, 03 July 21
btw: would it be possible to get long filenames too? It would be great if the filemanager could show long filenames (but of course then execute the short filenames).
I'm afraid it can't, as this is a restriction of the CH376 usb host module it doesn't support long filenames. Although the old 8.3 name type, is what Amstrad use either in Basic or Amsdos, so using 8.3 names seems more compatible :)
Quote from: Fran123 on 12:04, 03 July 21
will be those improvements/utilities as binary files?
File manager and disk2image are already available as binaries for use with older firmware boards. |UCOPY will be added soon too :)
Have you thought about writing a program like wget, something like |wget,"<url>",["output_file"] ??
Quote from: Fran123 on 12:07, 04 July 21
Have you thought about writing a program like wget, something like |wget,"<url>",["output_file"] ??
You mean download directly a file from an ftp/tcp/http server using esp 8266 wifi modules?
Well, first, it's impossible to add anything else anymore, there is literally no room left in Microcontroller's program memory ::) (btw, last |UCOPY command was really a tough one that needed quite room too:
ucopy:
;; UCOPY,"name","dest directory",1 for delete source
ld e,a
xor a
ld b,100 ;reset all used variables
ld hl,source_path_buffer
init_values:
ld (hl),a
inc hl
djnz ,init_values
call check_usb_en
jp z,usb_dis_err
ld a,e
cp 1
jp z,error_4
cp 2
jr z,no_delete_file
cp 3
jp z,rename_file
jp error_4
no_delete_file:
ld h,(ix+1)
ld l,(ix+0)
ld (dest_path_addr),hl
ld h,(ix+3)
ld l,(ix+2)
ld (copy_file_addr),hl
ld (copy_new_file_addr),hl
jr cont_copy_file
rename_file:
ld h,(ix+1)
ld l,(ix+0)
ld (copy_new_file_addr),hl
ld h,(ix+3)
ld l,(ix+2)
ld (dest_path_addr),hl
ld h,(ix+5)
ld l,(ix+4)
ld (copy_file_addr),hl
jr cont_copy_file
cont_copy_file:
ld hl,(dest_path_addr)
call get_arg2 ;hl=dir path address; e=size
ld b,0
ld c,e
ld de,dest_path_buffer ;store destination path to buffer
ldir
inc de
xor a
ld (de),a
ld hl,(copy_file_addr)
call get_arg2
ld b,0
ld a,e
ld de,copy_file_name
ld (de),a
ld c,a
inc de
ldir
ld hl,(copy_new_file_addr)
call get_arg2
ld b,0
ld a,e
ld de,copy_new_name
ld (de),a
ld c,a
inc de
ldir
continue_copy:
ld bc,&fbd9 ;store source path to buffer
ld a,1
out (c),a
ld b,27
ld hl,source_path_buffer
store_path:
ld a,&fb
in a,(&d3)
ld (hl),a
inc hl
djnz ,store_path
ld hl, ucopy_to_ram
ld de, &1e60
ld bc, 138
ldir
di
;--------------------------------------------------------------------------------------------------------
next_copy:
ld a,(file_state)
ld (file_state_temp),a
ld a,1
ld (file_state),a
ld hl,source_path_buffer
call place_directory
call set_directory
ld e,0
call set_filename
jp nz,error_ucd
ld hl,data
ld a,(file_state_temp)
ld (file_state),a
call copy_file_to_ram
ld (buffer_pos),hl
call close_files ;close source file
ld hl,dest_path_buffer
call place_directory
call set_directory
ld e,1
call set_filename
jp nz,error_ucd
cont_save_file:
ld hl,(buffer_pos)
ld a,h
sub &20
add a,a
ld h,a ;h has number of 128byte packets to send to save file
ld a,l
or h
jr z,end_saving2
ld a,l
or a
jr z,remove_chunk
sub 128
jp m,no_extra_chunk
jr z,no_extra_chunk
inc h
ld l,a
jr no_extra_chunk
remove_chunk:
dec h
ld l,128
no_extra_chunk:
ld d,h
ld e,l
ld hl,data
call write_bytes
ld a,1
ld (file_state),a
ld hl,(buffer_pos)
ld a,h
sub &20
ld h,a
call calculate_position ;add hl bytes to save file pointer
call end_saving
jp next_copy
;-------------------------------------------------------------------------------------
end_saving2:
ld hl,source_path_buffer
call place_directory
ei
end_saving:
ld bc,&fbd0
call usb_cmd
ld a,&36
out (c),a
ld a,1
out (c),a
jp check_responce2
;-----------------------------------------------------------------------------------------
set_filename:
ld bc,&fbd0
call usb_cmd
ld a,&2f
out (c),a
ld a,d
or a
jp z,continue_a
out (c),a ;put "/" in front of name
continue_a:
ld hl,copy_new_name
ld a,e
or a
jr nz,continue_b
ld hl,copy_file_name
continue_b:
; ld bc,&fbd0
ld e,(hl) ;size of name
inc hl
name_to_copy_loop:
call upper_case
out (c),a
inc hl
dec e
jr nz,name_to_copy_loop
xor a
out (c),a
call clear_buffer
call usb_cmd
ld a,(file_state)
or a
jr z,make_new_file
ld a,&32
jr cont_save_1
make_new_file:
ld a,&34
cont_save_1:
out (c),a
call check_responce2
in a,(c)
cp &14
jr z,seek2
jp error_4
;---------------------------------------------------------------------------------------
calculate_position: ;add hl to save file pointer
or a
ld a,(file_pos)
adc a,l
ld (file_pos),a
ld a,(file_pos+1)
adc a,h
ld (file_pos+1),a
ret nc
ld a,(file_pos+2)
inc a
ld (file_pos+2),a
ret
;---------------------------------------------------------------------------------------
seek2:
ld a,(file_pos)
ld l,a
ld a,(file_pos+1)
ld h,a
ld a,(file_pos+2)
ld e,a
ld d,0
seek:
call usb_cmd
ld a,&39
out (c),a
out (c),l
out (c),h
out (c),e
out (c),d
call check_responce2
in a,(c)
cp &14
ret
;---------------------------------------------------------------------------------------
place_directory:
ld bc,&fbd1
ld a,53
out (c),a ;clears path directory into PIC
ld c,&d6
place_dir_loop:
ld a,(hl)
or a
jr z,end_loop11
out (c),a
inc hl
jr place_dir_loop
end_loop11:
out (c),a
; call set_directory
; call set_filename
ret
;-----------------------------------------------------------------------------------------
ucopy_to_ram:
defb 30,128,205,175,30,123,183,32,1,201,205,226,30,237,162,4,29,32,247,205,211,30,62,59,237,121,205,226,30,124,254,158,200,24,221,30,128,1,208,251,205,211
defb 30,62,60,205,199,30,62,45,237,121,205,226,30,237,120,4,237,163,29,32,250,205,211,30,62,61,237,121,205,226,30,122,183,200,21,24,212,205,211,30,62
defb 58,205,199,30,62,39,237,121,205,226,30,237,120,95,183,200,205,226,30,201,237,121,237,89,175,237,121,205,226,30,237,120,12,62,1,237,121,13,62,87,237
defb 121,62,171,237,121,201,12,237,120,61,40,251,13,201
And keep in mind that inside the above code, they are not included ~half a dozen of other routines used (check "Usifac_ii_main_rom.asm" inside innerworkings folder, for more details)
Of cousre you can always develop anything you want as an independant binary/Basic file, like with disk2image and file manager utilities.
Now,in theory, if you first use |WIFI to establish a direct connection with a tcp server ( which is enabled when you run the PC windows utility) it would be rather easy to do such a thing, as you can use directly Amsdos routines to either load or save files from/to the tcp server. But, if you want to connect to an ftp server (or through http,udp etc) you will need a different firmware for esp8266 module that supports such protocols.
Maybe you are interested to develop such a function? :)
Quote from: ikonsgr on 12:28, 04 July 21
You mean download directly a file from an ftp/tcp/http server using esp 8266 wifi modules?
Well, first, it's impossible to add anything else anymore, there is literally no room left in Microcontroller's program memory
maybe you could remove the games
True, these games could be just in the USB together winth the utility programs (file managers, etc) and the extra space will make USIFAC2 even more powerful.
Compression would be another solution but I do not think it's worth. Maybe it will be free 25% of game space and I do not know any fast compression routines for Great Cow Basic. Surely @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) will now about what is available in GBC.
Quote from: Fran123 on 12:48, 04 July 21
maybe you could remove the games
Seconded. The games don't add anything being in ROM, and could be included in a "starter pack" for copying to usb to start off.
Well IMHO, games in rom does have a "quick start" value, because they give you the chance to load a few classic games immediately after you power on your Amstrad, without even needing to connect a usb flash drive! It's litterally a PLUG & PLAY feature! :D
Besides, i don't think there is anything valuable left to add as RSX command, where any extra "special" requests, can be always made as binary files loaded from usb device like disk2image or filemanager.
Just out of curiosity... how much KB of ROM do the 'internal' games occupy in the chip?
It's ~42kb for all 3 games, ~1/3 of microcontroller's program memory (128kb).
And here is a small teaser of the upcoming developments:
[attach=1,msg204521]
I wonder, what this might be... (and NO, it's not ONLY the obvious written on the side) :D
Interesting....
Based on your previous designs, I'm assuming that is space for a 28-pin PIC chip on the right-hand side for address decoding?
But what other magic it may be hiding is beyond me!
Maybe pic18f27q43?
Is the connector at the rear (before the edge connector) somewhere to connect a USIfAC to?
Quote from: Skunkfish on 10:26, 07 July 21
Is the connector at the rear (before the edge connector) somewhere to connect a USIfAC to?
It would be a great idea, because you could use with Usifac2 and MX4
I see that the connectors are J1, J4 and J5. What happened to J2 and J3?
Or is this what we have to guess?
Ok, enough with the mystery... :)
What i'm planning to do, is to
create a "dual mode" board, that the 512k SRAM memory will function either as normal RAM expansion AND as ROM BOARD for 32X16kb roms!My intention is to make a new utility for usifac ii, that will load the 512k of SRAM from a cpr rom cartdridge file (https://www.cpcwiki.eu/index.php/Format:CPR_CPC_Plus_cartridge_file_format), and then, by a simple press of a button, Amstrad will reset, and board will be transformed to a rom board! Pressing again the same button, will re-establish the normal ram expansion mode of operation! ;)
Apart from that, i implement an edge connector + extra idc pin connector (J4 connector), so you will be able to use directly a board with pin header (like USIfAC II) or/and an edge connector, without needing an mx4 or similar board for pluging multiple cards! ;)
Quote from: issalig on 23:09, 06 July 21
Maybe pic18f27q43?
Actually it's PIC18F26Q10 :)
Quote from: ikonsgr on 21:58, 07 July 21
Actually it's PIC18F26Q10 :)
Thus, the smaller brother of usifac2's brain.
Are you considering a betatester program? :)
Quote from: issalig on 21:04, 08 July 21
Are you considering a betatester program? :)
Do you have something to propose for testing RAM expansion?
Quote from: ikonsgr on 21:10, 08 July 21
Do you have something to propose for testing RAM expansion?
Betatester ? Count me in ;D
Quote from: ikonsgr on 21:10, 08 July 21
Do you have something to propose for testing RAM expansion?
To be true I never thought about extra memory for the CPC, but given that there will be an option, maybe it is time to check FutureOs, SymbOs, or just store a big sine/cosine lookup table :p
Which other use cases are you considering @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)?
I suppose a good overall test would be to load SYmbos/Future OS and see if extra ram is recognized correctly, but if i got problems, i might need some kind of ram tester to specify the bug and fix it.
p.s. i just found out that a good ram expansion test (https://www.cpcwiki.eu/forum/programming/memory-check/msg32977/#msg32977) already exists for quite some time! ;)
Hi John
Ram Tests :-
http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/quick-and-dirty-ram-test-for-cpc
Ray
I read on https://www.microchip.ua/wireless/esp01.pdf (https://www.microchip.ua/wireless/esp01.pdf) there are 36kb of memory, it would be great accesing there. Is it possible?
Quote from: Fran123 on 11:16, 09 July 21
I read on https://www.microchip.ua/wireless/esp01.pdf (https://www.microchip.ua/wireless/esp01.pdf) there are 36kb of memory, it would be great accesing there. Is it possible?
Well, if there are any AT commands that allows you to have access to this memory, then most probable you could use it, but as far as i know, no such commands exist, at least with the "official" ESP8266 instruction set.
With the instructions (Rev3)
Talking of AT commands. Page 27 - Setting up bluetooth module, the AT commands are case sensitive! Maybe just a note here about uppercase on all AT commands? HC-05 module does not respond otherwise
Page 16 - Screenshot of the |TER program:
There are no 'Command codes' or <ENTER> for help notes. Is that screenshot out of date?
The version I have here only shows <ENTER>, <ESC> and <CLR>.
PIC firmware, |STAT shows Rev 5
I mentioned a few pages back about Multiface 2 save issues (freezes up) when saving Kane to DSK image. I was using a 256MB FAT32 formatted stick in this case. I will try a MF2 outside of the DSK image and see if that is any better
I think its a problem with the MF2 using the lower ROM. MF2 is only compatible with the standard ROM from what I've read. I've found it also having issues with Dukes M4 lower ROM replacement for the CPC6128.
More tests with the Multiface, I've tried a 64MB FAT USB stick I had lying around from years ago with Flying Shark in its own folder. Game would start and run, but no luck with Multiface Save (freeze, no files saved). So its not a capacity issue, but probably some lower ROM problem
Also if I'm in the FSHARK folder, and attempt |CD,".." or |CD by itself, it will not move back a directory. |CDR will go to root directory. This is on USB stick
Update: Various RAM tests including DK'Tronics ones attached
Another edit:
QuoteTo get a stable 5V output in the whole 3A working range you can use a regulated buck chopper
I've found issues with having more than one device (Say Wifi + Bluetooth or Wifi + USB) most likely due to lack of power. Issues include Wifi not detected, or the USB module not detected
So I've split power separately to the CPC and the backplane running the USiFAC
When doing this with the CPC464, usually the 464 will get stuck before 'BASIC' prompt on reset (when pressing reset button on the USIfFAC). So you need to power off/on both power sources at the same time to boot properly. The main time this seems to happen is after issuing a |464 command. I've seen more issues like on my 464 than on the 6128
On a positive note, I got Gryzor 128K loaded on my CPC464 from USIfAC 2 + revaldinho 512KB RAM board + revaldinho 6 ROM board (6128 lower ROM + BASIC 1.1 to make RSX easier). YANCC works fine with this setup when loaded as a ROM on the board
Quote from: darkhalf on 04:36, 17 July 21
Talking of AT commands. Page 27 - Setting up bluetooth module, the AT commands are case sensitive! Maybe just a note here about uppercase on all AT commands? HC-05 module does not respond otherwise
Yes, upper case is mandatory for giving AT commands. I'll add a note for this
Quote from: darkhalf on 04:36, 17 July 21
Page 16 - Screenshot of the |TER program:
There are no 'Command codes' or <ENTER> for help notes. Is that screenshot out of date?
The version I have here only shows <ENTER>, <ESC> and <CLR>.
Indeed, photo is taken form an earlier version of terminal. In anycase, for communication with devices through AT commands (BT,Wifi modules) better use |COM.
Quote from: darkhalf on 05:43, 17 July 21
Also if I'm in the FSHARK folder, and attempt |CD,".." or |CD by itself, it will not move back a directory. |CDR will go to root directory. This is on USB stick
For going up, you use a plain |CD command, not an ".." argument :). Also, sometimes (depending on the usb flash drive you are using), you might get a "late responce" from it, e.g. you give a command and it needs a few seconds for actual execution.
Hello John,
Today I received my package with USIfAC2 for my AMSTRAD 6128 PLUS.
It doesn't load dsk image. I've tried to try four pendrives 256MB FAT but none works.
What is is happening?
Thanks.
Hi John
I was wondering if there is any Space left ?
Could a "Type" RSX Command be added
Type,"Filename.doc(txt)"
So we can Look at text files.
Thanks
Keep Safe
Ray
Quote from: Cunctator on 18:23, 20 July 21
Hello John,
Today I received my package with USIfAC2 for my AMSTRAD 6128 PLUS.
It doesn't load dsk image. I've tried to try four pendrives 256MB FAT but none works.
What is is happening?
Thanks.
After giving "Cat",to get contents of the image, you don't get any responce at all? That's really very strange...
Anyway, as i already noted a few times, i don't own an amstrad plus model, so personally, i couldn't test USIfAC board with it.
I remember though, that some others have test it and confirm that at least basic functionality (direct load and fdc emulation) works ok.
Quote from: ikonsgr on 11:23, 21 July 21
After giving "Cat",to get contents of the image, you don't get any responce at all? That's really very strange...
Anyway, as i already noted a few times, i don't own an amstrad plus model, so personally, i couldn't test USIfAC board with it.
I remember though, that some others have test it and confirm that at least basic functionality (direct load and fdc emulation) works ok.
Exactly when you do CAT the computer crashes.
I think it must be the disk controller or the last firmaware.
Any possible solution?
Thanks a lot.
Since everything works ok with a cpc 6128 and cpc464 i don't think it's firmware's fault.... ::)
Judging from my expereince, i would say that ,this odd behavior (direct load works ok, fdc emulation dont) looks more of incompatibility problem between usb host module and the flash drives you use.
One thing that might worth a try though, is an alternative method of flash drive format suggested by eto:
https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-iimake-your-pc-or-usb-stick-an-hdd-for-amstrad-access-dsk-and-many-more!/msg201702/#msg201702
Quote from: ikonsgr on 09:04, 23 July 21
Since everything works ok with a cpc 6128 and cpc464 i don't think it's firmware's fault.... ::)
Judging from my expereince, i would say that ,this odd behavior (direct load works ok, fdc emulation dont) looks more of incompatibility problem between usb host module and the flash drives you use.
One thing that might worth a try though, is an alternative method of flash drive format suggested by eto:
https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-iimake-your-pc-or-usb-stick-an-hdd-for-amstrad-access-dsk-and-many-more!/msg201702/#msg201702 (https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-iimake-your-pc-or-usb-stick-an-hdd-for-amstrad-access-dsk-and-many-more!/msg201702/#msg201702)
I already tried it but it still doesn't work.
Someone with an Amstrad PLUS has gotten USIfAC2 to work?
Quote from: Audronic on 06:33, 21 July 21
Hi John
I was wondering if there is any Space left ?
Could a "Type" RSX Command be added
Type,"Filename.doc(txt)"
So we can Look at text files.
Thanks
Keep Safe
Ray
I think this: [attach=1,msg205471]
Is exactly what you need! ;)
And maybe some time in the future,i might add it as an RSX command too.
Quote from: Audronic on 06:33, 21 July 21
Could a "Type" RSX Command be added
Type,"Filename.doc(txt)"
Actually X-DDOS has an RSX to be used as: !TYPE,"FILE". You need to check if X-DDOS works with USIfAC II thoug.
Quote from: ikonsgr on 19:14, 02 August 21
I think this:
Is exactly what you need! ;)
And maybe some time in the future,i might add it as an RSX command too.
Hi John
Phew thats Magic,
Thanks for doing that
An RSX would be preferable
Keep up the good work
Keep Safe
Ray
I got my mitts on a pickit 3 and updated the firmware :)
i like.
[UPDATE]
Finally i receive the first pcbs, for the ram/rom board:
[attach=1,msg206701]
And after a bit of work, i think it works ok:
[attach=2,msg206701]
[attach=3,msg206701]
I suppose since SYMBOS recognizes correctly 576kb total ram, and ramtest passes all blocks without problem, it should be ok.
The only problem is that i made a layout mistake on the 50pin connector for the pin header, and i had to use the passthrough edge connector for the USIFAC II.... Well, that's what prototype boards are for ::)
And here is the results using Amstrad Diagnostics 1.2:
[attach=1]
[attach=2]
I suppose this "C3 config:supported" is a good thing right? :)
Is there any way to use the board as a second drive, e.g. boot CPM off a physical disc and then use the Dsk image as the B drive?
It would be great to write a driver for CPM to allow it to use the the USB as a second drive.
Actually, CPC CPM+ doesn't support drivers, so it would be necessary to patch the EMS file as described at https://www.seasip.info/Cpm/cpm3semi.html
Further tests with my Schneider CPC464 revealed a rather strange behavior:
- Amstrad dignostics recognize and test 512k RAM correctly (576k in total) on CPC464, exactly like with CPC6128
- RAM expansion test from syx gives a rather strange result:
[attach=1,msg206745]
- No game seemed to recognize the expansion (but i manage to run gryzor -a 128k only game- by patching the basic loader program).
Also, i discover that,
whenever i write a byte to extra RAM, same byte is written on the same address of the internal ram too! All other operations (read/write to internal ram, read from external ram) seemed to work ok.
Does this behavior is "normal" for 464, or i might have a problem with expansion port signals of my cpc (like RAMDIS maybe...)?
Quote from: Mark_wllms on 09:48, 05 September 21
Is there any way to use the board as a second drive, e.g. boot CPM off a physical disc and then use the Dsk image as the B drive?
It would be great to write a driver for CPM to allow it to use the the USB as a second drive.
Actually, CPC CPM+ doesn't support drivers, so it would be necessary to patch the EMS file as described at https://www.seasip.info/Cpm/cpm3semi.html
I suppose you need to patch the cpm file access routines, exactly like i did for amsdos (CAS_IN_OPEN,CAS_OUT_DIRECT,CAS_IN_DIRECT etc). Unfortunately my knowledge of cpm is rather limited sο i'm afraid i couldn't undertake such a task... ::)
If you're making a RAM expansion now, does that mean that the usifac 2 is done and dusted, support-wise?
Also, if that is the case (and even if not) would you object to people modifying the firmware for potential "fan-supported" patches et al?
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Gryzor isn't 128k only, it just plays other/better music if 128kb is detected :)
Quote from: Devlin on 18:51, 10 September 21
If you're making a RAM expansion now, does that mean that the usifac 2 is done and dusted, support-wise?
In terms of abilities and functionality, i don't think there is anything extra to add anymore,at least with the current design :)
Perhaps, some time in the future i will "merge" RAM expansion and USIfAC II in a single board, offering USIfAC II functionality+ RAM expansion+ ROM board emulation in a single board! ;)
Having 512K SRAM on board, gives a great potential for adding extra abilities. For example, using ROM board emulation, it would be possible to add AMSDOS ROM or change BASIC ROM on a CPC 464, or replace/add with any custom ROM,perhaps even firmware low rom too!
Finally, the 2nd PIC MCU will also enable adding of new RSX commands and/or extra ROMS embedded in Microcontroller's program memory too!
Quote from: Devlin on 18:51, 10 September 21
Also, if that is the case (and even if not) would you object to people modifying the firmware for potential "fan-supported" patches et al?
Here (https://www.dropbox.com/sh/ua4vgf6qjjmqlnq/AACT6kqTr-sst-iqDeBnE9gRa?dl=0) you can find all code used for USIfAC II development, including main rom assembly code. So i think anyone is free to modify/patch the code for custom usage ;)
Quote from: SkulleateR on 19:07, 10 September 21
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Gryzor isn't 128k only, it just plays other/better music if 128kb is detected :)
Well, the game version i'm using has a BASIC loader that does not allow to run the game unless it has exta RAM ::)
Quote from: ikonsgr on 10:22, 11 September 21
In terms of abilities and functionality, i don't think there is anything extra to add anymore,at least with the current design :)
Perhaps, some time in the future i will "merge" RAM expansion and USIfAC II in a single board, offering USIfAC II functionality+ RAM expansion+ ROM board emulation in a single board! ;)
Having 512K SRAM on board, gives a great potential for adding extra abilities. For example, using ROM board emulation, it would be possible to add AMSDOS ROM or change BASIC ROM on a CPC 464, or replace/add with any custom ROM,perhaps even firmware low rom too!
Finally, the 2nd PIC MCU will also enable adding of new RSX commands and/or extra ROMS embedded in Microcontroller's program memory too!
Here (https://www.dropbox.com/sh/ua4vgf6qjjmqlnq/AACT6kqTr-sst-iqDeBnE9gRa?dl=0) you can find all code used for USIfAC II development, including main rom assembly code. So i think anyone is free to modify/patch the code for custom usage ;)
Well, the game version i'm using has a BASIC loader that does not allow to run the game unless it has exta RAM ::)
From this thread: the version of Gryzor i'm using that works on a plain 464 with usifac2
https://www.cpcwiki.eu/forum/software-related/didnt-get-gryzor-to-run-with-m4board/msg205733/#msg205733
Quote from: XeNoMoRPH on 06:21, 10 August 21try this : http://cngsoft.no-ip.org/gryzorex.zip
Quote from: ikonsgr on 10:22, 11 September 21
Here (https://www.dropbox.com/sh/ua4vgf6qjjmqlnq/AACT6kqTr-sst-iqDeBnE9gRa?dl=0) you can find all code used for USIfAC II development...
Sadly the forum mixed up the link. Maybe you can provide it directly. :)
https://www.dropbox.com/sh/ua4vgf6qjjmqlnq/AACT6kqTr-sst-iqDeBnE9gRa?dl=0
A few pics of online adventures with a cpc464 and a USIFAC.
Nice @kolleykibber (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4071)
Which Client are you using ?
Quote from: SkulleateR on 22:01, 18 September 21Nice @kolleykibber (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4071) Which Client are you using ?
Hi @SkulleateR (https://www.cpcwiki.eu/forum/index.php?action=profile;u=3124) , This is using a modified version of Ewenterm and ESPlink mentioned back in May in this thread: https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-iimake-your-pc-or-usb-stick-an-hdd-for-amstrad-access-dsk-and-many-more!/msg202202/#msg202202.
If I get a chance I'll try and put a video together.
Quote from: SkulleateR on 22:01, 18 September 21
Nice @kolleykibber (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4071)
Which Client are you using ?
I've already included it, in the sofware documentation for USIFAC II.
Check here: https://www.dropbox.com/s/owrt05zisa0fjca/connect_to_bbs.zip?dl=0
kolleykibber made a really nice work with required software and documenting the hole procedure for anyone to use it! ;)
With how things are, it appears the M4 won't be available for quite a while - I was wondering how likely it'd be for SymbOS to get mass storage support via the usifac2? I can live without the other features, but that's a big thing I'd quite like...
Hi there !
Thanks for all the work to this great device, I really like it!
There is a new case for 3D printing for it, you can download it on thingiverse: https://www.thingiverse.com/thing:4974135
(https://i.ibb.co/P9Br9hB/dav.jpg)
best regards
Vokgear
@Vokgear (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4384), thank you very much for your time and effort to make the case!
Btw, i've updated 1st post of the thread,so anyone interested can easily find the details for it! ;)
Vokgear, this is great, thank you! However, the file is not downloadable at the moment (... 404 error on thingy ...). Can you post the zip here?
It always takes some time til all the files are downloadable at thingiverse, but of course here is the zip-file of the case (see attachment) :D
Thank you @Vokgear (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4384) ! :-) Looks well made. What tool(s) are you using for designing cases?
Thank you :) I use Autodesk Inventor.
Thank you.
Seems that lots of people use Autodesk Fusion for designing cases. I'm trying to stick to open source (FreeCad, OpenSCAD)....
Printed your case, it fits nicely! :-) The decals/embossings are not that good in my print, but maybe the bed temperature is just too high .... (65° C).
Quote from: thomas on 09:21, 28 September 21
Thank you.
Seems that lots of people use Autodesk Fusion for designing cases. I'm trying to stick to open source (FreeCad, OpenSCAD)....
Printed your case, it fits nicely! :-) The decals/embossings are not that good in my print, but maybe the bed temperature is just too high .... (65° C).
I've found someone willing to print one for me. Will post pics in a couple weeks when it arrives.
And a small addition for all lazy people out there :) :
Extract this file (https://www.dropbox.com/s/f3nelh4gbiulzd4/games_pack.zip?dl=0)directly to your usb stick. Power on Amstrad, give:|USB and then: RUN"FM, and you will be able to directly select & load one of ~250 BAS files for games of the CLASSIC & WORTH TO PLAY (https://www.cpcwiki.eu/forum/games/how-about-making-a-'worth-to-play'-collection-of-amstrad-games/) list! :)
Quote from: Vokgear on 11:32, 25 September 21
Hi there !
Thanks for all the work to this great device, I really like it!
There is a new case for 3D printing for it, you can download it on thingiverse: https://www.thingiverse.com/thing:4974135 (https://www.thingiverse.com/thing:4974135)
*pic snip*
best regards
Vokgear
What type of screw does this use to hold it together?
Quote from: Mark_wllms on 09:48, 05 September 21
Is there any way to use the board as a second drive, e.g. boot CPM off a physical disc and then use the Dsk image as the B drive?
I've noticed that the interface reports an A and B drive, but uses the same disk image or directory for both. It would be great if it could switch disk images for A and B. Then we could load a large format disc as B and use Parados ROM.
Hi Everybody,
I just took my CPC 464 out of its box after 32 years and it still works perfectly, but as I don't have any peripherals its quite annoying to work with the cassette unit only.Therefore I would like a USIfAC II for it, is it still possible to get one?
I would email John directly. His address is in the first post of this thread. I ordered one in may and it arrived in the UK the next week!
The USIfAC II is a great project, I've been recommending it for a while as an available alternative to M4.
The enclosure looks great. Does anybody know how I can get one printed without owning a 3D printer?
If I can get the enclosure, I may order one USIfAC II so I don't rely on my M4 only for testing my new games.
EDIT: yep, found a couple of places. Not too bad, £21 from the UK (cheaper from France, but I rather don't risk extra costs because Brexit). I may have found myself a Christmas present!
Hi @reidrac (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1504) , can you share your 3D printing place(s) or PM them me? Tx
Quote from: entelle42 on 10:50, 11 October 21
Hi @reidrac (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1504) , can you share your 3D printing place(s) or PM them me? Tx
Is not an endorsement or anything like that, I don't know if they are any good, but I was looking at We Do 3D Printing (from Sheffield, UK). Search for it.
My local library does 3D printing. I've emailed them to ask what the cost would be.
Actually, there are places in France that are cheaper but is not convenient for me to order from out of the UK :(
Wow,i see the discussion about USIfAC case took over the board itself! :)
We are close to ~150 boards sent to the world so far, and work on next project of RAM EXPANSION/ROM BOARD is on progress too.
I've already manage to load PARADOS ROM in 512K SRAM and use it on a CPC 464 as a real ROM, to access large 800kb images, using |FDC (instead of |464) command e.g. a lot faster!
I've also tried a couple of small games in rom that worked too. The switch between RAM and ROM board mode is done by pressing a small button on board.
The features i'm planning to develop are:
- 3 modes of operation, the default 512K RAM expansion mode, a ROM board mode and a special ROM mode for use with CPR files.
- Load any ROM in 0-31 slots from files on usb device, and select to enable/disable any of the roms.
- Load .CPR files by using a custom ROM board mode ,which enables all available ROMS, and offers maximum ROM selection speed.
- Ease of use, through a simple OUT &EF00,x command (yes,i'm using the printer port for that ;D ) to:
Enable/disable each of the 32 ROM slots,
Choose upper/lower operation for ROM 0 (e.g. replace the firmware),
Choose default ROM mode (ROM BOARD or CPR file mode)
Enable/disable 512K RAM expansion
I believe that the first fully working prototype will be ready soon, maybe in a few weeks time! :)
150 eh? wow. Not a small feat :)
If you feel like promoting it a bit more, feel free to use the wiki's first page!
Quote from: Devlin on 17:20, 29 September 21
What type of screw does this use to hold it together?
Unfortunatelly I don´t know the exact name for the screw, the one I used is for wood or similar and was just flying around on my desk.
I guess bigger screws should also work.
(https://bilderupload.org/image/thumbnail/resized-8d4214366-img-20211012-194846.jpg)
(https://bilderupload.org/bild/8d4214366-img-20211012-194846)(https://bilderupload.org/image/thumbnail/resized-088714794-img-20211012-194917.jpg) (https://bilderupload.org/bild/8d4214366-img-20211012-194846)
Quote from: Mark_wllms on 09:48, 10 October 21
I would email John directly. His address is in the first post of this thread. I ordered one in may and it arrived in the UK the next week!
Hi,
I did already on Monday and it arrived yesterday, I already tried and it is definitely the perfect solution to revive the CPC464. Now I will try to find a good way to get a good Monitor as well, the GT64 (still working fine after 36 years) is too big and the imaghe to small, but I have already something in mind.
Well the 1084 with the green screen button produces a very nice effect😊
Quote from: Mark_wllms on 13:59, 11 October 21
My local library does 3D printing. I've emailed them to ask what the cost would be.
Free, apparently. ;D I'm having mine in green, with red, white and black buttons.
Quote from: Gryzor on 15:09, 16 October 21
Well the 1084 with the green screen button produces a very nice effect😊
As my Desk is full of Monitors (2 with 27 inch, one 14 inch) I have to use one of the existing. One of the big is actually a TV, so I will use it with a SCART cable. To use the small one (which has a standard Cinch FBAS Viedo input aside of VGA and HDMI) I installed an OpenVideoModulator inside the CPC 464, works also, although picture quality is limited, but sufficient for games.
Quote from: Mark_wllms on 19:57, 19 October 21
Free, apparently. ;D I'm having mine in green, with red, white and black buttons.
Well, your case seems so nice that i've decided to use it as an "example case" on the presentation of the USIfAC II on the 1st page! :D
A small update:
- New firmware realease 5a: A few minor bug fixes, and future support for the 512k RAM/ROM board expansion card, giving different boot messages:
"USIfAC II Enhanced + 512K RAM", for expansion card in RAM mode
"USIfAC II Enhanced + Rom Board" for expansion card in ROM mode,
"USIfAC II Enhanced" if you don't have extra card.
- Add a small utility to type ASCII/txt files on screen (type.zip). Run "TYPE.BAS", and just give the file name. Use any key to pause text, press again to unpause.
Btw, regarding the new ram/rom board, after i encounter some speed/compatibility issues (https://www.cpcwiki.eu/forum/programming/how-to-transfer-roms-to-rom-board-from-cpr-file-for-alcon-future-os-spacem-etc/) with the more "advance" upper & lower rom emulation at the same time, i've decided to redesign the circuit, using a larger 40pin PIC microcontroller 18F46Q10 (as the smaller 28pin 18F26Q10 lacks of the required extra pins to accomodate all signals needed), in order to implement a way of "on the fly" /zero delay switching between upper/lower roms (when both roms are enabled).
The speed issues occurs only when you enable emultation for both lower+upper roms (although Amstrad still seemed to work fine), and although this "advance" upper/lower Rom emulation was not initially in my plans, because i had also problems loading correctly cpr cartridge files (most notably, alcon2020), i've decided to try to resolve the issues.
So, for now i'm waiting for the new prototype boards for testing and if everything goes all right, the first few boards will be available before the end of year. :)
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Thanks for the update.
Could you add " type.bas " file to the First message please as I cannot find it
Thanks
Keep Safe
Ray
Quote from: Audronic on 23:05, 26 October 21
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Thanks for the update.
Could you add " type.bas " file to the First message please as I cannot find it
Thanks
Keep Safe
Ray
https://www.dropbox.com/s/kcyfef1x3kiwzxb/type.zip?dl=0
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Thanks
Keep Safe
Ray
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Hi John
There is a small concern with 5A
I have sent you an Email with details
Keep Safe
Ray
Afternoon all.
Received my device from John last week. Its mostly working well.
I made some tweaks to the case design *purely* for my own preferences.
- Removed embossed writing/symbols to aid printing
- Added two more screw holes near the ribbon cable to help keep the case closed
- Redid the buttons.
With the buttons, place them in the top half of the case, then superglue the small disks to the underside. This will stop them falling out.
- Created label to replace the embossed writing/symbols
https://www.thingiverse.com/thing:5068032 (https://www.thingiverse.com/thing:5068032)
Thanks Vokgear for the original design
I have been thinking if USIFAC could autoboot when pressing swap button at startup and automatically load a game/program similarly to Dandanator.
Any hints?
I'm finally around to trying out the USIfAC II and the first thing I wanted to do was flash the new firmware. I was surprised to see that I need a custom programmer for what looks like a normal serial communication, and even more surprised that the programmer is more expensive than the USIfAC itself :-(
If there an alternate way to flash it with an Arduino or with a normal USB-to-serial adapter, or does it have to be that exact programmer?
Also pretty bummed to see that it's pretty Windows dependent the whole process (at least as described in the flashing guide).
Quote from: llopis on 13:19, 01 November 21
I'm finally around to trying out the USIfAC II and the first thing I wanted to do was flash the new firmware. I was surprised to see that I need a custom programmer for what looks like a normal serial communication, and even more surprised that the programmer is more expensive than the USIfAC itself :-(
If there an alternate way to flash it with an Arduino or with a normal USB-to-serial adapter, or does it have to be that exact programmer?
Also pretty bummed to see that it's pretty Windows dependent the whole process (at least as described in the flashing guide).
You can flash it with a PicKit (2, 3 or one of the clone 3.5s, which is what I used) on Linux fine with MPLAB IPE. I got the PicKit clone for about a fiver on eBay.
Quote from: Cwiiis on 13:30, 01 November 21
You can flash it with a PicKit (2, 3 or one of the clone 3.5s, which is what I used) on Linux fine with MPLAB IPE. I got the PicKit clone for about a fiver on eBay.
Good to know. Unfortunately my first search for the PicKit came up around 20€-30€! Must be the chip shortage. Bummer!
I got it from here https://aliexpress.com/item/4001283162804.html and it's true, price increased 50% from March
Yeah, I sucked it up and ordered it from Amazon for €16, which at least includes delivery and arrives in two days. Annoying chip shortage!
Quote from: Cunctator on 18:23, 20 July 21
Hello John,
Today I received my package with USIfAC2 for my AMSTRAD 6128 PLUS.
It doesn't load dsk image. I've tried to try four pendrives 256MB FAT but none works.
What is is happening?
Thanks.
I have that exact same problem. Was there a solution for that?
I'm waiting on the programmer to update the firmware, so my firmware is probably 6 months out of date.
Edit: I'm using a CPC 6128, not a plus.
Second question: Most of my DSK files have filenames over 8.3 characters so they get truncated to XXXXXX~1.DSK. How the heck do you type ~ with a CPC keyboard? I don't see it anywhere! Am I missing something?
Quote from: issalig on 11:09, 01 November 21
I have been thinking if USIFAC could autoboot when pressing swap button at startup and automatically load a game/program similarly to Dandanator.
Any hints?
What you describe can only be done when you boot using Rom. Dsk images act like real floppy disks, usually containing files. One of these files is the loader of game which you need to run, in order to execute game. Unfortunately each game uses a different name to load, so it's not possible to make a "generic" autoboot process for dsk images.
Quote from: llopis on 19:45, 01 November 21
I have that exact same problem. Was there a solution for that?I'm waiting on the programmer to update the firmware, so my firmware is probably 6 months out of date.
Edit: I'm using a CPC 6128, not a plus.
Second question: Most of my DSK files have filenames over 8.3 characters so they get truncated to XXXXXX~1.DSK. How the heck do you type ~ with a CPC keyboard? I don't see it anywhere! Am I missing something?
For '~' press control+2 ,instead of ' " ' it will give you '~' ;)
Now about your problem, do you get the "USIfAC II Enhanced" message on boot screen? Other functions work ok (like direct file loading, |FORMAT, |STAT, |TER etc)?
Also, when you give |USB, do you get a red led on usb host module?
Quote from: ikonsgr on 20:16, 01 November 21
Now about your problem, do you get the "USIfAC II Enhanced" message on boot screen? Other functions work ok (like direct file loading, |FORMAT, |STAT, |TER etc)?
Also, when you give |USB, do you get a red led on usb host module?
Excellent tip on the ~. Thanks!
Yes to all of the above: Message at startup, messages in response to most commands (|CAT, |FDC, etc).
Oh! I just figured it out: if I type the name incorrectly in |MG,"name.dsk", it quietly fails and then |FDC and CAT hangs. In my case I was leaving out the .dsk part I think. It seems to be working now.
Does newer hardware complain if you pass an incorrect name to |MG?
Quote from: llopis on 20:39, 01 November 21
Oh! I just figured it out: if I type the name incorrectly in |MG,"name.dsk", it quietly fails and then |FDC and CAT hangs. In my case I was leaving out the .dsk part I think. It seems to be working now.
Does newer hardware complain if you pass an incorrect name to |MG?
Hmmm,no,i'm afraid |MG command is rather "passive",it only issues the name of image. So if you give a wrong image name and then try to access it by giving |FDC and then "CAT" amstrad will hang indefinetly. A good practice to avoid this, is to use |SMG command, just to ensure that image name issued correctly. Or, you can use filemanager and never bother about giving wrong image names at all! ;)
Anyway, maybe i could add a small check for name validity in the future, perhaps on giving "|FDC" command... ::)
You also get the same problem if you set a disk image with |MG, then change to a different directory with |CD, so the error message would have to check all the disks when the |FDC was issued.
Just out of curiosity, has someone managed to get it to work on a CPC 6128 plus ?, I tried but it was impossible.
Quote from: XeNoMoRPH on 08:31, 02 November 21
Just out of curiosity, has someone managed to get it to work on a CPC 6128 plus ?, I tried but it was impossible.
It works for me on a 6128 Plus, but it's *very* fussy - it seems the power on a Plus is a lot more marginal (I've cleaned everything power-related and tried several different supplies)... I can get it to work, but only on its own - if I put it in an MX4, it can sometimes work on its own but more often than not causes weird random behaviour and hangs, regardless of internal or external power on the MX4. Also, |fdc doesn't work on the Plus for disk emulation, only |464. If anyone gets it to work on a Plus machine with other boards also connected, I'd be very interested in their setup...
Some people had reported problems running the Amstrad Diagnostics program (https://github.com/llopis/amstrad-diagnostics) from USIfAC II, so I looked into it a bit this morning. Apparently when you run it, you get the lower RAM test, then the two beeps indicating it passes, and then it locks up.
The main problem I found is that the lockup happens while the diagnostics program is trying to detect all available RAM. Specifically, I'm iterating over all the banks and all the blocks within the banks:
https://github.com/llopis/amstrad-diagnostics/blob/main/src/CheckUpperRAM.asm
;; Port sequence for full 4MB:
;; 7F 7E 7D 7C 7B 7A 70 78
;; Bank block table
;; C4 C5 C6 C7
;; CC CD CE CF
;; D4 D5 D6 D7
;; DC DD DE DF
;; E4 E5 E6 E7
;; EC ED EE EF
;; F4 F5 F6 F7
;; FC FD FE FF
Any idea why turning on those memory configurations could cause the device to lock up? It's not doing partial address decoding, right?
The other minor thing I found is that when I do an upper ROM check, the ROM in slot 5 doesn't seem to have a proper string for its name, and it's just a bunch of garbage characters. I don't think that's breaking anything, but I thought it was a bit weird. Any reason for that? I thought it was standard for all ROMs to have a string ID in the header.
Quote from: XeNoMoRPH on 08:31, 02 November 21
Just out of curiosity, has someone managed to get it to work on a CPC 6128 plus ?, I tried but it was impossible.
I can also confirm I didn't get it to work on a 6128 Plus just with the defaults.
It would only boot up correctly about 50% of the time, and when it did, it would lock up after doing |FDC and trying to do CAT.
When running the file manager, it would say "File Already Open" after pressing Y (for old board).
This is the exact same device and USB file that worked on a CPC 6128.
Quote from: llopis on 10:53, 02 November 21
Any idea why turning on those memory configurations could cause the device to lock up? It's not doing partial address decoding, right?
Actually it does! :) Board is activated when A10=0 and A5=0 (expansion peripheral for serial port according to this: http://cpctech.cpc-live.com/docs/iopord.html ), so if you use port &7B00 it will definetely activate USIfAC II serial port!
Quote from: llopis on 10:53, 02 November 21
I thought it was standard for all ROMs to have a string ID in the header.
The header for Usifac II rom is this:
ORG #C000 ;Start of ROM
DEFB 1 ;Background ROM
DEFB 0 ;Mark 0
DEFB 5 ;Version 5
DEFB 0 ;Modification 0
DEFW NAME_TABLE ;Address of name table
And of course this is not my doing, it's how the official manual dictates about rom structure:
http://cpctech.cpc-live.com/docs/manual/s158se09.pdf
No need for any id header is required, and same goes for all official roms like Amsdos, Basic, OS firmware.
Quote from: llopis on 17:24, 02 November 21
I can also confirm I didn't get it to work on a 6128 Plus just with the defaults.
It would only boot up correctly about 50% of the time, and when it did, it would lock up after doing |FDC and trying to do CAT.
When running the file manager, it would say "File Already Open" after pressing Y (for old board).
This is the exact same device and USB file that worked on a CPC 6128.
As i noted a few times in the past, i don't own an Amstrad plus, and none of my friends/collectors i know have one too, so it was impossible for me to test USIFAC II with plus machines. But some say hat dsk image emulation works using |464 command, so it might work faster (as i verified it with a CPC 464) ,using a real CPC 6128 AMSDOS/PARADOS rom with the upcoming 512k RAM/ROM board card :)
Quote from: llopis on 17:24, 02 November 21
I can also confirm I didn't get it to work on a 6128 Plus just with the defaults.
It would only boot up correctly about 50% of the time, and when it did, it would lock up after doing |FDC and trying to do CAT.
When running the file manager, it would say "File Already Open" after pressing Y (for old board).
This is the exact same device and USB file that worked on a CPC 6128.
I get that "File already open [in 1]" when try use the file manager to load certain files without an extension. I kinda just chalked it up to being a quirk of the 464 though and it not really having a native disk system rom to fall on.
I've noticed that the CPC also defaults to tape mode on my 464 when loading certain games - like I hear the tape motor starting when a game tries to load sometimes, this has wildly varying results, from "halting" the system to having no discernible effect and it just loading as if nothing happened
I'm still having grief with mine, trying to isolate where the problem is on my 464.
The main issue I'm trying to get past at the moment is a weird double-boot.
Basically. Cold boot, boots to the ready prompt (with the usifac enhanced msg) then instantly reboots, getting hung at the copyright message.
I've tested it on a mates 6128 and it works fine.
Its not the edge connector, I've cleaned that to within an inch of its life. You can nearly see yourself in them.
It's not Power as I've removed the load from the cassette and run the thing from a proper bench PSU.
(incidentally.... when in normal use, the CPC draws about 860ma. When the machine it's hung on the second boot, it draws over 1A...?)
Noel sent me a beta of his diag and it all checks out fine.
My 464 is bone stock and it uses a 40007 ULA.
Quote from: ikonsgr on 20:12, 01 November 21
What you describe can only be done when you boot using Rom. Dsk images act like real floppy disks, usually containing files. One of these files is the loader of game which you need to run, in order to execute game. Unfortunately each game uses a different name to load, so it's not possible to make a "generic" autoboot process for dsk images.
I was thinking more about behaving as ROM 0 and take control without BASIC or Firmware and load a SNA.
Not sure if it will possible at all with USIFAC but in the meanwhile I am in the process of learning about ROM expansions and found this useful doc https://bmpc.github.io/2021/04/15/bulding-an-amstrad-cpc-expansion-rom.html
Quote from: MrLurch on 22:53, 03 November 21
I'm still having grief with mine, trying to isolate where the problem is on my 464.
The main issue I'm trying to get past at the moment is a weird double-boot.
Basically. Cold boot, boots to the ready prompt (with the usifac enhanced msg) then instantly reboots, getting hung at the copyright message.
I've tested it on a mates 6128 and it works fine.
Its not the edge connector, I've cleaned that to within an inch of its life. You can nearly see yourself in them.
It's not Power as I've removed the load from the cassette and run the thing from a proper bench PSU.
(incidentally.... when in normal use, the CPC draws about 860ma. When the machine it's hung on the second boot, it draws over 1A...?)
Noel sent me a beta of his diag and it all checks out fine.
My 464 is bone stock and it uses a 40007 ULA.
The "double boot" as far as I can tell is normal - it initalises the usifac2, then resets.
My 464 does it too.
What version of the firmware is on it? Does it show (Rev.5) on your friend's 6128 when giving the |STAT command?
^that's the latest to my knowledge, I don't know if there's a separate version command
Got my usifac2 (first version, vokgear's) case last night, a few cheap rubber feet later and it's perfect for use
Quote from: Devlin on 14:19, 04 November 21
The "double boot" as far as I can tell is normal - it initalises the usifac2, then resets.
My 464 does it too.
What version of the firmware is on it? Does it show (Rev.5) on your friend's 6128 when giving the |STAT command?
^that's the latest to my knowledge, I don't know if there's a separate version command
The lastest FW that John sent me Rev5a
Quote from: MrLurch on 00:59, 05 November 21
The lastest FW that John sent me Rev5a
Try to reload latest firmware (5a) again. For a couple of days, the hex file was wrong (i accidentally used a previous version of source code for creating hex file ;D)
Thanks again @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) for this cheap yet great interface!
I am wondering: is it supported by any (D)OS?
* Unidos @OffseT (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1826) ?
* Symbos @Prodatron (https://www.cpcwiki.eu/forum/index.php?action=profile;u=13) ?
* FutureOs @GUNHED (https://www.cpcwiki.eu/forum/index.php?action=profile;u=2029) ?
* Impdos @Ast (https://www.cpcwiki.eu/forum/index.php?action=profile;u=573) ?
* Other ?
If we could bulk-copy from/to X-Mass, that would be already very handy.
Quote from: m_dr_m on 16:15, 07 November 21
Thanks again @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) for this cheap yet great interface!
Yes, this is an awesome piece of hardware!
Quote from: m_dr_m on 16:15, 07 November 21
I am wondering: is it supported by any OS?
* FutureOs @GUNHED (https://www.cpcwiki.eu/forum/index.php?action=profile;u=2029) ?
Well, I do plan support for it. However I will wait a little bit until the firmware is getting close to final stage and then buy the interface (better 2 of them). I don't have a programmer for its chip here - therefore the waiting time.
Also my time is limited in general (36 hours per day // nine days per week only). After finishing up my Multitasker I have to keep up with a promise and do a MIDI tracker for the CPC. But I'm confident it can be done in 2021. So 2022 will be my year of the USIfAC II. :) :) :)
Quote from: m_dr_m on 16:15, 07 November 21
I am wondering: is it supported by any (D)OS?
* Unidos @OffseT (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1826) ?
Chany already asked me about such a support months ago, but according to the USIfAC documentation it didn't seem to be possible.
Anyway, both UniDOS nodes and USIfAC documentations are available, so feel free!
(and BTW, I cannot develop DOS node for all existing weird hardwares I do not even own)
Quote from: OffseT on 10:45, 08 November 21according to the USIfAC documentation it didn't seem to be possible.
What is blocking?
Quote from: OffseT on 10:45, 08 November 21
(and BTW, I cannot develop DOS node for all existing weird hardwares I do not even own)
If you guys have differences - fine! But please don't take it out at somebody else's projects.
Quote from: m_dr_m on 20:03, 08 November 21
What is blocking?
I don't remeber. :P
I just recall the statement: "not possible at the moment, let's check again later with newer firmwares."
Is there a rev6 firmware coming out, and if yes, when?
MAJOR FIRMWARE UPDATE (rev. 6)
- GREAT direct file loading speed increase of ~+25% now reaching up to ~30kb/sec! Affects direct file and snapshot loading speeds (and partly |UCOPY too). I've made a fundamental change on loading code, by moving the input buffer checking (wait if inp(&fbd1)=1 e.g. if buffer is empty) from Amstrad assembly code, inside PIC microcontroller's code. Each input buffer check required 5-6us when executed from Z80 assembly, but only ~1us when executed from PIC MCU code (e.g 5-6 times faster code execution!)! This had major affect in actual loading speed as this code executed for every loading byte! For example, a 128kb snapshot is now loading in ~4.5seconds, more than 1second less than previously needed!
- |UCOPY: Bug fixes and much better error handling.
- |DISK: Bug fixed: image files created didn't work with emulators.
As always you can find a direct link for the new firmware at 1st post of this thread.
Great news! Does it solve the "not possible at the moment, let's check again later with newer firmwares."?
I guess it was about being able to program the ch376.
Quote from: m_dr_m on 12:57, 24 November 21
Great news! Does it solve the "not possible at the moment, let's check again later with newer firmwares."?
I guess it was about being able to program the ch376.
Well,if you could be a bit more specific about the exact nature of the problem,i might be able to help with that request ::)
Quote from: ikonsgr on 12:48, 24 November 21
MAJOR FIRMWARE UPDATE (rev. 6)
- GREAT direct file loading speed increase of ~+25% now reaching up to ~30kb/sec! Affects direct file and snapshot loading speeds (and partly |UCOPY too). I've made a fundamental change on loading code, by moving the input buffer checking (wait if inp(&fbd1)=1 e.g. if buffer is empty) from Amstrad assembly code, inside PIC microcontroller's code. Each input buffer check required 5-6us when executed from Z80 assembly, but only ~1us when executed from PIC MCU code (e.g 5-6 times faster code execution!)! This had major affect in actual loading speed as this code executed for every loading byte! For example, a 128kb snapshot is now loading in ~4.5seconds, more than 1second less than previously needed!
- |UCOPY: Bug fixes and much better error handling.
- |DISK: Bug fixed: image files created didn't work with emulators.
As always you can find a direct link for the new firmware at 1st post of this thread.
Updated. Feels more snappy loading games direct file-wise, though most games loaded so quick anyway it's barely noticeable unless paying very close attention :)
Quote from: Devlin on 09:04, 25 November 21
Updated. Feels more snappy loading games direct file-wise, though most games loaded so quick anyway it's barely noticeable unless paying very close attention :)
Indeed, loading speed was already rather quick, so practically you will notice difference when more than 50-60kb is loaded at once. This is not the case with most direct load games, only some large 128k games load at once so much data, try for example Star sabre (load ~115kb at once) and you will see a noticable difference.
Also difference is noticable with snapshot file loading too.
Finally, with future RAM/ROM board, it will help load quite faster roms and cpr files, especially large 512kb ones, like alcon, will load from ~19-20seconds to ~15seconds :)
I've been trying to use my USIFAC II with a Multiface II to save memory state (on a CPC6128).
It works fine writing to a disc image loaded with ¦FDC. I get 5-9 binary files (depending on whether I clear the second memory bank), which can be loaded back into memory. This is using the Amstrad's own AMSDOS ROM, the USIFAC is only emulating the FDC.
When I try with the USB mode (FDC emulation disabled, the USIFAC is emulating / patching the AMSDOS routines) it saves the binary files to the USB, but loading them back causes the screen to go haywire - it looks like the CRTC is non being programmed, but for all I know it might be loading garbage.
I read at https://www.grimware.org/doku.php/documentations/expansions/mf2/startdo=export_xhtml that
QuoteTo perform it's disc operations, the MF2 Firmware jumps directly into the DOS ROM (Upper ROM 7). This, usually, is considered bad programming practice because of possible compatibility problems.
Could this cause an error?
Yes.
Quote from: Mark_wllms on 12:26, 02 December 21
I've been trying to use my USIFAC II with a Multiface II to save memory state (on a CPC6128).
It works fine writing to a disc image loaded with ¦FDC. I get 5-9 binary files (depending on whether I clear the second memory bank), which can be loaded back into memory. This is using the Amstrad's own AMSDOS ROM, the USIFAC is only emulating the FDC.
When I try with the USB mode (FDC emulation disabled, the USIFAC is emulating / patching the AMSDOS routines) it saves the binary files to the USB, but loading them back causes the screen to go haywire - it looks like the CRTC is non being programmed, but for all I know it might be loading garbage.
I read at https://www.grimware.org/doku.php/documentations/expansions/mf2/startdo=export_xhtml that Could this cause an error?
Indeed, FDC emulation works "low level", it doesn't affect any Amsdos routines either Interferes on DOS ROM 7. But when you enable "direct mode" to access directly files on usb device, this modifies various Amsdos routines AND takes control of DOS rom 7 too. So, if MF2 performs direct jumps to ROM7 obviously it will not work.
That completely makes sense. :(
I will just have to write a new Mf2 software that writes to sna via USIFAC II!
have sent you a PM to buy a device.
Quote from: ikonsgr on 18:21, 03 December 21
Indeed, FDC emulation works "low level", it doesn't affect any Amsdos routines either Interferes on DOS ROM 7. But when you enable "direct mode" to access directly files on usb device, this modifies various Amsdos routines AND takes control of DOS rom 7 too. So, if MF2 performs direct jumps to ROM7 obviously it will not work.
The Pic KIT3.5 version can be used as Pic KIT3 for USIfAC II firmware updates?
Quote from: shacpc on 00:14, 14 December 21
The Pic KIT3.5 version can be used as Pic KIT3 for USIfAC II firmware updates?
Most probable yes. I've tried updates using PICKIT3 and PICKIT4 programmers, both work ok, only with PICKIT4 it's done much faster (~12seconds using PICKIT4 instead of 40seconds using PICKIT3)
Quote from: shacpc on 00:14, 14 December 21
The Pic KIT3.5 version can be used as Pic KIT3 for USIfAC II firmware updates?
Can confirm 3.5 (which I think is a knock-off, there's no official PicKit 3.5) works fine.
thanks to all!
Quote from: Cwiiis on 21:36, 14 December 21
Can confirm 3.5 (which I think is a knock-off, there's no official PicKit 3.5) works fine.
Sorry if this is covered already, but I'm trying to work out if it's possible to copy files from a DSK image on the USB to a physical disc in the CPC's drive.
Using the |COPY command just crashes things. I'm looking to copy all of the files from a DSK to the physical disc in the CPC.
Am I doing it wrong? Connecting up the USB, typing |USB and then |MG,"whatever.DSK" and then |FDC and then the |COPY command.
I have also updated to the lastest "6" firmware and tried on both a 664 and a 6128. The difference is now I get an error message, file not found.
I suspect I'm not following the correct route to do this. I also don't know what |COPY command I would issue to just copy everything on the loaded USB disc to the physical disc in the drive
Could you perhaps give me an example of all the commands I would type from powering on the CPC to the point at which the files are copied to the CPC from inside a DSK image stored on a USB drive on the device? I would expect they would start with |USB
Quote from: Velociraptor on 23:44, 17 December 21
Sorry if this is covered already, but I'm trying to work out if it's possible to copy files from a DSK image on the USB to a physical disc in the CPC's drive.
Using the |COPY command just crashes things. I'm looking to copy all of the files from a DSK to the physical disc in the CPC.Am I doing it wrong? Connecting up the USB, typing |USB and then |MG,"whatever.DSK" and then |FDC and then the |COPY command.
I have also updated to the lastest "6" firmware and tried on both a 664 and a 6128. The difference is now I get an error message, file not found.
I suspect I'm not following the correct route to do this. I also don't know what |COPY command I would issue to just copy everything on the loaded USB disc to the physical disc in the drive
Could you perhaps give me an example of all the commands I would type from powering on the CPC to the point at which the files are copied to the CPC from inside a DSK image stored on a USB drive on the device? I would expect they would start with |USB
You can't directly copy files from inside dsk image to a usb flash drive. But you can do it using a floppy disk. First you copy image to floppy disk using |DSK,"image name" command, and then you can use |2PC in order to select and copy individual files from floppy disk to the usb drive.
For further details check user's guide: https://www.dropbox.com/s/8h047mdwhnsx9ek/Amstrad%20CPC%20Serial%20Interface%20II%20User%20Guide_v3.pdf?dl=0
In "File copy from cpc function" you can see all the details about the |2PC function.
I'm not trying to copy to USB.
Quote I'm trying to work out if it's possible to copy files from a DSK image on the USB to a physical disc in the CPC's drive.
The files are on a .DSK image which is on a USB flash drive in the USIFAC2.
I want to copy the files onto a disc which is in the disc drive of the 6128.
Ok, but why don't you just copy the entire dsk image to a disk directly, and you want to copy files?
In any case, if you copy dsk image to floppy disk you can easily copy back any files you want from floppy disk to the usb drive (using |2PC command), and then, you can also copy back these files from usb drive to the specific floppy disk you want (using |COPY command)
CF2 mass disc testing results (cpcwiki.eu) (https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/cf2-mass-disc-testing-results/)
I have a number of discs with partial damage, the damage has been assigned to a file on the discs so that the rest of the disc capacity can be used.
Typically it's less than 5kb for each disc side so ideally I want to copy files to these discs that do not need the full capacity.
>[size=0px]you can also copy back these files from usb drive to the specific floppy disk you want (using |COPY command)[/size]
[/size]
Yes that's what I want to do. I want to copy files to a floppy disc.
Ok, so you already have files on floppy disks and not dsk images right? In that case, you can just use |2PC and copy any files from floppy disks to usb drive! ;)
Btw, well done for your patience to test 100's of CF2 disks! :)
No.... ;D
Exactly the opposite!
I have the files in DSK images downloaded from cpc-power. Example attached.
I want to copy the files from this disc image to a floppy disc in the drive of the CPC, and I have been trying to use the |COPY command to do it.
I have flashed to the latest firmware and I have read the manual. I cannot get it to work at all but my suspicion is that I am doing it the wrong way.
You don't need to use |COPY (this is ONLY for copying files from floppy disks to usb drive, not from dsk images to floppy disks).
You can just copy the dsk image directly to a floppy disk using a simple: |DSK,"Silico~1.dsk"
I just try to copy the silicon image to a disk. It works ok, but track numbers in image's disk header, is wrongly declared to 42 instead of the real 40 tracks, so function seems to pause in the end (but disk is written ok). I've corrected the track number declaration, so now it works without stoping in the end:
[attach=1,msg210248]
Ah. That won't work for me.
I have a number of discs with marked bad blocks - see attachment.
I can copy files to them without losing the bad block assignment, but copying an image won't do that.
Well, i suppose you have to use a good disk without bad sectors.
[attach=1,msg210250]
Yes it works great for that. But when I read the manual I thought that the |COPY would do the job.
An alternative would be to mount the virtual DSK image as a drive and then use a CPC utility to copy between the two. Failing that I would copy the image to a disc and then remove the USIFAC2 and just use normal CPC utilities.
Edit : The manual does need to be changed.
"- |COPY,'xxx': Copies from USB Device to a Floppy disk,all files starting from 'xxx'. You can also use an exact file name as argument, to copy a single file only."
I've had lots of problems with disc images this evening too, I'll make a separate post to try to keep things as clear as possible.
I am having problem with images. [size=78%]I have tried various USB drives.[/size]
2 fail to be recognised entirely, even with 16MB partitions.
1 works but fails during the copy.
5 others all produce the same result - on any image file other than a very short one they get seemingly quite far but do not complete and just hang.
I have tried this on both my 664 and 6128, both with no other expansions connected and I get the same result.
You can see the process I follow on screen - I enable USB with |USB, I list the disc images with |CAT and then I copy the disc image to disc using the |DSK,"FILENAME.DSK"
Am I perhaps following an incorrect process?
Turns out I couldn't sleep so I thought I'd give it another try. This time through wifi.
For some reason port 1000 would not work, but when I changed to 1111 it connected with no difficulty.
I had an error using the disc image that I'd been using. And I thought "But I'm certain John got it to work for him. Are you imagining things?" and it's only then that I noticed the part in your edit about the dodgy tracks!
The disc writes that I had done had resulted in something that looked correct but wouldn't function. When I used your corrected image through WiFi it worked and the game runs!
So that's a bit of a relief. I do have more questions.
First of all once it had completed the disc imaging it repeated on the CPC screen to insert a disc. Does this mean I should simply reset the CPC with the button on the USIFAC2 when done? Does this also mean that I could go back to the PC and change the image file if I wanted to write a series of discs and I could just change the disc on the CPC and press space after I had set the next one up?
Secondly how did you fix that disc image because it looks like I'm going to have to fix some myself!
Ok, judging from the screen shots, i would say that the 1st image is not written correctly on usb drive (that's what the "error accesing image file" message indicates) but also the floppy disk you used, couldn't written either (that's what "error writing to disk" suggests).
On all other cases,i suppose it's a matter of wrong track number declaration in image's Disk header, that's why disk writing seem to stop in the end (maybe i could modify the code to avoid this... ::) ), although disks should be written ok (i've tried it with your silicon image and floppy disk worked fine, despite the write hanging in the end)
Quote from: Velociraptor on 05:17, 19 December 21
Does this mean I should simply reset the CPC with the button on the USIFAC2 when done? Does this also mean that I could go back to the PC and change the image file if I wanted to write a series of discs and I could just change the disc on the CPC and press space after I had set the next one up?
Exaclty!
Quote from: Velociraptor on 05:17, 19 December 21
Secondly how did you fix that disc image because it looks like I'm going to have to fix some myself!
It's quite easy, you need to open the dsk image using a hex editor (i'm using this free one: https://mh-nexus.de/en/ ) and change the byte at &30 position (it's the first from left at 4th row) to the correct track number. Mind that numbers are in hex format, so if you see a value of &2A means 42 tracks in decimal, and you should probably change it to &28 (=40 tracks). Then you just save back the image file and you are done! ;)
Btw, how do you create these images? I'm curious about this wrong declaration of tracks, as i never faced such problem in the past... ::)
Quote from: Velociraptor on 05:17, 19 December 21For some reason port 1000 would not work, but when I changed to 1111 it connected with no difficulty.
That one is simple - ports below 1024 are considered privileged and require administrator/superuser to access on all major OS's.
I don't know how the images were created, they're like that on cpc-power. Is it perhaps a copy protection thing?
SectorView v1.20 (cpc-power.com) (https://www.cpc-power.com/SectorView.php?fiche=611&slot=10&rang=1)
SectorView v1.20 (cpc-power.com) (https://www.cpc-power.com/SectorView.php?fiche=3993&slot=11&rang=0)
Or is it perhaps just something that guy is doing when he makes images? I'm not sure and as long as they work by just manually editing the file then it will do for me.
I don't like using flash storage, and I like using real discs so for me USIFAC2 and the big pile of discs I have been testing are so that I can have a library of the games I want to have on disc.
Sadly my issues are not over though. I'm now trying to send files to the CPC from the windows program.
This is the order I've done things -
|WIFI (it seemed to remember the SSID and password) on CPC
|2CPC on CPC
On PC I select File copy to CPC and then I selected a single file
The PC side looks as if it's starting but the CPC side doesn't change and is still sitting at the "Waiting for file..... " prompt
Disc image transfers do work though, I've just transferred "The Pawn" after editing the tracks in the .dsk to 40. I actually had that hex editor installed already.
Indeed,it seems that there is a problem when using the file functions with WiFi module (Dsk image transfer and direct load/save should work ok though).
I'll see to it, but for now, you can use a bluetooth module or direct serial cable, as file functions work ok with these.
Quote from: ikonsgr on 20:50, 20 December 21
Indeed,it seems that there is a problem when using the file functions with WiFi module (Dsk image transfer and direct load/save should work ok though).
I'll see to it, but for now, you can use a bluetooth module or direct serial cable, as file functions work ok with all functions.
That's fantastic news!
There's no rush at the moment so I'll just wait. I was really surprised that wifi worked at all because I always prefer wired but since it is working I'll just wait until files work. I had been worried I was doing something wrong.
I wrote 10 disc images last night and all 10 worked!
Ok,i think now all functions work ok with WiFi module too. :)
I've updated the windows utility program, you can downalod it from here:
https://www.dropbox.com/sh/gg2faiikx4pit37/AADRvM_QsTzI1mGOsFx5Vugra?dl=0
So ... again my Usifac isn't recognized any longer.
I started a game from USB, did a RESET - and then just the normal 464 screen appeared. No longer any Usifac message.
I also tried to set the rom number again, but no luck. Also the check
out &fbd1,30: if inp(&fbd0)=83 then print "ok"
doesn't get me an OK.
Can I revive it somehow?
If you have a PIC programmer, try to reflash firmware. Otherwise, i can send you a programmed PIC mcu.
Quote from: ikonsgr on 20:07, 10 January 22If you have a PIC programmer, try to reflash firmware.
I just ordered one... will give it a try tomorrow
A couple of other things that I recognized today with the 464 (I have another Usifac which still works):
The filemanager has some issues with programs that have no extension and stops with an error in line 1. If not I often get a Syntax error or "File already open". A simple patch which creates a valid BASIC line will change that. Just add an ending ", a 0-byte and make sure the length of the line in &170 is set correctly.
Even with this patch, the "File already open" error can still happen. E.g. Who dares wins fails after it loads another Basic file. Can this somehow be fixed?
Would it be possible that the file manager continues to use the MODE that has been selected in the Basic part? The reason for this is, that on the original colour monitor (and even worse on the MP1/2 modulator) Mode 2 text is hard to read - and since it only uses 11 characters anyway, MODE1 or even 0 would not have any disadvantage and everybody could change the BASIC file based on individual preferences.
Quote from: ikonsgr on 20:07, 10 January 22
If you have a PIC programmer, try to reflash firmware. Otherwise, i can send you a programmed PIC mcu.
Reflashing did the trick, it works again.
One thing I thought would be fixed by the new firmware is, that the boot sequence regularly hangs:
First time I power up the 464, it hangs after the copyright message (see image below). I click the reset button and then it fully boots. I can then click reset and every time it boots perfectly UNTIL I enter |USB. Once I do that and a reset will always fail. It always hangs after the copyright message like after the first boot. I have to turn off the computer and then start again.
Is this a known behaviour? Can I do anything about it?
Hi to all, I received the USIfAC II a week ago. I have tried it to load DSK from USB and it has worked great for me.
It's a shame that you have to assign $ variables to each folder or DSK that you intend to open and there is no more agile method, but I am very happy with how it works.
I don't think I will mess with it much for other possibilities and even scare me to update its firmware in the future ... but to run DSK on my CPC464 it has been a real joy and at a very good price. Many thanks to the developerr ikonsgr
Quote from: shacpc on 23:03, 11 January 22It's a shame that you have to assign $ variables to each folder or DSK that you intend to open and there is no more agile method, but I am very happy with how it works.
that's a stupid problem of Basic 1.0. But you can copy the filemanager to the root of the USB stick (see first post of this thread) and navigate the USB stick more easily and execute files or mount disk images.
Quote from: eto on 20:42, 10 January 22The filemanager has some issues with programs that have no extension and stops with an error in line 1. If not I often get a Syntax error or "File already open". A simple patch which creates a valid BASIC line will change that. Just add an ending ", a 0-byte and make sure the length of the line in &170 is set correctly.
Even with this patch, the "File already open" error can still happen. E.g. Who dares wins fails after it loads another Basic file. Can this somehow be fixed?
I notice that the USIFAC needs a file extension to load a basic file, whereas unpatched AMSDOS will assume .BAS if not specified. For example if I have a file called "DISC.BAS", AMSDOS will normally accept
RUN"DISC"
whereas USIFAC will require
RUN"DISC.BAS"
to load it.
Quote from: eto on 23:08, 11 January 22
that's a stupid problem of Basic 1.0. But you can copy the filemanager to the root of the USB stick (see first post of this thread) and navigate the USB stick more easily and execute files or mount disk images.
thank you! . It is very intuitive and easy. I hope that the future continues to evolve and also allows the application to open the .DSK and select the .BAS or .BIN file inside with the cursors. My thanks again to all the participants in this project.
Can someone add the FM file from the file manager without the initial question from the old device and directly start the file listing for a current one? thanks
Quote from: ikonsgr on 20:07, 10 January 22
If you have a PIC programmer, try to reflash firmware.
Hi @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) - so reflashing worked, but the 464 often hangs on boot and can sometimes not even be reset. I have to turn it off to make it work again. Any ideas if this can be resolved?
Quote from: eto on 22:51, 11 January 22First time I power up the 464, it hangs after the copyright message (see image below). I click the reset button and then it fully boots. I can then click reset and every time it boots perfectly UNTIL I enter |USB. Once I do that and a reset will always fail. It always hangs after the copyright message like after the first boot. I have to turn off the computer and then start again.
Quote from: Mark_wllms on 10:06, 12 January 22
I notice that the USIFAC needs a file extension to load a basic file, whereas unpatched AMSDOS will assume .BAS if not specified. For example if I have a file called "DISC.BAS", AMSDOS will normally accept RUN"DISC"
whereas USIFAC will require RUN"DISC.BAS"
to load it.
Well, that's because the code emulation i develop, when you request to load/run a file without extension, it first tries to load the file as it is, if it's not found, then assumes it has a BIN extnesion and tries again with it :) So, for files with BIN extension you DONT need to add it on LOAD" or RUN" commands. But for files with BAS extension (usually basic files) you have to add it. I also mention this in the last "HINTS and TIPS" section of user's guide ;)
Quote from: shacpc on 23:59, 12 January 22
Can someone add the FM file from the file manager without the initial question from the old device and directly start the file listing for a current one? thanks
Downalod filemanger again from here: https://www.dropbox.com/s/aaeqqvvuuln3pcc/File%20manager.zip?dl=0
I've added a second basic program named "FM2" which doesn't include the question and directly loads file manager! ;)
Of course if you have older board (i think rev3 or older) you should use "FM" as before.
Quote from: eto on 12:07, 13 January 22
Hi @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541) - so reflashing worked, but the 464 often hangs on boot and can sometimes not even be reset. I have to turn it off to make it work again. Any ideas if this can be resolved?
One thing you can check is the psu you are using. Many times a power cable splitter or small psu can cause under voltage problems. Also, a bad edge connector contact can cause erratic behavior too.
Anyway, with my CPC 464 everything works ok with rev6 firmware,never had such boot problems, so i suppose the problem doesn't have to do with firmware bug.
Btw, i've upload again the last rev6 just to be sure it's the right one :) . Also, did you try to flash older firmware revisions to see if you get the same problem?
Quote from: eto on 20:42, 10 January 22
A couple of other things that I recognized today with the 464 (I have another Usifac which still works):
The filemanager has some issues with programs that have no extension and stops with an error in line 1. If not I often get a Syntax error or "File already open". A simple patch which creates a valid BASIC line will change that. Just add an ending ", a 0-byte and make sure the length of the line in &170 is set correctly.
Even with this patch, the "File already open" error can still happen. E.g. Who dares wins fails after it loads another Basic file. Can this somehow be fixed?
Would it be possible that the file manager continues to use the MODE that has been selected in the Basic part? The reason for this is, that on the original colour monitor (and even worse on the MP1/2 modulator) Mode 2 text is hard to read - and since it only uses 11 characters anyway, MODE1 or even 0 would not have any disadvantage and everybody could change the BASIC file based on individual preferences.
I've checked WHO DARES WINS II, indeed the basic loader program has a: run"loader command, when the real file is "loader.bas". As i explained, with BAS files, you have to mention the extension in order to load it. So you can simply add .bas extension on the last command of basic listing, and then save the file, from now on it should work ok :)
And here is some explanation of why i select to automatically check for .BIN extensions instead of .BAS: During testing i've encountered quite a few muti file games with basic loaders, where the .BIN extension of binary files requested in basic program. For example there was a line: LOAD"FILE",&8000 but the actual file was named "FILE.BIN". That's why i add a second attempt for loading files, if initial load fails, try again using "BIN" extension. This works for most games, but in some rare cases,(like WDW II, and i suppose this should happens mainly with "early days" games) , a basic loader listing has basic line to run another basic program! In this case, if the basic program name has "bas" extension, but this is omitted in the basic command, loading will fail. But fortunately as i already wrote, it's rather easy to correct this problem! ;)
Quote from: ikonsgr on 19:09, 13 January 22One thing you can check is the psu you are using. Many times a power cable splitter or small psu can cause under voltage problems. Also, a bad edge connector contact can cause erratic behavior too.
Anyway, with my CPC 464 everything works ok with rev6 firmware,never had such boot problems, so i suppose the problem doesn't have to do with firmware bug.
Btw, i've upload again the last rev6 just to be sure it's the right one . Also, did you try to flash older firmware revisions to see if you get the same problem?
I tried it with several PSUs and there is no change. It happened wit the very old firmware (v2 or so) and the current one. As it's 100% reliable and repeatable I doubt that it's the edge connector, but I will clean it just to be sure.
I can also try with a different firmware if that makes sense.
Quote from: eto on 19:39, 13 January 22I've checked WHO DARES WINS II, indeed the basic loader program has a run"loader command when the real file is "loader.bas". As i explained, with BAS files you have to mentions the extension in order to load it, so you can simply add .bas extension on the last command of basic listing, and then save the file, from now on it should work ok
Ah - nice!
If I recall ok, the extension check order is first blank, then .BAS and then .BIN.
That should make all work fine.
Link to original post(with photos): https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-ii-adding-wifi-esp8266mod/msg211467/#msg211467 (https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/usifac-ii-adding-wifi-esp8266mod/msg211467/#msg211467)
I may have posted in the wrong place but here are a few queries if possible I can get assistance on please?
Hi there all,
I know there is a separate topic for the USIfAC II, but I am just rediscovering (well the past year and a bit) my passion for electronics but still rusty.
I am after advice on how to connect an ESP8266MOD to the USIfAC II. I know it should be easy but I don't want to damage anything! What is stopping me is the fact it has a mini USB UART to program the ESP8266MOD via Arduino etc.. all works fine.
EDIT: Mon 24th Jan 2022I have looked through files available and found a ESP8266 flash folder. After using Arduino IDE to upload a serial console sketch(i think) I was able to use AT commands etc and update the flash so now it is actually set as an access point connected to my home network. But I haven't connected to the USIfAC II. I just need advice on which pins to connect from the ESP8266MOD to the USIfAC II - I don't know the standard ways. Obviously I will look into powering a better way once connected. If anyone needs a better picture of pinouts I can provide.. thanks.
I am maybe thinking too much into it, but will I need to bypass the USB UART of the ESP8266MOD to connect to the USIfAC? If so, has anyone any pointers/advice on what I should or not be doing.
One last question: I have a XGecu TL866 II programmer, and was hoping to flash the USIfAC to the latest firmware but not sure if it is working as it has all chips listed for PIC programming and the only one that is not listed is the PIC18F47Q10. I tried one that was the closest but say's out of range for programming. I have an STM32, Bus-Pirate and the XGecu device, is it possible to program the chip with any of these as I do not have the programmer mentioned in the docs.Any help/thoughts etc.. much appreciated.
If Vin pin on the esp board is for 5v input (which most probable is) then is suppose this is how you need to connect it to USIfAC II:
[attach=1]
Hello
I did a launcher for UsifacII.
You can test the project in https://github.com/gallegux/menusi (https://github.com/gallegux/menusi)
Hello
How can I do |cdr with ASM code?
Thanks
This is the code for |CDR:
rootdir:
call check_usb_en
ret z
ld bc,&fbd0
call usb_cmd3
ld a,&2f
out (c),a
ld a,"/"
out (c),a
call usb_cmd2
ld a,&32
call usb_cmd4
cp &41
jp nz,error_ucd
inc c
ld a,53 ;set pic's path buffer to 0
out (c),a
ret
You can see the code for all subroutines used, at the end of the USIfAC II Rom code:
https://www.dropbox.com/s/43dkg5ibcbhn0zu/18f47q10_6_code.asm?dl=0
Great. I see there are some binaries. Are you considering to distribute asm and java source code? Opening code will allow other people to collaborate, learn, and improve the project.
Quote from: Fran123 on 11:39, 26 January 22Hello
I did a launcher for UsifacII.
You can test the project in https://github.com/gallegux/menusi (https://github.com/gallegux/menusi)
A minor update (6a)
- Minor overall code optimization (it should offer ~0.5%-1% speed... ::) )
- Changed file loading code in order to follow Amstrad's file name search order: first tries name as it is, then tries with .BAS extension, final with .BIN extension (previous version tried only with .BIN extension)
So now you can load any bas file without needing to add '.bas' extension. Also some of the loading problems with some games discussed earlier, should be now fixed, without needing to "patch" bas loader programs anymore ;)
@issalig (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4140), all code is available at the "inner workings" folder here: https://www.dropbox.com/sh/ua4vgf6qjjmqlnq/AACT6kqTr-sst-iqDeBnE9gRa?dl=0
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541), thanks a lot for sharing your knowledge and let others learn from you,
I will check the new version asap. I think USIFAC2 has almost everything I need in a CPC (maybe more memory, but afaik work is/was in progress, isn't it?).
Anyway, this is my wish list for the usifac (which I consider to implement in the near future but I never find the time to do it)
- boot a rom/sna when pressing a button, for example boot the one in the usb unit called autoboot.rom (maybe it could be used swap button or other free pin)
- add a rotary enconder and a screen like in a gotek (not so urgent and not sure about if enough free pins for screen and encoder)
- tutorial about usifac architecture and building instructions (I started a document but it is not still finished)
However, my last post asking for sources was addressed to @Fran123 (https://www.cpcwiki.eu/forum/index.php?action=profile;u=4174)
Hello,
The code will be open when I consider that the project is finished, for now I would like to add a few things.
On the other hand, I think that the code must be of quality to be published, I would not like you to laugh at what I write.
Quote from: issalig on 23:01, 01 February 22
- boot a rom/sna when pressing a button, for example boot the one in the usb unit called autoboot.rom (maybe it could be used swap button or other free pin)
This will hopefully done with the 512k RAM/ROM board i'm developing (http://www.cpcwiki.eu/forum/games/usifac-ii-direct-load-games/msg211851/#msg211851).You will be able to load a boot low rom and maybe cpr files too.
Quote from: issalig on 23:01, 01 February 22
- add a rotary enconder and a screen like in a gotek (not so urgent and not sure about if enough free pins for screen and encoder)
I don't find a reason for doing that. Gotek drive needs a screen,rotary encoder etc, because there is no way to control it through amstrad directly! With boards like USIfAC II or M4 ,you have dozens of rsx Basic commands to do whatever you want and get the results directly on Amstrad's screen! ;)
Quote from: issalig on 23:01, 01 February 22
- tutorial about usifac architecture and building instructions (I started a document but it is not still finished)
Inside "inner workings" folder there is also a schematic of the USIfAC II board. Circuit is rather plain and "straight forward" i would say, apart from a few buttons/switches there is only connections between PIC microcontroller and Amstrad's expansion port.
Ok, nice, no need to hurry up.But do not be ashamed of showing your code, we all code dirty and we like it. :)
Quote from: Fran123 on 09:46, 02 February 22
Hello,
The code will be open when I consider that the project is finished, for now I would like to add a few things.
On the other hand, I think that the code must be of quality to be published, I would not like you to laugh at what I write.
Hello
I have a problem with my UsifacII. I disconnected it from cpc to plug it on other cpc, and now, none shows the Usifac II Enganged message at boot up, however, pause and reset buttons work.
What is happening?
Thank you.
Quote from: Fran123 on 21:27, 03 February 22none shows the Usifac II Enganged message at boot up
This happened to me too several times. Seems Usifac easily "forgets" its ROM number and you have to assign a new one. Try "out &FBD2,5" on basic prompt, and then reset.
If that doesn't help, you might need to reprogram it (happened once to me).
Quote from: ikonsgr on 19:09, 13 January 22Anyway, with my CPC 464 everything works ok with rev6 firmware,never had such boot problems, so i suppose the problem doesn't have to do with firmware bug.
I tried back and forth.
PSU: no change
different firmware: no change
no finally cleaned the edge connector with a fibre pencil: no change
The behaviour stays perfectly the same: first boot, Usifac is not recognized. Then I reset and it is recognized. Everything works perfectly until I reset again, then the computer hangs during startup.
Am I the only one who experiences this?
The problem is only on an early 464 model. On a 6128 it works perfectly fine.
Quote from: eto on 22:43, 03 February 22
This happened to me too several times. Seems Usifac easily "forgets" its ROM number and you have to assign a new one. Try "out &FBD2,5" on basic prompt, and then reset.
If that doesn't help, you might need to reprogram it (happened once to me).
I have the first version that came out of Usifac II connected to a CPC 464 and indeed, after a few hours of testing commands, when I bought it a long time ago, suddenly it no longer showed the message of usifac II ROM loaded, I had to buy the programmer to re-record the firmware, it happened to another colleague as well, and I see that it continues to happen.
maybe a chip bug?
Quote from: eto on 23:40, 03 February 22
I tried back and forth.
PSU: no change
different firmware: no change
no finally cleaned the edge connector with a fibre pencil: no change
The behaviour stays perfectly the same: first boot, Usifac is not recognized. Then I reset and it is recognized. Everything works perfectly until I reset again, then the computer hangs during startup.
Am I the only one who experiences this?
The problem is only on an early 464 model. On a 6128 it works perfectly fine.
I've not had any issues with my OG v1 board tallkey on usifac2 r6 fw - Had a few hiccups due to poor connection but that's usually a case of reseat the card and all's good again.
Reset and pause keys are wired directly into the edge connector - they're likely to always work.
Quote from: Devlin on 11:48, 04 February 22Reset and pause keys are wired directly into the edge connector - they're likely to always work.
Sorry, I was not clear here. reset and pause work of course.
I meant, that after I switch on the 464, the Usifac is not recognised at all. But if I press reset the first time, it then IS recognised properly. Everything works as expected, I can run games etc. After I reset again, the 464 tries to boot but then halts on the boot screen before BASIC 1.0 would usually appear. Any further reset halts at exactly the same point and I have to turn off/on the 464.
Is there a way to order one? This looks really great!
UPDATING FIRMWARE
I have to try install the firmware because my UsifacII has lost it (why? how? I don't know). And now I have some doubts:
1- In what order should dupont cables be connected? I got the UsifacII in last June and it's different from the board in the guide (https://www.dropbox.com/s/pymv4sbxch3psin/Updating%20the%20Firmware%20of%20USIfAC%20II%20via%20ICSP%20v1.pdf?dl=0 (https://www.dropbox.com/s/pymv4sbxch3psin/Updating%20the%20Firmware%20of%20USIfAC%20II%20via%20ICSP%20v1.pdf?dl=0))
2- Where should I set the voltage? I can change VDD Nom, VPP and VDD App, but the guide only says "set the voltage to 3.5V"
3- Also it says tick "power target circuit from pickit3" but the MPLAP IPE I downloaded (v6.00) says "power target circuit from PM". Are they the same?
4- What "programming mode entry" should I choose?
The options are: "use high voltage programming entry mode" and "use low voltage programming entry mode"
Thank you
(https://i.ibb.co/W5CPZJh/Captura.png)
(https://www.cpcwiki.eu/forum/data:image/png;base64,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bkPzyPdwrb2+ej+0tw/ZMO238OvtzBtuWZORRumYXzPcMDTFpIiIiNjoYVdxmeuz1siFG8bch2O49bfTeM+6KuZhXp83TOdeREREHChHXlxmfbBC2tmwubz22lyHVTrvIiIi0pBSa3q41lxfBfIiIiIi7kOpNeIyBfIiIiIi7kOpNeKyuro6+vbt29ndEBERERE0Ii8uOnv2LGfPnu3sboiIiIiIhQJ5cUn//v0ZPHhwZ3dDRERERCw8WiqgtJruTddXREREpGvqESPyv336aVJTU6mtrW2yjPdVV/HSSy8RFBQEQHFxMXf96lf86+TJJvfx9PRkxp138tBDD7V1l0VEREREmtUjHnZNTU3l+qFDCY+IaLLM888/z9tvv82sWbMAyMrK4l8nTzJ37twm99lfWMifUlN58MEH27zPIiIiIiLN6RHzyNfW1hIeEcHc++9vsszzzz/PebsR+9q6OoBm9wH44MMP26aTnaQ7XF8RERGRnqjFHHkREREREXE/CuRFRERERLogl1JrukP6hSvHYV+m4d9NlW+pjLvryn0XERER6ck0Ii8iIiIi0gUpkBcRERER6YL0hVA9nK6viIiISNfUI74QytvbmxdeeIEXXnih2XL+fn62n328vQH42eDBze7jZ7ePiIiIiEhH6RFfCPXHP/yBrKwsh3niG/L18WHChAm2Y500aRIAx0+caHKfXp6e/Pd//3eXPz8iIiIi0vX0iBH5wMBA7rvvvlbtYzKZmDx5cjv1SERERETk4uhhVxERERGRLsileeS7upKSEt555x1q6+qaLON91VVMnjwZk8kEQF1dHTt37uTkqVNN7uPp4cFNN91EYGBgm/e5o3SH6ysiIiLSE/WIHPl777uPkydPtljOZDLZcuN37tzJ8scea3GfjMxMst5++6L7KCIiIiLSGj0iR/7kyZPMmTOH++fMabLMkGuvper4cdvyCUvgf/hvf2tynxc2bmTjxo1t11ERERERERdpHvkeTtdXREREpGvSw64iIiIiIl2QAnkRERERkS7IpVlrukv6hSvH0bDMhezTlXTlvouIiIj0ZD3iYVfpOgzD4NSpU3z++efUNTNdqIiIiEhn8/Dw4Morr2TgwIG2Kcw7kgJ5cSunTp2itraWa6+9lksuuaSzuyMiIiLSpO+++46ysjJOnTrFVVdd1eHt94hA3tPTkw/2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xfMb782UiIiIiESbEyPyH/7wh7n88st57bXXKC4uDs//7W9/y7/927/x4osvsmDBAq655ho+9KEPAfC+972PV199lb179/LKK6/E1NK/9tprXH755Xz4wx+e1X0REREREYE5ksjPmzePf/qnf2LTpk08++yzPPfcc3zrW9/ic5/7HBUVFXz7298OJ+S//e1vAVixYgUAb731Flu3buV///d/+fSnP83XvvY1li1bxn333cdjjz2mem4RERERSYrsqRr4/f6MmK6//nruuusuFi9ezKuvvkpHRwePPPIId9xxB1//+tfD7UZHRxkdHQ2//vrXv84dd9zBI488QkdHB6+++iqLFy/mrrvu4vrrr0/6fs3EJCIiIiLpZ8pEPpNUV1dz33338Zvf/Ib3vve9ANxyyy2Mjo6yZ8+emPZ79uxhdHSUW265BYD3vve9/OY3v+G+++6jurp6VmMXEREREYk05+pCVq1axdDQEJ/73Of41re+xQ033EBzczNLliyhpKQkfKPliRMnaGtr46WXXmJoaIjXXnuNr33ta6xZs4ZVq1YleS9ERC7cH/7wB06dOsW5c+fOu49LLrmEa665hiuvvHIGIxMRkUTMuUQe4Etf+hKf+tSn+I//+A/OnDnDZz7zGb7yla/wzW9+kw984AMAdHR08JWvfIV///d/5xe/+AWXXXYZO3fu5IYbbkhy9CIiM+PUqVMUFxdHfVnedL3zzju88sorSuRFRJIgocdPZmId9fXXX8+OHTt466238Hg8eDwe/vCHP/CrX/0KgKuvvpqXX36ZRYsW8S//8i98+MMfZt68eRl3LDJtf0QkcefOneNv/uZvePfddxkZGZnWur/85S+57rrreP/7339BI/oiInL+5uSIfMi8efPIzc3l9ttv5/bbb092OCIis87v94e/0TpRXV1dHDp0iE996lMaDBARSaI5nciLiMx1oSd1Jcrr9dLa2srtt9/OyMjItNYVEZGZldDjJyVzZdb59eKqtWK1xk61Lm+yg4vhddVibfCk4fY9NFitXJTQPQ1YrQ14ALwuakM/T9g8dI5rme1T7HXVxr3WrLUuwqF4GiaPLc7yqH4j+7pIpvOo2r/85S9897vf5dJLL8VisWRs6aWISLrQiLxkHFujm3pL5BwPDVY7tbTSVG1MVlgZxEK9232Ruq4n8a49dLabcbQ2kbTT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)
PM the author @ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Quote from: joruib on 14:36, 04 February 22Is there a way to order one? This looks really great!
I have version MPLAB IPE 5.45 and it seems it is a little bit different (look at the attached image.
Power target circuit is checked.
Voltage level is 3.75V
Programming method is Apply Vdd before Vpp
Also in the Power Settings I have these values.
Hope that helps.
Quote from: Fran123 on 18:23, 05 February 22UPDATING FIRMWARE
I have to try install the firmware because my UsifacII has lost it (why? how? I don't know). And now I have some doubts:
1- In what order should dupont cables be connected? I got the UsifacII in last June and it's different from the board in the guide (https://www.dropbox.com/s/pymv4sbxch3psin/Updating%20the%20Firmware%20of%20USIfAC%20II%20via%20ICSP%20v1.pdf?dl=0 (https://www.dropbox.com/s/pymv4sbxch3psin/Updating%20the%20Firmware%20of%20USIfAC%20II%20via%20ICSP%20v1.pdf?dl=0))
2- Where should I set the voltage? I can change VDD Nom, VPP and VDD App, but the guide only says "set the voltage to 3.5V"
3- Also it says tick "power target circuit from pickit3" but the MPLAP IPE I downloaded (v6.00) says "power target circuit from PM". Are they the same?
4- What "programming mode entry" should I choose?
The options are: "use high voltage programming entry mode" and "use low voltage programming entry mode"
Thank you
(https://i.ibb.co/W5CPZJh/Captura.png)
(https://www.cpcwiki.eu/forum/data:image/png;base64,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bkPzyPdwrb2+ej+0tw/ZMO238OvtzBtuWZORRumYXzPcMDTFpIiIiNjoYVdxmeuz1siFG8bch2O49bfTeM+6KuZhXp83TOdeREREHChHXlxmfbBC2tmwubz22lyHVTrvIiIi0pBSa3q41lxfBfIiIiIi7kOpNeIyBfIiIiIi7kOpNeKyuro6+vbt29ndEBERERE0Ii8uOnv2LGfPnu3sboiIiIiIhQJ5cUn//v0ZPHhwZ3dDRERERCw8WiqgtJruTddXREREpGvqESPyv336aVJTU6mtrW2yjPdVV/HSSy8RFBQEQHFxMXf96lf86+TJJvfx9PRkxp138tBDD7V1l0VEREREmtUjHnZNTU3l+qFDCY+IaLLM888/z9tvv82sWbMAyMrK4l8nTzJ37twm99lfWMifUlN58MEH27zPIiIiIiLN6RHzyNfW1hIeEcHc++9vsszzzz/PebsR+9q6OoBm9wH44MMP26aTnaQ7XF8RERGRnqjFHHkREREREXE/CuRFRERERLogl1JrukP6hSvHYV+m4d9NlW+pjLvryn0XERER6ck0Ii8iIiIi0gUpkBcRERER6YL0hVA9nK6viIiISNfUI74QytvbmxdeeIEXXnih2XL+fn62n328vQH42eDBze7jZ7ePiIiIiEhH6RFfCPXHP/yBrKwsh3niG/L18WHChAm2Y500aRIAx0+caHKfXp6e/Pd//3eXPz8iIiIi0vX0iBH5wMBA7rvvvlbtYzKZmDx5cjv1SERERETk4uhhVxERERGRLsileeS7upKSEt555x1q6+qaLON91VVMnjwZk8kEQF1dHTt37uTkqVNN7uPp4cFNN91EYGBgm/e5o3SH6ysiIiLSE/WIHPl777uPkydPtljOZDLZcuN37tzJ8scea3GfjMxMst5++6L7KCIiIiLSGj0iR/7kyZPMmTOH++fMabLMkGuvper4cdvyCUvgf/hvf2tynxc2bmTjxo1t11ERERERERdpHvkeTtdXREREpGvSw64iIiIiIl2QAnkRERERkS7IpVlrukv6hSvH0bDMhezTlXTlvouIiIj0ZD3iYVfpOgzD4NSpU3z++efUNTNdqIiIiEhn8/Dw4Morr2TgwIG2Kcw7kgJ5cSunTp2itraWa6+9lksuuaSzuyMiIiLSpO+++46ysjJOnTrFVVdd1eHt94hA3tPTkw/2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xfMb782UiIiIiESbEyPyH/7wh7n88st57bXXKC4uDs//7W9/y7/927/x4osvsmDBAq655ho+9KEPAfC+972PV199lb179/LKK6/E1NK/9tprXH755Xz4wx+e1X0REREREYE5ksjPmzePf/qnf2LTpk08++yzPPfcc3zrW9/ic5/7HBUVFXz7298OJ+S//e1vAVixYgUAb731Flu3buV///d/+fSnP83XvvY1li1bxn333cdjjz2mem4RERERSYrsqRr4/f6MmK6//nruuusuFi9ezKuvvkpHRwePPPIId9xxB1//+tfD7UZHRxkdHQ2//vrXv84dd9zBI488QkdHB6+++iqLFy/mrrvu4vrrr0/6fs3EJCIiIiLpZ8pEPpNUV1dz33338Zvf/Ib3vve9ANxyyy2Mjo6yZ8+emPZ79uxhdHSUW265BYD3vve9/OY3v+G+++6jurp6VmMXEREREYk05+pCVq1axdDQEJ/73Of41re+xQ033EBzczNLliyhpKQkfKPliRMnaGtr46WXXmJoaIjXXnuNr33ta6xZs4ZVq1YleS9ERC7cH/7wB06dOsW5c+fOu49LLrmEa665hiuvvHIGIxMRkUTMuUQe4Etf+hKf+tSn+I//+A/OnDnDZz7zGb7yla/wzW9+kw984AMAdHR08JWvfIV///d/5xe/+AWXXXYZO3fu5IYbbkhy9CIiM+PUqVMUFxdHfVnedL3zzju88sorSuRFRJIgocdPZmId9fXXX8+OHTt466238Hg8eDwe/vCHP/CrX/0KgKuvvpqXX36ZRYsW8S//8i98+MMfZt68eRl3LDJtf0QkcefOneNv/uZvePfddxkZGZnWur/85S+57rrreP/7339BI/oiInL+5uSIfMi8efPIzc3l9ttv5/bbb092OCIis87v94e/0TpRXV1dHDp0iE996lMaDBARSaI5nciLiMx1oSd1Jcrr9dLa2srtt9/OyMjItNYVEZGZldDjJyVzZdb59eKqtWK1xk61Lm+yg4vhddVibfCk4fY9NFitXJTQPQ1YrQ14ALwuakM/T9g8dI5rme1T7HXVxr3WrLUuwqF4GiaPLc7yqH4j+7pIpvOo2r/85S9897vf5dJLL8VisWRs6aWISLrQiLxkHFujm3pL5BwPDVY7tbTSVG1MVlgZxEK9232Ruq4n8a49dLabcbQ2kbTT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)
And what connection? A or B?
A)
(https://i.ibb.co/g7CTJzD/cruzado.png)
B)
(https://i.ibb.co/dGqp7Dz/paralelo.png)
Thank you
Quote from: Fran123 on 11:10, 06 February 22
And what connection? A or B?
(snip for brevity)
It's definitely B - The arrow on the Pickit (indicating pin 1 of the ICSP connector) should meet the *top* of the usifac2 as viewed from above
I think the problem with the firmware loss has to do with the fact that i'm using the MCLR (master clear pin) of PIC, in order to hardware reset PIC when you press the reset button.
Although this souldn't happen in theory (there are other safe guards to prevent this), it seems that it can happened under certain conditions.
Now, PIC offer various protections for flash eeprom (like code protection and write protection too) which i believe will solve this problem. Unfortunately if i enable these protections, the firmware produced, can't be flashed using older PICKIT 3 programmer. So, for some time, i used "Unprotected" hex files to flash PIC's ,but with rev6 and then, i surely used "protected" firmwares for the boards and unprotected for the the distributed hex file (for anyone with pickit3 programmer to be able to flash it).
So, after late november, all boards sent (~25-30 so far) shouldn't have this problem.
Quote from: ikonsgr on 13:24, 06 February 22So, after late november, all boards sent (~25-30 so far) shouldn't have this problem.
Can we apply this change on our older Usifacs too?
Little improvements:
- print the firmware version at booting
- columns in CAT instead of a single list with pauses
I think it is very easy, just print the file name and count the chars, later print 8-chars whitespaces, print a point and the same with extension, later print 8 whitespaces.
Quote from: eto on 14:40, 06 February 22
Can we apply this change on our older Usifacs too?
The protections can only applied using pic kit4 programmer. If you want i can upload the "protected" version of hex file to try it.
Quote from: Fran123 on 20:28, 07 February 22
Little improvements:
- print the firmware version at booting
Done :) :
[attach=1,msg212196]
Quote from: Fran123 on 20:28, 07 February 22
- columns in CAT instead of a single list with pauses
I think it is very easy, just print the file name and count the chars, later print 8-chars whitespaces, print a point and the same with extension, later print 8 whitespaces.
Actually you can only have 2 columns (as display is usually in mode 1). I remember i had a few trials in the past (using 2 columns for cat), but the result was a bit messy and made the identification and selection of file/dir a bit difficult. Maybe i'll take a look when i have time (currently i'm working "full time" for the ram/rom board :) ) .
In anycase,i think that the ability to use filtering in catalogues (|CAT,"xxx") adequately replaces the lack of "multi column" display :)
Quote from: joruib on 14:36, 04 February 22
Is there a way to order one? This looks really great!
Please contact at: ikonsgr745@hotmail.com
Quote from: ikonsgr on 21:05, 07 February 22The protections can only applied using pic kit4 programmer. If you want i can upload the "protected" version of hex file to try it.
I only have a Pickit3 :-(
Ok,i made some new tests with PICKIT3 programmer and found out that you can program a "protected" hex file (i had to set voltage level to 3.75v in order to work though)
I just upload a new Hex file (https://www.dropbox.com/s/9sznc8x39k39kyw/18f47q10_6a_pic4.zip?dl=0) that has the code write protection enabled. If anyone else has PICKIT3, you can try to flash this file, and let us know if it works ok. Hopefully this will stop the ubrupt damage/erase of PIC's flash mem.
p.s. this firmware also shows rev number on boot msg ;)
Quote from: ikonsgr on 11:37, 08 February 22If anyone else has PICKIT3, you can try to flash this file, and let us know if it works ok.
I could successfully write both my USIFACs. Thanks a lot!
Now I'm just left with the 464 whcih won't boot with it. I just recognized something when I tried it:
After I turn it on, I see the full boot message incl. the USIFAC message. Then it resets and during the automatic reboot it hangs before the USIFAC message appears.
And as usual, everthing is fine (incl. reset) until I type |USB. Once I reset then, the system hangs just before the USIFAC message.
(Also if I enable USB and then disable it again - both with |USB- reset will work properly. )
I tried it with both USIFAC I own. So something must be special about this specific CPC model that is in conflict with the USIFAC boot sequence.
I remember that the earlier firmwares did not reboot. Would it make sense to try the old one and see if it happens there too? Where can I find an old firmware, I didn't see it in the first post.
Quote from: eto on 20:19, 08 February 22
I could successfully write both my USIFACs. Thanks a lot!
Now I'm just left with the 464 whcih won't boot with it. I just recognized something when I tried it:
After I turn it on, I see the full boot message incl. the USIFAC message. Then it resets and during the automatic reboot it hangs before the USIFAC message appears.
And as usual, everthing is fine (incl. reset) until I type |USB. Once I reset then, the system hangs just before the USIFAC message.
(Also if I enable USB and then disable it again - both with |USB- reset will work properly. )
I tried it with both USIFAC I own. So something must be special about this specific CPC model that is in conflict with the USIFAC boot sequence.
I remember that the earlier firmwares did not reboot. Would it make sense to try the old one and see if it happens there too? Where can I find an old firmware, I didn't see it in the first post.
Which model of 464 do you have?
https://www.cpcwiki.eu/index.php/Mainboard_Versions
Mine is a version 1 board, for example.
Quote from: Devlin on 21:39, 08 February 22Mine is a version 1 board, for example.
seems mine is v1 too
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
I am able to Flash the PIC with PiCKIT 3 using 3.75 Volts.
On power I get the double restart and (6a)
I normally check the chip has programmed by using a seperate VERIFY pass
Tha Verify does NOT pass but the chip appears to be OK
Thanks
Keep Safe. Ray
Quote from: OffseT on 10:45, 08 November 21
Chany already asked me about such a support months ago, but according to the USIfAC documentation it didn't seem to be possible.
Anyway, both UniDOS nodes and USIfAC documentations are available, so feel free!
(and BTW, I cannot develop DOS node for all existing weird hardwares I do not even own)
I would love to see UniDOS support for USIfAC II - what is the most difficult part of implementing a FS over the serial port? [ I can only image that some DOS calls if not implemented right (i.e. cashed in the client) could be very slow - but this serial port seems very fast ]
@Audronic (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1169) You can't verify the code because firmware created with "code protection" flag enabled, thus chip can't be read after flashing it.
@eto (https://www.cpcwiki.eu/forum/index.php?action=profile;u=3625), there are some older firmware available but i don't remember if the 464 reboot process was included or not. In any case, i don't think that the auto boot is causing the problem, there must be some other thing that causes this abnormal behavior. One usual suspect is bad connection, usually at the edge connector, so make sure contacts are clean of dirt/oxidation etc.
Anyway, unfortunately 35+ years old electronics can give you a lot of headaches that sometimes is almost impossible to treat... but then again, is there a cure for aging? ::)
Yet,another UPDATE: (Rev.6b)
- Major speed improvement in access of ASCII files, effectively doubles reading speeds and ~50% faster writes.
- Bug fix: Unable to Load/Save file right after deleting files from usb flash drive (gave a "file not found" msg, and needed to load/save file again)
- Firmware revision is now shown in boot message
- Some minor optimizations in code.
New firmware is avaialble at the usual place as awlays: https://www.dropbox.com/sh/p9eo65nzyq59u8c/AABt_lRn2b2XEJYH-gh7Xb4Ua?dl=0
Now, i don't know if you ever tied to work with ASCII files, but access speeds were rather slow ~200bytes/sec for write, and ~300bytes/sec for read. The main reason for that, is that ASCII files are using CAS_IN_CHAR and CAS_OUT_CHAR Amstrad firmware routines, which read/write only one byte at a time, instead of loading/writing the entire file at once (CAS_DIRECT routines), which is the case for normal Basic and Binary files. Ofcourse this has major impact in access speeds, and even using a disk drive, read/write of a basic file in ASCII form is rather slow too. So, as i'm currently waiting for the new(and hopefully last...) prototype board, of the long awaited 512k RAM/ROM board,i've decided to review the USIFAC routine codes for CAS_IN_CHAR and CAS_OUT_CHAR and i mange to improve speed to ~300bytes/sec for write and ~600bytes/sec for read. And in the process i discover the bug noted above and fix it too.
will be the usifac II placed on the 2-row socket?
(https://www.cpcwiki.eu/forum/index.php?action=dlattach;topic=17425.0;attach=35086)
Updated!
Quote from: ikonsgr on 18:22, 10 February 22will be the usifac II placed on the 2-row socket?
Quote from: Fran123 on 21:06, 10 February 22
will be the usifac II placed on the 2-row socket?
Yes, the dual row 50pin socket can be used by any board using pin connectors (final board will be a bit different with extra components, but roughly at same size):
[attach=1,msg212334]
This means that anyone already having USIfAC II with edge/centronics connector cable, can simply unplug it from USIfAC ,plug it to the RAM/ROM board and then plug USIfAC II on 50pin socket, e.g. no need for having extra EDGE/CENTRONICS connector cable! ;)
There is also an edge connector at top of the board, where you could also connect USIFAC II or any board with edge connector. So practically RAM/ROM board will also act as "mini" M4 expansion board, that will offer 1X50pin socket + 1X50pin edge connector! ;)
the worst, it's seems a big board for only two chips (I don't know if components are missing)
Quote from: Fran123 on 21:29, 10 February 22
the worst, it's seems a big board for only two chips (I don't know if components are missing)
Indeed, final board will have extra components (including a 16pin hex buffer chip), BUT the main problem for having a seeminlgy large size of board, is the fact that
there are too many connections to be routed which must be placed on top & bottom layer of the board! In theory i could make the board using multiple layers, but this would skyrocket the cost of the board (5-10times more than having top/bottom layers) even if it will be smaller. In anycase, board size will be ~120mmX75mm, which i dont think can cause any "placement" problems at the back of your Amstrad, dont you think? :)
I do!
It was an opinion with knowing all details.
Are you routing it manually or with an auto router?
Quote from: ikonsgr on 21:41, 10 February 22there are too many connections to be routed which must be placed on top & bottom layer of the board!
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Hi John
A Small concern ?
Using a CPC464 and USiFAC II I wish to load a Basic Program from the USB stick
and SAVE it to TAPE.
I am able to load the Basic Program to Memory.
I have tried most things but am unable to save the Basic Program to tape
I am unable to access the tape once I use |USB ?
I have used |USB to turn off the USB but it will not allow me to access the Tape recorder.
I have used Amsdos and Parados as the rom to try to overcome this concern BUT still cannot save to Tape ??
The tape recorder works OK without |USB, Replays/Records ?
Thanks
Keep Safe.
Ray
Quote from: Audronic on 03:28, 11 February 22
@ikonsgr (https://www.cpcwiki.eu/forum/index.php?action=profile;u=541)
Hi John
A Small concern ?
Using a CPC464 and USiFAC II I wish to load a Basic Program from the USB stick
and SAVE it to TAPE.
I am able to load the Basic Program to Memory.
I have tried most things but am unable to save the Basic Program to tape
I am unable to access the tape once I use |USB ?
I have used |USB to turn off the USB but it will not allow me to access the Tape recorder.
I have used Amsdos and Parados as the rom to try to overcome this concern BUT still cannot save to Tape ??
The tape recorder works OK without |USB, Replays/Records ?
Thanks
Keep Safe.
Ray
Once you've used |USB I believe you need to type a |TAPE to make it work again
@Devlin (https://www.cpcwiki.eu/forum/index.php?action=profile;u=389)
Ok Thanks. Grrrrrr I missed that I will give it a try.
No That coms back with "UNKNOWN COMMAND"
Keep Safe.
Ray
Quote from: issalig on 22:35, 10 February 22
Are you routing it manually or with an auto router?
Both. First i use auto routing, and then i manually route any connections that auto router couldn't fit in board. I also reroute other lanes, in order to make board a bit smaller :)
@Audronic (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1169), indeed, on cpc 464, i'm afraid you can't use tape recorder once you enable usb host module. Fortunately CPC 6128 has an |TAPE command (which restores the old 464 tape accesss routines) just give |DIS and then |TAPE commands and you will be able to use tape.
[quote
@Audronic (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1169), indeed, on cpc 464, i'm afraid you can't use tape recorder once you enable usb host module. Fortunately CPC 6128 has an |TAPE command (which restores the old 464 tape accesss routines) just give |DIS and then |TAPE commands and you will be able to use tape.
Hi John
Ok Thanks I thought I missed some command.
Keep Safe. Ray
Quote from: Audronic on 12:32, 11 February 22
[quote
@Audronic (https://www.cpcwiki.eu/forum/index.php?action=profile;u=1169), indeed, on cpc 464, i'm afraid you can't use tape recorder once you enable usb host module. Fortunately CPC 6128 has an |TAPE command (which restores the old 464 tape accesss routines) just give |DIS and then |TAPE commands and you will be able to use tape.
Hi John
Ok Thanks I thought I missed some command.
Keep Safe. Ray
Hi,
I guess its the same the other way around, I would like to load some Amsword texts from tape and save them to USB, won't work either, right?
When the RAM/ROM board becomes available will it be possible to put the CPC 6128 system in the ROM and make a CPC 6128 from the CPC 464 (functionwise)?
Sorry, I wanted to send a picture but I don't know how to do it properly, could somebody explain it to me?
greetings
Wolfgang
Quote from: wolfgang on 12:31, 12 February 22
I guess its the same the other way around, I would like to load some Amsword texts from tape and save them to USB, won't work either, right?
Actually i think this will work.Boot your CPC 464, load what you want from tape, and then give |USB. After this, you will be able to save your program to the usb flash drive ;)
Quote from: wolfgang on 12:31, 12 February 22
When the RAM/ROM board becomes available will it be possible to put the CPC 6128 system in the ROM and make a CPC 6128 from the CPC 464 (functionwise)?
Unfortunately neither 6128 firmware nor BASIC 1.1 seem to work on a CPC 464 (i've tried both, but 464 hanged or keep rebooting).
BUT, what WILL work is, load Amsdos on 512k sram, and by activating the Rom board mode,
have a CPC464 with a real Amsdos Rom installed! This means that you could access all dsk images without Amsdos emulation (with |464 command) but directly, using |FDC command, just like with 6128 (=much faster access to images compared to Amsdos emulation)!
Still, the MAIN usage of the board, will be to have exta 512K Ram (yes i finally make it work on CPC 464 too ::) ), meaning that
many 128k games, will run on CPC 464! :D
Quote from: ikonsgr on 18:49, 12 February 22Unfortunately neither 6128 firmware nor BASIC 1.1 seem to work on a CPC 464 (i've tried both, but 464 hanged or keep rebooting).
You need both at same time. Firmware needs to be in a Lowerrom position.
I have @Dukes M4 on my 464, with 6128 firmware in slot 31 set as lower ROM and BASIC 1.1 in slot 0. It works perfectly, with the 464 thinking it's a 6128.
Quote from: Animalgril987 on 00:50, 13 February 22
You need both at same time. Firmware needs to be in a Lowerrom position.
I have @Dukes M4 on my 464, with 6128 firmware in slot 31 set as lower ROM and BASIC 1.1 in slot 0. It works perfectly, with the 464 thinking it's a 6128.
Hopefully i'll verify this with my last board design of RAM/ROM board :) . And i suppose CPC 464 truns more to CPC 664 as it still has 64k ram, right?
Of course the main advantage of having 6128 firmware + Basic 1.1 on a cpc 464, is to get rid of the tiresome way of giving arguments to Basic commands (a$="arg": |Command,@a$ instead of directly give: |Command,"arg").
BUT,i think that even more useful on a CPC 464 ,would be to have Amsods Rom AND extra RAM at the same time!
This would give you the ability to load most of 128k games AND access dsk images at "Full speed" (using |FDC like with 6128) without amsdos emulation (using |464)
Of course this would require to have Rom selection + Setting Ram Configuration Logic activated at the same time, which seems quite difficult thing to do, but i think that with some "tricks" it might be possible... ::)
Quote from: ikonsgr on 18:49, 12 February 22
Actually i think this will work.Boot your CPC 464, load what you want from tape, and then give |USB. After this, you will be able to save your program to the usb flash drive ;)
`
Yes that would work with programs which can be just loaded (without running immediately).Actually I wanted to load a textfile written in Amsword (cassette version) and save it then to USB. Probably impossible as the Amsword cassette version will not work with disks and vice versa.
Unfortunately neither 6128 firmware nor BASIC 1.1 seem to work on a CPC 464 (i've tried both, but 464 hanged or keep rebooting).
BUT, what WILL work is, load Amsdos on 512k sram, and by activating the Rom board mode,
have a CPC464 with a real Amsdos Rom installed! This means that you could access all dsk images without Amsdos emulation (with |464 command) but directly, using |FDC command, just like with 6128 (=much faster access to images compared to Amsdos emulation)!
Still, the MAIN usage of the board, will be to have exta 512K Ram (yes i finally make it work on CPC 464 too ::) ), meaning that
many 128k games, will run on CPC 464! :D
`
I see, just wanted to know what a 6128 would look like and feel ;) Anyway more RAM and an AMSDOS ROM will be perfect, looking forward to it.
have you tried to repla