![]() |
![]() |
Cela regroupe tous les appels au Gemdos, Bios, Xbios, VDI, AES et même la LineA. On obtient en retour un fichier texte avec la liste des appels en clair. |
The calls can be Gemdos, Bios, Xbios, VDI, AES and even the LineA. You get in return a text file with the list of the system calls with their names. |
Vous pouvez lancer SYSREC.PRG directement et le programme vous pose toutes les questions nécessaires à son exécution. Ci-contre, je demande:
|
![]() |
You can simply run SYSREC.PRG, it will ask you everything required to run properly. On the left, SYSREC will:
|
Le mieux est d'enregistrer toutes les options dans un fichier texte. Par défaut, il s'appelle SYSREC.INF. Mais vous pouvez utiliser un autre nom et faire un drag'n'drop sur SYSREC pour qu'il soit pris en compte. Ci-contre, je prépare le fichier avec les mêmes options que précédemment. A chaque lancement, je n'aurai donc plus à les retaper. Si le fichier INF ne contient pas tous les éléments, ceux qui manquent seront demandés de manière interactive. |
![]() |
The best is to write everything once into a text file. Its default name is SYSREC.INF. But, you can rename it and use the drag'n'drop over SYSREC.PRG to use it. On the left, the INF file is prepared with the same parameters as before. At every run, I won't have to type it all again. If the INF file doesn't contain every option, the missing ones will be asked interactively. |
J'obtiens, sur le disque, ce fichier texte:
|
![]() |
On the disk, I get this text file:
|
Pour répondre à la question précédente, je modifie mon fichier INF en remplaçant s=I par s=A .
De ce fait, l'enregistrement des appels ne commencera que lorsque j'aurai utilisé la combinaison de touches Alt+HELP .
Je relance, charge une vidéo et appuie sur Alt+HELP juste avant le replay de l'animation. Je fais de même juste à la fin pour arrêter l'enregistrement.
On obtient le fichier ci-contre : seule la souris est gérée par la VDI, tout le reste de l'affichage se passe sans appel graphique au système. M_Player utilise donc bien ses propres routines graphiques. |
![]() ![]() |
To anwser the previous question, I modify the INF file replacing s=I with s=A .
This way, recording will only start when I press Alt+HELP .
I run SYREC again, load a video and press Alt+HELP just before the replay. I do the same just after the replay to stop recording.
I get the file on the left : only the mouse is managed by the VDI, every other display is done without system calls. So, M_Player uses its own graphic routines. |
Il est possible de limiter l'enregistrement à certaines fonctions. Pour savoir quels appels aux événements sont faits par M_PLAYER, je modifie encore avec la ligne r=A+20+21+22+23+24+25+26 afin de surveiller uniquement les appels à la librairie Events. Les autres appels AES seront ignorés. En retour, j'obtiens le fichier suivant : seuls EVENT_MULTI est utilisé. Note : la précision de numéros de fonctions n'est possible que dans le fichier INF, pas en mdoe interactif. |
![]() ![]() |
it is possible to taget some specific functions. If I want to know what events are managed by M_PLAYER, I can change the line to r=A+20+21+22+23+24+25+26 to record only the calls to the Event library. The other AES calls will be ignored. Upon return, I get this text file : only EVENT_MULTI is used. Note : specific functions can only be used through the INF file, not in interactive mode. |
Je cherche à savoir si M_PLAYER effectue des appels en superviseur. Je change encore la ligne avec: r=G+32X+38 pour surveillmer l'appel SUPER du GEMDOS et SUPEXEC du XBIOS. J'obtiens en retour ce fichier texte : les deux sont utilisés. |
>![]() ![]() |
I want to know if M_PLAYER runs some code in supervisor mode. Again, I modify the line with: r=G+32X+38 to record every call to SUPER (GEMDOS) and SUPEXEC (XBIOS). Upon return, I get this file : both are used. |
Je veux pouvoir tracer la fonction exécutée par l'appel SUPEXEC. Dans ce cas je modifie la ligne ainsi: r=X-38 Notez le signe "-" ! Cela déclenchera une instruction ILLEGAL à l'appel SUPEXEC et arrêtera le programme si je travaille sous un Debugger. |
![]() |
I want to trace the routine executed by SUPEXEC. So, I modify again the line with: r=X-38 Spot the sign "-" ! This will execute the ILLEGAL instruction whenever a SUPEXEC call is encountered. This will stop the program exactly where I want to if I work with a Debugger. |
J'ai rapidement un arrêt pour instruction ILLEGAL. J'ai programmé SYREC pour qu'il laisse dans A2 l'adresse de retour vers le programme appelant. J'inspecte les instructions prédédant cette adresse et retrouve rapidement l'appel XBIOS 38 et l'instruction
pea $012D2584 qui donne l'adresse de la routine superviseur que M_PLAYER va exécuter.
|
![]() |
Rapidely, the system stops because of the ILLEGAL instruction. I programmed SYREC to get the return address into A2. I inspect the codes just before this address and find the call to XBIOS 38 with the instruction
pea $012D2584 that gives the exact address of the supervisor routine that M_PLAYER wants to run.
|
Mais, on peut déjà voir que l'utilisation de l'adresse $5A0 et les codes de comparaison signalent une lecture du Cookie Jar.
|
![]() |
But yet, the usage of the address $5A0 and the long codes used show that this routine is a Cookie Jar parser.
|
Par exemple, l'appel à RSRC_LOAD se trouve à $A680 (= 42624) du début de la zone TEXT. Cela veut dire à 42624+256=42880 octets de la basepage. Ou bien à 42624+28 = 42652 octets du début du fichier PRG pour une éventuelle modification du code. Note : cette option multiplie par trois la taille du buffer nécessaire ! |
![]() ![]() |
For example, the call to RSRC_LOAD is located at offset $A680 (= 42624) from the TEXT zone. This means at 42624+256=42880 bytes from the basepage. Or at 42624+28 = 42652 bytes from the beginning of the PRG file for an eventual modification. Note : this option increases by a factor of three the size of the required buffer ! |