• Integrated development on emulators: The next step

    From D Finnigan@dog_cow@macgui.com to comp.sys.apple2.programmer,comp.emulators.apple2 on Tue Oct 7 14:47:12 2025
    From Newsgroup: comp.emulators.apple2

    Here's an idea for the Apple II emulator authors: why don't we have
    emulators with an integrated assembler? The assembler would produce object
    code copied directly in the RAM of the emulated machine. Or the object code would be copied to a ProDOS or DOS 3.3 disk image.

    Furthermore, why not integrate a C compiler or some other high-level
    language? Output options would be the same: the object could would be
    written directly to the emulated RAM, ready for execution. Or it could be copied to a disk image.

    I think that these features would speed up cross-development considerably.
    It would be a lot easier to interchange source files with the host
    environment, across the Internet, and in version control systems.
    --
    ]DF$
    The New Apple II User's Guide:
    https://macgui.com/newa2guide/

    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From Steve Nickolas@usotsuki@buric.co to comp.sys.apple2.programmer,comp.emulators.apple2 on Wed Oct 8 08:09:26 2025
    From Newsgroup: comp.emulators.apple2

    On Tue, 7 Oct 2025, D Finnigan wrote:

    Here's an idea for the Apple II emulator authors: why don't we have
    emulators with an integrated assembler? The assembler would produce object code copied directly in the RAM of the emulated machine. Or the object code would be copied to a ProDOS or DOS 3.3 disk image.

    Furthermore, why not integrate a C compiler or some other high-level language? Output options would be the same: the object could would be
    written directly to the emulated RAM, ready for execution. Or it could be copied to a disk image.

    I think that these features would speed up cross-development considerably.
    It would be a lot easier to interchange source files with the host environment, across the Internet, and in version control systems.

    One of my abandoned projects, which was written by me and Holger Picker, actually did have an integrated assembler and even used it to roll the
    slot ROMs on the fly. I thought of rewriting the code so it wasn't just a binary blob, but never got around to it.

    Now that I have other content, like Gameware, and most of FPBASIC is fair game, this could be extended even further.

    -uso.
    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From kegs@kegs@provalid.com (Kent Dickey) to comp.sys.apple2.programmer,comp.emulators.apple2 on Wed Oct 8 19:38:37 2025
    From Newsgroup: comp.emulators.apple2

    In article <alpine.DEB.2.21.2510080804400.25129@sd-119843.dedibox.fr>,
    Steve Nickolas <usotsuki@buric.co> wrote:
    On Tue, 7 Oct 2025, D Finnigan wrote:

    Here's an idea for the Apple II emulator authors: why don't we have
    emulators with an integrated assembler? The assembler would produce object >> code copied directly in the RAM of the emulated machine. Or the object code >> would be copied to a ProDOS or DOS 3.3 disk image.

    Furthermore, why not integrate a C compiler or some other high-level
    language? Output options would be the same: the object could would be
    written directly to the emulated RAM, ready for execution. Or it could be
    copied to a disk image.

    I think that these features would speed up cross-development considerably. >> It would be a lot easier to interchange source files with the host
    environment, across the Internet, and in version control systems.

    One of my abandoned projects, which was written by me and Holger Picker, >actually did have an integrated assembler and even used it to roll the
    slot ROMs on the fly. I thought of rewriting the code so it wasn't just a >binary blob, but never got around to it.

    Now that I have other content, like Gameware, and most of FPBASIC is fair >game, this could be extended even further.

    -uso.

    There are other ways to get into and out of emulators. You can use
    Ethernet to mount an SMB volume, and dynamically change files from your
    host computer. This is https://github.com/sheumann/smbfst, but is IIgs
    only. I'm not sure what else is there, if you can take the time to set
    up a Netatalk server, using Ethernet emulation can let you mount APFS
    file servers (this seems to be tricky to setup, though).

    Most emulators allow easy loading of external files into memory, and
    this can be scripted. So you build on your host machine, then load
    the binary into the emulator.

    Tools like CiderPress2 https://github.com/fadden/CiderPress2 and
    Cadius https://brutaldeluxe.fr/products/crossdevtools/cadius/index.html
    allow easy creation of ProDOS volumes of files from your host system.

    KEGS allows mounting a directory on your computer as a ProDOS volume, where
    it is just a plain ProDOS volume to any emulated code. I called it
    DynaPro. You need to restart emulation if you change a file, to make sure
    it sees the change. As best as I can tell, no one uses it.

    Kent

    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From D Finnigan@dog_cow@macgui.com to comp.sys.apple2.programmer,comp.emulators.apple2 on Tue Oct 14 19:18:02 2025
    From Newsgroup: comp.emulators.apple2

    Kent Dickey wrote:

    Most emulators allow easy loading of external files into memory, and
    this can be scripted. So you build on your host machine, then load
    the binary into the emulator.


    That's true, and that would be a good starting point for some extensions to
    aid development. But imagine a closely-coupled assembler where you could set
    a breakpoint in the source file, and then start the emulated machine
    running. As soon as execution reaches that breakpoint, there is a marker in
    the source, and you can single step through the object code and see all register values, etc. No more tracing through the Monitor, instead you trace through your assembly source.
    --
    ]DF$
    The New Apple II User's Guide:
    https://macgui.com/newa2guide/

    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From Hugh Hood@hughhood@earthlink.net to comp.sys.apple2.programmer,comp.emulators.apple2 on Wed Oct 15 23:28:35 2025
    From Newsgroup: comp.emulators.apple2

    On 10/8/2025 2:38 PM, Kent Dickey wrote:

    KEGS allows mounting a directory on your computer as a ProDOS
    volume, where it is just a plain ProDOS volume to any emulated
    code. I called it DynaPro. You need to restart emulation if you
    change a file, to make sure it sees the change. As best as I can
    tell, no one uses it.


    Kent,

    I've got a DynaPro folder for KEGS on my MacOS install.

    The main reason I use it infrequently (whether to put files into KEGS or get files out of KEGS) is due to the loss of ProDOS file type attributes (file type / aux type).

    I think at one time we may have discussed your adding attribute preservation, and that it would require KEGS implementing xattrs or named streams (or MacOS metadata), and that you didn't see that demand for that particular feature justifying the time required to implement it, which I can certainly understand.





    Hugh Hood
    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From kegs@kegs@provalid.com (Kent Dickey) to comp.sys.apple2.programmer,comp.emulators.apple2 on Mon Oct 20 19:05:53 2025
    From Newsgroup: comp.emulators.apple2

    In article <10cps9j$52ns$1@dont-email.me>,
    Hugh Hood <hughhood@earthlink.net> wrote:
    On 10/8/2025 2:38 PM, Kent Dickey wrote:

    KEGS allows mounting a directory on your computer as a ProDOS
    volume, where it is just a plain ProDOS volume to any emulated
    code. I called it DynaPro. You need to restart emulation if you
    change a file, to make sure it sees the change. As best as I can
    tell, no one uses it.


    Kent,

    I've got a DynaPro folder for KEGS on my MacOS install.

    The main reason I use it infrequently (whether to put files into KEGS or
    get files out of KEGS) is due to the loss of ProDOS file type attributes >(file type / aux type).

    I think at one time we may have discussed your adding attribute
    preservation, and that it would require KEGS implementing xattrs or
    named streams (or MacOS metadata), and that you didn't see that demand
    for that particular feature justifying the time required to implement
    it, which I can certainly understand.

    Hugh Hood

    To be clear, KEGS maintains all ProDOS attributes. But it does it using Cadius-style or "ProDOS" style filenames. The file STARTUP of type BAS
    on ProDOS is named START,tbas on your hostmachine. Or a UTILS file of type
    BIN file that loads at $300 is named UTILS,tbin,a$300. Cadius
    style extensions like UTILS#060300 are supported as inputs as well.
    And some file extensions, like .SYSTEM imply the type and so don't need
    to be given, so BASIC.SYSTEM is stored as BASIC.SYSTEM,a$0000 (since ,tssys
    is implied).

    What I think you were asking for was that on a Mac, to maintain the
    type in a Mac-specific way (I believe Finder-info on the Mac can encode
    some ProDOS types). And I said I didn't really see the value of this,
    but I could be convinced.

    Kent
    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From Hugh Hood@hughhood@earthlink.net to comp.emulators.apple2 on Mon Oct 20 22:49:26 2025
    From Newsgroup: comp.emulators.apple2

    On 10/20/2025 2:05 PM, Kent Dickey wrote:

    What I think you were asking for was that on a Mac, to maintain the
    type in a Mac-specific way (I believe Finder-info on the Mac can encode
    some ProDOS types). And I said I didn't really see the value of this,
    but I could be convinced.


    First, thanks for remaining open to being convinced. Whether I'm able to do that may depend on the percentage of KEGS users running under MacOS vs. the percentage of KEGS users running under Windows, and of course the amount of time you feel it would take to implement.

    Under MacOS, both Kelvin Sherlock's Shrink-Fit X (opens and extracts NuFX (ShrinkIt) files) and his ProFUSE 2.0 ProDOS file system FUSE (mounts a ProDOS disk image as a server volume) maintain the ProDOS attributes using the Finder-info method, which you mentioned in your reply.

    Also, Mark Lim's CiderXPress (a Mac port of many ProDOS image file features from CiderPress based on Andy's code) and NuShrinkItX (similar to Kelvin's Shrink-Fit X) also maintain the ProDOS attributes using the Finder-info method.

    It would be nice to be able to seamlessly move ProDOS files into and out of KEGS using your DynaPro folder.

    As it is now, you've got to fool with changing the ProDOS attributes after-the-fact, either within KEGS on the emulated IIgs (on transfers IN) or within a MacOS application (or by using a custom AppleScript) (on transfers OUT).

    {As a side note: I think Kelvin once mentioned being able to do something similar on Windows using named streams, but AFAIK, CiderPress(2) doesn't support that, so there's probably no point}.

    It's just something to think about. Besides I'm still so grateful for the direct IP printing feature you added to KEGS. It makes me think I'm actually using a real IIgs. Plus, I've set one of the serial ports set up to connect with a socat server daemon so I have access to the MacOS terminal Unix command line from within the IIgs (primarily using ProTERM 3.1). Neat stuff.




    Hugh Hood


    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From Noncho Savov@user10020@newsgrouper.org.invalid to comp.sys.apple2.programmer,comp.emulators.apple2 on Sun Oct 26 20:49:14 2025
    From Newsgroup: comp.emulators.apple2


    kegs@provalid.com (Kent Dickey) posted:

    In article <alpine.DEB.2.21.2510080804400.25129@sd-119843.dedibox.fr>,
    Steve Nickolas <usotsuki@buric.co> wrote:
    On Tue, 7 Oct 2025, D Finnigan wrote:

    Here's an idea for the Apple II emulator authors: why don't we have
    emulators with an integrated assembler? The assembler would produce object >> code copied directly in the RAM of the emulated machine. Or the object code
    would be copied to a ProDOS or DOS 3.3 disk image.

    Furthermore, why not integrate a C compiler or some other high-level
    language? Output options would be the same: the object could would be
    written directly to the emulated RAM, ready for execution. Or it could be >> copied to a disk image.

    I think that these features would speed up cross-development considerably. >> It would be a lot easier to interchange source files with the host
    environment, across the Internet, and in version control systems.

    One of my abandoned projects, which was written by me and Holger Picker, >actually did have an integrated assembler and even used it to roll the >slot ROMs on the fly. I thought of rewriting the code so it wasn't just a >binary blob, but never got around to it.

    Now that I have other content, like Gameware, and most of FPBASIC is fair >game, this could be extended even further.

    -uso.

    There are other ways to get into and out of emulators. You can use
    Ethernet to mount an SMB volume, and dynamically change files from your
    host computer. This is https://github.com/sheumann/smbfst, but is IIgs
    only. I'm not sure what else is there, if you can take the time to set
    up a Netatalk server, using Ethernet emulation can let you mount APFS
    file servers (this seems to be tricky to setup, though).

    Most emulators allow easy loading of external files into memory, and
    this can be scripted. So you build on your host machine, then load
    the binary into the emulator.

    Tools like CiderPress2 https://github.com/fadden/CiderPress2 and
    Cadius https://brutaldeluxe.fr/products/crossdevtools/cadius/index.html
    allow easy creation of ProDOS volumes of files from your host system.

    KEGS allows mounting a directory on your computer as a ProDOS volume, where it is just a plain ProDOS volume to any emulated code. I called it
    DynaPro. You need to restart emulation if you change a file, to make sure
    it sees the change. As best as I can tell, no one uses it.

    Kent


    I've set up a project template that lets you assemble Apple II programs
    on a modern computer using Merlin32.
    It automatically injects the resulting binaries into a disk image via AppleCommander, and then launches on the Will Scullin's web based emulator.
    The emulator linked in the project is a fork, where I've made a few modifications to improve its graphical capabilities - handy for testing different video modes like Composite, RGB and video card displays.
    There is also an option to launch AppleWin, since the web emulator doesn't quite handle the more timing sensitive stuff like Vapor Lock,
    although the AppleWin integration doesn't yet support live-reload.
    Link: https://github.com/foumart/AppleII.Project.template
    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From Christopher G. Mason@cgm1@my-deja.com to comp.emulators.apple2 on Sun Nov 2 16:13:02 2025
    From Newsgroup: comp.emulators.apple2

    On 10/20/2025 11:49 PM, Hugh Hood wrote:
    On 10/20/2025 2:05 PM, Kent Dickey wrote:

    What I think you were asking for was that on a Mac, to maintain the
    type in a Mac-specific way (I believe Finder-info on the Mac can encode
    some ProDOS types).-a And I said I didn't really see the value of this,
    but I could be convinced.


    {As a side note: I think Kelvin once mentioned being able to do
    something similar on Windows using named streams, but AFAIK,
    CiderPress(2) doesn't support that, so there's probably no point}.

    The GSplus emulator does this already. Microsoft specified two NTFS ADS
    types for FinderInfo and resource fork storage with Services for
    Macintosh in Windows NT. Apple still uses this support with their native
    SMB client. The SMB client for the IIgs uses these too.

    On macOS, the 32byte FinderInfo is abstracted as an extended attribute
    called "com.apple.FinderInfo", while the resource fork is abstracted as "com.apple.ResourceFork". Alternatively, you can access the resource
    fork using standard streams by appending "/..namedfork/rsrc" to the path
    of your file.

    Apple specified a standard way of storing ProDOS filetype/auxtype as
    Macintosh filetype/creator in "Inside AppleTalk".
    --- Synchronet 3.21a-Linux NewsLink 1.2