Author Topic: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers  (Read 49433 times)

Offline nanopico

  • Moderator
  • Platinum Member (500+ Posts)
  • *****
  • Posts: 720
Re: 1.5GB Limit (some answers)
« Reply #75 on: August 30, 2016, 12:27:44 PM »
Here's some good news.
I've written a set of tools for doing some of the work ELN and I have been working on.
Not all of the tools I'm working on are complete, but they are far enough along that I can start using them to find out internals of the System file.

So there are a bunch of function in the PrivateInterfaceLib and MemoryMgr libraries related to handling the System heap and Process Manager heap and the border between them.  I have now been able to make some calls to a few of these functions.  As of the moment, with out knowing the parameters, they all do nothing.  I also don't know the order to call them in yet. 
Now I just have to finish my tools so I can determine the parameters and calling order. 

Hooray Progress!
If it ain't broke, don't fix it, or break it so you can fix it!

Offline nanopico

  • Moderator
  • Platinum Member (500+ Posts)
  • *****
  • Posts: 720
Re: 1.5GB Limit (some answers)
« Reply #76 on: August 30, 2016, 01:59:40 PM »
I had to share this.  It's too amusing.
So in trying to figure out the right combination of calls and parameters I managed to lock up sheepshaver, but not before getting this screen shot.
Apparently I'm able to at least totally mess up the system and process manager zone boundaries.

Now if you have issues with the 512 MB lost when 2 GB is installed, then be warned.

I'm not even sure how the math works out to get these numbers, but the system taking up 3.65 GB when only 512 MB is installed, is totally crazy!
If it ain't broke, don't fix it, or break it so you can fix it!

Offline DieHard

  • Administrator
  • Platinum Member (500+ Posts)
  • *****
  • Posts: 1678
Re: 1.5GB Limit (some answers)
« Reply #77 on: August 30, 2016, 06:22:26 PM »
Wow.. what a RAM pig... I never realized that Mac OS 9 used so much RAM...lol

Offline nanopico

  • Moderator
  • Platinum Member (500+ Posts)
  • *****
  • Posts: 720
Re: 1.5GB Limit (some answers)
« Reply #78 on: August 30, 2016, 08:08:08 PM »
Wow.. what a RAM pig... I never realized that Mac OS 9 used so much RAM...lol

And it can also create RAM out of thin air.


Okay so more updates now that I am at home.

As I assumed earlier when you view About This Mac and see the 550ish allocated to Mac OS and pretty much 1.5 GB for everything else that this was because it took the total amount of RAM and subtract size of the process manager to determine the size to show as Mac OS.    Well my hand little tool confirmed this.  So as of right now I'm pretty confident in this view.
I was able to see that About This Mac showed 560 MB allocated to Mac OS, but the Heap size was only 48 MB (560 - 512) and 8 KB was free in the heap.  So basically everything between the system heap and the process manager heap is in limbo. 
Now to trick the System into giving me a handle to the process manager zone so I can grow that beyond the 1.5 GB limit.
If it ain't broke, don't fix it, or break it so you can fix it!

Offline nanopico

  • Moderator
  • Platinum Member (500+ Posts)
  • *****
  • Posts: 720
Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
« Reply #79 on: September 15, 2016, 09:59:53 AM »
I'm going to back track a bit. Moving the point that the system and process manager join probably won't fix this.
I'm back to the view that the 512 (or something close to that) is sitting above everything else high in ram that not allocated and not in any process/library/managers control.  So I'm back to thinking that when the process manager starts it is just not given all available ram even though the system has it available.

I did find something that looks like it might be setting this value to just some random number that some software engineer picked as "this looks big enough" and it never got updated.  So there may be absolutely no reason that the limit exists other than someone like the number and it was big enough at the time.

So I may have more to report in the not too distant future (I'm pretty busy right now so I'm a little slow on this stuff), but the good news is that I think it's getting close to being fixed, maybe.

Oh and I did find out how to get a handle to the process manager heap, in case anyone is wondering.
If it ain't broke, don't fix it, or break it so you can fix it!

Offline nanopico

  • Moderator
  • Platinum Member (500+ Posts)
  • *****
  • Posts: 720
Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
« Reply #80 on: November 02, 2016, 09:05:36 PM »
OMG

Basic memory map for any one that cares. 
Assume 2 GB of ram installed.
Assume your system heap with your extensions and all that fun jazz takes 32 MB.
System zones and heaps set up at address 0 and use up to 32 MB
Process manager zone created at 1.5 GB and grows down to meet the system. (1.5 GB - 32 GB)
About this mac should now show show 32 MB for Mac OS and 1.5 GB - 32 MB for free space.
But it shows 1.5 GB - 32 MB as free space and then 32 MB + 512 MB for the Mac OS.
Alright back to the memory map (it's generalized here, but if you want more details I can post the full map of my system)

  • 0 - 32 MB system
  • 32 MB - 1.5 GB Process Manager
  • 1.5 GB - 3.75 GB not accessible. Can not read or write to anything in that range
  • 3.75 GB - 4 GB readable and writeable and if you do either your system will crash as this appears to be mappings for the hardware addresses and registers

Point is to fix this bug ( do consider this a bug ) The early boot that sets up the MMU in the cpu needs to map out the additional 512 MB so it's accessible and the process manager needs to be told to start at 2 GB and grow down. Since everything is relocatable with in the process manager (if it wasn't we'd all be stuck with like 32 mb of RAM) and that 512 MB of missing memory isn't currently mapped, this should cause almost no problems going forward.

So on to the two things that need to be found to fix this.
If it ain't broke, don't fix it, or break it so you can fix it!

Offline nanopico

  • Moderator
  • Platinum Member (500+ Posts)
  • *****
  • Posts: 720
Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
« Reply #81 on: November 03, 2016, 08:02:39 AM »
Mild update.

Eln kindly pointed out to me in our most recent conversation there are two things mapped just over the 1.5GB mark. I had forgotten about this so it changes things, but only slightly.  So we are looking into how to move those and then see what happens with the creation of the process manager and possible having to update one value there.
So good news is....    This is becoming more of a reality
If it ain't broke, don't fix it, or break it so you can fix it!

Offline ELN

  • Gold Member (200+ Posts)
  • *****
  • Posts: 290
  • new to the forums
Re: 1.5GB Limit (some answers)
« Reply #82 on: November 13, 2016, 06:20:44 AM »
but a few guys scratchin at notepad on a forums site can do it when the real pros couldnt? :) i dunno guys...

We are disassembling and patching the Nanokernel.

https://github.com/elliotnunn/cdg5/blob/master/kernel-disasm-script.py

Online Protools5LEGuy

  • Global Moderator
  • Platinum Member (500+ Posts)
  • *****
  • Posts: 2252
Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
« Reply #83 on: November 15, 2016, 08:16:28 AM »
We are very pleased to have the Dream Team among us!

The troll has been kicked out.

99% Mac OS 9 Lives! users love every little update on these topics.
Looking for MacOS 9.2.4

Offline nanopico

  • Moderator
  • Platinum Member (500+ Posts)
  • *****
  • Posts: 720
Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
« Reply #84 on: November 16, 2016, 06:32:31 AM »
    We are very pleased to have the Dream Team among us!

    The troll has been kicked out.

    99% Mac OS 9 Lives! users love every little update on these topics.

    Updates with progress towards the goal may slow for a bit.  We are rewriting some tools so that we can do the entire process in OS 9.
    Yes we are crazy enough to do the whole thing using MPW.  So while we retool we might not see much in the way of a functional result.

    And if any one would like to help out, I am looking to verify the memory map as we believe it to be.
    Even though I am testing and working on this on 23 different Macs I am looking for anyone who want's to help as I have several that are same model and there are still others I don't have. I'd like to get details from a variety of machines with and with out 2GB installed.

    So here are the instructions.
    • Install Macsbug
            
      • Download macsbug
      • Put it in your system folder
      • Reboot
         
    •       Press command + the power button (both at the same time).  This gets you into macsbug
         
    •       type

            log memoryMap
         
    •       Type the following

            dm 5FFFe000 FF0

            It will pause for a moment at that point type

            command + space
         
    • once the last command finishes type
            
               dm 68000000 ffff0
            
            again when it pauses type

                             command + space
         
    • type

            log
         
    • type the letter g and your good to go

    You can now uninstall macsbug by deleting it from the system folder and rebooting

    You do need to hit enter after every command (I'm hoping that is obvious to everyone, but who knows)

    You will now have a file called memoryMap on your desktop. If you would be so kind as to send that file to me, that would be awesome.

    I may ask again for some of you to help in verifing the hardware pci range mapping, but that is a bit harder to put into easy commands as each machine has different hardware so the ranges are different and it's a lot of trial and error to get the range.
    [/list]
    If it ain't broke, don't fix it, or break it so you can fix it!

    Online Protools5LEGuy

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2252
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #85 on: November 16, 2016, 08:17:55 PM »

    Yes we are crazy enough to do the whole thing using MPW.  So while we retool we might not see much in the way of a functional result.

    So here are the instructions.

       Install Macsbug
          
       

    Is this version?

    http://macos9lives.com/smforum/index.php/topic,3565.0.html

    http://macintoshgarden.org/apps/macsbug-663
    Looking for MacOS 9.2.4

    Offline nanopico

    • Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 720
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #86 on: November 17, 2016, 05:58:28 AM »

    Yes we are crazy enough to do the whole thing using MPW.  So while we retool we might not see much in the way of a functional result.

    So here are the instructions.

       Install Macsbug
          
       

    Is this version?

    http://macos9lives.com/smforum/index.php/topic,3565.0.html

    http://macintoshgarden.org/apps/macsbug-663

    Yes that one.
    Sorry I should have gave a link to that.
    If any instructions are not clear to anyone, please let me know and I'll update them.
    I don't want anyone to feel they can't help.
    If it ain't broke, don't fix it, or break it so you can fix it!

    Offline LillyOmegaWolf

    • Valued Member (10+ Posts)
    • **
    • Posts: 18
    • OS9 and SL forever :)
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #87 on: March 06, 2017, 11:09:21 PM »
    Still need someone to trial it too? Or am I a bit late to the party?
    I would love to get the full 2gb of ram working on my G4, if only because I enjoy tweaking and pushing limits :)  so Im happy to copy a new install onto a spare drive and test if you still need testers.
    Filmmaker, FCPX editor, Hackintosh user and classic Mac enthusiast.

    Offline InspectorG

    • Valued Member (10+ Posts)
    • **
    • Posts: 12
    • Total Mac Addict
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #88 on: March 06, 2017, 11:47:25 PM »
    Still need someone to trial it too? Or am I a bit late to the party?
    I would love to get the full 2gb of ram working on my G4, if only because I enjoy tweaking and pushing limits :)  so Im happy to copy a new install onto a spare drive and test if you still need testers.

    Same here!

    Offline nanopico

    • Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 720
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #89 on: March 07, 2017, 04:59:25 AM »
    Still need someone to trial it too? Or am I a bit late to the party?
    I would love to get the full 2gb of ram working on my G4, if only because I enjoy tweaking and pushing limits :)  so Im happy to copy a new install onto a spare drive and test if you still need testers.

    Same here!

    There isn't anything to test at the moment.
    The primary factor limiting the memory is thought to have been identified, but not confirmed as work has to be done to move some things in the OS.
    As of yesterday I am not working on this for an unknown length of time.  ELN has picked up on this and is running with it along with another fine guy, I'm not sure if it's cool to identify him so right now I'm just going to call him awesome dude.
    All is still moving forward, but don't expect to hear anything from me for god knows when.
    If it ain't broke, don't fix it, or break it so you can fix it!

    Offline LillyOmegaWolf

    • Valued Member (10+ Posts)
    • **
    • Posts: 18
    • OS9 and SL forever :)
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #90 on: March 07, 2017, 02:07:11 PM »
    Well you have put a lot of work into this. So I can understand a break, especially if theres two awesome dudes who have taken this up.
    Filmmaker, FCPX editor, Hackintosh user and classic Mac enthusiast.

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    First limit-breaking ROM: testers needed
    « Reply #91 on: May 24, 2017, 06:18:07 AM »
    All right, here goes. In the spirit of working in the open:

    I think I have broken the 1.5 GB limit...

    ...by 64 MB.

    So now it's the 1.5625 GB limit. But it's definitely a start. First, some explanation.

    Before the Trampoline (an ELF-contained bootloader inside the Mac OS ROM file) hands control to the NanoKernel, it populates some data structures that describe many levels of the Mac OS environment. The NanoKernel pays the most attention to ConfigInfo, a structure that was formerly part of the RISC ROM but became a dynamic structure on NewWorld Macs. One of the jobs of ConfigInfo is to tell the NanoKernel how to lay out the address space of the blue task. ConfigInfo instructs the NanoKernel to make the main area, starting at address zero, as large as possible given the RAM available. If "Virtual Memory" is enabled then this area will be expanded later in the boot process, at the command of the 68k boot code. But ConfigInfo also instructs the NanoKernel to create these small special-purpose areas:
    Code: [Select]
    5fffe000-5fffefff InfoRecord page: contains pointers to structures shared by kernel and userspace
    64000000-6417ffff Open Firmware device tree, and Mac II-style "Universal" structures
    68fef000-68feffff ConfigInfo
    68ffe000-68ffefff Kernel Data Page (kernel actually expands this to ~68ff5000-68ffefff)
    68fff000-68ffffff Emulator Data Page

    Other areas in the 6 segment are configured differently. The addresses listed might be familiar to anyone who's looked at the NanoKernel log before. But notice in the attached screenshot that the 5fffe000 area is missing, and a 6fffe000 area is present instead. That is because I have inserted code into the NanoKernel that reads the Trampoline's PageMap and edits it. For the curious, here is that code:

    Code: [Select]
    macro
    PutPMDT &w1, &w2
    lisori r31, &w1
    stwx r31, r20, r21
    addi r21, r21, 4
    lisori r31, &w2
    stwx r31, r20, r21
    addi r21, r21, 4
    endm


    macro
    StartSeg &s
    stw r21, NKConfigurationInfo.SegMap32SupInit + 8*&s(r3)
    stw r21, NKConfigurationInfo.SegMap32UsrInit + 8*&s(r3)
    stw r21, NKConfigurationInfo.SegMap32CPUInit + 8*&s(r3)
    stw r21, NKConfigurationInfo.SegMap32OvlInit + 8*&s(r3)
    endm

    macro
    SpecialArea &a
    stw r21, NKConfigurationInfo.PageMap&a.Offset(r3)
    endm


    if RedRover & !Vanilla

    ; INIT
    lwz r20, NKConfigurationInfo.PageMapInitOffset(r3)
    add r20, r20, r3
    li r21, 0

    lwz r29, NKConfigurationInfo.SegMaps + 8*6(r3)
    add r29, r29, r20 ; r20 being the base of the pagemap
    subi r29, r29, 8

    @nt6 lwzu r28, 8(r29)
    srwi r28, r28, 28
    cmpwi r28, 4
    bne @nt6
    lwz r28, 0(r29)
    lwz r29, 4(r29)
    ; Now r28/r29 are the 64000000 entry!
    ; (Important because its physical address and size vary)


    ; Vanilla page table (probably doesn't vary much between NW Macs)

    ; StartSeg 0x0
    ; PutPMDT 0x0000ffff, 0x00000a00
    ; PutPMDT 0x0000ffff, 0x00000a00
    ;
    ; StartSeg 0x1
    ; PutPMDT 0x0000ffff, 0x00000a00
    ; PutPMDT 0x0000ffff, 0x00000a00
    ;
    ; StartSeg 0x2
    ; PutPMDT 0x0000ffff, 0x00000a00
    ; PutPMDT 0x0000ffff, 0x00000a00
    ;
    ; StartSeg 0x3
    ; PutPMDT 0x0000ffff, 0x00000a00
    ; PutPMDT 0x0000ffff, 0x00000a00
    ;
    ; StartSeg 0x4
    ; PutPMDT 0x0000ffff, 0x00000a00
    ; PutPMDT 0x0000ffff, 0x00000a00
    ;
    ; StartSeg 0x5
    ; PutPMDT 0x0000fffd, 0x00000a00
    ; PutPMDT 0x0000fffd, 0x00000a00
    ; SpecialArea IRP
    ; PutPMDT 0xfffe0000, 0x00000012
    ; PutPMDT 0x0000ffff, 0x00000a00
    ; PutPMDT 0x0000ffff, 0x00000a00
    ;
    ; StartSeg 0x6
    ; stwx r28, r20, r21
    ; addi r21, r21, 4
    ; stwx r29, r20, r21
    ; addi r21, r21, 4
    ; PutPMDT 0x8fef0000, 0x00003013
    ; SpecialArea KDP
    ; PutPMDT 0x8ffe0000, 0x00000011
    ; SpecialArea EDP
    ; PutPMDT 0x8fff0000, 0x00000012
    ; PutPMDT 0x0000ffff, 0x00000a01
    ; PutPMDT 0x0000ffff, 0x00000a01
    ; PutPMDT 0x0000ffff, 0x00000a00
    ;
    ; StartSeg 0x7
    ; PutPMDT 0x0000ffff, 0x00000a01
    ; PutPMDT 0x0000ffff, 0x00000a01
    ; PutPMDT 0x0000ffff, 0x00000a00
    ;


    ; Don't forget to patch logical address fields:
    lisori r31, 0x6fffe000
    stw r31, NKConfigurationInfo.LA_InfoRecord(r3)


    StartSeg 0x0
    PutPMDT 0x0000ffff, 0x00000a00
    PutPMDT 0x0000ffff, 0x00000a00

    StartSeg 0x1
    PutPMDT 0x0000ffff, 0x00000a00
    PutPMDT 0x0000ffff, 0x00000a00

    StartSeg 0x2
    PutPMDT 0x0000ffff, 0x00000a00
    PutPMDT 0x0000ffff, 0x00000a00

    StartSeg 0x3
    PutPMDT 0x0000ffff, 0x00000a00
    PutPMDT 0x0000ffff, 0x00000a00

    StartSeg 0x4
    PutPMDT 0x0000ffff, 0x00000a00
    PutPMDT 0x0000ffff, 0x00000a00

    StartSeg 0x5
    PutPMDT 0x0000ffff, 0x00000a00
    PutPMDT 0x0000ffff, 0x00000a00

    StartSeg 0x6
    PutPMDT 0x00003fff, 0x00000a00
    PutPMDT 0x00003fff, 0x00000a00

    stwx r28, r20, r21 ; Name Registry
    addi r21, r21, 4
    stwx r29, r20, r21
    addi r21, r21, 4

    PutPMDT 0x8fef0000, 0x00003013 ; ConfigInfo

    SpecialArea KDP
    PutPMDT 0x8ffe0000, 0x00000011
    SpecialArea EDP
    PutPMDT 0x8fff0000, 0x00000012
    SpecialArea IRP
    PutPMDT 0xfffe0000, 0x00000012

    PutPMDT 0x0000ffff, 0x00000a01
    PutPMDT 0x0000ffff, 0x00000a01
    PutPMDT 0x0000ffff, 0x00000a00

    StartSeg 0x7
    PutPMDT 0x0000ffff, 0x00000a01
    PutPMDT 0x0000ffff, 0x00000a01
    PutPMDT 0x0000ffff, 0x00000a00


    ; Later parts of the table
    ; (definitely vary between machines)

    ; StartSeg 0x8
    ; PutPMDT 0x0000ffff, 0x8000003a
    ; PutPMDT 0x0000ffff, 0x80000a01
    ; PutPMDT 0x0000ffff, 0x00000a00

    ; StartSeg 0x9
    ; PutPMDT 0x0000000f, 0x9000003a
    ; PutPMDT 0x0020001f, 0x9002003a
    ; PutPMDT 0x80007fff, 0x98000032
    ; PutPMDT 0x0000ffff, 0x90000a01
    ; PutPMDT 0x0000ffff, 0x00000a00

    ; StartSeg 0xa
    ; PutPMDT 0x0000ffff, 0xa0000a01
    ; PutPMDT 0x0000ffff, 0x00000a00

    ; StartSeg 0xb
    ; PutPMDT 0x0000ffff, 0xb0000a01
    ; PutPMDT 0x0000ffff, 0x00000a00

    ; StartSeg 0xc
    ; PutPMDT 0x0000ffff, 0xc0000a01
    ; PutPMDT 0x0000ffff, 0x00000a00

    ; StartSeg 0xd
    ; PutPMDT 0x0000ffff, 0xd0000a01
    ; PutPMDT 0x0000ffff, 0x00000a00

    ; StartSeg 0xe
    ; PutPMDT 0x0000ffff, 0xe0000a01
    ; PutPMDT 0x0000ffff, 0x00000a00

    ; StartSeg 0xf
    ; PutPMDT 0x0000ffff, 0xf000003a
    ; PutPMDT 0x0000ffff, 0xf0000a01
    ; PutPMDT 0x0000ffff, 0x00000a00

    ;stw r21, NKConfigurationInfo.PageMapInitSize(r3)
    li r20, 0
    li r21, 0
    li r31, 0

    endif

    The effect of the patch is to move the InfoRecord page from the 5 segment to the equivalent location in the 6 segment, and to expand the blue area up to the bottom of the next obstacle, at 64000000. This is a difference of 64 MB.

    On its own, this patch crashes my Power Mac (even though it only has 256 MB). This is because the 68k Emulator, which lives in ROM just a few KB north of the NanoKernel, contains a hardcoded constant, 5fffe000, which it uses to fetch the LogicalMemorySize from the NanoKernel's SystemInfo structure. I changed that, and all was well. (Hopefully there are no more subtle crashes waiting to strike. Well-written software should use the NKLocateInfoRecord kernel call instead of hardcoding that location.)

    Interestingly, the patch alone did not crash QEMU. QEMU is currently my only way to start Mac OS 9 with the full 2 GB of RAM. (By the way, anyone want to send me 2 GB that will work in my FW800 MDD? I'm hopeless with hardware.) QEMU does not start the Dynamic Recompiling function of the emulator, which is the part that contains the hardcoded constant. I am not yet sure why.

    So that's one down and

    So, I need testers with 2 GB Macs running Mac OS 9.2.2. Attached is a Mac OS ROM file and a copy of NKLogReader. First, dump the log output of your normal kernel. Then, install the patched Mac OS ROM file. If you get a crash on boot, please take a picture of the kernel log. If it boots up, please get a screenshot of the Finder About window and a kernel dump.

    Soon we might bust the 1.5 GB limit completely. Good luck, and have fun.

    Online Protools5LEGuy

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2252
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #92 on: May 24, 2017, 08:00:47 AM »
    Are this 64Mb able to be used as a RAM disk?
    Looking for MacOS 9.2.4

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #93 on: May 24, 2017, 08:50:32 AM »
    The system should see it as normal, usable RAM.

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #94 on: May 24, 2017, 09:28:21 AM »
      Not smooth sailing so far.  One of the DIMMs I borrowed from an Xserve to max out the RAM in my MDDs caused random hard freezes.  The usual moral of the story applies - if possible stick to a fully matched set of DIMMs!  Completing a matched set fixed that issue.

      I had a bit of trouble with saving the attached file.  Classilla doesn't use the correct file name for the archive, no big deal, but I don't think the ROM file came out right.  A fresh 9.2.2 boot drive wasn't recognized as bootable at startup with the replacement ROM.  Also I had to pull NKLogReader from your original post about it because it wasn't present in the current attachment.  I was able to run NKLogReader when booted from the original ROM and then save the log to a file.  The modified ROM will have to wait until this issue is sorted out.

      Once I can get 'step one' working, could you apply the "unsupported G4s" patch so I can try this on FW800 and Xserve?

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #95 on: May 24, 2017, 10:29:41 AM »
    Great!!!  ;D

    All right, here goes. In the spirit of working in the open:

    I think I have broken the 1.5 GB limit...

    ...by 64 MB.
    ... 64MB...
    ... this is a small step for a man... but a big step for ...
     ;D ;D ;D ;D

    Please don't PM about things that are not private.

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #96 on: May 24, 2017, 10:32:51 AM »
    I am surprised to hear that! Sorry you've had trouble. I tried downloading the archive from the site. It worked fine for me, log dumper and all.

    Here's a new archive. I rebuilt the image with some of the changes I've made in the last couple of hours, and compressed it with a different version of Stuffit. You should get an extra 128 MB recognised now.

    My builds should actually boot fine on an "unsupported" G4. (But I reflashed my MDD back in 2015, so I haven't been testing that.)

    Thanks for trying it out already! Let me know how this goes.

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #97 on: May 24, 2017, 10:36:22 AM »
    Thanks, MacTron! Could I trouble you for the contents of your kernel log?

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #98 on: May 24, 2017, 12:23:45 PM »
    Thanks, MacTron! Could I trouble you for the contents of your kernel log?

    No problem but I have to solve an issue with the "Second limit-breaking ROM" because it cant startup the MDD I was using for testing, and in this machine I only have installed one System folder  :-[ ... LOL
    Please don't PM about things that are not private.

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #99 on: May 24, 2017, 01:26:46 PM »
    Attached is a screenshot of the crash I obtain when booting with "Second limit-breaking ROM".
    Please don't PM about things that are not private.

    Offline DieHard

    • Administrator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 1678
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #100 on: May 24, 2017, 02:31:48 PM »
    Attached is a screenshot of the crash I obtain when booting with "Second limit-breaking ROM".

    Damn !  We were going so quick  thought we would have the full extra 512MB by midnight :)

    All joking aside, this is absolutely amazing, even stealing 64MB is like XMas considering Apple never intended to throw us even that small bone.

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #101 on: May 24, 2017, 04:41:27 PM »
    Attached is a screenshot of the crash I obtain when booting with "Second limit-breaking ROM".

    That's a pretty miserable crash, but very fixable. My PageMap patching code is very hacky, and made some clearly incorrect assumptions about the state of the map on other people's machines. I should have a fix in a day or two.

    So thanks for testing, guys. I'll have another image for you in a couple of days. If you're willing to believe that the second image does work, then we're up to 1.625 GB.

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #102 on: May 24, 2017, 09:14:02 PM »
      Okay, so I tried this again after getting home from work this evening.  The first ROM prevents my MDD FW400 from recognizing the drive as a valid boot device.  The second ROM does get recognized but fails in exactly the same way as it did for MacTron.  (I won't bother posting an identical screenshot.)  I don't know what the deal is with the first version of the ROM not playing nice with my machine, but at least I know it's just something with that file given that the second version is recognized.  I will try again on the MDD once you have made further adjustments.

    <edit>  Just for the hell of it I tried booting ROM v2 on a Quicksilver.  Now I know that's not particularly useful since this machine cannot have more than 1.5GB of RAM installed in it at all, but I just wanted to see if the boot would complete on a different machine.  It did boot without issue with a machine max RAM of 1.5GB present.  Here's the log output:

    Code: [Select]
    NKLogReader by ELN.
    NKNanoKernelInfo: logi addr 68ffedc0, struct ver 0228, 352 bytes.
    NKNanoKernelInfo is within the Kernel Data Page. KDP phys addr 5f7fe000.
    NanoKernel log starts after one blank line.

    Hello from the builtin multitasking NanoKernel. Version: 0228
    Kernel code base at 0x00f10000  Physical RAM size 0x5fffc000 bytes
    Created motherboard coherence group. ID 00010001
    NKCreateAddressSpaceSub - group at 0x5f7fc1c0 00010001
    Created system address space. ID 00030001
     BATs ffc0007f 00c00043   6800001f 00f00043   00000000 00000000   00000000 00000000
    Init ready queue 00000000 00000000 00008652
    Init ready queue 00000001 00000000 00043290
    Init ready queue 00000002 00000000 00219480
    Init ready queue 00000003 00000000 010ca400
    System context at 0x5f7ff100  Vector save area at 0x5f7fb8e0  SDR1 0x5f80003f
    Adding blue task 00050001 to the ready queue
    Starting timeslicing
    Adding idle task 00070001 to the ready queue
    NKCreateAddressSpaceSub - group at 0x5f7fc1c0 00010001
    Priming the system free list with 208 pages.
    VMMaxVirtualPages: 00064000 VMLogicalPages: 00000000
    Interrupt handler kind: 06
    Converting PMDTs to areas
     CreateArea [ 00000000 5f645fff ] ID 000a0001 placed ... created
     CreateArea [ 64000000 6417ffff ] ID 000b0001 placed ... created
     CreateArea [ 68fef000 68feffff ] ID 000c0001 placed ... created
     CreateArea [ 68ff5000 68ffefff ] ID 000d0001 placed ... created
     CreateArea [ 68fff000 68ffffff ] ID 000e0001 placed ... created
     CreateArea [ 6fffe000 6fffefff ] ID 000f0001 placed ... created
     CreateArea [ 80000000 8fffffff ] ID 00100001 placed ... created
     CreateArea [ 90000000 9001ffff ] ID 00110001 placed ... created
     CreateArea [ 91000000 91ffffff ] ID 00120001 placed ... created
     CreateArea [ 98000000 9fffffff ] ID 00130001 placed ... created
     CreateArea [ f0000000 f4ffffff ] ID 00140001 placed ... created
     CreateArea [ f5000000 f5000fff ] ID 00150001 placed ... created
     CreateArea [ f5001000 f50fffff ] ID 00160001 placed ... created
     CreateArea [ f5100000 f51fffff ] ID 00170001 placed ... created
     CreateArea [ f5200000 f53fffff ] ID 00180001 placed ... created
     CreateArea [ f5400000 ffffffff ] ID 00190001 placed ... created
     CreateArea [ 68f16000 68f16fff ] ID 001a0001 placed ... created
     CreateArea [ deadb000 deadbfff ] ID 001b0001 placed ... created
    Reset system - Into the 68K fire: 0000d032 6806e8c0
    ResetSystem trap entered
    Kernel code base at 0x00f10000  Physical RAM size 0x5fffc000 bytes
    Created motherboard coherence group. ID 00010001
    NKCreateAddressSpaceSub - group at 0x5f7fc1c0 00010001
    Created system address space. ID 00030001
     BATs ffc0007f 00c00043   6800001f 00f00043   00000000 00000000   00000000 00000000
    Init ready queue 00000000 00000000 00008652
    Init ready queue 00000001 00000000 00043290
    Init ready queue 00000002 00000000 00219480
    Init ready queue 00000003 00000000 010ca400
    System context at 0x5f7ff100  Vector save area at 0x5f7fb8e0  SDR1 0x5f80003f
    Adding blue task 00050001 to the ready queue
    Starting timeslicing
    Adding idle task 00070001 to the ready queue
    NKCreateAddressSpaceSub - group at 0x5f7fc1c0 00010001
    Priming the system free list with 208 pages.
    VMMaxVirtualPages: 00064000 VMLogicalPages: 0005f646
    Interrupt handler kind: 06
    Converting PMDTs to areas
     CreateArea [ 00000000 5f645fff ] ID 000a0001 placed ... created
     CreateArea [ 64000000 6417ffff ] ID 000b0001 placed ... created
     CreateArea [ 68fef000 68feffff ] ID 000c0001 placed ... created
     CreateArea [ 68ff5000 68ffefff ] ID 000d0001 placed ... created
     CreateArea [ 68fff000 68ffffff ] ID 000e0001 placed ... created
     CreateArea [ 6fffe000 6fffefff ] ID 000f0001 placed ... created
     CreateArea [ 80000000 8fffffff ] ID 00100001 placed ... created
     CreateArea [ 90000000 9001ffff ] ID 00110001 placed ... created
     CreateArea [ 91000000 91ffffff ] ID 00120001 placed ... created
     CreateArea [ 98000000 9fffffff ] ID 00130001 placed ... created
     CreateArea [ f0000000 f4ffffff ] ID 00140001 placed ... created
     CreateArea [ f5000000 f5000fff ] ID 00150001 placed ... created
     CreateArea [ f5001000 f50fffff ] ID 00160001 placed ... created
     CreateArea [ f5100000 f51fffff ] ID 00170001 placed ... created
     CreateArea [ f5200000 f53fffff ] ID 00180001 placed ... created
     CreateArea [ f5400000 ffffffff ] ID 00190001 placed ... created
     CreateArea [ 68f16000 68f16fff ] ID 001a0001 placed ... created
     CreateArea [ deadb000 deadbfff ] ID 001b0001 placed ... created
    Reset system - Into the 68K fire: 0002d032 6806c9e8
    Extend free pool: phys 0x5ff3e000  virt 0x00000000  count: 1
    Extend free pool: phys 0x5ff3d000  virt 0x00000000  count: 2
    Extend free pool: phys 0x5ff3c000  virt 0x00000000  count: 3
    Extend free pool: phys 0x5ff3b000  virt 0x00000000  count: 4
    Extend free pool: phys 0x5ff3a000  virt 0x00000000  count: 5
    Extend free pool: phys 0x5ff39000  virt 0x00000000  count: 6
    Extend free pool: phys 0x5ff38000  virt 0x00000000  count: 7
    Extend free pool: phys 0x5ff37000  virt 0x00000000  count: 8
    Extend free pool: phys 0x5ff36000  virt 0x00000000  count: 9
    Extend free pool: phys 0x5ff35000  virt 0x00000000  count: 10
    Skeleton key inserted at00021032 013c9360
    Extend free pool: phys 0x5ff34000  virt 0x00000000  count: 11
    Extend free pool: phys 0x5ff33000  virt 0x00000000  count: 12

      If this is of any use or you need the log for the original ROM, let me know.  Oh, and the archives seem to be working correctly now with Classilla and Stuffit Expander in OS 9.
    « Last Edit: May 25, 2017, 05:42:20 AM by nanopico »

    Offline nanopico

    • Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 720
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #103 on: May 25, 2017, 05:43:20 AM »
      Okay, so I tried this again after getting home from work this evening.  The first ROM prevents my MDD FW400 from recognizing the drive as a valid boot device.  The second ROM does get recognized but fails in exactly the same way as it did for MacTron.  (I won't bother posting an identical screenshot.)  I don't know what the deal is with the first version of the ROM not playing nice with my machine, but at least I know it's just something with that file given that the second version is recognized.  I will try again on the MDD once you have made further adjustments.

    <edit>  Just for the hell of it I tried booting ROM v2 on a Quicksilver.  Now I know that's not particularly useful since this machine cannot have more than 1.5GB of RAM installed in it at all, but I just wanted to see if the boot would complete on a different machine.  It did boot without issue with a machine max RAM of 1.5GB present.  Here's the log output:

    Code: [Select]
    NKLogReader by ELN.
    NKNanoKernelInfo: logi addr 68ffedc0, struct ver 0228, 352 bytes.
    NKNanoKernelInfo is within the Kernel Data Page. KDP phys addr 5f7fe000.
    NanoKernel log starts after one blank line.

    Hello from the builtin multitasking NanoKernel. Version: 0228
    Kernel code base at 0x00f10000  Physical RAM size 0x5fffc000 bytes
    Created motherboard coherence group. ID 00010001
    NKCreateAddressSpaceSub - group at 0x5f7fc1c0 00010001
    Created system address space. ID 00030001
     BATs ffc0007f 00c00043   6800001f 00f00043   00000000 00000000   00000000 00000000
    Init ready queue 00000000 00000000 00008652
    Init ready queue 00000001 00000000 00043290
    Init ready queue 00000002 00000000 00219480
    Init ready queue 00000003 00000000 010ca400
    System context at 0x5f7ff100  Vector save area at 0x5f7fb8e0  SDR1 0x5f80003f
    Adding blue task 00050001 to the ready queue
    Starting timeslicing
    Adding idle task 00070001 to the ready queue
    NKCreateAddressSpaceSub - group at 0x5f7fc1c0 00010001
    Priming the system free list with 208 pages.
    VMMaxVirtualPages: 00064000 VMLogicalPages: 00000000
    Interrupt handler kind: 06
    Converting PMDTs to areas
     CreateArea [ 00000000 5f645fff ] ID 000a0001 placed ... created
     CreateArea [ 64000000 6417ffff ] ID 000b0001 placed ... created
     CreateArea [ 68fef000 68feffff ] ID 000c0001 placed ... created
     CreateArea [ 68ff5000 68ffefff ] ID 000d0001 placed ... created
     CreateArea [ 68fff000 68ffffff ] ID 000e0001 placed ... created
     CreateArea [ 6fffe000 6fffefff ] ID 000f0001 placed ... created
     CreateArea [ 80000000 8fffffff ] ID 00100001 placed ... created
     CreateArea [ 90000000 9001ffff ] ID 00110001 placed ... created
     CreateArea [ 91000000 91ffffff ] ID 00120001 placed ... created
     CreateArea [ 98000000 9fffffff ] ID 00130001 placed ... created
     CreateArea [ f0000000 f4ffffff ] ID 00140001 placed ... created
     CreateArea [ f5000000 f5000fff ] ID 00150001 placed ... created
     CreateArea [ f5001000 f50fffff ] ID 00160001 placed ... created
     CreateArea [ f5100000 f51fffff ] ID 00170001 placed ... created
     CreateArea [ f5200000 f53fffff ] ID 00180001 placed ... created
     CreateArea [ f5400000 ffffffff ] ID 00190001 placed ... created
     CreateArea [ 68f16000 68f16fff ] ID 001a0001 placed ... created
     CreateArea [ deadb000 deadbfff ] ID 001b0001 placed ... created
    Reset system - Into the 68K fire: 0000d032 6806e8c0
    ResetSystem trap entered
    Kernel code base at 0x00f10000  Physical RAM size 0x5fffc000 bytes
    Created motherboard coherence group. ID 00010001
    NKCreateAddressSpaceSub - group at 0x5f7fc1c0 00010001
    Created system address space. ID 00030001
     BATs ffc0007f 00c00043   6800001f 00f00043   00000000 00000000   00000000 00000000
    Init ready queue 00000000 00000000 00008652
    Init ready queue 00000001 00000000 00043290
    Init ready queue 00000002 00000000 00219480
    Init ready queue 00000003 00000000 010ca400
    System context at 0x5f7ff100  Vector save area at 0x5f7fb8e0  SDR1 0x5f80003f
    Adding blue task 00050001 to the ready queue
    Starting timeslicing
    Adding idle task 00070001 to the ready queue
    NKCreateAddressSpaceSub - group at 0x5f7fc1c0 00010001
    Priming the system free list with 208 pages.
    VMMaxVirtualPages: 00064000 VMLogicalPages: 0005f646
    Interrupt handler kind: 06
    Converting PMDTs to areas
     CreateArea [ 00000000 5f645fff ] ID 000a0001 placed ... created
     CreateArea [ 64000000 6417ffff ] ID 000b0001 placed ... created
     CreateArea [ 68fef000 68feffff ] ID 000c0001 placed ... created
     CreateArea [ 68ff5000 68ffefff ] ID 000d0001 placed ... created
     CreateArea [ 68fff000 68ffffff ] ID 000e0001 placed ... created
     CreateArea [ 6fffe000 6fffefff ] ID 000f0001 placed ... created
     CreateArea [ 80000000 8fffffff ] ID 00100001 placed ... created
     CreateArea [ 90000000 9001ffff ] ID 00110001 placed ... created
     CreateArea [ 91000000 91ffffff ] ID 00120001 placed ... created
     CreateArea [ 98000000 9fffffff ] ID 00130001 placed ... created
     CreateArea [ f0000000 f4ffffff ] ID 00140001 placed ... created
     CreateArea [ f5000000 f5000fff ] ID 00150001 placed ... created
     CreateArea [ f5001000 f50fffff ] ID 00160001 placed ... created
     CreateArea [ f5100000 f51fffff ] ID 00170001 placed ... created
     CreateArea [ f5200000 f53fffff ] ID 00180001 placed ... created
     CreateArea [ f5400000 ffffffff ] ID 00190001 placed ... created
     CreateArea [ 68f16000 68f16fff ] ID 001a0001 placed ... created
     CreateArea [ deadb000 deadbfff ] ID 001b0001 placed ... created
    Reset system - Into the 68K fire: 0002d032 6806c9e8
    Extend free pool: phys 0x5ff3e000  virt 0x00000000  count: 1
    Extend free pool: phys 0x5ff3d000  virt 0x00000000  count: 2
    Extend free pool: phys 0x5ff3c000  virt 0x00000000  count: 3
    Extend free pool: phys 0x5ff3b000  virt 0x00000000  count: 4
    Extend free pool: phys 0x5ff3a000  virt 0x00000000  count: 5
    Extend free pool: phys 0x5ff39000  virt 0x00000000  count: 6
    Extend free pool: phys 0x5ff38000  virt 0x00000000  count: 7
    Extend free pool: phys 0x5ff37000  virt 0x00000000  count: 8
    Extend free pool: phys 0x5ff36000  virt 0x00000000  count: 9
    Extend free pool: phys 0x5ff35000  virt 0x00000000  count: 10
    Skeleton key inserted at00021032 013c9360
    Extend free pool: phys 0x5ff34000  virt 0x00000000  count: 11
    Extend free pool: phys 0x5ff33000  virt 0x00000000  count: 12

      If this is of any use or you need the log for the original ROM, let me know.  Oh, and the archives seem to be working correctly now with Classilla and Stuffit Expander in OS 9.

    I edited this for you to remove ELN's info to the public.  Hope that's ok.
    If it ain't broke, don't fix it, or break it so you can fix it!

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #104 on: May 25, 2017, 09:24:59 AM »
      Yes, thanks.  I didn't catch that it was in there at the top of the text.  I'll keep that in mind for later.

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #105 on: June 04, 2017, 02:00:42 AM »
    Hi everyone,

    I have added a new component to the Mac OS ROM: the "Wedge". The Wedge is a chunk of C code inserted into the ROM that runs between the Trampoline and the NanoKernel. It takes the structures prepared by the Trampoline, carefully patches them, spits out some textual debug output, and then hands control to the NanoKernel. The debug output remains hidden in memory while the machine boots up. Once (and if) the machine is booted, it can be read by a small app, WedgeLogReader.

    At present the only task of the Wedge is to expand the main segment of Mac OS memory. This allows an extra 128MB of RAM to be used, on top of the 1.5GB limit.

    Why go to the trouble of bootstrapping a C runtime? Two reasons:

    • Ease. Patching the PageMap is too complex to accomplish reliably in RISC assembly (see the crash reports above).
    • Portability. The code can be tested on your machine in userspace before risking a crash on boot.

    And what cool stuff is in the attached archive?

    • PowerMacInfo, in case you didn't already have a copy. This will crash on a Wedge ROM, because it hardcodes the InfoRecord Page address.
    • WedgeDryRun, a text app to test the Wedge code on your machine. If this crashes, let me know.
    • Mac OS ROM, with all the trimmings. Besides bumping the RAM limit slightly, this should work on all unsupported G4 desktops (including the 9serve, MacOS Plus!). The annoying NanoKernel log window is off by default. If you find it stable and you want the extra RAM, then this is ready for production use!
    • WedgeLogReader, a text app to dump the Wedge log left over from boot. Naturally, it only shows useful information if you booted with the Wedge.
    • NKLogReader, again in case you didn't have a copy.

    Those testers who had trouble with the previous patched ROMs, would you please try this out? The best information to post would be: WedgeDryRun output, WedgeLogReader output, NKLogReader output, and before/after screenshots of About This Computer. Please post text inline! That way I can read it on my phone, and it gets indexed by Google.

    For the morbidly curious, here is the Wedge C code. The same code runs in both the attached ROM and the WedgeLogReader. I don't suppose that one of the admins feels like changing the tab size to 4?

    Code: [Select]
    #include <PPCInfoRecordsPriv.h>
    #include <MacTypes.h>


    #define kFlagNone 0
    #define kFlagIRP 1
    #define kFlagKDP 2
    #define kFlagEDP 3


    #define LA_InfoRecord_Orig 0x5fffe000UL
    #define LA_UniversalArea_Orig 0x64000000UL
    #define LA_RiscRom_Orig 0x68000000UL
    #define LA_ConfigInfo_Orig 0x68fef000UL
    #define LA_KernelData_Orig 0x68ffe000UL
    #define LA_KernelData_Orig 0x68fff000UL


    #define kConfigInfoSize 4096
    #define kHardwareInfoSize 192


    #define kPatchInfoRecord 0x00000001UL
    #define kPatchUniversalArea 0x00000010UL
    #define kCanPatchEmulator 0x80000000UL


    #define kDelta 0x80000000UL


    void *memcpy(void *dest, void *src, long n)
    {
    long i;

    char *d = (char *)dest;
    char *s = (char *)src;

    if(dest < src) /* copy left to right */
    {
    for(i=0; i<n; i++) d[i] = s[i];
    }
    else /* copy right to left */
    {
    for(i=n-1; i>=0; i--) d[i] = s[i];
    }

    return dest;
    }


    void *memset(void *dest, int v, long n)
    {
    char *d = (char *)dest;

    while(n) d[--n] = (char)v;

    return dest;
    }


    struct PME
    {
    unsigned long word1; /* LogicalPageIndexInSegment(16b) || PageCountMinus1(16b) */
    unsigned long word2; /* PhysicalPage(20b) || pageAttr(12b) */
    };
    typedef struct PME PME;


    PME *getPageMapPtr(NKConfigurationInfo *ConfigInfo)
    {
    return (PME *)((long)ConfigInfo + (long)ConfigInfo->PageMapInitOffset);
    }


    int pmeIsBlank(PME *pme)
    {
    if(pme->word1 != 0x0000ffffUL) return 0;
    if((pme->word2 & 0x00000f00UL) != 0x00000a00UL) return 0;
    return 1;
    }


    int segmentOf(unsigned long LA)
    {
    return LA >> 28;
    }


    /*
    Create a PageMapEntry (specifying a logical-to-physical mapping within a PowerPC segment)
    and insert it into a ConfigInfo struct, taking care not to corrupt the structure.

    (Intended to replicate the behaviour of the Trampoline, based on its debug output)
    */

    int AddPageMapEntry(NKConfigurationInfo *ci, unsigned long LA, unsigned long count, unsigned long PA, unsigned long pageAttr, unsigned long flags)
    {
    PME *pageMapBase = getPageMapPtr(ci);

    PME newEnt;
    int entryOffset; /* offset of our new entry within the PageMap (bytes) */

    int i;


    /* Format string lifted from Trampoline (changed a tiny bit). */

    printf("AddPageMapEntry: LA = 0x%08X, count = 0x%05X, PA = 0x%08X, pageAttr = 0x%04X, flags = 0x%02X.\n", LA, count, PA, pageAttr, flags);


    /* "Design" the new entry. */

    newEnt.word1 = ((LA << 4) & 0xffff0000UL) | (count - 1);
    newEnt.word2 = (PA & 0xfffff000UL) | pageAttr;


    /* Choose an offset for the entry. */

    entryOffset = ci->SegMap32SupInit[segmentOf(LA) * 2];

    for(;;)
    {
    PME *existing;

    existing = (PME *)((long)pageMapBase + (long)entryOffset);

    if(pmeIsBlank(existing)) break;
    if((existing->word1 & 0xffff0000UL) > (newEnt.word1 & 0xffff0000UL)) break;

    entryOffset += sizeof(PME);
    }


    /* Shift the entries above our new entry by 8 bytes. */

    for(i=0; i<8; i++)
    {
    if(*((char *)pageMapBase + ci->PageMapInitSize + i) != 0)
    {
    printf("PageMap overflow!\n", entryOffset/sizeof(PME));
    return 100;
    }
    }

    for(i = ci->PageMapInitSize - 1; i >= entryOffset; i--)
    {
    *((char *)pageMapBase + i + 8) = *((char *)pageMapBase + i);
    }


    /* Bump the declared PageMap size by 8 bytes. (ignored by kernel?) */

    ci->PageMapInitSize += sizeof(PME);


    /* The SegMap (four copies) contains an offset into the PageMap at every second word -- update these. */

    for(i=segmentOf(LA)+1; i<16; i++)
    {
    ci->SegMap32SupInit[i * 2] += sizeof(PME);
    ci->SegMap32UsrInit[i * 2] += sizeof(PME);
    ci->SegMap32CPUInit[i * 2] += sizeof(PME);
    ci->SegMap32OvlInit[i * 2] += sizeof(PME);
    }


    /* Adjust the pointers to the special PageMap entries. */

    if(ci->PageMapIRPOffset >= entryOffset) ci->PageMapIRPOffset += sizeof(PME);
    if(ci->PageMapKDPOffset >= entryOffset) ci->PageMapKDPOffset += sizeof(PME);
    if(ci->PageMapEDPOffset >= entryOffset) ci->PageMapEDPOffset += sizeof(PME);


    /* Set the correct pointer if it is a special one */

    if(flags == kFlagIRP)
    ci->PageMapIRPOffset = entryOffset;
    else if(flags == kFlagKDP)
    ci->PageMapKDPOffset = entryOffset;
    else if(flags == kFlagEDP)
    ci->PageMapEDPOffset = entryOffset;


    /* Save our new entry in the gap we have made in the PageMap. */

    memcpy((char *)pageMapBase + entryOffset, &newEnt, sizeof(PME));

    return 0;
    }


    /*
    Create a blank PageMap inside a pre-existing ConfigInfo structure, with only
    those "dummy" entries that the Trampoline would create before calling
    AddPageMapEntry.

    (Intended to replicate the behaviour of the Trampoline, based on its debug output)
    */

    void ErasePageMapTable(NKConfigurationInfo *ci)
    {
    PME *pageMapBase;
    long *pmp;
    int seg;


    printf("ErasePageMapTable at offset 0x%x\n\n", ci->PageMapInitOffset);

    /* Zero out the existing PageMap */

    pageMapBase = getPageMapPtr(ci);
    memset(pageMapBase, 0, ci->PageMapInitSize);


    /* Count up with pmp */

    pmp = (long *)pageMapBase;

    ci->PageMapInitOffset = (long)pageMapBase - (long)ci;

    for(seg=0; seg<16; seg++)
    {
    ci->SegMap32SupInit[seg * 2] =
    ci->SegMap32UsrInit[seg * 2] =
    ci->SegMap32CPUInit[seg * 2] =
    ci->SegMap32OvlInit[seg * 2] = (long)pmp - (long)pageMapBase;

    if(seg <= 5)
    {
    *pmp++ = 0x0000ffffUL; *pmp++ = 0x00000a00UL;
    *pmp++ = 0x0000ffffUL; *pmp++ = 0x00000a00UL;
    }
    else if(seg >= 6 && seg <= 7)
    {
    *pmp++ = 0x0000ffffUL; *pmp++ = 0x00000a01UL;
    *pmp++ = 0x0000ffffUL; *pmp++ = 0x00000a01UL;
    *pmp++ = 0x0000ffffUL; *pmp++ = 0x00000a00UL;
    }
    else if(seg >= 8)
    {
    *pmp++ = 0x0000ffffUL; *pmp++ = 0x00000a01UL + (seg << 28);
    *pmp++ = 0x0000ffffUL; *pmp++ = 0x00000a00UL;
    }
    }

    ci->PageMapInitSize = (long)pmp - (long)pageMapBase;


    /* Zero out the special pointers */

    ci->PageMapIRPOffset = 0;
    ci->PageMapKDPOffset = 0;
    ci->PageMapEDPOffset = 0;
    }


    int PatchMacOSAddressSpace(long patches, unsigned long makeMemAvail, NKConfigurationInfo *ci, NKConfigurationInfo *newci, NKHWInfo *hi, NKHWInfo *newhi)
    {
    int seg;
    PME *pageMapBase;
    PME *entryp;

    unsigned long LA, newLA, count, PA, pageAttr, flags;

    int ret;
    int offset;

    unsigned long i;


    pageMapBase = getPageMapPtr(ci);

    ErasePageMapTable(newci);

    printf("PatchMacOSAddressSpace: makeMemAvail %08x\n", makeMemAvail);

    for(seg=0; seg<16; seg++)
    {
    for(offset = ci->SegMap32SupInit[seg*2];; offset += sizeof (PME)) /* Iterate over PMEs. */
    {
    entryp = (PME *)((long)pageMapBase + offset);


    /* Misc error conditions */

    if(seg < 15 && offset >= ci->SegMap32SupInit[(seg+1) * 2])
    {
    printf("Overran this segment of the PageMap!\n\n");
    return 101;
    }
    if(offset >= ci->PageMapInitSize)
    {
    printf("Overran the whole PageMap!\n\n");
    return 102;
    }

    if(pmeIsBlank(entryp)) break;


    /* Extract info from PME */

    LA = newLA = (seg << 28) | (entryp->word1 >> 4 & 0x0ffff000UL);
    count = (entryp->word1 & 0x0000ffffUL) + 1;
    PA = entryp->word2 & 0xfffff000UL;
    pageAttr = entryp->word2 & 0x00000fffUL;

    if(offset == ci->PageMapIRPOffset)
    flags = kFlagIRP;
    else if(offset == ci->PageMapKDPOffset)
    flags = kFlagKDP;
    else if(offset == ci->PageMapEDPOffset)
    flags = kFlagEDP;
    else
    flags = kFlagNone;

    printf("    nontrivial PME   LA = 0x%08X, count = 0x%05X, PA = 0x%08X, pageAttr = 0x%04X, flags = 0x%02X.\n    ", LA, count, PA, pageAttr, flags);


    /* Delete those two annoying PMEs that signal to end the MacOS area */
    /* (LA 50000000 count fffe PA 00000000 pageAttr a00) */

    if((LA << 4) == 0 && (pageAttr & 0xf00) == 0xa00)
    {
    printf("MacOS area delimiter: skipping\n\n");
    continue;
    }


    /* Move the InfoRecord page. */

    if((patches & kPatchInfoRecord) && LA == LA_InfoRecord_Orig)
    {
    printf("**IRP**\n    ");

    newLA += kDelta;

    /* IRP logical address in ConfigInfo */
    newci->LA_InfoRecord = newLA;

    /* IRP logical address is hardcoded into emulator by lis/ori, so change that. */
    if(patches & kCanPatchEmulator)
    {
    unsigned short hi = LA >> 16;
    unsigned short lo = LA & 0xffff;
    unsigned short *em = (unsigned short *)0x00f60000UL;

    for(i=0; i<0x10000; i+=2)
    {
    if(em[i+1] == hi && em[i+3] == lo)
    {
    printf("Patching Emulator lis/ori @ %05x\n    ", i*2);
    em[i+1] = newLA >> 16;
    em[i+3] = newLA & 0xffff;
    break;
    }
    }
    }
    }


    /* Move the area containing the Universal structures and the Device Tree */

    if((patches & kPatchUniversalArea) && LA == LA_UniversalArea_Orig)
    {
    printf("**Universal/DeviceTree area**\n    ");

    newLA += kDelta;

    /* Logical address pointers in HardwareInfo */
    newhi->DeviceTreeBase = hi->DeviceTreeBase - LA + newLA;
    newhi->UniversalInfoTableBase = hi->UniversalInfoTableBase - LA + newLA;
    }


    if(newLA < makeMemAvail)
    {
    printf("makeMemAvail is too large with this PME in the way.\n\n");
    return 103;
    }


    /* If this PME was unchanged then newLA will just equal the original LA. */

    ret = AddPageMapEntry(newci, newLA, count, PA, pageAttr, flags);
    if(ret) return ret;

    printf("\n");
    }
    }


    /* Done all meaningful PMEs... put the "MacOS area delimiter" back in */

    printf("    Reinserting the MacOS area delimiters:\n");
    for(i=0; i<2; i++)
    {
    printf("    ");
    ret = AddPageMapEntry(newci, makeMemAvail & 0xf0000000UL, makeMemAvail >> 12 & 0xffffUL, 0UL, 0xa00, 0);
    if(ret) return ret;
    }

    printf("\n");

    return 0;
    }


    void DebugDumpPageMap(NKConfigurationInfo *ci)
    {
    PME *pageMapBase, *pme;
    int i, j;

    pageMapBase = getPageMapPtr(ci);

    printf("DebugDumpPageMap\n");

    for(i=0; i<ci->PageMapInitSize; i+=sizeof(PME))
    {
    for(j=0; j<16; j++)
    {
    if(ci->SegMap32SupInit[j*2] == i)
    {
    printf("%X ", j);
    break;
    }
    }
    if(j == 16) printf("  ");

    pme = (PME *)((long)pageMapBase + i);

    printf("%03x: %08x %08x", i, pme->word1, pme->word2);

    if(i == ci->PageMapIRPOffset)
    {
    printf(" IRP");
    }
    else if(i == ci->PageMapEDPOffset)
    {
    printf(" EDP");
    }
    else if(i == ci->PageMapKDPOffset)
    {
    printf(" KDP");
    }

    printf("\n");
    }
    printf("\n");
    }


    /* Main function for Wedge patch */

    void wedge(NKConfigurationInfo *ci, NKProcessorInfo *pi, NKSystemInfo *si, NKDiagnosticInfo *di, OSType rtasFour, unsigned long rtasProc, NKHWInfo *hi)
    {
    char ci_tmp[kConfigInfoSize], hi_tmp[kHardwareInfoSize];
    int ret;

    printf("Hello from the Wedge.\n");
    printf("      ConfigInfo (r3) @ %08x\n", ci);
    printf("   ProcessorInfo (r4) @ %08x\n", pi);
    printf("      SystemInfo (r5) @ %08x\n", si);
    printf("  DiagnosticInfo (r6) @ %08x\n", di);
    printf("            RTAS (r7) = %08x\n", rtasFour);
    printf("        RTASProc (r8) @ %08x\n", rtasProc);
    printf("    HardwareInfo (r9) @ %08x\n", hi);
    printf("\n");


    /* PatchMacOSAddressSpace */

    DebugDumpPageMap((NKConfigurationInfo *)ci);

    printf("Rearranging the MacOS address space...\n\n");
    memcpy(ci_tmp, ci, sizeof ci_tmp);
    memcpy(hi_tmp, hi, sizeof hi_tmp);

    ret = PatchMacOSAddressSpace(kPatchInfoRecord | kPatchUniversalArea | kCanPatchEmulator,
                                 0x68000000UL,
                                 (NKConfigurationInfo *)ci, (NKConfigurationInfo *)ci_tmp,
                                 (NKHWInfo *)hi, (NKHWInfo *)hi_tmp);

    if(!ret)
    {
    printf("Copying modified ConfigInfo and HWInfo over the originals.\n\n");
    memcpy(ci, ci_tmp, sizeof ci_tmp);
    memcpy(hi, hi_tmp, sizeof hi_tmp);

    DebugDumpPageMap((NKConfigurationInfo *)ci);
    }
    else
    {
    printf("PatchMacOSAddressSpace failed with error %d.\n", ret);
    }


    /* Insert more clever, interesting patches here. */


    /* Uses r3-r9 -- compiler doesn't really need a prototype for this. */
    printf("\nHanding over to the NanoKernel.\n");
    NanoKernelJump(ci, pi, si, di, rtasFour, rtasProc, hi);
    }


    /* Main function for MPW Tool */

    void main(void)
    {
    char ci_tmp[kConfigInfoSize], hi_tmp[kHardwareInfoSize];
    char *ci, *hi;
    long nk_struct_ver, nk_struct_len;
    int ret;

    printf("Hello from the (dry-run) Wedge.\n");

    ci = (char *)0x68fef000UL;
    printf("      ConfigInfo @ %08x\n", ci);

    NKLocateInfoRecord(6, &hi, &nk_struct_ver, &nk_struct_len);
    printf("    HardwareInfo @ %08x\n", hi);

    printf("\n");


    DebugDumpPageMap((NKConfigurationInfo *)ci);

    printf("Copying the system ConfigInfo and HardwareInfo structs.\n\n");
    memcpy(ci_tmp, ci, sizeof ci_tmp);
    memcpy(hi_tmp, hi, sizeof hi_tmp);

    ret = PatchMacOSAddressSpace(kPatchInfoRecord | kPatchUniversalArea,
                                 0x68000000UL,
                                 (NKConfigurationInfo *)ci, (NKConfigurationInfo *)ci_tmp,
                                 (NKHWInfo *)hi, (NKHWInfo *)hi_tmp);

    if(!ret)
    {
    printf("PatchMacOSAddressSpace succeeded (but was forbidden from patching the Emulator).\n\n");

    DebugDumpPageMap((NKConfigurationInfo *)ci_tmp);
    }
    else
    {
    printf("PatchMacOSAddressSpace failed with error %d.\n", ret);
    }
    }

    And here is some sample output.

    Code: [Select]
    Hello from the Wedge.
          ConfigInfo (r3) @ 00003000
       ProcessorInfo (r4) @ 0fffff40
          SystemInfo (r5) @ 0ffffe00
      DiagnosticInfo (r6) @ 00000000
                RTAS (r7) = 52544153
            RTASProc (r8) @ 00000000
        HardwareInfo (r9) @ 0ffffd40

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000fffd 00000a00
      058: 0000fffd 00000a00
      060: fffe0000 00000012 IRP
      068: 0000ffff 00000a00
      070: 0000ffff 00000a00
    6 078: 4000017f 0ab00012
      080: 8fef0000 00003013
      088: 8ffe0000 00000011 KDP
      090: 8fff0000 00000012 EDP
      098: 0000ffff 00000a01
      0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a00
    7 0b0: 0000ffff 00000a01
      0b8: 0000ffff 00000a01
      0c0: 0000ffff 00000a00
    8 0c8: 0000ffff 8000003a
      0d0: 0000ffff 80000a01
      0d8: 0000ffff 00000a00
    9 0e0: 0000000f 9000003a
      0e8: 0020001f 9002003a
      0f0: 80007fff 98000032
      0f8: 0000ffff 90000a01
      100: 0000ffff 00000a00
    A 108: 0000ffff a0000a01
      110: 0000ffff 00000a00
    B 118: 0000ffff b0000a01
      120: 0000ffff 00000a00
    C 128: 0000ffff c0000a01
      130: 0000ffff 00000a00
    D 138: 0000ffff d0000a01
      140: 0000ffff 00000a00
    E 148: 0000ffff e0000a01
      150: 0000ffff 00000a00
    F 158: 0000ffff f000003a
      160: 0000ffff f0000a01
      168: 0000ffff 00000a00

    Rearranging the MacOS address space...

    ErasePageMapTable at offset 0x3ac

    PatchMacOSAddressSpace: makeMemAvail 68000000
        nontrivial PME   LA = 0x50000000, count = 0x0FFFE, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x50000000, count = 0x0FFFE, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x5FFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.
        **IRP**
        Patching Emulator lis/ori @ 181e8
        AddPageMapEntry: LA = 0xDFFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.

        nontrivial PME   LA = 0x64000000, count = 0x00180, PA = 0x0AB00000, pageAttr = 0x0012, flags = 0x00.
        **Universal/DeviceTree area**
        AddPageMapEntry: LA = 0xE4000000, count = 0x00180, PA = 0x0AB00000, pageAttr = 0x0012, flags = 0x00.

        nontrivial PME   LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.
        AddPageMapEntry: LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.

        nontrivial PME   LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.
        AddPageMapEntry: LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.

        nontrivial PME   LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.
        AddPageMapEntry: LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.

        nontrivial PME   LA = 0x80000000, count = 0x10000, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80000000, count = 0x10000, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x98000000, count = 0x08000, PA = 0x98000000, pageAttr = 0x0032, flags = 0x00.
        AddPageMapEntry: LA = 0x98000000, count = 0x08000, PA = 0x98000000, pageAttr = 0x0032, flags = 0x00.

        nontrivial PME   LA = 0xF0000000, count = 0x10000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF0000000, count = 0x10000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.

        Reinserting the MacOS area delimiters:
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.

    Copying modified ConfigInfo and HWInfo over the originals.

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000ffff 00000a00
      058: 0000ffff 00000a00
    6 060: 00007fff 00000a00
      068: 00007fff 00000a00
      070: 8fef0000 00003013
      078: 8ffe0000 00000011 KDP
      080: 8fff0000 00000012 EDP
      088: 0000ffff 00000a01
      090: 0000ffff 00000a01
      098: 0000ffff 00000a00
    7 0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a01
      0b0: 0000ffff 00000a00
    8 0b8: 0000ffff 8000003a
      0c0: 0000ffff 80000a01
      0c8: 0000ffff 00000a00
    9 0d0: 0000000f 9000003a
      0d8: 0020001f 9002003a
      0e0: 80007fff 98000032
      0e8: 0000ffff 90000a01
      0f0: 0000ffff 00000a00
    A 0f8: 0000ffff a0000a01
      100: 0000ffff 00000a00
    B 108: 0000ffff b0000a01
      110: 0000ffff 00000a00
    C 118: 0000ffff c0000a01
      120: 0000ffff 00000a00
    D 128: fffe0000 00000012 IRP
      130: 0000ffff d0000a01
      138: 0000ffff 00000a00
    E 140: 4000017f 0ab00012
      148: 0000ffff e0000a01
      150: 0000ffff 00000a00
    F 158: 0000ffff f000003a
      160: 0000ffff f0000a01
      168: 0000ffff 00000a00


    Handing over to the NanoKernel.
    « Last Edit: June 04, 2017, 02:11:59 AM by ELN »

    Offline Knezzen

    • Platinum Member (500+ Posts)
    • *****
    • Posts: 794
    • Pro Tools addict!
      • Macintosh Garden
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #106 on: June 04, 2017, 02:37:19 AM »
    Out of curiosity, technically speaking, what stops you to extend the usable RAM space beyond the 128mb you already extended onto?

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #107 on: June 04, 2017, 03:03:28 AM »
    Out of curiosity, technically speaking, what stops you to extend the usable RAM space beyond the 128mb you already extended onto?

    Very good question.

    Note the "nontrivial PME" lines in the output above. These list the areas that the Trampoline instructs the NanoKernel to locate in logical memory, in addition to the MacOS logical area starting at address zero. The Wedge is moving two of them to a location much higher in memory.

    The first one is the InfoRecord Page (IRP). With that at 5fffe000, the main area can only expand to a whisker under 1.5GB. By moving the IRP and another small area at 64000000, we can expand up to the next obstacle at 68000000 (which is actually a mapping of the upper megabyte of the ROM, and is not listed in the PageMap above). This gives us 1.625GB. With luck, we will get the full 2GB soon.

    The data and code in these hardcoded areas mostly concern the interface between the low-level PowerPC system and the high-level 68k system. There is rarely a need for application code to access them directly, and there are (usually) ways of querying their addresses at runtime, but some software still hardcodes them. Moving them therefore presents a small problem for application compatibility. For example, moving the IRP seems to crash PowerMacInfo and Apple System Profiler (and the 68k DR Emulator, but that's fixed). A similar problem arose when the first PCI Power Macs moved the ROM image from 40000000 (1GB) to FFC00000 (just below the 4GB mark). I suspect that this is the cause of the instability reported on Macs with more than 1GB of RAM.

    Offline Knezzen

    • Platinum Member (500+ Posts)
    • *****
    • Posts: 794
    • Pro Tools addict!
      • Macintosh Garden
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #108 on: June 04, 2017, 03:11:13 AM »
    Great explanation! Hoping for the best so I can make use of all the memory in my MDD. Not that I ever used the full 1.5GB usable right now, but anyway ;)

    Offline Daniel

    • Gold Member (200+ Posts)
    • *****
    • Posts: 269
    • Programmer, Hacker, Thinker
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #109 on: June 04, 2017, 06:14:30 AM »
    I just tested it out. It works! I don't have any 2 GB macs, but it works just fine on at least one system. Here are the Wedge and NK logs if they are useful.
    « Last Edit: June 04, 2017, 06:33:30 AM by Daniel »

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #110 on: June 04, 2017, 09:04:16 AM »
    It Works!  ;D

    AWESOME ! ;D
    « Last Edit: June 04, 2017, 09:17:30 AM by MacTron »
    Please don't PM about things that are not private.

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #111 on: June 04, 2017, 09:14:37 AM »
    Now I'll post the logs:
    NKLogReader:
    Code: [Select]
    NKNanoKernelInfo: logi addr 68ffedc0, struct ver 0228, 352 bytes.
    NKNanoKernelInfo is within the Kernel Data Page. KDP phys addr 7f7fe000.

                  NanoKernel Log
                  --------------
    Hello from the builtin multitasking NanoKernel. Version: 0228
    Kernel code base at 0x00f40000  Physical RAM size 0x7fffb000 bytes
    Created motherboard coherence group. ID 00010001
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Created system address space. ID 00030001
     BATs ffc0007f 00c00043   6800001f 00f00043   00000000 00000000   00000000 00000000
    Init ready queue 00000000 00000000 0000a8eb
    Init ready queue 00000001 00000000 00054758
    Init ready queue 00000002 00000000 002a3ac0
    Init ready queue 00000003 00000000 0151d600
    System context at 0x7f7ff100  Vector save area at 0x7f7fb8e0  SDR1 0x7f80003f
    Adding blue task 00050001 to the ready queue
    Starting timeslicing
    Adding idle task 00070001 to the ready queue
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Priming the system free list with 272 pages.
    VMMaxVirtualPages: 00068000 VMLogicalPages: 00000000
    Interrupt handler kind: 06
    Physical RAM greater than the initial logical area.
     Moving 95622 pages into the system free page list.
    Converting PMDTs to areas
     CreateArea [ 00000000 67ffffff ] ID 000a0001 placed ... created
     CreateArea [ 68fef000 68feffff ] ID 000b0001 placed ... created
     CreateArea [ 68ff5000 68ffefff ] ID 000c0001 placed ... created
     CreateArea [ 68fff000 68ffffff ] ID 000d0001 placed ... created
     CreateArea [ 80000000 8005ffff ] ID 000e0001 placed ... created
     CreateArea [ 80060000 80060fff ] ID 000f0001 placed ... created
     CreateArea [ 80061000 8007ffff ] ID 00100001 placed ... created
     CreateArea [ 80080000 80080fff ] ID 00110001 placed ... created
     CreateArea [ 80081000 80081fff ] ID 00120001 placed ... created
     CreateArea [ 90000000 9000ffff ] ID 00130001 placed ... created
     CreateArea [ 90020000 9003ffff ] ID 00140001 placed ... created
     CreateArea [ 98000000 9fffffff ] ID 00150001 placed ... created
     CreateArea [ dfffe000 dfffefff ] ID 00160001 placed ... created
     CreateArea [ e4000000 e417ffff ] ID 00170001 placed ... created
     CreateArea [ f0000000 ffffffff ] ID 00180001 placed ... created
     CreateArea [ 68f16000 68f16fff ] ID 00190001 placed ... created
     CreateArea [ deadb000 deadbfff ] ID 001a0001 placed ... created
    Reset system - Into the 68K fire: 0000d032 6806e8c0
    ResetSystem trap entered
    Kernel code base at 0x00f40000  Physical RAM size 0x7fffb000 bytes
    Created motherboard coherence group. ID 00010001
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Created system address space. ID 00030001
     BATs ffc0007f 00c00043   6800001f 00f00043   00000000 00000000   00000000 00000000
    Init ready queue 00000000 00000000 0000a8eb
    Init ready queue 00000001 00000000 00054758
    Init ready queue 00000002 00000000 002a3ac0
    Init ready queue 00000003 00000000 0151d600
    System context at 0x7f7ff100  Vector save area at 0x7f7fb8e0  SDR1 0x7f80003f
    Adding blue task 00050001 to the ready queue
    Starting timeslicing
    Adding idle task 00070001 to the ready queue
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Priming the system free list with 272 pages.
    VMMaxVirtualPages: 00068000 VMLogicalPages: 00068000
    Interrupt handler kind: 06
    Physical RAM greater than the initial logical area.
     Moving 95622 pages into the system free page list.
    Converting PMDTs to areas
     CreateArea [ 00000000 67ffffff ] ID 000a0001 placed ... created
     CreateArea [ 68fef000 68feffff ] ID 000b0001 placed ... created
     CreateArea [ 68ff5000 68ffefff ] ID 000c0001 placed ... created
     CreateArea [ 68fff000 68ffffff ] ID 000d0001 placed ... created
     CreateArea [ 80000000 8005ffff ] ID 000e0001 placed ... created
     CreateArea [ 80060000 80060fff ] ID 000f0001 placed ... created
     CreateArea [ 80061000 8007ffff ] ID 00100001 placed ... created
     CreateArea [ 80080000 80080fff ] ID 00110001 placed ... created
     CreateArea [ 80081000 80081fff ] ID 00120001 placed ... created
     CreateArea [ 90000000 9000ffff ] ID 00130001 placed ... created
     CreateArea [ 90020000 9003ffff ] ID 00140001 placed ... created
     CreateArea [ 98000000 9fffffff ] ID 00150001 placed ... created
     CreateArea [ dfffe000 dfffefff ] ID 00160001 placed ... created
     CreateArea [ e4000000 e417ffff ] ID 00170001 placed ... created
     CreateArea [ f0000000 ffffffff ] ID 00180001 placed ... created
     CreateArea [ 68f16000 68f16fff ] ID 00190001 placed ... created
     CreateArea [ deadb000 deadbfff ] ID 001a0001 placed ... created
    Reset system - Into the 68K fire: 0002d032 6806c9e8
     VMAllocateMemory - creating area at 0x69000000 00080000
     CreateArea [ 69000000 6907ffff ] ID 001b0001 placed ... created
    Extend free pool: phys 0x7ff2d000  virt 0x00000000  count: 1
    CPU plugin registered
    SIGP kResetProcessor
    Creating idle task
    SIGP kSynchClock
    SIGP kStartProcessor
    Processor scheduled
    Sch: Symmetric Multiprocessing
    Sch: On CPU 0001  ID-00000000  SDR1: 7f80003f  CpuDescriptor: 7ff2d750  KDP: 7f7fe000
    Sch: Starting SMP idle task
    EWA 7ff2da90 ContextPtr 7ff2d430 Flags 00480000 Enables 00000000
    Adding idle task 0x7ff2d330 to the ready queue
    Sch: Going to 00009002 00f54f04
    Extend free pool: phys 0x7ff2c000  virt 0x00000000  count: 2
    Extend free pool: phys 0x7ff2b000  virt 0x00000000  count: 3
    Extend free pool: phys 0x7ff2a000  virt 0x00000000  count: 4
    Extend free pool: phys 0x7ff29000  virt 0x00000000  count: 5
    Extend free pool: phys 0x7ff28000  virt 0x00000000  count: 6
    Extend free pool: phys 0x7ff27000  virt 0x00000000  count: 7
    Extend free pool: phys 0x7ff26000  virt 0x00000000  count: 8
    Extend free pool: phys 0x7ff25000  virt 0x00000000  count: 9
    Extend free pool: phys 0x7ff24000  virt 0x00000000  count: 10
    Extend free pool: phys 0x7ff23000  virt 0x00000000  count: 11

    WedgeDryRun:
    Code: [Select]
    Hello from the (dry-run) Wedge.
          ConfigInfo @ 68fef000
        HardwareInfo @ dfffef00

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000ffff 00000a00
      058: 0000ffff 00000a00
    6 060: 00007fff 00000a00
      068: 00007fff 00000a00
      070: 8fef0000 00003013
      078: 8ffe0000 00000011 KDP
      080: 8fff0000 00000012 EDP
      088: 0000ffff 00000a01
      090: 0000ffff 00000a01
      098: 0000ffff 00000a00
    7 0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a01
      0b0: 0000ffff 00000a00
    8 0b8: 0000005f 8000003a
      0c0: 00600000 8006003a
      0c8: 0061001e 8006103a
      0d0: 00800000 8008003a
      0d8: 00810000 8008103a
      0e0: 0000ffff 80000a01
      0e8: 0000ffff 00000a00
    9 0f0: 0000000f 9000003a
      0f8: 0020001f 9002003a
      100: 80007fff 98000032
      108: 0000ffff 90000a01
      110: 0000ffff 00000a00
    A 118: 0000ffff a0000a01
      120: 0000ffff 00000a00
    B 128: 0000ffff b0000a01
      130: 0000ffff 00000a00
    C 138: 0000ffff c0000a01
      140: 0000ffff 00000a00
    D 148: fffe0000 00000012 IRP
      150: 0000ffff d0000a01
      158: 0000ffff 00000a00
    E 160: 4000017f 55600012
      168: 0000ffff e0000a01
      170: 0000ffff 00000a00
    F 178: 0000ffff f000003a
      180: 0000ffff f0000a01
      188: 0000ffff 00000a00

    Copying the system ConfigInfo and HardwareInfo structs.

    ErasePageMapTable at offset 0x3ac

    PatchMacOSAddressSpace: makeMemAvail 68000000
        nontrivial PME   LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.
        AddPageMapEntry: LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.

        nontrivial PME   LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.
        AddPageMapEntry: LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.

        nontrivial PME   LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.
        AddPageMapEntry: LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.

        nontrivial PME   LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80080000, count = 0x00001, PA = 0x80080000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80080000, count = 0x00001, PA = 0x80080000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x98000000, count = 0x08000, PA = 0x98000000, pageAttr = 0x0032, flags = 0x00.
        AddPageMapEntry: LA = 0x98000000, count = 0x08000, PA = 0x98000000, pageAttr = 0x0032, flags = 0x00.

        nontrivial PME   LA = 0xDFFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.
        AddPageMapEntry: LA = 0xDFFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.

        nontrivial PME   LA = 0xE4000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.
        AddPageMapEntry: LA = 0xE4000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.

        nontrivial PME   LA = 0xF0000000, count = 0x10000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF0000000, count = 0x10000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.

        Reinserting the MacOS area delimiters:
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.

    PatchMacOSAddressSpace succeeded (but was forbidden from patching the Emulator).

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000ffff 00000a00
      058: 0000ffff 00000a00
    6 060: 00007fff 00000a00
      068: 00007fff 00000a00
      070: 8fef0000 00003013
      078: 8ffe0000 00000011 KDP
      080: 8fff0000 00000012 EDP
      088: 0000ffff 00000a01
      090: 0000ffff 00000a01
      098: 0000ffff 00000a00
    7 0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a01
      0b0: 0000ffff 00000a00
    8 0b8: 0000005f 8000003a
      0c0: 00600000 8006003a
      0c8: 0061001e 8006103a
      0d0: 00800000 8008003a
      0d8: 00810000 8008103a
      0e0: 0000ffff 80000a01
      0e8: 0000ffff 00000a00
    9 0f0: 0000000f 9000003a
      0f8: 0020001f 9002003a
      100: 80007fff 98000032
      108: 0000ffff 90000a01
      110: 0000ffff 00000a00
    A 118: 0000ffff a0000a01
      120: 0000ffff 00000a00
    B 128: 0000ffff b0000a01
      130: 0000ffff 00000a00
    C 138: 0000ffff c0000a01
      140: 0000ffff 00000a00
    D 148: fffe0000 00000012 IRP
      150: 0000ffff d0000a01
      158: 0000ffff 00000a00
    E 160: 4000017f 55600012
      168: 0000ffff e0000a01
      170: 0000ffff 00000a00
    F 178: 0000ffff f000003a
      180: 0000ffff f0000a01
      188: 0000ffff 00000a00

    WedgeLogReader:
    Code: [Select]
    Hello from the Wedge.
          ConfigInfo (r3) @ 00003000
       ProcessorInfo (r4) @ 7fffff40
          SystemInfo (r5) @ 7ffffe00
      DiagnosticInfo (r6) @ 00000000
                RTAS (r7) = 52544153
            RTASProc (r8) @ 00000000
        HardwareInfo (r9) @ 7ffffd40

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000fffd 00000a00
      058: 0000fffd 00000a00
      060: fffe0000 00000012 IRP
      068: 0000ffff 00000a00
      070: 0000ffff 00000a00
    6 078: 4000017f 55600012
      080: 8fef0000 00003013
      088: 8ffe0000 00000011 KDP
      090: 8fff0000 00000012 EDP
      098: 0000ffff 00000a01
      0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a00
    7 0b0: 0000ffff 00000a01
      0b8: 0000ffff 00000a01
      0c0: 0000ffff 00000a00
    8 0c8: 0000005f 8000003a
      0d0: 00600000 8006003a
      0d8: 0061001e 8006103a
      0e0: 00800000 8008003a
      0e8: 00810000 8008103a
      0f0: 0000ffff 80000a01
      0f8: 0000ffff 00000a00
    9 100: 0000000f 9000003a
      108: 0020001f 9002003a
      110: 80007fff 98000032
      118: 0000ffff 90000a01
      120: 0000ffff 00000a00
    A 128: 0000ffff a0000a01
      130: 0000ffff 00000a00
    B 138: 0000ffff b0000a01
      140: 0000ffff 00000a00
    C 148: 0000ffff c0000a01
      150: 0000ffff 00000a00
    D 158: 0000ffff d0000a01
      160: 0000ffff 00000a00
    E 168: 0000ffff e0000a01
      170: 0000ffff 00000a00
    F 178: 0000ffff f000003a
      180: 0000ffff f0000a01
      188: 0000ffff 00000a00

    Rearranging the MacOS address space...

    ErasePageMapTable at offset 0x3ac

    PatchMacOSAddressSpace: makeMemAvail 68000000
        nontrivial PME   LA = 0x50000000, count = 0x0FFFE, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x50000000, count = 0x0FFFE, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x5FFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.
        **IRP**
        Patching Emulator lis/ori @ 181e8
        AddPageMapEntry: LA = 0xDFFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.

        nontrivial PME   LA = 0x64000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.
        **Universal/DeviceTree area**
        AddPageMapEntry: LA = 0xE4000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.

        nontrivial PME   LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.
        AddPageMapEntry: LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.

        nontrivial PME   LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.
        AddPageMapEntry: LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.

        nontrivial PME   LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.
        AddPageMapEntry: LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.

        nontrivial PME   LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80080000, count = 0x00001, PA = 0x80080000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80080000, count = 0x00001, PA = 0x80080000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x98000000, count = 0x08000, PA = 0x98000000, pageAttr = 0x0032, flags = 0x00.
        AddPageMapEntry: LA = 0x98000000, count = 0x08000, PA = 0x98000000, pageAttr = 0x0032, flags = 0x00.

        nontrivial PME   LA = 0xF0000000, count = 0x10000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF0000000, count = 0x10000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.

        Reinserting the MacOS area delimiters:
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.

    Copying modified ConfigInfo and HWInfo over the originals.

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000ffff 00000a00
      058: 0000ffff 00000a00
    6 060: 00007fff 00000a00
      068: 00007fff 00000a00
      070: 8fef0000 00003013
      078: 8ffe0000 00000011 KDP
      080: 8fff0000 00000012 EDP
      088: 0000ffff 00000a01
      090: 0000ffff 00000a01
      098: 0000ffff 00000a00
    7 0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a01
      0b0: 0000ffff 00000a00
    8 0b8: 0000005f 8000003a
      0c0: 00600000 8006003a
      0c8: 0061001e 8006103a
      0d0: 00800000 8008003a
      0d8: 00810000 8008103a
      0e0: 0000ffff 80000a01
      0e8: 0000ffff 00000a00
    9 0f0: 0000000f 9000003a
      0f8: 0020001f 9002003a
      100: 80007fff 98000032
      108: 0000ffff 90000a01
      110: 0000ffff 00000a00
    A 118: 0000ffff a0000a01
      120: 0000ffff 00000a00
    B 128: 0000ffff b0000a01
      130: 0000ffff 00000a00
    C 138: 0000ffff c0000a01
      140: 0000ffff 00000a00
    D 148: fffe0000 00000012 IRP
      150: 0000ffff d0000a01
      158: 0000ffff 00000a00
    E 160: 4000017f 55600012
      168: 0000ffff e0000a01
      170: 0000ffff 00000a00
    F 178: 0000ffff f000003a
      180: 0000ffff f0000a01
      188: 0000ffff 00000a00


    Handing over to the NanoKernel.
    Please don't PM about things that are not private.

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #112 on: June 04, 2017, 10:14:59 AM »
      I guess we're calling this ROM v3?  Well, this time it's recognized properly as bootable on MDD FW800/2GB/Sonnet with no hiccups.  Pretty cool!  Here's the outputs:

    NKLogReader:
    Code: [Select]
    NKNanoKernelInfo: logi addr 68ffedc0, struct ver 0228, 352 bytes.
    NKNanoKernelInfo is within the Kernel Data Page. KDP phys addr 7f7fe000.
    NanoKernel log starts after one blank line.

    Hello from the builtin multitasking NanoKernel. Version: 0228
    Kernel code base at 0x00f40000  Physical RAM size 0x7fffb000 bytes
    Created motherboard coherence group. ID 00010001
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Created system address space. ID 00030001
     BATs ffc0007f 00c00043   6800001f 00f00043   00000000 00000000   00000000 00000000
    Init ready queue 00000000 00000000 0000a8eb
    Init ready queue 00000001 00000000 00054758
    Init ready queue 00000002 00000000 002a3ac0
    Init ready queue 00000003 00000000 0151d600
    System context at 0x7f7ff100  Vector save area at 0x7f7fb8e0  SDR1 0x7f80003f
    Adding blue task 00050001 to the ready queue
    Starting timeslicing
    Adding idle task 00070001 to the ready queue
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Priming the system free list with 272 pages.
    VMMaxVirtualPages: 00068000 VMLogicalPages: 00000000
    Interrupt handler kind: 06
    Physical RAM greater than the initial logical area.
     Moving 95622 pages into the system free page list.
    Converting PMDTs to areas
     CreateArea [ 00000000 67ffffff ] ID 000a0001 placed ... created
     CreateArea [ 68fef000 68feffff ] ID 000b0001 placed ... created
     CreateArea [ 68ff5000 68ffefff ] ID 000c0001 placed ... created
     CreateArea [ 68fff000 68ffffff ] ID 000d0001 placed ... created
     CreateArea [ 80000000 8005ffff ] ID 000e0001 placed ... created
     CreateArea [ 80060000 80060fff ] ID 000f0001 placed ... created
     CreateArea [ 80061000 8007ffff ] ID 00100001 placed ... created
     CreateArea [ 80081000 80081fff ] ID 00110001 placed ... created
     CreateArea [ 80082000 80082fff ] ID 00120001 placed ... created
     CreateArea [ 81000000 81ffffff ] ID 00130001 placed ... created
     CreateArea [ 90000000 9000ffff ] ID 00140001 placed ... created
     CreateArea [ 90020000 9003ffff ] ID 00150001 placed ... created
     CreateArea [ 98000000 9fffffff ] ID 00160001 placed ... created
     CreateArea [ dfffe000 dfffefff ] ID 00170001 placed ... created
     CreateArea [ e4000000 e417ffff ] ID 00180001 placed ... created
     CreateArea [ f0000000 ffffffff ] ID 00190001 placed ... created
     CreateArea [ 68f16000 68f16fff ] ID 001a0001 placed ... created
     CreateArea [ deadb000 deadbfff ] ID 001b0001 placed ... created
    Reset system - Into the 68K fire: 0000d032 6806e8c0
    ResetSystem trap entered
    Kernel code base at 0x00f40000  Physical RAM size 0x7fffb000 bytes
    Created motherboard coherence group. ID 00010001
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Created system address space. ID 00030001
     BATs ffc0007f 00c00043   6800001f 00f00043   00000000 00000000   00000000 00000000
    Init ready queue 00000000 00000000 0000a8eb
    Init ready queue 00000001 00000000 00054758
    Init ready queue 00000002 00000000 002a3ac0
    Init ready queue 00000003 00000000 0151d600
    System context at 0x7f7ff100  Vector save area at 0x7f7fb8e0  SDR1 0x7f80003f
    Adding blue task 00050001 to the ready queue
    Starting timeslicing
    Adding idle task 00070001 to the ready queue
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Priming the system free list with 272 pages.
    VMMaxVirtualPages: 00068000 VMLogicalPages: 00068000
    Interrupt handler kind: 06
    Physical RAM greater than the initial logical area.
     Moving 95622 pages into the system free page list.
    Converting PMDTs to areas
     CreateArea [ 00000000 67ffffff ] ID 000a0001 placed ... created
     CreateArea [ 68fef000 68feffff ] ID 000b0001 placed ... created
     CreateArea [ 68ff5000 68ffefff ] ID 000c0001 placed ... created
     CreateArea [ 68fff000 68ffffff ] ID 000d0001 placed ... created
     CreateArea [ 80000000 8005ffff ] ID 000e0001 placed ... created
     CreateArea [ 80060000 80060fff ] ID 000f0001 placed ... created
     CreateArea [ 80061000 8007ffff ] ID 00100001 placed ... created
     CreateArea [ 80081000 80081fff ] ID 00110001 placed ... created
     CreateArea [ 80082000 80082fff ] ID 00120001 placed ... created
     CreateArea [ 81000000 81ffffff ] ID 00130001 placed ... created
     CreateArea [ 90000000 9000ffff ] ID 00140001 placed ... created
     CreateArea [ 90020000 9003ffff ] ID 00150001 placed ... created
     CreateArea [ 98000000 9fffffff ] ID 00160001 placed ... created
     CreateArea [ dfffe000 dfffefff ] ID 00170001 placed ... created
     CreateArea [ e4000000 e417ffff ] ID 00180001 placed ... created
     CreateArea [ f0000000 ffffffff ] ID 00190001 placed ... created
     CreateArea [ 68f16000 68f16fff ] ID 001a0001 placed ... created
     CreateArea [ deadb000 deadbfff ] ID 001b0001 placed ... created
    Reset system - Into the 68K fire: 0002d032 6806c9e8
     VMAllocateMemory - creating area at 0x69000000 00080000
     CreateArea [ 69000000 6907ffff ] ID 001c0001 placed ... created
    Extend free pool: phys 0x7ff2d000  virt 0x00000000  count: 1
    Extend free pool: phys 0x7ff2c000  virt 0x00000000  count: 2
    Extend free pool: phys 0x7ff2b000  virt 0x00000000  count: 3
    Extend free pool: phys 0x7ff2a000  virt 0x00000000  count: 4
    Extend free pool: phys 0x7ff29000  virt 0x00000000  count: 5
    Extend free pool: phys 0x7ff28000  virt 0x00000000  count: 6
    Extend free pool: phys 0x7ff27000  virt 0x00000000  count: 7
    Extend free pool: phys 0x7ff26000  virt 0x00000000  count: 8
    Extend free pool: phys 0x7ff25000  virt 0x00000000  count: 9
    Extend free pool: phys 0x7ff24000  virt 0x00000000  count: 10
    TB drift adjusted to 40064738  ppb ( 13041 / 325462 )
    Skeleton key inserted at00021032 010843d0
    Extend free pool: phys 0x7ff23000  virt 0x00000000  count: 11
    Extend free pool: phys 0x7ff22000  virt 0x00000000  count: 12

    WedgeDryRun:
    Code: [Select]
    Hello from the (dry-run) Wedge.
          ConfigInfo @ 68fef000
        HardwareInfo @ dfffef00

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000ffff 00000a00
      058: 0000ffff 00000a00
    6 060: 00007fff 00000a00
      068: 00007fff 00000a00
      070: 8fef0000 00003013
      078: 8ffe0000 00000011 KDP
      080: 8fff0000 00000012 EDP
      088: 0000ffff 00000a01
      090: 0000ffff 00000a01
      098: 0000ffff 00000a00
    7 0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a01
      0b0: 0000ffff 00000a00
    8 0b8: 0000005f 8000003a
      0c0: 00600000 8006003a
      0c8: 0061001e 8006103a
      0d0: 00810000 8008103a
      0d8: 00820000 8008203a
      0e0: 10000fff 8100003a
      0e8: 0000ffff 80000a01
      0f0: 0000ffff 00000a00
    9 0f8: 0000000f 9000003a
      100: 0020001f 9002003a
      108: 80007fff 98000032
      110: 0000ffff 90000a01
      118: 0000ffff 00000a00
    A 120: 0000ffff a0000a01
      128: 0000ffff 00000a00
    B 130: 0000ffff b0000a01
      138: 0000ffff 00000a00
    C 140: 0000ffff c0000a01
      148: 0000ffff 00000a00
    D 150: fffe0000 00000012 IRP
      158: 0000ffff d0000a01
      160: 0000ffff 00000a00
    E 168: 4000017f 55600012
      170: 0000ffff e0000a01
      178: 0000ffff 00000a00
    F 180: 0000ffff f000003a
      188: 0000ffff f0000a01
      190: 0000ffff 00000a00

    Copying the system ConfigInfo and HardwareInfo structs.

    ErasePageMapTable at offset 0x3ac

    PatchMacOSAddressSpace: makeMemAvail 68000000
        nontrivial PME   LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.
        AddPageMapEntry: LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.

        nontrivial PME   LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.
        AddPageMapEntry: LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.

        nontrivial PME   LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.
        AddPageMapEntry: LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.

        nontrivial PME   LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80082000, count = 0x00001, PA = 0x80082000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80082000, count = 0x00001, PA = 0x80082000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x81000000, count = 0x01000, PA = 0x81000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x81000000, count = 0x01000, PA = 0x81000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x98000000, count = 0x08000, PA = 0x98000000, pageAttr = 0x0032, flags = 0x00.
        AddPageMapEntry: LA = 0x98000000, count = 0x08000, PA = 0x98000000, pageAttr = 0x0032, flags = 0x00.

        nontrivial PME   LA = 0xDFFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.
        AddPageMapEntry: LA = 0xDFFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.

        nontrivial PME   LA = 0xE4000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.
        AddPageMapEntry: LA = 0xE4000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.

        nontrivial PME   LA = 0xF0000000, count = 0x10000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF0000000, count = 0x10000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.

        Reinserting the MacOS area delimiters:
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.

    PatchMacOSAddressSpace succeeded (but was forbidden from patching the Emulator).

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000ffff 00000a00
      058: 0000ffff 00000a00
    6 060: 00007fff 00000a00
      068: 00007fff 00000a00
      070: 8fef0000 00003013
      078: 8ffe0000 00000011 KDP
      080: 8fff0000 00000012 EDP
      088: 0000ffff 00000a01
      090: 0000ffff 00000a01
      098: 0000ffff 00000a00
    7 0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a01
      0b0: 0000ffff 00000a00
    8 0b8: 0000005f 8000003a
      0c0: 00600000 8006003a
      0c8: 0061001e 8006103a
      0d0: 00810000 8008103a
      0d8: 00820000 8008203a
      0e0: 10000fff 8100003a
      0e8: 0000ffff 80000a01
      0f0: 0000ffff 00000a00
    9 0f8: 0000000f 9000003a
      100: 0020001f 9002003a
      108: 80007fff 98000032
      110: 0000ffff 90000a01
      118: 0000ffff 00000a00
    A 120: 0000ffff a0000a01
      128: 0000ffff 00000a00
    B 130: 0000ffff b0000a01
      138: 0000ffff 00000a00
    C 140: 0000ffff c0000a01
      148: 0000ffff 00000a00
    D 150: fffe0000 00000012 IRP
      158: 0000ffff d0000a01
      160: 0000ffff 00000a00
    E 168: 4000017f 55600012
      170: 0000ffff e0000a01
      178: 0000ffff 00000a00
    F 180: 0000ffff f000003a
      188: 0000ffff f0000a01
      190: 0000ffff 00000a00

    WedgeLogReader:
    Code: [Select]
    Hello from the Wedge.
          ConfigInfo (r3) @ 00003000
       ProcessorInfo (r4) @ 7fffff40
          SystemInfo (r5) @ 7ffffe00
      DiagnosticInfo (r6) @ 00000000
                RTAS (r7) = 52544153
            RTASProc (r8) @ 00000000
        HardwareInfo (r9) @ 7ffffd40

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000fffd 00000a00
      058: 0000fffd 00000a00
      060: fffe0000 00000012 IRP
      068: 0000ffff 00000a00
      070: 0000ffff 00000a00
    6 078: 4000017f 55600012
      080: 8fef0000 00003013
      088: 8ffe0000 00000011 KDP
      090: 8fff0000 00000012 EDP
      098: 0000ffff 00000a01
      0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a00
    7 0b0: 0000ffff 00000a01
      0b8: 0000ffff 00000a01
      0c0: 0000ffff 00000a00
    8 0c8: 0000005f 8000003a
      0d0: 00600000 8006003a
      0d8: 0061001e 8006103a
      0e0: 00810000 8008103a
      0e8: 00820000 8008203a
      0f0: 10000fff 8100003a
      0f8: 0000ffff 80000a01
      100: 0000ffff 00000a00
    9 108: 0000000f 9000003a
      110: 0020001f 9002003a
      118: 80007fff 98000032
      120: 0000ffff 90000a01
      128: 0000ffff 00000a00
    A 130: 0000ffff a0000a01
      138: 0000ffff 00000a00
    B 140: 0000ffff b0000a01
      148: 0000ffff 00000a00
    C 150: 0000ffff c0000a01
      158: 0000ffff 00000a00
    D 160: 0000ffff d0000a01
      168: 0000ffff 00000a00
    E 170: 0000ffff e0000a01
      178: 0000ffff 00000a00
    F 180: 0000ffff f000003a
      188: 0000ffff f0000a01
      190: 0000ffff 00000a00

    Rearranging the MacOS address space...

    ErasePageMapTable at offset 0x3ac

    PatchMacOSAddressSpace: makeMemAvail 68000000
        nontrivial PME   LA = 0x50000000, count = 0x0FFFE, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x50000000, count = 0x0FFFE, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x5FFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.
        **IRP**
        Patching Emulator lis/ori @ 181e8
        AddPageMapEntry: LA = 0xDFFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.

        nontrivial PME   LA = 0x64000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.
        **Universal/DeviceTree area**
        AddPageMapEntry: LA = 0xE4000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.

        nontrivial PME   LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.
        AddPageMapEntry: LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.

        nontrivial PME   LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.
        AddPageMapEntry: LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.

        nontrivial PME   LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.
        AddPageMapEntry: LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.

        nontrivial PME   LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80082000, count = 0x00001, PA = 0x80082000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80082000, count = 0x00001, PA = 0x80082000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x81000000, count = 0x01000, PA = 0x81000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x81000000, count = 0x01000, PA = 0x81000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x98000000, count = 0x08000, PA = 0x98000000, pageAttr = 0x0032, flags = 0x00.
        AddPageMapEntry: LA = 0x98000000, count = 0x08000, PA = 0x98000000, pageAttr = 0x0032, flags = 0x00.

        nontrivial PME   LA = 0xF0000000, count = 0x10000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF0000000, count = 0x10000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.

        Reinserting the MacOS area delimiters:
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.

    Copying modified ConfigInfo and HWInfo over the originals.

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000ffff 00000a00
      058: 0000ffff 00000a00
    6 060: 00007fff 00000a00
      068: 00007fff 00000a00
      070: 8fef0000 00003013
      078: 8ffe0000 00000011 KDP
      080: 8fff0000 00000012 EDP
      088: 0000ffff 00000a01
      090: 0000ffff 00000a01
      098: 0000ffff 00000a00
    7 0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a01
      0b0: 0000ffff 00000a00
    8 0b8: 0000005f 8000003a
      0c0: 00600000 8006003a
      0c8: 0061001e 8006103a
      0d0: 00810000 8008103a
      0d8: 00820000 8008203a
      0e0: 10000fff 8100003a
      0e8: 0000ffff 80000a01
      0f0: 0000ffff 00000a00
    9 0f8: 0000000f 9000003a
      100: 0020001f 9002003a
      108: 80007fff 98000032
      110: 0000ffff 90000a01
      118: 0000ffff 00000a00
    A 120: 0000ffff a0000a01
      128: 0000ffff 00000a00
    B 130: 0000ffff b0000a01
      138: 0000ffff 00000a00
    C 140: 0000ffff c0000a01
      148: 0000ffff 00000a00
    D 150: fffe0000 00000012 IRP
      158: 0000ffff d0000a01
      160: 0000ffff 00000a00
    E 168: 4000017f 55600012
      170: 0000ffff e0000a01
      178: 0000ffff 00000a00
    F 180: 0000ffff f000003a
      188: 0000ffff f0000a01
      190: 0000ffff 00000a00


    Handing over to the NanoKernel.

    Original "About This Computer":


    ROM v3 "About This Computer":


    Next I'll move this over to the 9serve and try again!
    « Last Edit: June 04, 2017, 11:12:43 AM by MacOS Plus »

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #113 on: June 04, 2017, 12:01:12 PM »
    Logs from 9serve Rev.1/2GB/2x1.0GHz:

    NKLogReader:
    Code: [Select]
    NKNanoKernelInfo: logi addr 68ffedc0, struct ver 0228, 352 bytes.
    NKNanoKernelInfo is within the Kernel Data Page. KDP phys addr 7f7fe000.
    NanoKernel log starts after one blank line.

    Hello from the builtin multitasking NanoKernel. Version: 0228
    Kernel code base at 0x00f40000  Physical RAM size 0x7fffb000 bytes
    Created motherboard coherence group. ID 00010001
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Created system address space. ID 00030001
     BATs ffc0007f 00c00043   6800001f 00f00043   00000000 00000000   00000000 00000000
    Init ready queue 00000000 00000000 00008652
    Init ready queue 00000001 00000000 00043290
    Init ready queue 00000002 00000000 00219480
    Init ready queue 00000003 00000000 010ca400
    System context at 0x7f7ff100  Vector save area at 0x7f7fb8e0  SDR1 0x7f80003f
    Adding blue task 00050001 to the ready queue
    Starting timeslicing
    Adding idle task 00070001 to the ready queue
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Priming the system free list with 272 pages.
    VMMaxVirtualPages: 00068000 VMLogicalPages: 00000000
    Interrupt handler kind: 06
    Physical RAM greater than the initial logical area.
     Moving 95622 pages into the system free page list.
    Converting PMDTs to areas
     CreateArea [ 00000000 67ffffff ] ID 000a0001 placed ... created
     CreateArea [ 68fef000 68feffff ] ID 000b0001 placed ... created
     CreateArea [ 68ff5000 68ffefff ] ID 000c0001 placed ... created
     CreateArea [ 68fff000 68ffffff ] ID 000d0001 placed ... created
     CreateArea [ 80000000 8005ffff ] ID 000e0001 placed ... created
     CreateArea [ 80060000 80060fff ] ID 000f0001 placed ... created
     CreateArea [ 80061000 8007ffff ] ID 00100001 placed ... created
     CreateArea [ 80080000 80080fff ] ID 00110001 placed ... created
     CreateArea [ 80081000 80081fff ] ID 00120001 placed ... created
     CreateArea [ 90000000 9000ffff ] ID 00130001 placed ... created
     CreateArea [ 90020000 9003ffff ] ID 00140001 placed ... created
     CreateArea [ a0000000 afffffff ] ID 00150001 placed ... created
     CreateArea [ dfffe000 dfffefff ] ID 00160001 placed ... created
     CreateArea [ e4000000 e417ffff ] ID 00170001 placed ... created
     CreateArea [ f0000000 f4ffffff ] ID 00180001 placed ... created
     CreateArea [ f5000000 f5000fff ] ID 00190001 placed ... created
     CreateArea [ f5001000 f50fffff ] ID 001a0001 placed ... created
     CreateArea [ f5100000 f51fffff ] ID 001b0001 placed ... created
     CreateArea [ f5200000 f53fffff ] ID 001c0001 placed ... created
     CreateArea [ f5400000 ffffffff ] ID 001d0001 placed ... created
     CreateArea [ 68f16000 68f16fff ] ID 001e0001 placed ... created
     CreateArea [ deadb000 deadbfff ] ID 001f0001 placed ... created
    Reset system - Into the 68K fire: 0000d032 6806e8c0
    ResetSystem trap entered
    Kernel code base at 0x00f40000  Physical RAM size 0x7fffb000 bytes
    Created motherboard coherence group. ID 00010001
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Created system address space. ID 00030001
     BATs ffc0007f 00c00043   6800001f 00f00043   00000000 00000000   00000000 00000000
    Init ready queue 00000000 00000000 00008652
    Init ready queue 00000001 00000000 00043290
    Init ready queue 00000002 00000000 00219480
    Init ready queue 00000003 00000000 010ca400
    System context at 0x7f7ff100  Vector save area at 0x7f7fb8e0  SDR1 0x7f80003f
    Adding blue task 00050001 to the ready queue
    Starting timeslicing
    Adding idle task 00070001 to the ready queue
    NKCreateAddressSpaceSub - group at 0x7f7fc1c0 00010001
    Priming the system free list with 272 pages.
    VMMaxVirtualPages: 00068000 VMLogicalPages: 00068000
    Interrupt handler kind: 06
    Physical RAM greater than the initial logical area.
     Moving 95622 pages into the system free page list.
    Converting PMDTs to areas
     CreateArea [ 00000000 67ffffff ] ID 000a0001 placed ... created
     CreateArea [ 68fef000 68feffff ] ID 000b0001 placed ... created
     CreateArea [ 68ff5000 68ffefff ] ID 000c0001 placed ... created
     CreateArea [ 68fff000 68ffffff ] ID 000d0001 placed ... created
     CreateArea [ 80000000 8005ffff ] ID 000e0001 placed ... created
     CreateArea [ 80060000 80060fff ] ID 000f0001 placed ... created
     CreateArea [ 80061000 8007ffff ] ID 00100001 placed ... created
     CreateArea [ 80080000 80080fff ] ID 00110001 placed ... created
     CreateArea [ 80081000 80081fff ] ID 00120001 placed ... created
     CreateArea [ 90000000 9000ffff ] ID 00130001 placed ... created
     CreateArea [ 90020000 9003ffff ] ID 00140001 placed ... created
     CreateArea [ a0000000 afffffff ] ID 00150001 placed ... created
     CreateArea [ dfffe000 dfffefff ] ID 00160001 placed ... created
     CreateArea [ e4000000 e417ffff ] ID 00170001 placed ... created
     CreateArea [ f0000000 f4ffffff ] ID 00180001 placed ... created
     CreateArea [ f5000000 f5000fff ] ID 00190001 placed ... created
     CreateArea [ f5001000 f50fffff ] ID 001a0001 placed ... created
     CreateArea [ f5100000 f51fffff ] ID 001b0001 placed ... created
     CreateArea [ f5200000 f53fffff ] ID 001c0001 placed ... created
     CreateArea [ f5400000 ffffffff ] ID 001d0001 placed ... created
     CreateArea [ 68f16000 68f16fff ] ID 001e0001 placed ... created
     CreateArea [ deadb000 deadbfff ] ID 001f0001 placed ... created
    Reset system - Into the 68K fire: 0002d032 6806c9e8
     VMAllocateMemory - creating area at 0x69000000 00080000
     CreateArea [ 69000000 6907ffff ] ID 00200001 placed ... created
    Extend free pool: phys 0x7ff2d000  virt 0x00000000  count: 1
    VMMakePageCacheable for I/O 00090008
    VMMakePageCacheable for I/O 00090009
    VMMakePageCacheable for I/O 0009000a
    VMMakePageCacheable for I/O 0009000b
    VMMakePageCacheable for I/O 0009000c
    VMMakePageCacheable for I/O 0009000d
    VMMakePageCacheable for I/O 0009000e
    VMMakePageCacheable for I/O 0009000f
    Extend free pool: phys 0x7ff2c000  virt 0x00000000  count: 2
    Extend free pool: phys 0x7ff2b000  virt 0x00000000  count: 3
    Extend free pool: phys 0x7ff2a000  virt 0x00000000  count: 4
    Extend free pool: phys 0x7ff29000  virt 0x00000000  count: 5
    Extend free pool: phys 0x7ff28000  virt 0x00000000  count: 6
    Extend free pool: phys 0x7ff27000  virt 0x00000000  count: 7
    Extend free pool: phys 0x7ff26000  virt 0x00000000  count: 8
    Extend free pool: phys 0x7ff25000  virt 0x00000000  count: 9
    Extend free pool: phys 0x7ff24000  virt 0x00000000  count: 10
    TB drift adjusted to 33175978  ppb ( 8612 / 259605 )
    Extend free pool: phys 0x7ff23000  virt 0x00000000  count: 11
    Extend free pool: phys 0x7ff22000  virt 0x00000000  count: 12

    WedgeDryRun:
    Code: [Select]
    Hello from the (dry-run) Wedge.
          ConfigInfo @ 68fef000
        HardwareInfo @ dfffef00

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000ffff 00000a00
      058: 0000ffff 00000a00
    6 060: 00007fff 00000a00
      068: 00007fff 00000a00
      070: 8fef0000 00003013
      078: 8ffe0000 00000011 KDP
      080: 8fff0000 00000012 EDP
      088: 0000ffff 00000a01
      090: 0000ffff 00000a01
      098: 0000ffff 00000a00
    7 0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a01
      0b0: 0000ffff 00000a00
    8 0b8: 0000005f 8000003a
      0c0: 00600000 8006003a
      0c8: 0061001e 8006103a
      0d0: 00800000 8008003a
      0d8: 00810000 8008103a
      0e0: 0000ffff 80000a01
      0e8: 0000ffff 00000a00
    9 0f0: 0000000f 9000003a
      0f8: 0020001f 9002003a
      100: 0000ffff 90000a01
      108: 0000ffff 00000a00
    A 110: 0000ffff a0000032
      118: 0000ffff a0000a01
      120: 0000ffff 00000a00
    B 128: 0000ffff b0000a01
      130: 0000ffff 00000a00
    C 138: 0000ffff c0000a01
      140: 0000ffff 00000a00
    D 148: fffe0000 00000012 IRP
      150: 0000ffff d0000a01
      158: 0000ffff 00000a00
    E 160: 4000017f 55600012
      168: 0000ffff e0000a01
      170: 0000ffff 00000a00
    F 178: 00004fff f000003a
      180: 50000000 f500003a
      188: 500100fe f500103a
      190: 510000ff f510003a
      198: 520001ff f520003a
      1a0: 5400abff f540003a
      1a8: 0000ffff f0000a01
      1b0: 0000ffff 00000a00

    Copying the system ConfigInfo and HardwareInfo structs.

    ErasePageMapTable at offset 0x3ac

    PatchMacOSAddressSpace: makeMemAvail 68000000
        nontrivial PME   LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.
        AddPageMapEntry: LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.

        nontrivial PME   LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.
        AddPageMapEntry: LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.

        nontrivial PME   LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.
        AddPageMapEntry: LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.

        nontrivial PME   LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80080000, count = 0x00001, PA = 0x80080000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80080000, count = 0x00001, PA = 0x80080000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xA0000000, count = 0x10000, PA = 0xA0000000, pageAttr = 0x0032, flags = 0x00.
        AddPageMapEntry: LA = 0xA0000000, count = 0x10000, PA = 0xA0000000, pageAttr = 0x0032, flags = 0x00.

        nontrivial PME   LA = 0xDFFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.
        AddPageMapEntry: LA = 0xDFFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.

        nontrivial PME   LA = 0xE4000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.
        AddPageMapEntry: LA = 0xE4000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.

        nontrivial PME   LA = 0xF0000000, count = 0x05000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF0000000, count = 0x05000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xF5000000, count = 0x00001, PA = 0xF5000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF5000000, count = 0x00001, PA = 0xF5000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xF5001000, count = 0x000FF, PA = 0xF5001000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF5001000, count = 0x000FF, PA = 0xF5001000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xF5100000, count = 0x00100, PA = 0xF5100000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF5100000, count = 0x00100, PA = 0xF5100000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xF5200000, count = 0x00200, PA = 0xF5200000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF5200000, count = 0x00200, PA = 0xF5200000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xF5400000, count = 0x0AC00, PA = 0xF5400000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF5400000, count = 0x0AC00, PA = 0xF5400000, pageAttr = 0x003A, flags = 0x00.

        Reinserting the MacOS area delimiters:
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.

    PatchMacOSAddressSpace succeeded (but was forbidden from patching the Emulator).

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000ffff 00000a00
      058: 0000ffff 00000a00
    6 060: 00007fff 00000a00
      068: 00007fff 00000a00
      070: 8fef0000 00003013
      078: 8ffe0000 00000011 KDP
      080: 8fff0000 00000012 EDP
      088: 0000ffff 00000a01
      090: 0000ffff 00000a01
      098: 0000ffff 00000a00
    7 0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a01
      0b0: 0000ffff 00000a00
    8 0b8: 0000005f 8000003a
      0c0: 00600000 8006003a
      0c8: 0061001e 8006103a
      0d0: 00800000 8008003a
      0d8: 00810000 8008103a
      0e0: 0000ffff 80000a01
      0e8: 0000ffff 00000a00
    9 0f0: 0000000f 9000003a
      0f8: 0020001f 9002003a
      100: 0000ffff 90000a01
      108: 0000ffff 00000a00
    A 110: 0000ffff a0000032
      118: 0000ffff a0000a01
      120: 0000ffff 00000a00
    B 128: 0000ffff b0000a01
      130: 0000ffff 00000a00
    C 138: 0000ffff c0000a01
      140: 0000ffff 00000a00
    D 148: fffe0000 00000012 IRP
      150: 0000ffff d0000a01
      158: 0000ffff 00000a00
    E 160: 4000017f 55600012
      168: 0000ffff e0000a01
      170: 0000ffff 00000a00
    F 178: 00004fff f000003a
      180: 50000000 f500003a
      188: 500100fe f500103a
      190: 510000ff f510003a
      198: 520001ff f520003a
      1a0: 5400abff f540003a
      1a8: 0000ffff f0000a01
      1b0: 0000ffff 00000a00

    WedgeLogReader:
    Code: [Select]
    Hello from the Wedge.
          ConfigInfo (r3) @ 00003000
       ProcessorInfo (r4) @ 7fffff40
          SystemInfo (r5) @ 7ffffe00
      DiagnosticInfo (r6) @ 00000000
                RTAS (r7) = 52544153
            RTASProc (r8) @ 00000000
        HardwareInfo (r9) @ 7ffffd40

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000fffd 00000a00
      058: 0000fffd 00000a00
      060: fffe0000 00000012 IRP
      068: 0000ffff 00000a00
      070: 0000ffff 00000a00
    6 078: 4000017f 55600012
      080: 8fef0000 00003013
      088: 8ffe0000 00000011 KDP
      090: 8fff0000 00000012 EDP
      098: 0000ffff 00000a01
      0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a00
    7 0b0: 0000ffff 00000a01
      0b8: 0000ffff 00000a01
      0c0: 0000ffff 00000a00
    8 0c8: 0000005f 8000003a
      0d0: 00600000 8006003a
      0d8: 0061001e 8006103a
      0e0: 00800000 8008003a
      0e8: 00810000 8008103a
      0f0: 0000ffff 80000a01
      0f8: 0000ffff 00000a00
    9 100: 0000000f 9000003a
      108: 0020001f 9002003a
      110: 0000ffff 90000a01
      118: 0000ffff 00000a00
    A 120: 0000ffff a0000032
      128: 0000ffff a0000a01
      130: 0000ffff 00000a00
    B 138: 0000ffff b0000a01
      140: 0000ffff 00000a00
    C 148: 0000ffff c0000a01
      150: 0000ffff 00000a00
    D 158: 0000ffff d0000a01
      160: 0000ffff 00000a00
    E 168: 0000ffff e0000a01
      170: 0000ffff 00000a00
    F 178: 00004fff f000003a
      180: 50000000 f500003a
      188: 500100fe f500103a
      190: 510000ff f510003a
      198: 520001ff f520003a
      1a0: 5400abff f540003a
      1a8: 0000ffff f0000a01
      1b0: 0000ffff 00000a00

    Rearranging the MacOS address space...

    ErasePageMapTable at offset 0x3ac

    PatchMacOSAddressSpace: makeMemAvail 68000000
        nontrivial PME   LA = 0x50000000, count = 0x0FFFE, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x50000000, count = 0x0FFFE, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        MacOS area delimiter: skipping

        nontrivial PME   LA = 0x5FFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.
        **IRP**
        Patching Emulator lis/ori @ 181e8
        AddPageMapEntry: LA = 0xDFFFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x01.

        nontrivial PME   LA = 0x64000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.
        **Universal/DeviceTree area**
        AddPageMapEntry: LA = 0xE4000000, count = 0x00180, PA = 0x55600000, pageAttr = 0x0012, flags = 0x00.

        nontrivial PME   LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.
        AddPageMapEntry: LA = 0x68FEF000, count = 0x00001, PA = 0x00003000, pageAttr = 0x0013, flags = 0x00.

        nontrivial PME   LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.
        AddPageMapEntry: LA = 0x68FFE000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0011, flags = 0x02.

        nontrivial PME   LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.
        AddPageMapEntry: LA = 0x68FFF000, count = 0x00001, PA = 0x00000000, pageAttr = 0x0012, flags = 0x03.

        nontrivial PME   LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80000000, count = 0x00060, PA = 0x80000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80060000, count = 0x00001, PA = 0x80060000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80061000, count = 0x0001F, PA = 0x80061000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80080000, count = 0x00001, PA = 0x80080000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80080000, count = 0x00001, PA = 0x80080000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x80081000, count = 0x00001, PA = 0x80081000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90000000, count = 0x00010, PA = 0x90000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0x90020000, count = 0x00020, PA = 0x90020000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xA0000000, count = 0x10000, PA = 0xA0000000, pageAttr = 0x0032, flags = 0x00.
        AddPageMapEntry: LA = 0xA0000000, count = 0x10000, PA = 0xA0000000, pageAttr = 0x0032, flags = 0x00.

        nontrivial PME   LA = 0xF0000000, count = 0x05000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF0000000, count = 0x05000, PA = 0xF0000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xF5000000, count = 0x00001, PA = 0xF5000000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF5000000, count = 0x00001, PA = 0xF5000000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xF5001000, count = 0x000FF, PA = 0xF5001000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF5001000, count = 0x000FF, PA = 0xF5001000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xF5100000, count = 0x00100, PA = 0xF5100000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF5100000, count = 0x00100, PA = 0xF5100000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xF5200000, count = 0x00200, PA = 0xF5200000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF5200000, count = 0x00200, PA = 0xF5200000, pageAttr = 0x003A, flags = 0x00.

        nontrivial PME   LA = 0xF5400000, count = 0x0AC00, PA = 0xF5400000, pageAttr = 0x003A, flags = 0x00.
        AddPageMapEntry: LA = 0xF5400000, count = 0x0AC00, PA = 0xF5400000, pageAttr = 0x003A, flags = 0x00.

        Reinserting the MacOS area delimiters:
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.
        AddPageMapEntry: LA = 0x60000000, count = 0x08000, PA = 0x00000000, pageAttr = 0x0A00, flags = 0x00.

    Copying modified ConfigInfo and HWInfo over the originals.

    DebugDumpPageMap
    0 000: 0000ffff 00000a00
      008: 0000ffff 00000a00
    1 010: 0000ffff 00000a00
      018: 0000ffff 00000a00
    2 020: 0000ffff 00000a00
      028: 0000ffff 00000a00
    3 030: 0000ffff 00000a00
      038: 0000ffff 00000a00
    4 040: 0000ffff 00000a00
      048: 0000ffff 00000a00
    5 050: 0000ffff 00000a00
      058: 0000ffff 00000a00
    6 060: 00007fff 00000a00
      068: 00007fff 00000a00
      070: 8fef0000 00003013
      078: 8ffe0000 00000011 KDP
      080: 8fff0000 00000012 EDP
      088: 0000ffff 00000a01
      090: 0000ffff 00000a01
      098: 0000ffff 00000a00
    7 0a0: 0000ffff 00000a01
      0a8: 0000ffff 00000a01
      0b0: 0000ffff 00000a00
    8 0b8: 0000005f 8000003a
      0c0: 00600000 8006003a
      0c8: 0061001e 8006103a
      0d0: 00800000 8008003a
      0d8: 00810000 8008103a
      0e0: 0000ffff 80000a01
      0e8: 0000ffff 00000a00
    9 0f0: 0000000f 9000003a
      0f8: 0020001f 9002003a
      100: 0000ffff 90000a01
      108: 0000ffff 00000a00
    A 110: 0000ffff a0000032
      118: 0000ffff a0000a01
      120: 0000ffff 00000a00
    B 128: 0000ffff b0000a01
      130: 0000ffff 00000a00
    C 138: 0000ffff c0000a01
      140: 0000ffff 00000a00
    D 148: fffe0000 00000012 IRP
      150: 0000ffff d0000a01
      158: 0000ffff 00000a00
    E 160: 4000017f 55600012
      168: 0000ffff e0000a01
      170: 0000ffff 00000a00
    F 178: 00004fff f000003a
      180: 50000000 f500003a
      188: 500100fe f500103a
      190: 510000ff f510003a
      198: 520001ff f520003a
      1a0: 5400abff f540003a
      1a8: 0000ffff f0000a01
      1b0: 0000ffff 00000a00


    Handing over to the NanoKernel.

      Before/After RAM stats same as the results with the MDD (as expected), so I won't bother with additional screenshots.  BTW, posting this from the 9serve!

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #114 on: June 04, 2017, 01:26:04 PM »
    I just added 256 MB or RAM to my main working computer (a G4 MDD) and I started to do real life test, In this picture we can see Cubase using 1.54 Gb or RAM, (mainly loaded by Kompakt sampler instruments). No problems by now ...  ;D

    « Last Edit: June 05, 2017, 08:55:43 AM by MacTron »
    Please don't PM about things that are not private.

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #115 on: June 04, 2017, 03:44:49 PM »
      I figured you would be the first to max it out with synths!  When we eventually get the full two gigs, please give us a report on latency. ;)

    Offline DieHard

    • Administrator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 1678
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #116 on: June 04, 2017, 06:42:03 PM »
    We should inform the other forums about this !  This is pretty crazy... 15 years after the OS 9 funeral it is getting a genetic overhaul,
    128MB might not seem like much until you consider that 128MB is what many users had in the Classic Mac OS era to run OS 9 and all their applications.

    In the big scheme of things, this is quite remarkable :)

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #117 on: June 04, 2017, 07:31:31 PM »
      Remember a time when a 128MB DIMM stick wasn't just a leftover at the bottom of your spare pile?  Nostalgic...

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #118 on: June 04, 2017, 08:10:19 PM »
    I just added 256 MB or RAM to my main working computer (a G4 MDD) and I started to do real life test, In this picture we can see Cubase using 1.54 Gb or RAM, (mainly loaded by kompak sampler instruments). No problems by now ...  ;D

    This is good to see! We are considering some other ways of pushing the limit even further. It might require us to patch the Process Manager to divide up its heap. It would be very useful for me to know the memory layout on your machine running Cubase.

    Would you mind collecting some data for me? A screenshot of this app while Cubase is running, and the details in the Memory panel of the Get Info window for Cubase.

    https://www.macintoshrepository.org/1253-memory-mapper-1-5

    And by the way, is it possible to enable VM on a machine with 2GB of RAM? Would someone mind checking?

    We should inform the other forums about this !

    Go for it!

    Offline nanopico

    • Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 720
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #119 on: June 04, 2017, 08:20:20 PM »
    I just added 256 MB or RAM to my main working computer (a G4 MDD) and I started to do real life test, In this picture we can see Cubase using 1.54 Gb or RAM, (mainly loaded by kompak sampler instruments). No problems by now ...  ;D

    This is good to see! We are considering some other ways of pushing the limit even further. It might require us to patch the Process Manager to divide up its heap. It would be very useful for me to know the memory layout on your machine running Cubase.

    Would you mind collecting some data for me? A screenshot of this app while Cubase is running, and the details in the Memory panel of the Get Info window for Cubase.

    https://www.macintoshrepository.org/1253-memory-mapper-1-5

    And by the way, is it possible to enable VM on a machine with 2GB of RAM? Would someone mind checking?

    We should inform the other forums about this !

    Go for it!

    If I recall, there is a point where you can no longer turn on virtual memory because you have enough RAM.  I don't recall off the top of my head though.
    If it ain't broke, don't fix it, or break it so you can fix it!

    Online Protools5LEGuy

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2252
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #120 on: June 05, 2017, 06:36:01 AM »
    We should inform the other forums about this !  This is pretty crazy... 15 years after the OS 9 funeral it is getting a genetic overhaul,
    128MB might not seem like much until you consider that 128MB is what many users had in the Classic Mac OS era to run OS 9 and all their applications.

    In the big scheme of things, this is quite remarkable :)

    Done. https://forums.macrumors.com/threads/mac-os-9-2-2-memory-limit-of-1-5-gb-broken.2048385/
    Looking for MacOS 9.2.4

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #121 on: June 05, 2017, 08:31:40 AM »
    Would you mind collecting some data for me? A screenshot of this app while Cubase is running, and the details in the Memory panel of the Get Info window for Cubase.
    Of course I'll do it, it's a pleasure to participate in this historical thread :)



    I have also added a "About this computer" window, just to remember you that this machine have 1.75 GB of RAM.
     My System and Finder Files have the size values in SIZE resources slightly increased to increase stability.
    « Last Edit: June 06, 2017, 03:18:34 AM by MacTron »
    Please don't PM about things that are not private.

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #122 on: June 05, 2017, 09:21:56 AM »
      Speaking of 1.75GB of RAM, I just went through hell trying to test a Sawtooth over the limit.  I had a matched set of four 512MB DIMMs available to test with but the machine insisted one of them was "incompatible".  After much screwing around and a whole bunch of necessitated PMU resets I managed to get my only remaining extra 512MB DIMM I could find recognized as 256MB.  Of course all of this nonsense is to be fully expected from a Sawtooth motherboard, but at least getting it to count 1.75GBs of RAM proves this machine should be able to recognize 2GB if given RAM it 'likes'.  I'll see if I can purchase more now that I know it's worth installing.

      In the end I still accomplished to purpose of the test - the RAM gain works on this machine with the latest modified Mac OS ROM.  Thanks to all the time I wasted this morning on this I don't have time to post logs yet.  I can make one interesting observation, and that is System Profiler didn't crash in this config on the Sawtooth.

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #123 on: June 05, 2017, 04:46:59 PM »
    I didn't realise that Sawteeth could take all that RAM. Cool!

    MacTron, your results surprise me. I expected Cubase to have a smaller base memory partition with several Temporary Memory allocations. Does Cubase have any settings concerning how it manages memory? Thanks for the screenshot!

    There are roughly two approaches we can take from here. One is to move the fixed areas, and the other is to patch the Process Manager to work around them. Good fun!

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #124 on: June 05, 2017, 08:47:22 PM »
    I didn't realise that Sawteeth could take all that RAM. Cool!

      On a related note, have you seen how freaking dirt-cheap PC133 512MB DIMMs are on eBay now?!?  I just bought 16 of them for USD $3.49 a piece and free shipping direct from China.  For that price I don't even care if the Macs don't like them - I'll just use them for my old PC stuff.  It's crazy how much some of this vintage of hardware has depreciated with time!

      Now I should go see how cheap the old DDR RAM is...

    <update> Just picked up 20 pieces of PC3200 DDR 512MB DIMMs for USD $2.90 each and free shipping!  At these prices everyone should be stocking up and maxing out their systems.  You really have no excuse!  Even for listings guaranteeing Mac-tested/compatible the prices aren't much higher.

      If anyone else is going to buy RAM, I believe you have to get what's referred to as "low-density" type if you want the best chance of it working in Macs (or many other things, for that matter).  Perhaps someone with decent Apple tech experience in this area can comment further on that.
    « Last Edit: June 05, 2017, 09:05:52 PM by MacOS Plus »

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #125 on: June 06, 2017, 08:40:47 AM »
    MacTron, your results surprise me. I expected Cubase to have a smaller base memory partition with several Temporary Memory allocations.
    Most of this memory is filled with near 1.5 GB of sampled instruments, loaded inside Cubase by a VST Plugin ( NI Kompakt ).
    Here I take another screenshot with an empty Cubase projet, and the same memory allocation:


    Quote
    Does Cubase have any settings concerning how it manages memory?
    No it doesn't, It only have settings on how dual processors are managed, but this is another thing...
    « Last Edit: June 06, 2017, 09:05:44 AM by MacTron »
    Please don't PM about things that are not private.

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #126 on: June 06, 2017, 09:04:27 AM »
      I figured you would be the first to max it out with synths!  When we eventually get the full two gigs,
    The Synths take all the CPU power first, barely use RAM, but the Samplers eat RAM really easily, a good sampled piano can take 1.5 gb of memory. Usually Samplers to save RAM use a hybrid system (like Virtual Memory) from Hard Disk , but this decrease its capabilities a lot . To said it in short.
    Quote
    please give us a report on latency. ;)
    To report latency, is a very complex task, because it depends in a huge amount of factors ...
    Please don't PM about things that are not private.

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #127 on: June 06, 2017, 09:27:13 AM »
      I was merely wondering if you'll hit some sort of practical limit for simultaneous instances/instruments depending on what you do with your gained RAM.  Perhaps CPU bandwidth is still going to be the primary bottleneck anyway.  You seem like the right person for the task though!

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #128 on: June 06, 2017, 01:00:29 PM »
      I was merely wondering if you'll hit some sort of practical limit for simultaneous instances/instruments depending on what you do with your gained RAM.  Perhaps CPU bandwidth is still going to be the primary bottleneck anyway.  You seem like the right person for the task though!
    I don't want to go off topic into a very important thread like this, but in short:
    I only use two virtual instruments, a Synth (NI FM7) and a Sampler (NI Kompakt) in Cubase VST 5. My main computer is a  Single 1.5Ghz MDD. It can open up to 10 instances of FM7 with over 128 notes of polyphony.By the other way,  It can open up to 3 instances of Kompakt with up to 24 instruments at the same time, but this is limited by the amount of RAM available, If I load a 1.5 Gb piano, there is no room for any other instrument. I had a song in stand by for months, because I have reached the maximun instruments load before ending the song. Yesterday I have restarted the work because now  I could add one or two more instruments whit this 128 Mb extra ( a church organ BTW)   ;D ...
    Please don't PM about things that are not private.

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #129 on: June 06, 2017, 08:20:07 PM »
      Okay, thanks, that's very informative.  Most excellent too that the gained RAM has already made a major difference for your project - that's fantastic!  I'd really love to try loading up a 1.5GB piano myself.

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #130 on: June 09, 2017, 06:46:27 PM »
    I had a song in stand by for months, because I have reached the maximun instruments load before ending the song. Yesterday I have restarted the work because now  I could add one or two more instruments whit this 128 Mb extra ( a church organ BTW)   ;D ...

    Cool! How's it going? Do I get a copy?

    Another question for you, MacTron. If you reduce Cubase's allocation in the Memory Info panel (say to 512MB), does this actually reduce the number of instruments you can use? Or does Cubase possibly use the Temporary Memory allocation scheme to get around this limit?

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #131 on: June 10, 2017, 04:20:19 AM »

    Cool! How's it going? Do I get a copy?
    Of Course you can, Everything is in the downloads sections, If you can't' find something just let me know.  ;)
    Quote
    Another question for you, MacTron. If you reduce Cubase's allocation in the Memory Info panel (say to 512MB), does this actually reduce the number of instruments you can use?
    If I reduce the Cubase allocation in the Memory Info panel, the amount of memory available is reduced accordingly.
    Cubase - as most applications - fill its allocation memory with the contents of its files, in this case with scores, mixing setups, virtual effects and instruments etc ...  the virtual samplers ( loaded inside Cubase)  besides the memory they use for its code and resources, uses memory to store the samples that conform the Sampler instruments, as they are loaded inside Cubase they only have access to the memory in the Cubase partition, not outside it.

    Quote
    Or does Cubase possibly use the Temporary Memory allocation scheme to get around this limit?

    No Cubase can't do this. Emagic Logic Audio does.


    I have edited this post to add a typical example of sampled instruments memory usage:
    500Mb -> Women choir (with all consonants and vowels)
    500Mb -> String section ( violin,  violas , cellos, etc) with several articulations (staccato, sustained ...)
    500 Mb -> Brass, Woodwind and Percussion.

    As you can see a basic setup fill 1.5 Gb of memory and it's hard to insert a piano, an harp or even church organ  :)


    A workaround of this is to play the samples directly from disk instead of loading them to RAM, or at least in part, but the polyphony decreases heavily because this process implies that the samples have to travel from the HD througth the PCI bus etc, and this heavily slowdown the playback performance .

    I you have Youtube access here you can see an example of this setup. Everything is rendered in real time in a Mac Os 9 machine -even the video- :
    https://youtu.be/faisvdwXjpg
    « Last Edit: June 10, 2017, 09:24:38 AM by MacTron »
    Please don't PM about things that are not private.

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #132 on: June 10, 2017, 08:54:45 AM »
      Or does Cubase possibly use the Temporary Memory allocation scheme to get around this limit?

    No Cubase can't do this. Emagic Logic Audio does.

      This is a useful tidbit I wasn't aware of.  In a program that can't do this, what typically happens if it hits the cap?  I remember one DAW program many years ago I had to use on a Quadra with only 40MB of RAM, and this program had a memory leak that would only let me do about three hours work before I had to save/quit/re-open.  If it was allowed to hit the cap of its allocation it would generally crash with a numbered error, so I had to keep the RAM monitor window open and keep watch over it.  I'm fairly certain the memory leak persisted on later more capable workstations using the same software, but the much larger amount of RAM in the other systems masked over the problem.  I don't know if the problem was related only to the software or if it also was a problem with Mac OS 8.1.  The other, better workstations were running Mac OS 8.6.

    Offline DieHard

    • Administrator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 1678
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #133 on: June 12, 2017, 01:46:31 AM »
    From GeForce4
    Quote
    doing what exactly tho??
    wishing on a star? :) for an alternate universe? where macos9 takes 16gb of ram?

    every other os tho, the limitations that were there when the os was current, still apply, this is not linux.
    its not open source.. the chances of you guys really modifying + changing functionality of the os is very unlikely.
    getting mac os 9 to run on a fw800 is a bit different because its somethng that was purposely disabled
    its not something that was an incompatibility that was never overcome by the real developers.. u think there wasnt any
    really skilled programmers at apple? who would have loved to advanced their career by coming up with the idea that doubled or quadrupled available ram to the OS???

    but a few guys scratchin at notepad on a forums site can do it when the real pros couldnt? :) i dunno guys...
    alot of times the best work is done by accepting + Working within the limitations

    I guess there are those above the REAL PROS...
    Quote
    The Ultra-Pros do NOT accept limitations... while changing the rules they bend the universe into submission

    128MB... one small step for Mac OS 9, one giant step for User-kind

    Offline SonikArchitects

    • Enthusiast Member (25+ Posts)
    • ***
    • Posts: 61
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #134 on: June 12, 2017, 06:30:01 AM »
    This is so amazing I am absolutely speechless. Want this on my main rig asap.
    Is there a DL link and instructions?

    Just a side thought, there's been a lot of progress with augmenting 9.22 at this point. Maybe the admins could make an area for downloadable augmentations to the system with txt doc's of simple install instructions.

    PS, I've showed some folks at Apple this and they are, shall I say, speechless. Literally.
    Winning guys. This is incredible.

    Best,
    _BT

    Offline nanopico

    • Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 720
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #135 on: June 12, 2017, 07:13:48 AM »
    PS, I've showed some folks at Apple this and they are, shall I say, speechless. Literally.
    Winning guys. This is incredible.

    I hope it's speechless because they are impressed.

    I guess it was only a mater of time before someone tipped off someone at Apple, who knows though, maybe they already know.

    Out of curiosity, what's your relationship with the people at Apple that are now informed of this?
    If it ain't broke, don't fix it, or break it so you can fix it!

    Offline DieHard

    • Administrator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 1678
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #136 on: June 12, 2017, 09:40:43 AM »
    This is so amazing I am absolutely speechless. Want this on my main rig asap.
    Is there a DL link and instructions?

    Just a side thought, there's been a lot of progress with augmenting 9.22 at this point. Maybe the admins could make an area for downloadable augmentations to the system with txt doc's of simple install instructions.

    Best,
    _BT

    The process is pretty straight forward and has to be implemented Manually at the moment...
    1) Own an MDD FW400 System (Only one really tested so far)
    2) Replace "ROM" file with ELN/NanoPico Limit breaking ROM and reboot
    3) cross your fingers and test your apps

    Offline nanopico

    • Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 720
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #137 on: June 12, 2017, 09:52:24 AM »
    This is so amazing I am absolutely speechless. Want this on my main rig asap.
    Is there a DL link and instructions?

    Just a side thought, there's been a lot of progress with augmenting 9.22 at this point. Maybe the admins could make an area for downloadable augmentations to the system with txt doc's of simple install instructions.

    Best,
    _BT

    We are working on a system install

    The process is pretty straight forward and has to be implemented Manually at the moment...
    1) Own an MDD FW400 System (Only one really tested so far)
    2) Replace "ROM" file with ELN/NanoPico Limit breaking ROM and reboot
    3) cross your fingers and test your apps

    We are working on an installer cd with the ROM and the most current version and drivers that are available here (We are still a bit out on this one).
    Although ASR is very good, building an installer that is just like Apple's would make sense on this.
    All features of the OS would be available and allow the user to decide what to use. 
    The ASR images are great for things like the DAW and other stuff, but if a user doesn't need all that and needs things from the OS that are not in the ASR and universal general install should be used.  I think all and all there should be both options available depending on the end users needs.

    From GeForce4
    Quote
    doing what exactly tho??
    wishing on a star? :) for an alternate universe? where macos9 takes 16gb of ram?

    every other os tho, the limitations that were there when the os was current, still apply, this is not linux.
    its not open source.. the chances of you guys really modifying + changing functionality of the os is very unlikely.
    getting mac os 9 to run on a fw800 is a bit different because its somethng that was purposely disabled
    its not something that was an incompatibility that was never overcome by the real developers.. u think there wasnt any
    really skilled programmers at apple? who would have loved to advanced their career by coming up with the idea that doubled or quadrupled available ram to the OS???

    but a few guys scratchin at notepad on a forums site can do it when the real pros couldnt? :) i dunno guys...
    alot of times the best work is done by accepting + Working within the limitations

    I guess there are those above the REAL PROS...
    Quote
    The Ultra-Pros do NOT accept limitations... while changing the rules they bend the universe into submission

    128MB... one small step for Mac OS 9, one giant step for User-kind

    And since you brought it up. Notepad is a pretty cool app. I do use it regularly. ;D
    If it ain't broke, don't fix it, or break it so you can fix it!

    Offline Irisman

    • Veteran Member (100+ Posts)
    • ****
    • Posts: 144
    • each day I am older
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #138 on: June 12, 2017, 10:03:30 AM »
    Absolutely impressive work!!  My hat off!!!

    Offline nanopico

    • Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 720
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #139 on: June 12, 2017, 02:22:09 PM »
    The process is pretty straight forward and has to be implemented Manually at the moment...
    1) Own an MDD FW400 System (Only one really tested so far)
    2) Replace "ROM" file with ELN/NanoPico Limit breaking ROM and reboot
    3) cross your fingers and test your apps

    Although not tested extensively, the ROM has been booted with no issue on the following machines and worked.
    PowerMac G4 AGP with GigaDesign CPU upgrade and 2 GB RAM.
    PowerBook G3 (Bronze Keyboard)
    PowerMac QS

    Again remember not a lot of testing, but simple testing.  Almost no extensions used for testing.
    If it ain't broke, don't fix it, or break it so you can fix it!

    Offline Irisman

    • Veteran Member (100+ Posts)
    • ****
    • Posts: 144
    • each day I am older
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #140 on: June 12, 2017, 02:52:02 PM »
      I was merely wondering if you'll hit some sort of practical limit for simultaneous instances/instruments depending on what you do with your gained RAM.  Perhaps CPU bandwidth is still going to be the primary bottleneck anyway.  You seem like the right person for the task though!
    I don't want to go off topic into a very important thread like this, but in short:
    I only use two virtual instruments, a Synth (NI FM7) and a Sampler (NI Kompakt) in Cubase VST 5. My main computer is a  Single 1.5Ghz MDD. It can open up to 10 instances of FM7 with over 128 notes of polyphony.By the other way,  It can open up to 3 instances of Kompakt with up to 24 instruments at the same time, but this is limited by the amount of RAM available, If I load a 1.5 Gb piano, there is no room for any other instrument. I had a song in stand by for months, because I have reached the maximun instruments load before ending the song. Yesterday I have restarted the work because now  I could add one or two more instruments whit this 128 Mb extra ( a church organ BTW)   ;D ...

    I'd like to listen when finished 😁

    Offline DieHard

    • Administrator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 1678
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #141 on: June 12, 2017, 06:06:03 PM »
    When you tell us we are at "Max RAM Version" ROM...

    We will make a new thread with machines tested and detailed instructions

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #142 on: June 12, 2017, 10:05:46 PM »
    The process is pretty straight forward and has to be implemented Manually at the moment...
    1) Own an MDD FW400 System (Only one really tested so far)
    2) Replace "ROM" file with ELN/NanoPico Limit breaking ROM and reboot
    3) cross your fingers and test your apps

    Although not tested extensively, the ROM has been booted with no issue on the following machines and worked.
    PowerMac G4 AGP with GigaDesign CPU upgrade and 2 GB RAM.
    PowerBook G3 (Bronze Keyboard)
    PowerMac QS

    Again remember not a lot of testing, but simple testing.  Almost no extensions used for testing.

      Also, from my postings above, Sawtooth/1.75GB RAM/Sonnet Dual 1.8GHz, MDD FW800/2GB RAM/Sonnet Dual 1.8GHz, Xserve Rev.1/2GB RAM/Dual 1.0GHz.  (Known hardware limitations unrelated to RAM on FW800 and Xserve still apply at this time, plus Xserve requires two Open Firmware commands prior to boot in order to disable the Promise ATA controllers - CD ATA channel or Firewire boot fine then.)  My normal full set of extensions was used to boot each system.  All of these machines have so far exhibited no abnormal behavior for me, but I still need to perform a suitable 'stress test' that actually accesses the additional 128MB of RAM.  I guess I need to follow MacTron's lead... ;)

      I also did a basic boot test of the ROM on a Quicksilver with Giga Designs Dual 1.8GHz CPU just to see if it would work at all before moving on to the other machines.  QS can only have 1.5GB of RAM installed due to the timing limitations in the official industry specification of the required PC133 DIMMs, hence why this machine has only three RAM slots.  G4 Digital Audio has the same limitation.  Sawtooth and Gigabit Ethernet models support 2GB because they have four slots running at the slower PC100 timing.

      In summary, with the replacement Mac OS ROM file and without any alterations to extensions, you should be able to boot the following machines with more than 1.5GB of physical RAM installed:

    - G4 AGP "Sawtooth"
    - G4 Gigabit Ethernet
    - G4 Quicksilver (both revisions)
    - G4 MDD FW400 and FW800

      Keep in mind, as I experienced with my Sawtooth, that these Macs are notorious for often being extremely picky about what brands of RAM and timings they will accept.  Once you get a config that the memory controller accepts you should be home-free.  It's just getting that far that could be challenging right off the top.  The same goes for whether or not you wish to run with a third-party CPU upgrade.  It should have no bearing on your functionality if you've already got it working properly and booting normally before you test the replacement Mac OS ROM file.  Basically what I'm saying is, get your computer booting Mac OS 9.2.2 properly with all the hardware you want, ensuring the extra RAM is recognized by the computer and the OS BEFORE you try the new ROM file.  The only difference you should see at that point is that the Mac OS will include the extra 128MB of RAM in it's available RAM figure.  You should still see any additional physical RAM reported as present without the new ROM, just not available to the OS to use.

      BTW, the dual 1.8GHz Giga Designs upgrade isn't necessarily the best choice available for OS 9 since the CPU patch for OS 9 booting is volatile because it is held only in PRAM.  If it is lost you have to boot into OS X to re-run the OS 9 patch from there.  (The OS X patch is separately applied in firmware, therefore not volatile.)  Sonnet's firmware patch on the other hand is not volatile and supports booting both OS's.  I personally have chosen to avoid unnecessary aggravation by sticking with Sonnet upgrades for my OS 9-booting G4s and relegating my Giga-upgraded Quicksilver to OS X duties.

      If anyone experiences anything different to what I have said in terms of difficulties, please be sure to post details in this forum thread.  Alright members - get to testing!

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #143 on: June 13, 2017, 08:06:50 AM »
    MacOS Plus, have you tried that last ROM on your 9serve without the pre-patching? I integrated some patches into the boot script that should help. The same goes for G4 upgrades.

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #144 on: June 13, 2017, 09:38:08 AM »
    MacOS Plus, have you tried that last ROM on your 9serve without the pre-patching? I integrated some patches into the boot script that should help. The same goes for G4 upgrades.

      Are you referring to the ATA device disable issue on the 9serve?  And are you saying G4 upgrades may boot to OS 9 without their originally-provided OS 9 specific patches (if they were a separate patch from firmware)?  I didn't try it with the Giga Designs without their OS 9 PRAM patch applied, if that's what you mean.  I can try it again that way.

    Offline nanopico

    • Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 720
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #145 on: June 13, 2017, 02:05:18 PM »
    MacOS Plus, have you tried that last ROM on your 9serve without the pre-patching? I integrated some patches into the boot script that should help. The same goes for G4 upgrades.

      Are you referring to the ATA device disable issue on the 9serve?  And are you saying G4 upgrades may boot to OS 9 without their originally-provided OS 9 specific patches (if they were a separate patch from firmware)?  I didn't try it with the Giga Designs without their OS 9 PRAM patch applied, if that's what you mean.  I can try it again that way.
    The patch should be allowing G4 CPU upgrades such as the GigaDesign to boot without any OF/PRAM patching.

    MacOS Plus, have you tried that last ROM on your 9serve without the pre-patching? I integrated some patches into the boot script that should help. The same goes for G4 upgrades.

    This is just the CPU patch I had provided a while back correct?
    Or have you added the stuff to drop the additional OF nodes required to boot the Xserve?  Not something I recall having ever discussed, but if you did add it then thumb up!  If not I'll provide something to you to integrate it.
    If it ain't broke, don't fix it, or break it so you can fix it!

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #146 on: June 13, 2017, 05:33:40 PM »
    Are you referring to the ATA device disable issue on the 9serve?  And are you saying G4 upgrades may boot to OS 9 without their originally-provided OS 9 specific patches (if they were a separate patch from firmware)?

    That's right -- not that I've actually tested those configurations.

    This is just the CPU patch I had provided a while back correct?
    Or have you added the stuff to drop the additional OF nodes required to boot the Xserve?  Not something I recall having ever discussed, but if you did add it then thumb up!  If not I'll provide something to you to integrate it.

    The very one. It took a while because I wanted to support build-time conditionals in the boot script. So this is what the relevant parts of BootScript.fs look like.

    Code: [Select]
    {TbxiPatchG4Version} if
    " /cpus/PowerPC,G4@0" find-package if
      " /cpus/PowerPC,G4@0" select-dev
      " cpu-version" active-package get-package-property 0= if
         decode-int
         2swap
         2drop
         80010201 <
         0= if
           80010201 encode-int " cpu-version" property
         then
      then
      device-end
    then
    then

    Code: [Select]
    {TbxiDisableAppleKiwi} if
    " /pci@F2000000/AppleKiwi@15" find-package if delete-node then
    " /pci@F2000000/AppleKiwi@1b" find-package if delete-node then
    then

    Offline MacOS Plus

    • Gold Member (200+ Posts)
    • *****
    • Posts: 418
    • The 9serve Lives!
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #147 on: June 13, 2017, 10:43:40 PM »
      I didn't know you guys had sorted out how to perform the Kiwi ATA device disable automatically.  This is awesome because I was getting pretty tired of having to go into OF and type the commands in manually every single boot!  Until such time as we make more headway on supporting the Kiwi ATA on the 9serve, this auto-disable will make it so much easier to test anything else on this machine.  And so, I can report to you that this code did allow the 9serve to boot automatically using the CD ATA channel or firewire as before.  This alone is great for my purposes already.

      The Quicksilver with Giga Designs dual 7447a didn't work without their PRAM patch still in place.  It halts at the bright grey screen before the mouse pointer would appear.  I figure I'll have to set up a telnet connection to log what's happening, which I already know how to do from the early days of testing the 9serve.  One other thing to mention is that neither the stock Apple CPU Plugins file nor the hacked Sonnet version in the Multiprocessing folder allow a complete boot with the Giga Designs CPU.  It appears they never figured out the issue for themselves.  In order to boot OS 9 with that CPU, it's single mode only.  (Well, at least until we crack that nut too.)

    Offline ELN

    • Gold Member (200+ Posts)
    • *****
    • Posts: 290
    • new to the forums
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #148 on: June 13, 2017, 11:14:47 PM »
    Glad it worked! I don't want to get too side-tracked here, but I think we need a better resource to document our solutions for unsupported hardware configurations. When I built that Wedge ROM, with several new features enabled, I had the thought that a control panel to switch them on and off would be useful. Any thoughts? Maybe we should start another thread.

    Also, would you mind posting, or directing me to, the various PRAM patch utilities for the several accelerator cards?

    Offline MacTron

    • Global Moderator
    • Platinum Member (500+ Posts)
    • *****
    • Posts: 2087
    • keep it simple
    Re: Mac OS 9.2.2 Memory Limit of 1.5 GB... Some Answers
    « Reply #149 on: June 14, 2017, 09:23:56 AM »
    I have started a thread about the The Apple CPU Plugins file and the 7447/7448:

    http://macos9lives.com/smforum/index.php?topic=3878.msg26161#msg26161
    Please don't PM about things that are not private.