Emulationskommodore 65

Bild

Sie wissen nie, wo, wann und zu welchem ​​Zeitpunkt Sie etwas über einen unbekannten Computer erfahren.

Diesmal war es einfacher.

Ich suchte nach einer Liste von Computern, die auf MOS 6502 basieren, und stieß auf die Erwähnung von C64Dx (oder C65) auf Basis von 65CE02 - einem Prototyp eines Computers, der 1990-1991 in Commodore Business Machines erstellt wurde. Dies ist eine verbesserte Version von Commodore 64, die abwärtskompatibel mit einem alten Computer sein sollte und dennoch eine Reihe erweiterter Funktionen in der Nähe von Amiga bietet. Die Anzahl der veröffentlichten Modelle ist nicht so hoch, aber die beim Kauf des C65 angekündigte Preisliste ist beeindruckend.

Ich habe auch über MEGA65 gelesen - einen Computer, der mit C64 / C65 kompatibel ist. Das war's, ich bin reif für einen Bekannten.

Video Modus


Der neue VIC III-Chip bietet folgende Funktionen:

  • Textmodus 40/80 x25
  • 320 x 200 x 256
  • 640 × 200 × 16
  • 1280 × 200 × 4
  • 320 × 400 × 256
  • 640 × 400 × 16
  • 1280 × 400 × 4

Verfügbare Videomodi kompatibel mit VIC II

DMA-Controller
128K ROM
128K RAM, erweiterbar auf 1M
Zwei Soundchips SID
Neue Version von BASIC 10.0

Jetzt ein Emulator.

Hi65 funktionierte nicht, ließ nur BASIC-Beispiele übrig, um sich mit den Grafiken vertraut zu machen.

Ich nahm noch einen . Sie müssen die Datei auch herunterladen und in c65-system.rom umbenennen. Führen

Sie den Emulator aus:

xc65.exe -8 diskimage.d81

Der Einfachheit halber suchte ich nach Werkzeugen:

- Assembler 64tass seitdem unterstützt 65CE02
- cc1541 V3.1 - das Dienstprogramm erstellt .d81-Bilder und fügt Dateien hinzu. Daher ist es bequemer,

Bild

DirMaster v3.1.5 / Style beim Erstellen zu beschreiben . Haben müssen.

Das erste Ziel war es, ein Programm zu schreiben, das "Hallo Welt!" Das Lesen von Themen in den Foren schlug eine Lösung vor:

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

Bild

Etwas ist schief gelaufen? Nur die Kodierung ist anders:

Bild

Daher hat sich der Text geändert in:

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

Bild

Als nächstes fand ich die Dokumentation zum Commodore 64 Programmers Reference Guide und ein weiteres Archiv , das viele Extras enthielt.

Das Lesen des Docks c64-programmers_reference_guide-03-programming_graphics.pdf schlug die Idee eines einzelnen Effekts vor. zum Beispiel

	lda #$62
	sta $D018

Platzieren Sie den Videospeicher bei 1800 US-Dollar und die Zeichendaten bei 800 US-Dollar. Beim Lesen von c65manual.txt fand ich Informationen zu den Farben:

$ D100, $ D200, D300 $ - R-, G-, Bett- und Farbwerte (0-15)
$ D800- $ DBFFF - Farbtextattribute (oder besser gesagt, alle Farben werden an den Adressen gespeichert $ 1F800- $ 1FFFF).

Ein paar Beispiele des Codes, ich habe einen vorgefertigten Zeichensatz und einfache Farben. Ich wollte nur den DMAgic-Chip verwenden, um zwei Speicherbereiche zu übertragen.

Ich fing an, die Docks zu lesen .

Die Steuerung arbeitet in 4 Modi:

KOPIEREN - Kopieren eines Abschnitts des
SWAP- Speichers - Austauschen von Daten gegen
FILL- Abschnitte - Füllen eines Speicherabschnitts mit Daten
MIX - führt einen booleschen Minterm-Mix an Quelle und Empfänger durch (töte mich, ich weiß nicht, wie man schreibt)

Und dann war ich völlig verwirrt, ich verstand nur das Prinzip der Arbeit. Der Einfachheit halber werden DMAT-Tabellen verwendet. Durch Schreiben von Daten in die Register wird die folgende Operation ausgeführt:

		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

Gleichzeitig habe ich im Dock gelesen, dass Sie DMA verwenden können. Ich habe ein Programm geschrieben, ohne die Sprache zu kennen:

Bild

Jetzt ist das Backbone fertig, ich kenne die erforderlichen Daten und es ist Zeit, den Code weiter zu schreiben. Aber am nächsten Tag wartete ich auf eine völlige Enttäuschung - ich fand keinen freien Speicher und verstand nicht, wie Speicheroperationen funktionieren. Das Forum schlug vor, dass der Grund im Kemu-Emulator lag, und schlug mehrere Verfahren vor. Außerdem sind einige Informationen für mich unverständlich. Und doch hoffe ich, dass ich eines Tages Zugang zum wirklichen Leben bekomme und alles Interessante herausfinde und Programme schreiben kann. Ist es nicht eine Freude?

pouet

All Articles