Kernalroutinen -------------- Kernalroutinen sind die nachgebildeten Routinen des C64, angepasst fuer die Benutzung von Fenstern bzw. Ergaenzungen. Die Beschreibung entspricht weitgehend der in der Dokumentation. Kernalroutine | Beschreibung --------------------+-------------------------------------------------- save_orig* | Sichert den benutzten Speicherbereich in der | Zeropage, den Zeiger in $0326 sowie die aktuelle | Farbe in $0286 und stellt danach den den Zeiger | fuer $ffd2 um --------------------+-------------------------------------------------- restore_orig* | Stellt den benutzten Speicherbereich in der Zero- | page, den Zeiger in $0326 sowie die aktuelle Frbe | in $0286 wieder her --------------------+-------------------------------------------------- put_row_col | Setzt die Zeile und Spalte (eigene wegen der | Routine set_screen_pointers); Zeile im X-Reg, | Spalte im Y-Reg --------------------+-------------------------------------------------- clear_screen | Loescht das Fenster home_cursor | Setzt den Cursor nach oben/links --------------------+-------------------------------------------------- set_screen_pointers | Aktualisiert die Zeiger fuer den Bildschirm- | speicher und Farb-RAM auf die aktuelle Zeile --------------------+-------------------------------------------------- setup_screen_print | Bildschirmausgabe durchfuehren --------------------+-------------------------------------------------- advance_cursor | Cursor ein Zeichen weiter bewegen back_cursor* | Cursor ein Zeichen zurueck bewegen --------------------+-------------------------------------------------- delete_char* | Zeichen links vom Cursor loeschen (Teil der | Originalroutine unshifted_chars, siehe $e74c) --------------------+-------------------------------------------------- insert_char* | An der Cursorposition Platz fuer ein Zeichen | schaffen (Teil der Originalroutine shifted_chars, | siehe $e805) --------------------+-------+------------------------------------------ output_to_screen | $e716 | Bildschirmausgabe unshifted_chars | Zeichen ohne Umschalttaste shifted_chars | Zeichen mit Umschalttaste --------------------+-------------------------------------------------- go_to_next_line | Cursor eine Zeile weiter bewegen perform_return | Zeilenumbruch durchfuehren go_to_prev_line* | Cursor eine Zeile zurueck bewegen perform_backreturn* | Zeilenumbruch rueckwaerts durchfuehren --------------------+-------+------------------------------------------ set_color_code | $e8cb | Farbwert auswaehlen (verwendet die | | Originalroutine) --------------------+-------------------------------------------------- scroll_screen | Fensterinhalt nach oben verschieben backscroll_screen* | Fensterinhalt nach unten verschieben move_a_screen_line | Kopiert eine Fensterzeile --------------------+-------------------------------------------------- sync_color_transfer | Aktualisiert temporaeren Zeiger fuer das Farb-RAM | (verwendet die Originalroutine) --------------------+-------------------------------------------------- set_start_of_line | Setzt den Zeiger fuer den Bildschirm auf auf die | aktuelle Zeile --------------------+-------------------------------------------------- clear_screen_line | Loescht die aktuelle Bildschirmzeile --------------------+-------+------------------------------------------ print_to_scr | $ea13 | Gibt den den Bildschirmcode (A-Reg) mit | | der Farbe (X-Reg) aus (verwendet die | | Originalroutine) --------------------+-------------------------------------------------- sync_color_ptr | Setzt den Zeiger fuer das Farb-RAM (verwendet die | Originalroutine) --------------------+-------+------------------------------------------ output_one_chr | $f1ca | Zeichen auf dem Ausgabegeraet ausgeben | | (Aufruf durch CHROUT/$ffd2) * = neue Kernalroutine in screen.a Funktionen ---------- Funktionen sind fuer den Aufruf von aussen gedacht (mit Ausnahme der Hilfsfunktionen). Funktion | Beschreibung ------------+---------------------------------------------------------- set_wptrs | Setzt wptrs anhand der angegebenen Zeile und legt damit | den Start des Fensters fest. Das A-Reg muss die (Start-) | Zeile (beginnend mit null) enthalten (Hilfsfunktion). ------------+---------------------------------------------------------- set_default | Standardkonfiguration mit einem Fenster ueber den ganzen | Bildschirm. Der Zwischenspeicher wird identisch gesetzt, | damit er gueltige Werte hat (Hilfsfunktion). ------------+---------------------------------------------------------- winit | Sichert den benutzten Speicherbereich und Zeiger; stellt | $ffd2 um, richtet ein grosses Fenster ein und loescht es ------------+---------------------------------------------------------- wquit | Stellt den benutzten Speicherbereich und Zeiger wieder | her ------------+---------------------------------------------------------- wswitch | Tauscht die Daten des aktuellen Fensters mit dem | Zwischenspeicher aus ------------+---------------------------------------------------------- wsplit | Bildschirm an der Zeile wy in zwei Fenster horizontal | aufteilen und diese jeweils loeschen (das obere Fenster | ist danach das aktulle Fenster) ------------+---------------------------------------------------------- wunsplit | Wieder ein grosses Fenster ueber den gesamten Bildschirm | anlegen und dieses loeschen ------------+---------------------------------------------------------- whcopy | Fenster auf dem Drucker ausgeben (hardcopy) ------------+---------------------------------------------------------- CHROUT | Zeichen auf dem Ausgabegeraet ausgeben; der ASCII-Wert | muss im A-Reg stehen (Aufruf mit jsr $ffd2, in BASIC den | Befehl PRINT verwenden) Aenderung der Speicherstellen und Register als Parameter -------------------------------------------------------- Grundsaetzlich muss man davon ausgehen, dass alle Register von den Routinen veraendert werden, es sei denn, sie werden explizit auf dem Stack gesichert. | Bedeutung ------+---------------------------------------------------------- wlnp | Zeiger auf die aktuelle Zeile im Bildschirmspeicher wclnp | Zeiger auf die aktuelle Zeile im Farb-RAM wx | Position des Cursors in der Zeile wy | Aktuelle Zeilennummer des Cursors wptrs | Zeiger auf den Tabelleneintrag fuer die erste Bildschirm- | zeile save | Zwischenspeicher fuer Fensterdaten (sptrs, srows, sx, sy) ------+---------------------------------------------------------- s | wird auf dem Stack gesichert p | wird als Parameter benutzt r | wird als Rueckgabe benutzt a | wird (ggf.) aktualisiert bzw. gesetzt t | muss von der aufrufenden Routine (in bestimmten Faellen) | gesetzt werden * | neue Kernalroutine Kernalroutine | A-Reg | X-Reg | Y-Reg | wlnp | wclnp | wx | wy --------------------+-------+-------+-------+------+-------+----+---- save_orig* | | | | | | | restore_orig* | | | | | | | --------------------+-------+-------+-------+------+-------+----+---- put_row_col | | p | p | a | a | a | a --------------------+-------+-------+-------+------+-------+----+---- clear_screen | | | | a | a | a | a home_cursor | | | | a | a | a | a set_screen_pointers | | | | a | a | | --------------------+-------+-------+-------+------+-------+----+---- setup_screen_print | p | | | t | a | a | a --------------------+-------+-------+-------+------+-------+----+---- advance_cursor | | | | a | a | a | a back_cursor* | | | | a | a | a | a --------------------+-------+-------+-------+------+-------+----+---- delete_char* | | | | t | a | a | insert_char* | | | | t | a | a | --------------------+-------+-------+-------+------+-------+----+---- output_to_screen | p/s | s | s | a/t | a | a | a unshifted_chars | p | | | a/t | a | a | a shifted_chars | p | | | a/t | a | a | a --------------------+-------+-------+-------+------+-------+----+---- Kernalroutine | A-Reg | X-Reg | Y-Reg | wlnp | wclnp | wx | wy --------------------+-------+-------+-------+------+-------+----+---- go_to_next_line | | | | a | a | | a go_to_prev_line* | | | | a | a | | a perform_return | | | | a | a | a | a perform_backreturn* | | | | a | a | a | a --------------------+-------+-------+-------+------+-------+----+---- set_color_code | p | | | | | | --------------------+-------+-------+-------+------+-------+----+---- scroll_screen | | | | a | a | | s backscroll_screen* | | | | a | a | | s move_a_screen_line | | | | t | a | | --------------------+-------+-------+-------+------+-------+----+---- sync_color_transfer | | | | t | a | | --------------------+-------+-------+-------+------+-------+----+---- set_start_of_line | | | | a | | | t --------------------+-------+-------+-------+------+-------+----+---- clear_screen_line | | | | a | a | | t --------------------+-------+-------+-------+------+-------+----+---- print_to_scr | p | p | | t | a | | --------------------+-------+-------+-------+------+-------+----+---- sync_color_ptr | | | | t | a | | --------------------+-------+-------+-------+------+-------+----+---- output_one_chr | p/s | s | s | a/t | a | a | a Funktion | A-Reg | X | Y | wlnp | wclnp | wx | wy | wptrs | save ------------+-------+---+---+------+-------+----+-----+-------+----- set_wptrs | p | | | | | | | a | set_default | | | | | | a | a | a | a ------------+-------+---+---+------+-------+----+-----+-------+----- winit | | | | a | a | a | a | a | a wquit | | | | | | | | | ------------+-------+---+---+------+-------+----+-----+-------+----- wswitch | | | | a | a | a | a | a | a ------------+-------+---+---+------+-------+----+-----+-------+----- wsplit | | | | a | a | a | p/a | a | a wunsplit | | | | a | a | a | a | a | a ------------+-------+---+---+------+-------+----+-----+-------+----- whcopy | | | | a | | | s | | ------------+-------+---+---+------+-------+----+-----+-------+----- CHROUT | p/s | s | s | a/t | a | a | a | | Aufruf von Unterroutinen ------------------------ setup_screen_print print_to_scr advance_cursor retreat_cursor retreat_cursor go_to_next_line output_to_screen unshifted_chars shifted_chars unshifted_chars setup_screen_print clear_screen_line perform_return go_to_next_line home_cursor advance_cursor shifted_chars setup_screen_print perform_return clear_screen backscroll_screen set_start_of_line move_a_screen_line clear_screen_line print_to_scr sync_color_ptr