Who's Online |
34 user(s) are online ( 27 user(s) are browsing Forums)
Members: 0
Guests: 34
more...
|
|
|
|
Re: Bootarguments for Qemu AmigaOne install on Mac M1
|
Posted on: Yesterday 20:24
#1
|
Just can't stay away 
|
@johnfante
yep, there still some issues, 'cos server(s) where updated. Hope they will fixed ASAP.
|
|
|
|
Re: Snork: New Tracing Tool for AmigaOS 4
|
Posted on: Yesterday 19:26
#2
|
Home away from home 
|
@joerg Quote: to add support for international chars, for example the default ISO 8859-15 ones. Unprintable control chars on AmigaOS, in any supported 8 bit charset, are only 0-31 and 127-159.
Good catch , thanks ! Btw, what is the best way to follow if we need to parse data in a patch ? At fist, i just doing simple parsing inside of the patch, and then print it before calling original function. Then after , i add some simple IPC via PutMsg() (from patch) /GetMsg() (in main). At first i tried to simple send what i have to the main, but find out that strings and other data simple died offten (because patch is done, memory changes, but i tried to handle it in the main which is point on whatever else). Because of that i had to copy in the patch before putmsg whole set : libname, functionname, doing findtaks(null), copy strings and tags, and then send this instead. For copy i use IExec->CopyMem/IUtility->Strlcpy (that for libname, funcname and strings), and for tags i simple do simple loop copy. The question i had now , is it correct way of doing things. I mean, for speed and for being correct at all. As i doing dynamic copy for each patching function, i do not need locks and mutexes, but not sure shouldn't i somehow protect it or not ?
Edited by kas1e on 2025/6/27 19:58:44
|
|
|
|
Re: Bootarguments for Qemu AmigaOne install on Mac M1
|
Posted on: Yesterday 16:55
#3
|
Just popping in 
|
@jabirulo
Thank you! That is the version I am running.
Think this is some kind of server error.
|
|
|
|
Re: Snork: New Tracing Tool for AmigaOS 4
|
Posted on: Yesterday 15:00
#5
|
Home away from home 
|
@msteed Quote: Of course, if the string pointer is invalid the function you're calling will probably cause a DSI itself as soon as you call it. Still, there's some value to Snork not causing the DSI, even if there's going to be one an instant later anyway. Some functions may work with invalid string pointers, depending on other arguments the string pointer may not be used at all by the function itself and if it isn't accessed there wont be a DSI. But Snork would cause a DSI trying to print it.
|
|
|
|
Re: Snork: New Tracing Tool for AmigaOS 4
|
Posted on: Yesterday 14:34
#6
|
Home away from home 
|
@kas1e Quote:
strncpy(output, "NULL", output_size - 1);
output[output_size - 1] = '\0';
= strlcpy(output, "NULL", output_size); strncpy() and strncat() should be replaced by strlcpy() and strlcat(). Quote:
} else if (input[i] >= 32 && input[i] <= 126) {
output[j++] = input[i];
Replace by
} else if ((input[i] >= 32 && input[i] <= 126) || (input[i] >= 160)) {
to add support for international chars, for example the default ISO 8859-15 ones. Unprintable control chars on AmigaOS, in any supported 8 bit charset, are only 0-31 and 127-159.
|
|
|
|
Re: Bootarguments for Qemu AmigaOne install on Mac M1
|
Posted on: Yesterday 9:58
#7
|
Just popping in 
|
I managed to mount the CD (Qemu on mac has a GUI for that I found out), installed a browser and got going. Now running a Update 2 system with latest version of AmiUpdate and also updated RTL8139 devicedriver. After Update 2 the system seems to run fine and stable. However, I get the error below when I try to use AmiUpdate. Loads fine and finds the updates on the servers. However, it crashes when I try to update: https://www.dropbox.com/scl/fi/6f4yeaj ... q6k8pi3zlp9emk5n5zpg&dl=0Is that normal on Qemu? Or something that can be fixed? Maybe more RAM to the system? Or can it be AmiSSL related? I have the latest 5.20 installed but do I need 4.12 also? I think I read that somewhere. My bootargument is this:
qemu-system-ppc -machine amigaone -rtc base=localtime -serial stdio -vga none -device sm501 -drive media=disk,format=raw,file=amigahd.img -device rtl8139,addr=0x09,netdev=nic -netdev user,hostname=amigaone-os4,hostfwd=tcp::22220-:22,id=nic -rtc base=localtime -device loader,cpu-num=0,file=bboot -device loader,addr=0x600000,file=Kickstart.zip
Thank you! Short update: This seems like an AmiUpdate/server bug of some kind. When I try to update from the Codebench.co.uk server it crashes with the DSI When I update from the Hyperion server it downloads and install the updates fine except the two MUI updates Examining the log it says "Redirection required, following link ...." when it crashes. Can anyone alse confirm?
Edited by johnfante on 2025/6/27 10:19:51 Edited by johnfante on 2025/6/27 14:07:22 Edited by johnfante on 2025/6/27 14:47:33
|
|
|
|
Re: Snork: New Tracing Tool for AmigaOS 4
|
Posted on: Yesterday 9:55
#8
|
Just popping in 
|
@msteed Quote: Of course, if the string pointer is invalid the function you're calling will probably cause a DSI itself as soon as you call it. Still, there's some value to Snork not causing the DSI, even if there's going to be one an instant later anyway. Or (another suggestion) Snork doesn't pass the invalid pointer but passes on a valid string like "DEADSTRING\0". Than at least no DSI , still the string could mess up other stuff. But still some additional steps before a potential crash.
|
|
|
|
Re: Introducing the Rear Window blog
|
Posted on: Yesterday 8:21
#9
|
Amigans Defender 
|
@all Now on the Rear Window blog, my personal manifesto for the summer. Enjoy reading!
|
The Rear Window blog AmigaOne X5000 @ 2GHz / 4GB RAM / Radeon RX 560 / ESI Juli@ / AmigaOS 4.1 Final Edition SAM440ep-flex @ 667MHz / 1GB RAM / Radeon 9250 / AmigaOS 4.1 Final Edition
|
|
|
Re: ScummVM and AmigaOS4.1 F.E.
|
Posted on: Yesterday 8:01
#10
|
Home away from home 
|
Steffen would like to use the RetroArch version but it's not exactly the same, we'll need a maintainer who can compile the official version
|
|
|
|
Re: Snork: New Tracing Tool for AmigaOS 4
|
Posted on: Yesterday 6:11
#11
|
Just popping in 
|
@kas1e Quote: Should be enough imho even without IExec->TypeOfMem() ?
I think the idea behind using TypeOfMem() is to catch cases where the string pointer points to something that is not a valid RAM address, where trying to read the characters of the string will probably cause a DSI. Of course, if the string pointer is invalid the function you're calling will probably cause a DSI itself as soon as you call it. Still, there's some value to Snork not causing the DSI, even if there's going to be one an instant later anyway. If TypeOfMem() returns zero you can print the string pointer as a hex value, which lets the user see what value was passed and perhaps provides a clue as to what went wrong (assuming the ensuing crash doesn't take down the system).
|
|
|
|
Re: Snork: New Tracing Tool for AmigaOS 4
|
Posted on: Yesterday 4:31
#12
|
Home away from home 
|
@msteed Quote: For dealing with buggy pointers to something that's not a NUL-delimited string, I was thinking of something simple, like limiting the length that's printed to something reasonable, so you won't potentially get thousands of random characters until it happens to encounter a NUL.
In addition, you could filter the string to turn unprintable characters into periods (or some other character), so you won't possibly print an escape code or control character that interferes with the display of the snooped data. That would require making a copy of the string, since you don't want to alter the original.
For now i limited string to 256 chars, + checking on null and 0xffffffff, + checked on format characters so to printf them as it, without taking as formatting symbols, cheking on fancy characters and replace them to (so printable ASCII character only) , etc. So before show the string i just do this:
// Create a safe, quoted string representation for logging
void safe_string_representation(const char *input, char *output, size_t output_size) {
if (!input) {
strncpy(output, "NULL", output_size - 1);
output[output_size - 1] = '\0';
return;
}
if (input == (CONST_STRPTR)0xFFFFFFFF) {
strncpy(output, "0xFFFFFFFF", output_size - 1);
output[output_size - 1] = '\0';
return;
}
size_t j = 0;
if (j < output_size - 1) {
output[j++] = '"';
}
for (size_t i = 0; input[i] && j < output_size - 2; i++) {
if (input[i] == '%') {
if (j < output_size - 3) {
output[j++] = '%';
output[j++] = '%';
}
} else if (input[i] == '"' || input[i] == '\\') {
if (j < output_size - 3) {
output[j++] = '\\';
output[j++] = input[i];
}
} else if (input[i] >= 32 && input[i] <= 126) {
output[j++] = input[i];
} else {
if (j < output_size - 3) {
output[j++] = '?';
}
}
}
if (j < output_size - 1) {
output[j++] = '"';
}
output[j] = '\0';
if (j >= output_size - 1) {
output[output_size - 1] = '\0';
}
}
And then :
char safe_str[256];
safe_string_representation((const char *)tag->ti_Data, safe_str, sizeof(safe_str));
IExec->DebugPrintF(" %s = %s\n", info->Name, safe_str);
Should be enough imho even without IExec->TypeOfMem() ?
|
|
|
|
Re: Snork: New Tracing Tool for AmigaOS 4
|
Posted on: Yesterday 3:38
#13
|
Just popping in 
|
@kas1e Quote: Thanks for implementing them! Quote: For string handling at minimum will do as Joerg says with IExec->TypeOfMem() , better than nothing (for now). For dealing with buggy pointers to something that's not a NUL-delimited string, I was thinking of something simple, like limiting the length that's printed to something reasonable, so you won't potentially get thousands of random characters until it happens to encounter a NUL. In addition, you could filter the string to turn unprintable characters into periods (or some other character), so you won't possibly print an escape code or control character that interferes with the display of the snooped data. That would require making a copy of the string, since you don't want to alter the original. Quote: Btw, added also new keyword for template %t - so you can output tags instead of pointer, Nice; I hadn't even thought of that one. Looking forward to the next update!
|
|
|
|
Re: ScummVM and AmigaOS4.1 F.E.
|
Posted on: 6/26 23:15
#14
|
Just popping in 
|
@khayoz
That's a pity. :(
I'll ping MagicSN, thanks for the info.
|
|
|
|
Re: Snork: New Tracing Tool for AmigaOS 4
|
Posted on: 6/26 22:07
#15
|
Home away from home 
|
@all Thanks for suggestions ! @Javier Quote: Just when you CTRL+C Snork just show a simple "Snork ended" on Shell/CLI (and maybe to serial outoput too).
Added, now it says start/end on both serial and console. @msteed Quote: It would also be nice if it showed the name of the program making the call like OS4 Snoopy does, so you can see which calls are made by the program being debugged
Done, now output looks like this (some simple trace of few dos functions):
...
Task/Process: Workbench (0x62E0AB30) --> IDOS->Open(name="LOCALE:Catalogs/english_UTF-8/Sys/libs.catalog",accessMode=1005)
Task/Process: Workbench (0x62E0AB30) --> IDOS->AllocDosObject(type=0,tags=0x00000000)
Task/Process: Workbench (0x62E0AB30) --> IDOS->PRIVATEDoPkt32(port=0x6FDF5450,action=1005,arg1=411674462,arg2=415205712,arg3=409172995,arg4=0,arg5=409172995,arg6=0,arg7=0)
Task/Process: Workbench (0x62E0AB30) --> IDOS->PRIVATEDoPkt32(port=0x6FDF5450,action=1005,arg1=411674462,arg2=412428724,arg3=409172995,arg4=0,arg5=409172995,arg6=0,arg7=0)
Task/Process: Workbench (0x62E0AB30) --> IDOS->FreeDosObject(type=0,ptr=0x62269D78)
Task/Process: Workbench (0x62E0AB30) --> IDOS->IoErr()
Task/Process: Workbench (0x62E0AB30) --> IDOS->Open(name="LOCALE:Catalogs/english_US_ASCII/Sys/libs.catalog",accessMode=1005)
Task/Process: Workbench (0x62E0AB30) --> IDOS->AllocDosObject(type=0,tags=0x00000000)
Task/Process: Workbench (0x62E0AB30) --> IDOS->PRIVATEDoPkt32(port=0x6FDF5450,action=1005,arg1=411674462,arg2=415205712,arg3=409172995,arg4=0,arg5=409172995,arg6=0,arg7=0)
Task/Process: Workbench (0x62E0AB30) --> IDOS->PRIVATEDoPkt32(port=0x6FDF5450,action=1005,arg1=411674462,arg2=412428724,arg3=409172995,arg4=0,arg5=409172995,arg6=0,arg7=0)
Task/Process: Workbench (0x62E0AB30) --> IDOS->FreeDosObject(type=0,ptr=0x62269D78)
Task/Process: Workbench (0x62E0AB30) --> IDOS->IoErr()
Task/Process: dopus_clock (0x61F8C1F0) --> IDOS->DateStamp(date=0x61A2ED44)
Task/Process: ELF Collector (0x6FDB57A0) --> IDOS->Delay(timeout=25)
Task/Process: ELF Collector (0x6FDB57A0) --> IDOS->Delay(timeout=25)
Task/Process: dopus_clock (0x61F8C1F0) --> IDOS->DateStamp(date=0x61A2ED44)
Task/Process: ELF Collector (0x6FDB57A0) --> IDOS->Delay(timeout=25)
Task/Process: ELF Collector (0x6FDB57A0) --> IDOS->Delay(timeout=25)
Task/Process: dopus_clock (0x61F8C1F0) --> IDOS->DateStamp(date=0x61A2ED44)
Task/Process: ELF Collector (0x6FDB57A0) --> IDOS->Delay(timeout=25)
Task/Process: ELF Collector (0x6FDB57A0) --> IDOS->Delay(timeout=25)
Task/Process: dopus_clock (0x61F8C1F0) --> IDOS->DateStamp(date=0x61A2ED44)
Task/Process: ELF Collector (0x6FDB57A0) --> IDOS->Delay(timeout=25)
Task/Process: ELF Collector (0x6FDB57A0) --> IDOS->Delay(timeout=25)
Task/Process: dopus_clock (0x61F8C1F0) --> IDOS->DateStamp(date=0x61A2ED44)
Task/Process: ELF Collector (0x6FDB57A0) --> IDOS->Delay(timeout=25)
Task/Process: snork (0x62E0A9B0) --> IDOS->Output()
Task/Process: snork (0x62E0A9B0) --> IDOS->IoErr()
Task/Process: snork (0x62E0A9B0) --> IDOS->IoErr()
Task/Process: snork (0x62E0A9B0) --> IDOS->Write(file=0x1839CFA8,buffer=0x60671000,length=51)
...
Also added 3 arguments now :
IDOS->Printf("Usage: %s [--help] [--script=<filename>] [--taskinfo=<yes|no>] [--show=<process name>]\n", argv[0]);
IDOS->Printf(" --help Show this help message and exit\n");
IDOS->Printf(" --script=<filename> Script file to parse (must end with .snork, default: main.snork)\n");
IDOS->Printf(" --taskinfo=<yes|no> Show task/process info (default: yes)\n");
IDOS->Printf(" --show=<process name> Log only for specified process name (default: all processes)\n");
IDOS->Printf("Note: For process names with spaces, quote the entire argument, e.g., --show=\"ELF Collector\"\n");
So you can 1), enable/disable task names, 2) use any script you wish (default main.snork), 3) have output from any task you want. For string handling at minimum will do as Joerg says with IExec->TypeOfMem() , better than nothing (for now). ps. Btw, added also new keyword for template %t - so you can output tags instead of pointer, and then output will looks like this:
Snork started!
Task/Process: WinFrame 1 Process (0x62907070) --> IDOS->Open(name="NIL:",accessMode=1005)
Task/Process: WinFrame 1 Process (0x62907070) --> IDOS->CreateNewProc()
tags: (tags=0x61A58EE0)
NP_Seglist = 0x1BFCF735
NP_WindowPtr = 0x0
NP_Error = 0x0
NP_Path = 0x0
NP_FreeSeglist = FALSE
NP_Input = 0x0
NP_Output = 0x0
NP_CloseInput = FALSE
NP_CloseOutput = FALSE
NP_CurrentDir = 0x0
NP_ProgramDir = 0x0
NP_Cli = TRUE
SYS_Asynch = TRUE
SYS_Input = 0x0
SYS_Output = 0x0
SYS_Error = 0x0
SYS_UserShell = TRUE
NP_Path = 0x189539AC
NP_CopyVars = TRUE
NP_Name = "DuplicateShell"
NP_Priority = 0
NP_StackSize = 65536
NP_ConsolePort = 0x0
Processed 23 tags
Task/Process: DuplicateShell (0x62082830) --> IDOS->Open(name="console:",accessMode=1006)
Task/Process: NewShell (0x62082830) --> IDOS->CreateNewProc()
tags: (tags=0x61A58100)
NP_Seglist = 0x1BFCF735
NP_FreeSeglist = FALSE
NP_StackSize = 65528
NP_Cli = TRUE
NP_ProgramDir = 0x0
NP_CloseInput = FALSE
NP_CloseOutput = FALSE
NP_CurrentDir = 0x0
NP_Input = 0x0
NP_Output = 0x0
NP_CopyVars = TRUE
NP_Name = "Shell Process"
Processed 12 tags
For that had to create a base of the tags for every library (as they can cross, in hope they will not). And i also move all stuff to IPC now, i.e. in generic_patch just now send the message and call to original, all loging/parsing happens in main's handleinput.
|
|
|
|
Re: Snork: New Tracing Tool for AmigaOS 4
|
Posted on: 6/26 21:54
#16
|
Not too shy to talk 
|
@kas1e
Thank you for another one of your "coding adventure" tools! Keep em coming.
|
1989-> A500, A600, A3000, A4000, A1200, CD32, µA1, PegII, A1XE, CDTV, Amy/416D79, A1X5000, Vampire 500 V2+, Vampire 600 V2, Amy-ITX, Denise ITX <-2024
|
|
|
Re: ScummVM and AmigaOS4.1 F.E.
|
Posted on: 6/26 21:48
#17
|
Not too shy to talk 
|
@Nuder_Try
Raziel isn't here anymore, he's alive but he left Amiga and Amigans.net a while ago sadly.. Talked to him in late May/early June and mentioned to him to contact @MagicSN about the ScummVM port.
|
1989-> A500, A600, A3000, A4000, A1200, CD32, µA1, PegII, A1XE, CDTV, Amy/416D79, A1X5000, Vampire 500 V2+, Vampire 600 V2, Amy-ITX, Denise ITX <-2024
|
|
|
Re: G-Wars
|
Posted on: 6/26 15:39
#18
|
Home away from home 
|
@Rob Quote: MorphOS user have reported it to be running fine on their systems although one did have a problem with the player ship not being drawn correctly. MorphOS try’s to have same clock ticks as a Amiga 500, while AmigaOS4 decided to have a higher precision clock based on real time clock, (so it’s not dived down.) In any case if the game was not broken, timing should work, only Nova Coder can fix the bugs in his game.. And nobody else them him know how it should work in his game.
Edited by LiveForIt on 2025/6/26 16:01:42 Edited by LiveForIt on 2025/6/26 16:02:11
|
(NutsAboutAmiga)
Basilisk II for AmigaOS4 AmigaInputAnywhere Excalibur and other tools and apps.
|
|
|
Re: G-Wars
|
Posted on: 6/26 15:31
#19
|
Home away from home 
|
@Rob There are many ways time kept in AmigaOS, one is timer.device, timer.device can measure time in cpu clock cycles ticks or milliseconds, ticks are synchronized to refresh rate, so ticks are not same between NTSC and PAL Amiga computers and therefore should not be assumed to be fixed number of clock cycles. Doing so is a bug. This hack should slow down your clock cycles ticks to old Amiga 500 pal amiga. https://os4depot.net/?function=showfil ... tility/misc/timerhack.lhaAnother way to keep time is cia chip a/cia chip b timer a and b, if hardware banging is used for timing then NallePuh, it should fix timing.. WaitTOF in graphics library we talked about before, should sync to video modes refresh rate.. refresh rate is behind the “@” in screen modes, typical this are auto detected using DDC.. but custom screen modes can be added to the screen mode icons. Refresh rate is typically 60hz on LCD, on CRT it can be as high as 90Hz. Old school Amiga 500 is typical 25Hz/33Mhz, for TV syncing. https://forum.amiga.org/index.php?topic=63099.0
|
(NutsAboutAmiga)
Basilisk II for AmigaOS4 AmigaInputAnywhere Excalibur and other tools and apps.
|
|
|
Re: Bootarguments for Qemu AmigaOne install on Mac M1
|
Posted on: 6/26 13:17
#20
|
Quite a regular 
|
@johnfante For inserting CD after boot see change command in QEMU Monitor https://www.qemu.org/docs/master/system/monitor.html or you could use the early startup menu as on real machine by holding both mouse buttons at the right moment during boot (around when the logo fades in but it may be hard to find when to do that, too early or too late may not work). About USB shared folder see http://qmiga.codeberg.page/#faq you need the corresponding -drive option to define ufat but this is limited to small files and writing it does not really work so using network for file transfer is better.
|
|
|
|