![]() |
![]() |
![]() |
|
Vintage Computers Any vintage computer systems, calculators, video games etc., but with an emphasis on 1980s and earlier equipment. |
![]() |
|
Thread Tools |
![]() |
#1 |
Hexode
Join Date: Apr 2019
Location: Skipton, North Yorkshire, UK.
Posts: 252
|
![]()
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. |
![]() |
![]() |
#2 |
Dekatron
Join Date: Jun 2015
Location: Biggin Hill, London, UK.
Posts: 5,012
|
![]()
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. |
![]() |
![]() |
#3 |
Heptode
Join Date: Aug 2009
Location: Worthing, Sussex, UK.
Posts: 648
|
![]()
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? |
![]() |
![]() |
#4 |
Nonode
Join Date: Aug 2010
Location: Resolfen, Wales; and Bristol, England
Posts: 2,506
|
![]()
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…
__________________
Richard Index: recursive loop: see recursive loop |
![]() |
![]() |
#5 |
Hexode
Join Date: Apr 2019
Location: Skipton, North Yorkshire, UK.
Posts: 252
|
![]()
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. |
![]() |
![]() |
#6 |
Heptode
Join Date: Aug 2009
Location: Worthing, Sussex, UK.
Posts: 648
|
![]()
How are you creating the tapes?
|
![]() |
![]() |
#7 | |
Dekatron
Join Date: Jun 2015
Location: Biggin Hill, London, UK.
Posts: 5,012
|
![]() 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). |
|
![]() |
![]() |
#8 |
Hexode
Join Date: Apr 2019
Location: Skipton, North Yorkshire, UK.
Posts: 252
|
![]()
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. |
![]() |
![]() |
#9 |
Heptode
Join Date: Aug 2009
Location: Worthing, Sussex, UK.
Posts: 648
|
![]()
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 Command ? Disk: A Drive: A Format: gemddss Size (K): 164 Disk format DPB Table Disk size (inches) 5 Disk density 1 SPT 40 Sides 1 Double stepping 1 BSH 4 Tracks per side 35 Skew factor 1 BLM 15 Sectors per track 10 First logical sector 1 EXM 1 Sector size (bytes) 512 Cylinder mode 0 DSM 81 First physical 0 Reserved tracks 2 DRM 127 Force side 0 header 0 Block allocation (K) 2 AL0 192 Invert data 0 Directory entries 128 AL1 0 CKS 32 Sector translation table OFF 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 DISKDEF V1.5 Command ? Disk: A Drive: A Format: gemddds Size (K): 340 Disk format DPB Table Disk size (inches) 5 Disk density 1 SPT 40 Sides 2 Double stepping 1 BSH 4 Tracks per side 35 Skew factor 1 BLM 15 Sectors per track 10 First logical sector 1 EXM 1 Sector size (bytes) 512 Cylinder mode 1 DSM 169 First physical 0 Reserved tracks 2 DRM 127 Force side 0 header 0 Block allocation (K) 2 AL0 192 Invert data 0 Directory entries 128 AL1 0 CKS 32 Sector translation table OFF 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 DISKDEF V1.5 Command ? Disk: A Drive: A Format: gemqdss Size (K): 388 Disk format DPB Table Disk size (inches) 5 Disk density 1 SPT 40 Sides 1 Double stepping 0 BSH 5 Tracks per side 80 Skew factor 1 BLM 31 Sectors per track 10 First logical sector 1 EXM 3 Sector size (bytes) 512 Cylinder mode 0 DSM 96 First physical 0 Reserved tracks 2 DRM 127 Force side 0 header 0 Block allocation (K) 4 AL0 128 Invert data 0 Directory entries 128 AL1 0 CKS 32 Sector translation table OFF 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 DISKDEF V1.5 Command ? Disk: A Drive: A Format: gemqdds Size (K): 788 Disk format DPB Table Disk size (inches) 5 Disk density 1 SPT 40 Sides 2 Double stepping 0 BSH 5 Tracks per side 80 Skew factor 1 BLM 31 Sectors per track 10 First logical sector 1 EXM 3 Sector size (bytes) 512 Cylinder mode 1 DSM 196 First physical 0 Reserved tracks 2 DRM 127 Force side 0 header 0 Block allocation (K) 4 AL0 128 Invert data 0 Directory entries 128 AL1 0 CKS 32 Sector translation table OFF 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
![]() |
![]() |
#10 |
Heptode
Join Date: Aug 2009
Location: Worthing, Sussex, UK.
Posts: 648
|
![]()
Very sorry John - I just checked .DMP format has an 8 byte header for each sector
|
![]() |
![]() |
#11 |
Hexode
Join Date: Apr 2019
Location: Skipton, North Yorkshire, UK.
Posts: 252
|
![]()
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 ![]() |
![]() |
![]() |
#12 |
Heptode
Join Date: Aug 2009
Location: Worthing, Sussex, UK.
Posts: 648
|
![]()
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 ![]() |
![]() |
![]() |
#13 |
Hexode
Join Date: Apr 2019
Location: Skipton, North Yorkshire, UK.
Posts: 252
|
![]()
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.
|
![]() |
![]() |
#14 |
Hexode
Join Date: Apr 2019
Location: Skipton, North Yorkshire, UK.
Posts: 252
|
![]()
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. |
![]() |
![]() |
#15 |
Heptode
Join Date: Aug 2009
Location: Worthing, Sussex, UK.
Posts: 648
|
![]()
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. |
![]() |
![]() |
#16 |
Heptode
Join Date: Aug 2009
Location: Worthing, Sussex, UK.
Posts: 648
|
![]()
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. |
![]() |
![]() |
#17 |
Heptode
Join Date: Aug 2009
Location: Carshalton, Surrey, UK.
Posts: 727
|
![]()
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 !
__________________
Regards Peter B |
![]() |
![]() |
#18 |
Hexode
Join Date: Apr 2019
Location: Skipton, North Yorkshire, UK.
Posts: 252
|
![]()
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? |
![]() |
![]() |
#19 |
Heptode
Join Date: Aug 2009
Location: Worthing, Sussex, UK.
Posts: 648
|
![]()
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. Last edited by JohnBHanson; 7th May 2019 at 3:41 pm. Reason: More comments |
![]() |
![]() |
#20 |
Heptode
Join Date: Aug 2009
Location: Worthing, Sussex, UK.
Posts: 648
|
![]()
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. |
![]() |