tergav17 / IshkurCPM

An open source, modular CP/M distribution for the NABU computer
GNU General Public License v3.0
23 stars 3 forks source link

Problem copying files to an 'NFS' directory #12

Open snhirsch opened 1 year ago

snhirsch commented 1 year ago

If do pip test.com=ddt.com it chugs away for a bit and returns to the prompt with no error messages. Under CP/M dir fails to show the target file. If I look at the server directory from the host machine I see test.$$$. This is a temporary file created by pip that's normally renamed to the correct extension after copy succeeds. For whatever reason, that's not happening. A quick binary compare suggests the copy was indeed successful, with the output file showing some garbage at the very end (maybe from rounding up to next 128-byte record size?).

I suppose the failure of dir to show the temporary file could also be considered a bug.

Again, if I can get setup to build Ishkur on Linux and deploy to the nabunetwork.ca adapter I'd be delighted to help in debugging.

tergav17 commented 1 year ago

I just got the latest build of Ishkur working on NNS, which I am assuming you are using. I am also noticing that file renaming on this adapter simply does not work. PIP is able to copy the files as you mentioned, but never renames the "*.$$$" to its proper form. This is a bug that I am not able to replicate on nabud or the developer build of the nabunetwork.com adapter.

If I had to guess, I would say that NNS is not interpreting the "FILE_RENAME" NHACP operation correctly. I should probably bring this up to GryBsh.

snhirsch commented 1 year ago

Can you give me a step-by-step for deploying Ishkur? In the meantime I'll try nabud.

tergav17 commented 1 year ago

If you are using nabud. I can give you the exact workflow that I use to develop Ishkur.

  1. The first thing that you will need to do is configure nabud to point towards the boot program and define a NHACP directory. The nabud.conf file should be placed in /usr/local/etc. I'll paste the configuration that I use below:

    {
    "Sources": [
    {
      "Name": "Local",
      "Location": "/home/gcter/nabu",
    }
    ],
    "Channels": [
    {
      "Name": "nabu",
      "Number": 1,
      "Type": "nabu",
      "Source": "Local",
    }
    ],
    "Connections": [
    {
      "Type": "tcp",
      "Port": "5002",
      "Channel": 1,
          "StorageArea": "/home/gcter/nabu/nhacp",
    }
    ]
    }

    In my configuration, ~/nabu/nabu holds the homebrew boot program, and ~/nabu/nhacp holds the NHACP directory.

  2. I currently do all my development on Windows, so I have a batch script in the Ishkur repository that automatically builds everything and generates all disk images / output binaries. You can technically compile everything manually under Linux, but it would be painful. I have been meaning to write a proper bash script to build everything as well (that may be a good project for this weekend :) ).

  3. After everything is built, it needs to be copied from the Output directory into the nabud directories. I usually use a script to do this to, but it can be done manually. Note that the boot program is renamed to 000001.nabu:

    #!/bin/bash
    # This script will set up the nabud environment to use the latest NFS hybrid build
    cp c:/Projects/Nabu/IshkurCPM/Output/Nabu_NFS/NFS_HYBRID_BOOT.nabu ~/nabu/nabu/000001.nabu
    cp c:/Projects/NABU/IshkurCPM/Output/Nabu_NFS/NFS_HYBRID_CPM22.SYS ~/nabu/nhacp/A0/CPM22.SYS

You will still need software to test with. To make things convenient to you and anyone else who wants to set up a system from scratch, I placed an archive of software that I use to test stuff in the repository. It is all known to more or less work with Ishkur: https://github.com/tergav17/IshkurCPM/tree/main/Applications/Premade

snhirsch commented 1 year ago

After a bit of head-scratching, I have nabud working to serve Ishkur. The older distribution from my Internet Adapter 2.0 download boots and runs, showing the same issues I reported with wildcards and era unfortunately. Next, I attempt to deploy from the Ishkur project:

  1. Output/Nabu_NDSK/NDSK_BOOT.nabu ---> /home/hirsch/nabu/nabu/000001.nabu
  2. Output/Nabu_NDSK/NDSK_CPM22.SYS ---> /home/hirsch/nabu/nhacp/CPM22.SYS
  3. Output/Nabu_NDSK/NDSK_DEFAULT.IMG ---> /home/hirsch/nabu/nhacp/NDSK_A.img

Then I copied FONT.GRB from the older Ishkur to /home/hirsch/nabu/nhacp

The NABU just goes into an endless loop of attempting to start, failing, attempting, etc.

What did I miss?

snhirsch commented 1 year ago

Next attempt: Using the NFS flavor. Here's the directory layout:

nabu:
total 32
drwxrwxr-x   4 hirsch hirsch  4096 Jun 10 09:40 .
drwxr-xr-x 145 hirsch hirsch 20480 Jun 10 10:11 ..
drwxrwxr-x   2 hirsch hirsch  4096 Jun 10 09:54 nabu
drwxrwxr-x   4 hirsch hirsch  4096 Jun 10 10:06 nhacp

nabu/nabu:
total 12
drwxrwxr-x 2 hirsch hirsch 4096 Jun 10 09:54 .
drwxrwxr-x 4 hirsch hirsch 4096 Jun 10 09:40 ..
-rw-rw-r-- 1 hirsch hirsch  327 Jun  7 17:25 000001.nabu

nabu/nhacp:
total 8224
drwxrwxr-x 4 hirsch hirsch    4096 Jun 10 10:06 .
drwxrwxr-x 4 hirsch hirsch    4096 Jun 10 09:40 ..
drwxrwxr-x 2 hirsch hirsch    4096 Jun 10 10:09 A0
drwxrwxr-x 2 hirsch hirsch    4096 Jun 10 10:06 B0
-rw-rw-r-- 1 hirsch hirsch    8871 Jun  7 17:25 CPM22.SYS
-rw-rw-r-- 1 hirsch hirsch    2048 May 27 18:38 FONT.GRB
-rw-rw-r-- 1 hirsch hirsch 8388608 Jun 10 09:53 NDSK_B.IMG

nabu/nhacp/A0:
total 128
drwxrwxr-x 2 hirsch hirsch  4096 Jun 10 10:09 .
drwxrwxr-x 4 hirsch hirsch  4096 Jun 10 10:06 ..
-rw-rw-r-- 1 hirsch hirsch  8192 Apr  1 08:21 ASM.COM
-rw-rw-r-- 1 hirsch hirsch  8871 Jun  7 17:25 CPM22.SYS
-rw-rw-r-- 1 hirsch hirsch  5120 Apr  1 08:21 DDT.COM
-rw-rw-r-- 1 hirsch hirsch  6656 Apr  1 08:21 ED.COM
-rw-rw-r-- 1 hirsch hirsch  2048 Apr  1 08:21 FONT.GRB
-rw-rw-r-- 1 hirsch hirsch  1490 May 17 16:44 FUTIL.COM
-rw-rw-r-- 1 hirsch hirsch  1375 May 28 06:36 INIT.COM
-rw-rw-r-- 1 hirsch hirsch  2048 Apr  1 08:21 LOAD.COM
-rw-rw-r-- 1 hirsch hirsch 18432 Apr  1 08:21 OBASIC.COM
-rw-rw-r-- 1 hirsch hirsch  7424 Apr  1 08:21 PIP.COM
-rw-rw-r-- 1 hirsch hirsch  5376 Apr  1 08:21 STAT.COM
-rw-rw-r-- 1 hirsch hirsch  2176 May 21 16:13 SUBMIT.COM
-rw-rw-r-- 1 hirsch hirsch 18944 Apr  1 08:21 TE.COM
-rw-rw-r-- 1 hirsch hirsch  2304 Apr  1 08:21 XDIR.COM
-rw-rw-r-- 1 hirsch hirsch  4096 Apr  1 08:21 XSUB.COM

nabu/nhacp/B0:
total 8
drwxrwxr-x 2 hirsch hirsch 4096 Jun 10 10:06 .
drwxrwxr-x 4 hirsch hirsch 4096 Jun 10 10:06 ..

When I boot I see:

INIT?
A0>

'dir' shows no files.

What to try next?

Update: I think the build from Output/ is defective. If I use the NFS files from nns it all works properly. But, this version of Ishkur shows the era . issue - so perhaps not a server problem.

tergav17 commented 1 year ago

Looks like you are running into the same issue that seanrox was running into last night. Since it is not working on nabud either, I am betting that something is up with Ishkur itself. Frustratingly, I haven't been able to replicate it on my system just yet...

tergav17 commented 1 year ago

Update: This looks like it is an issue that only shows up on physical NABUs. The bug can't seem to be replicated on an emulator, which will made debugging a pain.

If you want a quick fix, try disabling interrupt in the config assembly file. By changing the ei to a di in wbinit:, everyone will go back to working as normal. All standard CP/M applications will continue to work, but some NABU specific stuff expects interrupts to be on by default.

I got some fun debugging ahead of me...

tergav17 commented 1 year ago

Alright, that specific bug has been fixed. Turns out interrupt behavior is subtly different on physical hardware versus an emulator.

snhirsch commented 1 year ago

Thanks! I was able to build the updated code under Linux (using my shell script since I don't think your Makefile is complete yet) and it booted up just fine. Still seeing the era *.* issue, however.

tergav17 commented 1 year ago

Yea, I am not sure what is up with the ERA . code either. Removing single files are files based on a pattern works, but it fails to work when the "All?" prompt shows up. I may have to delve into the CCP code for this one.

snhirsch commented 1 year ago

If the system modules were in relocatable object format it would be dirt-simple to plug in alternate CCPs. At a minimum consider using ZCPR1, since it doesn't require any outside resources. You get path search to A: for free, which makes the environment much nicer to work in.

tergav17 commented 1 year ago

I have been considering an upgrade to the toolchain. ZMAC is my top choice right now, but I learn more about ZMAC's capabilities and how I would migrate the current codebase over. The current ZASM stuff makes use of segmentation to set up different memory areas.

Even with the current toolchain, allowing for alternative CCPs shouldn't be too difficult. I have been meaning to move the CCP code out of CPM22.asm for awhile now. With that done, it would just be a matter of changing the #include headers in the config file. The current CCP has been hacked up a little bit already. The big change is to do with how commands are removed from the $$$.SUB file. I am not sure ZCPR1/3 does it, but the default method that the CCP uses is not compatible with NFS.

snhirsch commented 1 year ago

ZMAC supports named memory regions that are resolved at link time. Take a look at the Microsoft M80/L80 or SLR z80asm and slrnk docs.

ontheslab commented 1 month ago

Good evening all! Just thought I should chime in as we have been having the same issue. IshkurCP/M is being hosted on NNS and in both testing from MAME and a real NABU I have been getting the same. It happens when copying from drive to drive and in both pip and nsweep (big sweep user from the old days). In our testing we were trying to get the new "msx8" system going. While I was able to assembly the source to a com on the system I was not able to move it to another drive or move a rom file to it.