Наиболее правильным считается (ну, когда-то считался) посыл команды сброса с последующим ожиданием в порту данных числа страниц памяти.
Т.е. давалась команда полного сброса #F4, выжидалось время и читалось значение из порта #B3, там должно было быть или 3 (112К) или 14 (512К).
Однако время шло, были выпущены модели с увеличенным объемом памяти (2МБ и больше), и данный тест не сработает.
Более верным решением считаю определение через команды работы с внутренними портами либо памятью: засылаем внутрь GS байт данных и потом читаем его обратно.
Проделав энное число раз этот процесс и получая одинаковые байты, можно утверждать, что GS присутствует.
Разумеется, сперва тоже стоит выполнить сброс, можно и неполный (#F3), что быстрее, ибо мало ли чем GS был занят в момент начала теста.
Команды работы с внутренними портами и памятью лежат в диапазоне #10-#1D, думаю, больше подойдет пара команд #16-#17 либо #1C-#1D.
Ну, и самое главное: в пассивном состоянии из порта статуса (#BB) должны читаться нулевыми биты 0 и 7, т.е. число 126 (#7E).
Если из них читается всякая фигня, либо они всегда равны 1 (после сброса), то GS с большой долей вероятности не установлен, а читаем мы шину.





Ответить с цитированием