Mac OS 9 Lives

Classic Mac OS Software => Hacking the System, Mac OS 9.3, and Beyond ! => Topic started by: ELN on April 29, 2018, 07:00:13 PM

Title: Latest hacks
Post by: ELN on April 29, 2018, 07:00:13 PM
A lot of good work is happening on this forum! This is great, but lately I have had trouble keeping track of some excellent Mac OS hacking by our members. So I have created this topic is to help our hackers show off their own Mac OS work, and stay updated on everybody else's.

Put in as much esoteric detail as you like, but try to apprise us of the overall goal that you are working towards (e.g., adding support for a new machine or extending the RAM limit). Links to your repository are especially welcome, and the more frequent your updates, the better.

I know that Daniel, darthnVader and powermax all have projects on the go right now. Guys, please use this thread to clue us all in.

May I suggest to the mods that they keep track of the work happening here and back it up for us?
Title: Re: Latest hacks
Post by: ELN on April 29, 2018, 07:14:41 PM
I'll start!

My last few days of hacking have been dedicated to the version of the Mac ROM that shipped with the final Classic version in 10.4.11. I have been updating my already mercilessly hacked CubeE sources with the aim of building a byte-perfect replica of that ROM. Check it out here:

https://github.com/elliotnunn/mac-rom/tree/classic (https://github.com/elliotnunn/mac-rom/tree/classic)

So far, looking at the classic vs master branches, I've noticed three interesting things:

I have been trying to leave as much of the master branch unchanged as possible. This is especially tricky in the case of the object files that I ripped using my "unlink" tool (and previously "DeVectorize"). Thanks to a lot of manual guidance, these files are able to be linked at any location without disrupting code references. However, I will probably still have to re-rip a lot of them from the Classic ROM. The reason is that Apple's build system was able to use dead code analysis, while mine is not, because I have an imperfect understanding of the references between branches. It would be *really cool* to produce object files that combine the united set of functions in both ROMs, but it would require me to make some serious changes to the master branch.
Title: Re: Latest hacks
Post by: Daniel on April 29, 2018, 07:25:36 PM
I'll go next.

I have recently figured out how to map the unused memory on 2GB machines into the address space. You may have noticed me ask people to test something called MPMapper a while back. I had figured out how to do it, but a bug in the NanoKernel prevented it from working (It crashes 100% of the time if you run it on an unpatched ROM). I discovered and fixed this bug around a week ago, so we can now map in all the memory (if you have a Mac OS ROM that has the bug fixed. It hasn't been distributed yet).

By itself, this isn't enough to break the 1.5GB 1.625GB (thanks ELN!) barrier. The memory is part if the address space, but it is in its own separate chunk off in the middle of nowhere. You can access it, but the Memory Manager and Process Manager can't use it. I suppose you could tell the Memory Manager to create a private heap zone there, but that would only be useful for the one application that did so.

This is a step of the way there, but we would need to patch the Memory Manager, the Process Manager, and maybe the Virtual Memory Manager to make it usable for the entire system.
Title: Re: Latest hacks
Post by: ELN on May 05, 2018, 07:40:43 AM
Here's a quick plug for enablifier, a Python script that idempotently turns a bootable Mac OS ROM file into a System Enabler, using a template of your choice (some are included).

I have little interest in the System Enabler, which rather annoyingly brings language-specific resources to an otherwise internationalised booter file. But excluding it could theoretically cause subtle bugs in any NewWorld machine. Sometimes, patches to the Enabler resources are even useful, as in iMic's ROMs and my boot 3 patches. Enablifier lets me "enablify" a ROM at arm's length while I hold my nose and avert my gaze.

https://github.com/elliotnunn/enablifier (https://github.com/elliotnunn/enablifier)
Title: Re: Latest hacks
Post by: ELN on September 02, 2018, 07:57:07 AM
Currently I’m working on a reverse-engineered source tree for *every* NanoKernel release I can find.
Title: Re: Latest hacks
Post by: classicmacreborn7 on January 08, 2019, 03:25:11 PM
Right now, I'm working on a modified OS9 and emulator wrapper that is seamless enough to prevent the user from being reminded that they are in emulation (or perhaps prevent them from even knowing at all).  Fullscreen OS9 apps should just open in a modern OS and seem like they're running natively.  That means the user must be prevented from seeing the OS9 desktop or seeing the startup screen.

I think it's important as the majority of users who come to OS9 emulators are here to play certain games they remember from those days.  Right now, there is no easy way for them to do that.  One of the biggest complaints I hear is about how difficult it is to set up an OS9 emulator- and how they wish there was something like Wineskin for OS9.  There were a lot more mac enthusiasts back in those days than there are OS9 emulator enthusiasts today.  Making it easy will hopefully bring in more people to the community.

I'm using SS for now as boot time is significantly faster.  It will be composed of a couple of components (that I can think of so far):

1. WrapperFinder - a custom finder that launches the application on boot and shuts down the system when the application is quit
(this is my current project).  It should read from a Finder.cfg file to get the location of the application to be launched.

2. SSRelay - a series of scripts that allows data to be passed back and forth between the host OS and guest OS with a decently low latency (< 0.25 seconds at max).  One important feature this allows is for the host OS to set the emulator to invisible until after the guest OS sends it a message that the application has been launched and instead display a custom loading screen generated by the host OS.  This is completed as of now.  However, the host-side scripts need to be rewritten to be cross-platform (only OSX right now).

In the future it needs:
- An OS9 installer for all guest additions.  The installer should load on a virtual drive after installation- the same way VirtualBox does.
- Modifications to SS to display in nearest neighbor scaling instead of ugly linear interpolation.  It should then scale at the largest multiple of the guest OS's resolution that fits within the host OS resolution.
- A setup wizard that allows you to run through the OS9 install process after selecting the install disc and romfile.  It should also have a checkbox that allows you to run a checksum on the disk image to ensure it is the original disk.
- A simple script that sets up the startup disk as read-only and allows you to install the application on a separate virtual drive (to improve the wrapped app's stability).

Everything needs to be as portable as possible, as the user should be able to select their own OS9 install CD to keep it legal.  I don't think most users will have trouble running through OS9 installation, but right now setting up both SS and QEMU are a huge pain- and they really don't have to be.

I'm having a really fun time with this.  Glad I had the chance to right everything out here.
Title: Re: Latest hacks
Post by: OS923 on March 11, 2019, 08:27:54 AM
Here's a list of REALbasic 5.5.5 entry names that I could resolve in a plugin.

Code: [Select]
AllocateMenuID
AppAutoCloseGetter
AppAutoCloseSetter
AppBalloonHelpVisibleGetter
AppBalloonHelpVisibleSetter
AppDockItemGetter
AppFolderItemGetter
AppIntegerVersionStuffGetter
AppMenuBarGetter
AppMenuBarSetter
AppStringVersionStuffGetter
AppendStyledTextRun
ApplicationAddMenuHandler
ApplicationNewDocument
ApplicationOpenDocument
ApplicationQuit
ArcStartAngleSetter
BinaryStreamClose
BinaryStreamEOF
BinaryStreamFlush
BinaryStreamGetLength
BinaryStreamGetPosition
BinaryStreamLastErrorGetter
BinaryStreamRead
BinaryStreamReadBoolean
BinaryStreamReadByte
BinaryStreamReadDouble
BinaryStreamReadFloat
BinaryStreamReadLong
BinaryStreamReadPString
BinaryStreamReadShort
BinaryStreamSetLength
BinaryStreamSetPosition
BinaryStreamWrite
BinaryStreamWriteBoolean
BinaryStreamWriteByte
BinaryStreamWriteDouble
BinaryStreamWriteFloat
BinaryStreamWriteLong
BinaryStreamWritePString
BinaryStreamWriteShort
BitwiseAnd
BitwiseOr
BitwiseXor
BoolGetter
BoolSetter
CheckBoxDataFieldSetter
CheckBoxDataSourceGetter
CheckBoxDataSourceSetter
ClearFocus
CollectionItem
ControlAddMenuHandler
ControlClose
ControlInitialParentSetter
ControlParentGetter
ControlParentSetter
ControlTabPanelIndexSetter
ControlVisibleSetter
ConvertPtrToMemoryBlock
CreateArray
CreateInstance
CursorEdit
CursorFieldBooleanValueGetter
CursorFieldBooleanValueSetter
CursorFieldValueGetter
CursorFieldValueSetter
CursorMoveFirst
CursorMoveLast
CursorMovePrev
CurveGetControlX
CurveGetControlY
CurveOrderSetter
CurveSetControlX
CurveSetControlY
DaemonizeApp
DataControlActionPerformAction
DataControlAddNewRecord
DataControlAlignSetter
DataControlAttributeSetter
DataControlCaptionSetter
DataControlClearBoundControls
DataControlColorSetter
DataControlControlBindSetter
DataControlDBGetter
DataControlDBSetter
DataControlDeleteRecord
DataControlEncodingGetter
DataControlEncodingSetter
DataControlFieldCount
DataControlFontSetter
DataControlGetBoundPart
DataControlGetConstant
DataControlGetCursor
DataControlGetField
DataControlMoveFirst
DataControlMoveLast
DataControlMoveNext
DataControlMovePrev
DataControlMoveTo
DataControlNewRecord
DataControlQuerySetter
DataControlReadOnlySetter
DataControlRecordLockedGetter
DataControlRow
DataControlRowCount
DataControlRunQuery
DataControlSizeSetter
DataControlTableNameSetter
DataControlUpdateRecord
DatabaseClose
DatabaseConnect
DatabaseTableSchema
DateCompare
DateToVariant
DesignAddDataSource
DisableAutoWaitCursor
DockItemIconGraphicsGetter
DockItemIconUpdate
DockItemResetIcon
DragItemAddItem
DragItemDrag
DragItemFolderItemAvailable
DragItemGetMacData
DragItemMacDataAvailable
DragItemNextItem
DragItemPictureAvailable
DragItemSetMacData
DragItemSetPrivateMacData
DragItemTextAvailable
DrawOffscreenMacControl
EditAlignmentSetter
EditDataFieldSetter
EditDataSourceGetter
EditDataSourceSetter
EditMaskSetter
EditScrollPositionXGetter
EditScrollPositionXSetter
EditSelAlignmentGetter
EditSelAlignmentSetter
EditTextGetter
EditTextSetter
EnableAutoWaitCursor
EnableCoreGraphicsTextOnOSX
EnableMenuItems
EncodingsGetFromCode
EncodingsGetter
FPToInt
FigureShapeAddCubic
FigureShapeAddLine
FigureShapeAddQuad
FileDisplayNameGetter
FileExtensionVisibleGetter
FileExtensionVisibleSetter
FileShellPathGetter
FolderChild
FolderItemAppendTextFile
FolderItemCopyCtor
FolderItemCopyFileTo
FolderItemCreateAsFolder
FolderItemCreateBinaryFile
FolderItemCreateTextFile
FolderItemCreateVirtualVolume
FolderItemDelete
FolderItemDialogShowModal
FolderItemDialogShowWithin
FolderItemFromFSSpec
FolderItemGetImp
FolderItemGetLastError
FolderItemGetRelative
FolderItemGetSaveInfo
FolderItemImpMakeFileExecutable
FolderItemIsCurrentlyReadable
FolderItemIsCurrentlyWriteable
FolderItemItem
FolderItemLaunch
FolderItemMoveFileTo
FolderItemOpenAsVirtualVolume
FolderItemOpenBinaryFile
FolderItemOpenImage
FolderItemOpenMovie
FolderItemOpenResourceMovie
FolderItemOpenSound
FolderItemOpenStyledEditField
FolderItemOpenTextFile
FolderItemOpenVectorImage
FolderItemPathCtor
FolderItemPathCtorNoParams
FolderItemSaveAsJPEG
FolderItemSaveAsPicture
FolderItemSaveStyledEditField
FolderItemSetLastError
FolderItemTrueItem
FolderTrueChild
GetControlBounds
GetControlVisible
GetDatabaseRecordBlobColumn
GetDatabaseRecordBooleanColumn
GetDocumentsFolder
GetEncodingFromTEObject
GetEncodingsObject
GetEventInstance
GetEventInstancePPC
GetFontName
GetInterfaceRoutine
GetMacInputDriverRef
GetMacOutputDriverRef
GetNetworkInterfaceObject
GetPosixDescriptor
GetTabPanelVisible
GetTextEncoding
GetVolume
GetWindow
GlobalShowURL
IPCSocketClose
IPCSocketConnect
IPCSocketEOF
IPCSocketFlush
IPCSocketHadError
IPCSocketIsConnected
IPCSocketLastErrorGetter
IPCSocketListen
IPCSocketLookahead
IPCSocketPoll
IPCSocketRead
IPCSocketReadAll
IPCSocketWrite
InsertStyledTextRun
IntGetter
IntSetter
IntToFP
IsCMMClick
IsNull
KeyChainAddPassword
KeyChainConstructor
KeyChainFindPassword
KeyChainItemAttributeGetter
KeyChainItemAttributeSetter
KeyChainItemDelete
KeyChainLock
KeyChainUnlock
LineStateGetter
LineStateSetter
ListBind
ListEnableDragReorderSetter
ListboxDataFieldSetter
ListboxDataSourceGetter
ListboxDataSourceSetter
MDBBooleanGetter
MDBBooleanSetter
MDBCaptionGetter
MDBCaptionSetter
MDButtonGetter
MDIWindowHandleGetter
MDIWindowMaximize
MDIWindowMinimize
MDIWindowPosGetter
MDIWindowPosSetter
MDIWindowRestore
MDIWindowTitleGetter
MDIWindowTitleSetter
MDIWindowVisibleGetter
MDIWindowVisibleSetter
MDIconSetter
MemoryBlockAddOperator
MemoryBlockCompareOperator
MemoryBlockFromStringOperator
MemoryBlockLeftB
MemoryBlockRightB
MemoryBlockToStringOperator
MenuBarInstallClone
MessageDialogShowModal
ModifierKeyGetter
NetworkInterfaceCtor
NewPicture
OLEContainerContentGetter
OLEContainerCreateObject
OLEContainerDestroyObject
OLEContainerShowPropertyPages
OLEObjectInvoke
OLEObjectInvokeNoReturnValue
OLEObjectInvokeWithParams
OLEObjectInvokeWithParamsNoReturnValue
OLEObjectNewInstanceConstructor
OLEObjectNoReturnOperatorLookup
OLEObjectOperatorAdd
OLEObjectOperatorAddRight
OLEObjectOperatorCompare
OLEObjectOperatorConvert
OLEObjectOperatorDivide
OLEObjectOperatorDivideRight
OLEObjectOperatorIntegerDivide
OLEObjectOperatorIntegerDivideRight
OLEObjectOperatorLookup
OLEObjectOperatorLookupSetter
OLEObjectOperatorModulo
OLEObjectOperatorModuloRight
OLEObjectOperatorMultiply
OLEObjectOperatorMultiplyRight
OLEObjectOperatorNegate
OLEObjectOperatorSubtract
OLEObjectOperatorSubtractRight
OLEObjectProgramIDConstructor
OLEObjectPropertyGetter
OLEObjectPropertySetter
OLEObjectPropertySetterWithValue
OLEParameterValueArraySetter
OLEParameterValueGetter
OLEParameterValueSetter
ObjGetter
ObjSetter
PacketsAvailableGetter
PagePanelValueGetter
PagePanelValueSetter
ParseDate
PictureConstructor
PictureDepthGetter
PictureGraphicsGetter
PictureHResGetter
PictureHResSetter
PicturePacker
PictureVResGetter
PictureVResSetter
PixmapShapeConstructor
PixmapShapeImageCtor
PluginDefaultControlCaption
PluginDefaultControlFont
PluginDefaultControlFontSize
PluginGetControlBounds
PluginInterpretConstantValue
PluginMarkSocketUsage
PluginNewInstance
PluginNewOfSameClass
PluginRegisterClass
PluginRegisterClassExtension
PluginRegisterControl
PluginRegisterDBCursor
PluginRegisterDBEngine
PluginRegisterEventFilter
PluginRegisterEventFilterPPC
PluginRegisterInterface
PluginRegisterMethod
PluginRegisterModule
PopupDataFieldSetter
PopupDataSourceGetter
PopupDataSourceSetter
PtrToMemoryBlock
QTInstalledGetter
REALAccessAppleEvent
REALAccessAppleEventReply
REALBuildAEDescList
REALBuildAEObjSpecifier
REALBuildAppleEvent
REALBuildPictureFromBuffer
REALBuildPictureFromGWorld
REALBuildPictureFromPicHandle
REALBuildPictureFromPictureDescription
REALBuildSoundFromHandle
REALBuildString
REALConstructDBDatabase
REALConvertString
REALDBConnectionDialogAddField
REALDBConnectionDialogCreate
REALDBConnectionDialogDelete
REALDBConnectionDialogShow
REALDatabaseConnect
REALDatabaseCreateDatabaseFile
REALDatabaseFolderItemGetter
REALDatabaseFolderItemSetter
REALDatabaseSetError
REALFSRefFromFolderItem
REALFSSpecFromFolderItem
REALFolderItemFromParentFSRef
REALGetCommandLineForUnix
REALGetControlEnabled
REALGetControlFocus
REALGetControlGraphics
REALGetControlHandle
REALGetControlName
REALGetControlParent
REALGetCursorFromREALdbCursor
REALGetDBDatabaseName
REALGetDBFromREALdbDatabase
REALGetDBHost
REALGetDBPassword
REALGetDBUserName
REALGetFontEncoding
REALGetGraphicsFontStyle
REALGetPictureMask
REALGetPopupMenuHandle
REALGetProjectFolder
REALGetPropValueBool
REALGetPropValueDouble
REALGetPropValueInt
REALGetPropValueObject
REALGetPropValueString
REALGetRBVersion
REALGetStringEncoding
REALGetStringSystemStr
REALGetWindowHandle
REALInDebugMode
REALInvalidateControl
REALInvalidateControlRect
REALIsHIViewWindow
REALLoadGlobalMethod
REALLoadObjectMethod
REALLockObject
REALLockPictureDescription
REALLockString
REALPictureClearCache
REALQDGlobals
REALRefreshWindow
REALReleasePopupMenuHandle
REALSetControlFocus
REALSetDBIsConnected
REALSetGraphicsStyle
REALSetMovieMovie
REALSetPropValueBoolean
REALSetPropValueDouble
REALSetPropValueInt
REALSetPropValueObject
REALSetPropValueString
REALSetSpecialBackground
REALSetStringEncoding
REALStripAmpersands
REALUnlockObject
REALUnlockString
REALYieldToRB
REALdbCursorFromDBCursor
REALdbDatabaseFromDBDatabase
REALenterMovies
REALinRuntime
REALpathFromFolderItem
RandomNumber
RandomNumberInRangeMinMax
RandomNumberLessThan
RandomSeedSetter
RandomizeSeed
RangeEndPosGetter
RecordSetColumnType
RecordSetRecordCount
RectControlDefaultConstructor
RectShapeContains
RegisterDataSource
RegisterDataSourceInterface
RegisterPluginExports
RegisterPluginVersion
RegistryItemAddFolder
RegistryItemChild
RegistryItemCopyCtor
RegistryItemDefaultValueGetter
RegistryItemDefaultValueSetter
RegistryItemDelete
RegistryItemFolderCountGetter
RegistryItemItem
RegistryItemKeyCountGetter
RegistryItemKeyTypeGetter
RegistryItemNameGetter
RegistryItemNumValueGetter
RegistryItemNumValueSetter
RegistryItemPathCtor
RegistryItemPathGetter
RegistryItemValueGetter
RegistryItemValueSetter
RegistryParentGetter
ReleaseMenuID
RemoveStyledTextRun
ResolverPPC
RuntimeACos
RuntimeASin
RuntimeATan
RuntimeAbs
RuntimeAddIntegerScriptParam
RuntimeAddString
RuntimeAddStringScriptParam
RuntimeBackgroundTask
RuntimeBeep
RuntimeBin
RuntimeBitwiseAnd
RuntimeBitwiseOr
RuntimeBitwiseShiftLeft
RuntimeBitwiseShiftRight
RuntimeBitwiseXor
RuntimeCMY
RuntimeCeil
RuntimeCheckCast
RuntimeCloseMenuItem
RuntimeCloseWindow
RuntimeComboBoxAddRow
RuntimeComboBoxAddSeparator
RuntimeComboBoxBoldGetter
RuntimeComboBoxBoldSetter
RuntimeComboBoxCountGetter
RuntimeComboBoxEmpty
RuntimeComboBoxGetRow
RuntimeComboBoxGetString
RuntimeComboBoxInsertRow
RuntimeComboBoxItalicGetter
RuntimeComboBoxItalicSetter
RuntimeComboBoxRemoveRow
RuntimeComboBoxSelectionGetter
RuntimeComboBoxSelectionSetter
RuntimeComboBoxTextFontGetter
RuntimeComboBoxTextFontSetter
RuntimeComboBoxTextGetter
RuntimeComboBoxTextSetter
RuntimeComboBoxTextSizeGetter
RuntimeComboBoxTextSizeSetter
RuntimeComboBoxUnderlineGetter
RuntimeComboBoxUnderlineSetter
RuntimeCompleteParamScriptExecute
RuntimeCompleteParamScriptFunction
RuntimeConsoleInput
RuntimeConsolePrint
RuntimeControlArrayItemReference
RuntimeControlDrawInto
RuntimeControlFetch
RuntimeControlReference
RuntimeControlRefresh
RuntimeControlRefreshRect
RuntimeCos
RuntimeDebugInstance
RuntimeDebugMemoryUsed
RuntimeDebugObjectClass
RuntimeDebugObjectCount
RuntimeDebugObjectID
RuntimeDebugObjectRefs
RuntimeDebuggerBreak
RuntimeDirectReadIntArray
RuntimeDirectReadObjectArray
RuntimeDirectReadStringArray
RuntimeDoEvents
RuntimeEnableMenu
RuntimeEndOfLine
RuntimeEndOfLineAdd
RuntimeEndOfLineAddRight
RuntimeEndOfLineCompare
RuntimeExp
RuntimeFindHookCode
RuntimeFloor
RuntimeGetDefaultApplicationRegistryItem
RuntimeGetEndOfLineObject
RuntimeGetFolderItem
RuntimeGetImplicitWindow
RuntimeGetOpenFolderItem
RuntimeGetRow
RuntimeGetSaveFolderItem
RuntimeGetStdErr
RuntimeGetStdIn
RuntimeGetStdOut
RuntimeGetTrueFolderItem
RuntimeGraphicsClearRect
RuntimeGraphicsDrawLine
RuntimeGraphicsDrawObject
RuntimeGraphicsDrawObjectXY
RuntimeGraphicsDrawOval
RuntimeGraphicsDrawPicture
RuntimeGraphicsDrawRect
RuntimeGraphicsDrawRoundRect
RuntimeGraphicsDrawString
RuntimeGraphicsFillOval
RuntimeGraphicsFillRect
RuntimeGraphicsFillRoundRect
RuntimeGraphicsNextPage
RuntimeGraphicsStringHeight
RuntimeGraphicsStringWidth
RuntimeGraphicsTextAscent
RuntimeGraphicsTextHeight
RuntimeHSV
RuntimeHex
RuntimeHideWindow
RuntimeInit
RuntimeInstallInstanceEventHandler
RuntimeIsNumeric
RuntimeListAddParent
RuntimeListAddRow
RuntimeListEmpty
RuntimeListInsertParent
RuntimeListInsertRow
RuntimeListResort
RuntimeLockArray
RuntimeLockObject
RuntimeLockString
RuntimeLockUnlockArrays
RuntimeLockUnlockStrings
RuntimeLog
RuntimeMassPropertySetter
RuntimeMax
RuntimeMediaPlay
RuntimeMediaStop
RuntimeMenuItemAppend
RuntimeMenuItemAutoEnableGetter
RuntimeMenuItemAutoEnableSetter
RuntimeMenuItemBalloonHelpGetter
RuntimeMenuItemBalloonHelpSetter
RuntimeMenuItemBoldGetter
RuntimeMenuItemBoldSetter
RuntimeMenuItemCheckedGetter
RuntimeMenuItemCheckedSetter
RuntimeMenuItemChild
RuntimeMenuItemCommandKeyGetter
RuntimeMenuItemCommandKeySetter
RuntimeMenuItemCount
RuntimeMenuItemDefaultConstructor
RuntimeMenuItemDisabledHelpGetter
RuntimeMenuItemDisabledHelpSetter
RuntimeMenuItemEnabledGetter
RuntimeMenuItemEnabledSetter
RuntimeMenuItemIndexGetter
RuntimeMenuItemIndexSetter
RuntimeMenuItemInsert
RuntimeMenuItemItalicsGetter
RuntimeMenuItemItalicsSetter
RuntimeMenuItemItem
RuntimeMenuItemLookup
RuntimeMenuItemLookupArray
RuntimeMenuItemNameGetter
RuntimeMenuItemNameSetter
RuntimeMenuItemRemoveIndex
RuntimeMenuItemRemoveItem
RuntimeMenuItemTagGetter
RuntimeMenuItemTagSetter
RuntimeMenuItemTextGetter
RuntimeMenuItemTextSetter
RuntimeMenuItemUnderlineGetter
RuntimeMenuItemUnderlineSetter
RuntimeMenuItemVisibleGetter
RuntimeMenuItemVisibleSetter
RuntimeMenuReference
RuntimeMicroseconds
RuntimeMin
RuntimeMsgBox
RuntimeNewObject
RuntimeNilObject
RuntimeObjectIsa
RuntimeOct
RuntimeOnesCompliment
RuntimeOpenPrinter
RuntimeOpenPrinterDialog
RuntimePictureReference
RuntimePow
RuntimeProjectObject
RuntimeRGB
RuntimeRaiseException
RuntimeRegisterFileType
RuntimeRemoveRow
RuntimeReplaceLineEndings
RuntimeReraiseException
RuntimeRound
RuntimeRun
RuntimeScriptExecute
RuntimeScriptFunction
RuntimeSelectFolder
RuntimeSetFocus
RuntimeSetRow
RuntimeShortToInteger
RuntimeShowModal
RuntimeShowModalWithinWindow
RuntimeShowWindow
RuntimeShowWithinWindow
RuntimeSign
RuntimeSin
RuntimeSpeak
RuntimeSqrt
RuntimeStackCheck
RuntimeStartParamScript
RuntimeStdInputAsSocket
RuntimeStdInputEof
RuntimeStdInputError
RuntimeStdInputRead
RuntimeStdInputReadLine
RuntimeStdOutFlush
RuntimeStdOutputAsSocket
RuntimeStdOutputError
RuntimeStdOutputStreamWrite
RuntimeStdOutputStreamWriteLine
RuntimeStringCompare
RuntimeTan
RuntimeTicks
RuntimeTimerReset
RuntimeUBound
RuntimeUnhandledException
RuntimeUnlockArray
RuntimeUnlockObject
RuntimeUnlockString
SSToStringSetter
ScrollerLiveScrollSetter
SelectGraphics
SerialEof
SerialError
ServerSocketClose
ServerSocketListen
ServerSocketSetMaxSockets
ServerSocketSetMinSockets
SetControlVisible
SetDatabaseRecordBlobColumn
SetDatabaseRecordBooleanColumn
ShortGetter
ShortSetter
SingleToInt
SliderLiveScrollSetter
SocketBytesAvailable
SocketConnect
SocketDisconnect
SocketIsConnected
SocketJoinMulticastGroup
SocketLeaveMulticastGroup
SocketListen
SocketLookahead
SocketPortGetter
SocketPortSetter
SocketPurge
SocketRead
SocketReadAll
SocketWrite
SoundClone
SoundPanGetter
SoundPanSetter
SoundPlay
SoundStop
SoundVolumeGetter
SoundVolumeSetter
StaticTextDataFieldSetter
StaticTextDataSourceGetter
StaticTextDataSourceSetter
StaticTextMultilineSetter
StringAsc
StringChr
StringConvertEncoding
StringCountFields
StringDBCSAsc
StringDBCSChr
StringDBCSInStr
StringDBCSLeft
StringDBCSLen
StringDBCSRight
StringExtendsInStr
StringExtendsInStrB
StringFormat
StringGetCString
StringGetEncoding
StringGetPString
StringGetter
StringInStr
StringInStrB
StringJoin
StringLCase
StringLeft
StringLen
StringNthField
StringReplace
StringReplaceAll
StringReplaceAllB
StringReplaceB
StringRight
StringSetEncoding
StringSetter
StringSplit
StringStr
StringStrCompare
StringTitleCase
StringToCString
StringToOSType
StringToPString
StringToSSGetter
StringUCase
StringVal
StyleRunRBConstructor
StyledTextGetBold
StyledTextGetColor
StyledTextGetFont
StyledTextGetItalic
StyledTextGetSize
StyledTextGetUnderline
StyledTextGetter
StyledTextObjectGetter
StyledTextObjectSetter
StyledTextParagraphCountGetter
StyledTextParagraphGetter
StyledTextRunCountGetter
StyledTextRunGetter
StyledTextSetAlignment
StyledTextSetBold
StyledTextSetColor
StyledTextSetFont
StyledTextSetItalic
StyledTextSetSize
StyledTextSetUnderline
StyledTextSetter
SystemDebugLogger
SystemGetCommandLine
SystemGetEnvVariable
SystemGetIPAddress
SystemGetMACAddress
SystemGetNetworkInterfaceCount
SystemGetPenButton
SystemGetPenPressure
SystemGetPenType
SystemGetSubnetMask
SystemLogger
SystemSetEnvVariable
TCPSocketBytesLeftToSend
TCPSocketEof
TCPSocketFlush
TextEncodingChr
TextEncodingEquals
TextInputStreamClose
TextInputStreamEOF
TextInputStreamGetPosition
TextInputStreamLastErrorGetter
TextInputStreamRead
TextInputStreamReadAll
TextInputStreamReadLine
TextInputStreamSetPosition
TextOutputStreamClose
TextOutputStreamFlush
TextOutputStreamLastErrorGetter
TextOutputStreamWrite
TextOutputStreamWriteLine
TextRangeGetter
ThreadGetID
ThreadGetStackSize
ThreadSetStackSize
UDPReadDatagram
UDPSocketGetBroadcast
UDPSocketPacketsLeftToSend
UDPSocketRouterHops
UDPSocketSetLoopback
UDPSocketWrite
UDPSocketWriteDatagram
VarType
VariantAdd
VariantAddRight
VariantCompare
VariantDivide
VariantDivideRight
VariantEqual
VariantHash
VariantIntegerDivide
VariantIntegerDivideRight
VariantModulo
VariantModuloRight
VariantMultiply
VariantNegate
VariantSubtract
VariantSubtractRight
VariantToDate
VirtVolRootGetter
WindowAddControl
WindowAddMenuHandler
WindowAllocateObject
WindowDefaultConstructor
WindowDockItemGetter
WindowForceUpdateFrontBuffer
WindowHandleGetter
WindowMenuBarGetter
WindowMenuBarSetter
WindowToWindowPtr
WindowVisibleGetter
WindowVisibleSetter
Title: Re: Latest hacks
Post by: OS923 on March 18, 2019, 03:38:05 AM
A split trap has an impossible address that starts with 0xFFC.
Title: Re: Latest hacks
Post by: Daniel on March 18, 2019, 12:16:09 PM
The Toolbox ROM is at 0xFFC00000, at least on PowerPCs.
Title: Re: Latest hacks
Post by: OS923 on March 21, 2019, 06:18:47 AM
Says who? 0xFFC00000 is negative.
Title: Re: Latest hacks
Post by: Daniel on March 21, 2019, 01:06:09 PM
If you look in the low memory variable ROMBase (0x2aE), it holds 0xFFC00000.

You can view this in MacsBug by typeing @ROMBase.

if you have TattleTech, it will also say the rom is at 0xFFC00000.

Macs have been able to access the upper portion of the 32-bit address space since at least the Mac II.

On PPC Macs, there are quite a few mapped addresses over 0x8000000.
Title: Re: Latest hacks
Post by: ELN on March 21, 2019, 07:08:38 PM
I think that was a NewWorld innovation, or possibly PCI. Having ROMBase over 2 GB exposed some latent bugs where a code address was signed-compared with ROMBase. Most non-ROM code would, this way, seem to be in ROM.
Title: Re: Latest hacks
Post by: OS923 on May 24, 2019, 09:09:14 AM
Code: [Select]
Global 101
Name:        ROMBase
Meaning:     Base address of ROM
Hex address: 000002AE
Address:     686
Hex length:  00000004
Length:      4
Hex value:   FFC00000
Value:       -4194304
Title: Re: Latest hacks
Post by: whoisthisguy on May 27, 2019, 07:11:44 AM
Hey everyone! Finally got Mac Mini G4 to operate in 1920x1080 with 2d/3d support and million of colours on non-Apple Displays. Check this out: http://macos9lives.com/smforum/index.php/topic,5009.0.html
Title: Re: Latest hacks
Post by: macStuff on May 27, 2019, 07:54:33 AM
it sure would be great if we had one champion hacker who could create a bootable sata pci card
if its all done in the firmware; i dont understand why someone cant create a new firmware that will allow to boot macos9;
i mean; what is more important than that?
Title: Re: Latest hacks
Post by: whoisthisguy on May 27, 2019, 07:57:34 AM
it sure would be great if we had one champion hacker who could create a bootable sata pci card
if its all done in the firmware; i dont understand why someone cant create a new firmware that will allow to boot macos9;
i mean; what is more important than that?


Take a look at Sonnet Tempo and FirmTek Cards. Also there are some amount of SIL cards on aliexpress.
Title: Re: Latest hacks
Post by: OS923 on July 08, 2019, 07:06:33 AM
If you drag an alias to a program, then it receives the spec of the destination, but if you drag an alias to a window that supports drag-and-drop, then it receives the spec of the alias.

If you drag an alias to a CW Pro project, then it adds the destination, and it can be found as long as the destination is in one of the include paths. But if you add a file to a CW Pro project, then you move it so that you can replace it with an alias to that file with the same name, then CW Pro will treat the alias like the original, and the original will be found even if it's not in one of the include paths.

A DeskHook cannot be used anymore to draw the desktop, but it still works for clicking in the desktop.
Title: Re: Latest hacks
Post by: OS923 on August 23, 2019, 09:14:44 AM
If you install TechTool Trash Cache, then every program can delete locked files with FSpDelete. Normally FSpDelete should return fLckdErr (-45).
Title: Re: Latest hacks
Post by: ELN on August 25, 2019, 07:48:02 AM
I have added ataboot.py to my tbxi-patches library. This script patches a Mac OS ROM file, enabling startup from an ATA hard disk without the "Mac OS 9 drivers" installed. It only works on NewWorld machines, i.e. those that use the Mac OS ROM file instead of a physical ROM.

https://github.com/elliotnunn/tbxi-patches (https://github.com/elliotnunn/tbxi-patches)

This patch can help get Mac OS 8/9 booting from a disk without reformatting it with Drive Setup or a similar utility. This is useful when installing 9 on officially Mac OS X-only machines that shipped without the disk drivers, e.g. the Mac mini.

(At the root of the original problem is the very unusual block storage architecture of the Classic Mac OS. ATAPI devices like optical drives, and SCSI/FW/USB devices, are not affected by the patch. Disks still require an Apple Partition Map.)
Title: Re: Latest hacks
Post by: OS923 on October 28, 2020, 08:16:45 AM
If you receive an Apple event and you change the descriptor type to 'meta' then you can iterate a list of attributes that are otherwise invisible. I read this in the source code of the AEGizmos (written by Apple) and this seems to be a hack, because I found no documentation about 'meta'.