Введение
Домашний компьютер, выпущенный в 1985 году
Commodore 128, также известный как C128, C 128 или C= 128 (где "C=" обозначает графическую часть логотипа), является последним 8-битным домашним компьютером, коммерчески выпущенным компанией Commodore Business Machines (CBM). Представленный в январе 1985 года на выставке CES в Лас-Вегасе, он вышел через три года после своего предшественника, Commodore 64 – самого продаваемого компьютера 1980-х годов. За четыре года производства было продано приблизительно 2,5 миллиона экземпляров C128. C128 представляет собой значительно расширенную версию C64 с почти полной совместимостью. Он заключен в корпус нового дизайна с улучшенной клавиатурой, включающей цифровую панель и функциональные клавиши. Объем памяти был увеличен до 128 КБ оперативной памяти, разделенной на два банка по 64 КБ. Отдельный графический чип обеспечивал цветной видеовыход с разрешением 80 символов в строке, в дополнение к оригинальным режимам C64. Также в его состав входил процессор Zilog Z80, позволяющий C128 работать с операционной системой CP/M, в качестве альтернативы стандартной среде Commodore BASIC. Обширная библиотека программного обеспечения CP/M, в сочетании с библиотекой программного обеспечения C64, обеспечила C128 один из самых широких выборов доступного программного обеспечения среди конкурентов. Главным разработчиком аппаратной части C128 был Бил Херд, ранее работавший над Plus/4. Другими инженерами-аппаратчиками были Дэйв Хейни и Фрэнк Палайя, а проектирование интегральных схем выполнял Дэйв ДиОрио. Основное системное программное обеспечение Commodore разрабатывали Фред Боуэн и Терри Райан, а подсистему CP/M – фон Эртуин.
Дизайн
Сложная архитектура C128 включает в себя четыре различных типа оперативной памяти (128 КБ основной оперативной памяти, 16–64 КБ видео-RAM VDC, 2 кНиббла VIC II Color RAM, 2 КБ оперативной памяти дисковода на C128Ds, 0, 128 или 512 КБ REU RAM), два или три процессора (основные: 8502, Z80 для CP/M; 128D также включает 6502 в дисковом накопителе) и два различных видеочипа (VIC IIe и VDC) для различных режимов работы. C128 не выполняет тест системной оперативной памяти при включении, в отличие от предыдущих компьютеров Commodore. Вместо одного микропроцессора 6510 в C64, C128 использует двухпроцессорную конструкцию. Основной процессор, 8502, является незначительно улучшенной версией 6510, способной работать на частоте 2 МГц. Второй процессор – Zilog Z80, который используется для запуска программного обеспечения CP/M, а также для выбора режима работы при загрузке. Эти два процессора не могут работать одновременно, поэтому C128 не является многопроцессорной системой. Клавиатура C128 включает в себя четыре клавиши управления курсором, , , и клавиши, а также цифровую клавиатуру. Ничего из этого не было на C64, где было только две клавиши управления курсором, требовавшие использования клавиши для перемещения курсора вверх или влево. Эта альтернативная раскладка была сохранена в 128 для использования в режиме C64. Отсутствие цифровой клавиатуры, , и на C64 было проблемой для некоторых программ CP/M при использовании Z80-картриджа C64. Многие владельцы C64, проводившие долгие часы за вводом машинного кода в программы, запрашивали цифровую клавиатуру. Многие из добавленных клавиш соответствовали клавишам на клавиатуре IBM PC, что делало новый компьютер более привлекательным для разработчиков бизнес-программ. Хотя 40-колонный режим 128 во многом повторяет режим C64, программисту доступен дополнительный 1 КБ цветной оперативной памяти, поскольку она мультиплексируется через адрес памяти 1. Блок питания C128 отличается от конструкции C64. Несмотря на то, что он значительно больше, новый блок питания оснащен вентиляционными отверстиями и заменяемым предохранителем. Ранние версии C128 иногда испытывали проблемы с надежностью, связанные с температурой, из-за использования радиочастотного экрана над основной платой. Экран был оснащен контактами, которые касались верхних частей основных микросхем, предположительно заставляя экран действовать как большой радиатор. Сочетание плохого контакта между экраном и микросхемами, ограниченной теплопроводности пластиковых корпусов микросхем и относительно низкой теплопроводности самого экрана приводило в некоторых случаях к перегреву и выходу из строя. Звуковой чип SID особенно уязвим в этом отношении. Наиболее распространенным решением является удаление экрана, который Commodore добавила на поздней стадии разработки для соответствия правилам радиочастот FCC. C128 имеет три режима работы. Режим C128 (родной режим) работает на частоте 1 или 2 МГц с процессором 8502 и поддерживает текстовые режимы с 40 и 80 столбцами. Режим CP/M использует как Z80, так и 8502 и может работать в текстовом режиме с 40 или 80 столбцами. Режим C64 почти на 100% совместим с более ранним компьютером. Переключение между этими режимами осуществляется через чип Z80. Z80 управляет шиной при начальной загрузке и проверяет наличие диска CP/M в дисководе, картриджей C64/C128 или нажата ли клавиша Commodore (которая служит селектором режима C64) во время загрузки. В зависимости от этих условий он переключается в соответствующий режим работы.
С128
В 1984 году, за год до выпуска Commodore 128, Commodore выпустила Plus/4. Хотя она была ориентирована на бюджетный бизнес-рынок, который не мог позволить себе относительно высокую стоимость и требования к обучению ранних IBM PC-совместимых компьютеров, она была воспринята прессой Commodore как продолжение модели 64 и от нее ожидалось улучшение ее возможностей. В то время как графические и звуковые возможности C64 обычно считались отличными, реакция на Plus/4 была разочаровывающей. Сразу после выхода Plus/4 в прессе Commodore неоднократно рекомендовалось создать новый компьютер под названием "C 128" с увеличенным объемом оперативной памяти, 80-колонным дисплеем, стандартным для бизнес-компьютеров, новым языком программирования BASIC, который облегчил бы программистам использование графики и звука компьютера без применения PEEK и POKE, новым дисководом, превосходящим 1541 по скорости передачи данных, а также полной совместимостью с C64. Разработчикам C128 удалось решить большинство этих проблем. Новый чип VDC обеспечивает C128 80-колонным цветным дисплеем, совместимым с CGA (также называемым RGBI – красный, зеленый, синий плюс интенсивность). Новый микропроцессор 8502 полностью обратно совместим с 6510 в C64, но может работать на удвоенной скорости при необходимости. Commodore BASIC 2.0 в C64 был заменен на BASIC 7.0, который включает в себя команды структурированного программирования из BASIC 3.5 в Plus/4, а также ключевые слова, разработанные специально для использования возможностей машины. Был добавлен редактор спрайтов и монитор машинного кода. Часть экранного редактора Kernal была дополнительно улучшена для поддержки режима вставки и других функций, доступных через комбинации клавиш ESC, а также элементарной функции окон, и перемещена в отдельную ПЗУ. Чип VIC II, управляющий 40-колонным дисплеем, может работать только на частоте 1 МГц, поэтому 40-колонный дисплей выглядит искаженным в режиме FAST. В 80-колонном режиме редактор использует функции VDC для обеспечения мигающего и подчеркнутого текста, активируемого кодами Escape, в дополнение к стандартному обратному тексту Commodore. 80-колонный режим C128 может отображать строчные символы вместе с графическими символами PETSCII; 40-колонный режим подвергается тем же ограничениям – "верхний и нижний регистр" или "верхний регистр плюс графика", как и в более ранних моделях Commodore. 40- и 80-колонные режимы независимы и оба могут быть активны одновременно. Программист, имеющий как композитный, так и RGB-дисплей, может использовать один из экранов в качестве "черновика" или для элементарной поддержки нескольких буферов. Активный дисплей можно переключать с помощью ESC X. К системе была добавлена аппаратная кнопка сброса. Однако клавиатура не была переключена на раскладку Selectric, как это стало стандартом, а вместо этого сохранился тот же дизайн, производный от ADM 3A, что и в предыдущих моделях Commodore. Чип VDC в значительной степени бесполезен для игр, поскольку в нем отсутствуют спрайты или аппаратные прерывания по кадрам. C128 с NTSC будут работать с любым монитором типа CGA (TTL RGB @ 15 кГц/60 Гц), например, IBM 5153. Однако PAL-модели C128 работают на частоте 50 Гц и не совместимы с большинством CGA-мониторов, которые ожидают частоту обновления 60 Гц. Вывод 7 VDC (обычно не используемый на мониторах CGA) генерирует монохромный сигнал NTSC/PAL, но кабель для него не поставлялся, и заинтересованным пользователям приходилось изготавливать его самостоятельно или приобретать на вторичном рынке. В комплекте с C128 были представлены два новых дисковода: односторонний 1570 и двухсторонний 1571. Модель с двумя дисководами 1572 была анонсирована, но так и не была выпущена. Позже был представлен 3,5-дюймовый 1581. Все эти дисководы более надежны, чем 1541, и обещают значительно лучшую производительность благодаря новой функции "режим всплеска". Дисковод 1581 также имеет больше встроенной оперативной памяти, чем его предшественники, что позволяет одновременно открывать большее количество файлов. BASIC 7.0 включает команды DLOAD и DSAVE для поддержки загрузки и сохранения на диск без использования номера устройства ,8 или другого, а также команду DIRECTORY, которая считывает каталогическую информацию диска непосредственно в экранную память, не перезаписывая память BASIC, как в BASIC 2.0. Кроме того, C128 вводит автоматическую загрузку дискового программного обеспечения, стандартную функцию для большинства персональных компьютеров, но отсутствующую в машинах Commodore до этого момента. Пользователям больше не нужно вводить LOAD"*",8,1. BASIC также добавил команду COLLECT для удаления "splat"-файлов (файлов, которые не были закрыты должным образом и были усечены до нулевой длины). Все дисководы 1571 обычно запускаются в родном режиме на C128. Если пользователь переключается в режим C64, набрав GO 64, дисковод остается в родном режиме. Но если режим C64 активируется при удержании клавиши Commodore во время включения питания, 1571 переходит в режим 1541. Эта процедура необходима для программного обеспечения, выполняющего доступ к дисководу на низком уровне. C128 имеет вдвое больший объем оперативной памяти, чем C64, значительная часть которой доступна для программирования на BASIC благодаря новому чипу переключения банков MMU. Это позволяет хранить код BASIC-программы отдельно от переменных, значительно повышая способность машины обрабатывать сложные программы, ускоряя сборку мусора и облегчая отладку для программиста. Выполняющуюся программу можно остановить (STOP), отредактировать ее код, проверить или изменить значения переменных в прямом режиме и возобновить выполнение программы с нетронутой таблицей переменных, используя команду GOTO в BASIC. Хотя другие BASIC поддерживают команду CONT для возобновления выполнения без очистки переменных, редактирование любого кода приводит к их очистке. Различные конфигурации памяти можно загрузить с помощью команды BANK в BASIC. BASIC 7.0 имеет полный набор команд для обработки графики и звука, а также команды дисков из BASIC 4.0 и улучшенную очистку мусора, а также поддержку структурированного программирования с помощью циклов IF THEN ELSE, DO WHILE и WHILE WEND. Однако программируемые символы по-прежнему не поддерживаются, поэтому программисту придется манипулировать ими с помощью PEEK и POKE, как в VIC 20 и C64. С другой стороны, BASIC 7.0 работал значительно медленнее, чем BASIC 2.0, если не использовался режим 2 МГц, из-за его размера 28 КБ (увеличение на 250% по сравнению с BASIC 2.0) и необходимости переключения банков для доступа к переменным программы и тексту программы BASIC (если он превышает 16 КБ). ПЗУ 128 содержит пасхалку: ввод команды SYS 32800,123,45,6 в родном режиме отображает экран со списком основных разработчиков машины, за которым следует сообщение "Link arms, don't make them". Кроме того, ввод ключевых слов QUIT или OFF выдает ошибку "?UNIMPLEMENTED COMMAND ERROR". Эти команды являются пережитками из интерпретатора BASIC, предназначенного для планируемого, но так и не выпущенного портативного компьютера с ЖК-дисплеем, и должны были выходить из интерпретатора BASIC и игнорировать ввод с клавиатуры во время выполнения конфиденциальной программы, соответственно. Более широкие аппаратные возможности C128, особенно увеличенный объем оперативной памяти, разрешение экрана и скорость последовательной шины, сделали его более мощной платформой, чем C64, для запуска графической операционной системы GEOS.
CP/M
Второй из двух процессоров C128 – Zilog Z80, который позволяет C128 работать с CP/M. C128 поставлялся с CP/M 3.0 (также известной как CP/M Plus, обратно совместимой с CP/M 2.2) и эмуляцией терминала ADM31/3A. Для C64 был доступен картридж CP/M, но он был дорогим и мало полезным, поскольку дисковод 1541 не мог читать диски, отформатированные в MFM, на которых распространялось программное обеспечение CP/M. Программное обеспечение должно было быть доступно на дисках Commodore, отформатированных с использованием схемы кодирования GCR. Commodore выпустила версии PerfectCalc и PerfectWriter, основанные на EMACS, а группы пользователей Commodore иногда предлагали дискеты CP/M, но ограниченная доступность программного обеспечения нивелировала одно из главных преимуществ CP/M – огромную библиотеку программ. Кроме того, картриджи работали только на ранних моделях C64 1982 года выпуска и были несовместимы с более поздними версиями. Поскольку они также были несовместимы с C128, команда разработчиков решила поддерживать CP/M, разместив Z80 на основной системной плате. C128 работает в CP/M заметно медленнее, чем большинство специализированных систем CP/M, поскольку процессор Z80 работает с эффективной скоростью всего 2 МГц. Это связано с тем, что системная шина C128 была разработана для процессоров 65xx. Эти процессоры обрабатывают данные и адресацию памяти иначе, чем Z80. CP/M также работала медленнее по ряду причин, например, из-за необходимости передавать управление 8502 для любых операций ввода-вывода или обработки прерываний. По этим причинам лишь немногие пользователи фактически запускали программное обеспечение CP/M на C128. При включении C128 Z80 активируется первым и выполняет небольшой загрузочный ROM-загрузчик по адресу $0-$FFF для проверки наличия диска CP/M. Если диск не обнаружен, управление передается 8502 и запускается нативный режим C128. Для практического использования режим CP/M требует дисковода 1571 или 1581, поскольку 1541 не может читать диски MFM и будет работать намного медленнее из-за отсутствия поддержки режима burst mode C128. Загрузочные диски CP/M, тем не менее, должны быть отформатированы в родном формате GCR; диски MFM нельзя загрузить, их можно только прочитать после того, как пользователь уже находится в CP/M. Это связано с тем, что код, необходимый для работы дисковода в режиме MFM, загружается в процессе загрузки. Кроме того, обычно требуется режим 80 столбцов, поскольку большинство программ CP/M ожидают экран с 80 столбцами. C128 эмулирует терминал ADM 3A в режиме CP/M, поэтому программное обеспечение должно быть настроено для этого. Помимо стандартных команд терминала ADM 3A, доступны дополнительные команды для использования функций VIC II и VDC, включая настройку цвета текста и фона. Интерпретатор команд CP/M (хотя и не являющийся прикладным программным обеспечением) включает в себя защиту, предотвращающую выдачу пользователем управляющего кода, устанавливающего одинаковый цвет текста и фона, что сделало бы текст невидимым и потребовало бы перезагрузки компьютера. В этом случае будет установлен серый фон с коричневым текстом по умолчанию. В режиме CP/M можно запускать MBASIC, версию BASIC 80 для CP/M от Microsoft. По сравнению с нативным BASIC 7.0, MBASIC лаконичен и ограничен в своих возможностях, требуя использования комбинаций клавиш в стиле терминала для редактирования строк программы или перемещения курсора текста и не имея никаких звуковых или графических функций. Хотя MBASIC имеет математические и вычислительные функции, которых нет в BASIC 7.0, такие как поддержка переменных целых и двойной точности, любое преимущество в скорости, полученное при использовании переменных целых чисел, нивелируется чрезвычайно низкой производительностью компьютера в режиме CP/M. Кроме того, Commodore BASIC использует 40-битные числа с плавающей точкой, что является компромиссом между 32-битными числами с плавающей точкой MBASIC и 64-битными переменными двойной точности. MBASIC также предлагает всего 34 КБ свободного программного пространства против примерно 90 КБ в BASIC 7.0. Другое программное обеспечение CP/M, такое как Wordstar и Supercalc, также будет значительно уступать своим аналогам C128 в нативном режиме, например PaperClip, которые также имеют более удобный интерфейс. CP/M CBIOS (часть CP/M, взаимодействующая с аппаратным обеспечением) не взаимодействует с аппаратным обеспечением напрямую, как в большинстве реализаций CP/M; вместо этого он вызывает подпрограммы ядра для обработки прерываний и ввода-вывода. Когда необходимо использовать ядро, Z80 использует подпрограммы по адресу для передачи данных параметров 8502, который затем активируется, а Z80 деактивируется. После завершения выполнения подпрограммы ядра управление возвращается Z80. Сообщалось, что программист, отвечавший за перенос CP/M на C128, планировал, чтобы CBIOS взаимодействовал с аппаратным обеспечением напрямую на языке Z80, но столкнулся с большими трудностями с чипами VDU, которые были склонны к перегреву и саморазрушению. VDU также претерпел многочисленные аппаратные изменения во время разработки C128, и программист CP/M не смог заставить свой код работать правильно, поэтому команда разработчиков C128 попросила его просто переписать CBIOS для передачи вызовов функций 8502. Режим CP/M сильно отличается от операционных сред, знакомых пользователям Commodore. В то время как Commodore DOS встроена в ПЗУ дисководов Commodore и обычно доступна через BASIC, CP/M требует использования загрузочной дискеты и ввода лаконичных команд, унаследованных от мини-компьютерных платформ. Программы CP/M, как правило, лишены удобства использования большинства приложений Commodore. Предназначенная для обеспечения новой машины большой библиотекой профессионального бизнес-программного обеспечения, которого не хватало Commodore, CP/M к середине 1980-х годов уже пережила свой расцвет и поэтому редко использовалась на C128.
С64
Благодаря включению оригинальных C64 BASIC и Kernal ROM-файлов в полном объеме (всего 16 КБ), C128 достигает почти 100-процентной совместимости с Commodore 64. В режим C64 можно получить доступ тремя способами: удержанием клавиши с логотипом Commodore при загрузке, вводом команды GO 64 и ответом Y на запрос "Вы уверены?" в BASIC 7.0, или загрузкой с подключенным картриджем C64. Заземление линий /EXROM и/или /GAME на порту картриджа приведет к автоматическому запуску компьютера в режиме C64. Эта функция точно воспроизводит поведение C64 при подключенном картридже (например, Simons' BASIC), который активирует одну из этих линий. Однако, в отличие от реального C64, где изменение схемы памяти этими линиями реализовано непосредственно в аппаратном обеспечении, код запуска прошивки Z80 в C128 опрашивает эти линии при включении и переключает режимы по мере необходимости. Картриджи C128 в родном режиме распознаются и запускаются, когда kernal опрашивает определенные области в схеме памяти. Режим C64 почти полностью дублирует функциональность аппаратного C64. MMU, Z80 и режим пакетной передачи данных IEC отключены в режиме C64, но все остальные аппаратные функции C128, включая VDU и режим 2 МГц, остаются доступными. Расширенные клавиши клавиатуры C128 могут быть прочитаны из машинного кода, хотя подпрограммы kernal распознают только клавиши, присутствующие на C64. Некоторые игры способны определить, работает ли C128, и переключаться в режим 2 МГц во время обратного хода развертки для повышения производительности. На североамериканских C128 в режиме C64 даже ROM шрифта меняется по сравнению с режимом C128. Ранние прототипы C128 имели единый ROM с немного улучшенным набором символов по сравнению с C64. Однако некоторые программы C64 читают ROM шрифта как данные и могут работать некорректно на C128. Поэтому C128 получил ROM шрифта вдвое большего размера, который предоставляет шрифт C128 в режиме C128 и шрифт C64 в режиме C64. Международные модели C128 используют неизмененный шрифт C64 в обоих режимах, поскольку вторая половина ROM шрифта вместо этого отведена под международный шрифт (содержащий, например, символы с диакритическими знаками или немецкие умлауты). Некоторые из немногих программ C64, которые не работают на C128, будут работать правильно при нажатой клавише (или клавише ASCII/National на международных моделях C128). Это связано с увеличенным встроенным портом ввода-вывода процессора C128. В то время как клавиша, присутствующая как на C64, так и на C128, является просто механической защелкой для левой клавиши Shift, клавишу на C128 можно прочитать через встроенный порт ввода-вывода 8502. Некоторые программы C64 путаются из-за этого дополнительного бита ввода-вывода; удержание клавиши в нажатом положении приведет к низкому уровню сигнала на линии ввода-вывода, что соответствует конфигурации C64 и устраняет проблему. Некоторые программы C64 записывают по адресу $D030 (53296), часто как часть цикла инициализации регистров чипа VIC II. Этот регистр, отображаемый в памяти и не используемый в C64, определяет тактовую частоту системы. Поскольку этот регистр полностью функционален в режиме C64, случайная запись может привести к искажению 40-колонного дисплея, переключив процессор на 2 МГц, при которой видеопроцессор VIC II не может создать согласованное изображение. К счастью, лишь немногие программы страдают от этого недостатка. В июле 1986 года журнал COMPUTE!'s Gazette опубликовал программу, набранную пользователем, которая использовала это различие, используя прерывание по строке для включения быстрого режима при достижении нижней части видимой области экрана, а затем отключала его при возобновлении отрисовки экрана сверху. Используя более высокую тактовую частоту во время вертикального интервала, стандартный видеодисплей сохраняется, увеличивая общую скорость выполнения примерно на 20 процентов. Некоторым программам C64 не хватало звуковых эффектов и музыки, потому что на C64 страница памяти $D4xx чипа SID также отображалась на страницах $D5xx, $D6xx и $D7xx, в то время как на C128 она была доступна только через страницу $D4xx. Это не является распространенной проблемой, поскольку руководство по C64 описывает регистры в $D4xx подробно, а $D5xx–$D8xx – только как "SID IMAGES", поэтому большинство программ обращаются к ним через страницу $D4xx, и звук воспроизводится как предполагалось на C128. Легкий способ отличить аппаратный C64 от C128, работающего в режиме C64, обычно используемый из работающей программы, – это записать значение, отличное от $FF (255), по адресу памяти $D02F (53295), регистру, который используется для декодирования дополнительных клавиш C128 (числовой клавиатуры и некоторых других клавиш). На C64 это место в памяти всегда будет содержать значение $FF, независимо от того, что будет записано в него, но на C128 в режиме C64 значение этого места в памяти – регистр, отображаемый в памяти – может быть изменено. Таким образом, проверка значения этого места в памяти после записи в него позволит определить фактическую аппаратную платформу.
Holding down the Commodore logo key when booting. Entering the GO 64 command, then responding Y to the ARE YOU SURE? prompt, in BASIC 7.0. Booting with a C64 cartridge plugged in. Grounding the cartridge port's /EXROM and/or /GAME lines will cause the computer to automatically start up in C64 mode. This feature faithfully duplicates the C64's behavior when a cartridge (such as Simons' BASIC) is plugged into the port and asserts either of these lines but, unlike an actual C64, where the memory map changing action of these lines is implemented directly in hardware, the C128's Z80 firmware startup code polls these lines on power up and then switches modes as necessary. C128 native mode cartridges are recognized and started by the kernal polling defined locations in the memory map. C64 mode almost exactly duplicates the features of a hardware C64. The MMU, Z80, and IEC burst mode are disabled in C64 mode, however all other C128 hardware features including the VDU and 2 MHz mode are still accessible. The extended keys of the C128 keyboard may be read from machine language, although the kernal routines only recognize the keys that exist on the C64. A few games are capable of detecting if a C128 is running and switching to 2 MHz mode during the vertical retrace for faster performance. On North American C128s, when in C64 mode, even the character (font) ROM changes from that of C128 mode. Early C128 prototypes had a single ROM, with a slightly improved character set over that of the C64. But some C64 programs read the character ROM as data, and will fail in various ways on a C128. Thus, the C128 was given a double sized character ROM, which delivers the C128 font in C128 mode, and the C64 font in C64 mode. International models of the C128 use the unmodified C64 font in both modes, since the second half of the character ROM is instead dedicated to the international font (containing such things as accented characters or German umlauts). Some of the few C64 programs that fail on a C128 will run correctly when the key is pressed down (or the ASCII/National key on international C128 models). This has to do with the larger built in I/O port of the C128's CPU. Whereas the key found on both C64 and C128 is simply a mechanical latch for the left key, the key on the C128 can be read via the 8502's built in I/O port. A few C64 programs are confused by this extra I/O bit; keeping the key in the down position will force the I/O line low, matching the C64's configuration and resolving the issue. A handful of C64 programs write to $D030 (53296), often as part of a loop initializing the VIC II chip registers. This memory mapped register, unused in the C64, determines the system clock rate. Since this register is fully functional in C64 mode, an inadvertent write can scramble the 40 column display by switching the CPU over to 2–MHz, at which clock rate the VIC II video processor cannot produce a coherent display. Fortunately, few programs suffer from this flaw. In July 1986, COMPUTE! 's Gazette published a type in program that exploited this difference by using a raster interrupt to enable fast mode when the bottom of the visible screen was reached, and then disable it when screen rendering began again at the top. By using the higher clock rate during the vertical blank period, standard video display is maintained while increasing overall execution speed by about 20 percent. A few C64 programs would lack sound effects and music because on a C64 the SID chip $D4xx memory page was also mirrored on $D5xx, $D6xx and $D7xx pages, while on a C128 it was only accessible through $D4xx page. This is not a common issue, since the C64 reference guide only describes registers in $D4xx in details while describing $D5xx $D8xx just as "SID IMAGES", making most programs accessing them through $D4xx page and hence have the sound getting played as intended on a C128. An easy way to differentiate between a hardware C64 and a C128 operating in C64 mode, typically used from within a running program, is to write a value different from $FF (255) to memory address $D02F (53295), a register which is used to decode the extra keys of the C128 (the numerical keypad and some other keys). On the C64 this memory location will always contain the value $FF no matter what is written to it, but on a C128 in C64 mode the value of the location—a memory mapped register—can be changed. Thus, checking the location's value after writing to it will reveal the actual hardware platform.
Настройка оперативной памяти
Для обработки относительно больших объемов ПЗУ и ОЗУ (в десять раз превышающих 64-адресное пространство 8502) C128 использует чип MMU 8722 для создания различных карт памяти, в которых различные комбинации ОЗУ и ПЗУ отображаются в соответствии с битовыми шаблонами, записанными в регистр конфигурации MMU по адресу памяти. Другой особенностью блока управления памятью является возможность перемещения нулевой страницы и стека. Хотя C128 теоретически может поддерживать 256 КБ ОЗУ в четырех блоках, на печатной плате нет предусмотренных мест для добавления дополнительной ОЗУ, и MMU фактически не может получить доступ к более чем 128 КБ. Поэтому, если MMU запрограммирован на доступ к блокам 2 или 3, результатом будет лишь зеркальное отражение ОЗУ в блоках 0 и 1. Поскольку регистры ввода-вывода и системные ПЗУ могут свободно включаться или отключаться, а также могут располагаться в любом банке ОЗУ, и VIC II настроен на использование любого банка для своего адресного пространства, возможно до 256 конфигураций памяти, хотя подавляющее большинство из них бесполезны (например, возможны неработоспособные комбинации, такие как ядро ПЗУ в банке 0 и регистры ввода-вывода в банке 1). В связи с этим, команда BASIC BANK позволяет пользователю выбирать 15 наиболее полезных конфигураций, а по умолчанию при включении питания используется Банк 15. Эта конфигурация по умолчанию размещает системные ПЗУ, регистры ввода-вывода и текст программы BASIC в блоке 0, а блок 1 используется для переменных программы BASIC. Текст программы и переменные BASIC могут занимать пространство до блока 0, но поскольку блок 0 содержит ПЗУ и регистры ввода-вывода, BASIC использует внутреннюю подпрограмму переключения для чтения текста программы выше адреса . Верхний и нижний 1 КБ ОЗУ (– и ) являются "общей" ОЗУ, видимой из обоих блоков. MMU позволяет расширять их с шагом до 16 КБ. Диапазон – содержит нулевую страницу и стек, а – содержит регистры MMU и векторы сброса. Эти области всегда являются общими и не могут быть переключены на необщую ОЗУ. Общая ОЗУ всегда находится в банке, противоположном тому, который в данный момент использует процессор, поэтому, если выбран банк 0, любое чтение или запись в общую ОЗУ будет обращаться к соответствующим адресам в банке 1 и наоборот. VIC II может быть настроен на использование любого банка ОЗУ и, соответственно, его обычного 16-КБ окна. В то время как на C64 VIC II может видеть только символьный ПЗУ в банках 2 и 4 своего адресного пространства, C128, с другой стороны, позволяет включать или отключать символьный ПЗУ для любого банка VIC II через регистр по адресу . Также существует два набора цветной ОЗУ – один видимый для процессора, другой для VIC II, и пользователь может выбрать, какой чип видит что. В режиме CP/M префикс сегмента программы и временная область программы находятся в банке 1, а регистры ввода-вывода и системный код CP/M – в банке 0. ОЗУ C128 может быть расширена со стандартных 128 КБ до 256, 512 или даже 1024 КБ с помощью коммерческих модулей расширения памяти или путем создания собственного модуля на основе схем, доступных в Интернете. Модули расширения памяти Commodore используют внешний контроллер DMA 8726 для передачи данных между ОЗУ C128 и ОЗУ в модуле расширения.
The top and bottom 1k of RAM (– and ) are "shared" RAM, visible from both blocks. The MMU allows either to be expanded in increments up to 16k. The – range contains the zero page and stack while contains the MMU registers and reset vectors. These areas are always shared and cannot be switched to non shared RAM. Shared RAM is always the opposite bank from the one currently being used by the CPU, thus if bank 0 is selected, any read or write to shared RAM will refer to the corresponding locations in bank 1 and vice versa. The VIC II can be set to use either RAM bank and from there, its normal 16k window. While on the C64, the VIC II can only see the character ROM in banks 2 and 4 of its memory space, the C128, on the other hand, makes it possible to enable or disable the character ROM for any VIC II bank via the register at Also, there are two sets of color RAM—one visible to the CPU, the other to the VIC II and the user may select what chip sees what. In CP/M mode, the Program Segment Prefix and Transient Program Area reside in Bank 1 and the I/O registers and CP/M system code in Bank 0. The C128's RAM is expandable from the standard 128 KB to 256, 512 or even 1,024 KB, either by using commercial memory expansion modules, or by making one based on schematics available on the internet. Commodore's RAM Expansion Units use an external 8726 DMA controller to transfer data between the C128's RAM and the RAM in the expansion unit.
С128D
В конце 1985 года Commodore выпустила новую версию C128 с переработанным корпусом, напоминающим Amiga 1000. Эта новая европейская модель, получившая название Commodore 128D, имела пластиковый корпус с ручкой для переноски сбоку, встроенный дисковод 1571 в основной корпус, заменяемую клавиатуру вместо встроенной и вентилятор охлаждения. Клавиатура также оснащалась двумя откидными ножками для изменения угла наклона. C128 поступил в продажу в Великобритании 25 июля 1985 года, а в Северной Америке – в ноябре 1985 года. По словам Била Херда, руководителя аппаратной группы (также известной как "C128 Animals"), C128D был готов к производству одновременно с обычной версией. Выпуск двух моделей одновременно увеличил риск срыва сроков поставки, что было заметно по большим отверстиям в критических секциях основной печатной платы, предназначенным для поддержки как корпуса C128D, так и стандартного корпуса. В конце 1986 года Commodore выпустила версию C128D в Северной Америке и некоторых частях Европы, известную как C128DCR, где CR означало "снижение стоимости" (cost reduced). Модель DCR имела штампованный стальной корпус вместо пластикового корпуса C128D (без ручки для переноски), модульный импульсный блок питания, аналогичный C128D, сохраняя при этом заменяемую клавиатуру и встроенный дисковод 1571. Для снижения производственных затрат некоторые компоненты на материнской плате были объединены, а в качестве дополнительной меры по снижению затрат вентилятор охлаждения, установленный в блоке питания модели D, был удален. Однако крепежные элементы на подшасси блока питания были сохранены, а также две точки подключения постоянного тока 12 В на печатной плате блока питания для питания вентилятора. Крепежное отверстие C128DCR предназначено для вентилятора диаметром 60 мм. Значительным улучшением модели DCR стала замена контроллера видеодисплея 8563 на более продвинутый 8568 VDC и оснащение его 64 КБ видеопамяти – максимальным объемом, адресуемым устройством. Четырехкратное увеличение видеопамяти по сравнению с установленной в "плоском" C128 позволило, в частности, поддерживать несколько текстовых экранов для полноценной оконной системы или генерировать графику более высокого разрешения с более гибкой цветовой палитрой. Лишь небольшое количество коммерческого программного обеспечения использовало эти возможности. C128DCR оснащен новыми ПЗУ, получившими название "1986 ROMs", названными в честь даты авторского права, отображаемой на экране приветствия при включении. Новые ПЗУ устраняют ряд ошибок, присутствующих в оригинальных ПЗУ, включая печально известную ошибку "off by one" в таблице декодирования клавиатуры, из-за которой символ оставался в нижнем регистре при активном Caps Lock. Некоторые программы будут работать только на DCR из-за зависимости от расширенных аппаратных возможностей компьютера и обновленных ПЗУ. Несмотря на улучшенные возможности RGB-видео DCR, Commodore не расширила BASIC 7.0 возможностью работы с RGB-графикой. Управление VDC в графическом режиме по-прежнему требует использования вызовов к примитивам экранного редактора ROM или их эквивалентам на языке ассемблера, либо использования сторонних расширений языка BASIC, таких как "BASIC 8" от Free Spirit Software, который добавляет команды VDC-графики высокого разрешения в BASIC 7.0.
Рыночные показатели
В январе 1987 года Info сообщила, что "все эти слухи о скорой гибели C128 могут иметь под собой основания". Утверждая, что Commodore хотела перенаправить ресурсы на увеличение производства 64C и его PC-клонов, журнал заявил, что "последняя информация в сети говорит о том, что последний C128 сойдет с конвейера в декабре 1987 года". Compute! писала в 1989 году: "Если вы купили 128, рассчитывая на обилие и быструю доступность специализированного программного обеспечения для него, вы, вероятно, разочарованы. Одним из главных достоинств 128 была полная совместимость с 64, которая скорее навредила, чем помогла ему". Поскольку на 128 работало практически все программное обеспечение для 64, а следующее поколение 32/16-битных домашних компьютеров – в первую очередь Commodore Amiga и Atari ST – представляло собой передовые технологии, программное обеспечение, разработанное специально для нативного режима C128, появилось в относительно небольшом количестве (вероятно, порядка 100–200 коммерческих продуктов, плюс обычный объем общедоступных и программ из журналов), что заставило некоторых пользователей сожалеть о покупке. Хотя с 1985 по 1989 год было продано 4 миллиона экземпляров C128, его популярность значительно уступала популярности его предшественника. Одной из причин низких объемов продаж может быть то, что C64 продавался в основном людям, интересующимся видеоиграми, для которых более дорогой C128 не предлагал существенных улучшений. Некоторые программы для C64, такие как Bard's Tale III и Kid Niki, работали в режиме 128, не указывая об этом в документации, используя автозагрузку и более быстрый доступ к дискам 1571. Некоторые текстовые приключения Infocom использовали 80-колонный экран и увеличенную емкость памяти. Некоторые игры для C64 были портированы в нативный режим, например Kikstart 2 и The Last V8 от Mastertronic, которые имели отдельные версии для C128, и Ultima V: Warriors of Destiny от Origin Systems, которая использовала дополнительную оперативную память для музыки при работе на C128. Star Fleet I: The War Begins от Interstel имела отдельные версии и использовала 80-колонный дисплей на C128. Однако подавляющее большинство игр запускалось просто в режиме C64, поскольку немногие разработчики использовали преимущества нативной производительности C128. Это программное обеспечение использовало дополнительную память, 80-колонный экран, улучшенную клавиатуру и дисководы большой емкости для обеспечения функций, которые считались необходимыми для делового использования. С помощью продвинутого языка программирования BASIC, совместимости с CP/M и "удобных" программных пакетов, таких как Jane, Commodore попыталась создать нишевый бизнес-рынок для C128, аналогичный стратегии, использованной для Plus/4, даже дистанцировавшись от термина "домашний компьютер", обозначив C128 как "Персональный компьютер" на корпусе. Важно отметить, что C128 стал первым компьютером Commodore, который рекламировал использование Microsoft BASIC, что было конкурентным преимуществом. C128, безусловно, был лучшей бизнес-машиной, чем C64, но не лучшей игровой платформой. К тому времени, когда C128 был выпущен, люди, которым нужны были бизнес-машины, почти исключительно покупали клоны IBM PC. Доступность недорогих IBM-совместимых компьютеров, таких как Leading Edge Model D и Tandy 1000, которые в некоторых случаях продавались дешевле, чем полная система C128, сорвала планы Commodore по завоеванию рынка малого бизнеса. Существовала профессиональная CAD-программа Home Designer от BRiWALL, но в эпоху C128 большая часть этой работы выполнялась на ПК. Основная причина, по которой C128 все еще продавался относительно хорошо, вероятно, заключалась в том, что это была гораздо лучшая машина для любительского программирования, чем C64, а также в том, что она была естественным продолжением для владельцев, имевших значительные инвестиции в периферийные устройства и программное обеспечение для C64. Но в конечном итоге C128 не смог конкурировать с новыми 16/32-битными системами, которые превосходили его и все остальное 8-битное поколение практически во всех аспектах. Когда производство C128(D/DCR) было прекращено в 1989 году, сообщалось, что его себестоимость почти такая же, как и у Amiga 500, хотя C128D пришлось продавать на несколько сотен долларов дешевле, чтобы сохранить имидж Amiga как высококлассного продукта. Бил Херд заявил, что цели разработки C128 изначально не включали 100% совместимость с C64. После того, как к Херду на презентации Plus/4 обратилась женщина, разочарованная тем, что ее образовательный программный пакет, написанный для C64, не будет работать на новом компьютере Commodore, была предусмотрена некоторая форма совместимости. Однако, когда маркетинговый отдел Commodore узнал об этом, он самостоятельно объявил о полной совместимости. Херд объяснил включение процессора Z80 в C128 необходимостью подтверждения этого заявления о "100% совместимости", поскольку поддержка картриджа Z80 для C64 потребовала бы от C128 подачи дополнительного питания на порт картриджа. Он также отметил, что видеочип VDC и Z80 были источниками проблем в процессе разработки машины. Херд добавил: "Я рассчитывал, что C128 будет продаваться около года, мы думали, что пара миллионов будет неплохо, и, конечно, он не будет конкурировать с Amiga или даже C64". После того, как Commodore впервые повысила цену 64, представив переработанную модель 64C в 1986 году, ее прибыль от каждой проданной 64C была, по сообщениям, значительно выше, чем от C128.