Введение

Домашний компьютер, выпущенный в 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 значение этого места в памяти – регистр, отображаемый в памяти – может быть изменено. Таким образом, проверка значения этого места в памяти после записи в него позволит определить фактическую аппаратную платформу.

Настройка оперативной памяти

Для обработки относительно больших объемов ПЗУ и ОЗУ (в десять раз превышающих 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 и ОЗУ в модуле расширения.

С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.