présentation
A/UX est la version d'UNIX d'Apple qui a été conçue pour fonctionner sur les Macintosh à base de 68k. Pour fonctionner, A/UX nécessite une Unité de Gestion de Mémoire (MMU) pour assurer l'isolation des processus, ainsi qu'une Unité de Virgule Flottante (FPU). Cela signifie qu'A/UX ne peut fonctionner que sur les Macintosh de haute gamme, tels que la série Macintosh II et les Quadra.
contexte technique
La source fournie décrit le processus d'installation d'A/UX 1.1 sur un émulateur Macintosh appelé Snow. L'installation nécessite 34 images de disquettes de 800K au format GCR. Les disquettes ont été converties à l'aide d'Applesauce pour être utilisées avec l'émulateur. L'émulateur Snow a dû être modifié pour prendre en charge la carte vidéo Macintosh II, qui est prise en charge par A/UX 1.x.
fonctionnement
L'installation d'A/UX 1.1 est un processus complexe qui nécessite plusieurs étapes. Tout d'abord, il faut partitionner le disque dur à l'aide de HD SC Setup, puis installer System 6 sur une partition Mac. Ensuite, il faut copier le contenu du disque « SASH et utilitaires » sur la nouvelle installation. L'étape suivante consiste à lancer A/UX à partir du disque « Floppy Launch », qui démarre SASH et lance le noyau A/UX. Le processus d'installation se poursuit alors avec la mise en forme des partitions A/UX et la copie d'un système de démarrage.
analyse scientifique
Pendant le processus d'installation, des bogues dans l'émulateur Snow ont été découverts et corrigés. Le premier bogue concernait l'implémentation d'ADB Talk 2, qui provoquait des problèmes avec les touches de modification. Le code a été corrigé pour prendre en compte les bits de clavier et de modification active basse. Un autre bogue a été découvert lors du lancement du noyau A/UX, qui attendait la fin de la DMA du contrôleur SCSI NCR 5390. Le code a été corrigé pour gérer correctement la fin de la DMA.
diff --git a/core/src/mac/adb/keyboard.rs b/core/src/mac/adb/keyboard.rs
index 4e828fc..9edf31e 100644
--- a/core/src/mac/adb/keyboard.rs
+++ b/core/src/mac/adb/keyboard.rs
@@ -140,29 +146,34 @@ impl AdbDevice for AdbKeyboard {
response
}
2 => AdbDeviceResponse::from_iter(
- AdbKeyboardReg2::default()
+ // The key/modifier bits of register 2 are ACTIVE LOW
+ AdbKeyboardReg2(0xFFFF)
+ // LED state bits (0..2) are host-controlled and active-high
.with_led_numlock(self.keystate[SC_NUMLOCK as usize])
.with_led_capslock(self.capslock)
.with_led_scrolllock(self.keystate[SC_SCROLLOCK as usize])
- .with_numlock(self.keystate[SC_NUMLOCK as usize])
- .with_capslock(self.capslock)
- .with_scrolllock(self.keystate[SC_SCROLLOCK as usize])
- .with_cmd(self.keystate[SC_COMMAND as usize])
+ .with_numlock(!self.keystate[SC_NUMLOCK as usize])
+ .with_capslock(!self.capslock)
+ .with_scrolllock(!self.keystate[SC_SCROLLOCK as usize])
+ .with_cmd(!self.keystate[SC_COMMAND as usize])
.with_control(
- self.keystate[SC_LCTRL as usize] || self.keystate[SC_RCTRL as usize],
+ !(self.keystate[SC_LCTRL as usize] || self.keystate[SC_RCTRL as usize]),
)
.with_option(
- self.keystate[SC_LOPTION as usize] || self.keystate[SC_ROPTION as usize],
+ !(self.keystate[SC_LOPTION as usize] || self.keystate[SC_ROPTION as usize]),
)
- .with_delete(self.keystate[SC_DELETE as usize])
+ .with_shift(
+ !(self.keystate[SC_LSHIFT as usize] || self.keystate[SC_RSHIFT as usize]),
+ )
+ .with_delete(!self.keystate[SC_DELETE as usize])
.to_be_bytes(),
),
3 => AdbDeviceResponse::from_iter(
AdbReg3::default()
.with_exceptional(true)
.with_srq(true)
- .with_address(Self::INITIAL_ADDRESS)
- .with_handler_id(2) // Apple Extended Keyboard M0115
+ .with_address(self.address)
+ .with_handler_id(self.handler_id)
.to_be_bytes(),
),
_ => {