PDA

View Full Version : Problem with SOL-20 + TARG game



Nama
January 2nd, 2015, 12:20 AM
Hi again,
So I have ignored this problem for a long time, but again, I thought Iíd see if anyone here can shed some light on it.

The System:
SOL-20 with Northstar MDS Floppy controller at E800h. I have both Northstar DOS and CP/M working.

What I want to do:
Save and load back the game TARG to floppy in either Northstar DOS or CP/M.
TARG loads at, and executes from address 0000h, and is 0E41h bytes long.
(For CP/M I have a SOL-20 program called BOOT.COM that allows me to launch programs that load at 0000h in CP/M. I have used this program before and it seems to work well)

The problem:
I can load TARG into memory, save it to floppy, verify that it is saved correctly, but when I try to execute the file from floppy the 2nd and 3rd bytes are changed, and the game fails to run correctly. Just so you all know, I have had much success with saving and loading other games and programs. TARG and a couple of other programs that start at 0000h seem to have this same issue. Although If I recall correctly, not all programs that start at 0000h have this issue.

To try to explain more simply I have some screen grabs.

This is the first part of the original TARG code which is transferred into the SOLís memory via serial:
22002

This is what I see when I look at the same part of the code after it has been saved to floppy, and then the disk contents dumped and viewed in a hex editor. Still looks good.
22001

...and this is what happens when I then load the code from either CP/M or Northstar DOS.
22003

Notice the 2nd and 3rd bytes have changed. The first byte is 'C3' and I believe this is a jump, and it should be jumping to address 0E18h, but instead it's now jumping to 0123h. I can manually change the jump address back and make TARG run, but that defeats the purpose of having easy loading via floppy.

Strangely enough the same issue happens when using the SOLace emulator with the virtual machine setup similar to my real one..

I have also found a video on YouTube showing TARG being loaded successfully on a SOL-20 with Northstar controller in Northstar DOS, very similar to my setup.

https://www.youtube.com/watch?v=av1bnWXde20

The only difference I can see is that the Northstar controller used in the video executes at E900h, as opposed to mine which is at E800h.


So Iím stumped, does anyone know whatís going on and why these two bytes are being corrupted.

Phil

Corey986
January 2nd, 2015, 08:13 AM
I can attest it works in on one of my Sol-20 in NDOS and it works on the other in PTDOS. Never tried it in CP/M. My CP/M Sol-20 is a Helios with version 1.4, if you want to email me a copy of boot.com and I'll try it. I never made a 5 1/4 CP/M for the Northstar setup.

Cheers,
Corey

Nama
January 2nd, 2015, 09:28 AM
Thanks Corey,
I've sent you a CP/M disk image (.SVN) that can be booted in SOLace. It contains TARG and also exhibits the same issues as my real machine. The disk image was used to generate a real disk (using your stub program and Dave Dunfield's Northstar utils).
I've also sent the SOL-20 boot Bloc program (BOOT.COM) as a .ASM file, but it's also included in the CP/M disk image.
Just to reiterate, the same problem also occurs when trying to launch TARG from my N* DOS too, emulated and on my real machine.

Just curious, what launch address does your Northstar floppy controller have?

Cheers
Phil

Corey986
January 3rd, 2015, 02:55 AM
Maybe I'll try to cable up my Northstar Sol setup so I can make an 5 1/4 CPM disk from your image using Dave's utilities. I'll try it later today or tomorrow morning depending on when I have some free time.

Cheers,
Corey

Nama
January 3rd, 2015, 10:44 AM
That's great.
I'm excited to hear how you get on.

Thanks again

Phil

frustrated
January 4th, 2015, 10:59 AM
"Notice the 2nd and 3rd bytes have changed. The first byte is 'C3' and I believe this is a jump, and it should be jumping to address 0E18h, but instead it's now jumping to 0123h. I can manually change the jump address back and make TARG run, but that defeats the purpose of having easy loading via floppy."

---

In my 40+ years as switching system tech in what used to be called "The Bell System" I have seen something like this before. My experience was with Western Electric #1ESS and #1AESS switching systems and attached 3B20D processors, not so much with microcomputers. So while I'm going to take a WAG on what's happening, I really only have a vague idea how you would find and fix the bug in a microcomputer environment.

Note that only two bytes of code are being changed. If you were having wholesale corruption that would point us in a different direction. My guess is that you have some code that executes and deliberately overwrites the jump vector for some reason. The switch processors I worked on had a hardware breakpoint capability built in that allowed me to dump selected processor and memory state information to a file if and when the breakpoint condition was triggered, such as a write to a specified address. I vaguely remember reading that some microcomputer monitor ROMs could do something similar. At worst case you could look through the code that you're running and see if you can find any instructions that write to the two addresses being changed.

Nama
January 4th, 2015, 01:05 PM
That was exactly what I was thinking was happening.
As the problem exists with both Northstar DOS and CP/M, if the code is being modified, then (my guess) is that it's unlikely that it's being modified by the OS.
But what does that leave? The only thing I can think of is the boot code in the Northstar controller ROM. However I'm not sure if the controller code is accessed again once the initial boot sequence.

Phil

Corey986
January 4th, 2015, 03:53 PM
Didn't get a chance today to work on my Sol, I wasn't feeling too well.

But reading the last post had me think of something. Try another Ram card at 0000 and remove all non essential RAM
Cards. I had a problem similar to this where one ram card was the issue. Northstar DOS doesn't touch memory below 2000h.

Nama
January 4th, 2015, 04:43 PM
I have a single 64k card.
I'll pull out some other cards and see what I can get working.
However this doesn't explain why this problem seems to happen in the SOLace emulator too.
Hope you're feeling better.

UPDATE:

I have:
2 x PSS RAM 16's
PSS RAM 65 (Can't find the manual online for this)
SD Sales 8k Static RAM card
ExpandoRAM II

All untested...I may spend some time tonight and see what works.

Nama
January 5th, 2015, 12:28 AM
The outcome of my RAM card tests:

PSS RAM16 (16k) #1 - WORKING
PSS RAM16 (16k) #2 - DEAD BANK FROM 2FFFh to 3FFFh
PSS RAM 65 (16k?)- Cant get it to work and I can't find the manual online
SD Sales 8k Static RAM (8k) - ERRORS ALL OVER THE PLACE
ExpandoRAM II - Smoked a tantalum cap. Need to repair before trying again.

I believe I can run Northstar DOS in 16K, but will need to test this.


P.S. On a side note, in the case of the PSS RAM16 #1 card, can a dead RAM chip take out an entire bank? I've already swapped out the LS42 chip select IC's, thinking that would be an obvious place to start, but the results were the same.

Nama
January 6th, 2015, 12:36 AM
JDallas,
Thanks for the pointers.
I had a little bit of time to play around tonight, and this is what I did, and observed.

- loaded TARG via serial and launched at 0000h. Runs fine. Break out of the game and look at bytes 2 and 3, that are modified to 23 01.
Re-launch the game at 0000h has the game continue to play perfectly again. My conclusion is that the game self modifies the jump address as you predicted.

Now things get strange.

- I launch TARG from CP/M (or N* DOS). It of course does not run as expected (the game boot screen constantly refreshes). Break out of the game and the 2 bytes are modified as expected. Re-launch the game at 0000h has the game still not work. if I break out again and change the 2 bytes back to 18 0E, and re-launch the game at 0000h, the game now works. Breaking out once more shows the two byes I just changed have been modified back to 23 01 once more, however this time if I re-launch at 0000h again, the game continues to work fine!!! Haven't come to any conclusions about what this means yet.

Here is the game code (apologies...it's long):


0000: C3 18 0E CD 0A 00 CA 03 00 C9 CD 1C 00 C8 FE 1B
0010: CA 19 00 FE 7F CA 23 01 C9 C3 60 E0 DB 00 00 E6
0020: 40 C8 DB 01 E6 7F C9 CD 2E 00 CA 27 00 C9 CD 0A
0030: 00 C8 FE 03 C2 3A 00 32 0B 0D FE 25 C0 32 04 0D
0040: B7 C9 11 00 09 21 00 CC E5 01 04 00 09 7C FE CD
0050: C4 80 00 E1 1A B7 C8 CD 74 00 C3 48 00 E5 01 04
0060: 00 09 7C FE D0 C4 80 00 E1 1A B7 CA 13 01 CD 74
0070: 00 C3 5D 00 77 23 13 E5 21 84 03 CD 1C 01 E1 C9
0080: 36 09 2B 36 0A 2B 36 3D 2B 36 20 C9 CD 42 00 21
0090: 00 00 22 16 0D 21 30 30 22 19 0D 22 1B 0D 3E 20
00A0: 32 18 0D 21 18 0D 11 BB CC C3 AB 07 11 0F 00 21
00B0: 58 CC CD 63 08 11 09 00 21 9B CC CD 63 08 3A 13
00C0: 0D 21 DE CC 0E 21 FE C0 CA D5 00 DA D3 00 0E 2F
00D0: C3 D5 00 0E 5C C6 FE 47 CD DF 00 CD DE 00 6F 71
00E0: 23 23 71 7D 80 C9 23 5E 23 56 23 7E B7 C8 FE FF
00F0: CA E6 00 12 13 C3 EA 00 11 3F 00 01 D0 7C 21 00
0100: CD CD 09 01 21 40 0D 0E 10 70 19 70 23 7C B9 C2
0110: 09 01 C9 21 00 00 CD 1C 01 CD 1C 01 2B 7C B5 C2
0120: 1C 01 C9 31 3E 0D 21 00 CC 11 00 04 CD 63 08 3E
0130: 04 D3 C8 D3 FE 32 10 0D AF 32 0A 0D 21 DF CC 22
0140: 1D 0D 3E 30 32 12 0D 21 00 CD 11 01 0A CD 5D 00
0150: 3A 10 0D B7 C4 8C 00 21 00 00 22 07 0D 3E C0 32
0160: 13 0D AF 32 10 0D 32 0F 0D 32 14 0D 32 03 0D 32
0170: 0C 0D 32 0B 0D 3A 0A 0D B7 C2 95 01 CD 27 00 FE
0180: 44 C2 8A 01 32 0A 0D C3 95 01 FE 52 CC 8F 00 CD
0190: 34 06 DA 75 01 CD 42 00 CD A3 00 21 40 CD 11 BF
01A0: 02 CD 63 08 CD F8 00 AF 32 15 0D 21 40 CD 11 40
01B0: 0D 7E 12 13 23 7C D6 D0 C2 B1 01 31 3E 0D CD 9D
01C0: 05 3A 04 0D 2E 01 67 CD 1C 01 CD 17 02 3A 12 0D
01D0: 3D 32 12 0D CC C8 07 47 3A 11 0D B7 CA EB 01 3D
01E0: 32 11 0D 3A 09 0D E6 0F CC 9E 06 3A 09 0D 80 32
01F0: 09 0D 80 F5 06 3F 3A 0A 0D B7 CA FF 01 06 1F F1
0200: A0 CC 9E 06 3A 09 0D FE 02 CA 11 02 FE 05 C2 BB
0210: 01 32 11 0D C3 BB 01 21 3F 0D E5 E1 23 7C FE 10
0220: C8 7E FE 20 CA 1C 02 FE 7C CA 1C 02 E5 21 46 02
0230: 47 0E FF 23 23 7E 23 B8 C2 41 02 5E 23 56 EB E3
0240: C9 B9 C2 33 02 C3 1B 02 53 88 02 23 92 02 24 8D
0250: 02 3D 97 02 2D C3 02 19 73 03 0E 78 03 A0 89 05
0260: 04 8E 05 2B 93 05 3A 57 05 2A 98 05 AA ED 03 87
0270: F3 03 69 F8 03 78 FD 03 16 02 04 0B 07 04 0C 0C
0280: 04 40 11 04 5E 16 04 FF 3E 24 C3 64 03 3E 3D C3
0290: 64 03 3E 2D C3 64 03 CD 56 03 FE 18 CA 0D 03 2B
02A0: E5 2B 3E 53 CD 6A 03 2B 2B 3E 18 CD 50 03 FE 20
02B0: C2 B8 02 3E 3C C3 5E 03 FE 7C CA 3A 03 E3 16 01
02C0: C3 C0 03 CD 56 03 FE 0A CA EE 02 2B E5 2B 3E 23
02D0: CD 6A 03 2B 3E 0A CD 50 03 FE 20 C2 E3 02 3E 0D
02E0: C3 5E 03 FE 7C CA 3A 03 E3 16 02 C3 C0 03 3E 23
02F0: CD 6A 03 23 3E 0A CD 58 03 FE 20 C2 03 03 3E 09
0300: C3 64 03 FE 7C CA 2D 03 16 02 C3 BF 03 3E 53 CD
0310: 6A 03 23 23 3E 18 CD 58 03 FE 20 C2 23 03 3E 3E
0320: C3 64 03 FE 7C CA 2D 03 16 01 C3 BF 03 E5 2B CD
0330: 4E 03 FE 20 C2 2F 03 C3 44 03 23 CD 56 03 FE 20
0340: C2 3B 03 E3 16 02 C3 43 08 3E 20 C3 6A 03 3E 20
0350: CD 6A 03 2B 7E C9 3E 20 CD 6A 03 23 7E C9 CD 6A
0360: 03 C3 1B 02 CD 6A 03 C3 1C 02 E5 11 00 C0 19 77
0370: E1 77 C9 3E 0E C3 64 03 E5 CD 49 03 3A 13 0D 5F
0380: 16 FF 19 7C FE 0D C2 8F 03 7D FE 3F DA 9A 03 7E
0390: FE 20 C2 7C 04 3E 19 C3 5E 03 CD B4 03 C3 1B 02
03A0: 21 5D 04 16 03 CD 4D 04 C8 15 C2 A5 03 CD B4 03
03B0: E1 C3 9E 04 21 8A CC CD 62 06 16 03 C3 49 08 E5
03C0: 21 74 04 CD 4D 04 C2 CC 03 C3 80 04 E1 E5 23 CD
03D0: 38 05 3E AA CD 6A 03 23 7E FE 20 CA E3 03 FE 7C
03E0: C2 D2 03 E1 3E 87 CD 6A 03 E5 C3 30 04 CD 49 03
03F0: C3 1C 02 3E 69 C3 64 03 3E 78 C3 64 03 3E 16 C3
0400: 64 03 3E 0B C3 64 03 3E 0C C3 64 03 3E 40 C3 64
0410: 03 3E 5E C3 64 03 CD 49 03 E5 01 40 00 09 7C FE
0420: 10 CA 1B 02 3E 87 CD 6A 03 09 7C FE 10 CA 1B 02
0430: 7E FE 20 C2 3B 04 3E 07 C3 5E 03 E3 16 03 E5 21
0440: 74 04 CD 4D 04 E1 CA 80 04 E3 C3 1B 02 47 7E 23
0450: FE FF CA 5A 04 B8 C8 C3 4E 04 AF B0 C9 07 87 69
0460: 78 16 0B 0C 40 5E FF 0D 09 0A 23 2D FF 3C 3E 18
0470: 53 24 3D FF 19 0E A0 04 2B 3A 2A FF E3 CD A0 03
0480: CD 86 04 C3 9E 04 5A 2A 07 0D 01 64 00 09 1D C2
0490: 8A 04 22 07 0D CD 57 06 21 08 CC C3 62 06 AF 32
04A0: 0E 0D E1 23 CD 38 05 22 05 0D CD F2 04 0D 79 32
04B0: 0D 0D 2A 05 0D 11 C1 FF 19 7C FE 0D C2 C5 04 7D
04C0: FE 40 DA CF 04 CD 06 05 C4 2F 05 3A 0D 0D 4F 2A
04D0: 05 0D 11 41 00 19 7C FE 10 C4 06 05 C4 2F 05 3A
04E0: 0E 0D B7 CA 1C 02 3D 32 0E 0D E1 E5 CD 45 05 C3
04F0: A2 04 01 00 A0 78 CD 58 03 0C FE 7C C8 FE 20 C2
0500: F5 04 78 C3 6A 03 7E FE 7C C8 FE 20 C2 18 05 78
0510: CD 58 03 0D C2 07 05 C9 E5 CD 24 05 21 76 04 CD
0520: 4D 04 E1 C9 FE 19 CA B4 03 FE 0E CA B4 03 C9 E3
0530: 3A 0E 0D 3C 32 0E 0D E9 01 20 7C 2B 7E B9 C8 B8
0540: C2 3B 05 23 C9 46 16 03 78 21 5D 04 CD 4D 04 CA
0550: 86 04 15 C2 4C 05 C9 3E 2A CD 6A 03 E5 11 40 00
0560: 19 7C FE 10 CA 1B 02 7E FE 20 CA 84 05 E5 21 76
0570: 04 CD 4D 04 E1 CA 84 05 46 78 E3 CD 24 05 CD 46
0580: 05 C3 9E 04 3E 04 C3 5E 03 3E 04 C3 64 03 3E 2B
0590: C3 64 03 3E 3A C3 64 03 3E 20 C3 64 03 3A 14 0D
05A0: B7 CA E6 05 2A 1D 0D 3E 0E BE C2 E5 05 7D FE 3F
05B0: D2 D9 05 36 20 26 0F 3A 13 0D 47 85 6F 3E 19 CD
05C0: 6A 03 21 DF CC 77 22 1D 0D 78 85 6F 36 20 80 6F
05D0: 36 20 AF 32 14 0D C3 E6 05 36 8C 3A 13 0D 85 6F
05E0: 3E 19 22 1D 0D 77 CD 2E 00 C2 0C 06 3A 0A 0D B7
05F0: C8 0E 46 3A 09 0D 47 E6 6F CA 08 06 E6 5F C0 0E
0600: 2C 78 07 D2 08 06 0E 2E 79 C3 0C 06 FE 2C C2 1B
0610: 06 3A 13 0D FE BE C8 3D C3 27 06 FE 2E C2 41 06
0620: 3A 13 0D FE C2 C8 3C 47 3A 14 0D B7 C0 78 32 13
0630: 0D C3 AC 00 FE 31 D8 FE 3A 3F D8 D6 31 32 04 0D
0640: C9 CD 34 06 D0 3A 14 0D B7 C0 3C 32 14 0D 21 49
0650: CC CD 62 06 C3 A4 05 21 7D CC CD 6C 06 15 C2 57
0660: 06 C9 CD 76 06 C0 2B CD 76 06 C0 2B CD 76 06 C0
0670: 2B CD 76 06 C0 2B 7E FE 20 C2 7E 06 3E 30 3C FE
0680: 3A C2 86 06 3E 30 77 F5 D6 30 47 3A 09 0D 80 32
0690: 09 0D F1 C9 3A 09 0D 1F 1F 1F 1F E6 07 C9 CD F8
06A0: 00 CD 94 06 21 40 0D 11 40 00 B7 CA B8 06 FE 07
06B0: CA B8 06 3D 19 C2 B3 06 7D E6 40 C2 FB 06 11 3E
06C0: 00 19 3A 09 0D 0F D2 CD 06 11 C0 FF 19 3A 09 0D
06D0: E6 03 CA EA 06 3E 53 CD 6A 03 2B 3E 18 CD 6A 03
06E0: 2B CD 6A 03 2B 3E 3C C3 6A 03 3E 23 CD 6A 03 2B
06F0: 3E 0A CD 6A 03 2B 3E 0D C3 6A 03 3A 09 0D E6 03
0700: 23 CA 19 07 3E 53 CD 6A 03 23 3E 18 CD 6A 03 23
0710: CD 6A 03 23 3E 3E C3 6A 03 3E 23 CD 6A 03 23 3E
0720: 0A CD 6A 03 23 3E 09 C3 6A 03 3A 03 0D B7 C2 67
0730: 07 3A 0A 0D B7 C2 4B 07 3A 02 0D 6F 3A 7B CC FE
0740: 20 C2 4B 07 3A 7C CC BD DA 67 07 3E 32 32 3E CC
0750: 32 03 0D 3E 30 32 12 0D 21 AD 08 CD E6 00 21 32
0760: CC CD 1B 08 C3 18 08 21 3F CC 3A 0B 0D B7 C2 DA
0770: 07 2A 07 0D EB 2A 16 0D 7D 93 7C 9A 3E 00 D2 96
0780: 07 EB 22 16 0D 21 7B CC 11 18 0D CD AB 07 21 D6
0790: 08 CD E6 00 3E 05 32 15 0D 21 6C 08 CD E6 00 21
07A0: EF 08 CD E6 00 CD B6 07 C3 3C 01 0E 05 7E 12 13
07B0: 23 0D C2 AD 07 C9 21 7B CC 11 20 CC 0E 05 7E 12
07C0: 13 13 23 0D C2 BE 07 C9 21 3E CC 7E 23 FE 30 C2
07D0: DA 07 7E FE 30 CA 2A 07 FE 39 E5 CC 0C 08 3A 0C
07E0: 0D B7 CA FB 07 21 14 CD CD 35 08 C2 F2 07 2B CD
07F0: 35 08 21 32 CC CD 1B 08 CD 18 08 E1 3E 30 32 12
0800: 0D CD 35 08 C0 2B CD 35 08 C3 87 06 21 8A 08 CD
0810: E6 00 3E FF 32 0C 0D C9 21 38 CC 7E FE 20 C8 EE
0820: 80 77 23 C3 1B 08 CD 35 08 C0 2B CD 35 08 C0 2B
0830: CD 35 08 C0 2B 7E FE 20 C8 3D FE 2F C2 41 08 3E
0840: 39 77 C9 CD 49 08 C3 1B 02 2A 07 0D 7C B5 C8 01
0850: F6 FF 09 22 07 0D 21 7E CC CD 26 08 15 C2 49 08
0860: C3 87 06 36 20 23 1B 7A B3 C2 63 08 C9 92 CF 84
0870: 84 84 20 20 47 20 41 20 4D 20 45 20 20 20 4F 20
0880: 56 20 45 20 52 20 20 84 84 84 00 10 CD 98 20 20
0890: 30 39 20 20 53 20 45 20 43 20 4F 20 4E 20 44 20
08A0: 53 20 20 4C 20 45 20 46 20 54 20 20 98 00 32 CC
08B0: 65 78 74 72 61 FF 11 CD 98 20 32 30 20 20 20 45
08C0: 20 58 20 54 20 52 20 41 20 20 20 54 20 49 20 4D
08D0: 20 45 20 20 20 98 00 95 CC 87 87 20 20 4E 45 57
08E0: 20 48 49 47 48 20 53 43 4F 52 45 20 20 87 87 00
08F0: 15 CC 53 20 43 20 4F 20 52 20 45 20 3D 20 20 00
0900: 68 69 74 73 20 20 20 20 30 20 20 20 20 20 20 20
0910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0930: 20 20 20 20 20 20 20 20 54 69 6D 65 20 20 39 30
0940: 73 68 6F 74 73 20 20 20 20 30 20 20 20 20 20 20
0950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 20
0960: 21 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0970: 20 20 20 20 20 53 63 6F 72 65 20 20 20 30 30 30
0980: 6D 69 73 73 65 73 20 20 20 20 30 20 20 20 20 20
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 20
09A0: 21 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
09B0: 48 69 67 68 20 73 63 6F 72 65 20 20 20 30 30 30
09C0: 6C 65 66 74 3D 22 3C 22 20 72 69 67 68 74 3D 22
09D0: 3E 22 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 21 5F
09E0: 21 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 20 20 61
09F0: 6E 79 20 6C 65 74 74 65 72 20 3D 20 66 69 72 65
0A00: 00 7C 2D 2D 2D 20 54 61 72 67 65 74 20 2D 2D 2D
0A10: 20 50 72 6F 63 65 73 73 6F 72 20 54 65 63 68 6E
0A20: 6F 6C 6F 67 79 20 43 6F 72 70 6F 72 61 74 69 6F
0A30: 6E 20 2D 2D 2D 20 54 61 72 67 65 74 20 2D 2D 2D
0A40: 7C 7C 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0A50: 20 20 20 77 72 69 74 74 65 6E 20 62 79 20 20 20
0A60: 20 53 74 65 76 65 6E 20 44 6F 6D 70 69 65 72 20
0A70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0A80: 7C 7C 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0A90: 20 20 20 20 20 20 69 6E 63 6C 75 64 65 73 20 73
0AA0: 6F 75 6E 64 20 65 66 66 65 63 74 73 20 20 20 20
0AB0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0AC0: 7C 7C 20 20 20 62 69 67 20 73 68 69 70 20 20 20
0AD0: 20 3D 20 31 30 30 20 70 6F 69 6E 74 73 20 20 20
0AE0: 20 6D 69 73 73 69 6C 65 20 6D 69 73 73 65 73 20
0AF0: 3D 20 20 2D 33 30 20 70 6F 69 6E 74 73 20 20 20
0B00: 7C 7C 20 20 20 6C 69 74 74 6C 65 20 73 68 69 70
0B10: 20 3D 20 32 30 30 20 70 6F 69 6E 74 73 20 20 20
0B20: 20 73 68 69 70 20 65 73 63 61 70 65 73 20 20 20
0B30: 3D 20 20 2D 32 30 20 70 6F 69 6E 74 73 20 20 20
0B40: 7C 7C 20 20 20 70 61 72 61 63 68 75 74 65 20 20
0B50: 20 3D 20 36 30 30 20 70 6F 69 6E 74 73 20 20 20
0B60: 20 65 78 74 72 61 20 70 6F 69 6E 74 73 20 66 6F
0B70: 72 20 6D 75 6C 74 69 70 6C 65 20 68 69 74 73 20
0B80: 7C 7C 20 20 20 20 20 20 2B 20 2B 20 2B 20 20 20
0B90: 20 20 20 65 78 74 72 61 20 74 69 6D 65 20 69 66
0BA0: 20 73 63 6F 72 65 20 3D 3E 20 34 30 30 30 21 20
0BB0: 20 20 20 20 20 2B 20 2B 20 2B 20 20 20 20 20 20
0BC0: 7C 7C 20 20 20 70 75 73 68 20 22 3C 22 20 74 6F
0BD0: 20 61 69 6D 20 6C 65 66 74 20 28 2C 29 20 20 20
0BE0: 20 70 75 73 68 20 22 45 53 43 22 20 74 6F 20 65
0BF0: 78 69 74 20 70 72 6F 67 72 61 6D 20 20 20 20 20
0C00: 7C 7C 20 20 20 70 75 73 68 20 22 3E 22 20 74 6F
0C10: 20 61 69 6D 20 72 69 67 68 74 28 2E 29 20 20 20
0C20: 20 70 75 73 68 20 22 44 45 4C 22 20 74 6F 20 72
0C30: 65 73 74 61 72 74 20 67 61 6D 65 20 20 20 20 20
0C40: 7C 7C 20 20 20 70 75 73 68 20 22 44 22 20 66 6F
0C50: 72 20 61 75 74 6F 20 6D 6F 64 65 20 20 20 20 20
0C60: 20 70 75 73 68 20 22 52 22 20 74 6F 20 72 65 73
0C70: 65 74 20 68 69 67 68 20 73 63 6F 72 65 20 20 20
0C80: 7C 7C 20 20 20 70 75 73 68 20 6E 75 6D 62 65 72
0C90: 20 31 2D 39 20 74 6F 20 73 65 74 20 73 70 65 65
0CA0: 64 20 61 6E 64 20 73 74 61 72 74 20 67 61 6D 65
0CB0: 3A 20 31 20 3D 20 66 61 73 74 65 73 74 20 20 20
0CC0: 7C 7C 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0CD0: 70 75 73 68 20 61 6E 79 20 6C 65 74 74 65 72 20
0CE0: 6B 65 79 20 74 6F 20 66 69 72 65 20 6D 69 73 73
0CF0: 69 6C 65 20 20 20 20 20 20 20 20 20 20 20 20 20
0D00: 7C 00 34 00 00 00 00 00 00 00 00 00 00 00 00 00
0D10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31
0D20: 00 10 AF D3 C8 D3 FE 21 00 CC 11 00 04 CD 63 08
0D30: 21 6C 0D CD E6 00 21 00 00 11 00 00 01 15 0E 7E
0D40: 82 57 7E AB 93 2F 93 5F 23 7C B8 C2 3F 0D 7D B9
0D50: C2 3F 0D 2A 16 0E 7C 92 C2 67 0D 7D 93 C2 67 0D
0D60: 21 F3 0D CD E6 00 76 21 02 0E C3 63 0D 59 CC 54
0D70: 41 52 47 45 54 FF 13 CD 23 20 43 4F 50 59 52 49
0D80: 47 48 54 20 31 39 37 37 20 23 FF 5B CD 42 59 FF
0D90: 8C CD 50 52 4F 43 45 53 53 4F 52 20 54 45 43 48
0DA0: 4E 4F 4C 4F 47 59 20 43 4F 52 50 4F 52 41 54 49
0DB0: 4F 4E FF 07 CE 56 45 52 53 49 4F 4E 20 32 2E 34
0DC0: 20 20 20 4A 41 4E 55 41 52 59 20 37 2C 20 31 39
0DD0: 37 37 20 20 20 53 2E 20 44 4F 4D 50 49 45 52 FF
0DE0: 0B CF 54 41 52 47 45 54 20 43 48 45 43 4B 53 55
0DF0: 4D 20 2D 00 1C CF 20 56 45 52 49 46 49 45 44 20
0E00: 4F 4B 00 1C CF 20 23 23 23 20 20 45 52 52 4F 52
0E10: 20 20 23 23 23 00 4B BA 23 7E FE C3 C2 3B 0E 2B
0E20: 7E FE 00 CA 2B 0E FE 7F C2 3B 0E 2E 1F 7E FE 3A
0E30: C2 3B 0E 22 0B 00 2E 04 22 1A 00 21 23 01 22 01
0E40: 00 E9/

N.B. this version has now been corrected as I made a silly copy and paste error...thanks JDallas for picking up on that.

Nama
January 6th, 2015, 11:17 AM
Hi again,
Really appreciate you looking into this. Let me begin by saying I don't really know how to code, well, nothing beyond basic anyway, so probably much of this will be over my head.
I did just receive an email from Corey who says he has been able to replicate the issue on his machine. He is trying to track down the original source code.

Thanks again for your help.

Nama
January 6th, 2015, 02:11 PM
Next time you get on the system, you might dump more memory to the screen and see if something's there above. Perhaps that would require filling it with zeros or 11h so you could better see the unaffected blocks.

I'll try to give that a go this evening.

Just for your reference the game can be found here in .ent format.

http://www.sol20.org/stek/gamepac1/targ.ent

Cheers again

Nama
January 6th, 2015, 05:59 PM
oops...that may have been a copy and paste error. That's why I thought I should link to the original file.
Apologies for the confusion. Please ignore the version I posted here, and go with the version from the link.

Nama
January 6th, 2015, 08:31 PM
A quick note:
You may want to download Solace:
http://www.sol20.org/solace.html

It's a great little emulator.

When I get home I'll attach my CP/M disk image to this thread so you can see the issue first hand, and compare it to just loading the .ent file through the virtual serial port.

UPDATE: Seems I can't attach the file to this thread as it's too big.
Instead you can find my SVN files on my FTP site:

URL: ftp://neoncluster.com
USERNAME: user1@neoncluster.com
PASSWORD: user1

The SVN image with TARG.COM on it is this one:
/Sol 20/SVN's/CPM WORK DISK1.SVN

Nama
January 7th, 2015, 02:53 PM
UPDATE: I did a little disassembly last night while watching TV. Here's what I've got from the URL source:


Ha! looks like a labor of love. Good stuff!

Nama
January 8th, 2015, 04:50 PM
All good.
I've also been busy archiving and backing up some Ohio Scientific floppy disks, so I haven't had a chance to look at TARG in the last 2 days.
Also, as another side project, I'm trying to get a Morrow DJ2D board, and 8" drives working with my SOL-20.
Having multiple projects on the go keeps things fresh.

Thanks for the update.

Phil

JDallas
January 9th, 2015, 05:01 AM
As I just advised someone locally, don't throw away floppies that your floppy disk controller can no longer read. Unless its due to physical disintegration, they can be read by controllers that are designed read the floppy in another way. That's one of my side-projects. :)

deramp5113
January 9th, 2015, 06:04 PM
Disassembling the code at E18h, TARG is verifying that the SOLOS/CUTER ROM is present as pointed to by HL and that a couple of ROM entry points are as expected. These entry points are then copied into RAM at 0Bh-0Ch and another to 1Ah-1Bh.

My guess is that neither N*DOS or your "boot" utility in CP/M is setting up HL to point to the ROM base address as SOLOS/CUTER does when it jumps to a loaded program. When you manually patched the code in memory and then restarted it from SOLOS, HL then pointed to the ROM and TARG was happy.

I can duplicate your symptom by entering TARG with HL not pointing to the ROM at C000h. Assuming you'd rather not patch N*DOS or your CP/M "boot" utility, and assuming your SOLOS/CUTER ROM is at C000h, then you can permanently patch the TARG file on your disk to work as follows:

Change locations 0B-0C from 1C,00 to 1F,C0
Change locations 1A-1B from 60,E0 to 04,C0

Mike

Nama
January 10th, 2015, 08:57 AM
Hi Mike, Great stuff.
I'll try this out today, and let you know how I get on.

Cheers
phil

Nama
January 11th, 2015, 12:22 PM
Limited testing over the weekend, but I was able to modify the code as per your instructions, then save it to virtual CP/M disk in SOLace emulator. TARG was able execute from CP/M and everything seems to work fine. Next is to try in in N* DOS, and finally on a real machine with real disks.

Thanks again!!!!

UPDATE:
Tried this on my real SOL-20 + CP/M...works great!!!