Gemini 80-Bus System
I recently purchased a Gemini system and I was wondering if there is anyone out there who has an interest in these machines
The unit came with much documentation and no software or keyboard. However, I successfully knocked up a PS/2 to parallel ASCII keyboard adapter using an Arduino Micro and have been able to create a cassette archive of the CP/M version of MBasic (MBASIC.COM). This runs directly on the RP/M monitor in the machine. However, I am hoping to boot to CP/M from a floppy (or GoTek). After contacting a member of this forum I have kindly been given some raw disk images to work as well as a pointer to the Xbeaver 80-Bus emulator. There were a couple of interesting details regarding the machine I have. The first is that it includes RP/M version 2.2. This is odd as version 2.2 of RP/M was (supposedly) never released, the version numbers leapt from V2.1 to V2.3 to avoid confusion with version 2.2 of CP/M, this was confirmed in an article written for 80-bus news by RP/Ms creator Richard Beal (80-BUS vol. 3 iss. 6 p. 9). The second interesting thing is that there is also an EPROM containing the Gemini Boot ROM for 8 inch Disks. This appears to be written by Roger Brooks, and, based on the included source code listings and manuscript amendments, this would appear be the machine he created it on. |
Re: Gemini 80-Bus System
I'm not sure I'd call it an 'interest' as I've not done anything with it for a couple of years, but I have one of these machines.
Mine has 3 boards in the cardcage -- CPU, Video, and hard/floppy disk controller. There's a single 5.25" floppy drive and a (electrically) small hard disk. I do have the original keyboard and what I was told was the video monitor normally used with this machine, a Hantarex unit. Mine has some kind of network interface too. It connects to the parallel port on the CPU board. The numbers had been scratched off the ICs which meant it took me a couple of minutes to identify them. The main IC was a dumb UART (amazingly) Alas no software. The hard disk contains the OS (enough to boot the machine anyway) but nothing else. |
Re: Gemini 80-Bus System
Tony:-
I am guessing that you machine consists of a GM813 CPU Card, a GM832 video card and either a GM849/GM849A disk controller. You may either have a SCSI disk, or an MFM disk via a zebec controller. Do you have details of the UART that was on the network card? or network boot roms/software? |
Re: Gemini 80-Bus System
I also have several Gemini boards on an 80-BUS backplane with a NASCOM 2 micro board.
Somewhere there is a floppy disk controller and a couple of Pertec drives. I have lots of manuals if you need anything in particular just shout… |
Re: Gemini 80-Bus System
Thanks Richard, I'll take the disk drive :).
The machine I have consists of the G811, MAP80, G812, and G829. What I would love to do is boot the machine to CP/M from a floppy. John sent me some disk images, so I thought I would start with a Gotek and FlashFloppy and see where that would take me. I have been able to load MBasic and ZSID from tape and these run fine under the RP/M monitor. |
Re: Gemini 80-Bus System
How are you creating the tapes?
|
Re: Gemini 80-Bus System
Quote:
The network UART is one of the AY-5-1013 / 6402 'dumb' things. It's on a little board with a baud rate generator and RS485 drivers. There's a little about it here : https://nascom.wordpress.com/gemini/.../g836-network/ I did manage to work out the circuit diagram, I will try to find it. I don't think I have a network boot ROM. I think the machine booted from the hard disk (and that it was probably the file server). |
Re: Gemini 80-Bus System
John, I have detailed the process of creating the tapes here, https://glasstty.com/wiki/index.php/...ni_80-Bus_Saga
It basically involves creating a simply hex file from the binary, pasting this into a serial terminal, setting the length in RP/M and saving to tape. |
Re: Gemini 80-Bus System
Here is something to look forward to:-
Within the xbeaver emulator there is a program called t-net.com. When you have xbeaver installed and running copy t-net.com from a: to drive n: by default drive n: is a network drive connected to a linux directory (see xbeaver.cfg for details). copy t-net.com onto your hardware (first copy to drive n:, then use genhex t-net.com 100 and then use minicom or similar to move the file to the cpm system pip t-net.hex=rdr: finally on the cpm system convert to a binary and run it load t-net start the server on the linux box and connect the serial cable between the two on linux type xbeaver fileserver.cfg and on the cpm system type t-net n the cpm system should be able to access the fileserver directory. Try dir n: (Some versions of cp/m dir only give the first filename) - don't worry for now. pip will then work (Assuming pip.com in the network directory or any other file) eg n:pip a:=n:pip.com etc 9600 baud on a gemini is with a divisor of 13 set. this of course means that faster baud rates are non standard as the pc uses a divisor of 12 for 9600 baud and there is no common factor. It will still give acceptable performance for networking! You can then have a gemini system with filestore/backups on a linux machine. To the best of my knowledge the following formats were used by gemini:- Code:
DISKDEF V1.5 |
Re: Gemini 80-Bus System
Very sorry John - I just checked .DMP format has an 8 byte header for each sector
|
Re: Gemini 80-Bus System
Many thanks, I have been dumping the images with a bit of python and I can see the 8 byte sector header. The geader shows how the sectors are laid out etc.
This is all new to me and I am trying to configure a Gotek to simulate a floppy. The latest FlashFloppy firmware allows for custom track layouts, however, I am not sure how to define 512 byte sectors with 8 bytes of header. Do you think this header would have been on the original disk? or is this some kind of meta data created during imaging? Phut!, as I write this my G812 video card has just failed. Bah! Back to the serial port I guess :( |
Re: Gemini 80-Bus System
No the header is in the original file, not on the disk it is added by the disk read program
I think the sector headers are in the logical order, and so could just be stripped off to give a .raw format Otherwise crate an array of sectors eg 35 by 2 by 10 and read the header, allocate it to the appropriate array index and down the file. If you want you can check the correct order in the headers as you go. PS - what went wrong with your IVC card ??? |
Re: Gemini 80-Bus System
Not sure yet, processor is ok and CRT controller good also, (tested it in a BBC) will have to have a probe around when I get chance.
|
Re: Gemini 80-Bus System
John; Firstly many thanks for the disk definitions, much appreciated.
I am wondering if someone can confirm my understanding of how this all fits together. As far as I understand, the DPB's form part of the customised CP/M (Bios) and provide support for the various types of disk drive that can be connected to the machine under CP/M. This being the case I am assuming that any machine booting up using RP/M or any other monitor has no knowledge of the connected disk type, only that it should get the boot program from the fist sector on the first track. I am also guessing that this program is familiar with the drive type somehow and knows how to load the bios, bdos, ccp etc. or am I way off? I am left with a few questions e.g. * How does the CP/M system know which drive type is connected during the boot process? * How does the CP/M system know which DPB to use, once CP/M is up and running? I am sorry if this is a real newbie question, but I have searched the internet and the odd CP/M books I have here, and am a little confused. |
Re: Gemini 80-Bus System
booting process varies between machines - but most do the following
1. The boot rom initialises the floppy disk controller sets the stepping speed and does a recalibrate to move the head of floppy a: to track 0. Actually for most systems with 80 track drives two recalibrates are required as the disk controller will only step out 77 tracks. 2. Next the boot rom does a read of side 0, track 0 and the first sector (numbered 0 or 1) to some address in ram. 3. The boot rom passes control to this first sector by jumping to an address within the copy of the first sector in ram. This then loads CP/M (at least the BIOS and sometimes the whole CPM image). Control is then passed to the cold boot vector in CP/M 4. The cold boot routine reads any remaining parts of CP/M the were not read by the first sector loader and jumps to the command processor. There are variations - sometimes the first sector reads the entire CP/M image and sometimes the bootrom does. Other variations are even stranger. |
Re: Gemini 80-Bus System
Within the BIOS there is a Disk Parameter Header for each disk drive.
The SELDSK routine within the bios gives the address of the disk parameter header. (DPH) The disk parameter header gives references to several ram areas - one of these is the DPB for the drive. DPBs can be shared between drives, but DPH must be unique per drive. The DPB contains numbers that define the layout of the disk. The diskdef program will calculate these numbers for you from the disk layout. Actually the diskdef program is part of my multi format system which will allow the gemini to read most floppy disk formats. Now you have xbeaver running you should have them. Note to run it type the following killvpmm - this kills the virtual multitasking software and returns to CPM - actually CCPZ/BDOSZ mfb - this installs the multi format system and then use diskdef as required to install different floppy disk formats to drives N, O and P. If you don't want to use the CP/M filesystem you can load mfb within VPM/M ? gives help witin diskdef, but it works like a spreadsheet. |
Re: Gemini 80-Bus System
Hi, it was a long time ago,
but I seem to remember that the boot sector was either NG or GN depending on whether it was a Nascom or Gemini machine. on a related subject, I have an MP/M manual somewhere if anyone would like it ! |
Re: Gemini 80-Bus System
John; Many thanks for the explanation, much appreciated.
Peter; When you say that the boot sector was NG or GN what does NG/GN refer to exactly? |
Re: Gemini 80-Bus System
Just been looking at RPM V2.0 - the boot code does the following
1. Check disk is rotating by looking at the index signal 2. Read the first 128 bytes of disk A:, track 0, sector 0 to address 80h 3. Check that the bytes at 80h (first two of track 0, sector 0) are both 47h 4. If the above check passes then copy the 128 bytes at 80h (First 128 bytes of sector 0) down to location 0. 5. jump to location 2. The code at sector 0, starting at offset 2 is responsible for loading CP/M I hope that helps. PS - If you are thinking of downloading the first sector code from linux, don't use 80h as the location as RPM uses that is its line input buffer. Use 100h instead. to copy the buffer at 100h down to zero and execute - try the following 21 00 01 ld hl,100h 11 00 00 ld de,0h 01 80 00 ld bc,80h ed b0 ldir c3 02 00 jp 2 This code can be run at any address above 180h and is relocatable. it does the copy to 0 and then jumps to zero. Remember the boot sector starts at offset 8 in the .DMP file I sent you. (At location fc42 in my version of the RPM is the xor a which sets for sector 0). I don't know if Getek can handle sector 0 access). The first two bytes are GG which might mean Gemini disk as in the above post. |
Re: Gemini 80-Bus System
The bootstrap on sector 0 of the floppy does the following
Turn of the eeprom - thus enabling 64k of ram Read from track 0 side 0 sector 1 for 16 sectors (Transitioning to side 1 sector 0) into ram starting at address 5d00. This should load CPM Then it executes a jump to 7300 which will be the cold boot entry point I hope that helps. |
Re: Gemini 80-Bus System
1 Attachment(s)
I have extracted from the archive the format program for the gemini... please find here.
Extract from zip archive and then download into RP/M at location 100 and execute. Works under CP/M and so will probably work under RP/M. It accesses the controller directly. This might allow you to create blank disks (I hope). |
Re: Gemini 80-Bus System
Many thanks John, really appreciated, I clearly have quite a bit to digest and some learning still to do.
I have the Gotek connected and have configured the raw image settings for a double sided 35 track disk with 10 sectors per track, 512 bytes per sector. The track layout is set to interleaved cylinder ordering: c0s0, c0s1, c1s0, c1s1, ... I have also ensured that index pulses are not suppressed. I am coming to the conclusion that the DMP disk images I have are Anadisk formatted images, and, based on the Anadisk documentation means that the tracks may need to be shuffled around as you suggested in an earlier post. I will look at this next. Just in case you are unfamiliar, the Anadisk header is defined as follows: # ACYL Actual cylinder, 1 byte # ASID Actual side, 1 byte # LCYL Logical cylinder; cylinder as read, 1 byte # LSID Logical side; or side as read, 1 byte # LSEC Sector number as read, 1 byte # LLEN Length code as read, 1 byte # COUNT Byte count of data to follow, 2 bytes.If zero, no data is contained in this sector. At the moment I am unable to use XBeaver as I have no keyboard input. I am using KDE though. I will spend some time with this also. Naturally I will keep you posted. Once again, many thanks for the help. John |
Re: Gemini 80-Bus System
In an attempt to understand the DMP format track/sector ordering I discovered this sentence in the Anadisk documentation which I thought may be worth sharing.
All sectors occurring on a side will be grouped together; however, they will appear in the same order as they occurred on the diskette. Therefore, if an 8 sector-per-track diskette were scanned which had a physical interleave of 2:1, the sectors might appear in the order'~ 1,5,2,6,3,7,4,8 in the DOS dump file. |
Re: Gemini 80-Bus System
John, a quick update: xbeaver is now running properly under TWM on my Arch Linux machine.
Just in case it helps anyone, TWM seems to have an issue if a locale is anything other than en-US-UTF-8 is used. Even having both en-GB-UTF-8 and en-US-UTF-8 defined seems to cause a TWM font issue. It's a tad awkward having to switch between SDDM/KDE and TWM but it is fine as I am very grateful that xbeaver exists. I understand that Gnome works fine, however, Gnome is just not for me so I have not tried it. I have yet to get my head around the the xbeaver options etc. but will spend some time with it when I can. Many thanks J |
Re: Gemini 80-Bus System
Hi John, I wonder if you can tell me what I am doing wrong with my xbeaver setup?
I have created a minimalist config file that includes; a G829 floppy pointing at my DMP image; a binary image of my machines version of RP/M (2.2) loaded at F000; the patch for the top of RAM required for RP/M; the verbose switch. The system starts to RP/M as expected which is great, however when I try and boot to my disk, it looks like sector 1 is read rather than sector 0. Checking the verbose output shows that the disk image is parsed and reports the correct geometry and states that the first sector is 0. Code:
xbeaver.cfg:board 0xb8 serial_8250 bvrnet ~/beaver/network Code:
FDC Command 00 RP/M reports "Wrong Disk" which I assume is because the two 47h bytes stored at the start of sector 0 are not received. Any help you can offer would be very welcome. J. |
Re: Gemini 80-Bus System
1 Attachment(s)
I have tried booting mine - and all appears to work (debug log attached) I suspect your version of RPM is trying to boot sector 1. (someone has patched it maybe).
This is a record of my log file. Can you PM me a copy of your RPM file. Thank you. |
Re: Gemini 80-Bus System
That would explain a lot.
Will PM the rom. |
Re: Gemini 80-Bus System
Thank you - got it, and when I run it the same as what yours does b command loads from sector 1 and then claims wrong disk. So it is the version of RPM that is the trouble.
|
Re: Gemini 80-Bus System
Thankyou, I have an EPROM marked 2.1, so I will test that sometime tomorrow.
The only other thing I get that I am not sure of is that I get a few Unknown port messages , see below. Is this normal? PHP Code:
|
Re: Gemini 80-Bus System
The config I have is...
Code:
verbose |
Re: Gemini 80-Bus System
Just disassembled RPM V2.2 and it reads sector 1 at address 80h and then jumps to address 82h. And also looks for the first two bytes being G8 - clearly this is for a different type of CP/M system
To Patch RP/M to boot your system The following might be helpful to add into your config file binload 0xf000 ~/beaver/RPM_2.2.ROM #Patch top of ram for RPM byte 0f0a8 21 00 f0 #select boot sector byte 0fc36 0 #patch disk code GG for floppy boot id byte 0fc59 47 47 #patch in jump to patch routine byte 0fc72 e0 ff #patch routine - copy sector from 80h to 0h byte 0ffe0 21 80 00 11 00 00 01 80 00 ed b0 f3 c3 02 00 ( And still include the line ) byte 0000 c3 00 f0 This should boot the disk :-). NOTE If you are doing a ROM do not patch the top of RAM test. This is done on xbeaver because actually xbeaver does not support ROM. If not patched the memory size routine overwrites the RP/M code. |
Re: Gemini 80-Bus System
For the unknown ports b4, b5, b6, b7 are the Z80 pio on the GM811 - which is not configured in the Gemini.cfg file.
Port ff is ram paging (Not used GM813 has much better memory management) Port f8 - I don't know, might be keyboard on a GM811 processor card |
Re: Gemini 80-Bus System
Thank you so much. I will let you know how you get on.
|
Re: Gemini 80-Bus System
To keep things as near to my machine as possible I dumped my version of RP/M 2.1 using RP/M itself, I then created the binary using a bit of python and changed the config to point to the new binary. The xbeaver system now boots to the disk images I have and I have a very convenient platform to simulate my system.
This is great progress, I cant thank you enough! I am sure I would have given up by now had you not been around to answer all my questions. I now need to get back to the real machine and sort out the IVC board. |
Re: Gemini 80-Bus System
Remember the IVC needs a 4MHz clock on the back plane provided by the processor.
An input/output from port b3 will reset the IVC card Another thought - the IVC requires a fairly long keyboard strobe PS - Where did you get RPM 2.1 from? - I would love a copy (I only have RPM 2.0) |
Re: Gemini 80-Bus System
1 Attachment(s)
Thanks for the info re: the IVC, I am using a 25ms strobe which was working fine and 4Mhz is provided from the backplane. I will have a probe around with a scope and see if I can come to any conclusions. I know that the Z80, CRT controller and RAM are all good so hopefully it will be something simple.
Attachment 183094 The eprom came with the machine, I also have the versions 0.1, 2.0 and 2.2. There was an article in 80 Bus News that described details of how to take v2.0 to v2.1 and then on to v2.3 (there was no 2.2, despite me having one!). When I get round to patching it I will post it here. |
Re: Gemini 80-Bus System
Please ignore the HEX file that is in the RPM 2.1.zip file. It should not be there. The binary is correct.
|
Re: Gemini 80-Bus System
1 Attachment(s)
Here is RP/M 2.3. I followed the directions described by Richard Beal in 80-Bus News Vol. 3 Iss. 6 to patch version 2.1 to 2.3. I hope this is of use.
Attachment 183105 J |
Re: Gemini 80-Bus System
I have been playing with the gemini version of CPM. It does some interesting things
with the input mode. Because of this I found a bug. The SVC Command ESC K returned 0 if no characters were available for input else returned the character. Reading the spec properly if no character is available it is supposed to wait for a character. What was happening was that this was returning 0 for no character and forcing the gemini bios to enter edit mode. This was causing problems. While we are on the subject one of the other problems is the keyboard mapping is fixed and the cursor keys are not the same as the gemini choice. I am thinking of an easy way to do this as different systems use different key mappings. Please download the latest version from http://81.105.120.101/download/xbeaver.tgz for this bug fix. Thank you. |
Re: Gemini 80-Bus System
Thanks John.
Now that I have an xbeaver up and running my next task is to boot the real machine to CP/M. I will try and source some Shugart interface drives and I will run the Format.com program you sent me. In the meantime I am playing around with the FlashFloppy software running on a Gotek and reading all that I can about RAW image formats. I am thinking that a RAW image format should contain everything that was on the disk e.g. ID Address Marks, sector header, gap bytes, Data Address marks, sector data and CRCs etc. Do you think that would be correct? I have the sector data directly from the .DMP images and I have the Gemini CP/M disk format in the very detailed articles published in Scorpio issues 1-4 by M.W.T Waters. It wouldn't take much to assemble this data into a proper RAW image. Armed with the above information I wonder if by speaking to the Author, the Gemini definition(s) could be added to FlashFloppy. As the product is open source, I could even have a go myself. I am hoping that in the longer term I will get to the point where I have a fully working CP/M Gemini machine with Floppy and HD. The journey is the fun bit though. |
Re: Gemini 80-Bus System
Keep up with the fun - I have just added keyboard layout switching. Allows mapping of gemini
keyboard and easy use of the gemzap screen editor. To switch keyboards hold down left control and press right control then release both controls To switch back hold down right control and then press left control and then release both controls. Please keep in touch with your progress on Gotek - I have wondered about getting one. I don't have a 80bus machine any more I just use the emulator but as the emulator can drive (some) real cards eg (GEMINI SVC, PLUTO and Digitalker Card). I can do some real IO. For the keyboard mapping I have compared it to a real gemini keyboard and the gemzap manual. I thought you got a hard disk with your machine along with a xebec/adaptec scsi to mfm converter - do you know the model numbers (xebec most likely 1410). I have had fun too.... please please please keep your blog going. |
Re: Gemini 80-Bus System
Yes I will keep the blog going, I will be adding the xbeaver part of my journey soon :).
I think it was Tony Duell who had the hard disk and xebec. There is a Miniscribe HD on EBay at the moment and I did wonder if I should go for it but without the xebec it wouldn't be much use. Anyway first things first. What did you make of my question re RAW images? Am I right in thinking that a RAW image should include the IAM, sector header, gap byes CRCs etc. as well as the sector data? |
Re: Gemini 80-Bus System
1 Attachment(s)
I am not sure of the file format of the Gotek - The .dmp and indeed the .img file contain most of the infomation that was in the sectors on the disk - the only other bit you need is the encoding scheme which is FM for single density and MFM for double density.
All modern systems have used MFM on floppies - there were a few odd ball systems (eg INTEL MDS MMFM and APPLE). I am very interested in your experiences with the Gotek - I guess it just keeps "playing" the current track/side as selected. PS - I have managed to construct a 64k CP/M. MovCPM does not appear to work in my version so I had to use my disk editor to write it to disk. If you load this into ram you will have to write a little program to turn off the RPM eeprom and then copy it to the correct address |
Re: Gemini 80-Bus System
Thanks I will have a play.
|
Re: Gemini 80-Bus System
Assuming that the tracks 0, side 0 starting at sector 1 (not 0) and side 1 are loaded into the CP/M system at address 5d00
the following program should work 5000 21 00 5D LD HL,5D00 5003 11 00 DD LD DE,DD00 5006 01 00 0D LD BC,2300 5009 3E 0C LD A,0C 500B D3 BC OUT (BC),A 500D ED B0 LDIR 500F C3 00 F3 JP F300 (Load any program you like at 100) if at 500f you add the following code ld hl,0100h ld (0f3c4),hl jp 0f300h it will run a program at address 0100 (Disked for example) This should start CP/M in RAM and then optionally run the program given) |
Re: Gemini 80-Bus System
As for a disk, almost any disk with single ended SCSI 50 pin connector will work with the GM829 - I have used a 100MByte disk onto a GM849 (similar) before I wrote the emulator.
|
Re: Gemini 80-Bus System
(Sorry too slow editing post above)
I am not sure of the file format of the Gotek - The .dmp and indeed the .img file contain most of the infomation that was in the sectors on the disk - the only other bit you need is the encoding scheme which is FM for single density and MFM for double density. All modern systems have used MFM on floppies - there were a few odd ball systems (eg INTEL MDS MMFM and APPLE). The RAW image I think would be encoded transitions in some method, so I would guess that it would include the IAM, sector header, gap bytes CRC etc. Indeed you might be able to run the format program on the CP/M system into the gotek. It might also be possible that the software will allow loading of other file formats. I am very interested in your experiences with the Gotek - I guess it just keeps "playing" the current track/side as selected. PS - I have managed to construct a 64k CP/M. MovCPM does not appear to work in my version so I had to use my disk editor to write it to disk. If you load this into ram you will have to write a little program to turn off the RPM eeprom and then copy it to the correct address |
Re: Gemini 80-Bus System
I am rather confused about the .img format as I found this on Wikipedia...
The file size of a raw disk image is always a multiple of the sector size. For floppy disks and hard drives this size is typically 512 bytes (but other sizes such as 128 and 1024 exist). More precisely, the file size of a raw disk image of a magnetic disk corresponds to: Cylinders × Heads × (Sectors per track) × (Sector size) E.g. for 80 cylinders (tracks) and 2 heads (sides) with 18 sectors per track: 80 × 2 × 18 × 512 = 1,474,560 bytes or 1440 KB This suggests that IAMs, CRCs and gap bytes are not included in an .img file, fascinating. I have written to Keir Fraser the author of FlashFloppy in the hope that he can shed some light on the process of adding Gemini to the supported disk types. |
Re: Gemini 80-Bus System
My guess it is then the same as my .dsk format - which is the sector numbers in order sides in order and lastly the cylinders in order.
|
Re: Gemini 80-Bus System
I've been doing some work with BBC Micro DFS disk images, as used by BeebEm, lately. In the course of this, I had to write some (rough and ready, but comprehensible) code that can extract files from a disk image and create disk image files, here on GitHub. While it probably won't be much help in its present form, I released it to the Public Domain, without restrictions; so feel free to borrow any code from it, if it helps you at all.
These BBC Micro disk images contain only the actual data that is readable from the disk; in strict order starting from track 0, with each sector in logical sector order (the physical sector order is created at the time of formatting and can only be changed by re-formatting the disc), then track 1 and so forth. So all the various sync bits, gaps &c. must be generated by the "disk hardware" portion of the emulator. The BBC Micro used an 8271 disk controller, and its disk drives are physically interchangeable with IBM PC drives (though the latter used a twist in the ribbon cable to avoid setting jumpers for each drive's ID; a PC drive will be detected as drive 1/3 by a BBC micro). |
All times are GMT +1. The time now is 4:11 am. |
Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright ©2002 - 2023, Paul Stenning.