Amiga Boing ball Site pour télécharger tous les jeux AMIGA abandonware Amiga Boing ball
Retour Acceuil / Back Home Contact us ! Aide / Help  Accès à la page facebook de Amiga-Games.com
Amiga News View all AMIGA GAMES Goddies AMIGA
AMIGA Web Links Dossiers AMIGA Amiga Emulation Forums Web AMIGA Shops
Liste des jeux AMIGA par ordre alphabétique / AMIGA games list in alphabetical order.
Cliquer ici pour voir la liste compléte des jeux AMIGA sur une seule page - click here to view all AMIGA games in one page
--==[ The ULTIMATE AMIGA GAMES online backup ! ]==--
Amiga Infos A quoi sert WHDLoad
WHDLoad a été conçu pour installer facilement des programmes sur disque dur (demos, jeux, ...) qui détruisent le système multi-tâches. Pour installer un programme, il faut créer un fichier nommé "Slave". Le Slave est l'interface entre le programme et WHDLoad, et coordonne la lecture et l'écriture des fichiers.
La simplicité de l'interface et de nombreux exemples font qu'il est facile pour quelqu'un qui possède des connaissances sur l'Amiga et sur la programmation d'installer presque n'importe quel programme sur disque dur.
Amiga Infos Caractéristiques
Fonctionnalités de WHDLoad
• peut être démarré du CLI ou du Workbench
• protection mémoire utilisant le MMU (si disponible)
• retour complètement propre vers l'OS (dépend du slave)
• possibilité d'utiliser des images disque et/ou des fichiers standards
• taille mémoire chip variable de $2000 à $200000 pour le programme
• taille mémoire fast illimitée pour le programme
• allocation de la mémoire chip intelligente, en partie absolue et en partie indépendante.
• cache des fichiers et des images disques au démarrage et dynamiquement à l'exécution (LRU)
• décompression automatique des fichiers et des diskimages utilisant XPK
• décompression automatique des fichiers (RNC/IMP/TPWM/CRM) si le Slave le supporte
• émulation du MOVE SR,ea à partir du mode utilisateur sur 68010+
• émulation des instructions entières non supportées sur 68060
• fonctionnalités avancées de debug (dump mémoire, dump des registres, traçage des accès fichier, traçage des accès aux registres spécialisés)
• Compatible avec Enforcer/Cyberguard et VMM tant que l'option NoVBRMove/S n'est pas utilisée

WHDLoad a été testé sur les machines suivantes
• A1200 BlizzardIV 030/50/50 2 MB Chip 16 MB Fast AGA Kick 39.106
• A2000 GVP 030/25/25 1 MB Chip 1+4 MB Fast ECS Kick 37.175
• A4000 CS 060/50 2 MB Chip 16 MB Fast CV64 Kick 40.068
• A4000 CSPPC 060/50 2 MB Chip 144 MB Fast CV64 Kick 40.068
• x86 Win2k WinUAE 0.8.21r1
• x86 AmigaXL
• beaucoup d'autres...
Amiga Infos Ce qu'il vous faut

... pour exécuter les programmes installés
• un CPU 68000 (un 68010+ est recommandé parce que certains installs ont besoin du VBR pour l'option 'quit by a key')
• un minimum de 1 méga-octect de RAM (parfois plus, ceci dépend du programme installé)

Emulation Kickstart

Certains installs utilisent un certain kickemu pour disposer d'un environnement AmigaOS complet pour le programme installé. Pour ce kickemu, une image originale du kickstart est nécessaire. Cette image peut être récupérée à partir d'un Amiga avec des outils comme GrabKick ou équivalent qui se trouvent sur aminet. (soyez sûr d'avoir une configuration correcte de vos disques durs (MaxTransfer, Mask) sinon l'image créée sera corrumpue). L'image dépend du programme installé. Vous trouverez quelle image doit être utilisée dans le fichier ReadMe. L'image des versions 1.2 and 1.3 peut être extraite uniquement à partir d'un A500. La version 3.1 doit être extraite d'un A500/A600/A2000, A1200 ou d'un A4000 qui doit être équipé de la ROM 3.1. Si l'image n'est pas trouvée par WHDLoad ou qu'il s'agit d'une mauvaise version ou une version modifiée, WHDLoad termine avec un message d'erreur approprié. De plus, un fichier de relocation (extension .RTB) correspondant à l'image kickstart doit être présent. Ce fichier se trouve sur aminet dans l'archive util/boot/skick346.lha. Ces deux fichiers, l'image kickstart et le fichier de relocation, doivent être placés dans le répertoire Devs:Kickstarts/ et doivent être nommés correctement. A partir de la version 17 de WHDLoad, les fichiers peuvent localisés dans le tiroir WHDCOMMON:. La table en dessous donne les noms des fichiers selon la version du kickstart:
A partir de la version 16.5 de WHDLoad, les images du kickstart du CD de l'Amiga Forever (Cloanto) peuvent être utilisées. Ces images doivent être renommées suivant le tableau ci-dessous. De même le fichier rom.key doit être copié dans Devs:Kickstarts/ ou WHDCOMMON:. Quelques anciens installs ont besoin du fichier kick40068.A1200, ces intalls ne fonctionneront pas avec les ROMs du CD de Cloanto.
Amiga Forever 2008 contient le fichier kick40068.A1200 et les images sont copiées automatiquement à leur place.
Amiga Forever 2011 contient les fichiers rom kick33180.A500 et kick40063.A600. Ces roms requièrent la version 17 de WHDLoad pour être utilisées.

Version

Nom du fichier Kickstart

Nom du fichier de relocation

Nom du fichier sur le CD Cloanto

release 3.0

release 2005

release 2011

 

1.2

Devs:Kickstarts/kick33180.A500

Devs:Kickstarts/kick33180.A500.RTB

 

amiga-os-120.rom

1.3

Devs:Kickstarts/kick34005.A500

Devs:Kickstarts/kick34005.A500.RTB

kick130.rom

amiga-os-130.rom

amiga-os-130.rom

3.1

Devs:Kickstarts/kick40063.A600

Devs:Kickstarts/kick40063.A600.RTB

 

amiga-os-310-a500.rom

Devs:Kickstarts/kick40068.A1200

Devs:Kickstarts/kick40068.A1200.RTB

 

amiga-os-310-a1200.rom

Devs:Kickstarts/kick40068.A4000

Devs:Kickstarts/kick40068.A4000.RTB

kick310.rom

amiga-os-310.rom

amiga-os-310.rom

Pour écrire de nouveaux Slaves / programmes d'install :
• un 68030 (ou plus) avec MMU est recommandé pour utiliser toutes les caractéristiques de WHDLoad (une grosse bécane est un choix judicieux pour développer des programmes ;-))
• des connaissances sur le langage machine, l'assembler, le hardware Amiga ...
• un assembleur (capable d'optimiser)
• d'autres utilitaires (hexedit, disasm, ...)
• quelques MB de mémoires
• pouvoir accéder à des Amigas différents pour des raisons de tests (68000 - 68060, OCS, AGA, carte graphique)
• un débugger hardware ou software comme AR3, HRTMon, TK
• un bouton NMI pour interrompre le programme ou pour entrer dans un débugger (moniteur)

Amiga Infos Installation
La façon la plus facile d'installer WHDLoad et les utilitaires fournis est d'utiliser le script d'installation.
Le plus important, c'est que les utilitaires et WHDLoad doivent être accessibles sans avoir à donner un chemin d'accès spécifique. Cependant l'emplacement recommandé est "C:". WHDLoad peut être installé dans le même répertoire où le programme se trouve (notez que dans les exemples des icones de type "project", seulement "WHDLoad" est utilisé sans aucun chemin d'accès).

Les utilitaires "DIC", "RawDIC" et "Patcher" doivent être installés car ils sont requis par de nombreux intalls.
Amiga Infos Utilisation et options

Usage
WHDLoad peut être lancé à partir d'une ligne de commande (CLI/shell) ou bien du Workbench. Les options peuvent être spécifiées dans un fichier de configuration globale et par des arguments ou par des ToolsTypes. L'option Slave est toujours requise. D'autres options peuvent être nécessaire aussi, cela dépend de votre matériel et des logiciels utilisés. A partir d'une ligne de commande, WHDLoad quittera avec les codes de retour suivants: •0 - exécution réussie
• 10 - erreur, le Slave ne pourra être exécuté à cause de problèmes antérieurs, l'erreur du message est affichée
• 20 - erreur fatale, pas assez de mémoire libre
• > 100 - le Slave a été exécuté, retour avec 100 + TDREASON

Options et configuration globale
Les options sont soit locales, globales ou les 2. Les options locales peuvent être définies soit comme arguments via la ligne de commande (dans le CLI) soit comme ToolTypes à partir de Workbench.
Le fichier de configuration globale est "S:WHDLoad.prefs". C'est un fichier de caractères ASCII et contient une option par ligne. Les lignes vides et les commentaires sont ignorés. Un commentaire commence après un ";" et se trouve à la fin de la ligne de commande.
Un exemple d'un fichier configuration se trouve dans l'archive WHDLoad ("S/WHDLoad.prefs").
Liste des options disponibles

3 types d'options existent:

numerical:

La valeur de l'option est un nombre,
dans la ligne de commande vous devez utiliser un décimal, dans les ToolTypes vous pouvez aussi utiliser un héxadecimal précédé d'un "$"

string:

L'option est une suite de caractères

switcher:

L'option sera activée si spécifiée

La colonne Locale vous informe si une option peut être utilisée comme ligne de commande et comme tooltype dans l'icone. La colonne Globale indique si une option peut être utilisée dans le fichier de configuration globale.

Beaucoup d'options ne sont pas disponibles pour WHDLoadCD32. La colonne CD³² indique si une option est présente pour cette version spéciale de WHDLoad.

Exemple

Workbench:

CLI ou Shell:

1> WHDLoad SuperGame.Slave Preload NTSC QuitKey=69 Custom1=1


Description de chaque option

ButtonWait/S
Cette option n'affecte pas WHDLoad lui-même, mais elle peut être testée par le Slave.
Si elle est activée, l'utilisateur souhaite que le programme installé attende qu'un bouton soit pressé lors de l'affichage d'une image ou lors d'une musique (car le chargement est beaucoup plus rapide à partir d'un disque dur que sur disquette).
BranchCache/S
Active le BranchCache du 68060. Il n'y aura aucun effet sur les autres CPU.
L'option est inopérante si NoCache/S est activé.
Cache/S
Active le cache d'instruction du CPU et désactive le cache de données pour le programme installé. Si le MMU est utilisé par WHDLoad, la mémoire Chip sera cachable Writethrough (imprécis).
Cette option est sans effet si NoCache/S est activé.
ChipNoCache/S
Désactive la cachabilité de la mémoire Chip (BaseMem). Ceci peut servir sur le matériel qui n'autorise pas la cachabilité de la mémoire Chip (par ex. les cartes BlizzardPPC) afin d'éviter un ralentissement dans l'exécution du programme installé. Généralités sur le cache CPU.
Config/K
Avec cette option la configuration d'items peut être spécifiée et sera affichée dans la fenêtre de démarrage de WHDLoad. Cette option pendra le dessus de ws_config spécifié dans le Slave. Pour la syntaxe, vérifiez ws_config dans l'autodocs.
Si il n'y a aucun ws_config dans le Slave ou Config/K n'est mis et que le Slave vérifie des Custom1-5/K/N/ButtonWait/S items via la resload_Control fonction, WHDLoad ajoutera l'option Config/K dans l'icone si c'est lancé à partir du Workbench. Le type d'items sera dérivé à partir de la valeur actuelle des Custom1-5/K/N options (0-1 booléen, 2-63 liste, >63 binaire).
ConfigDelay/K/N
Cette option spécifie le temps d'affichage en 1/50 de seconde de la fenêtre de démarrage s'il y a des butons (voir Config/K et Expert/S) activés. Si ConfigDelay/K/N est inférieur à ReadDelay/K/N ou SplashDelay/K/N, l'option sera ignorée. La fenêtre est affichée aussi longtemps que Preload/S est en action. Si un bouton de configuration est pressé le compteur pour ConfigDelay recommence.
Si une option est mise à -1, un bouton Start est ajouté à la fenêtre et restera ouverte jusqu'à ce que bouton soit pressé. La fenêtre splash peut se fermer en pressant Space, Return ou Enter. Si Esc est pressé WHDLoad arrêtera Preload/S et quittera immédiatement.
Chk/S
Cette option est un raccourci et active les options ChkBltSize/S, ChkBltWait/S et ChkColBst/S
ChkBltHog/S
Vérifie tout le temps si le bit blthog (bltpri) dans le registre custom.dmacon est activé. Cette fonction ne marche seulement avec une des options SnoopOCS/SnoopECS/SnoopAGA.
ChkBltSize/S
Vérifie que le programme installé utilise correctement le blitter, ainsi seulement les mémoires valides seront utilisées pour les opérations du blitter. Cette fonction ne marche seulement avec une des options SnoopOCS/SnoopECS/SnoopAGA.
ChkBltWait/S
Vérifie que le programme installé attend que le blitter ait fini son travail avant d'en commencer un autre. Cette fonction ne marche seulement avec une des options of the SnoopOCS/SnoopECS/SnoopAGA.
ChkColBst/S
Teste tout le temps si le bit de couleur dans le registre du custom.bplcon0 est activé. Cette fonction ne marche seulement avec une des options SnoopOCS/SnoopECS/SnoopAGA.
ChkCopCon/S
Vérifie que le programme installé ne permet pas certains accès du Copper au DMA via le registre custom.copcon. Cette fonction ne marche seulement avec une des options SnoopOCS/SnoopECS/SnoopAGA.
ChkInts/S
Vérifie pour chaque interruption, en l'occurrence si Intreq et Intena sont activés pour cette interruption. Si ce n'est pas le cas, le programme quittera avec un message approprié. Ce dispositif permet facilement de détecter un problème d'interruption reconnue sur les ordinateurs rapides (68040/060) ou bien un matériel défectueux qui causerait des interruptions non désirées. Cette situation peut arriver plus rapidement si les interruptions sont désactivées via Intena et si en même temps une interruption se produit, c'est pour cette raison que cette option est permutable. A partir de la version 17.1 de WHDLoad, cette option active aussi les vérifications de cohérence et de tests de clavier pour les interruptions de niveaux 4 à 6 qui sont normalement effectués dans les niveaux 1 à 3.
CoreDump/S
Si c'est sélectionné, à chaque sortie du programme installé, WHDLoad créera une sauvegarde de la mémoire et des registres. C'est utile pour "ripper" une musique ou pour débugger à partir de ce dump.
CoreDumpPath
Définie le chemin d'accès pour les dump fichiers créés par WHDLoad.
Custom/K, Custom1/K/N, Custom2/K/N, Custom3/K/N, Custom4/K/N, Custom5/K/N
Ces options ne sont pas utilisées par WHDLoad lui-même, mais par le Slave. Custom/K peut contenir une suite de caractères, Custom1-5/K seulement des nombres. Jetez un oeil sur la documentation de l'install qui supporte les options Custom.
D/S
Cette option est utile pour débugger. Si l'option est activée et qu'un débuggeur (HRT ou TK) se trouve en mémoire, WHDLoad simule une interruption non masquable (NMI) avant d'exécuter la 1ère instruction du cpu contenue dans le Slave.
Data/K
Spécifie le répertoire de données principal du programme installé. Plusieurs répertoires peuvent être utilisés, ils seront séparés d'une virgule (,) (le nom du répertoire ne pourra pas contenir une virgule!), lors d'un chargement, les répertoires seront vérifiés dans l'ordre pour la lecture des fichiers. L'écriture de fichier sera effectuée seulement dans le 1er répertoire. Cette option est prioritaire sur la valeur ws_CurrentDir contenue dans le Slave.
DCache/S
Active le cache d'instructions et le cache de données du CPU. Si le MMU est utilisé par WHDLoad, la mémoire Chip sera cachable Writethrough (imprécis).
L'option est inefficace si NoCache/S est activé.
DebugKey/K/N
Utilisez le code clavier pour quitter le programme et debug (sauvegarde un fichier coredump). Ceci ne fonctionne que si le mode expert est activé, que le VBR a été déplacé par WHDLoad (NoVBRMove/S ne doit pas être activé) et que le cpu soit au moins un 68010 ou que le Slave supporte lui-même le "DebugKey".
ExpChip/S, ExpLocal/S, Exp24Bit/S
Si le programme installé utilise de la mémoire étendue (ws_ExpMem), ces options peuvent être utilisées pour forcer WHDLoad à allouer de la mémoire respectivement Chip, Local ou 24Bit. Ceci peut en résulter d'une performance dégradée car ces mémoires ont des accès processeurs moins rapides que la mémoire Fast. Vous pouvez utiliser des programmes comme SysInfo, GvpInfo,... pour vérifier votre configuration de mémoire et voir leur propriété. En général, le but de ces options est de résoudre des problèmes de compatibilités des programmes installés sur des ordinateurs rapides en utilisant de la mémoire lente afin de réduire la vitesse d'exécution du programme.
Expert/S
Active le mode Expert de WHDLoad. Il utilise l'option DebugKey/S et signale les erreurs (écrans de couleur/copper) pendant le retour du programme installé vers l'OS. Si le mode Expert n'est pas activé, l'option DebugKey/S ne sera pas disponible. Dans le mode Expert, un autre bouton dans quelques requêtes d'erreurs de WHDLoad apparait aussi. Ce bouton appelé Show Regs permet d'afficher les registres et de similaires informations contenues dans le registre dump. De plus, quelques boutons permutables de débogage sont ajoutés à splash window. Les modifications sont sauvegardées à l'icone si c'est lancé à partir du workbench.
ExecuteCleanup
Avec cette option, une commande peut être exécutée après que WHDLoad ait terminé.
ExecuteStartup
Avec cette option, une commande peut être lancée avant WHDLoad. Ceci est utile pour désactiver le matériel qui provoque certains problèmes avec WHDLoad ou pour arrêter une pile TCP/IP ou un programme similaire.
FileLog/S
Cette option est seulement pour débugger. Voir le chapitre Dumps and Logfiles pour plus d'informations.
FreezeKey/K/N
Si vous utilisez un débuggeur (HRTMon ou ThrillKill), vous pouvez activer cette option pour que WHDLoad puisse entrer dans le débugger quand une touche du clavier est pressée rawkey. Pour cela, il faut que le VBR soit déplacé par WHDLoad, (l'option NoVBRMove/S ne doit pas être activée et que le cpu soit au moins un 68010) et que le freezer doit être actif. Voir le chapitre System Monitors / Freezer pour plus d'informations.
FullChip/S
Permet de sauvegarder et restaurer toute la mémoire Chip (execbase MaxLocMem) au lieu de ws_BaseMemSize du slave. Quand WHDLoad utilise le MMU pour protéger la mémoire, les erreurs d'accès ne sont gérées que par le CPU. Les accès DMA (coprocesseurs comme le Blitter/disk-DMA) ne le sont pas et peuvent corrompre la mémoire Chip. Ils ne pourront pas être détectés par la protection mémoire de WHDLoad. Avec cette option, ces erreurs d'accès ne pourront plus endommager le système d'exploitation.
Avant que le programme installé soit lancé, la mémoire Chip additionnelle (la zone entre BaseMemSize et MaxLocMem) sera remplie par des données spéciales. Après que le programme ait été interrompu, WHDLoad vérifie si cette mémoire additionnelle a été altérée. Si ce cas se présente, un message d'erreur sera affiché et cette mémoire sera inscrite dans le fichier mémoire dump (non dans le fichier complet dump) ce qui permettra de futures investigations.
Cette option est très utile lors du développement/debugging afin d'éviter que le système d'exploitation ne plante et cela permet aussi d'utiliser temporairement des intalls bogués.
MMU/S
Cette option doit être utilisée sur les systèmes à base de 68030 pour obtenir les fonctions MMU suivantes: protection de la mémoire , amélioration de la gestion des caches du cpu, Snooping, resload_Protect#? Sur un 68040 ou 68060, cette option n'a pas d'effet car le MMU est utilisé par défaut. Il est fortement recommandé de mettre cette option dans le fichier configuration globale pour tous les systèmes à base de 68030 (non 68EC030) contenant un MMU car le MMU améliore énormément la stabilité du système et sa sécurité. Si l'option NoMMU/S est activée, cette option n'a pas d'effet.
NoAutoVec/S
Si cette option est sélectionnée, WHDLoad ne quittera pas le programme si un auto-vecteur inattendu ou une NMI intervient (vecteur #25-31 / $64-$7c). Ceci peut être utilisé sur les systèmes/hardware qui produisent des interruptions aléatoires afin d'empêcher WHDLoad de quitter (l'idéal est de déconnecter le matériel défaillant!).
NoCache/S
Désactive tous les caches du cpu.
Cette option prend le dessus sur les options suivantes: BranchCache/S, Cache/S, DCache/S, StoreBuffer/S et SuperScalar/S.
NoFileCache/S
Désactive le cache des fichiers de WHDLoad et force l'activation de l'OS pour chaque opération du disque du programme installé.
Cette option désactive l'option Preload/S.
NoFilter/S
Désactive le filtre audio. Notez que cette option n'est efficace seulement au début, le programme installé peut changer lui-même l'état du filtre audio.
NoFlushMem/S
Normalement WHDLoad vide la mémoire au début pour avoir le plus de mémoire libre pour l'opération Preload/S en ôtant les ressources non utilisées comme les librairies, fonts etc. de la mémoire. En utilisant cette option, WHDLoad ne videra pas la mémoire. Cela peut être utilisé sur des systèmes qui possèdent beaucoup de mémoire libre afin d'éviter de recharger les ressources et ainsi améliorer les performances du système.
NoMemReverse/S
Si cette option est activée, WHDLoad n'allouera pas la mémoire en utilisant le drapeau MEM_REVERSE. Il se trouve qu'avec ce drapeau, des problèmes peuvent apparaître sur certaines configurations (configuration utilisant la mémoire du slot PCMCIA sur A600/A1200 comme mémoire rapide, configuration avec une M-Tec 1230/8 MB OS3.0). Les raisons de ces problèmes sont inconnues. Cette option peut aider si de la mémoire se trouvant dans les adresses hautes est endommagée, car WHDLoad utilisera la mémoire avec des adresses basses en premier. Si vous avez d'autres problèmes assez étranges, cette option peut être utile à essayer. Elle a été introduite à partir de la version 16.8 de WHDLoad.
NoMMU/S
Si cette option est activée, WHDLoad n'utilisera pas le MMU. C'est une option dangereuse et n'est recommandée seulement pour tester ou débugger et non pour une utilisation normale. Voir chapitre MMU pour plus d'informations. L'option prend le dessus sur MMU/S.
NoReq/S
Cette option est utilisée seulement quand WHDLoad est lancé à partir d'une ligne de commande (CLI/Shell). A partir du Workbench, il n'aura aucun effet. L'option force WHDLoad à afficher les messages de sorties dans la fenêtre de commande où WHDLoad a été exécuté au lieu d'ouvrir une nouvelle fenêtre.
NoResInt/S
Désactive les interruptions pendant l'exécution des fonctions "resload". Normalement les interruptions sont autorisées. Elles peuvent par exemple traiter du son, mettre à jour l'écran graphique ou d'autre chose tout aussi importante. Les désactiver pourrait déformer le son ou l'écran, ou qu'il y ait un dysfonctionnement total. Ne pas les faire fonctionner correctement pourrait aussi détruire les données internes de WHDLoad, et causer un plantage de WHDLoad et probablement de tout le système d'exploitation. Cette option peut être utilisée pour vérifier d'autres problèmes. Si un install se comporte de façon étrange ou fait planté WHDLoad mais fonctionne avec cette option, ce sera très certainement un problème d'interruption. Dans ce cas là, l'install aura besoin d'être fixé.
NoTrapHandler/S
Si cette option est activée, WHDLoad utilisera la table de vecteurs originaux de l'OS du système. Au début WHDLoad copiera la table de vecteurs du système au lieu de créer sa propre table. C'est utile pour débugger et ne devrait pas être utilisé pour un usage normal. Attention: si une exception est appelée par l'intermédiaire de la table de vecteur originale, elle exécutera une fonction OS ou essayera d'utiliser les données de l'OS et la machine plantera (ex. exec.Alert).
NoVBRMove/S
Par défaut, WHDLoad déplace le VBR à une position différente dans la mémoire autre que $0. C'est un avantage, le programme installé ne peut changer la table des vecteurs et ceci améliore énormément la sécurité et la stabilité de WHDLoad. Quelques programmes installés/slaves ne fonctionnent pas correctement avec un VBR déplacé. La raison est que le programme installé peut effectuer des choses étranges qui ne supporteront pas que le VBR soit déplacé ou que l'auteur de l'install était trop fainéant pour supporter un VBR déplacé. Dans un tel cas, cette option doit être activée pour empêcher un déplacement du VBR par WHDLoad.
Une autre caractéristique d'un VBR déplacé est que WHDLoad peut vérifier le clavier chaque fois qu'une interruption d'un Autovector se produit. WHDLoad sera donc capable de quitter le programme installé indépendamment du fonctionnement de celui-ci, si QuitKey/S ou DebugKey/S est pressée. (de même que le programme installé peut être interrompu quand FreezeKey/S est pressée). Pour déplacer le VBR, il faut au minimum un 68010. Sur un 68000, cette option n'a pas d'effet, car le VBR se trouve toujours à $0 et qu'il ne peut pas être déplacé.
NoWriteCache/S
Désactive le cache du disque en écriture de WHDLoad. Sans cette option, WHDLoad essayera d'optimiser toutes les opérations d'écriture dans la mémoire et de les différer jusqu'à que le programme quitte afin d'éviter inutilement l'activation de l'OS.
NTSC/S
Si sélectionné, WHDLoad utilisera un affichage NTSC (60Hz) pour le programme installé. Sur un Amiga PAL, le pilote du moniteur NTSC doit être installé dans "DEVS:Monitors/".
PAL/S
Si sélectionné, WHDLoad utilisera un affichage PAL (50Hz) pour le programme installé. Sur un Amiga NTSC, le pilote du moniteur PAL doit être installé dans "DEVS:Monitors/".
Preload/S
Si cette option est activée, WHDLoad chargera les fichiers et les images de disque en mémoire autant que possible (en fonction de la mémoire libre disponible). Ceci améliore les performances quand le programme installé fonctionne, car cela évite des accès à l'OS pour charger les données directement à partir du disque dur. Cette option devrait toujours être activée.
QuitKey/K/N
Choisissez un code clavier pour quitter le programme, ceci marche seulement si le VBR est déplacé par WHDLoad (NoVBRMove/S ne doit être activé et le cpu doit être au moins un 68010) ou que le slave le supporte lui-même.
ReadDelay/K/N
Cette option spécifie le temps en 1/50ème de seconde l'attente de WHDLoad après avoir chargé les données du disque, et aussi après que l'option Preload ait fini. Ceci résout les problèmes de lecteurs (ex. lecteur de CD) qui veulent faire quelque chose après la lecture (ex. éteindre le moteur).
RestartKey/K/N
En utilisant cette option, vous pouvez choisir un code clavier pour relancer le programme installé.
SaveDir/K
Spécifie un sous répertoire pour les opérations d'écriture du programme installé. Cette option est associée avec l'option SavePath/K. Cette option (SaveDir) est requise dans certaines situations, par ex. s'il y a plusieurs versions d'un jeu qui utilisent le même slave dont les fichiers de sauvegardes ne sont pas compatibles entre eux, car par défaut c'est WHDLoad qui détermine lui-même le nom du sous répertoire. Une autre utilité est si le slave ne contient pas le nom du jeu et que vous ne voulez pas, comme répertoire de sauvegarde, le nom du slave.
SavePath/K
Force WHDLoad à rediriger toutes les opérations d'écriture de fichier par le programme installé vers un chemin d'accès différent sur le disque. Cette option spécifie le répertoire principal pour tous les programmes installés. Le sous répertoire sera créé par WHDLoad s'il n'existe pas (lors de la 1ère opération d'écriture). Le nom du sous répertoire peut être spécifié avec l'option SaveDir/K sinon c'est WHDLoad qui le détermine grâce aux infos du slave (ws_name ou le nom du slave). Ce répertoire de sauvegarde sera traité en interne et rajouté au répertoire Data.
ShowRegs/K/N
Cette option est très utile si Expert/S est activé. Vous pouvez spécifier un programme qui sera utilisé pour afficher le fichier Dump, si le bouton Show Regs (dans une requête d'erreur de WHDLoad) a été pressé. WHDLoad copiera le nom du fichier (fichier temporairement sauvé, actuellement T:.whdl_register) dans la chaîne de commande spécifiée.
Slave
Nom du slave qui doit être utilisé pas WHDLoad. Le slave contient le code interface qui est requis pour la communication entre le programme installé et WHDLoad.
Snoop/S, SnoopAGA/S, SnoopECS/S, SnoopOCS/S
Ces options activent le registre Cia/Custom snoop de WHDLoad.
SplashDelay/K/N
Spécifie le temps (en 1/50ème de seconde) d'affichage de la fenêtre d'informations de WHDLoad au début. Si SplashDelay/K/N est plus petit que ReadDelay/K/N, il sera ignoré et la fenêtre restera affichée avec le temps de ReadDelay/K/N. La fenêtre est affichée aussi longtemps que Preload/S travaille. Si l'option est à 0, aucune fenêtre ne s'affichera.
StoreBuffer/S
Active le Store Buffer du 68060. Sur les autres cpu, il n'y aura aucun effet.
L'option est inactive si NoCache/S est mis.
SuperScalar/S
Active la capacité du cpu à exécuter plusieurs instructions par cycle. Sur les autres cpu, il n'y aura aucun effet.
L'option est inactive si NoCache/S est mis.
TimeOut/K/N
Si activé, WHDLoad et le programme installé quittera après le temps spécifié. L'option NoVBRMove/S ne doit pas être mise et le programme installé ne doit pas modifier le ciaa.ciatod timer. Le temps pour quitter est spécifié en 1/50ème de seconde. Pour mesurer ce temps pour une démo ou un jeu, activez l'option Expert/S et choisissez un DebugKey/K/N, quand vous aurez atteint le point désiré, appuyez sur la touche debug. Maintenant regardez dans le fichier .whdl-register et recherchez la valeur ciaa-event. Si la fréquence de la puissance délivrée est 50 Hz, alors c'est la valeur à mettre avec TimeOut/K/N, si la fréquence est 60 Hz, vous devez multiplier la valeur par 5/6.
WriteDelay/K/N
Spécifie le temps d'attente (en 1/50ème de seconde) de WHDLoad après avoir écrit sur le disque dur. Ceci affecte toutes les fonctions resload_Save#? et FileLog/S. En général, les systèmes de fichiers n'écrivent pas les données immédiatement sur le disque dur. Cela prend un peu de temps (1 à 3 secondes) jusqu'à que toutes les structures du système de fichiers soient mises à jour avec succès. La valeur par défaut pour WriteDelay est 150, WHDLoad attendra donc 3 secondes après chaque écriture sur le disque dur. Vous pouvez mettre la valeur à 0, mais vous ne devriez jamais quitter par un reset le programme installé car les données ne seront pas sauvegardées correctement sur le disque dur.

Amiga Infos WHDLoadCD32

WHDLoadCD32 est une version spéciale de WHDLoad, conçue pour être utilisée sur la console de jeu CD³². Elle a été optimisée pour ce hardware et fonctionnera uniquement sur une simple CD³², non sur une CD³² étendue. Elle ne marchera non plus sur SX-32 ou toute autre machine.
Voici les différences avec la version normale de WHDLoad:
• aucun fichier clé (keyfile) n'ait requis. Les CDs contenant WHDLoadCD32 peuvent être distribués librement
• le CPU 68020 est seulement supporté, ceci veut dire que le MMU n'est non plus pas supporté
• la mémoire rapide (fast memory) n'est pas supportée
• aucun fichier n'a d'accès en écriture (pas de savegames, de highscores, ni de coredumps). Un CD est d'habitude read-only
• beaucoup d'options ont été enlevées. Elles ne sont pas utiles sur une CD³². Ceci à l'avantage de rendre l'exécutable plus petit et d'utiliser moins de mémoire. Voir le chapitre Usage et Options pour savoir qu'elles sont les options disponibles
• les fonctions "resload" suivantes ne sont pas intégrées. Si elles sont utilisées, WHDLoad quittera avec le code de retour TDREASON_ILLEGALARGS: ◦resload_DiskLoadDev
◦ resload_ProtectRead
◦ resload_ProtectReadWrite
◦ resload_ProtectWrite
◦ resload_ProtectRemove
◦ resload_ProtectSMC

• les fonctions "resload" suivantes sont factices, elles ne feront strictement rien. Le code de retour dira toujours que l'opération est réussie: ◦resload_SaveFile
◦resload_SaveFileOffset
◦resload_DeleteFile

• il n'y a pas de support pour les freezers/monitors
• il n'y a aucune vérification interne pour insuffisance de mémoire de la pile, d'après mes tests la valeur par défaut de 4096 octets devrait être suffisante pour WHDLoadCD32

Astuces pour uriliser WHDLoadCD32 sur une CD³²
Le problème principal sur une CD³² est que la mémoire est limitée. Il n'y a que 2 MB de mémoire graphique disponible. L'objectif est d'avoir le maximum de mémoire libre pour WHDLoad et spécialement pour l'option PreLoad. Pour cela, assurez-vous qu'aucun autre programme ne tourne pendant que WHDLoadCD32 ne se lance. •Si un install permet de choisir entre les diskimages ou les fichiers, utilisez les fichiers. Car les fichiers de petites tailles peuvent trouvés un emplacement en mémoire plus facilement que les gros fichiers.
• Si un install vous donne la possibilité de compresser les fichiers en utilisant les logiciels Propack ou FImp, utilisez-la et compressez tous les fichiers (l'algorithme RNC1 donne le meilleur ratio de compression). De plus, moins de mémoire ne sera requise pour l'option PreLoad et il n'y aura presque aucun délai lors du chargement.
• Utilisez AllocMemReverse (ou un programme similaire) avant de lancer WHDLoadCD32. AllocMemReverse est un petit programme inclus dans l'archive de développement de WHDLoad. Il modifie la fonction AllocMem de la librairie "exec" pour utiliser en premier de la mémoire avec l'attribut MEM_REVERSE. La mémoire sera allouée à partir du sommet de la mémoire libre vers le bas et non par défaut, du bas vers le sommet. Ceci a pour effet de garder la mémoire inférieure libre. WHDLoad a besoin de la mémoire commençant à l'adresse 0, le début de la chipmem. Toute la mémoire inférireure a besoin d'être permutée. Pour cela, de la mémoire supplémentaire est requise pour sauvegarder cette mémoire. Plus la mémoire inférieure est utilisée moins il n'y aura de mémoire disponible pour le programme installé et pour l'option PreLoad.
• Utilisez toujours l'option Data. PreLoad ne connait pas quels sont les fichiers qui seront chargés par le programmme donc il charge tous les fichiers qu'il trouve. Afin d'éviter que des fichiers inutiles ne soient chargés en mémoire, créez un tiroir qui contiendra seulement les fichiers nécessaires. Effacez tous les fichiers obsolètes tels que #?.info, #?.Slave, ReadMe, Manual, .... Ensuite lancez WHDLoadCD32 avec le Slave et le tiroir Data comme argument, par exemple WHDLoadCD32 :Slaves/XYZ.Slave Data=:Data/XYZ PreLoad. Il n'y a pas besoin de changer le répertoire courant.
• Ne compressez pas les fichiers avec le logiciel XPK. La décompression XPK a besoin de plus de mémoire car les libraries XPK doivent être en mémoire, le décompresseur lui- même utilise aussi de la mémoire et la décompression fragmente la mémoire.

Amiga Infos Programmation de WHDLoad

Flot d'exécution

Le tableau suivant montre le flot d'exécutions d'un programme installé par WHDLoad. J'espère que cela aidera à comprendre comment WHDLoad fonctionne et comment WHDLoad, le slave et le programme installé coopèrent.
L'UTILISATEUR

• démarre la démo ou le jeu en cliquetant sur l'icône ou en démarrant WHDLoad par la ligne de commande.

Le système d'exploitation

• charge l'exécutable WHDLOAD et le démarre

WHDLoad

• vérifie l'environnement logiciel et matériel
• charge et vérifie le slave
• alloue la mémoire nécessaire pour le programme installé
• Si Preload/S est activé, les images disques et les fichiers sont chargés en mémoire (tant qu'il reste de la mémoire)
• désactive le système d'exploitation (désactive le multitâche et les interruptions, restreint l'environnement graphique à l'OCS, initialise tout le matériel avec des valeurs définies)
• saute dans le code du slave.

Slave

• charge le programme principal du programme installé en appelant une fonction WHDLoad (par exemple resload_DiskLoad ou resload_LoadFile)
• modifie le programme principal (pour que ce programme charge ses données à travers le slave, pour corriger des problèmes de compatibilité, pour aménager une sortie du programme)
• appelle le programme principal

Programme installé

• fait les choses qu'il a à faire
• au chargement des données à partir du disque, il appelle le slave (car celui-ci a modifié le programme pour cela précédemment), et le slave appelle WHDLoad, et WHDLoad active partiellement l'OS pour charger les données (uniquement si les données ne sont pas Preload'ed), puis retourne, retourne et le programme installé continue.

L'UTILISATEUR

• sort du programme en appuyant sur la Touche pour quitter
Le Slave

• retourne à WHDLoad et appelant resload_Abort

WHDLoad

• réactive l'OS (restaure les registres du hardware, l'affichage, et la mémoire)
• libère toutes les resources allouées
• retourne au système d'exploitation
Comment installer un programme simple à 1 disque avec un chargement de pistes
C'est un guide pas à pas très petit et court qui explique comment créer un install en utilisant WHDLoad. Le guide reflète un cas simple et idéal. Dans le monde réel, un tel cas n'arrive probablement jamais. Pour les cas particuliers et les problèmes, lire les chapitres suivants. 1.Travail préliminaire ◦Créer un tiroir qui contient tous les fichiers.
◦Créer une image disque en utilisant DIC dans ce répertoire.
◦Créer un fichier #?.info avec "WHDLoad" comme <Outil par défaut> et un tooltype "SLAVE=#?" contenant le nom du slave (ou copier simplement une icône d'un exemple d'install, désactiver tous les tooltypes sauf "SLAVE=").

2.Le Slave
Pour écrire le slave nous avons besoin des informations suivantes: 1.Où est situé le programme exécutable principal sur le disque?
2.Où est situé le programme de chargement dans le programme principal?
Pour obtenir cette information, nous analysons d'abord le secteur de boot. La plupart du temps le programme principal est chargé à partir d'un exec.DoIO(). Parfois un programme de chargement spécial se trouve dans le secteur de boot. A présent nous écrivons un slave qui simule le bootblock et qui charge le programme principal à partir de l'image disque. Maintenant nous extrayons le programme principal de l'image ou d'un dump mémoire. Après cela, nous devons trouver le programme de chargement dans le programme principal. Une façon rapide est de rechercher le pattern $AAAAAAAAA ou $55555555 (utilisé par le décodage MFM) avec un éditeur hexadécimal. Couper la zone trouver à (+/- $1000 octets), le désassembler, et rechercher le début de la routine. Comprendre la liste des paramètres. Maintenant, nous créons le code du slave qui redirige la routine de chargement vers le slave. Ce dernier ajuste alors les paramètres et appelle la fonction resload_DiskLoad.
3.Dans le cas idéal, l'install est alors terminé.
Une dernière chose à faire est de créer une icône sympa. Récupérer 2 images en utilisant snoop dans WHDLoad et SP ou un moniteur système ou U.A.E. et créer l'icône. La palette à 16 couleurs RomIcon est recommandée.

Problèmes possibles et cas spéciaux

Chargeur de pistes non standard
Certains programmes utilisent leur propre format de piste. Cela signifie que DIC est incapable de créer les images disque. Pour créer les fichiers ou les images à partir de tels disques, l'utilisation de RawDIC est recommandée. Consultez la documentation de RawDIC pour plus d'informations.
Plusieurs disques
Si le programme utilise plus d'un disque, le slave doit rediriger les accès disque vers l'image appropriée. Parfois cela n'est pas facile. Certains programmes utilisent plus d'un lecteur, donc vous pouvez utiliser le numéro du lecteur pour sélectionner le disque. La plupart des programmes utilisent un identificateur sur chaque disque pour les distinguer. Dans ce cas, utilisez une variable qui contient le numéro du disque, et à chaque accès à l'identificateur du disque (trouver un tel accès en analysant les paramètres du chargeur), augmenter la variable (si le dernier disque est atteint, la remettre à 0). Avec un peu de chance, le chargeur relit l'identificateur encore et encore jusqu'à ce que le bon disque soit inséré. Parfois une requête du programme demandant d'insérer le bon disque apparaît. Désactivez-là.
Sauvegarde des meilleurs scores
Pas grand chose à dire ici. Utiliser resload_SaveFile pour écrire la zone de mémoire appropriée sur le disque. Vous pouvez aussi crypter le fichier pour éviter que des gros nazes le modifient trop facilement. Il est déconseillé d'écrire directement sur les images disque en utilisant resload_SaveFileOffset), en effet, si quelque chose se passe mal (par exemple plantage), il est possible que les images soient corrompues.
Sauvegarde des parties
Même chose que pour les hiscores.
Accès au système d'exploitation
Quand le slave et le programme installé sont exécutés, aucune fonction du système n'est disponible! Cependant, il faut désactiver toutes les tentatives d'accès par le programme installé. S'il n'y en a pas beaucoup, et s'ils n'ont pas beaucoup d'intérêt dans l'environnement WHDLoad (comme exec.Disable() ou exec.SuperState()), les convertir en NOP ($4e71). Si l'accès est une fonction importante (comme exec.DoIO()), redirigez les vers le slave et émulez les. S'il y en a beaucoup, créez une simple bibliothèque exec dans une zone inutilisée (initialisez le mot long à l'adresse $4). Vous pouvez jeter un oeil à la source du slave d'Oscar, qui émule exec.AllocMem(). Pour détecter les accès au système d'exploitation, execbase est mis initialement à $f0000001 afin que toutes les routines qui essayent d'utiliser execbase créeront une exception "Address Error".
Si un usage intensif des fonctions de l'OS il y a, utilisez un des paquetages kickemu qui se trouvent dans l'archive whdload développement. Il existe un paquetage pour le Kick 1.3 ('src/sources/whdload/kick13.s') et un pour le Kick 3.1 ('src/sources/whdload/kick31.s'). Ces paquetages nécessitent une image kickstart et créént un environnement système complet à l'intérieur de l'espace WHDLoad. Consulter également le fichier readme fourni pour de plus amples informations.
Problèmes de compatibilité courants

Espace d'adressage limité sur 68000/68010/68ec020
Sur ces processeurs, l'espace d'adressage est limité à 16 méga-octets ($000000...$ffffff) parce que le CPU possède uniquement 24 lignes d'adresse. Aussi, les accès à des adresses supérieures sont en fait effectuées sur les 16MB de base, et les 8 bits de poids fort sont ignorés comme s'ils étaient à zéro. Certains programmes utilisent ces octets pour stocker des données, ou oublient simplement de les mettre à zéro. Sur un processeur à espace d'adressage 32 bits (4 giga-octets) comme les 68020/68ec030/68030/68040/68060, ces programmes ne fonctionneront pas, car l'adresse complète 32 bit sera utilisée.
Pour résoudre ce problème, vous devez patcher ces accès et les rediriger vers l'adresse appropriée.
Parfois la raison de ces accès à de telle adresse est un pointer non-initialisé. Dans ce cas, il serait utile d'effacer le contenu de la mémoire de $400 à ws_BaseMemSize.
Structures de pile différentes selon le processeur
Les structures de pile créées par le processeurs lors d'interruptions ou d'exceptions sont différentes entre les membres de la famille des 680x0. Sur le 68000, la structure de la pile comporte 6 octets, sauf en cas d'erreurs d'adressage et d'erreurs de bus. La structure de pile contient le SR dans (a7) et le PC dans (2,a7). Sur tous les autres processeurs (68010+), la taille minimale de structure de pile est 8 octets et contient le numéro du vecteur d'interruption/exception dans (6,a7). Cette structure de pile est créée pour "Trap #xx" et les interruptions sur 68010-68060. Les structures de pile sur d'autres exceptions sont différentes sur chaque processeur. L'instruction RTE fonctionne différemment entre le 68000 et les 68010+. Sur un 68000, il restaure simplement le SR et le PC et continue l'exécution du programme à l'addresse où il avait été interrompu. Sur les processeurs 68010+, il libère en plus le reste de la structure de pile selon le format de celle-ci.
Certains programmes empilent une adresse (PC) et un SR et exécutent un RTE. Cela fonctionne uniquement sur 68000. Sur un 68010+ le résultat est indéfini.
Si un programme fait cette opération, vous devez réparer ça. Parfois, il suffit de remplacer le RTE par un RTR.
MOVEM.x RL,-(An) sur 68000/010 et 68020/030/040
Il existe une différence si le registre utilisé dans le mode prédécrémentation est aussi dans la liste des registres. Pour le 68020, 68030 et le 68040, la valeur écrite en mémoire est la valeur initiale du registre décrémentée de la taille de l'opération. Le 68000 et le 68010 écrivent la valeur initiale du registre (non décrémentée).
Une telle construction étant peu utile, aucun logiciel n'est connu pour avoir des problèmes à cause de cela.
Conseils généraux pour écrire des installs
• Ne pas modifier les registres CPU des processeurs plus récents comme le VBR ou le CACR. Le VBR est toujours à 0 du point de vue du programmeur du slave, même s'il est déplacé en raison de l'émulation des auto vecteurs (et des traps si le flag WHDL_EmulTrap est mis). Les bits dans le CACR sont différents pour chaque processeur. Il y a une seule façon correcte de modifier les caches, c'est en utilisant resload_SetCACR/SetCPU et les bitdefs de 'exec/execbase.i' et 'whdload.i'. Il faut également désactiver ou sauter tout ce qui concerne ces registres dans le programme installé.
• Ne jamais modifier les images disque. Cela présente l'avantage de permettre de créer des disquettes avec les images et de démarrer le jeu à partir des disquettes (à condition que le programme fonctionne sans corrections, ce qui est loin d'être le cas le plus probable).
• Ne jamais inclure de données/fichiers originaux du programme directement dans le slave (problème de copyright).
• Activer les caches uniquement si vous êtes sûr que le programme tourne sur tous les processeurs.
• Utiliser le moins de mémoire de base possible (ws_BaseMemSize). Certains utilisateurs ont des tags résidents à la fin de la mémoire Chip, aussi il est intéressant d'utiliser uniquement $1f0000 au lieu de $200000 et WHDLoad peut utiliser de la mémoire allouée en absolu.

Trucs et astuces

Quel est la meilleure solution: fichiers images disque ou fichiers ?
Parfois vous devez choisir entre fichiers images disque ou vrais fichiers. Les deux ont leurs avantages. L'utilisation des images disque est souvent la façon la plus facile et rapide de créér le slave. Mais les vrais fichiers sont plus facilement cachés (s'il y a peu de mémoire ou que celle-ci est fragmentée). L'espace requis sur le disque dur est également moindre avec des vrais fichiers qu'avec des images disque. Utilisez les images disque que s'il y a beaucoup de fichiers (plus de 30).

Amiga Infos WHDLoad Resload API ( AutoDocs )

TABLE OF CONTENTS

WHDLoad/--Overview--
WHDLoad/resload_Abort
WHDLoad/resload_Control
WHDLoad/WHDLTAG_CBAF_SET
WHDLoad/WHDLTAG_CBSWITCH_SET
WHDLoad/WHDLTAG_IOERR_GET
WHDLoad/resload_CRC16
WHDLoad/resload_Decrunch
WHDLoad/resload_Delay
WHDLoad/resload_Delta
WHDLoad/resload_DeleteFile
WHDLoad/resload_DiskLoad
WHDLoad/resload_DiskLoadDev
WHDLoad/resload_Examine
WHDLoad/resload_ExNext
WHDLoad/resload_FlushCache
WHDLoad/resload_GetCustom
WHDLoad/resload_GetFileSize
WHDLoad/resload_GetFileSizeDec
WHDLoad/resload_ListFiles
WHDLoad/resload_LoadFile
WHDLoad/resload_LoadFileDecrunch
WHDLoad/resload_LoadFileOffset
WHDLoad/resload_LoadKick
WHDLoad/resload_Patch
WHDLoad/resload_PatchSeg
WHDLoad/resload_ProtectRead
WHDLoad/resload_ProtectReadWrite
WHDLoad/resload_ProtectRemove
WHDLoad/resload_ProtectSMC
WHDLoad/resload_ProtectWrite
WHDLoad/resload_Relocate
WHDLoad/resload_SaveFile
WHDLoad/resload_SaveFileOffset
WHDLoad/resload_SetCACR
WHDLoad/resload_SetCPU
WHDLoad.Slave/--Overview--

--------------------------------------------------------------------------------
WHDLoad/--Overview--

The calling conventions for all functions are similar to the OS-Library
concept. Parameters are provided in registers (except for "resload_Abort"),
return codes come in D0 (on some functions also in D1). After a function call
the registers D0-D1/A0-A1 are destroyed (D0,D1 may contain a return code).
They are called scratch registers. All other registers are preserved. The base
of the JMP tower in WHDLoad is similar to a Library-Base. In difference to the
OS the base must not be loaded in A6 on calling a function, but it is
recommended to call all functions relative to a address register like:

move.l (_resload,pc),a5
jsr (resload_Decrunch,a5)

During the execution of resload functions interrupts are normally allowed. For
some internal operations they will be disabled for a short time. If the option
NoResInt/S is used the interrupts are disabled the whole time.

The resload functions will not use the registers A5 and A6 while interrupts are
allowed. Therefore interrupts of the installed program may assume that these
both registers contain previously set values. This is not true for all other
registers. If the interrupts assume constants in other registers (e.g. A4)
either the interrupt code must be patched accordingly or the interrupts must be
disabled before calling resload functions.

If option NoResInt/S is used all registers except D0/D1/A0/A1 remain unchanged
for interrupt code (but this option is for testing purposes only!).

The resload base is over given in A0 on calling the Slave first via
ws_GameLoader (see chapter WHDLoad.Slave/--Overview--).

All file names used with resload functions must be relative and must not
access any higher-level directories. That means file names must not start or
end with a slash ("/"), must not contain multiple slashes ("//") and must not
contain a colon (":"). These restrictions are enforced starting WHDLoad v16.9.
Earlier versions of WHDLoad will accept all names at the loss of being able to
preload them.

some keywords used in this document:

Slave file which contains the interface code
(see section WHDLoad.Slave/--Overview--)

BaseMem the memory which is used by the installed program, because
this memory is always Chip-memory and starts at address
$00000000, BaseMem is at the same time the size and the end
address of the used Chip-memory; BaseMem is specified in the
Slave-structure in field "ws_BaseMemSize"

ExpMem is the expansions memory, a extra memory area which can
optionally requested by the Slave-structure, it may be
Chip- or Fast-memory dependently on what is available
ExpMem is supported starting WHDLoad version 8

Disk Image a floppy disk stored as a file on hard disk

logical values used for return codes (see dos/dos.i):
TRUE = -1 (or better <>0)
FALSE = 0

--------------------------------------------------------------------------------
WHDLoad/resload_Abort

NAME
resload_Abort -- quit and return to operating system

SYNOPSIS
resload_Abort( success, primary, secondary)
(a7) (4,a7) (8,a7)
ULONG ULONG ULONG

FUNCTION
This aborts and terminates the installed program and cause WHDLoad to
return to the operating system.

INPUTS
success - the reason for aborting
one of TDREASON_#? defined in the include file "whdload.i"
depending on this value WHDLoad continues different
TDREASON_OK
a normal exit will performed
TDREASON_DEBUG
WHDLoad will create dump files (.whdl_dump, .whdl_memory,
.whdl_register) and exit
TDREASON_#? (except the above)
WHDLoad will show an requester which displays the reason
of aborting and requests the user to choose between
"Quit", "Restart" and "Make CoreDump"
primary - the primary return code further describing the reason of
aborting
TDREASON_DELETEFILE, TDREASON_DISKLOAD, TDREASON_DISKLOADDEV,
TDREASON_DOSLIST, TDREASON_DOSREAD, TDREASON_DOSWRITE
dos or trackdisk error code
TDREASON_DEBUG
program counter (so it can by written to the dump files)
TDREASON_OSEMUFAIL
name of the filed subsystem
TDREASON_FAILMSG
message to display
TDREASON_MUSTNTSC, TDREASON_MUSTPAL, TDREASON_MUSTREG,
TDREASON_OK, TDREASON_REQ68020, TDREASON_REQAGA,
TDREASON_WRONGVER
unused (can be omitted)
secondary - the secondary return code further describing the reason of
aborting
TDREASON_DELETEFILE, TDREASON_DOSREAD, TDREASON_DOSWRITE
filename
TDREASON_DISKLOAD
disk number
TDREASON_DOSLIST
name of directory scanned
TDREASON_DEBUG
status register (so it can by written to the dump files)
TDREASON_OSEMUFAIL
error number, depending on the primary return code
TDREASON_DISKLOADDEV, TDREASON_FAILMSG, TDREASON_MUSTNTSC,
TDREASON_MUSTPAL, TDREASON_MUSTREG, TDREASON_OK,
TDREASON_REQ68020, TDREASON_REQAGA, TDREASON_WRONGVER
unused (can be omitted)

EXAMPLE
to simply quit:
...
; primary and secondary are not needed with TDREASON_OK
move.l #TDREASON_OK,-(a7)
move.l (_resload,pc),a0
jmp (resload_Abort,a0)

to quit because reading of a file has failed:
...
move.l a0,-(a7) ;a0 = filename
move.l d0,-(a7) ;d0 = DOS error code
move.l #TDREASON_DOSREAD,-(a7)
move.l (_resload,pc),-(a7)
add.l #resload_Abort,(a7)
rts

RESULT
nothing because WHDLoad will never return from this call

BUGS

NOTE
This routine is the only one which must be called via JMP and not JSR
because the parameters are located on the stack (that has the
advantage that when aborting with TDREASON_DEBUG all registers can be
preserved and written to the dump files by WHDLoad for later
diagnostics)

SEE ALSO
example Slave sources provided with the WHDLoad developer package

--------------------------------------------------------------------------------
WHDLoad/resload_Control

NAME
resload_Control

SYNOPSIS
success = resload_Control(tags)
D0 A0
BOOL STRUCT

FUNCTION
control function of WHDLoad, allows to get and set various variables
concerning the software and hardware configuration and to control the
behavior of some WHDLoad operations

INPUTS
tags - pointer to a table of tag items

the following items are currently supported:

WHDLTAG_ATTNFLAGS_GET - gets the AttnFlags describing the current
CPU, FPU and MMU, the returned value is
similar to execbase.AttnFlags but not equal
because WHDLoad uses some additional bits,
the Slave is only allowed to the use the
defines from the standard include file
"exec/execbase.i" for testing
WHDLTAG_BUILD_GET - gets WHDLoad build number
WHDLTAG_BUTTONWAIT_GET - returns -1 if WHDLoad option ButtonWait/S
has been enabled, otherwise returns 0
WHDLTAG_CBAF_SET - sets a function which will be executed when
an access fault exception occurs (see
section WHDLoad/WHDLTAG_CBAF_SET for further
informations)
WHDLTAG_CBSWITCH_SET - sets a function which will be executed when
WHDLoad switches from the operating system
to the installed program (see section
WHDLoad/WHDLTAG_CBSWITCH_SET for further
informations)
WHDLTAG_CHKBLTHOG - enables the 'dmacon.blthog' check, requires
a active Snoop option and WHDLoad v13
WHDLTAG_CHKBLTSIZE - enables the 'blitter size' check, requires a
active Snoop option and WHDLoad v13
WHDLTAG_CHKBLTWAIT - enables the 'blitter wait' check, requires a
active Snoop option and WHDLoad v13
WHDLTAG_CHKCOLBST - enables the 'bplcon0.color' check, requires
a active Snoop option and WHDLoad v13
WHDLTAG_CHKCOPCON - enables the 'copcon' check, requires
a active Snoop option and WHDLoad v15.2
WHDLTAG_CHIPREVBITS_GET - gets the ChipRevBits describing the current
custom chips, see standard include file
"graphics/gfxbase.i" for further infos
WHDLTAG_CUSTOM1_GET
WHDLTAG_CUSTOM2_GET
WHDLTAG_CUSTOM3_GET
WHDLTAG_CUSTOM4_GET
WHDLTAG_CUSTOM5_GET - returns numerical value of WHDLoad option
Custom1/N .. Custom5/N
WHDLTAG_DBGADR_SET - sets a base address for debugging, this is
only used for error messages by WHDLoad, on
error it will additionally output the offset
of the faulted address to this base, useful
if you have program code somewhere (e.g. in
ExpMem) and like to know at which offset in
the program it has happen (without
calculating it manually)
requires WHDLoad v14.5
WHDLTAG_DBGSEG_SET - the same as WHDLTAG_DBGADR_SET but instead
a memory address a BCPL pointer to a
dos.library Segment is given, on error
WHDLoad will display the offset in the
relocated executable, like you would see
it in a dis/reassembler
requires WHDLoad v15.0
WHDLTAG_ECLOCKFREQ_GET - gets the EClockFrequency, which is the
frequency the custom chips operate on, the
value is taken from the execbase (see
standard include file "exec/execbase.i")
WHDLTAG_LANG_GET - get language provided by lowlevel.library,
see libraries/lowlevel.i for further infos,
requires WHDLoad v13.2
WHDLTAG_IOERR_GET - gets the dos error code of a previously
called resload function
WHDLTAG_KEYTRANS_GET - get pointer to a table for 'rawkey to ascii'
conversion, the table has a length of 512
bytes and contains 4 sub tables, first 128
bytes representing the keys pressed without
any modifier, then 128 bytes with Shift,
then 128 bytes with Alt and last 128 Bytes
with Shift and Alt
the tables are created from the actual
system keymap, dead keys are mapped like
pressing Space afterwards, keys resulting in
multibyte characters (F-Keys, Esc, ...) are
set to 0 in the tables
WHDLTAG_MONITOR_GET - gets the used monitor/video mode, the
returned value is one of NTSC_MONITOR_ID and
PAL_MONITOR_ID (defined in the standard
include file "graphics/modeid.i"), the
WHDLoad options PAL/S and NTSC/S are
affecting the monitor/video mode
WHDLTAG_REVISION_GET - gets WHDLoad minor version number
WHDLTAG_TIME_GET - gets current time and date, returned will be
a pointer to a filled whdload_time structure
which is described in the include file
"whdload.i"
WHDLTAG_VERSION_GET - gets WHDLoad major version number

EXAMPLE
check if current CPU is at least an MC68020:
...
clr.l -(a7) ;TAG_DONE
clr.l -(a7) ;data to fill
move.l #WHDLTAG_ATTNFLAGS_GET,-(a7)
move.l a7,a0
move.l (_resload,pc),a2
jsr (resload_Control,a2)
move.w (6,a7),d0 ;D0 = AttnFlags
lea (12,a7),a7 ;restore sp
btst #AFB_68020,d0
beq .no68020
...
get video mode and CPU:
...
lea (_tags,pc),a0
move.l (_resload,pc),a2
jsr (resload_Control,a2)
move.l (_mon,pc),d0 ;D0 = video mode
cmp.l #NTSC_MONITOR_ID,d0
beq .ntsc
...

_tags dc.l WHDLTAG_MONITOR_GET
_mon dc.l 0
dc.l WHDLTAG_ATTNFLAGS_GET
dc.w 0 ;padding
_attn dc.w 0
dc.l 0 ;TAG_DONE

RESULT
success is true if all items in the taglist has been successfully
processed

BUGS

NOTE
requires ws_Version >= 5

SEE ALSO

--------------------------------------------------------------------------------
WHDLoad/WHDLTAG_CBAF_SET

NAME
WHDLTAG_CBAF_SET

SYNOPSIS
to be used with resload_Control

cont, adr, data = CBAF(mode, size, pc, adr, data/regs)
D0 A1 A2 D0 D1 A0 A1 A2
LONG APTR APTR LONG LONG APTR APTR APTR

FUNCTION
Using this tag a function can be set which will executed when an
access fault exception occurs which is not handled by WHDLoad itself.
It may be used to locate specific accesses in conjunction with
resload_Protect and to walk around invalid accesses during the
development process.
on the 68030 all access faults can be caught except:
- instruction stream faults
- faults caused by WHDLoad's blitwait and blitsize checks
on the 68040/60 only these access faults can be caught:
- faults caused by resload_Protect
The routine being set must not change any registers except the ones
holding a return value. The routine must return via RTS. On entering
the routine all interrupts are disabled (sr=$27xx).

INPUTS
mode - transfer mode of the faulted access
0 - read
1 - modify (only 68060)
2 - write
size - operand size of the attempted access
1 - Byte
2 - Word
4 - LongWord
pc - program counter of the instruction which has faulted
(warning: on the 68040/60 this sometimes points the instruction
after the one which has faulted, read the appropriate
microprocessor user manual for further informations)
adr - the address which has been attempted to access
data - on the 68030 valid only on write operations, the given memory
address contains the data which has been tried to write
on the 68040/60 it contains a pointer to memory where the
registers D0-A6 are stored

RESULT
cont - how to continue
0 - terminate, WHDLoad will show a requester notifying the
access fault
1 - proceed, the faulted access will be emulated by the
handler inside WHDLoad
adr - only on 68030: in case of cont=proceed the address which will be
accessed
data - only on 68030: in case of cont=proceed and mode=write a pointer
to the data which will be written

EXAMPLE
If you want to get informed at which point the installed program
writes the value 42 to the address $BABE use the following code:
...
clr.l -(a7) ;TAG_DONE
pea (_af,pc) ;function
move.l #WHDLTAG_CBAF_SET,-(a7)
move.l a7,a0
move.l (_resload,pc),a2
jsr (resload_Control,a2)
lea (12,a7),a7 ;restore sp
moveq #2,d0
lea ($BABE),a0
jsr (resload_ProtectWrite,a2) ;protect area
...

_af cmp.l #$BABE,a1 ;correct address ?
bne .term
cmp.w #2,d1 ;size
bne .term
cmp.w #42,(a2) ;a2 is only valid on
;68030!
beq .term
moveq #1,d0 ;proceed
rts

.term moveq #0,d0 ;terminate
rts

EXAMPLE
If want you to redirect an access to $24 to the address $300, use the
following code (works only on 68030!):
...
clr.l -(a7) ;TAG_DONE
pea (_af,pc) ;function
move.l #WHDLTAG_CBAF_SET,-(a7)
move.l a7,a0
move.l (_resload,pc),a2
jsr (resload_Control,a2)
lea (12,a7),a7 ;restore sp
moveq #4,d0
lea ($24),a0
jsr (resload_ProtectWrite,a2) ;protect area
...

_af cmp.l #$24,a1 ;correct address ?
bne .term
lea ($300),a1
moveq #1,d0 ;proceed
rts

.term moveq #0,d0 ;terminate
rts

BUGS
fully supported is only the 68030, limited support for 68040/60

NOTE
requires ws_Version >= 9
on the 68040 it's supported starting WHDLoad 17.0
on the 68060 it's supported starting WHDLoad 16.1
the parameter a2=regs on the 68060 is supported since WHDLoad 16.4
MUST not be used in public releases, use it during development process
only

SEE ALSO
resload_Control

--------------------------------------------------------------------------------
WHDLoad/WHDLTAG_CBSWITCH_SET

NAME
WHDLTAG_CBSWITCH_SET

SYNOPSIS
to be used with resload_Control

CBSWITCH()

FUNCTION
Using this tag a routine can be set which will executed each time
WHDLoad switches from the operating system to the installed program.
Such a routine is sometimes necessary because during the switch
between the installed program and the operating system some hardware
registers are modified by the operating system.
Known registers getting modified are cop2lc, bltafwm and bltalwm (maybe
there are more of them).
The routine must not change any registers, must not use any stack and
has to return via "jmp (a0)". At execution time of the routine all
interrupts and DMAs are disabled and the memory setup of the installed
program is active.

INPUTS
pointer to the routine to execute during switch, a value equal 0
disables the execution of a routine

EXAMPLE
...
clr.l -(a7) ;TAG_DONE
pea (_cbswitch,pc) ;function
move.l #WHDLTAG_CBSWITCH_SET,-(a7)
move.l a7,a0
move.l (_resload,pc),a2
jsr (resload_Control,a2)
lea (12,a7),a7 ;restore sp
...

_cbswitch move.l (_c2,pc),(_custom+cop2lc)
jmp (a0)

_cb2 dc.l $10e80

RESULT
none

BUGS

NOTE
requires ws_Version >= 7

SEE ALSO
resload_Control

--------------------------------------------------------------------------------
WHDLoad/WHDLTAG_IOERR_GET

NAME
WHDLTAG_IOERR_GET

SYNOPSIS
to be used with resload_Control

FUNCTION
This tag can be used to get the DOS error code of the last called
resload function. All resload functions except resload_Control will
set/reset this error code.
Two resload functions are special in that way:
resload_GetFileSize
If a file with the specified name cannot be opened via
dos.Open, the error code will be set to the value returned
from dos.IoErr. So the error code may contain values like
ERROR_OBJECT_NOT_FOUND, ERROR_OBJECT_WRONG_TYPE,
ERROR_READ_PROTECTED or similar (see NDK include file
dos/dos.i). The error code can be used to distinguish between
a file with the size of 0 and a nonexistent file.
resload_ListFiles
If the specified buffer to fill is not large enough to hold
all file names from the scanned directory, the error code will
be set to ERROR_NO_FREE_STORE.

INPUTS
none

EXAMPLE
...
clr.l -(a7) ;TAG_DONE
clr.l -(a7) ;data to fill
move.l #WHDLTAG_IOERR_GET,-(a7)
move.l a7,a0
move.l (_resload,pc),a2
jsr (resload_Control,a2)
move.l (4,a7),d0 ;D0 = IoErr
lea (12,a7),a7 ;restore sp
...

RESULT
none

BUGS

NOTE
requires ws_Version >= 8

SEE ALSO
resload_Control, resload_GetFileSize, resload_ListFiles

--------------------------------------------------------------------------------
WHDLoad/resload_CRC16

NAME
resload_CRC16 -- calculate ANSI conform 16 bit CRC checksum

SYNOPSIS
checksum = resload_CRC16(length,address)
D0 D0 A0
UWORD ULONG APTR

FUNCTION
calculate ANSI conform 16 bit CRC checksum
mostly used to difference between various program/data versions

INPUTS
length - length of area to calculate over
address - pointer to area

EXAMPLE
...
lea $1000,a0 ;at address $1000
move.l #256,d0 ;up to address $1100
move.l (_resload,pc),a2
jsr (resload_CRC16,a2)
cmp.w #$f2b7,d0
bne .false_version
...

RESULT
checksum - 16 bit CRC

BUGS

NOTE
requires ws_Version >= 3

SEE ALSO

--------------------------------------------------------------------------------
WHDLoad/resload_Decrunch

NAME
resload_Decrunch -- uncompress data in memory

SYNOPSIS
size = resload_Decrunch(source, destination)
D0 A0 A1
ULONG APTR APTR

FUNCTION
This unpacks compressed data in memory. Known compressed data formats
are RNC1, RNC2, IMP!, ATN!, TPWM and Cr[Mm][!2].
If the data source doesn't point to a known compressed format size=0
will be returned. Else the data will be unpacked to the destination
and the size of the decompressed data is returned.
Source and destination can be equal. In that case the packed data will
be overwritten.

RNC1: Rob Northen compressor - emphasis on packed size
Supported is the old and the new format. Both formats using the
same id but different file formats and compressing algorithms.
The function uses some heuristic checks to determine the
correct format. The decompressor for the new common format is
highly optimized and contains a separate routine for 68000/10
and one for 68020+. On 68060 it's faster than the Imploder
decompressor.
RNC2: Rob Northen compressor - emphasis on unpacking speed
It's the fastest supported decompressor.
IMP!: Imploder (FImp)
The packed data data must not overlap the destination. The
destination must be either equal the source or outside the
source data. In difference to the original explode routine
resload_Decrunch does not destroy the source data (if source
is not equal destination).
ATN!: identical to IMP! only id is different
TPWM: Turbo Packer Wolfgang Mayerle
Supported starting WHDLoad v11. Because the file header does
not contain the length of the packed data there is no
integrity check performed.
Cr[Mm][!2]: Crunch-Mania by Thomas Schwarz
Supported starting WHDLoad v17. The packed source data must be
located on a word aligned address for 68000/10 compatibility!

All decompression routines have been modified to not modify the
registers A5 and A6 and to use nearly no stack space.
All decompression routines are performing a check if the decompression
was successful. On a failure the installed program will be terminated
and WHDLoad will display a message telling this.

INPUTS
source - address of source in memory
destination - address of destination in memory (can be equal to source)

EXAMPLE

RESULT
size - the size of the uncompressed data or 0 if is not compressed
with a known format

BUGS

NOTE
the routine performs automatically a resload_FlushCache before
returning

SEE ALSO
resload_LoadFileDecrunch

--------------------------------------------------------------------------------
WHDLoad/resload_Delay

NAME
resload_Delay -- wait some time or user action

SYNOPSIS
resload_Delay(time)
D0
ULONG

FUNCTION
Wait the specified time or until a button/key is pressed. All possible
buttons (LMB, MMB, RMB) of both controllers (port 0/1) and the keyboard
is checked. After the time runs out or something has been pressed the
function waits until the pressed controller button has been released.
But it does not wait for a keyboard key up.
The wait routine is based on the raster beam. But checks the current
display and therefore waits the correct time on PAL and NTSC displays.

INPUTS
time - time to wait in 1/10 seconds

EXAMPLE
...
moveq #30,d0 ;3 seconds
move.l (_resload,pc),a2
jsr (resload_Delay,a2)
...

RESULT
nothing, all registers are preserved

BUGS

NOTE
in difference to most others resload_#? function this routine is
granted to preserve all registers
requires ws_Version >= 8

SEE ALSO

--------------------------------------------------------------------------------
WHDLoad/resload_DeleteFile

NAME
resload_Delete -- delete file/directory

SYNOPSIS
success,errorcode = resload_DeleteFile(name)
D0 D1 A0
BOOL ULONG CPTR

FUNCTION
This deletes the file or directory with the specified name.
A directory must be empty for deletion.
If there are multiple data directories used the object to delete
must be located in the first data directory. Otherwise deleting
will fail with a DOS error code ERROR_OBJECT_NOT_FOUND.

INPUTS
name - name of the file/directory to delete

EXAMPLE
...
lea (_name,pc),a0
move.l (_resload,pc),a2
jsr (resload_DeleteFile,a2)
...

_name dc.b "C/WHDLoad",0

RESULT
success - TRUE on success
errorcode - 0 on success
otherwise a DOS error code from dos.IoErr()
if WHDLF_NoError is set, the function only returns on success

BUGS

NOTE
requires ws_Version >= 8

SEE ALSO

--------------------------------------------------------------------------------
WHDLoad/resload_Delta

NAME
resload_Delta -- apply WDelta file

SYNOPSIS
resload_Delta(src, dest, delta)
A0 A1 A2
APTR APTR APTR

FUNCTION
Applies the differences provided via the delta data onto the source
data and creates the destination data.
WDelta is a tool to calculate a binary differences file from two data
files (like scompare/spatch). It can be found on aminet
(http://main.aminet.net/util/cli/WDelta.lha).
This function can be used to support different versions of data or
program files by converting them into one single version.

INPUTS
src - source data
dest - destination memory
delta - wdelta data

EXAMPLE
...
lea ($10000),a0 ;source
lea ($400),a1 ;destination
lea ($40000),a2 ;wdelta
move.l (_resload,pc),a3
jsr (resload_Delta,a3)
...

RESULT

BUGS

NOTE
The source and the destination will be CRC checked.
If an error occurs WHDLoad will quit with an appropriate requester.
requires ws_Version >= 11

SEE ALSO

--------------------------------------------------------------------------------
WHDLoad/resload_DiskLoad

NAME
resload_DiskLoad -- load part from a disk image

SYNOPSIS
success,errorcode = resload_DiskLoad(offset,size,diskno,dest)
D0 D1 D0 D1 D2 A0
BOOL ULONG ULONG ULONG UBYTE APTR

FUNCTION
Loads part from a disk image as specified by the parameters.
The name of the disk images is expected as 'disk.' followed by the
number of the disk (e.g. 'Disk.1').
The size of the disk images is variable. An attempt to read data
outside of the disk image will result in a DOS error
ERROR_SEEK_ERROR.

INPUTS
offset - offset in disk image (relative to the beginning)
size - amount of bytes to read
diskno - disk number
dest - destination address

EXAMPLE
...
move.l #880*512,d0 ;from block 880
move.l #2*512,d1 ;2 blocks
moveq #1,d2 ;disk 1
lea $80000,a0 ;destination
move.l (_resload,pc),a2
jsr (resload_LoadDisk,a2)
...

RESULT
success - TRUE on success
errorcode - 0 on success
otherwise a DOS error code from dos.IoErr()
if WHDLF_NoError is set, the function only returns on success

BUGS

NOTE
The routine performs automatically a resload_FlushCache before
returning.
Starting WHDLoad version 17.1: if bit #31 of the diskno is set and
options FileLog/S and Expert/S are enabled each loaded file part is
saved to the data directory using a generated file name like "D<disk
number> <start offset on disk> <end offset on disk> <destination
address>".

SEE ALSO
resload_LoadFileOffset

--------------------------------------------------------------------------------
WHDLoad/resload_DiskLoadDev

NAME
resload_DiskLoadDev -- load part from a floppy disk

SYNOPSIS
success,errorcode = resload_DiskLoadDev(offset, size, dest, tags)
D0 D1 D0 D1 A0 A1
BOOL ULONG ULONG ULONG UBYTE STRUCT

FUNCTION
Loads a given amount of data from a floppy device.

INPUTS
offset - offset on the disk (must be a multiple of 512 bytes)
size - amount of bytes to read (must be a multiple of 512 bytes)
dest - destination address (must be aligned to 512 bytes)
tags - pointer to a taglist, starting WHDLoad version 16.0
there is one supported tag WHDLTAG_TDUNIT which
specifies the trackdisk.device unit to read from, default
is unit 0 (DF0:)

EXAMPLE
...
move.l #880*512,d0 ;from block 880
move.l #2*512,d1 ;2 blocks
lea $80000,a0 ;destination
sub.l a1,a1 ;tag list
move.l (_resload,pc),a2
jsr (resload_LoadDisk,a2)
...

RESULT
success - TRUE on success
errorcode - 0 on success
otherwise a trackdisk error code
if WHDLF_NoError is set, the function only returns on success

BUGS

NOTE
requires ws_Version >= 2
At the moment all parameters (offset, size, address) must be aligned
to 512 bytes due restrictions of trackdisk.device.
The routine performs automatically a resload_FlushCache before
returning.

SEE ALSO

--------------------------------------------------------------------------------
WHDLoad/resload_Examine

NAME
resload_Examine -- get informations about a file or directory

SYNOPSIS
success,errorcode = resload_Examine(name, FileInfoBlock)
D0 D1 A0 A1
BOOL ULONG CPTR APTR

FUNCTION
Fills the supplied FileInfoBlock with informations about the
specified file or directory. See NDK include file dos/dos.i for the
structure of the FileInfoBlock.

INPUTS
name - name of the object to get info about
fib - store pool of 260 bytes for the infos

EXAMPLE
...
lea (_filename,pc),a0
sub.l #fib_SIZEOF,a7
move.l a7,a1
move.l (_resload,pc),a2
jsr (resload_Examine,a2)
...
add.l #fib_SIZEOF,a7
...

RESULT
success - is true (-1) on success and false (0) on failure
errorcode - contains DOS error code (e.g. ERROR_OBJECT_NOT_FOUND)

BUGS
Relative path names (starting/ending with '/' or containing '//') are
not supported. The name must also not contain a ':'.
The fib_Size will be incorrect if the file is more than two times
compressed using XPK or compressed using XPK and afterwards encrypted
using XPK.

NOTE
requires ws_Version >= 15

SEE ALSO
resload_GetFileSize, resload_GetFileSizeDec, resload_ExNext

--------------------------------------------------------------------------------
WHDLoad/resload_ExNext

NAME
resload_ExNext -- get informations about next directory entry

SYNOPSIS
success,errorcode = resload_Examine(FileInfoBlock)
D0 D1 A0
BOOL ULONG APTR

FUNCTION
Fills the supplied FileInfoBlock with informations about the next
directory entry. The FileInfoBlock must be previously initialized by
a call to resload_Examine.

INPUTS
fib - store pool of 260 bytes for the infos

EXAMPLE
...
lea (_dirname,pc),a0
sub.l #fib_SIZEOF,a7
move.l a7,a1
move.l (_resload,pc),a2
jsr (resload_Examine,a2)
tst.l d0
beq .end
.next move.l a7,a0
jsr (resload_ExNext,a2)
tst.l d0
beq .end
...
bra .next
.end add.l #fib_SIZEOF,a7
...

RESULT
success - is true (-1) on success and false (0) on failure
errorcode - if there are no more entries left it contains
ERROR_NO_MORE_ENTRIES

BUGS
The fib_Size will be incorrect if the file is more than two times
compressed using XPK or compressed using XPK and afterwards encrypted
using XPK.

NOTE
requires ws_Version >= 15

SEE ALSO
resload_Examine

--------------------------------------------------------------------------------
WHDLoad/resload_FlushCache

NAME
resload_FlushCache -- clear CPU caches

SYNOPSIS
resload_FlushCache()

FUNCTION
clears all CPU caches

INPUTS

EXAMPLE

RESULT

BUGS

NOTE
In difference to most other resload_#? functions this routine is
granted to preserve all registers.
It's safe to call this routine from User and Supervisor mode and
independent of the actual CPU type (also on 68000/010).
It uses the CACR on 68020/30 and a "cpusha bc" on 68040/60.

SEE ALSO
resload_SetCPU

--------------------------------------------------------------------------------
WHDLoad/resload_GetCustom

NAME
resload_GetCustom -- get Custom argument

SYNOPSIS
success = resload_GetCustom(buflen, reserved, buffer)
D0 D0 D1 A0
ULONG ULONG ULONG CPTR

FUNCTION
Get the string which has been specified via the Custom/S option.
The buffer is filled as far as possible. If buffer was not large
enough false will be returned.

INPUTS
buflen - size of buffer
reserved - currently not used, must be set to 0
buffer - memory area to fill

EXAMPLE
...
move.l #$100,d0
moveq #0,d1
lea ($1000),a0
move.l (_resload,pc),a2
jsr (resload_GetCustom,a2)
tst.l d0
beq .error
...

RESULT
success - zero if buffer was too small

BUGS

NOTE
requires ws_Version >= 15

SEE ALSO

--------------------------------------------------------------------------------
WHDLoad/resload_GetFileSize

NAME
resload_GetFileSize -- get size of a file

SYNOPSIS
size = resload_GetFileSize(name)
D0 A0
ULONG CPTR

FUNCTION
Gets size of a file (check if a file exists).
To distinguish between a file with a size of 0 and a nonexistent
file the tag WHDLTAG_IOERR_GET must be used in conjunction with
resload_Control afterwards.

INPUTS
name - name of the file to get the size of

EXAMPLE
...
lea (_filename,pc),a0
move.l (_resload,pc),a2
jsr (resload_GetFileSize,a2)
tst.l d0
bne .file_exist
clr.l -(a7) ;TAG_DONE
clr.l -(a7) ;data to fill
move.l #WHDLTAG_IOERR_GET,-(a7)
move.l a7,a0
jsr (resload_Control,a2)
move.l (4,a7),d0
lea (12,a7),a7 ;restore sp
beq .file_exist
...

RESULT
size - the size of the file, 0 if does not exist

BUGS

NOTE
This routine returns the file size obtained from the filesystem. If the
file is compressed and is loaded later via resload_LoadFileDecrunch the
loaded file size will differ!

SEE ALSO
resload_Control, resload_GetFileSizeDec, resload_LoadFile,
resload_LoadFileDecrunch

--------------------------------------------------------------------------------
WHDLoad/resload_GetFileSizeDec

NAME
resload_GetFileSizeDec -- get size of a packed file

SYNOPSIS
size = resload_GetFileSizeDec (name)
D0 A0
ULONG CPTR

FUNCTION
Gets size of a packed file (check if a file exists).
The routine knows about the same decrunchers as resload_Decrunch.
To distinguish between a file with a size of 0 and a nonexistent
file the tag WHDLTAG_IOERR_GET must be used in conjunction with
resload_Control afterwards.

INPUTS
name - name of the file to get the size of

EXAMPLE
...
lea (_filename,pc),a0
move.l (_resload,pc),a2
jsr (resload_GetFileSizeDec,a2)
tst.l d0
beq .file_not_exist
...

RESULT
size - the size of the file, 0 if does not exist

BUGS

NOTE
requires ws_Version >= 11

SEE ALSO
resload_Control, resload_GetFileSize, resload_LoadFile,
resload_LoadFileDecrunch

--------------------------------------------------------------------------------
WHDLoad/resload_ListFiles

NAME
resload_ListFiles -- list filenames of a directory

SYNOPSIS
amount,errorcode = resload_ListFiles(buffersize, name, buffer)
D0 D1 D0 A0 A1
ULONG ULONG ULONG CPTR APTR

FUNCTION
Writes the names of all files in the specified directory to the
buffer. The file names are separated with a 0 character.
Only files are listed, directories are skipped.
If the buffer to fill is not large enough to hold all names the
routine fills it as far as possible. The tag WHDLTAG_IOERR_GET in
conjunction with resload_Control can be used afterwards to check if
all file names have fit into the buffer.
If multiple data directories are used, only the first data directory
will be scanned.

INPUTS
buffersize - the size of the buffer
name - the name of the directory to scan
buffer - pointer to the buffer to fill (up to WHDLoad v16.8 the
buffer must be located inside the Slave, from WHDLoad
v16.9 on it can also be located in ExpMem)

EXAMPLE
...
move.l #_bufend-_buf,d0
lea (_savepath,pc),a0
lea (_buf,pc),a1
move.l (_resload,pc),a2
jsr (resload_ListFiles,a2)
...

_buf ds.b 1000
_bufend
_savepath dc.b "save",0

RESULT
amount - amount of listed files in the buffer
errorcode - 0 on success
otherwise a DOS error code from dos.IoErr()
if WHDLF_NoError is set, the function only returns on success

BUGS

NOTE
A call to this resload function always causes a switch to the
operating system because the informations to provide are not
cached. To avoid this switch resload_Examine and resload_ExNext
can be used (but will require some additional memory for the
Directory PreLoad).

SEE ALSO
resload_Control

--------------------------------------------------------------------------------
WHDLoad/resload_LoadFile

NAME
resload_LoadFile -- load file into memory

SYNOPSIS
length,errorcode = resload_LoadFile(name, address)
D0 D1 A0 A1
ULONG ULONG CPTR APTR

FUNCTION
Loads the file to the specified memory address.

INPUTS
name - name of the file to load
address - memory address to load the file on

EXAMPLE
...
lea (_filename),a0 ;name
lea $1000.w,a1 ;destination
move.l (_resload,pc),a2
jsr (resload_LoadFile,a2)
...

RESULT
length - the size of the loaded file, or 0 on error
errorcode - 0 on success
otherwise a DOS error code from dos.IoErr()
if WHDLF_NoError is set, the function only returns on success

BUGS

NOTE
The routine performs automatically a resload_FlushCache before
returning.

SEE ALSO
resload_LoadFileDecrunch, resload_LoadFileOffset

--------------------------------------------------------------------------------
WHDLoad/resload_LoadFileDecrunch

NAME
resload_LoadFileDecrunch -- load file and uncompress

SYNOPSIS
length,errorcode = resload_LoadFileDecrunch(name, address)
D0 D1 A0 A1
ULONG ULONG CPTR APTR

FUNCTION
Loads the specified file into memory and unpack it if compressed in a
supported format. Supported are the same formats as with
resload_Decrunch.
Using this routine instead of resload_LoadFile easily allows it to add
support for compressed data files to a installed program. Because of
the transparent decompression the installed program will not notify if
the files loaded were compressed on disk or not. The only thing which
must be considered is that files which are written using
resload_SaveFileOffset or loaded via resload_LoadFileOffset must not
be compressed.

INPUTS
name - name of file to load
address - memory address to load the file on

EXAMPLE
...
lea (_filename),a0 ;name
lea $1000.w,a1 ;destination
move.l (_resload,pc),a2
jsr (resload_LoadFileDecrunch,a2)
...

RESULT
length - the size of the loaded file
if an error occurs this is 0
errorcode - 0 on success
otherwise a DOS error code from dos.IoErr()
if WHDLF_NoError is set, the function only returns on success

BUGS

NOTE
The routine performs automatically a resload_FlushCache before
returning.

SEE ALSO
resload_Decrunch, resload_LoadFile, resload_LoadFileOffset,
resload_SaveFile, resload_SaveFileOffset

--------------------------------------------------------------------------------
WHDLoad/resload_LoadFileOffset

NAME
resload_LoadFileOffset -- load data from inside a file to memory

SYNOPSIS
success,error = resload_LoadFileOffset(size, offset, name, address)
D0 D1 D0 D1 A0 A1
BOOL ULONG ULONG ULONG CPTR APTR

FUNCTION
Loads a part of a file into memory. The part of the file is specified
by an offset in the file and a byte count to read. The routine is
nearly identical to resload_DiskLoad but instead of specifying the
number of the disk to read from a filename is used to select the file.

INPUTS
size - amount of bytes to read
offset - offset in the file
name - name of file
address - memory address to load the file on

EXAMPLE
...
move.l #512,d0 ;size
move.l #$4000,d1 ;offset
lea (_save,pc),a0 ;name
lea $5ac20,a1 ;source
move.l (_resload,pc),a2
jsr (resload_LoadFileOffset,a2)
...

_save dc.b "saved",0

RESULT
success - TRUE on success
errorcode - 0 on success
otherwise a DOS error code from dos.IoErr()
if WHDLF_NoError is set, the function only returns on success

BUGS

NOTE
The routine performs automatically a resload_FlushCache before
returning.
requires ws_Version >= 6

SEE ALSO
resload_DiskLoad, resload_LoadFile

--------------------------------------------------------------------------------
WHDLoad/resload_LoadKick

NAME
resload_LoadKick -- load Kickstart image

SYNOPSIS
resload_LoadKick(size, crc16, name)
D0 D1 A0
ULONG UWORD CPTR

FUNCTION
Loads the Kickstart image with the specified name into ExpMem.

INPUTS
size - size of Kickstart image
crc16 - CRC16 of Kickstart image
name - base name of Kickstart image

EXAMPLE
...
move.l #$40000,d0 ;size
move.w #$f20b,d1 ;crc16
lea (_kick,pc),a0 ;name
move.l (_resload,pc),a2
jsr (resload_LoadKick,a2)
...

_kick dc.b "34005.a500",0

RESULT

BUGS

NOTE
requires ws_Version >= 11
This function is depreciated since WHDLoad v16 because loading a
Kickstart this way will cause a switch to the operation system.
Starting with WHDLoad v16 the Kickstart image to load can be
specified in the Slave structure and when used WHDLoad will load it
before the Slave will called.

SEE ALSO

--------------------------------------------------------------------------------
WHDLoad/resload_Patch

NAME
resload_Patch -- apply patch list

SYNOPSIS
resload_Patch(patchlist, destination)
A0 A1
APTR APTR

FUNCTION
Modify memory using commands from a specified patch list.
To make an installed program work under WHDLoad it must be patched.
That means the program must be modified so that it will load data via
WHDLoad instead of using its own loader routines. Often also various
other things must be changed to make it working.
The modifying of the installed program can be done using this routine.
A patch list will be build using macros from the include file
'whdload.i'. Each entry in the patch list contains a command to
perform, an address to apply the command on and optional extra data.
resload_Patch is especially useful if the memory to modify is located
in ExpMem and therefore the destination address in only known at
runtime and not at creation time of the Slave.

INPUTS
patchlist - list of commands describing the patches to apply
destination - address of memory region to patch

the following commands are supported in a patch list:

PL_START starts a patch list, this will create a label which is
later used to calculate offsets in the slave (the
label is local, multiple patch lists must be separated
by any global label)
PL_END terminates a patch list
PL_R off writes the opcode for the RTS instruction ($4e75) to
destination+offset (return)
PL_PS off,lbl writes the opcode for the JSR instruction ($4eb9) and
the address where lbl points to in the slave to
destination+offset (patch sub)
PL_P off,lbl writes the opcode for the JMP instruction ($4ef9) and
the address where lbl points to in the slave to
destination+offset (patch)
PL_S off,dist writes the opcode for the BRA instruction ($60) and
the distance given to destination+offset (skip)
PL_I off writes the opcode for the ILLEGAL instruction ($4afc)
to destination+offset
PL_B off,byte writes the given byte to destination+offset
PL_W off,word writes the given word to destination+offset
PL_L off,long writes the given long to destination+offset
PL_A off1,off2 writes the address of destination+offset2 to
destination+offset1
PL_PA off,lbl writes the address where lbl points to in the slave
to destination+offset (patch address)
PL_NOP off,len fills the memory at destination+offset with NOP
($4e71) instructions in the given length
PL_NOPS off,cnt fills the memory at destination+offset with the
given count of NOP instructions ($4e71)
PL_C off,len clears the memory at destination+offset in the given
length, max 65536 bytes
PL_CB off clears the byte at destination+offset
PL_CW off clears the word at destination+offset
PL_CL off clears the long at destination+offset
PL_PSS off,lbl,len writes the opcode for the JSR instruction ($4eb9)
and the address where lbl points to in the slave to
destination+offset followed by NOP instructions
($4e71) in the given length (patch sub skip)
PL_NEXT lbl continues with another patch list at the address
where lbl points to in the slave
PL_AB off,byte adds the byte at destination+offset
PL_AW off,word adds the word at destination+offset
PL_AL off,long adds the long at destination+offset
PL_DATA off,len writes the data following the command with the given
length to destination+offset, next command must be
word aligned, see example below
PL_STR off,str writes the given string to destination+offset, see
example below
PL_ORB off,byte ors the byte at destination+offset
PL_ORW off,word ors the word at destination+offset
PL_ORL off,long ors the long at destination+offset
PL_GA off,lbl writes the address of destination+offset to where lbl
points to in the slave (get address)
PL_BKPT off lets WHDload write an ILLEGAL ($4afc) to
destination+offset and saving the original contents,
when the ILLEGAL is executed the original contents is
restored, a NMI stackframe is created and the detected
freezer called, if there is no freezer nothing will be
done, the VBR should be moved by WHDLoad to allow
catching the illegal instruction exception (breakpoint)
PL_BELL off,tim similar to PL_BKPT but instead of entering a freezer a
color cycle will be shown for the given time or lmb
pressed, time is given in 1/10s

EXAMPLE
...
lea (_pl,pc),a0 ;patch list
move.l ($10000),a1 ;destination
move.l (_resload,pc),a2
jsr (resload_Patch,a2)
...

_pl1 PL_START
PL_R $2046 ;copylock
PL_PS $560,_load ;replace the loading routine
PL_P $1460,_getx ;provide value x
PL_S $696,8 ;skip 8 bytes
PL_I $100 ;break if reached
PL_B $3500,$44 ;write byte
PL_W $3510,$4444 ;write word
PL_L $3520,$44444444 ;write long
PL_A $20000,$10 ;write #$10010 to $30000
PL_PA $500,_data ;write address _data
PL_NOP $3000,$36 ;fill with nops
PL_NOPS $4000,5 ;write 5 nops
PL_C $30,7000 ;clear 7000 bytes
PL_CB $79 ;clear one byte
PL_PSS $8700,_load,4 ;jsr + skip 4 bytes
PL_NEXT _pl2 ;goto second patch list

_load ...
rts
_getx ...
rts
_data dc.l 0

_pl2 PL_START
PL_CL $90
PL_AB $100,'A' ;add byte
PL_DATA $350,.stop-.strt
.strt move.w #67,$100 ;write code
dc.b 2,3,$ff,'x',0 ;write data
.stop EVEN ;align!
PL_STR $90000,<NewString> ;write a string
PL_ORB $710,$55 ;or byte
PL_GA $18644,_adr1 ;get the address
PL_BKPT $5124 ;set breakpoint
PL_BELL $9710,50 ;visual bell for 5 seconds
PL_END

_adr1 dc.l 0 ;filled with $28644

RESULT

BUGS

NOTE
The routine performs automatically a resload_FlushCache before
returning.
requires ws_Version >= 10

SEE ALSO
resload_PatchSeg

--------------------------------------------------------------------------------
WHDLoad/resload_PatchSeg

NAME
resload_PatchSeg -- apply patch list to a segment list

SYNOPSIS
resload_PatchSeg(patchlist, seglist)
A0 A1
APTR BPTR

FUNCTION
This function is similar to resload_Patch. But instead of patching
memory at a specific address a segment list is used. A segment list is
list of linked list memory regions and returned by dos.LoadSeg or
resload_Relocate.

INPUTS
patchlist - list of commands describing the patches to apply, see
function resload_Patch for supported commands
seglist - list of segments as returned by dos.LoadSeg or
resload_Relocate (that is a BCPL pointer!)

EXAMPLE
...
lea (_name,pc),a0
move.l a0,d1 ;filename
move.l (_dosbase,pc),a6
jsr (_LVOLoadSeg,a6)
lea (_pl,pc),a0 ;patch list
move.l d1,a1 ;segment list
move.l (_resload,pc),a2
jsr (resload_PatchSeg,a2)
...

_pl PL_START
PL_P $560,_loadfile ;the loading routine
PL_R $2046 ;copylock
PL_END
_name dc.b "program",0

RESULT

BUGS

NOTE
The routine performs automatically a resload_FlushCache before
returning.
requires ws_Version >= 15

SEE ALSO
resload_Patch

--------------------------------------------------------------------------------
WHDLoad/resload_ProtectRead

NAME
resload_ProtectRead -- mark memory as read protected

SYNOPSIS
resload_ProtectRead(length, address)
D0 A0
ULONG APTR

FUNCTION
Protects the specified memory against reading by the processor.
The memory to protect must be located inside BaseMem or ExpMem.

INPUTS
length - size of the memory area to protect
address - start address of the memory area to protect

EXAMPLE
...
moveq #4,d0 ;one longword
lea $4070,a0 ;address
move.l (_resload,pc),a2
jsr (resload_ProtectRead,a2)
...

RESULT
a "Exception 'Access Fault'" WHDLoad requester if the protected memory
is read

BUGS
The amount of protected areas is currently limited to 16.
The page where the SSP points to must not be protected. Because if a
Access Fault occurs the CPU will be unable in that case to write the
exception stack frame. Only reset will recover from the resulting
Double Bus Fault.
limitations on MC68020+MC68851:
This hardware is currently not supported.
limitations on MC68030:
- 3-byte transfers are not supported (occurring on misaligned
longword accesses to page boundaries e.g. "tst.l $fff" (assumed
4KByte page size))
- locked accesses (tas/cas/cas2) are not supported
limitations on MC68040:
This hardware is currently not supported.
limitations on MC68060:
- misaligned access are not supported (occurring on accesses through
a page boundary, for example "tst.l ($ffe)" (assumed 4 KByte page
size))
- locked accesses (tas/cas) are not supported
- instructions which are located on a protected page and access the
supervisor portion of the status register will be executed wrong
(these instructions will always see the trace bit as 1 and the
interrupt level as 7, any modification of the status register
supervisor portion will be without effect)
- movem instruction may access a protected area without creating a
Access Fault exception (only the first bus cycle of the execution
unit will be verified to match the protected area)
- move16 and double precision operations (FPU) are unsupported
- a "move (mem),(mem)" with overlapping source and destination
address which generates an Access Fault because Misalignment
will be executed wrong, for example "move.l ($ffc),($ffe)" where
page $1000..$1fff is protected and memory before execution
contains ($ffc)=$11112222,($1000)=$33334444, after execution
$1000 contains $11114444 and not $22224444)
Unsupported accesses will result in a "Exception 'Access Fault'"
WHDLoad requester.

NOTE
requires ws_Version >= 6
The MMU must be in use by WHDLoad, otherwise you will get WHDLoad
requester "Unacceptable Arguments".
Only accesses to the user and supervisor data stream are affected
(this means not affected are: CPU space accesses (e.g. getting values
from the vector table) and instruction stream accesses).

SEE ALSO
resload_ProtectReadWrite, resload_ProtectWrite, resload_ProtectRemove

--------------------------------------------------------------------------------
WHDLoad/resload_ProtectReadWrite

NAME
resload_ProtectReadWrite -- mark memory as read and write protected

SYNOPSIS
resload_ProtectReadWrite(length, address)
D0 A0
ULONG APTR

FUNCTION
Protects the specified memory against reading and writing by the
processor.
The memory to protect must be located inside BaseMem or ExpMem.

INPUTS
length - size of the memory area to protect
address - start address of the memory area to protect

EXAMPLE
...
moveq #4,d0 ;one longword
lea $64,a0 ;address
move.l (_resload,pc),a2
jsr (resload_ProtectReadWrite,a2)
...

RESULT
A "Exception 'Access Fault'" WHDLoad requester if the protected memory
is accessed.

BUGS
The amount of protected areas is currently limited to 16.
The page where the SSP points to must not be protected. Because if a
Access Fault occurs the CPU will be unable in that case to write the
exception stack frame. Only reset will recover from the resulting
Double Bus Fault.
limitations on MC68020+MC68851:
This hardware is currently not supported.
limitations on MC68030:
- 3-byte transfers are not supported (occurring on misaligned
longword accesses to page boundaries e.g. "tst.l $fff" (assumed
4 KByte page size))
- locked accesses (tas/cas/cas2) are not supported
limitations on MC68040:
This hardware is currently not supported.
limitations on MC68060:
- misaligned access are not supported (occurring on accesses trough
a page boundary, for example "tst.l ($ffe)" (assumed 4 KByte page
size))
- locked accesses (tas/cas) are not supported
- instructions which are located on a protected page and access the
supervisor portion of the status register will be executed wrong
(these instructions will always see the trace bit as 1 and the
interrupt level as 7, any modification of the status register
supervisor portion will be without effect)
- movem instruction may access a protected area without creating a
Access Fault exception (only the first bus cycle of the execution
unit will be verified to match the protected area)
- move16 and double precision operations (FPU) are unsupported
- a "move (mem),(mem)" with overlapping source and destination
address which generates an Access Fault because Misalignment
will be executed wrong, for example "move.l ($ffc),($ffe)" where
page $1000..$1fff is protected and memory before execution
contains ($ffc)=$11112222,($1000)=$33334444, after execution
$1000 contains $11114444 and not $22224444)
Unsupported accesses will result in a "Exception 'Access Fault'"
WHDLoad requester.

NOTE
requires ws_Version >= 6
The MMU must be in use by WHDLoad, otherwise you will get WHDLoad
requester "Unacceptable Arguments".
Only accesses to the user and supervisor data stream are affected
(this means not affected are: CPU space accesses (e.g. getting values
from the vector table) and instruction stream accesses).

SEE ALSO
resload_ProtectRead, resload_ProtectWrite, resload_ProtectRemove

--------------------------------------------------------------------------------
WHDLoad/resload_ProtectRemove

NAME
resload_ProtectRemove -- remove protection from memory area

SYNOPSIS
resload_ProtectRemove(length, address)
D0 A0
ULONG APTR

FUNCTION
Remove a previously set protection.
The specified area must exactly match the previously protected area.

INPUTS
length - size of the memory area to protect
address - start address of the memory area to protect

EXAMPLE
...
moveq #4,d0 ;one longword
lea $64,a0 ;address
move.l (_resload,pc),a2
jsr (resload_ProtectRemove,a2)
...

RESULT

BUGS

NOTE
requires ws_Version >= 6

SEE ALSO
resload_ProtectRead, resload_ProtectWrite, resload_ProtectWrite

--------------------------------------------------------------------------------
WHDLoad/resload_ProtectSMC

NAME
resload_ProtectSMC -- detect self modifying code

SYNOPSIS
resload_ProtectSMC(length, address)
D0 A0
ULONG APTR

FUNCTION
Enables automatic detection of self modifying code (SMC) in the
selected area. The selected area will be write protected using the
resload_ProtectWrite mechanism. Additional the trace mode will be
activated and a special handler for trace exceptions installed.
Each write access to the selected area will be logged to a private
memory location. On each instruction executed inside the selected
memory the trace handler verifies, if the instruction has been
previously modified. If an executed instruction has been altered
the installed program will be terminated and WHDLoad will show an
requester informing about the SMC-detection.

To determinate the size of instructions a table is used. This table
contains the opcode size in words depending on the first instruction
word. If the trace exception handler encounters a instruction with
unknown size WHDLoad aborts with an "Internal Error #3". The reason
for this maybe an illegal instruction, an instruction available only
in higher processors than 68000 or an incompleteness of the internal
instruction size table (IST). To check the reason make an coredump
and see which instruction has caused the problem (the instruction
before the actual PC because trace exception occurs after the
execution of the traced instruction). Depending on the reason you have
to aid this:
- If it is an illegal instruction you have to fix the installed
program by patching his code.
- If there is an 68020+ instruction we have a problem, because the
IST is designed only for 68000 instructions where the size of the
instruction can be estimated by the first word and the largest
possible instruction is 5 words. If the instruction size can be
estimated by the first word you may add the instruction to a own
IST (see below).
- If there is an valid 68000 instruction please inform the WHDLoad
author that he adds this instruction to the default IST inside
WHDLoad. For the moment you may add this instruction to an own
IST (see below)
Using an own IST: During the initialization of this function
WHDLoad searches first for an external IST. This must be located in
the same directory where the WHDLoad executable resides and is
searched as "PROGDIR:WHDLoad.IST". If there is no external IST the
internal one is used. The source of the internal IST is included in
source representation in the developer archive and can be used to
build a external IST.

Due the large exception overhead the execution speed in the selected
area will strongly slow down. To improve performance it is therefore
recommend to relocate the SSP to a Fast-Memory location using
ws_ExpMem and appropriate initialistion and modification of the
installed program.
To maximize performance during the initialization of this function
the BaseMem area will be set to NC, the ExpMem and Slave to CB and
all caches will be enabled (resload_SetCPU).

INPUTS
length - size of the memory area to protect
address - start address of the memory area to protect

The area to protect must be located inside the BaseMem or ExpMem.

EXAMPLE

enable SMC-detection for the area $10000..$3e000:
...
move.l #$2e000,d0 ;length
lea $10000,a0 ;address
move.l (_resload,pc),a2
jsr (resload_ProtectSMC,a2)
...

RESULT

BUGS
Currently supported is only 68030 and 68060. For limitations and
restrictions regarding the MMU related part of operation see the BUGS
section of resload_ProtectWrite.
You must not protect the page where the SSP points to, if you do so
an Double Bus Fault will occur because the CPU will be unable to
write the exception stack frame. Only reset will recover from a Double
Bus Fault.

NOTE
requires ws_Version >= 10
The MMU must be in use by WHDLoad, otherwise you will get WHDLoad
requester "Unacceptable Arguments".
There must be no resload_Protect* active at the same time.

SEE ALSO
resload_ProtectWrite, resload_SetCPU

--------------------------------------------------------------------------------
WHDLoad/resload_ProtectWrite

NAME
resload_ProtectWrite -- mark memory as write protected

SYNOPSIS
resload_ProtectWrite(length, address)
D0 A0
ULONG APTR

FUNCTION
Protects the selected area against writing by the processor.
The area to protect must be located inside BaseMem or ExpMem.

INPUTS
length - size of the memory area to protect
address - start address of the memory area to protect

EXAMPLE
...
moveq #4,d0 ;one longword
lea $64,a0 ;address
move.l (_resload,pc),a2
jsr (resload_ProtectWrite,a2)
...

RESULT

BUGS
The amount of protected areas is currently limited to 16.
The page where the SSP points to must not be protected. Because if a
Access Fault occurs the CPU will be unable in that case to write the
exception stack frame. Only reset will recover from the resulting
Double Bus Fault.
limitations on MC68020+MC68851:
This hardware is currently not supported.
limitations on MC68030:
- 3-byte transfers are not supported (occurring on misaligned
longword accesses to page boundaries e.g. "tst.l $fff" (assumed
4 KByte page size))
- locked accesses (tas/cas/cas2) are not supported
limitations on MC68040:
This hardware is currently not supported.
limitations on MC68060:
- misaligned access are not supported (occurring on accesses trough
a page boundary, for example "tst.l ($ffe)" (assumed 4 KByte page
size))
- locked accesses (tas/cas) are not supported
- instructions which are located on a protected page and access the
supervisor portion of the status register will be executed wrong
(these instructions will always see the trace bit as 1 and the
interrupt level as 7, any modification of the status register
supervisor portion will be without effect)
- movem instruction may access a protected area without creating a
Access Fault exception (only the first bus cycle of the execution
unit will be verified to match the protected area)
- move16 and double precision operations (FPU) are unsupported
- a "move (mem),(mem)" with overlapping source and destination
address which generates an Access Fault because Misalignment
will be executed wrong, for example "move.l ($ffc),($ffe)" where
page $1000..$1fff is protected and memory before execution
contains ($ffc)=$11112222,($1000)=$33334444, after execution
$1000 contains $11114444 and not $22224444)
Unsupported accesses will result in a "Exception 'Access Fault'"
WHDLoad requester.

NOTE
requires ws_Version >= 6
The MMU must be in use by WHDLoad, otherwise you will get WHDLoad
requester "Unacceptable Arguments".
Only accesses to the user and supervisor data stream are affected
(this means not affected are: CPU space accesses (e.g. getting values
from the vector table) and instruction stream accesses).

SEE ALSO
resload_ProtectRead, resload_ProtectReadWrite, resload_ProtectRemove

--------------------------------------------------------------------------------
WHDLoad/resload_Relocate

NAME
resload_Relocate -- relocate an AmigaDOS executable

SYNOPSIS
size = resload_Relocate(address, tags)
D0 A0 A1
ULONG APTR STRUCT

FUNCTION
Relocates a standard AmigaDOS executable in memory.

INPUTS
address - the start address of the executable in memory, this is the
source and also the destination address, i.e.
resload_Relocate will relocates the executable over itself
(a multi pass technique is used)
tags - there are two valid tags starting WHDLoad version 14.1
WHDLTAG_CHIPPTR - specifies a extra memory location where
to put hunks with the memory flag MEMF_CHIP
WHDLTAG_FASTPTR - specifies a extra memory location where
to put hunks with the memory flag MEMF_FAST
the different memory locations must not overlap, WHDLoad
will check that and report 'illegal args' if they do
starting WHDLoad version 15.1 there is another tag:
WHDLTAG_ALIGN - it specifies an alignment for the hunks,
the number given must be an positive integer which is
a power of 2, all hunk lengths will be rounded up to
a multiple of this value, useful is 8 to be compatible
with exec.AllocMem which is used by dos.LoadSeg
starting WHDLoad version 16.3 there is another tag:
WHDLTAG_LOADSEG - if specified the function creates a
segment list as if loaded via dos.LoadSeg,
resload_PatchSeg can be used to modify the relocated
executable

EXAMPLE
...
lea (_main,pc),a0 ;name
lea $400,a3 ;A3 = address for program
move.l a3,a1 ;destination
move.l (_resload,pc),a2
jsr (resload_LoadFileDecrunch,a2)
move.l a3,a0 ;address
sub.l a1,a1 ;tags
jsr (resload_Relocate,a2)
...
jmp (a3) ;start the program
...

_main dc.b "main-program",0

EXAMPLE
...
move.l (_freefast),a0 ;address
clr.l -(a7) ;TAG_DONE
move.l (_freechip),-(a7) ;chip area
pea WHDLTAG_CHIPPTR
pea 8 ;8 byte alignment
pea WHDLTAG_ALIGN
move.l a7,a1 ;tags
move.l (_resload,pc),a2
jsr (resload_Relocate,a2)
add.l d0,(_freefast)
add.l (12,a7),(_freechip)
add.w #20,a7
...

EXAMPLE
...
move.l (_freemem),a0 ;address
clr.l -(a7) ;TAG_DONE
pea -1 ;true
pea WHDLTAG_LOADSEG
pea 8 ;8 byte alignment
pea WHDLTAG_ALIGN
move.l a7,a1 ;tags
move.l (_resload,pc),a2
jsr (resload_Relocate,a2)
add.w #5*4,a7
lea (_patchlist),a0
move.l (_freemem),d0
addq.l #4,d0 ;segment starts at offset 4
lsr.l #2,d0 ;make BPTR
move.l d0,a1
jsr (resload_PatchSeg,a2)
...

RESULT
size - size of the relocated executable
(this may be more or less than the size of the executable file,
depending on if BSS hunks are contained in the executable)
tags - the ti_Data field will be overwritten with the length of data
stored in this area

BUGS
The routine supports all hunks supported by Kickstart 1.3 except
OVERLAY. Anyway it is only tested with a limited amount of
executables, so please report any problems or bugs.

NOTE
requires ws_Version >= 8
The function uses stack for variables. The amount depends on the
number of hunks in the executable and can be calculated as
"used stack = hunks * 20 + 32".
Upto WHDLoad version 16.9 the executable must not contain more than 256
hunks (also AmigaDOS allows not more than 256 hunks). Starting WHDLoad
version 17.0 512 hunks are supported. Beware of the stack space, for
512 hunks more 10 KiB stack are required.
The routine performs automatically a resload_FlushCache before
returning.

SEE ALSO

--------------------------------------------------------------------------------
WHDLoad/resload_SaveFile

NAME
resload_SaveFile -- write memory to a file

SYNOPSIS
success,errorcode = resload_SaveFile(size, name, address)
D0 D1 D0 A0 A1
BOOL ULONG ULONG CPTR APTR

FUNCTION
Writes specified memory area to a file using the specified file name.
If multiple data directories are used the file will be created
always in the first data directory. Possible missing sub directories
are only created by WHDLoad if the option SavePath/S is in use.

INPUTS
size - amount of bytes to write
name - name of file to write
address - memory address of buffer to write

EXAMPLE
...
move.l #512,d0 ;size
lea (_save,pc),a0 ;name
lea $5ac20,a1 ;source
move.l (_resload,pc),a2
jsr (resload_SaveFile,a2)
...

_save dc.b "saved",0

RESULT
success - TRUE on success
errorcode - 0 on success
otherwise a DOS error code from dos.IoErr()
If WHDLF_NoError is set, the function only returns on success.

BUGS

NOTE

SEE ALSO
resload_SaveFileOffset

--------------------------------------------------------------------------------
WHDLoad/resload_SaveFileOffset

NAME
resload_SaveFileOffset -- write memory to a file at given offset

SYNOPSIS
success,error = resload_SaveFileOffset(size, offset, name, address)
D0 D1 D0 D1 A0 A1
BOOL ULONG ULONG ULONG CPTR APTR

FUNCTION
Writes specified memory area to a file at specified offset using the
specified file name.
If multiple data directories are used the file will be written always
in the first data directory. If the file is not preloaded and cannot
be preloaded during this function call or the option NoWriteCache/S
is used and the file doesn't exist in the first data directory but in
any other data directory the call to this function will fail with DOS
error code ERROR_OBJECT_EXISTS.
Possible missing sub directories are only created by WHDLoad if the
option SavePath/S is in use.

INPUTS
size - amount of bytes to write
offset - offset in the file to write
name - name of file to write
address - memory address of buffer to write

EXAMPLE
...
move.l #512,d0 ;size
move.l #$4000,d1 ;offset
lea (_save,pc),a0 ;name
lea $5ac20,a1 ;source
move.l (_resload,pc),a2
jsr (resload_SaveFileOffset,a2)
...

_save dc.b "saved",0

RESULT
success - TRUE on success
errorcode - 0 on success
otherwise a DOS error code from dos.IoErr()
If WHDLF_NoError is set, the function only returns on success.

BUGS

NOTE
requires ws_Version >= 5

SEE ALSO
resload_SaveFile

--------------------------------------------------------------------------------
WHDLoad/resload_SetCACR

NAME
resload_SetCACR -- set cacheability for BaseMem

SYNOPSIS
old = resload_SetCACR(new, mask)
D0 D0 D1
ULONG ULONG ULONG

FUNCTION
This function enables/disables the cpu caches.
The changes will affect the CACR (Cache Control Register) and
the MMU-tables if the MMU is used by WHDLoad.

INPUTS
new - new cache status
mask - status bits to change

valid values for new and mask are:
CACRF_EnableI - instruction cache
CACRF_EnableD - data cache
(bits are defined in the standard include file "exec/execbase.i")

EXAMPLE
to enable instruction cache:
...
move.l #CACRF_EnableI,d0 ;new status
move.l d0,d1 ;status to change
move.l (_resload,pc),a2
jsr (resload_SetCACR,a2)
...

RESULT
old - old cache status

BUGS

NOTE
It is safe to call this routine from User or Supervisor mode and
independent from the actual CPU type (also on 68000/010).
If WHDLoad is launched with the option NoCache/S this routine will
return without changing anything (all memory is always noncacheable).
Don't be surprised if you see in the coredump or in a freezer that
caches are enabled even if not enabled by the Slave. Because if the
MMU is used by WHDLoad and no caches are switched on by the Slave,
WHDLoad marks the BaseMem using the MMU as noncacheable-serialized
and enables both caches so that the memory of WHDLoad and the Slave
are still cacheable to increase the performance.
The caches are flushed after returning from this routine.

SEE ALSO
resload_SetCPU, resload_FlushCache

--------------------------------------------------------------------------------
WHDLoad/resload_SetCPU

NAME
resload_SetCPU -- control CPU setup

SYNOPSIS
old = resload_SetCPU(new, mask)
D0 D0 D1
ULONG ULONG ULONG

FUNCTION
This function changes the cacheability of memory areas and changes the
CPU setup.
The changes will affect the CACR (Cache Control Register) on 68020-60,
the PCR (Processor Configuration Register) on 68060 and the MMU-tables
if the MMU is used by WHDLoad.
Check the WHDLoad manual section "CPU Cache Handling" for further
informations. See the include file "whdload.i" for supported bit sets.

INPUTS
new - new setup
mask - parts of the current setup to change

EXAMPLE
to enable the only instruction cache for BaseMem and ExpMem:
...
move.l #WCPUF_Base_WT|WCPUF_Exp_CB|WCPUF_IC,d0
move.l #WCPUF_Base|WCPUF_Exp|WCPUF_IC|WCPUF_DC,d1
move.l (_resload,pc),a2
jsr (resload_SetCPU,a2)
...

RESULT
old - the setup before

BUGS

NOTE
requires ws_Version >= 10
It is safe to call this routine from User or Supervisor mode and
independent from the actual CPU type (also on 68000/010).
If WHDLoad is launched with the option NoCache/S this routine will
return without changing anything (all memory is always noncacheable).
Don't be surprised if you see in the coredump or in a freezer that
caches are enabled even if not enabled by the Slave. Because if the
MMU is used by WHDLoad and caches are disabled by the Slave,
WHDLoad marks the memory using the MMU as noncacheable-serialized
and enables both caches so that the memory of WHDLoad is still
cacheable to increase the performance.
The caches are flushed after returning from this routine.

SEE ALSO

 

--------------------------------------------------------------------------------
WHDLoad.Slave/--Overview--

The WHDLoad.Slave contains the interface code which makes the installed
program able to load his files from harddisk. Additional it should realize
the possibility to quit the program to return to the OS.

FORMAT
Is a standard AmigaDOS executable.
ATTENTION
The Slave MUST consist of only ONE hunk (ONE section).
The Slave MUST be 100% PC-relative (must not contain relocations).
It may contain debug/symbol hunks which are ignored.

STRUCTURE
At the top of the Slave is the "WHDLoadSlave" structure. After this
follows the specific code and data.

STRUCTURE WHDLoadSlave,0
STRUCT ws_Security,4
STRUCT ws_ID,8
UWORD ws_Version
UWORD ws_Flags
ULONG ws_BaseMemSize
ULONG ws_ExecInstall
RPTR ws_GameLoader
RPTR ws_CurrentDir
RPTR ws_DontCache
( LABEL ws_SIZEOF_pre_v4 )
UBYTE ws_keydebug
UBYTE ws_keyexit
( LABEL ws_SIZEOF_pre_v8 )
ULONG ws_ExpMem
( LABEL ws_SIZEOF_pre_v10 )
RPTR ws_name
RPTR ws_copy
RPTR ws_info
( LABEL ws_SIZEOF_pre_v16 )
RPTR ws_kickname
ULONG ws_kicksize
UWORD ws_kickcrc
( LABEL ws_SIZEOF_pre_v17 )
RPTR ws_config
LABEL ws_SIZEOF

ws_Security
Contains the code
moveq #-1,d0
rts
to avoid problems if somebody tries execute the Slave directly.

ws_ID
Contains the string "WHDLOADS" to identify the program as a
WHDLoad Slave.

(use the macro SLAVE_HEADER defined in the include file "whdload.i" to
create the entries ws_Security and ws_ID)

ws_Version
Contains the version of WHDLoad that is required by the Slave.
Some resload functions need at least a specific version of
WHDLoad. E.g. to use resload_CRC16 you must set ws_Version
to 3 or higher.
On the other side the size of the WHDLoad Slave structure
differs for different Slave versions. I.e. if you set
ws_Version to 16 or higher you MUST also initialize the fields
up to ws_kickcrc (even if you don't use a Kickstart image).

ws_Flags
WHDLF_Disk / WHDLB_Disk
This flag should be enabled if the program uses disk images.
As a result Preload/S is working slightly different.
(starting WHDLoad 0.143 this flag is obsolete)
WHDLF_NoError / WHDLB_NoError
If enabled every error occurring in a resload_#? function
forces WHDLoad to quit immediately and showing an error
requester about the reason.
Using this flag makes it unnecessary for the Slave to check
the return codes of resload_#? functions. The Slave can then
be sure that if a function returns it was successful (this
will make the Slave more simple).
WHDLF_EmulTrap / WHDLB_EmulTrap
This flag has only effect if the VBR is moved by WHDLoad
(i.e. the machine is at least a 68010 and the tooltype
NoVBRMove is not set).
If the flag is set all "Trap #0..15"'s are emulated by the
exception handler inside WHDLoad. I.e. the handler checks
if the appropriate trap vector ($80-$bc) is initialized,
and if the routine at the vector address will be called by
WHDLoad.
WHDLF_NoDivZero / WHDLB_NoDivZero
This flag has only effect if the VBR is moved by WHDLoad
(i.e. the machine is at least a 68010 and the tooltype
NoVBRMove is not set).
If the flag is set and a "Division by Zero" exception
occurs WHDLoad will not quit with an requester, but a
RTE will be performed.
This maybe useful if the demo/game performs randomly
divisions by zero.
WHDLF_Req68020 / WHDLB_Req68020
This flag indicates that the Slave/installed program
requires at least a MC68020 CPU. WHDLoad will check at
startup if this requirement is fulfilled. If it doesn't the
program will be terminated with an appropriate requester.
WHDLF_ReqAGA / WHDLB_ReqAGA
This flag indicates that the Slave/installed program
requires at least the AGA chipset. WHDLoad will check at
startup if this requirement is fulfilled. If it doesn't the
program will be terminated with an appropriate requester.
WHDLF_NoKbd / WHDLB_NoKbd
This flag tells WHDLoad that it doesn't should acknowledge
the keyboard if a key was pressed. This must be used with
programs which doesn't check the keyboard from the PORTS
interrupt ($68). Background information: In normal
operation when NoVBRMove is inactive, WHDLoad checks if a
key was pressed on each interrupt. If a key has been
pressed it checks the rawkey code against QuitKey, DebugKey
and FreezeKey. If it doesn't match any of them it checks if
there is an initialized PORTS interrupt ($68). If there is
no one it replies the keyboard that the keycode has been
received. Therefore when the installed program later checks
the keyboard from e.g. the VBI, it will never receive any
keycodes. This flag avoids this behavior.
WHDLF_EmulLineA / WHDLB_EmulLineA
This flag has only effect if the VBR is moved by WHDLoad
(i.e. the machine is at least a 68010 and the tooltype
NoVBRMove is not set).
If the flag is set all exceptions "Line-A" (caused by
opcodes starting with %1010) are emulated by the
exception handler inside WHDLoad. I.e. the handler checks
if the vector ($28) is initialized and if the routine to
which the vector points will be called by WHDLoad.
WHDLF_EmulTrapV / WHDLB_EmulTrapV
This flag has only effect if the VBR is moved by WHDLoad
(i.e. the machine is at least a 68010 and the tooltype
NoVBRMove is not set).
If the flag is set all exceptions caused by a "TrapV"
instruction are emulated by the exception handler inside
WHDLoad. I.e. the handler checks if the vector ($1C) is
initialized and if the routine to which the vector points
will be called by WHDLoad.
WHDLF_EmulChk / WHDLB_EmulChk
This flag has only effect if the VBR is moved by WHDLoad
(i.e. the machine is at least a 68010 and the tooltype
NoVBRMove is not set).
If the flag is set all exceptions caused by a "Chk/Chk2"
instruction are emulated by the exception handler inside
WHDLoad. I.e. the handler checks if the vector ($18) is
initialized and if the routine to which the vector points
will be called by WHDLoad.
WHDLF_EmulPriv / WHDLB_EmulPriv
This flag has only effect if the VBR is moved by WHDLoad
(i.e. the machine is at least a 68010 and the tooltype
NoVBRMove is not set).
If the flag is set all privilege violation exceptions are
emulated by the exception handler inside WHDLoad. I.e. the
handler checks if the vector ($20) is initialized and if
the routine to which the vector points will be called by
WHDLoad.
WHDLF_EmulLineF / WHDLB_EmulLineF
This flag has only effect if the VBR is moved by WHDLoad
(i.e. the machine is at least a 68010 and the tooltype
NoVBRMove is not set).
If the flag is set all exceptions "Line-F" (caused by
opcodes starting with %1010) are emulated by the
exception handler inside WHDLoad. I.e. the handler checks
if the vector ($2C) is initialized and if the routine to
which the vector points will be called by WHDLoad.
WHDLF_ClearMem / WHDLB_ClearMem
If that flag is set WHDLoad will not init BaseMem with the
pattern $CCCCCCCC and ExpMem with $DDDDDDDD but simply
clear these memories.
WHDLF_Examine / WHDLB_Examine
This flag must be set if the functions
resload_Examine/ExNext will be used. It causes WHDLoad to
cache informations about all files and directories. This
consumes memory and takes time at startup. Therefore it
shouldn't be used without necessity.
WHDLF_EmulDivZero / WHDLB_EmulDivZero
This flag has only effect if the VBR is moved by WHDLoad
(i.e. the machine is at least a 68010 and the tooltype
NoVBRMove is not set).
If the flag is set all division by zero exceptions are
emulated by the exception handler inside WHDLoad. I.e. the
handler checks if the vector ($14) is initialized and if
the routine to which the vector points to will be called by
WHDLoad.
This flag has precedence over the flag NoDivZero.
WHDLF_EmulIllegal / WHDLB_EmulIllegal
This flag has only effect if the VBR is moved by WHDLoad
(i.e. the machine is at least a 68010 and the tooltype
NoVBRMove is not set).
If the flag is set all illegal instruction exceptions are
emulated by the exception handler inside WHDLoad. I.e. the
handler checks if the vector ($10) is initialized and if
the routine to which the vector points will be called by
WHDLoad.

ws_BaseMemSize
The size of the memory that is required by the program.
The BaseMemory starts at $00000000 and ends at ws_BaseMemSize.
BaseMemory is always ChipMem.
This value must be multiple of $1000.
The valid minimum is $2000 and the maximum is $200000.

ws_ExecInstall
obsolete, must be set to 0

ws_GameLoader
A relative (to the start of the structure) 16-bit pointer
to the start code of the Slave.

ws_CurrentDir
A relative (to the start of the structure) 16-bit pointer
to a 0 terminated string which is the name of the path
where all files are stored (sub directory).
If no sub directory is used initialize this with 0.
The path to the sub directory must be relative (must not
contain ":").

ws_DontCache
A relative (to the start of the structure) 16-bit pointer
to a 0 terminated string which is a standard AmigaDOS
pattern (dos.ParsePattern, dos.MatchPattern).
All files matching this pattern are not cached by WHDLoad.
If you don't want to use it set the entry to 0.
Starting WHDLoad version 0.107 this is obsolete, because saved
files will be written also to the file cache.

The following variables are only evaluated by WHDLoad if ws_Version
is set to >= 4. The following variables MUST be initialized if you set
ws_Version to >= 4.

ws_keydebug
The raw key code to exit and writing debug files.
This variable will be overwritten by WHDLoad using the value
specified with the option DebugKey/K/N if set.
If the Slave provides an own handler to support a debug option
via the keyboard it should use this value for comparison. So
it will be possible to the user to change the key suggested
by the Slave.
WHDLoad itself also checks for this key code on each interrupt
if the VBR is moved (requires 68010+ and that NoVBRMove/S is
not set).
If the variable is set to 0 WHDLoads default will be used.
Starting WHDLoad version 17.0 the contents of this variable
is ignored. It will be always overwritten by WHDLoad with the
default or the specified DebugKey/K/N.
Recommend value is 0.

ws_keyexit
The raw key code to exit.
This variable will be overwritten by WHDLoad using the value
specified with the option QuitKey/K/N if set.
If the Slave provides an own handler to support a quit option
via the keyboard it should use this value for comparison. So
it will be possible to the user to change the key suggested
by the Slave.
WHDLoad itself also checks for this key code on each interrupt
if the VBR is moved (requires 68010+ and that NoVBRMove/S is
not set).
Recommend value is $59 = "F10".

The following variables are only evaluated by WHDLoad if ws_Version
is set to >= 8. The following variables MUST be initialized if you set
ws_Version to >= 8.

ws_ExpMem
If the installed program requires expansion memory, the size
must be specified here. WHDLoad will allocate a memory block
of this size and writes a pointer to the start of the
allocated memory back to this entry. The memory is granted to
be aligned to $1000 (4096 bytes). The size specified must be
a multiple of $1000 (4096). If WHDLoad fails to allocate
this memory it terminates with an appropriate error requester.
That means the Slave will always get a valid pointer here.
Starting WHDLoad version 10.2 the value can be negative. A
negative size means that the memory is optional and not
required. WHDLoad will try to allocate it and if it fails it
will set ws_ExpMem to zero. Therefore the Slave has to check
the contents of ws_ExpMem.

The following variables are only evaluated by WHDLoad if ws_Version
is set to >= 10. The following variables MUST be initialized if you set
ws_Version to >= 10.

ws_name
A relative (to the start of the structure) 16-bit pointer
to a 0 terminated string containing the name of the installed
program. e.g. "Super Hang Off"

ws_copy
A relative (to the start of the structure) 16-bit pointer
to a 0 terminated string containing the copyright of the
installed program. The string should start with the year
followed by the company holding the copyright. Multiple years
or companies should be separated with ", ".
e.g. "1983 Schega, 1989 Bad Dreams"

ws_info
A relative (to the start of the structure) 16-bit pointer
to a 0 terminated string containing additional infos about the
installed program. The string may also contain line feeds
($0a). The character -1 has a special meaning. It results in
a line feed and an additional vertical skip of the half font
height. e.g.:
dc.b "installed & fixed by Wepl",10
dc.b "version 1.4 (06.06.2066)",-1
dc.b "greetings to the world",0

The following variables are only evaluated by WHDLoad if ws_Version
is set to >= 16. The following variables MUST be initialized if you set
ws_Version to >= 16.

ws_kickname
A relative (to the start of the structure) 16-bit pointer
to a 0 terminated string containing the name of the Kickstart
image to be loaded by WHDLoad to ExpMem. The path
"DEVS:Kickstarts/" will be prepended by WHDLoad to find the
file. e.g. "kick34005.A500"

ws_kicksize
The size of the Kickstart image to load.

ws_kickcrc
The CRC16 checksum for the Kickstart image to load.

Starting WHDLoad 16.1 there is a special mode which supports multiple
Kickstart images within the same Slave. The special mode is activated
by using -1 as the value for ws_kickcrc. ws_kickname contains then a
relative pointer to a table which contains pairs of CRC16 and relative
pointers to a Kickstart name. The table is terminated with a CRC16 of
0. WHDLoad will try to load Kickstarts from the table until it finds
one with the correct CRC16. After the successful load the CRC16 of the
loaded Kickstart image will be placed in ws_kickcrc (overwriting the
-1) so the Slave can recognize which Kickstart image has been loaded.

The following variables are only evaluated by WHDLoad if ws_Version
is set to >= 17. The following variables MUST be initialized if you set
ws_Version to >= 17.

ws_config
A relative (to the start of the structure) 16-bit pointer
to a 0 terminated string containing infos about configuration
items to be displayed in the WHDLoad startup splash window.
Possible items are the options ButtonWait and Custom1-5. For
each item specified here a gadget will be added to the splash
window, allowing the user easily the modify this option.
The syntax in a EBNF is as follows:

Config = ConfigOption { ";" ConfigOption } ;
ConfigOption = Option [ ":" Type ":" Label [ ":" Spec ] ] ;
Option = "BW" | "C1" | "C2" | "C3" | "C4" | "C5" ;
(* BW - ButtonWait, without Type *)
(* C1..C5 - Custom1..5, requires Type *)
Type = "B" | "L" | "0" ;
(* B - Boolean *)
(* X - Boolean only 1 bit used, Spec is the bit number
0-31 *)
(* L - List of values, cycle gadget, Spec is list of
SpecOptions *)
Spec = Number | ( SpecOption { "," SpecOption } ) ;
Number = [0-9] ;
SpecOption = Label ;
Label = CHR(32..255) except [,:;] ;

On Type=Boolean (also ButtonWait) the result will be 0 for
unchecked and 1 for checked. On Type=List the result will be
0 for the first SpecOption and is incremented by 1 for each
subsequent SpecOption.

Example:

dc.b "BW;"
dc.b "C1:B:Skip Intro;"
dc.b "C2:X:Activate Trainer:0;"
dc.b "C3:L:Load Game Position:None,1,2,3,4,5,6,7,8,9;"
dc.b "C4:L:Brightness:default,+50%,+100%"
dc.b 0

CONVENTIONS for ws_GameLoader
Following the status of the system at the moment of calling
ws_GameLoader:

CPU:
SR = $2000 Supervisor-mode, all interrupts enabled
SSP = ws_BaseMemSize at the end of BaseMem
USP = SSP-$400 at the end of BaseMem - 1024
A0 = ResidentLoader pointer to the resident Jump-Tower
D0-D7/A1-A6 random (D0=$d0d0d0d0 D1=...)

Nothing more is interesting from the Slave programmers point
of view. All special registers like VBR,SFC,DFC,CAAR,CACR,MSP,
TC,MMUSR,CRP,SRP,URP,TT0,TT1,DTT0,DTT1,ITT0,ITT1,PCR,BUSCR are
WHDLoad private and MUST NOT BE CHANGED.

FPU:
At the moment not initialized by WHDLoad.

BaseMem:
$00000000.l = 0
$00000004.l = $f0000001
an odd value to make any try to use it (the execbase)
creating an "Address Error" or "Access Fault" exception
$00000008...$00000400
if WHDLoad has moved the VBR it contains $CCCCCCCC
else it contains a pointer to an exception handler
inside WHDLoad
$00000400...ws_BaseMemSize
contains $CCCCCCCC, this memory fill pattern is used to
easily recognize modified memory
$00001000.l = $FFFFFFFE
the copper instruction "CWAIT $ff,$1fe" (CEND)

ExpMem:
the memory is filled with the pattern $DDDDDDDD

custom registers:
dmacon = 0 all DMAs off
intena = 0 all interrupts off
cop1lc = cop2lc = $1000
a AGA-machine is switched to OCS

cias:
------- ciaa ------ ------- ciab ------
pra in = %00000000 pra in = %00000000
pra out = %11111100 pra out = %11111000
ddra = %00000011 ddra = %11000000
prb in = %00000000 prb in = %00000000
prb out = %00000000 prb out = %11111111
ddrb = %00000000 ddrb = %11111111
ta = $21ff ta = $ffff
tb = $21ff tb = $ffff
event = $000000 event = $000000
(alarm = $ffffff alarm = execbase.EClockFrequency
the alarm values are no longer initialized starting
WHDLoad version 13.1 to avoid compatibility problems
on Kickstart 2.0)
sdr = $00 sdr = $00
icr = %00000000 icr = %00000000
icm = %00001000 icm = %00000000
cra = %00000000 cra = %00000000
crb = %00000000 crb = %00000000

SEE ALSO
example Slaves

Amiga Infos Dumping
Dumps et fichiers de log WHDLoad
Principalement à des fins de debug, WHDLoad est capable de créér plusieurs types de fichiers dumps (images mémoire/registres) et de log (trace).
Dump mémoire
Un dump mémoire est un fichier contenant toute la mémoire utilisée par le programme installé. La taille du fichier dépend du programme installé (égal à la valeur de ws_BaseMemSize dans la structure du Slave). Un dump mémoire est créé si la touche de debug (DebugKey) est pressée ou si en cas d'erreur le bouton Coredump est cliqué. Le nom du fichier dump créé est ".whdl_memory". L'emplacement par défaut est "PROGDIR:" mais peut être modifié à l'aide de l'option CoreDumpPath. Un fichier existant du même nom sera écrasé. Si le programme installé utilise de la mémoire Fast, celle-ci est sauvegardée sous le nom ".whdl_expmem".
Dump des registres
Le dump des registres contient l'état complet du CPU (incluant le MMU), les CIA et les coprocesseurs (custom chips). Certains registres custom et cia ne sont pas lisibles. Ils ne sont contenus dans le fichier de dump que si le mode Snoop est actif. Les informations sont écrites dans un fichier ASCII avec mise en forme utilisant des séquences d'échappement (utilisant CSI - Control Sequence Introducer, 155). Pour visualiser le fichier, un programme qui comprend les séquences d'échappement est recommandé (ex: More, MuchMore, Multiview, ...). Le nom du fichier dump créé est ".whdl_register". L'emplacement par défaut est "PROGDIR:" mais peut être modifié à l'aide de l'option CoreDumpPath. Si un fichier portant le même nom existe déjà, le dump sera ajouté à la suite, sinon un nouveau fichier sera créé.
Fichier dump complet
Ce fichier dump est un fichier IFF qui contient toutes les informations des fichiers dump listés ci-dessus afin d'être utilisé par d'autres applications. La structure du fichier est décrite dans whddump.i. Pour le moment, les applications WHDLoadGCI (graphical coders interface) et SP (save picture) utilisent le fichier dump complet. Le nom de ce fichier est ".whdl_dump". Le chemin d'accès par défaut est "PROGDIR:" mais il peut être changé avec l'option CoreDumpPath. Le fichier existant du même nom sera écrasé.
Log des accès aux fichiers
Tous les accès au disque sont tracés si l'option FileLog a été activée. Cette fonctionnalité est très utile pour analyser les opérations effectuées par le programme installé sur le disque, dans un souci de debug ou d'optimisation. Les fonctions resload suivantes créent une entrée dans le fichier de log: • resload_DeleteFile
• resload_DiskLoad
• resload_Examine
• resload_ExNext
• resload_GetFileSize
• resload_GetFileSizeDec
• resload_ListFiles
• resload_LoadFile
• resload_LoadFileDecrunch
• resload_LoadFileOffset
• resload_SaveFile
• resload_SaveFileOffset
Chaque accès à un fichier par les fonctions ci-dessus créé une ligne dans le fichier de log, cette ligne identifie la fonction appelée, un crc de chaque lecture/écriture de données, les paramètres, et le résultat. WHDLoad rassemble les entrées log dans un buffer interne. Le buffer est vidé en sortie de programme, ou pendant un accès s'il est plein. Les informations sont écrites dans un fichier ASCII. Le nom du fichier dump créé est ".whdl_filelog". L'emplacement par défaut est "PROGDIR:" mais peut être modifié à l'aide de l'option CoreDumpPath.
Amiga Infos Généralités sur le cache CPU

Généralités sur le cache CPU
Afin d'améliorer la vitesse d'exécution des programmes, certains CPUs de la famille des 68000 sont capable de "cacher" les accès mémoire.
Les caches sont toujours appelés à l'aide d'adresses logiques, incluant le code fonctionnel de l'accès. Cela signifie que des accès en mode utilisateur ou superviseur créent des entrées différentes dans le cache (consultez les documentations Motorola pour plus d'informations).
Voici un bref aperçu sur les CPUs de la famille des 68000:
• 68000 pas de cache
• 68010 ◦Prefetch d'instructions
Prefetch de 2 mots, registre de décodage à un mot
◦ Mode boucle
activé quand une instruction de taille un mot est suivie d'un DBcc. Le processeur ne va pas rechercher plus d'instructions jusqu'à la fin de la boucle.

• 68020 ◦Prefetch d'instructions
un mot long
◦ Cache d'instructions
16 lignes * 16 octets = 256 octets
peut être activé/désactivé par l'intermédiaire du CACR

• 68030 ◦Prefetch d'instructions
un mot long
◦ Cache d'instructions
16 lignes * 16 octets = 256 octets
peut être activé/désactivé par l'intermédiaire du CACR
◦ Cache de données
16 lignes * 16 octets = 256 octets
peut être activé/désactivé par l'intermédiaire du CACR
Toujours "writethrough" (les octets écrits sont placés dans le cache pour relecture ultérieure)
mode allocation écriture sélectionnable.

• 68040 ◦Prefetch d'instructions
un mot long
◦ Cache d'instructions
16 lignes * 16 octets = 256 octets
peut être activé/désactivé par l'intermédiaire du CACR
◦ Cache de données
16 lignes * 16 octets = 256 octets
peut être activé/désactivé par l'intermédiaire du CACR
modes copyback ou writethrough (contrôlé par le MMU)

• 68060 ◦Prefetch d'instructions
un mot long
◦ Cache d'instructions
512 lignes * 16 octets = 8192 octets
peut être activé/désactivé et réduit à la moitié par l'intermédiaire du CACR
◦ Cache de branchement
peut être activé/désactivé par le CACR
pas affecté par les réglages MMU!
◦ Diffusion Superscalaire
peut être activée/désactivée par le CACR
◦ Cache de données
512 lignes * 16 octets = 256 octets
peut être activé/désactivé et réduit à la moitié par l'intermédiaire du CACR
modes copyback ou writethrough (contrôlé par le MMU)
◦ Push Buffer
peut être désactivé par l'intermédiaire du PCR
◦ Store Buffer
peut être désactivé par l'intermédiaire du CACR
Les pages ne doivent pas être non cachées sérialisées (précis)

Gestion du cache dans WHDLoad
La première chose importante est de comprendre que les caches sur 68030..68060 sont controlés par le registre de contrôle de cache (CACR) et le MMU (quand WHDLoad utilise et contrôle le MMU)!
Dans le CACR les caches sont activés ou désactivés globalement. Les pages simples MMU (4 kilo-octets avec WHDLoad) possèdent un état décrivant comment elles sont cachées.
Sur le 68030 une page mémoire peut être cachable ou non cachable. Sur un 68040/68060 elle peut être cachable "writethrough", cachable "copyback" (pas d'écriture mémoire immédiate), non cachable (imprécis) ou non cachable sérialisé (précis).
Si le MMU n'est pas utilisé par WHDLoad, seulement le registre CACR sera modifié.

Réglages de cache par défaut
Par défaut, les zones utilisées par WHDLoad, le slave et l'extension mémoire, sont marquées en tant que cachable, copyback. La mémoire de base (chip) est marquée comme non cachable, et les caches donnée et instruction sont activés dans le CACR. Ainsi, le programme situé dans la zone de mémoire de base fonctionne sans caches mais WHDLoad, le slave et l'extension de mémoire utilisent les caches pour une performance optimale. Si le MMU n'est pas utilisé par WHDLoad, les caches seront désactivés. Car sans MMU, une configuration différente pour des zones de mémoire ne peut être paramétrée, de plus si une des zones est marquée comme non cachable, tous les caches seront aussi désactivés.
Contrôle du cache par le programmeur
Il existe deux fonctions resload pour contrôler les caches: resload_SetCACR et resload_SetCPU. resload_SetCACR est la vieille routine, et peut être complètement remplacée par resload_SetCPU (WHDLoad retravaille les arguments passés à resload_SetCACR de façon interne et appelle resload_SetCPU). Cependant, l'utilisation de resload_SetCACR est recommandée pour tous les progammeurs qui ne connaissent pas tout sur les caches et leur comportement dans le système Amiga. En utilisant resload_SetCACR, le cache instruction et donnée peuvent être activés ou désactivés séparément. resload_SetCACR affecte uniquement la cachabilité de la mémoire de base.
Contrôle du cache par l'utilisateur
Si le programmeur a bien travaillé, alors l'utilisateur n'a rien à faire à propos des caches parce que les réglages sont déjà effectués dans le slave.
Néanmoins, il peut y avoir deux raisons pour justifier un changement manuel des réglages du cache. D'abord pour faire fonctionner un install qui ne fonctionne pas bien parce qu'il tourne trop vite (ex: erreurs graphiques) et ensuite pour faire tourner plus vite un programme installé.
Pour faire fonctionner un programme qui plante, l'option NoCache peut être utilisée. Cette option désactive tous les caches et marque toute la mémoire comme non cachable sérialisée (precis). Si la machine possède de la mémoire chip 32 bits, cela restera plus rapide que sur un A500 de base.

Pour améliorer la vitesse d'un programme installé, certaines options peuvent être positionnées pour activer les caches. Ces options sont prioritaires par rapport aux réglages du slave. Sur un 68020, l'option Cache peut être positionnée. Sur un 68030, l'option DCache peut être également utilisée, et elle inclut l'option Cache. Sur un 68060 il y a des options supplémentaires: BranchCache, StoreBuffer et SuperScalar. L'option ChipNoCache/S permet d'améliorer les performances sur68040 et 68060, voir ci-dessous.

Cachabilité de la mémoire chip
La cachabilité peut être réglée non seulement par le processeur lui-même (CACR) et les réglages MMU, mais également par du matériel externe. Le processeur signale sur le bus quand il tente de cacher un accès. De même, un périphérique externe peut envoyer un signal au processeur (après qu'une adresse ait été placée sur le bus d'adresse pendant un accès mémoire) lui demandant à ce qu'un accès ne soit pas caché.
Le mécanisme qui signale au processeur que la mémoire est cachable ou non est (d'après ce que je sais) utilisé sur tous les Amigas et cartes CPU qui contiennent un CPU 68030 ou supérieur (parce qu'ils possèdent un cache de données). Les zones affectées sont la totalité de la mémoire chip et l'espace mémoire des entrées-sorties (Cia/Custom/Horloge temps réel) qui ne doivent pas être cachés par le cache de données. Cela est nécessaire afin d'éviter les incohérences, par exemple à cause des mécanismes DMA.
La réaction du processeur sur un rejet de cachabilité pour une adresse dépend des types de processeurs. Sur le 68030 il n'y a pas d'impact sur la vitesse d'accès, les données ne sont pas cachées, c'est tout. Sur le 68040, les accès en lecture sont effectuées sans perte de vitesse mais les accès en écriture (copyback) sont annulés et redémarrés sans cachabilité, ce qui donne des accés 5 fois plus lents par rapport à des adresses non cachables. Sur le 68060, les accès en lecture et écriture sont annulés et redémarrés. Les accès lecture seront 3 fois plus lents, et les accès écriture seront 5 fois plus lents.
Les problèmes cités ci-dessus sont liés aux accès donnée. Les accès instruction ne sont pas affectés et sont aussi cachables dans la mémoire chip. Il existe des matériels (buggés) qui ne tolèrent pas que les instructions soient cachés dans la mémoire chip. Sur de tels matériels, l'option ChipNoCache/S doit être utilisée pour éviter un gros ralentissement de l'exécution (les accès instruction seront 2 fois plus lents).
Vous pouvez tester ce comportement sur votre machine en exécutant Speed.Slave contenu dans le répertoire src/memory-speed de l'archive de développement.

Allocation écriture
L'allocation écriture contrôle la gestion du cache sur 68030 quand un défaut de cache se produit sur une opération d'écriture. L'allocation écriture doit être activée quand des parties du programme fonctionnent en mode utilisateur. Si le programme installé fonctionne uniquement en mode superviseur alors l'allocation écriture peut être désactivée, ce qui donne un léger avantage en termes de performances.
Cache de branchement

Le cache de branchement est disponible uniquement sur le 68060. C'est une sorte de cache instructions pour les instructions de branchement. Mais la différence avec le cache d'instructions c'est qu'il n'est pas affecté par les réglages MMU! Cela signifie que même si la page souhaitée est marquée comme non cachable, les instructions de branchement seront cachées si le cache de branchement est activé.

Amiga Infos WHDLoad et le MMU

WHDLoad et l'unité de gestion mémoire (MMU)
Le MMU se trouve sur les processeurs de la famille des 68000 suivants: MC68030, MC68040, MC68060. Il existe des versions EC de ces processeurs qui n'ont pas de MMU. Par exemple, sur les Amiga standards A4000/030, ceux-ci possèdent seulement un MC68EC030 CPU. Sur les 3ème parties de cartes accélératrices, c'est différent, renseignez-vous auprès de la documentation pour en savoir plus. Pour autant que je sache, tous les 68040/68060 construits dans les Amigas ont tous un MMU (parce que le burstmode et le port Zorro III ont besoin d'un MMU pour reloger les mémoires entrées-sorties). La différence entre un CPU (avec MMU) et une version EC ne peut se faire par software. Par conséquent, l'utilisateur doit configurer lui-même WHDLoad avec l'option adéquate.
Pour les MC68020, il existe un MMU externe appelé MC68851, pour l'instant il n'est pas supporté par WHDLoad.
Caratéristiques du MMU et son utilisation dans WHDLoad
Le but principal du MMU est de traduire les adresses logiques en adresses physiques. Ceci est requis pour la mémoire virtuelle et pour séparer l'espace d'adressage (par exemple dans un système protégé de plusieurs processus). Une autre caractéristique est de spécifier des propriétés comme le mode "Supervisor Only", protection contre l'écriture et le mode "Cache" pour chaque adresse mémoire physique (WHDLoad utilise une page de 4096 octets). WHDLoad ne transforme pas les adresses logiques en adresses physiques. Mais il utilise le MMU pour la protection de mémoire, la gestion des caches du CPU et d'autres caractéristiques (Snooping, resload_Protect#?).
Protection de la mémoire dans WHDLoad
Au début, WHDLoad scanne la liste de la mémoire et construit un arbre de traduction (translation tree) qui incluera toutes les mémoires accessibles. Il marque les adresses de mémoires suivantes comme valides et accessibles : $0...BaseMem (en utilisant les informations du Slave), $dff000...$dff200 (canaux DMA), $bfd000...$bff000 (registres CIA) et la mémoire utilisée par le Slave et WHDLoad. Si un débugger est trouvé dans la mémoire, celle-ci sera valide. Toutes les autres mémoires seront notées comme invalide, et donc chaque accès dans ces mémoires (en lecture ou écriture) produira un "Access Fault Exception" qui quittera avec un message d'erreur approprié créé par WHDLoad.
Contrôle du MMU dans WHDLoad par l'utilisateur
Il y 3 modes différents où WHDLoad affecte un MMU existant.

1.ignore MMU:
Dans ce mode, WHDLoad ne change aucun registre du MMU. Ceci peut être utile si vous avez un programme qui modifie le MMU et que vous voulez que le fonctionnement du programme reste intact (par exemple un debuggeur comme TK).
Attention: parce que WHDLoad ne contrôle plus le MMU lui-même, certains problèmes peuvent arriver. Ces problèmes peuvent causer des effondrements du système et d'autres dysfonctionnements imprévisibles. Voici une liste des risques qui existent: ◦Si Enforcer/CyberGuard ont été exécutés ou un programme similaire, ceux-ci bloqueront ou effronderont le système, car WHDLoad créera un nombre important de "Hits" chaque fois qu'il activera et désactivera l'OS. Ces "Hits" ne sont pas des bugs de WHDLoad mais des opérations normales.
◦ Les nouvelles versions de la 68060.library (à partir de la v41.1) transfèrent la mémoire $0-$1000 (la 1ère page) en mémoire Fast en utilisant le MMU, avec le mode "ignore MMU", cette adresse reste intacte, si le programme installé essaye d'utiliser cette mémoire pour n'importe quelle opération via les canaux DMA (par exemple une copper-liste dans cette mémoire), le résultat sera imprévisible, parce que le CPU lira ou écrira dans la mémoire Fast alors que la vraie mémoire Chip contiendra des données aléatoires.
◦ Si le MMU actif dépend de son "exception handler" (l'exception "Access Fault") l'option NoTrapHandler/S doit être activée sinon n'importe quelle exception produite sera prise en main par WHDLoad, et ceci quittera le programme installé.
◦ Si le MMU actif utilise la mémoire (exception handler, translation tree,...) dans la BaseMem du programme installé, tout peut s'effrondré, car la BaseMem sera écrasée pendant l'exécution du programme installé (temporairement).
◦ En général, chaque programme qui change les fonctions de base du système (en utilisant le MMU) peut être en conflit avec WHDLoad ...
2.disable MMU:
Dans ce mode, cette fonction n'est seulement possible qu'avec un 68030, le MMU sera inactif, aucune caratéristique du MMU ne sera disponible.
3.use MMU:
Dans ce mode, WHDLoad prend le contrôle total du MMU et réalise la protection de la mémoire et la gestion des caches du CPU comme expliqué ci-dessus.
Pour un 68030, le mode par défaut est disable MMU. Pour un 68040 ou 68060, par defaut, ce sera use MMU. Il y a 2 options pour contrôler le MMU. MMU/S active le MMU et doit être utilisé sur des systèmes 68030 pour activer le fontionnement du MMU. NoMMU/S désactive le MMU.

Amiga Infos Snooping

Qu'est ce c'est ?
Snooping est une caractéristique de WHDLoad qui enregistre tous les accès CPU aux registres spécialisés (Custom). Si Snoop est activé, tous les accès invalides aux registres Custom créeront un Access Fault et le programme installé sera terminé. WHDLoad affichera une fenêtre de requête expliquant les raisons de la faute.
Les regsitres Custom
Tous les accès en lecture et écriture aux registres Custom sont vérifiés. Les accès invalides sont: •accès aux registres non-existants
• accès en lecture aux registres Write Only
• accès en écriture aux registres Read Only
• accès aux registres Early Read
• accès par un octet en écriture (à l'exception de bltcon0 et aud*vol+1)
Les registres Strobe peuvent être lus et écrits. La validité des registres Custom varient en fonction des Amigas OCS (Old ChipSet - A500, A1000, ancien A2000), ECS (Enhanced ChipSet - A600, récent A2000, A3000) et AGA (Advanced Graphics - A1200, A4000). Ceci est utile pour localiser les bugs dans les anciens programmes qui causent des accès indéfinis aux nouveaux registres AGA.
Les registres CIA
Les accès des registres CIA sont seulement vérifiés en écriture. Ceci implique que les accès en lecture à des registres inexistants compris dans la zone de mémoire entre $bfd000...$bfefff ne seront pas détectés. Pour tous les accès en écriture, les valeurs seront enregistrées en interne par WHDLoad. Pour quelques registres CIA, il y a des vérifications spéciales dépendant de la valeur écrite:

adresse

registre

vérification

$bfe001

ciaa.ciapra

mettre à 1 le bit #0 Overlay est interdit

$bfe201

ciaa.ciaddra

les bits #6-7 peuvent avoir une valeur quelconque (utilisés pour le joypad), les bits inférieurs doivent contenir %000011

$bfe801

ciaa.ciatodlow

les accès en read-modify-write (ex. bchg) ne sont pas permis si le bit ALARM est mis à 1 dans ciaa.ciacrb (seulement vérifié sur 68060)

$bfe901

ciaa.ciatodmid

$bfea01

ciaa.ciatodhi

$bfed01

ciaa.ciaicr

les accès en read-modify-write (ex. bchg) ne sont pas permis (seulement vérifié sur 68060)

$bfd100

ciab.ciaprb

les bits pour MOTOR #7, SELECT #3-6 and STEP #0 doivent pas être mis à 0, les autres bits peuvent être changés; comme ceci tout accès au lecteur de disquette sera détecté

$bfd200

ciab.ciaddra

la valeur écrite doit être %11000000

$bfd300

ciab.ciaddrb

la valeur écrite doit être %11111111

$bfd800

ciab.ciatodlow

les accès read-modify-write (ex. bchg) ne sont pas permis si le bit ALARM est mis à 1 dans in ciab.ciacrb (seulement vérifié sur 68060)

$bfd900

ciab.ciatodmid

$bfda00

ciab.ciatodhi

$bfdd00

ciab.ciaicr

les accès read-modify-write (ex. bchg) ne sont pas permis (seulement vérifié sur 68060)

Comment ça marche
Si Snoop est activé, WHDLoad marque les adresses des registres Custom comme invalide/protégé en écriture dans l'arbre de traduction MMU. Donc chaque accès à un registre Custom aura comme résultat un Access Fault exception. Cette exception sera prise en main par WHDLoad. D'abord, il vérifie que l'accès est valide. Si l'accès est invalide le programme sera terminé. Si l'accès est valide et que c'est un accès en lecture, il sera émulé et l'exécution du programme continuera. Si c'est un accès en écriture, WHDLoad sauvegarde la valeur qui devait être écrite avant l'émulation.
Le programme exécuté sera ralenti car les exceptions et l'émulation prennent le dessus. Le ralentissement dépend du type de CPU, du type de mémoire chip (16/32 Bit), de l'alignement du pointeur de la pile, si la mémoire chip est 32 Bit (LongWord aligné ou non). Cela diffère aussi suivant le type d'accès (Byte/Word/LongWord, Read/Write). Sur le 68030, l'Ecriture est plus rapide que la Lecture (car pour la lecture, le stackframe est de 92 octets, pour l'écriture, 32 octets), pour le 68060, la Lecture est plus rapide parce que l'émulation pour l'écriture est plus complexe.
Le mode Fast Snoop
L'option Snoop/S active le Snooping rapide. Les accès à la lecture ne seront pas vérifiés. Aucune vérification spéciale ne sera effectuée. Ce mode est utile seulement pour recueillir les informations contenues dans les registres custom, ex. pour capturer l'image de l'écran en utilisant SP.
Le scanner de la Copper-Liste
Depuis la version 13 de WHDLoad, les copper-listes sont aussi vérifiées. Le scanner sera activé en accès écriture aux registres coplc, si le copper dma est activé, ou quand le programme installé active le copper dma en inscrivant dans le registre dmacon. Le scanner suit la copper-liste et valide toutes les instructions Move en appliquant les restrictions causées par l'option Snoop (OCS/ECS/AGA). Les instructions Skip et Wait (sauf CEND) seront ignorées. Quand il trouve des entrées invalides, le programme installé sera terminé. Le scanner suit les branches (copjmp), détecte les boucles et vérifie jusqu'à 16 sous-listes. Les moves dans les copper-listes seront sauvegardés dans le fichier interne des registres Custom créé par WHDLoad quand il sera quitté. Le scanner est inactif dans le mode Fast Snoop.
Vérification de la priorité du Blitter
Quand l'option ChkBltHogs/S est activé, WHDLoad vérifiera que le programme installé n'active pas le bit BltHog en inscrivant dans le registre dmacon. La priorité du Blitter peut causer des problèmes sur certain matériel en conjonction avec de larges opérations Blitter (tous canaux utilisés).
Vérification de la taille du Blitter
Quand l'option ChkBltSize/S est activé, WHDLoad vérifiera que le travail du Blitter n'accède pas à la mémoire en dehors de la BaseMem. Pour les accès en écriture à bltsize or bltsizh, il vérifiera si le mode ligne est activé dans bltcon1. Si le mode ligne est activé, il annulera la vérification de la taille. Autrement WHDload calculera le premier et le dernier mot d'accès pour chaque canal DMA activé. Si une adresse est en dehors de la BaseMem, le programme sera terminé par un message. Le calcul a été conçu pour fonctionner avec tous les modes (montant/descendant, modulos positive/négative, modulos/pointeur impairs).
Souvenez-vous que le mode "line drawing" ne sera pas vérifié et que tous les registres du blitter peuvent aussi être inscrits par le copper, si copcon est activé.
Vérification du Blitter Wait
Quand l'option ChkBltWait/S est activé, WHDLoad utilisera une instruction trace pour vérifier que le programme installé attend correctement que le blitter ait fini son travail avant d'en commencer un autre. Une variable interne sera utilisée, elle représente l'état de marche du Blitter. La variable est activée s'il se produit un accès en écriture dans bltsize ou bltsizh et effacée quand il y a un accès en lecture dans dmaconr. A chaque écriture dans le registre du Blitter, la valeur de la variable interne est vérifiée, si l'état est un travail du Blitter, le programme installé sera terminé et WHDLoad rapportera la ligne de code du dernier travail du Blitter et l'accès actuel.
Il y a 2 goulets majeurs. Le premier est l'utilisation du Blitter via le copper ne sera pas vérifiée et le second est l'emploi des interruptions du Blitter qui provoquera des erreurs superflues dans la routine de vérification.
Futur
L'implémentation des caractéristiques comme le Freezing et l'Iconifing est en projet. Pour cela, Snoop est primordial. Par conséquent, il est recommandé aux auteurs d'installs de vérifier leurs installs avec l'option Snoop pour garantir une compatibilité future.
Ce que vous avez besoin
Un MMU est nécessaire pour utiliser les options Snoop. Ainsi WHDLoad doit utiliser le MMU, par conséquent l'option MMU/S doit être activée sur les machines à base 68030.
Limitations
• 68020 + 68851 ◦Ce hardware n'est pas supporté actuellement

• 68030 ◦Aucune limitation connue

• 68040 ◦Ce hardware n'est pas supporté actuellement

• 68060 ◦L'instruction movem peut accéder à un registre invalide sans créer un Access Fault exception, ceci est possible car seulement le 1er accès sera vérifié.
◦ Move <Cia/Custom register>,sr ne sera pas exécuté correctement, s'il veut changer l'octet superviseur du registre d'état, l'octet restera inchangé.
◦ N'importe quel(ssp)+ ou -(ssp) en conjonction avec un accès en écriture à un registre Cia ou Custom ne peut pas être pris en main à cause des problèmes de stackframe. WHDLoad détectera ce genre d'accès et quittera avec un message approprié.
◦ Les instructions ne doivent pas accéder à plus d'un registre snoopé à la fois, comme cette instruction move.b ($dff006),($bfd800) ne peut pas être prise en main. Si ce genre de code apparaît, WHDLoad affichera une requête d'Access Fault.

Amiga Infos Utilisation de resload Protect#?

Théorie
Dans certaines situations, il est très utile d'être informé quand le programme installé accède à certaines zones de la mémoire. Avec la fonction resload_Protect#?, il est possible de protéger certaines parties de la mémoire contre la lecture et/ou l'écriture du processeur. "Protéger" veut dire que chaque accès à une région de la mémoire protégée créera un Access Fault exception avec comme résultat un message approprié généré par WHDLoad. Si vous déclarez une partie de la mémoire comme protégée en utilisant la fonction resload_Protect#? WHDLoad modifiera les "affected page descriptor" dans l'arbre de traduction MMU. Maintenant chaque accès à cette page protégée, le CPU provoquera un Access Fault exception. Cette exception est traitée dans WHDLoad qui en vérifiera la raison. Si c'était un accès à une page protégée mais que l'accès ne touche pas à la mémoire protégée, cet accès sera émulé, et le programme continuera à fonctionner normalement. Autrement, WHDLoad quittera avec un message approprié. Si l'accès était un accès à des "instructions stream" (par ex. le CPU essaye de charger le code), ce sera toujours émulé, en d'autres termes, les fonctions resload_Protect#? affecteront seulement la lecture et l'écriture des données. Le fait est que chaque accès à une page protégée (actuellement la taille de la page est de $1000) produira un Access Fault, même si la partie protégée n'est que de 1 octect, en conséquence la vitesse d'exécution du programme pourra ralentir énormément. Spécialement si une partie du code se trouve dans la même page. Si le programme dépend de la vitesse d'exécution, il se peut que le programme ne fontionnera pas avec de la mémoire protégée.
Exemple: checksums en dehors du code
Si vous installez un jeu en utilisant WHDLoad, vous devez patcher les routines originales du loader dans le jeu, dans un même temps, elles utiliseront WHDLoad pour charger les données du jeu. Quelques jeux exécutent des sommes de contrôle en dehors du code pour détecter si le code original a été modifié. Ces détections peuvent être dures à trouver. Mais rien n'est plus facile qu'en utilisant les fonctions resload_Protect#? dans WHDLoad. Ce que devez faire n'est d'autre que de protéger en lecture les octets que vous avez changés dans le code du jeu. Maintenant chaque routine qui essayera de calculer un checksum et lira votre code patché, provoquera un Access Fault. Vous saurez donc où la routine se trouve.
Limitations
Vous ne devez pas protéger une page de mémoire où le pointeur de pile superviseur (SSP) se trouve. Si vous faites cela, et qu'une exception se produit, il y aura un "Double Bus Fault" car le CPU sera incapable d'écrire le stackframe de l'exception. Après un Double Bus Fault, un reset de l'ordinateur doit être effectué. WHDLoad s'assure qu'il n'y pas de conflit entre la zone protégée et le SSP et quitte, mais il ne peut rien faire si le changement de SSP se fait par la suite. • 68020 + 68851 ◦Ce hardware n'est pas supporté actuellement

• 68030 ◦Les transfers de 3-Byte ne sont pas supportés et provoqueront un vrai Access Fault, de tels transfers se produisent s'il y a un accès à un mot long à une adresse impaire dans une frontière de page (ex. "tst.l ($fff)" où la page est protégée à partir de $1000), parce que c'est une instruction invalide sur 68000, vous ne la verrez probablement pas.
◦Les transfers bloqués causés par tas, cas ou cas2 ne sont pas supportés et créeront un vrai Access Fault, ce n'est pas un problème car les transferts bloqués ne sont pas supportés par le hardware Amiga.

• 68040 ◦ Ce hardware n'est pas supporté actuellement

• 68060 ◦ L'accès aux données non alignées ne sont pas supportés et provoqueront un vrai Access Fault, un tel accès est un accès qui couvre 2 pages (dont une est au moins protégée), par exemple "tst.l ($ffe)" affecte la page $0..$fff et la page $1000..$1fff, cette limitation est un vrai problème et fait que la fonction resload_Protect est parfois inutile. J'essayerai peut-être de supporter ceci mais c'est difficile.
◦ L'accès aux instructions stream non alignés ne sont pas supportés et créeront un vrai Access Fault si toutes les deux pages affectées sont protégées. La plupart du temps, ceci devrait être évité.
◦ Les transfers bloqués causés par tas, cas ou cas2 ne sont pas supportés et créeront un vrai Access Fault, ce n'est pas un problème car les transferts bloqués ne sont pas supportés par le hardware Amiga.
◦ Les instructions qui se trouvent dans la page protégée (et donc émulés) et les accès à l'octet superviseur du registre d'état sera mal exécuté, ces instructions verront toujours le bit du mode trace à 1 et les masques d'interruption à 7, aucune modification de l'octet superviseur ne sera faite (l'octet superviseur restera intacte).
◦ Les instructions movem peuvent accéder à une mémoire sans provoquer un Access Fault exception, ceci est possible car seulement le 1er accès sera vérifié.
◦ Move16 et les opérations à double précision (FPU) ne sont pas supportés et créeront un vrai Access Fault.
◦ Un "move (mem),(mem)" avec un chevauchement de l'adresse de la source et de la destination généreront un Access Fault car le "non alignement" ne sera pas exécuté correctement. Par exemple "move.l ($ffc),($ffe)" où la page $1000..$1fff est protégée et la mémoire avant exécution contient ($ffc)=$11112222, ($1000)=$33334444, après exécution, $1000 contiendra $11114444 au lieu de $22224444

Amiga Infos Moniteurs système
Il existe bon nombre de moniteurs système logiciels. L'utilisation de tels outils s'avère très utile pendant le développement et le debug des slaves et du programme installé. WHDLoad est directement interfacé avec HRTMon et ThrillKill. D'autres peuvent être utilisés avec l'option NoTrapHandler/S (cela présente des inconvénients bien sûr). Si vous voulez une interface directe pour un autre moniteur, contactez-moi et si c'est possible, je le ferai. Au démarrage de WHDLoad, celui-ci vérifie si l'un des moniteurs connus est actif. S'il en trouve un, WHDLoad effectue des opérations spéciales. Si le MMU est utilisé par WHDLoad, celui-ci déclare la mémoire utilisée par le moniteur comme WriteThrough cachable. Pendant que le jeu ou la démo tourne, WHDLoad redirige toutes les NMI (exceptions non masquables) vers le vecteur NMI récupéré de la table des vecteurs du moniteur. De plus, si le VBR est relogé par WHDLoad (NoVBRMove/S n'est pas positionné et le processeur est au moins un 68010) il compare la "FreezeKey" avec la valeur actuelle du clavier à chaque interruption. Si la valeur correspond, WHDLoad traite le clavier, transforme la structure de la pile en stackframe NMI et appelle le moniteur par son handler NMI.
HRTMon
La détection en mémoire est relativement sûre. Je pense que cela fonctionne pour les versions à venir. Attention si le MMU est utilisé par WHDLoad: ne pas accéder à des zones en dehors des zones mémoires valides (mémoire de base, extension, slave, ...). Cela plante car HRTMon ne gère pas les exceptions de violation d'accès.
Dans le programme de préférence HRTmonPrefs, vous devez activer l'option 'No VBR move'. Sinon vous ne pourrez pas entrer dans le monitor lors de l'exécution de WHDLoad.

Après avoir été dans HRTMon, le programme sous WHDLoad peut afficher un écran graphique incorrect. Ceci peut arriver car HRTMon écrit quelques informations dans les registres DMA. Vous pouvez contourner ceci en disant à HRTMon d'écrire la valeur adéquate, par exemple utilisez 'e $100 $5200' pour afficher un écran de 32 couleurs avant de retourner dans le programme installé.

La version d'HRTMon (built) dans WinUAE peut seulement être détectée si HRTMon a été au mois une fois activé avec la touche (PgUp). Dès la 1ère activation, le vecteur NMI sera mis et WHDLoad pourra localiser le moniteur.

ThrillKill
Il n'y a pas de signature utilisable dans le moniteur, aussi, des comparaisons de code sont utilisées. Du coup, la détection ne fonctionnera pas avec d'autres versions.
Amiga Infos Calcul du checksum CRC16

Ce programme calcule la somme de contrôle CRC-16 d'une partie ou de la totalité d'un fichier. A utiliser dans les scripts d'installation qui ont besoin d'identifier la version d'un fichier afin d'installer, par exemple, l'un ou l'autre slave, etc. Il retourne la même valeur que celle calculée par resload_CRC16, ce qui peut être également utile lors du développement du slave.
Installation
copier dans C: ou un répertoire d'outils similaire
Options

FILE/A,OFFSET/K/N,LENGTH/K/N

 

FILE/A

fichier dont on veut calculer le checksum
exemple "S:Startup-Sequence"

 

OFFSET/K/N

offset de démarrage dans le fichier
par défaut début du fichier
exemple "OFFSET=11264" pour démarrer à la piste 2 d'un fichier image disque standard

LENGTH/K/N

nombre d'octets utilisés pour calculer la somme de contrôle
par défault taille du fichier
exemple "LENGTH=1024"

Code de retour
Le CRC16 est retourné comme code de retour du programme.

Amiga Infos Le créateur d'images disque

DIC * Le créateur d'images disque

DIC est un outil qui permet de créer une image fichier à partir d'une disquette. DIC lit le contenu de la disquette sur le device associé (ex: "trackdisk.device" pour DF0:) et écrit les données dans un fichier du répertoire courant. Le nom de l'image créée sera "Disk.1", où "1" est le numéro du disque lu. Le numéro du disque sera incrémenté aprés chaque lecture. Avec l'option Name, il est possible de donner un nom différent au fichier.

DIC peut aussi lire à partir d'autres devices comme RAD:, PC0: or DS0: et les disques haute densité.

Si une piste de la disquette ne peut pas être lue correctement et que DIC a été démarré sur un terminal interactif (ex: CON:), il demande s'il doit sauter la piste défectueuse ou essayer de la relire. Sur des terminaux non interactifs, ces pistes sont sautées par défaut.
Pour les pistes sautées, la zone correspondante de l'image est remplie avec le motif "TDIC". Il est ainsi possible de retrouver l'erreur plus tard.

DIC peut également lire des disques partiellement en utilisant l'option SIZE/K/N. Si cette option est utilisée, DIC n'écrit pas les données aprés la taille spécifiée. Cela peut s'avérer utile si les dernières pistes ne sont pas utilisées.

Il est possible de sauter des pistes en utilisant l'option SKIPTRACK/K/N. Cela est très utile pour créer des images des disques qui possèdent une protection (ex: Copylock RN sur piste 1).

Si l'option PEDANTIC/S est positionnée, DIC quitte immédiatement s'il rencontre une piste illisible.

DIC peut être interrompu à tout moment avec Ctrl-C.

Installation
Le copier dans C: ou un répertoire similaire
Utilisation

Pour utiliser DIC interactivement:
• ouvrir un Shell
• aller dans le répertoire où les images doivent être stockées
• taper "DIC" suivi de RETURN
• insérer les disques et suivre les instructions données par DIC
• après que le dernier disque ait été lu, interrompre DIC avec Ctrl-C
Pour utiliser DIC dans un script d'installation, utiliser les options FD=FIRSTDISK/K/N, LD=LASTDISK/K/N et PEDANTIC/S. Pour les disques avec des protections physiques utiliser SKIPTRACK/K/N. Si possible, c'est vraiment sympa d'utiliser SIZE/K pour économiser de l'espace disque à travers le monde ;-).
Options

DEVICE,NAME,SKIPTRACK/K,SIZE/K,FD=FIRSTDISK/K/N,LD=LASTDISK/K/N,PEDANTIC/S

 

DEVICE

le device à partir duquel DIC lit les disques
par défaut "DF0:"
exemple "RAD:"

 

NAME

nom du fichier à créer, si précisé, DIC ne nomme pas l'image "Disk.1" et ainsi de suite, mais utilise le nom spécifié. Cette option positionne FIRSTDISK/K/N et LASTDISK/K/N à 1, ce qui signifie qu'un seul disque sera lu.

SKIPTRACK/K/N

les pistes spécifiées ne sont pas lues, la zone de l'image disque correspondante est remplie du motif "TDIC", la table suivante montre des exemples pour illustrer la souplesse de la syntaxe pour sauter les pistes

liste

pistes concernées

 

1-5

1,2,3,4,5

 

2,90

2,90

 

2*2

2,4,...,156,158

 

10-20*5

10,15,20

 

1-5,7,99-104*2

1,2,3,4,5,7,99,101,103


SIZE/K

la taille de l'image à créer, utile s'il y a une zone inutilisée à la fin du disque, si la taille est supérieure à la taille de l'image physique, elle est ignorée.

FD=FIRSTDISK/K/N

numéro du premier disque
par défaut "FD=1"
exemple "FD=0"

 

LD=LASTDISK/K/N

numéro du dernier disque
par défaut "LD=999999"
exemple "LD=3"

 

PEDANTIC/S

Si demandé, DIC peut quitter immédiatement si une piste ne peut pas être lue. A utiliser dans les scripts d'installation.

Code de retour
Le code de retour est mis à 0 si tous les disques de FD à LD ont été lus avec succès. Sinon, DIC retourne 10.

Amiga Infos Find Access

Find Access * Trouver l'accès à une adresse mémoire
Ce programme charge le fichier spécifié et recherche les accès à une adresse donnée. Il trouve toutes les références absolues et relatives en 8, 16 et 32 bits. J'ai écrit ce programme pour analyser les fichiers coredump. Similaire à la commande FA des freezers (Action Replay) mais il ne désassemble pas l'accès. Il affiche uniquement le dump hexadécimal.
Installation
FindAccess est uniquement présente dans l'archive de DEVELOPPEUR, pas dans l'archive UTILISATEUR
A copier dans C: ou un autre répertoire d'utilitaires
Utilisation
J'utilise l'alias suivant (présent dans mon S:Shell-Startup) pour rechercher dans le dernier dump mémoire écrit par whdload:
alias fa FindAccess C:.whdl_memory
je peux ainsi ouvrir un shell et taper par exemple:
fa $1500
j'obtiens la sortie suivante:
FindAccess 1.2 (17-Jan-99 14:45:18) by Bert Jahn
loading file Workbench:CE/.whdl_memory
scanning accesses to $15000 (86016) file: $0-$80000
Relative Word at $ 14240 -> 06C00000 07C00000 0DC0 00000CC0 000004C0

Options

FILE/A,ADDRESS/A,ORG

FILE/A

nom du fichier à examiner

ADDRESS/A

l'adresse de l'accès recherché, il est possible d'utiliser des expressions simples comme "$5000" = "20480" = " -$Ff +-33+ 19512+$4e8" (prefixe "$" pour les nombres hexadecimaux, les opérateurs reconnus sont "+" et "-", unaires et binaires)

ORG

l'adresse logique de départ du fichier, si non spécifiée $0 est utilisé. Les expressions peuvent être utilisées, comme dans ADDRESS/A

Amiga Infos Installation de secteurs de boot

InstallBB * Installation de secteurs de boot
InstallBB lit ou écrit des secteurs de boot à partir ou sur un disque. Les secteurs de boot sont gérés comme des exécutables. En écriture, il préserve le système de fichiers du disque destination en lisant le secteur de boot et en fusionnant l'identifiant (DOS0, DOS1 ...) avec le nouveau. Le checksum du secteur de boot est calculé automatiquement.
Installation
InstallBB est uniquement contenu dans l'archive DEVELOPPEUR, pas dans l'archive UTILISATEUR.
Le copier dans C: ou un répertoire similaire
Options
PROGRAM/A,UNIT/K/N,WRITE/S

PROGRAM/A

le fichier exécutable qui doit être lu ou écrit, doit être spécifié

UNIT/K/N

le numéro du lecteur de disquette
par défaut: 0 (DF0:)

WRITE/S

Si non positionné, le secteur de boot est lu a partir du disque et sauvé dans le fichier. Si positionné, le programme spécifié est écrit sur la disquette.

Amiga Infos Image To Disk

ITD * Image To Disk
C'est un utilitaire pour copier un fichier image sur une disquette.
Installation
ITD se trouve seulement dans l'archive DEV, non dans l'archive USR.
Copiez-le dans le C: ou dans un emplacement similaire.
Options

FILE/A,DEVICE,FORMAT/S

FILE/A

nom de l'image du disque à écrire

DEVICE

le nom du device que ITD écrira le disque
defaut "DF0:"
exemple "RAD:"

FORMAT/S

si activé, le disque sera formatté
Code de retour
0 si réussite, sinon 20.
Généralité
ITD peut écrire sur n'importe quel trackdisk device. Pour éviter certains problèmes (par ex. altération de données sur votre disque dur), il ne peut inscrire sur des devices plus de 2,000,000 octets pour le moment. Il ne vérifiera pas le disque (s'il est en bon état), vous êtes prévenus! Si l'image est plus petite que le device, vous receverez un message d'attention, ITD ne touchera pas aux pistes restantes dans ce cas. Si l'image est plus grande, vous receverez aussi un message et ITD écrira les données qui peuvent être inscrites sur le device.

Amiga Infos The patcher
The Patcher * Patcher les programmes
The Patcher est un programme universel pour modifier les fichiers ou les disques. Il était l'utilitaire préféré pour les installs WHDLoad pour créer les fichiers ou les images de disques à partir de disques originaux avec son propre format de disque, au tout début de la réalisation des archives de WHDLoad. Maintenant, le programme pour cette tâche est RawDIC. Pour en savoir plus sur The Patcher, vous pouvez lire la documentation, qui se trouve aussi dans l'archive de The Patcher fournie avec l'archive DEV de WHDLoad.
The Patcher a besion de la police de caractère ruby.8 ! Vous trouverez cette police sur les disques originaux de votre Workbench. Si cette police est manquante, The Patcher ne fonctionnera pas.

Caractéristiques:
• choix facile du lecteur source
• la routine du disque ne peut pas échouer même avec un CPU rapide
• fonctionne sur les amigas-escom (caractéristique du lecteur de disquette)
• multi-tâches pendant la lecture (possibilité d'installer 2 jeux en même temps avec 2 lecteurs de disquette)
• affiche la piste pendant la lecture (utile pour les rapports de bugs) et problèmes d'image (erreur de lecture, disque plein etc)
• peut être débuggé avec un débugger
Inconvénients: •environ 6 à 8 h d'initiation pour un programmeur
• utilise (peut-être) beaucoup de mémoire ~1 méga-octet, mais cela dépend surtout de l'image du disque
Amiga Infos RawDIC
RawDIC * Créateur d'image de disque non standard
RawDic est l'utilitaire de prédilection pour les installs de WHDLoad pour créer les fichiers ou les images disques originaux avec leur propre format. Pour en savoir plus au sujet de RawDIC, lisez sa documentation, qui se trouve dans l'archive DEV de WHDLoad.
Amiga Infos Reloc * Redisposition des exécutables

Reloc * Redispositon des exécutables
Un petit outil pour transférer un fichier standard AmigaDOS exécutable dans une adresse absolue et en le sauvegardant en un fichier de données. Ce programme était requis par les premières versions de WHDLoad afin de pouvoir manier les fichiers exécutables. A partir de la version 8.0 de WHDLoad, la fonction resload_Relocate peut être utilisée à la place.
Installation
Reloc est fourni seulement dans l'archive DEV, non dans l'archive USR.
Copiez-le dans le C: ou dans emplacement similaire.
Options
INPUTFILE/A,OUTPUTFILE,ADR/K,QUIET/S

INPUTFILE/A

le fichier exécutable qui doit être transféré, cette option doit être spécifiée

OUTPUTFILE

le nom du fichier à écrire, si ce n'est pas specifié, le fichier source sera écrasé

ADR/K

l'adresse de départ pour la redisposition du fichier, si ce n'est pas spécifié l'adresse $400 sera utilisée, vous pouvez utiliser les expressions comme "$5000" = "20480" = " -$Ff +-33+ 19512+$4e8" (prefix "$" pour les nombres héxadecimaux, les opérations supportées sont "+" et "-")

QUIET/S

désactive toutes les sorties de texte, sauf les erreurs de messages, activez cette option lors de l'utilisation d'un installer
Code de retour
Le code de retour est 0 si tout est OK, autrement c'est 10.
Généralité
Les HUNKs de l'exécutable sont copiés dans le même ordre que dans le fichier converti. Les BBS-HUNKs prennent la taille réelle. Les HUNKs non supportés sont ceux introduits avec l'AmigaDOS 2.0 (par ex. RELOC32_SHORT).

Amiga Infos Capture d'écrans

SP * Capture d'écrans
Utilitaire de capture d'écrans à partir du fichier dump créé par WHDLoad.
Installation
SP se trouve uniquement dans l'archive DEV, non dans l'archive USR.
Copiez-le dans le C: ou dans un emplacement similaire.
Usage
Tout d'abord, un fichier dump doit être créé. Lancez le programme dont vous voulez capturer l'écran. Il doit être exécuté avec les options Snoop/S, Expert/S et DebugKey/K/N activées. Quand l'image que vous voulez capturer apparait, appuyez sur la touche DebugKey. WHDLoad sauvegardera le fichier dump. Maintenant, utilisez SP suivi d'un nom de fichier comme argument. SP chargera le fichier et essayera de capturer l'écran.
Options

OutputFile/A,Cop/K,CS=CopStop/K,Width/K,Height/K,con0/K,mod1/K,mod2/K,pt1/K,pt2/K,pt3/K,pt4/K,NoCopLst/S

OutputFile/A

nom du fichier de l'image à sauver

Cop/K

change l'adresse de la 1ère copper-liste, si vous voulez une autre adresse que celle contenue dans le fichier dump

CS=CopStop/K

cette option spécifie l'adresse de fin de la copper-liste. Ceci doit être utilisé si plusieurs écrans se trouvent dans l'image

Width/K

modifie la largeur de l'image, cela n'affectera pas les valeurs des modulos!

Height/K

modifie la hauteur de l'image

con0/K

remplace le registre bplcon0 contenu dans le fichier dump

mod1/K,mod2/K

remplace les registres bplmod1/bplmod2 contenus dans le fichier dump

pt1/K,pt2/K,pt3/K,pt4/K

remplace les registres bplpt1,2,3,4 contenus dans le fichier dump

NoCopLst/S

désactive la copperlist du fichier dump

Amiga Infos Bugs
Bugs connus

Problèmes généraux
• Il existe un problème général avec les périphériques connectés à l'Amiga qui génèrent des interruptions à des moments aléatoires ou réguliers. Un exemple est ma carte réseau (Hydra). Si ma pile TCP/IP tourne, la plupart des programmes installés se bloquent après un court laps de temps parce que la carte crée des interruptions PORTS (le même type d'interruptions que celles créées par le clavier) auxquelles le programme installé ne peut pas répondre correctement. En effet, si tôt que la requête a été acquittée avec un RTE, une nouvelle interruption se produit. Pour éviter ce problème, la pile TCP/IP doit être arrêtée avant de démarrer WHDLoad.
Les piles USB tombent dans la même catégorie (utiliser "AddUSBHardware REMOVE ALL" pour Poseidon) et l'interruption Voodoo des cartes Mediator (vous devez positionner "VoodooInt = No"). A partir de la version 16.8 de WHDLoad, les interruptions créées par les cartes du Mediator seront gérées par WHDLoad, aucune option n'est requise.
L'utilisation de la version 1.36 ou supérieure de Picasso96 ainsi que la carte graphique Spectrum créent des insterruptions. Pour éviter cela, une version antérieure doit être utilisée ou bien que le pilote de la carte soit désactivé.
• Si vous avez des erreurs de lecture/écriture concernant les fichiers, vérifiez que vos disques durs sont correctement configurés. WHDLoad lit des morceaux de données (>1MB) qui peuvent se montrer incorrects alors que d'autres applications auront l'air de fonctionner sans problème. Vérifiez aussi que les paramètres du MaxTransfer et du Mask sont correctement mis. Comme valeur sûre, utilisez pour le MaxTransfer = 0x0FE00 et pour le Mask = 0x0FFFFFC. Cela concerne spécialement les cartes insérées dans le port PCMCIA et les adaptateurs IDE-CF.
D'autres problèmes peuvent venir de l'allocation mémoire. Certains configurations ont des soucis avec la mémoire allouée en mode Reverse. Dans de tel cas, activez l'option NoMemReverse pour que WHDLoad n'utilise pas ce mode.
• Si vous utilisez le programme Picasso96, vous devez être sûr que l'option FakeNativeModes est mise sur NO (tooltype du driver du moniteur). Sinon, il pourrait y avoir des erreurs graphiques et peut-être des plantages.
• Quelques configurations hardware n'acceptent pas les fonctions liées au MMU de WHDLoad. Les systèmes concernés sont tous à base de 68030. L'option MMU/S ne doit pas être activée sur ces systèmes. Si cette option est positionnée, WHDLoad bloque la machine. Les matériels suivant sont connus pour poser des problèmes: cartes accélératrices "Apollo A630", "Apollo 1230", "Elbox 1230" et "Magnum MK2".
• Il semblerait qu'il y ait des problèmes avec les extensions de mémoire PCMCIA sur A1200. WHDLoad peut afficher des requêtes d'erreur telles que Dos error #235 (exécutable non valide) pendant le chargement du slave. Les raisons peuvent être que la limite de mémoire qui se trouve dans la liste de mémoires du système serait incorrecte car WHDLoad essaye d'allouer la mémoire en utilisant le drapeau MEMF_REVERSE et reçoit une valeur invalide en retour (pointeur sur une mémoire inexistante). Cela peut arriver avec certains types de carte mémoire ou sur une configuration spécifique.

Concernant les développeurs

• L'opération de permutation entre le système d'exploitation et le programme installé n'est pas fiable à 100%. Le problème est que la plupart des registres spécialisés et certains registres CIA ne peuvent être lus et par conséquent ne peuvent être sauvegardés et restaurés. WHDLoad lui-même ne change pas ces registres, mais quand il commute du programme installé vers l'OS (par exemple pour charger un fichier du disque), l'OS peut changer certains de ces registres non restaurables. Si le programme installé a besoin que les registres demeurent inchangés, cela peut poser des problèmes. Il est connu que l'OS change au moins cop2lc, bltafwm et bltalwm, et peut être plus. Pour contourner ce problème, il existe une possibilité de restaurer les registres modifiés pendant la séquence de commutation. Se reporter à WHDLTAG_CBSWITCH_SET pour plus d'informations.
Amiga Infos FAQS

Questions fréquemment posées (FAQ)

Question:

Ok, j'ai récupéré l'installer et il y a des problèmes soit avec l'installation ou le démarrage. Je suis sûr d'avoir tout fait sans erreurs. Alors?

Réponse:

Un tel comportement défecteux peut être dû à plusieurs raisons: •Tooltypes manquants/erronés
Certains patches ne fonctionnent pas bien ou pas du tout sur certains systèmes si certains tooltypes ne sont pas positionnés. Consultez la documentation pour savoir quels tooltypes sont disponibles. Des exemples de tooltypes qui peuvent aider à résoudre les problèmes: NoCache, NoVBRMove, NoAutoVec, PAL/NTSC, NoMMU.
• le fichier readme inclus dans le package d'installation
Celui-ci explique souvent les problèmes spécifiques, les touches ou les tooltypes qui doivent être positionnés.
• mauvaise version de WHDLoad
La plupart des installs nécessitent la toute dernière version de WHDLoad et ne fonctionnent pas sur une version plus ancienne. La règle d'or est d'avoir toujours la dernière version installée.
• votre machine est incompatible
En particulier un CPU 68040/060 CPU ou certaines cartes accélératrices ou un autre matériel peut poser des problèmes. Essayez de déconnecter les matériels suspects et relancer le programme installé.
• version non prise en compte
Beaucoup de jeux commerciaux ont été vendus sous différentes versions (prix normal/reédition budget/coverdisk, PAL/NTSC...). Bien sûr un install ne peut fonctionner que s'il a été écrit spécifiquement pour une version particulière d'un jeu. Si vous possédez une version différente du même jeu, cela ne fonctionnera pas. Dans ce cas, le seul moyen est de contacter l'auteur de l'install et de lui demander de prendre en compte votre version. Dans la plupart des cas, l'auteur vous entend et modifie l'install pour prendre en compte votre version, et ceci en quelques jours.
• vieille version de l'install
Dès qu'un bug est découvert et supprimé, la nouvelle version de l'install est rendue publique sur le site de WHDLoad. Récupérez toujours la dernière version de l'install. Veuillez noter que la dernière version n'est pas toujours celle présente sur Aminet. Certains installs ne sont même pas uploadés sur aminet, et la plupart sont uploadés avec quelques semaines de retard!
• vous avez découvert un bug
Bien que tous les installs sont testés avant d'être rendus publics, un bug peut s'être subrepticement infiltré. Si vous pensez avoir découvert un bug, faites un compte rendu détaillé du problème à l'auteur de l'install. Pour cela, utilisez le formulaire de soumission de bug. Essayez de décrire votre problème aussi précisément que possible. Si nous n'avons pas connaissance des bugs, nous ne pouvons pas les corriger. Note: le seul endroit valable pour les problèmes ou les rapports de bugs est le formulaire de soumission de bug et non pas comp.sys.amiga.games parce que tous les développeurs ne le lisent pas forcément.

Question:

J'ai un jeu dont je ne trouve pas d'installeur.

Réponse:

Faites une liste de vos requêtes. Vous pouvez aussi inclure des jeux qui ont déjà une installation sur disque dur (fichiers copiables et/ou installation fournie avec le jeu) qui ont des problèmes (même avec des problèmes d'affichage ou pas d'option pour quitter), même s'il n'est pas sûr qu'ils soient traités en priorité. Souvenez-vous qu'un codeur est capable de traiter environ 25 jeux par an. Indiquez lesquels sont vos favoris avec un système de priorités (ex: ! et +) et ceux que vous n'aimez pas trop (-), et vérifiez vous-même quels jeux possèdent déjà une installation WHDLoad.

Question:

Est-il possible d'utiliser WHDLoad pour installer une démo ou un jeu qui utilise le système d'exploitation ?

Réponse:

En général il n'est pas possible pour une démo ou un jeu qui fonctionne sous WHDLoad d'accéder à les fonctions de l'OS extérieur, à partir duquel WHDLoad a été démarré. En tant qu'auteur du slave, vous devez intercepter tous les accès au système. Soit vous désactivez ces accès ou vous les émulez. Pour l'émulation, les packages KickEmu sont disponibles. Ils existent dans des versions différentes (ex: 'Sources/whdload/kick13.s'). Si on utilise l'image d'un vrai kickstart, on dispose d'un environnement système complet dans la mémoire de WHDLoad. Il existe un fichier ReadMe à propos de ces fonctionnalités appelé 'Sources/whdload/kick.readme'.

Question:

Si WHDLoad utilise l'option MMU (l'option NoMMU/S n'est pas positionnée et sur 68030 l'option MMU/S est positionnée il y a des petites erreurs graphiques et sonores (ex: Beast 2). Un bug?

Réponse:

Cela se produit pendant le chargement. La raison est que WHDLoad doit désactiver les interruptions pendant les chargements pendant un court moment si la MMU est utilisée. Ce comportement ne peut pas être changé.

Question:

Quand j'utilise le tooltype NTSC, WHDLoad provoque un Guru.

Réponse:

Il y a un bug dans MCP 1.30 au niveau du gestionnaire d'écrans, ce qui fait planter l'appel WHDLoad à OpenScreenTags. Désactiver le gestionnaire d'écrans (ScreenManager) pour résoudre ce problème.

Question:

Quand je lance des jeux, ils tournent plus vite que la normale (la musique est bizarre) et le bas de l'image n'est pas affichée. J'ai essayé les tooltypes PAL & NTSC mais sans succès.
Réponse:

Si vous utilisez le pilote de moniteur Voodoo, désactivez "FakeNativeModes" dans les tooltypes du pilote du moniteur.

Un utilisateur demande:

A propos de l'enregistrement de WHDLoad, je pense qu'il est légitime de demander un enregistrement payant, mais c'est injuste dans mon cas, parce que les vieux slaves WHDLoad fonctionnent sans enregistrement et n'affichent pas le requester.
Mais récemment, j'ai trouvé un original que je cherchais depuis longtemps: Shadowlands. J'ai installé le jeu avec l'install WHDLoad, mais sans la version enregistrée, il n'est pas possible de sauvegarder les parties. Il n'y a même pas l'option pour sauver sur disquette. Et si j'ajoute les 30 DM au prix pour avoir un jeu jouable (à cause de l'option de sauvegarde très importante), alors je me demande pourquoi j'ai acheté l'original, même s'il n'était pas cher!
D'accord, si j'avais d'autres originaux qui bénéficiaient de fonctionnalités supplémentaires après l'enregistrement, cela serait une motivation pour m'enregistrer. Mais seulement pour un jeu, ça fait beaucoup non?


Harry répond:

Le coût du travail de l'installation ne peut pas être estimé correctement de toutes façons - s'il était calculé sur le nombre d'heures passées à créer les installs, alors le tarif d'enregistrement de WHDLoad serait de 150-200 DM (75-100 euros).
Je travaille en moyenne 15 heures sur un jeu (il est vrai que je travaille surtout sur des problèmes complexes et vicieux) et parfois plus. Par exemple j'ai passé 40 heures sur Unreal et il n'est pas terminé complètement. Mais le jeu est complètement débuggé et jouable (à part quelques problèmes mineurs, parfois j'ai passé beaucoup de temps sur un problème mineur sans y arriver et je laisse tomber, par exemple Masterblazer et son highscore).
Si je compte 20 DM (10 euros) de l'heure (pas cher pour ce genre de travail en allemagne), cela ferait 300 DM (150 euros) par installation, multiplié par 35 installs ce qui fait 10000 DM (5000 euros). Je pourrais tout aussi bien gagner de l'argent dans l'informatique industrielle pendant ce temps.
Je ne cherche pas spécialement l'argent, et du coup mes installs fonctionnent toujours avec la version la plus ancienne possible, mais ne venez pas vous plaindre si un install a vraiment besoin d'une version plus récente (surtout pour les miens)... Considérez simplement le prix de l'enregistrement comme une récompense pour les installs déjà réalisés.

Amiga Infos WHDLoad History

*** 17.1 (06.10.2012)
- fix: formatting of termination reason string in register dump fixed
on very long texts (Psygore)
- fix: if the vbr is moved by WHDLoad the interrupts of levels 4-6
(vectors $70..$78) are directly forwarded to the installed
program now, in previous releases all the sanity checks and
checks for the keyboard were done in each interrupt which has
increased the latency and duration of the interrupts, now
these checks are only performed in interrupt levels 1-3 or
if the option CheckInts/S is used for all levels
it seems that the increased amount of code put into the
interrupts by the later WHDLoad versions has caused problems
with several games, this is hopefully fixed now and these
games will work with the current WHDLoad as good as with
versions 16.8 or 16.9
- fix: on a 68020 the default cache setup was instruction cache
enable, this bug has been introduced in version 17.0, now the
default is again disabled (Toni Wilen)
- chg: the icon started from is only written if any gadget has been
pressed, previously it were written everytime if Config or
Expert was active (Graham)
- fix: prevented a bug when FileLog/S will be disabled via the splash
window
- new: resload_DiskLoad can now dump all read files, see autodoc
- new: SnoopOCS/ECS/AGA/S checks also that writes to custom.aud*ptr
are not outside BaseMem and are not equal zero, check is only
performed on 68060 (Psygore)
- chg: WHDLoad now detects a filesize difference between the directory
scan used for resload_Examine/ExNext requested by WHDLF_Examine
and the file PreLoad, this may reveal filesystem problems in
conjunction with dos.ExAll, e.g. ffs 39.x (issue #2575)
- chg: documentation regarding patch lists in include and autodoc
files improved
- fix: on chip memory only machines with Kickstart 3.0 or better
slaves with WHDLF_Examine failed on building the directory
cache due problems with exec.CreatePool (Psygore)

*** 17.0 (14.08.2011)
- chg: documentation about Snoop feature now explains in detail which
cia registers are checked in which way (StingRay)
- chg: the install script template function P_AskDisk is additional
able to check for disks which contain a named file instead
only by volume name
- chg: the joypad emulation in kickemu 3.1 now supports a force
option to disable the auto sensing of lowlevel.library
- fix: kickfs.s now properly supports reading and writing to the same
file handle if IOCACHE is used
- new: support/detection of special HRTmon builtin WinUAE added
(monitor must be entered one time before WHDLoad can see it!)
- fix: when file for PreLoad was larger than the largest free memory
block this could lead to an DOS error #205 after all remaining
files have been preloaded, this bug has been introduced in
version 16.9, issue #2154
- chg: on option NoResInt/S WHDLoad checks and terminates if blitter
is active on entering via a resload function
- chg: trap hook now checks if vector is odd and aborts then
- chg: if option NoMMU/S is active WHDLoad now more correctly checks
the actual MMU setup and warns about translations of 0..3000
- chg: amount of disassembled code lines increased (Psygore)
- fix: output for disassembling of some instructions were corrected
by Psygore, (moveq #-x; cmp/add/and/move/bset/bchg/... #$nnxx;
bitfield with offset 0)
- fix: crashes on M-Tec 630 boards without FPU fitted caused by the
FPU detection inside WHDLoad fixed, board causes 'coprocessor
protocol violation's instead of 'line-f emulator', thanks to
Die BORG for lending the hardware
- chg: there are separate Resload versions for 00-20/30/40/60 now,
which enlarges the WHDLoad executable but saves memory at
runtime (overlayed)
- new: progress bar for Preload operation added, WHDLoad will
remember PreloadSize itself as ToolType if started from the
Workbench
- fix: cache clear in MMU configuration routine added, should fix
problems with issue #2094 and issue #2182 (Psygore)
- new: dutch translation of documentation, thanks to Harold van der
Waaij
- chg: resload_Relocate now accepts upto 512 hunks (Don Adan)
- chg: emulation of 'move sr,ea' in usermode on 68010+ is now also
working if flag WHDLF_EmulPriv is active, this fixes problems
with RoadwarsArcadia and FastBreakArcadia
- chg: support for Cloantos AmigaForever 2011 kickstart 1.2 and
3.1-a500/a1200 roms added (Jan Zahurancik)
- new: WHDLoad supports the compression file formats of CrunchMania
with the resload functions resload_Decrunch and resload_Load-
FileDecrunch (Psygore)
- chg: the way WHDLoad checks for keyboard strokes (QuitKey,
FreezeKey, ...) has been slightly modified, in earlier
versions it has checked for keydown strokes, now it only
reacts on keyup events; if the Slave checks itself for
keyboard events the installed program may still quit on
keydowns
- chg: the ws_keydebug entry in the Slave structure is now ignored,
the debug key must be explictly set via arguments
- fix: it's now possible to use QuitKey/DebugKey=0 (Psygore)
- chg: as long as the splash window is open pressing Esc will break
the Preload process and quit WHDLoad
- chg: pressing Space/Return/Enter will close the splash window and
start the installed program immediate after completion of
Preload
- new: in Expert/S mode the splash window now contains some buttons
to switch debugging related options of WHDLoad which gets
saved/deleted in the icon if started from the Workbench
- new: the Slave structure has been extended to allow configuration
of buttons to be displayed on the splash window to control
the ButtonWait/S and Custom1-5/K/N options
to be able to configure existing Slaves the option Config/K
has been added
- new: using the option ConfigDelay/K/N the time can be specified
howlong the splash window is displayed if there are buttons
on it (Config/Expert)
- chg: if SplashDelay/K/N is -1 a start button is added to the splash
window and the window remains open until pressed
- chg: the kickstart images will be searched also in the alternative
path WHDCOMMON: (M.C.Battilana)

68040 MMU code is incomplete in this release because being reworked
to support full MMU features, resload_Protect should work but Snoop
will lock the machine

*** 16.9 (05.02.2009)
- chg: BLITWAIT macro in whdmacros.i adapted for better speed, thanks
to John Girvin for research and testing
- fix: problems with writing to disks with around a multiple of 4 GB
free space fixed (Ingo Schmitz)
- fix: resload_Decrunch/LoadFileDecrunch could corrupt vital memory
which could lead to strange WHDLoad errors (e.g. "Function ...
requires slave version 1"), reported for game Universe, thanks
to KillerGorilla for report and Psygore for diagnostics;
the old RNC1 format is now properly supported for overlapping
source and destination
- new: on ChkBltSize/S some basic initialization in blitter line mode
are checked too (68060 only)
- new: option FullChip/S to save/restore the full chip memory instead
only the area specified in the Slave
- new: finnish translation of documentation, thanks to Mikko Heinonen
- chg: cpu detection routine reworked to correctly detect an 68020 on
boards with 'FPU logic error', 68851 and 68040/60 FPU detection
improved
- new: workaround added to make WHDLoad running on the CDTV, the
cdtv.device will be disabled to avoid problems with interrupts
generated by this, thanks to jtorrance and Toni Wilen
- new: commands BKPT and BELL added to resload_Patch/Seg to set a
breakpoint (enter freezer) and show a visual bell
- chg: handling of the internal directory cache for resload_Examine/
ExNext changed, so that new created files will not be the
first entry in the directory
this fixes problems with programs which do not correctly
perform a Examine before each directory scan, e.g. Castles2
(JOTD)
- chg: some more info output and better lace support with SP (saving
picture)
- chg: check for free stack space on entering WHDLoad via resload/
interrupt/exception made more consistent
- chg: many changes on WHDLoadGCI, can export Slave/Memory now
- new: danish translation of documentation, thanks to Nicolai Mortensen
- new: macro PL_NOPS added to whdload.i (bippym)
- chg: improved error messages if loading kickstart fails
- chg: changed CPU detection to avoid problems with weired MMU
configuration, no longer uses transparent translation to avoid
Enforcer hits (Fabio Cinus)
- chg: its no longer possible to load files from outside the data
directory, that means that file specs containg a ':' or '//'
or starting/ending with a '/' are prohibited, these files were
anyway never PreLoad-able
- new: support for multiple data directories added
- new: options SavePath/K and SaveDir/K added to let WHDLoad redirect
all write operations to a different disk location
- new: WHDLoad now remembers if PreLoad has loaded all files and then
doesn't switch when a resload function tries to load a non
existing file (e.g. resload_GetFileSize)
- chg: resload_ListFiles now supports a buffer in ExpMem too (JOTD)
- chg: autodocs revised, html transformation added

*** 16.8 (19.08.2007)
- fix: the requester displayed when audio.device is already used
defaults to 'ignore' now, so it works in combination with
option NoReq/S (Horace)
- fix: the online help displayed when WHDLoad is called from the CLI
without arguments has been fixed for the options Cache/S and
DCache/S (Hexaae)
- fix: CLI args fixed to fault on too many arguments (Psygore)
- chg: the install template supports installing from disk images via
diskimage.device, trackwarp.library and capsimage.device
- chg: kick31.s supports also the kickstart image from the A500/A600/
A2000, with that it is possible to make Slaves using kick31
which are compatible to a 68000 CPU (Don Adan)
- new: WHDLoad itself disables the interrupts of Mediator boards now
while running the installed program, this should solve problems
like freezing and gfx/sound distortion on these boards, thanks
to John Girvin and Elbox for providing the solution
- chg: WHDLoad now avoids opening the WorkBench screen after exiting,
older versions have always opened the WB if no other screen
was left open, requires at least v39
- new: WHDLoad now shows the task name on exceptions if there was a
working amigaos running, it also shows segment name and offset
if SegTracker was running (inside emulation of course)
- new: option NoMemReverse/S added to the global configuration (Ralf
Stützer)
- new: catalan translation of documentation, thanks to Manel Beltran
- new: its now possible to use special rawkeys for the QuitKey/N
option to let WHDLoad quit from a button press on the mouse/
joystick/joypad
- chg: some changes to the kickemu, check history therein

*** 16.7 (16.11.2006)
- fix: the Snoop check for custom.bplpt's against BaseMem bounds was
broken on word writes on the 68030 (DJMike)
- fix: resload_LoadFile and resload_LoadFileDecrunch has silently not
loaded data without PreLoad, bug introduced in v16.6 (Bored
Seal/Psygore)
- new: option NoResInt/S add, which disables any interrupts during
execution of resload functions
- chg: if the Slave requires AGA and that is not yet enabled in
graphics.library WHDLoad calls SetChipRev to enable it, this
obsoletes the execution of SetPatch prior to WHDLoad
- new: WHDLoadCD32 a special WHDLoad version to be used on the CD³²,
check documentation for more info
- chg: registration fee in USD adapted due currency differences, EUR
and GBP unchanged
- chg: various enhancements on the install template

*** 16.6 (05.06.2006)
- fix: no more enforcer hits (byte read from adr 0) on directory cache
preload on FFS filesystems (Christian)
- upd: italian documentation is in sync again, thanks David Bergantin
for updating it
- upd: small enhancement for HRTmon to print out expmem boundaries
- fix: no longer complains about missing ENV: assign
- fix: bus/address error messages on 68000 corrected
- fix: the message returned on interrupted resload functions did have
the same name for both functions, this has been corrected
- chg: argument checking for resload functions improved, now the
current stack can not be overwritten by resload functions (size
of reserved stack space is 64 bytes)
- new: command GA added to resload_Patch/Seg to get a address and store
it inside a variable in the slave
- fix: modify at ExpMem via resload_Patch works again, was permitted
in version 16.5
- chg: kickemu improved, compiles with PhxAss and AsmOne again, new
switch NO68020 for kick31.s to get 68000 compatible code,
patches to the kickstart added to avoid overwriting the vector
table, this allows WHDLoad to catch exceptions also on 68000
(Don Adan)
- new: greek translation of documentation, thanks to Dimitris
Panokostas of ATO

*** 16.5 (15.12.2005)
- new: check for CyberGraphX/56KHZAUDIO added (David Roeskamm)
- new: commands PL_ORB/W/L added for patch lists (Psygore)
- chg: if XPK decompression fails during preload WHDLoad shows the
missing sublib name too
- fix: kickemu correctly updates IO_ACTUAL on trackdisk accesses (JOTD)
- chg: russian translation reworked (Manbiker)
- new: display promotion added to kick31emu, with that WHDLoad options
DblPAL and DblNTSC become working in conjunction with installed
games using kick31 emulation and supporting it
- fix: stackcheck modified to avoid complaining if first long word of
stack is trashed (e.g. when using WarpOS-XPK-Sublib and running
from Workbench)
- chg: bubble help for bplcon* registers added to WHDLoadGCI
- fix: improved startup code for kickemu and _bootdos in kick13.asm
- fix: disassembler for negative absolut word addressing fixed (Psygore)
- chg: improved error messages on resload_Patch(Seg)
- new: slovak translation added, thanks to Jan Zahurancik and Martin Durik
- new: ukrain translation added, thanks to Andrey Molchanov
- chg: improvement on resload_ProtectSMC, instructions modifying the sr
no longer break the SMC check, autodocs fixed, disabling trace is
no longer required with SMC check (JOTD)
- chg: text explanation added to register dump for attnflags and setcpu
- chg: Snoop on 68060 now allows change of bit #6/7 of ciaa.ddra which
is used on accessing/detecting joypad
- new: if WHDLoad is started without an slave argument from the CLI it
shows a short help for all options and some raw key codes
- chg: improved speed on preload for resload_Examine, now uses dos.ExAll
and memory pools (when running on v39+)
- chg: kick31emu got a new option called JOYPADEMU, formerly included in
INIT_LOWLEVEL now separated to support GetLanguage without joypad
emulation, also the joypademu has been improved, now the keys
used are user configurable using the Custom option
- chg: options ExecuteStartup and ExecuteCleanup are now local and
global useable (Ralf Stützer)
- chg: file PreLoad improved, uses now dos.ExAll, memory pools (if
running under v39+ and more than 4MB free fast available),
asynchronous decrunching of XPK files
- new: supports also the kickstart images supplied with Cloantos Amiga
Forever CDs, kick130.rom or amiga-os-130.rom must be renamed to
kick34005.A500, kick310.rom or amiga-os-310.rom renamed to
kick40068.A4000, images together with the rom.key must be
installed under DEVS:Kickstarts, some older installs require a
kick40068.A1200 image these installs wont run with Cloantos roms
- new: norwegian translation added which is not complete but better than
none, thanks to Herman Andresen

*** 16.4 (26.11.2004)
- fix: wrong offsets in resload_Relocate when used with WHDLTAG_ALIGN
and WHDLTAG_LOADSEG (Psygore)
- new: using QuitKey=$73 an installed program can be quit using the
Left Mouse Button (Povl Odgaard)
- fix: TrapV emulation did not work on 68010 (Mats Johansson)
- new: on WHDLTAG_CBAF on the 68060 A2 provides now the contents of
the registers D0-A6 for further diagnostics
- new: kickfs.s checks if startup-sequence exist if BOOTDOS is not used
(JOTD)
- chg: install templates merged into one template, reworked and enhanced
(Codetapper)
- new: minor enhancement on the resource support files regarding RawDIC
- fix: incorrect return/dump values (type of exception) when interrupt
vector is not initialized and taken
- new: added _keyexit/debug to kick12.s and kick13.s
- fix: internal sr handling corrected
- chg: kickfs.s returns proper IoErr on dos.Read also on success (JOTD)
- fix: possible read accesses outside the packed data on RNC1 and
resload_Decrunch/LoadFileDecrunch fixed, these could cause Access
Faults when decrunching data at start of ExpMem (JOTD)

*** 16.3.1 (21.07.2004)
- fix: install script wasn't executable due a bad comment line (thanks
to Seppo Seppala)

*** 16.3 (28.06.2004)
- chg: kickfs.s: ACTION_CREATE_DIR returns ERROR_OBJECT_EXISTS if
directory already exists (JOTD)
- chg: kick31.s: lowlevel.library loading and joypad emulation
integrated
- chg: copperlist scanner is also triggered by word writes on coplc
registers (JOTD)
- chg: whdload.prefs is automatically installed by the install
script (Codetapper)
- fix: some possible Address Errors with resload_Patch* on cpu<68020
fixed (Mats)
- chg: command PL_S for resload_Patch/Seg allows also negative
destinations
- new: many enhancements on WHDLoadGCI, better HexEdit includes jump
to specified address, bubble help for various Custom
registers, cia window added
- chg: resload_Delay checks keyboard too
- chg: resload_Relocate support for missing HUNK_END's added, e.g.
"Crunch 1.3 Seg" files (Psygore)
- new: new tag for resload_Relocate to create segment lists, which can
be processed later using resload_PatchSeg (Psygore)
- chg: minor improvements on DIC
- chg: RawDIC 2.0 supplied but to unsure stableness only in the
developer archive in Extra/

*** 16.2 (07.04.2004)
- new: ReSource support files for RawDIC Slaves added
- fix: WHDLoad works again on 68000 (Gregory Mason)
- fix: install templates improved, work around for InstallerNG which
displays an error on (getassign "DF0" "d") when no disk is
inserted and so makes it impossible to check for the presense
of devices
- fix: whole HTML documentation validated and fixed by Micheal Ofner
(very big thanks!)

*** 16.1 (08.12.2003)
- fix: resload_Patch with PL_DATA did not work correctly
- chg: some error messages improved
- chg: stack enlargement and stack usage check (re)added
- chg: disassembler output improved
- new: support for another ThrillKill version added (BEN)
- new: limited support for WHDLTAG_CBAF_SET on 68060 added, see
autodocs for details
- new: option NoReq/S can be used from CLI/Shell to output error
messages to the command window instead of showing requesters
- chg: WHDLoad exits now with more useful return codes
- fix: EmulTrap did not work for trap #15 since WHDLoad v16.0 (JOTD)
- chg: improved pen handling for splash and register window (Michael
Evans)
- fix: resload_ProtectSMC was broken in v16.0 now works again
- chg: access fault handler for 68030/68060 partial rewritten, some
bugs fixed, resload_Protect in ExpMem fully supported now,
overall more reliable and sometimes a bit faster
- fix: EmulLineF now works with all frame types (JOTD)
- new: install templates improved, remember install source drive and
check drive availibility for DIC, RawDIC and Patcher template
- chg: option SplashDelay/N can also be local set
- new: ReSource support files for Patcher Slaves added
- fix: command PL_PSS for resload_Patch fixed (did JMP+NOP instead
JSR+NOP)
- chg: with Snoop* the copperlist scanner identifies CEND with
horizontal position > 112 now
- fix: small bug in The Patcher fixed
- new: WHDLoad supports multiple Kickstart images with the new slave
structure introduced in v16.0, the kick31.s has been adapted
to support the 40.068 from the A1200 and the one from A4000,
WHDLoad checks for both images and uses the one present
(JOTD/Wepl)
- new: italian manual translation added, thanks to David "Berga"
Bergantin
- fix: program CRC16 rewritten because old one created wrong sums
for files larger then 64KB
- new: QualityAssurance.Slave included
- fix: keyboard acknowledgment for kickemu 1.2 and 1.3 fixed
- new: hungarian manual translation added, thanks to Márton Dósa

*** 16.0 (04.08.2003)
- fix: restart when option Data/K is used works
- new: tries to expunge x-surf.device to avoid INT2 lockups (going
offline does not remove the interrupt server, you can check
with scout/interrupts), maybe this should be done for other
drivers too...
- new: option ChkInts/S to detect interrupts without respective bits
set in custom.intreq and custom.intena, this will allow easier
fix for interrupt acknoledge problems on fast machines and
bad hardware creating interrupts
- new: polish translation of the manual added, thanks to Mariusz
Danilewicz, Kamil Niescioruk and Sebastian Rosa for translating
- new: russian translation of the manual added, thanks to Agressor
for translating
- new: slave flag EmulDivZero to support such exceptions in the
installed program (Galahad)
- chg: misc improvements on the kickemu
- fix: possible problems with drive inhibit in DIC fixed (JOTD)
- new: various new commands for patchlists to add values, write byte
streams and using sublists
- chg: if there is whether in the slave nor via an option a quitkey
specified F10 is used as a default (Codetapper)
- new: if an errors occurs and Expert/S is active an additional button
appears in the error requester which allows the display of the
registers like in the register dump but without creating one,
the program to display can be configured in the global
configuration file using the new option ShowRegs/K
- chg: minor changes on WHDLoadGCI, direct link from a register to a
memory window, no longer needs ixemul.library
- chg: WHDLoad now detects a modified vbr when called via resload from
supervisor state, when called from user state it crashes as in
previous versions because it cannot enter the supervisor state
(JOTD)
- chg: if the slave version is greater or equal 16 then the trap #15
will not be emulated (WHDLF_EmulTrap not set) anymore, this
was a bug in older versions but the osemu depends on it
- new: spanish translation of the manual added, thanks to Miguel Dilaj
- chg: reworked czech translation by David Malecek
- new: slave flag EmulIllegal to support such exceptions in the
installed program (Michael Griffin)
- fix: preload for resload_Examine made more robust
- new: disassembler output in the register dump
- new: extented slave structure for early load of kickstart images
and avoid one switch to the os
- chg: there is a new tag for resload_DiskLoadDev to specify the
trackdisk unit to read from

*** 15.2 (10.04.2003)
- new: option ChkCopCon/S to find accesses which enable copper access
to DMA registers (JOTD)
- new: option Data/K to specify a directory where data for installed
program are stored, overwrites ws_CurrentDir contained in the
Slave
- fix: function resload_SetCPU no longer clears the setup from
resload_Protect* (JOTD)
- new: support for another ThrillKill version added (BEN)
- new: options ExpChip/S, ExpLocal/S and Exp24Bit/S to force WHDLoad
to allocate ExpMem with the specified properties, useful to
degrade performance on fast machines for compatibility reasons
- chg: many changes on kickemu sources, kick31.s made conform to the
12/13 sources
- chg: resload_Delay made more robust, fixes hangs in conjunction
with Mroocheck device/driver
- fix: Access Fault message for 68040 corrected (JOTD)
- new: Macros and UserSymbols to use with ReSource added
- new: smail address!

*** 15.1 (20.08.2002)
- new: many improvements on the install templates: opens installed
directory as wb window (OS3.5), visual icon selection (OS3.5),
more flexible icon handling, subdirectory for DIC install
(Codetapper/JOTD/Wepl)
- chg: SP can also save Interlace pictures now (Psygore)
- chg: works on AmigaXL now, WHDLoad will detect an AmigaXL and
assume an 68020 CPU (in difference to the faked 68040)
- chg: there is no longer a default for FreezeKey/N
- chg: keyboard handling changed a bit to avoid problems with some
broken UAE versions (JOTD)
- chg: when Snoop*/S is used bytes writes to audvol registers will
again result in an access fault, byte writes to audvol+1 are
ok (Psygore)
- chg: files caching optimized when small and large files are used
and there isn't enough memory for the big ones (JOTD)
- fix: loading data from a preloaded file using a resload function to
the vector table area ($64..$7c) works now without trashed
data (René Gennes)
- new: SnoopAGA/ECS/OCS validates also writes to bplpt's (Psygore)
- new: czech (big thanks to Bored Seal), french (big thanks to JOTD
& Psygore) and german (Wepl/Susann) translation of the
documentation added
- new: tag for resload_Relocate called WHDLTAG_ALIGN added, to round
up hunk lengths to a given boundary (Psygore)

*** 15.0 (19.02.2002)
- fix: install script templates improved: environment variable for
installation directory copied to ENVARC: to survive reboot;
'Abort Installation' during choice of installation directory
no longer gives an error message (Codetapper)
- fix: bug in copperlist scanner on 68030 with bplcon2 fixed
- chg: no more lockups caused by invisible 'Insert Volume XXX:'
(many thanks to JOTD)
- new: OpenDrawer (OS3.9) added to the install templates (JOTD)
- new: commands C, CB, CW and CL to use with resload_Patch
- new: function resload_PatchSeg, resload_Examine, resload_ExNext
- new: new flag WHDLF_Examine, required to use resload_Examine and
resload_ExNext
- fix: resload_LoadKick also supports 512k images (JOTD)
- chg: kick1.3 emu finished
- chg: intelligent icon detection and choice added to the install
templates
- chg: SP reads S:WHDLoad.prefs to find the coredump file
- new: option Custom and function resload_GetCustom to forward a
string from the CommandLine/WorkBench to the Slave (Philippe
Bovier/JOTD)

*** 14.5 (23.09.2001)
- chg: options NTSC/S and PAL/S can also be set global now
- new: SnoopOCS/S check also that no ECS/AGA bits will be set in
bplcon2 (Psygore)
- new: option RestartKey/N added
- chg: stack check removed
- chg: install templates improved: better tooltype handling, install
script will remember the installation directory in an
environment variable and use it as default the next time

*** 14.4 (30.07.2001)
- fix: resload_Relocate again corrected, it should work 100% reliable
now and is also a bit faster under some conditions ;)
- fix: ChkBltWait on 68060 has wrongly assumed a write to bltsize on
movem accesses to addresses > bltsize, that has caused wrong
detections
- fix: XPK detection did not work in resload_DiskLoad/LoadFileOffset,
caused problems without PreLoad/S
- fix: symbol hunks in resload_Relocate fixed (Codetapper)
- new: resload_ListFiles added to FileLog/S (Jeff)
- new: now FileLog/S logs the CRC16 for all read/write operations,
that may be useful especially for developers to detect on bug
reports different data by requesting a FileLog from the
reporter

*** 14.3 (02.06.2001)
- fix: without PreLoad/S LoadFileOffset/DiskLoad returning error
(Philippe)
- fix: LoadFileOffset/DiskLoad was returning wrong result on failure
and WHDLF_NoError wasn't set (Jeff)
- fix: now resload_*Load* functions can load files larger than
2.091.108 bytes (MrLarmer)
- new: option NoFlushMem/S added to avoid memory flush at WHDLoad
startup
- fix: TDREASON_OSEMUFAIL works again (Jeff)
- fix: bug in resload_Relocate removed (MrLarmer)

*** 14.2 (06.05.2001)
- fix: bugs in some loading resload functions removed which could
WHDLoad v14.1 cause to crash under some conditions
- chg: resload_GetFileSize(Dec) added to the FileLog/S feature
- fix: resload_SaveFileOffset has written bad size if file wasn't
preloaded in WHDLoad v14.1, that may corrupt existing
images/game files! (thanks to Codetapper for report)

*** 14.1 (29.04.2001)
- chg: $dff1fe (noop) is also a valid writeable custom register now
(Codetapper)
- new: SP correctly rips EHB pictures now (MrLarmer)
- fix: problems with some third party keybords after exiting WHDLoad
removed
- new: option TimeOut/N let WHDLoad / installed program quit after a
specified time, requires cooperation of the installed program
(untouched ciaa.ciatod)
- fix: problems with resload_Abort and DOS-Errors fixed (Jeff)
- new: TDREASON_FAILMSG to quit using a self defined message
(MrLarmer)
- new: all write operations will now be cached in memory if possible
to omit unnecessary switches to the OS, require that the file
to write to is already in the file cache, to avoid this
behavior the option NoWriteCache/S has been added, to
completely disable this feature the option can also set in the
global configuration file
- new: all data files can be compressed using XPK now, files will be
decompressed on PreLoad, there must be enough free store to
cache XPK files otherwise WHDLoad will quit, files can be
compressed/encrypted multiple times, decrypting requires
reqtools.library v38
- chg: differences in Snoop regarding ciab.prb between 68030 and
68060 removed, checks for MTR/SEL/STEP on both cpu's now
(Codetapper)
- new: resload_Relocate is able to move hunks with property MEMF_CHIP
or MEMF_FAST to a different memory location

*** 14.0 (15.03.2001)
- fix: bug in Snoop* mode fixed, thanks to Codetapper for report!
(the msw of D2 was trashed during copperlist-scanner, e.g.
writing to cop1lc/cop2lc/dmacon)
- chg: link/unlk/pea has been added to the IST (Mr.Larmer)
- chg: more useful output on Speed.Slave if MMU is unavailable
(Harry)
- new: tag WHDLTAG_LANG_GET to use with resload_Control to get
the current language set in the system, uses and requires
lowlevel.library to be installed
- chg: WHDLoad no longer tries to write to read-only filesystems, so
games can be played also from cdrom when they will usual save
highscores or similar data
- chg: install templates prepared for high-scores file, WHDLoad stack
increased (Codetapper)
- fix: detection of UAE (AttnFlags) works now
- new: commands PA and NOP added for resload_Patch (Codetapper)
- chg: tool SP to save pictures from dump files: copper disassembler
can be interrupted using Ctrl-C, will stop at copstop and
better error handling (Codetapper/Frank)
- chg: my snail mail address has changed

*** 13.1 (05.01.2001)
- fix: icon handling in the installer templates improved
- chg: emulation of unsupported integer instruction on 68060 supports
all variations of 64-bit mul/div except addressing modes using
full extension word (memory indirect/base displacement)
- fix: problems with Snoop exceptions during Switch fixed (copper
list scanner could lock WHDLoad on return from OS to installed
program)
- chg: WHDInfo 1.20 by Codetapper included in the developer package
- fix: better compatibility on Kickstart 2.0, no longer freezes the
Workbench after exiting WHDLoad, the reason was cia.alarm
values, because I don't know how to restore them to the
original values WHDLoad no loger touches them, that means
also there are no defined start values on entering the
installed program anymore and there may be too problems on
Kickstart 2.0 if the installed program writes the cia.alarm
values (probably less than 5% of all games)

*** 13.0 (21.12.2000)
- fix: debug key handling fixed (was broken when Expert was used in
global config and no debug key was specified and the Slave has
used a default of 0) (Jeff)
- fix: autodoc - mistakes regarding KEYTRANS and resload_GetFileSize
corrected (Codetapper)
- fix: bug in WHDLoad 12.0 fixed when using NoMMU/S and memory
0..$1000 is remapped to Fast memory, WHDLoad has always quit
independend of the selected button
- fix: bug removed in resload_Patch and command Skip when using a
distance of 2
- fix: splash window background fixed for 16/24-bit screens
- fix: no longer 'illegal args' when using resload_SaveFile with
address=0 and size=0 (Harry)
- chg: cpu cache handling reworked; new options ChipNoCache/S,
BranchCache/S, SuperScalar/S and StoreBuffer/S; options can no
longer overwritten by resload functions, new chapter in the
documentation regarding cpu cache handling
- new: flag WHDLF_ClearMem to cause WHDLoad to simply clear BaseMem
and ExpMem instead of init them with $CCCCCCCC/$DDDDDDDD
(Codetapper)
- fix: Enforcer hits in keymap scan removed (Philippe Bovier)
- chg: now the color cycling screen during switch between OS and
installed program will only displayed if option Expert/S is
enabled (Psygore)
- fix: compatibility risk in EmulTrap removed
- chg: Snoop*/S features reworked:
- fast Snoop/S mode added, read accesses will not be verified,
uses a bit faster routines on write accesses
- special features can be activated separately, new Options
ChkBltWait/S, ChkBltSize/S, ChkBltHog/S, ChkColBst/S
- special features can be enabled/disabled at runtime via
resload_Control
68030:
- copperlistscanner implemented
- ColBst check added
- ChkBltWait uses instruction tracing now
68060:
- ChkBltWait and ChkBltSize added
- copperlistscanner improved
- chg: FileLog/S reworked, uses now internal buffer to store log
entries and will write them to the logfile at program end
- new: option NoFileCache/S to disable the file cache
- new: internal stack check added
- fix: bug in resload_GetFileSizeDec fixed, did not work under some
conditions

*** 12.0 (07.08.2000)
- chg: better exception handling on 68000
- new: flag WHDLF_EmulLineF to forward 'Line-F Emulator'
exceptions to the handler of the installed program if the
vbr is moved (requested by Bored Seal)
- new: tag WHDLTAG_KEYTRANS_GET to get a table for rawkey to ascii
conversion reflecting the system keyboard configuration
(requested by Codetapper)
the sources:whdload/savegame.s has been adapted for that and
it can be used as an example how to use this new feature
- chg: WHDLTAG_ATTNFLAGS_GET no longer returns AFF_68881 and
AFF_68882 on 68040/68060 (Jeff)
- chg: DIC: retry bug on 'no disk in drive' fixed, new option 'NAME'
added to specify a name for the image to create (Andreas
Falkenhahn)
- fix: there could be an endless loop (including writing coredump) if
a error requester could not be opened, this has been fixed
- fix: the texts contained in the install templates have been
fixed for some spelling errors (thanks to Codetapper)
- new: some small improvements to SP
- chg: WHDLoad no longer terminates on Byte Writes to the audio
volume registers when Snoop*/S is active, these accesses are
invalid but used in many replayers and it should not be
neccessary to fix them all

*** 11.2 (04.06.2000)
- fix: the "CACR modified" check introduced in v11.0 was broken
on 68020 machines, now it should work properly on all cpu's
- chg: some enhancements concerning WHDLoadGCI, reworked to compile
with gcc/egcs instead sasc

*** 11.1 (21.05.2000)
- fix: old RNC1 support in resload_Decrunch/LoadFileDecrunch fixed,
was broken since version 10.4, now Moonstone works again
- chg: some minor changes in Snoop*/S on 68060

*** 11.0 (16.04.2000)
- chg: resload_Decrunch/LoadFileDecrunch supports also the TPWM
format now
- new: resload_Delta, resload_LoadKick, resload_GetFileSizeDec
- new: reworked access fault handler for the 68060, supports cia
snooper, aga check and copperlist scan
- chg: many enhancements on WHDLoadGCI, multiple memory windows,
bubble help, info window, termination reason
- new: new flags WHDLF_EmulChk and WHDLF_EmulPriv to forward
'Chk,Chk2 Instruction' and 'Privilege Violation' exceptions to
the handler of the installed program if the vbr is moved
- new: tag WHDLTAG_BPLCON0_GET to get the system bplcon0 from the
gfxbase, warning: genlock is still not supported by WHDLoad!
- new: WHDLoad now checks on each call to a resload function if the
CACR has been modified, on detection the installed program
will terminated

*** 10.6 (01.03.2000)
- new: when using Snoop*/S on 68060, accesses to custom register
using the SSP in predecrement or postincrement address mode
will detected and appropriate requester will be displayed,
such accesses must be patched to make Snoop*/S working on
68060
- fix: WHDLoad no longer quits if the SSP is equal to the end of
ExpMem on calling a resload function
- chg: DIC can skip multiple tracks now

*** 10.5 (23.01.2000)
- chg: DIC reworked, new option SKIPTRACK/K/N to one skip track (e.g.
RN-Copylocks), new option PEDANTIC/S used in install scripts
for better error handling
documentation for DIC improved
install script "DIC Install" improved
- chg: documentation and install scripts adapted for the new address
of WHDLoad's WWW-Page (www.whdload.org)
- chg: the slave load routine has been improved, the slave may now
contain symbol hunks and the length in the hunk header may
differ from the length in the hunk itself
- chg: sources and includes reworked a bit, better support for
different assemblers

*** 10.4 (13.10.1999)
- fix: resload_SaveFileOffset was broken in 10.3, as a result some
installs have crashed on saving games/highscores (thanks to
MIcK for report)
- fix: WHDLoad no longer crashes if Snoop*/S will be enabled on
68040 equipped machines (thanks to Joona Palaste for report)
- fix: detection of old rnc1 format improved, now Aladdin works again
(thanks to Ungi for report)
- chg: dbffix.s and keyboard.s from the src/sources/whdload directory
reworked

*** 10.3 (22.09.1999)
- fix: ws_CurrentDir in conjuction with slaves and ws_Version < 4 did
not work in WHDLoad v10.2 (e.g. MegaLoMania installion slave,
thanks to Ungi for report), now it works again
- chg: parts of the exception handlers rewritten, a detected Freezer
will be also activated on Access Fault, Privilege Violation
and Unimplemented Integer Instruction; that simplifies debugging
- chg: WHDload is overlayed now, that saves some memory at runtime
and shortens the executable
- new: emulation of CMP2 for 68060 added (e.g. Overkill/Mindscape,
Roots/Sanity), emulation of movep and mul32 optimized for
superscalar dispatch
- chg: if option SplashDelay is set to 0 no splash-window will be
displayed
- chg: docs reworked (thanks to Codetapper for doing that)
- chg: some other minor changes

*** 10.2 (07.07.1999)
- fix: bug in cache handling removed, the cache was always off if
MMU is not used by WHDLoad in versions 10.0 and 10.1 (Graham)
- chg: install template for RawDIC installes improved (Graham)
- new: partial mul64 emulation for 68060 added, supports only
"muls.l dn,dn:dn" at the moment (used in Sanity-Roots)
- fix: quit key display in the splash window fixed (Graham)
- chg: extra memory (ws_ExpMem) can be specified as optional now,
see autodoc for more info (Graham & John Girvin)
- new: program crc16 done by John Girvin added to the dev package

*** 10.1 (20.06.1999)
- fix: bug in resload_SetCACR which makes it impossible to enable
caches fixed, the bug has been introduced in version 10.0
(Graham)
- fix: some internal changes

*** 10.0 (08.05.1999)
- chg: SP has got some new options
- fix: a bug in sources/whdload/stfix.s removed
- chg: resload_Relocate uses less stack now
- new: function resload_ProtectSMC to automically detect self
modifying code (see autodoc)
- new: function resload_SetCPU to allow more accurate control over
the cachebility of certain memory regions and to allow
control over 68060 specific cpu configuration
- chg: option NoDCache has been removed (simplify cache managment)
- new: function resload_Patch to handle patchlists, i'm wondering
why this hasn't implemented earlier :), useful especially
to patch stuff in expansion memory
- fix: whole decruncher stuff reworked, support for old rnc1-data
format added, all decruncher a5/a6 save, optimized, less
stack usage...
- fix: expansions memory (ws_ExpMem) is also aligned to $1000 if no
MMU is available or MMU is unused by WHDLoad (Graham)
- fix: possible deadlock in the switch routine (OS<->Install)
removed (Graham)
- new: information window on startup (while preload) added, it shows
infomations about the installed program, the Slave and the
actual QuitKey, informations about program and Slave are taken
from an expanded Slave-structure (see include and autodoc
files), if a Slave with version prior 10 is used WHDLoad
displays only the name of the installed program which will be
build from the name of the Slave
how long the information window is displayed can be changed
with the new option SplashDelay/N
(information window is inspirated by Mr.Larmer on 7.7.1998,
nothing gets lost here :)
- chg: include file "whdload.i" splitted into "whdload.i" which
contains WHDLoad base defines and "whdmacros.i" containing
optional defines and macro definitions

*** 9.2 (15.03.1999)
- fix: 3 enforcer hits removed (Juergen Urbanek, Hubert Maier jun.),
there are still some hits left to the vector table, but these
are required for normal operation and cannot be removed
- fix: bug in decruncher for Imploder files fixed (Mr.Larmer),
this bug was introduced in version 9.0
- chg: there are no longer distortions in gfx display and sound
replay due disabled interrupts during loading from preloaded
data (resload_LoadFile, LoadFileDecrunch, LoadFileOffset,
DiskLoad)
- new: option NoFilter/S to disable the audio filter, can be set
globally using S:WHDLoad.prefs or locally using Tooltypes
(Roderick Mouthaan)
- new: program RawDIC by Graham/Oxyrone to create images from non
standard floppy disks formats, it replaces Patcher as prefered
tool for this task
- chg: documentation reworked

*** 9.1 (15.02.1999)
- new: WHDLTAG_TIME_GET to get actual date and time (Mr.Larmer)
- fix: problems with some 68030 systems fixed (WHDLoad uses some
special hardware features in conjunction with the MMU
related operations, some hardware does not support this
(Apollo A630 and Magnum MK2 are known for this), on such
systems you can't enable the MMU/S option - otherwise the
machine will hang) (reported by Chris Thomas, Maxim Ilyn
and Jess Sosnoski)

*** 9.0 (17.01.1999)
- chg: performance of resload_LoadFileDecrunch improved
- chg: access fault handler for 68030 rewritten:
- better performance
- cia snooper implemented
- icm and alarm will be saved and dumped
- setting overlay bit (ciaa.pra) catched
- setting motor/step (ciab.prb) catched
- bad writes to ddra/ddrb catched
- blitsize check fixed, supports all except line-mode now
(ascending/descending mode, negative modulos, odd pointers
and odd modulos)
- a callback function can be setup (resload_Control) which
will called by WHDLoad if an Access Fault occurs, the
function can modify the bad access and decide if the
program should be continued or terminated, see autodoc for
further infos
- fix: potgo set to input mode now, fixes right mouse button problem
with ArcherMcLeanPool and JimmyWhiteSnooker (Mr.Larmer)
- new: WHDLTAG_VERSION_GET, WHDLTAG_REVISION_GET, WHDLTAG_BUILD_GET
for usage with resload_Control to get the major and minor
version number and the build number of WHDLoad currently
running, the build number is granted to be uniq and can be
used to distinguish between different sub versions (Mr.Larmer)
- new: pressing Ctrl-Amiga-Amiga will cause WHDLoad to quit,
depending on machine speed this may avoid cold reboots due a
not restored execbase (Graham)
- fix: Snoop works again on 68060, was broken in 8.2
- chg: the vector table is not write protected if Snoop on a 68060 is
enabled
- new: option ReadDelay/N to cause WHDLoad to wait some time between
reading files from disk and switching the OS off (Jeff)
- new: flag WHDLF_EmulTrapV to forward exceptions to the zero page
handler if the vbr is moved (Graham)

*** 8.2 (19.12.1998)
- chg: the vector table (VBR) is write protected now, to catch
invalid to accesses to it (Mr.Larmer), requires that the MMU
is used by WHDLoad, NoVBRMove is not set and no freezer is
detected by WHDLoad in memory
- fix: problems with PAL and NTSC in conjunction with Picasso 96
monitor drivers fixed (Tim Kovack)

*** 8.1 (13.12.1998)
- chg: detection of HRTmon 2.24 implemented
- fix: Access Fault in resload_Relocate removed
- new: some changes and enhancements for HRTmon 2.25
- fix: Snoop works again for 68030 machines (was broken in v8.0)
- chg: all unsaved registers after executing a resload function
(D0-D1/A0-A1 as far as they don't contain a return code)
will be destroyed explicit now, for compatibility reasons

*** 8.0 (22.11.1998) not public released!
- chg: if the write offset for a resload_SaveFileOffset operation
lies outside the current length of the file and therefore
the file must be enlarged before writing, WHDLoad tries now to
fill this area with $ee, if there is not enough memory
available for this, WHDLoad falls back to the old style by
using dos.SetFileSize(), with the result that the enlarged
area will contain random data
- fix: deadlock in switch routine fixed which occured when lightpen
has been activated (e.g. "Die Hard 2")
- fix: cia's will be completly initialized by WHDLoad now, and also
better handled during switch
- chg: also disk images will be cached dynamically now
- fix: small bug in DIC removed (Mr.Larmer)
- fix: resload_LoadFileOffset accepts also parameters upto the
BaseMem bound now (DarkAngel)
- new: flag WHDLF_NoKbd to allow NoVBRMove also for programs which
doesn't check the keyboard from the PORTS ($68) interrupt
- new: function resload_Relocate to relocate an standard AmigaDOS
executable in memory, beware: uses a lot of stack and is not
tested with all hunk types, see autodoc for more details
- new: function resload_Delay to wait a specified time or a button
to be pressed (time independed from PAL/NTSC display)
- new: slave can request expansion memory (fast memory) now
ATTENTION: slave structure has been enlarged
- new: TDREASON_MUSTREG (DarkAngel)
- new: WHDLTAG_IOERR_GET for usage with resload_Control to check if
all names have been fitted in resload_ListFiles and to
distinguish a file with a size of 0 from an nonexistent file
in resload_GetFileSize (Harry)
- new: option D/S for debuging, if enabled the software freezer
(Hrt/TK) will be activated at the first instruction of the
Slave
- new: flag WHDLF_EmulLineA to emulate Line-A opcodes if the vbr is
moved
- new: function resload_DeleteFile to delete files (Mr.Larmer)
- new: program SP which can save iff pictures from the new coredump
files created by WHDLoad, works for most standard picture
formats (Snoop* is required of course)
- new: sources for all programs except WHDLoad included, please note
that most of them are copyrighted
- chg: many internal changes, also the problems with BloodMoney and
CelticLegends seems to have been solved
- fix: Restart should work reliable now
- fix: small bug in ITD removed (Harry)

*** 7.0 (01.07.1998)
- chg: new revision scheme, version number of WHDLoad is now equal to
highest possible version number for a Slave, separate build
number
- new: new tag for resload_Control to setup a function to restore
destroyed custom registers during switch between OS and
installed program (Harry)
- chg: functions resload_LoadFileOffset, resload_SaveFile and
resload_SaveFileOffset can be used with a filesize of zero now
(Harry)
- chg: the functions resload_Protect#? are checking now if the
protected area matches the current SSP, if it does, WHDLoad
will stop and show a requester "Unacceptible Arguments", this
has been build in to reduce the likelihood of a Double Bus
Fault, thanks to Mr.Larmer for reporting this problem
- fix: check of workbench arguments a bit more secure now
- new: new Slave flags WHDLF_Req68020 and WHDLF_ReqAGA, new
TDREASON_REQ68020 and TDREASON_REQAGA, new tag
WHDLTAG_CHIPREVBITS_GET for resload_Control, to handle
programs which require a MC68020 or the AGA Chip Set (Mr.
Larmer)
- new: TDREASON_MUSTNTSC and TDREASON_MUSTPAL to terminate if the
installed program requires a specific display which isn't
enabled (Mr.Larmer)
- chg: PreLoad now collects also files from sub directories
- chg: example sources (slaves/imager) reworked to assemble with
Asm-Pro v1.12 (still some problems with labels in macros,
but this is a problem of AsmPro)
- new: support for additional NewIcon in Install Templates (Mr.Larmer)

the following problems are known and still unsolved:
- no exit possible from BloodMoney/CelticLegends
- Nitro does hang with PRELOAD enabled, use WHDLoad v0.608 or disable
PRELOAD to go around this

*** 1.92 (08.06.1998)
- fix: problem with Clown'o'mania (©1989 Starbyte) does not work with
WHDLoad v1.1 has been fixed, the reason was a different
initialized ciaa.icr.tb bit, to fix this and future problems
WHDLoad does init the CIA interrupt mask explicit now, all
interrupts are disabled except the CIAA SP interrupt (used for
keyboard) which is enabled. I have tried some installs and it
seems to work ok, anyway it is possible that some installs may
no longer work because they may expect that some interrupts
are already enabled on startup - these installs must be fixed
for this new WHDLoad
- new: TDREASON_OSEMUFAIL to support the OS emulation module
- chg: the message for instruction stream access faults has been
corrected (Harry)
- new: option Expert/S, this option must be enabled to make core
dumps using the DebugKey/K/N now, the option has been added to
avoid that normal users press the wrong key by mistake (Harry)
- new: options ExecuteStartup and ExecuteCleanup to execute a command
at start and at end of WHDLoad

*** 1.1 (25.05.1998)
- fix: stack usage on resload_Decrunch and resload_LoadFileDecrunch
decreased, speed of RNC1 decrunching improved a lot, its a
really a good idea to patch the decrunch routine in games
with resload_Decrunch if it uses RNC1 !
- new: DIC can create partial images now (option SIZE/K)
- new: WHDLoad performs now a "SetClock LOAD" at exit
- fix: some minor fixes in the gfx degrading routine
- fix: disk-dma check in os-switch modified, it switches dma off now
instead of showing the white-color-cycle-bug-screen
(because it's nowhere documented else: red - copper cannot
switched off, blue - ints cannot switched off, green - blitter
is busy but dma is off; after pressing LMB WHDLoad continues
but it's undefined what will happen)
- new: new program "ITD" (ImageToDisk) to write disk images back to
floppy or RAD: can format the disk, can write partial images,
no verify, see documentation for more info
- fix: problems with second copperlist on reactivating os graphics
- new: blitter wait check if SnoopOCS/ECS/AGA enabled
- new: if available whdload will use reqtools.library instead
intuitions requesters now, because they are screen centered
and have better keyboard support
- new: with SnoopOCS/ECS/AGA all cpu used custom registers will be
dumped now
- chg: tooltypes NTSC/PAL will now affect the display init routine
(Intuition.OpenScreen()) therefore you need the appropriate
monitor files installed
- new: functions resload_Protect#? to snoop memory accesses in various
ways, very useful for developer... (requested by Mr.Larmer)
- new: function resload_LoadFileOffset which is similar to
resload_DiskLoad but for files
- new: flag WHDLF_NoDivZero for ws_Flags to prevent WHDLoad from exit
if a "Division by Zero" exception occurs
- chg: all resload functions has been reworked to no longer modify
registers a5 and a6, this solves problems with demos/games
which expect that the contens of these registers are valid
also in an interrupt, for example SWIV expects a5=global-data
and a6=custom-base, the only exception from this rule are the
functions resload_Decrunch and resload_LoadFileDecrunch when
working on rnc packed files, in this case a5 is temporarly
used (it is a bit hard to rewrite the whole decrunch
routines and I'm low on time of course...)
in general it is a good idea if the program you like to
install does'nt work with WHDLoad to check the interrupt
routines, if the interrupts make assuptions similar the above
(e.g a4=anything) you have to disable the interrupts before
calling any resload function and reenable after
- chg: WHDLoad checks now the current stackpointer each time the
Slave calls a resload function, if the SP is lower than $180
or outside the BaseMem area the program will be terminated and
WHDLoad shows a requester about, this should avoid problems
like destroyed vector tables or deadly double Access Faults
in conjunction with an enabled Memory Protection
- chg: it is no longer required that SetPatch is executed before
WHDLoad on 68040/68060 equipped machines because WHDLoad
determinates the current CPU itself now
- chg: for 68060 only (68040 also??): the newer versions of
68060.library (starting v41.1) does remap the memory $0-$1000
(the first page) to a fast mem location using the MMU, this
will make major problems if the option NoMMU is activated: in
this case WHDLoad will not change any MMU related registers
and this address translation will remain intact !!!
if the installed program tries to use this area for any dma
actions (e.g. a copperlist in this area) the results will be
unforeseeable, because the cpu will read/write the fast-mem
location and dma's the real chip-mem which contains random
data !!!
I don't want to disable the NoMMU option for 68040/060
machines, therefore the following has been changed: the
longword at address $1000 does now contain the value -2 which
is the copper instruction cend (was on address $300 in earlier
WHDLoad versions), the minimum BaseMemSize has been increased
to $2000. If NoMMU is selected and the above mentioned
address translation is active an requester will inform the
user about the existing problem.
- new: options ButtonWait/S and Custom1/K/N ... Custom5/K/N for
slave specific things (requested by Harry)
- chg: WriteDelay/K/N does also affect the FileLog/S feature now,
this means that after each write to the logfile WHDLoad will
wait the time specified via WriteDelay/K/N to minimize the
danger of filesystem corupption
- chg: install scripts has been reworked, PLEASE check them !
- chg: sources has been changed and new added, PLEASE check them !
- chg: WHDLoad is shareware now, read documention for more info

*** 0.608 (03.09.1997)
- new: all configuration stuff rewritten, global config file
see guide for more informations
- chg: SURVIVERESET removed (obsolete I think)
- new: support for HRTmon 2.1 and ThrillKill 1.04 implemented
(auto detect and NMI forwarding)
- new: function resload_Control to get the AttnFlags
- fix: enforcer hit in resload_SaveFile removed
- new: function resload_SaveFileOffset for partial writes
- chg: ws_DontCache works now also for preload of disk images
file preload does no longer loads "(ReadMe|#?.(info|slave))"
("Disk.#[0-9]" also not as before)
- chg: better support for NTSC amigas (Raymond Earle)
- new: option PAL/S to force PAL display on NTSC amigas
- new: options Cache/S,DCache/S,NoDCache/S to allow full user
control over the caches
- new: using MMU for memory protection and cache managment (!!!)
- new: Quit/Debug-key managment through new options QuitKey/K/N and
DebugKey/K/N, every new slave should support this via the
slave version 4 extensions ws_keydebug and ws_keyexit,
see one of the example slave sources for an example
- chg: on whdload is writing data (resload_SaveFile) it will do a
special check for RAM: now, so it is possible to use RAM:
as installation destination now
- chg: macros patch and patchs optimized
- new: more sources added to the package

*** 0.322 (25.06.1997)
- fix: sometimes whdload has quit on random keystrokes if the vbr was
moved
- fix: deadlock problems in OS-Swap routine
- new: option COREDUMP to make a dump even on TDREASON_OK

*** 0.288 (16.06.1997)
- fix: sprite dma switching off
- chg: ws_ExecInstall can be set to zero now (disables SURVIVERESET)
- new: ws_keys, whdload manages quit key self (see autodoc)
- new: whdload handles all MMU stuff, result is that whdload is now
Enforcer/Cyberguard and VMM proof
- new: ** vbr shadowing ** (see autodoc)
tooltype NOVBRMOVE added to disable that
- new: slave flag EmulTrap for ws_Flags
- chg: execbase changed from $ffff0000 to $f0000001
(any use of this should create an "Address Error" exception)
- chg: Data Cache is always off and cannot be enabled via
resload_SetCACR
- fix: resload_FlushCache fixed for 040/060
- fix: register dump changed a lot
- new: exitcode TDREASON_WRONGVER indicating a bad program version
- chg: all registers have now a defined value at startup
- fix: filelog output fixed for data writes
- new: Patcher, FindAccess, Cmp added to the package
autodoc, include and guide updated
Install templates added

*** 0.163 (02.03.1997)
- fix: better handling of trackdisk.device, headpos is flashed always now
- new: trackdisk errors as text instead numbers
- new: whdload option NOAUTOVEC (see whdload.guide)

*** 0.147 (31.01.1997)
- fix: on slave load failed, we were in an endless loop
- new: function resload_CRC16 implemented

*** 0.143 (07.01.1997)
- fix: restart point changed, that slave will be reloaded (static vars)
- new: status of cia timers added to register dump
- new: cia timer handling improved
- fix: ISP/MSP highlighting on user-mode
- chg: file cache changed, resload_GetFileSize from cache,
resload_SaveFile to cache, now ws_DontCache is nearly obsolete
- chg: PRELOAD changed, caches now automatically diskimages and files,
independent from WHDLF_Disk
- fix: resload_SaveFile checks now for disk validation and free space to
avoid deadlocks
- fix: file loading from cache has always copied one byte to much
- fix: WRITEDELAY parsing on CLI-start
- new: resload_DiskLoadDev for install slaves (see autodoc)
- chg: better error detection on slave-whdload interface
- chg: Macros in whdload.i improved

*** 0.88 (24.11.1996)
- file logging implemented
- register dump improved
- dump file names changed (now PROGDIR:.whdl_#?)
- on TDREASON_DEBUG sr and pc now taken from primary/secondary result
- InstallBB added to the package

*** 0.41 (05.09.1996)
- first public release

Amiga Infos Améliorations prévues
Améliorations prévues
• Sauvegarde d'état des programmes pour les relancer plus tard (en utilisant l'option Snoop), aka savestate
• Ignorer/Enregistrer les accès mémoires interdits
• Support des CD-Audio des jeux CDTV/CD³²
• Snoop avec le 68040 (déjà implémenté, mais ne fonctionne pas correctement)
• Support du MMU sous UAE (pas d'adaptation spéciale nécessaire dans WHDLoad si UAE supporte l'émulation MMU)
Amiga Infos Copyright, Licence
Copyright
WHDLoad, et tous les autres fichiers dans la distribution WHDLoad sont copyright 1995-2009 Bert Jahn. Tous droits réservés.
Licence
WHDLoadCD32 peut être utilisé librement et sans limitation. L'utilisation non commerciale de la version normale de WHDLoad est gratuite dans les 30 jours d'essai du programme. Après cette période d'essai, vous devez vous enregistrer à WHDLoad.
L'utilisation commerciale est uniquement autorisée avec la permission explicite et écrite de l'auteur.
Il est strictement interdit de modifier une quelconque partie de la distribution, à part les fichiers source, qui peuvent être modifiés afin d'être réutilisés.
La redistribution est permise uniquement si elle est gratuite.
Avertissement
CE PRODUIT EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, SOIT EXPRESSE OU INDUITE, STATUTAIRE OU AUTRE, INCLUANT SANS LIMITATION TOUTE GARANTIE INDUITE DE NON-INFRACTION, NEGOCIABLE ET SATISFACTION D'UN BESOIN PARTICULIER. LE RISQUE TOTAL D'UTILISATION, DE RESULTATS ET DE PERFORMANCES DU PRODUIT EST ASSUME PAR VOUS ET SI LE PRODUIT S'AVERAIT DEFECTUEUX, VOUS ENDOSSEZ LE COUT TOTAL DES FRAIS DE REPARATION OU DE REMISE EN SERVICE.
L'AUTEUR NE PEUT ETRE TENU RESPONSABLE EN AUCUN CAS POUR QUELCONQUE DEGAT CAUSE PAR LE PROGRAMME EN UTILISATION NORMALE, SPECIALE, OU ACCIDENTELLE (CECI COMPREND MAIS NE SE LIMITE PAS A: LA PERTE DE DONNEES OU DES PERTES CAUSEES PAR VOUS OU UN TIERS OU PAR L'UTILISATION DE CE PROGRAMME POUR DES TACHES EN DEHORS DES SPECIFICATIONS OU DE L'APPLICABILITE), EGALEMENT SI LE PROPRIETAIRE OU UN TIERS ONT ETE PREVENUS DE TELS POSSIBILITES DE DEGATS.
Amiga Infos A propos de l'auteur

Enregistrement
Pour les dernières informations à propos de l'enregistrement, reportez-vous également à la home page WHDLoad.
La version actuelle de WHDLoad n'est pas limitée. Cela signifie qu'il n'y a pas de limitations fonctionnelles au cas où la version n'est pas enregistrée. A côté de cela, certains auteurs ont limité leurs slaves pour qu'ils ne fonctionnent qu'avec la version enregistrée. WHDLoad affiche une fenêtre à chaque démarrage afin de vous rappeler de vous enregistrer. Si vous vous enregistrez, vous recevrez un fichier clé personnalisé qui permettra de ne plus faire apparaître la fenêtre.

La clé que vous recevrez après l'enregistrement sera valide pour toutes les versions ultérieures de WHDLoad.

L'enregistrement coûte 30 USD ou 20 EUR. S'il ne vous est pas possible de recevoir la clé par e-mail, vous devez ajouter 5 USD ou 5 EUR pour la disquette et les frais de port.

Le paiement peut être effectué en envoyant de l'argent liquide ou par un enregistrement en ligne (carte de crédit nécessaire ou compte PayPal). Si vous voulez payer en liquide, remplissez le formulaire d'enregistrement et joignez-le aux billets (pas de pièces!) dans une enveloppe (mettez les billets dans le papier) et envoyez le tout à mon adresse.

Contact

e-mail

wepl#whdload.de

 

Page perso

http://www.whdload.de/wepl/

 

Homepage WHDLoad

http://www.whdload.de/

 

addresse postale

Bert Jahn
Clara-Zetkin-Straße 52
Zwickau
08058
Allemagne/Deutschland

Derniers mots
Quelques informations sur moi et l'historique de WHDLoad.
Pendant ma période scolaire j'ai eu un premier contact avec l'électronique. Mon frère, qui est plus vieux que moi de plusieurs années, a construit des dispositifs divers à l'aide de l'électronique. Cela m'a beaucoup impressionné et j'ai commencé à faire pareil. J'ai construit (ou ai essayé de construire) des dispositifs électroniques divers, de LEDs clignotants à des amplificateurs, et plus. Plus tard, les ordinateurs sont devenus plus populaires et j'avais l'accès à une machine appelée KC85. Je regrettais de ne pas avoir mon propre ordinateur, mais cela n'était pas possible à cause de plusieurs raisons à l'époque. Donc j'ai commencé à construire un ordinateur à partir des schémas de construction imprimés dans un fanzine allemand appelé Funkamateur. Pendant ce temps il y avait des changements politiques en Allemagne et cela a rendu mon travail obsolète et j'ai arrêté. J'ai récupéré un vieux CBM 3032, la machine d'un ami et j'ai commencé à programmer dessus. D'abord en BASIC et plus tard en langage machine (pour des raisons de vitesse). J'ai écrit un programme de Backgammon sympa et un simulateur rapide de jeu de vie (Cromwell). Alors, quelque temps plus tard en 1990 j'ai acheté mon premier Amiga, un A500. Je m'amusais beaucoup avec mes premiers jeux: Corporation et RoboCop2. Pendant ce temps j'ai utilisé mon Amiga surtout pour les jeux. Plus tard j'ai commencé à programmer dans l'assembleur. J'ai écrit quelques petits outils, WRip étant probablement le plus connu. A Noël 1994 j'ai codé les premiers octets de WHDLoad. La raison était Cannon Fodder, qui est carrément injouable à partir de disquettes. Quelques temps plus tôt, j'avais vu une installation disque dur pour Agony, et j'avais été vraiment impressionné. Je me demandais comment cela fonctionnait, le jeu n'utilisait pas l'OS mais le programme d'installation avait vraiment lu les fichiers à partir du disque dur. Après un regard plus approfondi j'ai compris son fonctionnement, et j'ai commencé à écrire quelque chose de semblable pour Cannon Fodder 2. Le code est resté inchangé pendant un long moment sur mon disque dur. J'ai repris le codage en février 1996. J'ai alors eu l'idée d'un programme qui contiendrait toutes les possibilités techniques pour dégrader et commuter l'OS, un peu comme une bibliothèque, et une autre partie de code (le slave, ou esclave) qui devrait contenir le code spécifique au programme à installer. C'est alors que WHDLoad est né. J'ai commencé à travailler plus régulièrement sur WHDLoad. J'ai écrit les installations pour Gods et Chaos Engine, et en août 1996 la première version publique de WHDLoad (0.43) a été mise sur aminet. Je n'en ai pas obtenu beaucoup de réponses, mais j'ai continué à travailler sur WHDLoad. J'ai mis en oeuvre plus de fonctionnalités et supprimé des bugs. Au début de 1997 j'ai créé la première page web pour WHDLoad. En avril 1997 les premières personnes sont entrées en contact avec moi. Ces personnes, Harry et Mr Larmer, étaient intéressés pour écrire des installs utilisant WHDLoad. C'était un événement très heureux pour moi.
Au cours du temps, le projet WHDLoad a grandi et grandi. Plus de fonctions, plus compatible et la plupart des nouveaux installers programmés par des codeurs divers. Cela a pris beaucoup de temps pour écrire, tester, et corriger les bugs. Je pense que peu de gens peuvent imaginer à quel point, tout simplement parce qu'une grosse partie de WHDLoad n'est simplement pas débuggable. Avec la mise en place d'un enregistrement payant à partir de la v1.0 de WHDLoad, j'ai essayé d'obtenir de la reconnaissance et du soutien pour tous les efforts que j'ai fournis. J'ai aussi prévu de partager les enregistrements avec les autres auteurs de WHDLoad, mais cela dépend du nombre d'enregistrements.
J'espère que vous aussi vous voulez soutenir le développement futur de WHDLoad et des nouveaux installs. Faites en sorte que le rêve qu'un jour il n'y aura plus aucun jeu non installé sur disquette devienne réalité...