Эмуляция 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 #$0
cycle  lda hworld,x
       cmp #0
       beq exit
       sta $0800,x
; sta $D800,x
       inx
       jmp cycle
exit   rts
hworld .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 $18000
address:
	.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
Источник: https://habr.com/ru/post/501374/


Интересные статьи

Интересные статьи

В этой статье мы рассмотрим, как система управления 1С-Битрикс справляется с большими нагрузками. Данный вопрос особенно актуален сегодня, когда электронная торговля начинает конкурировать по обороту ...
Ранее в одном из наших КП добавление задач обрабатывалось бизнес-процессами, сейчас задач стало столько, что бизнес-процессы стали неуместны, и понадобился инструмент для массовой заливки задач на КП.
Как широко известно, с 1 января 2017 года наступает три важных события в жизни интернет-магазинов.
Как обновить ядро 1С-Битрикс без единой секунды простоя и с гарантией работоспособности платформы? Если вы не можете закрыть сайт на техобслуживание, и не хотите экстренно разворачивать сайт из бэкапа...
В «1С-Битрикс» считают: современный интернет-магазин должен быть визуально привлекательным, адаптированным для просмотра с мобильных устройств и максимально персонализированным с помощью технологии Бо...