Commodore emulação 65

imagem

Você nunca sabe onde, quando e em que momento você aprende sobre um computador desconhecido.

Desta vez, ficou mais fácil.

Comecei a procurar uma lista de computadores baseados no MOS 6502 e me deparei com a menção de C64Dx (ou C65) baseado em 65CE02 - um protótipo de um computador criado no Commodore Business Machines em 1990-1991. Esta é uma versão aprimorada do Commodore 64 e deveria ser compatível com versões anteriores de um computador antigo, além de fornecer vários recursos avançados próximos ao Amiga. O número de modelos lançados não é tão grande, mas a lista de preços anunciados na compra do C65 é impressionante.

Também li sobre o MEGA65 - um computador compatível com C64 / C65. É isso, estou madura para um conhecido.

Modo de vídeo


O novo chip VIC III oferece os seguintes recursos:

  • modo de texto 40/80 x25
  • 320x200x256
  • 640 × 200 × 16
  • 1280 × 200 × 4
  • 320 × 400 × 256
  • 640 × 400 × 16
  • 1280 × 400 × 4

Modos de vídeo disponíveis compatíveis com o

controlador VIC II DMA
128K ROM
128K RAM, expansível até 1M
Dois chips de som SID
Nova versão do BASIC 10.0

Agora um emulador.

O Hi65 não funcionou, deixou apenas exemplos do BASIC para se familiarizar com os gráficos.

Eu peguei outro . Você também precisa baixar o arquivo e renomeá-lo para c65-system.rom

Execute o emulador:

xc65.exe -8 diskimage.d81

Por conveniência, comecei a procurar ferramentas cruzadas:

- Assembler 64tass desde suporta 65CE02
- cc1541 V3.1 - o utilitário cria imagens .d81 e adiciona arquivos. Portanto, é mais conveniente

imagem

descrever o DirMaster v3.1.5 / Style ao criar . MustHave.

O primeiro objetivo foi escrever um programa que exibisse "Olá, mundo!" A leitura de tópicos nos fóruns sugeriu uma solução:

*=$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

imagem

Algo deu errado? Apenas a codificação é diferente:

imagem

portanto, o texto foi alterado para:

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

imagem

Em seguida, encontrei a documentação do Commodore 64 Programmers Reference Guide e outro arquivo que encontrou muitas vantagens.

A leitura do encaixe c64-programmers_reference_guide-03-programming_graphics.pdf sugeriu a idéia de um único efeito. por exemplo

	lda #$62
	sta $D018

Coloque a memória de vídeo em US $ 1800 e os dados dos caracteres em US $ 800. Ao ler c65manual.txt , encontrei informações sobre as cores:

$ D100, $ D200, D300 $ - R, G, Cama e valores de cores (0-15)
$ D800- $ DBFFF - atributos de texto de cores (ou melhor, todas as cores são armazenadas nos endereços $ 1F800- $ 1FFFF).

Algumas amostras do código, eu tenho um conjunto de caracteres prontos e cores simples. Eu só queria usar o chip DMAgic para transferir duas seções da memória.

Comecei a ler as docas .

O controlador opera em 4 modos:

COPY - copiando uma seção da memória
SWAP - trocando dados por seções
FILL - preenchendo uma seção da memória com dados
MIX - executa um mix Minterm booleano na fonte e no receptor (mata-me, não sei escrever)

E então fiquei completamente confuso, entendi apenas o princípio do trabalho. Por conveniência, são usadas tabelas DMAT, a gravação de dados nos registradores executará a operação:

		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

Ao mesmo tempo, no banco dos réus, li que você pode usar o DMA. Eu escrevi um programa sem conhecer o idioma:

imagem

agora o backbone está pronto, conheço os dados necessários e é hora de escrever o código ainda mais. Mas, no dia seguinte, eu estava esperando por uma chatice completa - não encontrei memória livre e não entendi como as operações de memória funcionam. O fórum sugeriu que o motivo estava no emulador do kemu e sugeriu vários procedimentos. Além disso, algumas informações são incompreensíveis para mim. E, no entanto, espero que um dia eu tenha acesso à vida real e descubra tudo o que é interessante, e eu possa escrever programas. Bem, não é uma alegria?

pouet

All Articles