Emulation Commodore 65

image

Vous ne savez jamais où, quand et à quel moment vous découvrez un ordinateur inconnu.

Cette fois, cela s'est avéré plus facile.

J'ai commencé à chercher une liste d'ordinateurs basés sur le MOS 6502 et suis tombé sur la mention de C64Dx (ou C65) basé sur 65CE02 - un ordinateur prototype créé dans Commodore Business Machines en 1990-1991. Il s'agit d'une version améliorée de Commodore 64, et il était censé être rétrocompatible avec un ancien ordinateur, tout en fournissant un certain nombre de fonctionnalités avancées proches d'Amiga. Le nombre de modèles publiés n'est pas tellement, mais la liste des prix annoncée lors de l'achat du C65 est impressionnante.

J'ai également lu sur MEGA65 - un ordinateur compatible avec C64 / C65. Voilà, je suis mûr pour une connaissance.

Mode vidéo


La nouvelle puce VIC III offre les fonctionnalités suivantes:

  • mode texte 40/80 x25
  • 320x200x256
  • 640 × 200 × 16
  • 1280 × 200 × 4
  • 320 × 400 × 256
  • 640 × 400 × 16
  • 1280 × 400 × 4

Modes vidéo disponibles compatibles avec le

contrôleur VIC II DMA
128K ROM
128K RAM, extensible jusqu'à 1M
Deux puces sonores SID
Nouvelle version de BASIC 10.0

Maintenant un émulateur.

Hi65 n'a pas fonctionné, n'a laissé que des exemples de base pour se familiariser avec les graphiques.

J'en ai pris un autre . Vous devez également télécharger le fichier et le renommer en c65-system.rom

Exécutez l'émulateur:

xc65.exe -8 diskimage.d81

Pour plus de commodité, j'ai commencé à chercher des outils croisés:

- Assembleur 64tass depuis prend en charge 65CE02
- cc1541 V3.1 - l'utilitaire crée des images .d81 et ajoute des fichiers. Il est donc plus pratique de

image

décrire DirMaster v3.1.5 / Style lors de la construction . Doit avoir.

Le premier objectif était d'écrire un programme qui affiche "Bonjour tout le monde!" La lecture des sujets sur les forums a suggéré une solution:

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

Quelque chose a mal tourné? Seul l'encodage est différent:

image

Par conséquent, le texte a changé en:

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

image

Ensuite, j'ai trouvé la documentation du Commodore 64 Programmers Reference Guide et une autre archive qui a trouvé beaucoup de goodies.

La lecture du dock c64-programmers_reference_guide-03-programming_graphics.pdf a suggéré l'idée d'un seul effet. par exemple

	lda #$62
	sta $D018

Placez la mémoire vidéo à 1800 $ et les données de personnage à 800 $. En lisant c65manual.txt , j'ai trouvé des informations sur les couleurs:

$ D100, $ D200, le D300 $ - le R, le G, le lit et les valeurs de couleur (0-15)
$ D800- $ DBFFF - attributs de texte de couleur (ou plutôt, toutes les couleurs sont stockées aux adresses 1F800 $ - 1FFFF $).

Quelques exemples du code, j'ai obtenu un jeu de caractères prêt à l'emploi et des couleurs simples. Je voulais juste utiliser la puce DMAgic pour transférer deux sections de mémoire.

J'ai commencé à lire les quais .

Le contrôleur fonctionne en 4 modes:

COPY - copie d'une section de mémoire
SWAP - échange de données pour des sections
FILL - remplissage d'un morceau de mémoire avec des données
MIX - effectue un mix booléen Minterm sur la source et le récepteur (tuez-moi, je ne sais pas écrire)

Et puis je suis devenu complètement confus, je n'ai compris que le principe du travail. Pour plus de commodité, des tables DMAT sont utilisées, l'écriture de données dans les registres effectuera l'opération:

		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

Dans le même temps, dans le dock, j'ai lu que vous pouvez utiliser DMA. J'ai écrit un programme sans connaître la langue:

image

maintenant la dorsale est prête, je connais les données nécessaires et il est temps d'écrire le code plus loin. Mais, le lendemain, j'attendais une déception complète - je n'ai pas trouvé de mémoire libre et ne comprenais pas comment fonctionnaient les opérations de mémoire. Le forum a suggéré que la raison était dans l'émulateur kemu et a suggéré plusieurs procédures. De plus, certaines informations me sont incompréhensibles. Et pourtant, j'espère qu'un jour j'aurai accès à la vraie vie et découvrirai tout ce qui est intéressant, et je pourrai écrire des programmes. Eh bien, n'est-ce pas une joie?

pouet

All Articles