Хабрахабр

Эмуляция Commodore 65

image

Никогда не знаешь, где, когда и в какой момент времени узнаешь о неизвестном компьютере.

В этот раз вышло проще.
Я стал искать список компьютеров на основе MOS 6502 и наткнулся на упоминание C64Dx(или С65) на базе 65CE02 — прототип компьютера, созданного в Commodore Business Machines в 1990-1991 годах. Это улучшенная версия Commodore 64, и она должна была быть обратно-совместимой со старым компьютером, при этом предоставляя ряд расширенных функций, близких к Amiga. Число моделей выпущено не так и много, а вот список цен, озвученных при покупке C65 впечатляет.

Еще я прочитал о MEGA65 — компьютере, совместимом с C64/C65. Всё, я созрел к знакомству.

Видеорежим

новый чип VIC III предоставляет следующие возможности:

  • текстовый режим 40/80 x25
  • 320x200x256
  • 640×200×16
  • 1280×200×4
  • 320×400×256
  • 640×400×16
  • 1280×400×4

доступны видеорежимы, совместимые с VIC II

DMA контроллер
128К ROM
128K RAM, возможно расширение до 1М
Два звуковых чипа SID
Новая версия BASIC 10.0

Теперь эмулятор.

Hi65 не заработал, оставил только примеры Бейсика, чтобы ознакомиться с графикой.

Я взял другой.

Еще нужно скачать файл
и переименовать в c65-system.rom

запуск эмулятора

xc65.exe -8 diskimage.d81

Для удобства я стал искать кросс-средства:
ассемблер 64tass т.к. поддерживает 65CE02
cc1541 V3.1 — утилита создает образы .d81 и добавляет файлы. Так удобнее при сборке

image
DirMaster v3.1.5/Style описывать лишне. MustHave.

Первая цель была написать программу, которая выводит на экран «Hello,world!». Чтение топиков на форумах подсказало решение

*=$0FFE.byte $00, $10 ldx #$0cycle lda hworld,x cmp #0 beq exit sta $0800,x; sta $D800,x inx jmp cycleexit rtshworld .text 'hello world!',0

image

Что-то пошло не так? Просто кодировка другая:

image

Поэтому текст поменялся на

hworld .byte 8,5,$0C,$0C,$0F,$20,$17,$0F,$12,$0C,4,$21,0

image

Далее, нашел документацию Commodore 64 Programmers Reference Guide
и еще один архив, где нашлось много вкусного.

Чтение дока c64-programmers_reference_guide-03-programming_graphics.pdf подсказало идею одного эффекта. Например

 lda #$62 sta $D018

Разместит видеопамять по адресу $1800, а данные символов по адресу $800. Почитав c65manual.txt, я нашел информацию о цветах:

$D100, $D200,$D300 — R,G,B значения цветов(0-15)
$D800-$DBFFF — цветовые атрибуты текста (а точнее, все цвета хранятся по адресам $1F800-$1FFFF).

Немного проб кода, я получил готовый набор символов и простые цвета. Вот только хотелось использовать чип DMAgic для переброски двух участков памяти.

Стал читать доки

Контроллер работает в 4 режимах
COPY — копирование участка памяти
SWAP — обмен данными для участков
FILL — заполнить участок памяти данными
MIX — выполняет boolean Minterm mix над источником и приемником(убейте меня, я не знаю, как написать)

а дальше я совсем запутался, понял только принцип работы. Для удобства используются таблицы DMAT, запись данных в регистры выполнит операцию

 lda #0 ;the bank (0-15) where the list is sta $d702 lda #>address ;the high byte of the list address sta $d701 lda #<address sta $d700 ;the low byte of the list address ;this also triggers the dma operation, ;and the cpu is suspended loop: bit $d703 ;check status (in case irq/nmi enabled) bmi loop ; busy jmp doplas; DMA 3, 2000, ASC("+"), 0, DEC("800"), 0 Fill screen with '+'; DMA 0, 2000, DEC("800"), 0, DEC("8000"), 1 Copy screen to $18000address: .byte 0 ;command .word 80*25; copy size .word $C000 ; 800+80 ; src adr .byte 1 ; bank .word $1800 ; dst adr .byte 0 ; bank .word 0 ; modulo n/u

Заодно, в доке вычитал, что можно использовать DMA. Написал программу, еще не зная язык:

image

Теперь костяк готов, нужные данные мне известны, и пора писать код дальше. Но, на следующий день меня ждал полный облом — я не нашел свободной памяти и не разобрался, как работают операции памяти. На форуме подсказали, что причина в эмуляторе kemu и подсказали несколько процедур. К тому же, часть информации непонятна для меня. И все же, я надеюсь, что когда-нибудь я получу доступ к реалу и узнаю всё, что интересно, и я смогу писать программы. Ну не радость ли?

pouet

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть