Migration to the new server completed.

Please add any new defect you notice here!


Die Migration auf den neuen Server ist abgeschlossen.

Bitte neue Defekte hier vermerken!

Kernal Hallo Welt

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Baustelle Dieser Artikel befindet sich im Aufbau und ist vorläufig als Entwurf einzustufen.


So hat ein simpelster Kernal auszusehen.

Der Code ist ACME-Style und zeigt auf, was man alles erledigen muss, nur damit man ein simples "Hallo Welt" auf den Bildschirm kriegt.

;HalloWeltKernal by Markus Stehr aka BastetFurry/Dienstagstreff
;Dieser Quellcode darf als Basis für eigene Entwicklungen genutzt werden, auch mit
;geschlossenem Quellcode.

;Wir assemblieren in eine Datei ohne Startadresse
!to "hallowelt.rom",plain

;Hier wird die zurzeitige Farbe für die CharOut Routine gespeichert.
;Zurzeit nur von ClearScreen (Bildschirm löschen) benutzt.
ZP_CharColor = $02

;;;;; Kernal fängt hier an
*=$e000

;Hier kommen wir nach einem Reset an.
Reset_Entry:
jsr InitZeroPage      ;Einrichten der Zeropage mit den vorgabewerten
jsr InitVIC           ;Den VIC vorbereiten

jsr ClearScreen       ;Bildschirm löschen
ldx #$00              ;und Text ausgeben, bedarf wohl keiner Erklärung
textloop:
lda hallowelt,x
cmp #$00
beq Endless
sta $0400,x
inx
jmp textloop

;da wir ansonsten nichts mehr zu tun haben, Maschine "stoppen"
Endless:
jmp Endless

;Diese Routine löscht den Bildschirmspeicher und das Farbram
ClearScreen:
ldx #$00
lda #$20
ClearScreenLoop1:
sta $0400,x   ; Bildschirmspeicher löschen
sta $0500,x
sta $0600,x
sta $06e8,x   
dex
bne ClearScreenLoop1:
ldx #$00
lda ZP_CharColor ; Buchstabenfarbe aus der Zeropage holen
ClearScreenLoop2:
sta $d800,x      ; Farbram löschen
sta $d900,x
sta $da00,x
sta $dae8,x
dex
bne ClearScreenLoop2:
rts

;Hier wird die Zeropage initialisiert, zurzeit nur mit dem Wert für die Buchstabenfarbe
InitZeroPage:
lda #$0e
sta ZP_CharColor
rts

;Initialisierung des VICs
InitVIC:
lda #$0e    ;Rahmenfarbe Hellblau
sta $d020   ;Setzen
lda #$06    ;Hintergrund Blau
sta $d021   ;Setzen
lda #$14    ;\
sta $d018   ; \
lda #$08    ;  |Normale Videokonfiguration
sta $d016   ;  |Setzen
lda #$9B    ; /
sta $d011   ;/
rts

;Eingangspunkt für Interrupts
; ACHTUNG: Dies ist noch keine richtige Interruptabhandlung!
INT_NMI_Entry;
INT_IRQ_Entry:
;Alle Register auf den Stack
pha
txa
pha
tya
pha

;Sollte der Interrupt vorzeitig beendet sein kann hier hin gesprungen werden
ReturnFromINT:
;Alles wieder runter vom Stack und mit dem normalem Programmablauf fortfahren
pla
tay
pla
tax
pla
rti

;Strings
hallowelt:
!scr "hallo welt!"
!byte $00

;Alle Adressen für die IRQs und Reset
*=$fffa
;NMI
!word INT_NMI_Entry
;Reset
!word Reset_Entry
;IRQ
!word INT_IRQ_Entry