PDA

View Full Version : Building a (PT) SUBSYSTEM B without a GPM card



Nama
April 15th, 2015, 04:44 PM
I have my IMSAI up and running with a 3P+S card jumpered to mimic a 2SIO card and John Garza’s M84 monitor at F000.

However I decided to try to build it up as a Processor Tecnology ‘Subsystem B’ system.
Subsystem is a collection of Processor Technology cards that come together to form a complete system:

- 3P+S Parallel/Serial card
- VDM-1 Video card
- GPM RAM/ROM card

I’m missing the GPM card but have both the VDM-1 and 3P+S card.
Instead I thought I could build it up using a EconoROM and one of my PSS RAM16 cards to mimic the GPM card.
The GPM card is unique in that it contains the Cuter Monitor rom at C000h, and 1k of RAM starting right after cuter at C800h.
Following the 1K or RAM is another 1K of video RAM for the VDM-1 card starting at CC00h
(All cards I believe are working)

I hooked up my system in the following way.

- 16k RAM @ 0h - 3FFFh
- EconoROM containing 2k cuter @ C000h to C7FFh
- 16k RAM @ addressed to C000h - FF00h, then jumpered for a 2k hole a starting at C000h (for Cuter) and another 1k hole at CC00h (for the VDM video RAM).

23752

Unfortunately I could not get this setup to work. I was able to get the video to reset, and the cursor to display in the upper left corner, but there was no '>' prompt, and following the cursor was some random characters.

I tested to see if my setup looked correct. I could read and write to all the RAM locations (taking into account the holes), and I could see the Cuter ROM where it should be.
I wasn’t sure how I should go about organising the PHANTOM lines on all the cards, or even if I needed to worry about them.

I played with this setup for sometime, with no success.

In the end I took it back to my original M84 monitor setup, but would really like to give SUBSYSTEM B setup another go.

Anyway, I was just wondering if anyone knew what I was doing wrong, or had any insight into my problem.

Thanks

Phil

deramp5113
April 16th, 2015, 06:03 AM
The GPM card provides control of auto-start and Phantom out for the Subsystem B card set. For Solos/Cuter, the GPM card was configured to assert Phantom to the bus during the 1st four cycles after a reset, and during these four cycles, execute the first four bytes at C000.

Since you don't have the GPM card, and I doubt the EconoROM happens to provide the auto-start logic required, your system is not going to auto-start on power up or reset. However, on the IMSAI, I assume you can use your front panel to execute from C000 and this is probably what you've tried, correct?

Mike

Nama
April 17th, 2015, 02:57 AM
Hi Mike,
Yes, that's correct.
I just set the front panel to C000 and try to execute the code from there.
In your understanding of the GPM board, do you think what I'm trying to do is actually possible?

Thanks

Phil

Nama
April 17th, 2015, 10:46 PM
...I don't suppose someone could send me a dump of their known working Cuter ROMs?

Thanks

deramp5113
April 18th, 2015, 05:42 AM
Use the front panel to put an 'A' or similar in numerous locations in video RAM at CC00 and up. Do the characters display properly?

Mike

Nama
April 18th, 2015, 10:25 PM
This weekend I double checked the VDM-1 card as you suggested.
Using the M84 Monitor I was able to load in some of the test programs from the VDM-1 manual, and I was even able to load in the SOL-20 program, TARG.

23820

Of course I couldn't play TARG as the 3P+S card is jumpered to mimic a 2SIO card which the M84 monitor uses. So no keyboard attached in anyway that TARG could see. So I can be fairly certain that the VDM-1 card, and the 3P+S, the PSS RAM16 and the CPU card are all working.

I then tried CUTER again:
I put in the CUTER ROMs, and set it's address to C000. Put 16k card at 0000, and another at C000, with two holes for CUTER and for the 1k VDM-1 RAM....still no go :-(

Very frustrating.

Thanks again

Phil

deramp5113
April 19th, 2015, 05:55 AM
Your 16K RAM card has very flexible addressing! I'd triple-check that the RAM from C800-CBFF is reading and writing without errors. This is the RAM used by CUTER.

Does your CUTER ROM have a version label on it? If I can match the version, I'll send you a dump for comparison.

Mike

Nama
April 19th, 2015, 01:26 PM
Hi again,
Maybe I’m misunderstanding things, but the PSS RAM16 have a set of jumpers where individual 1k segments can be disabled.

23822

So in my case I have addressed one 16k card to C000h, and then jumpered it for disabling segment 0 and 1 (for the CUTER ROM hole) and segment 3 (for the VDM-1 RAM hole).

I have burnt my own CUTER ROMs made from files found on sol20.org. It would be really great to cross check my code with dump from a known working set. If you could send something through would be fantastic.

Cheers
Phil

deramp5113
April 19th, 2015, 06:35 PM
What is the best format for you to compare with: Binary, Intel hex at C000 or Intel hex at zero?

Mike

Nama
April 19th, 2015, 06:42 PM
Probably a binary file is simplest. Thanks

deramp5113
April 20th, 2015, 05:32 PM
Here's a link to CUTER as a .bin: http://deramp.com/downloads/processor_technology/subsystem-b/software/roms/CUTER13.BIN

Mike

Nama
April 20th, 2015, 07:26 PM
Thank you very much.

I now have three versions with some slight changes between them all:

v1) Assembled from the file on Sol20.org, which has byte C359h as 0E, and byte C389h as 3B.
v2) Another version I found online from a .PRN file that I manually pulled apart, which has byte C359h as DE and byte C389h as 3A.
v3) Your version, which has byte C359h as 0E, and byte C389h as 3A.

I've burnt both versions 1 and 2 to EPROMs, and tried them in my machine, with no luck.
Not sure why these versions are all different, or if it makes any real difference.
Unfortunately I can't program in assembler (I'm a BASIC only guy), but I've attached the relevant section (C33Ah to C3A4) of the assembler code from the .PRN file I found online:



0792 * -*-
9999 COPY CUTER2/1 2 OF 3 ****
0793 *
0794 *
0795 * OUTPUT A CRLF FOLLOWED BY A PROMPT
0796 *
C33A CD 42 C3 0797 PROMPT CALL CRLF
C33D 06 3E 0798 MVI B,'>' THE PROMPT
C33F C3 19 C0 0799 JMP SOUT PUT IT ON THE SCREEN
0800 *
C342 06 0A 0801 CRLF MVI B,LF LINE FEED
C344 CD 19 C0 0802 CALL SOUT
C347 06 0D 0803 MVI B,CR CARRIAGE RETURN
C349 CD 19 C0 0804 CALL SOUT
C34C 3A 10 C8 0805 LDA NUCNT GET COUNT OF NULLS TO OUTPUT
C34F 4F 0806 MOV C,A SAVE COUNT IN C
C350 0D 0807 NULOT DCR C
C351 F8 0808 RM . COUNTED DOWN PAST ZERO (MAX COUNT IS X'7F')
C352 AF 0809 XRA A HERE IS THE NULL
C353 CD 10 C4 0810 CALL OUTH OUTPUT IT
C356 C3 50 C3 0811 JMP NULOT LOOP FOR NUMBER OF NULLS
0812 *
0813 *
0814 * SCAN OVER UP TO 12 CHARACTERS LOOKING FOR A BLANK
0815 *
C359 DE 0C 0816 SBLK MVI C,12 MAXIMUM COMMAND STRING
C35B 1A 0817 SBLK1 LDAX D
C35C FE 20 0818 CPI BLANK
C35E CA 6C C3 0819 JZ SCHR GOT A BLANK NOW SCAN PAST IT
C361 13 0820 INX D
C362 FE 3D 0821 CPI '=' A EQUAL WILL ALSO STOP US (AT NEXT CHAR)
C364 CA 6C C3 0822 JZ SCHR FOUND, DE PT TO NEXT CHAR
C367 0D 0823 DCR C NO MORE THAN TWELVE
C368 C2 5B C3 0824 JNZ SBLK1
C36B C9 0825 RET . GO BACK WITH ZERO FLAG SET
0826 *
0827 *
0828 * SCAN PAST UP TO 10 BLANK POSITIONS LOOKING FOR
0829 * A NON BLANK CHARACTER.
0830 *
C36C 0E 0A 0831 SCHR MVI C,10 SCAN TO FIRST NON BLANK CHR WITHIN 10
C36E 1A 0832 SCHR1 LDAX D GET NEXT CHARACTER
C36F FE 20 0833 CPI SPACE
C371 C0 0834 RNZ . WE'RE PAST THEM
C372 13 0835 INX D NEXT SCAN ADDRESS
C373 0D 0836 DCR C
C374 C8 0837 RZ . COMMAND ERROR
C375 C3 6E C3 0838 JMP SCHR1 KEEP LOOPING
0839 *
0840 * THIS ROUTINE SCANS OVER CHARACTERS, PAST BLANKS AND
0841 * CONVERTS THE FOLLOWING ADDRESS TO HEX. ERRORS RETURN TO
0842 * THE ERROR HANDLER.
0843 *
C378 CD 59 C3 0844 SCONV CALL SBLK
C37B CA 6B C4 0845 JZ ERR1
0846 *
0847 * THIS ROUTINE CONVERTS ASCII DIGITS INTO BINARY FOLLOWING
0848 * A STANDARD HEX CONVERSION. THE SCAN STOPS WHEN AN ASCII
0849 * SPACE IS ENCOUNTERED. PARAMETER ERRORS REPLACE THE ERROR
0850 * CHARACTER ON THE SCREEN WITH A QUESTION MARK.
0851 *
C37E 21 00 00 0852 SHEX LXI H,0 CLEAR H & L
C381 1A 0853 SHE1 LDAX D GET CHARACTER
C382 FE 20 0854 CPI 20H IS IT A SPACE?
C384 C8 0855 RZ . IF SO
C385 FE 2F 0856 CPI '/'
C387 C8 0857 RZ
C388 FE 3A 0858 CPI ':'
C38A C8 0859 RZ
0860 *
C38B 29 0861 HCONV DAD H MAKE ROOM FOR THE NEW ONE
C38C 29 0862 DAD H
C38D 29 0863 DAD H
C38E 29 0864 DAD H
C38F CD 9B C3 0865 CALL HCOV1 DO THE CONVERSION
C392 D2 6B C4 0866 JNC ERR1 NOT VALID HEXIDECIMAL VALUE
C395 85 0867 ADD L
C396 6F 0868 MOV L,A MOVE IT IN
C397 13 0869 INX D BUMP THE POINTER
C398 C3 81 C3 0870 JMP SHE1
0871 *
C39B D6 30 0872 HCOV1 SUI 48 REMOVE ASCII BIAS
C39D FE 0A 0873 CPI 10
C39F D8 0874 RC . IF LESS THAN 9
C3A0 D6 07 0875 SUI 7 IT'S A LATTER??
C3A2 FE 10 0876 CPI 10H
C3A4 C9 0877 RET . WITH TEST IN HAND

deramp5113
April 21st, 2015, 06:15 AM
Location C359 needs to be a MVI C instruction. This is opcode 0E.

Location C389 needs to be the ':' character. This is a 3A.

So neither ROM 1 or 2 is exactly right, however, at quick glance, neither of these should prevent CUTER from putting up the ">" prompt.

During initialization, CUTER reads the sense switch port (FF) to determine the default input and output device. If you've entered C000 on the front panel in order to run from C000, the sense port should read C0. Bits 3-2 determine the input pseudo-port and bits 1-0 determine the output pseudo port. So, most likely, these are both reading as 00. If this is the case, that should be fine. If for any reason you've set the sense switches to anything else before running CUTER each time, that might be your problem.

CUTER assumes the parallel keyboard (pseudo input device 0) is on I/O port 3 and the VDM (pseudo output device 0) status port is at C8. Triple check this is your configuration and that no other hardware in the computer conflicts with these I/O addresses.

Finally, CUTER initialization hits tape control ports at FA and FB. Do you have anything in your system at these I/O addresses that CUTER's initialization of these ports could be messing up?

Mike

Nama
April 22nd, 2015, 03:46 PM
Hi Mike,
Thanks for the confirmation on the ROM's.
I had already tried playing with the sense switches, but with no luck.

Anyway, I've decided that instead of using my IMSAI, I may try building up one of Don Caprio's 8 slot motherboards as the 'Subsystem B' setup. Could be a challenge though.
Stay tuned...