!to "test_screen.prg", cbm
*=$c000
jmp test_save_orig ; SYS 49152
jmp test_restore_orig ; SYS 49155
; Kernalroutinen
jmp test_set_start_of_line ; SYS 49158
jmp test_clear_screen_line ; SYS 49161
jmp test_clear_screen_1 ; SYS 49164
jmp test_clear_screen_2 ; SYS 49167
jmp test_home_cursor ; SYS 49170
jmp test_move_a_screen_line ; SYS 49173
jmp test_scroll_1 ; SYS 49176
jmp test_scroll_2 ; SYS 49179
jmp test_backscroll_1 ; SYS 49182
jmp test_backscroll_2 ; SYS 49185
jmp test_goto_next_line_1 ; SYS 49188
jmp test_goto_next_line_2 ; SYS 49191
jmp test_perform_return ; SYS 49194
jmp test_goto_prev_line_1 ; SYS 49197
jmp test_goto_prev_line_2 ; SYS 49200
jmp test_perform_backreturn ; SYS 49203
jmp test_advance_cursor_1 ; SYS 49206
jmp test_advance_cursor_2 ; SYS 49209
jmp test_back_cursor_1 ; SYS 49212
jmp test_back_cursor_2 ; SYS 49215
jmp test_delete_char_1 ; SYS 49218
jmp test_delete_char_2 ; SYS 49221
jmp test_insert_char_1 ; SYS 49224
jmp test_insert_char_2 ; SYS 49227
jmp test_setup_screen_print ; SYS 49230
; Test der Routine output_to_screen bzw.
; unshifted_chars und shifted_chars
jmp test_output_registers ; SYS 49233
jmp test_unshifted_chars ; SYS 49236
jmp test_shifted_chars ; SYS 49239
jmp test_return ; SYS 49242
jmp test_shift_return ; SYS 49245
jmp test_move_crsr ; SYS 49248
jmp test_clear ; SYS 49251
jmp test_revers ; SYS 49254
jmp test_colors ; SYS 49257
jmp test_delete ; SYS 49260
jmp test_insert ; SYS 49263
jmp test_unknown ; SYS 49266
; weitere Kernalroutine
jmp test_put_row_col ; SYS 49269
; Hilfsfunktion
jmp test_set_wptrs ; SYS 49272
jmp test_set_default ; SYS 49275
; Funktionen
jmp test_winit_wquit ; SYS 49278
jmp test_wsplit_1 ; SYS 49281
jmp test_wsplit_2 ; SYS 49284
jmp test_wswitch ; SYS 49287
jmp test_wsplit_3 ; SYS 49290
jmp test_wsplit_4 ; SYS 49293
jmp test_wunsplit ; SYS 49296
jmp test_hcopy_1 ; SYS 49299
jmp test_hcopy_2 ; SYS 49302
!source "screen.a"
;####################################################################
;#
;# Makros
;#
;####################################################################
; Richtet ein Fenster ein
; Parameter: Start bei Zeilennummer, Anzahl Zeilen,
; aktuelle Spalte und Zeile
!macro set_win_params .start, .rows, .col, .row {
lda #<wptrs_scr + .start*2
sta wptrs
lda #>wptrs_scr + .start*2
sta wptrs+1
lda #.rows
sta wrows
lda #.col
sta wx
lda #.row
sta wy
}
;####################################################################
;#
;# Hilfsroutinen
;#
;####################################################################
; Die ersten 6 Zeilen mit roten "B" fuellen
fill_lines
ldy #0
lda #2
-
sta $0400,y
sta $d800,y
iny
cpy #6 * 40
bcc -
rts
; Erste und letzte Spalte des Fensters mit
; fortlaufenden Ziffern beginnend bei 0 fuellen
; (das Farb-RAM wird nicht veraendert)
fill_scroll_win
lda wy ; wy sichern
pha
lda #0 ; in der ersten Zeile beginnen
sta wy
-
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
lda wy ; Ziffern beginnend ab '0'; chr(wy+48)
clc
adc #$30
ldy #0 ; in die erste Spalte
sta (wlnp),y
ldy #COLS ; in die letzte Spalte
sta (wlnp),y
inc wy ; wy erhoehen
lda wy ; Abbruchbedingung wy > wrows
cmp wrows
bcc -
beq -
pla ; wy wieder herstellen
sta wy
rts
; Bildschirmzeile mit 40 verschiedenen Zeichen in
; wechselnden Farben fuellen
fill_move_line
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
jsr sync_color_ptr ; $f3/$f4 (wclnp) setzen
; Hintergrundfarbe ermitteln und zwischenspeichern
lda $d021
and #$0f
sta $0334 ; unbenutzte Speicherstelle
; Bildschirmzeile fuellen
ldy #39 ; Bildschirmcode 39 bis 0 verwenden
-
tya
sta (wlnp),y
and #$0f ; die unteren 4 Bits als Farbe verwenden
cmp $0334 ; es sei denn, es ist die Hintergrundfarbe
bne +
lda $0286 ; in diesem Fall die Textfarbe verwenden
+
sta (wclnp),y
dey
bpl -
rts
; Speichert die Fensterparameter in den Vergleichswerten ab
save_wlnp_wx_wy
lda wlnp
sta vals
lda wlnp+1
sta vals+1
lda wx
sta vals+2
lda wy
sta vals+3
rts
; Teilt den Bildschirm und speichert die Vergleichswerte ab
; (wy muss von der aufrufenden Routine gesetzt werden)
split_screen
jsr set_screen_pointers
jsr wsplit
jsr save_wlnp_wx_wy
lda wrows
sta vals+4
lda sptrs
sta vals+5
lda sptrs+1
sta vals+6
lda srows
sta vals+7
lda sx
sta vals+8
lda sy
sta vals+9
rts
;####################################################################
;#
;# Testroutinen
;#
;####################################################################
; Ruft die Routine zur Sicherung der Originaldaten auf
test_save_orig
jsr save_orig
lda #<sav_scrzp
sta vals
lda #>sav_scrzp
sta vals+1
lda #<sav_outptr
sta vals+2
lda #>sav_outptr
sta vals+3
lda #<sav_color
sta vals+4
lda #>sav_color
sta vals+5
lda #<sav_invers
sta vals+6
lda #>sav_invers
sta vals+7
rts
test_restore_orig
jsr save_orig
+set_win_params 0, 24, 20, 7
jsr restore_orig
rts
; Richtet ein Fenster ueber den gesamten Bildschirm ein
; und setzt den Cursor in die 8. Zeile (Zeilennummer 7)
test_set_start_of_line
jsr save_orig
+set_win_params 0, 24, 0, 7
jsr set_start_of_line
lda wlnp
sta vals
lda wlnp+1
sta vals+1
jsr restore_orig
rts
; Richtet ein Fenster mit 6 Zeilen ein und loescht die
; 4. Zeile (Zeilennummer 3);
test_clear_screen_line
jsr save_orig
jsr fill_lines
+set_win_params 0, 5, 0, 3
jsr clear_screen_line
lda $0286
sta vals
jsr restore_orig
rts
; Richtet ein Fenster mit 5 Zeilen ein und loescht es
test_clear_screen_1
jsr save_orig
jsr fill_lines
+set_win_params 0, 4, 0, 0
jsr clear_screen
jsr restore_orig
rts
; Richtet ein Fenster mit 1 Zeile ein und loescht es.
; Das Fenster beginnt in der 3. Bildschirmzeile.
test_clear_screen_2
jsr save_orig
jsr fill_lines
+set_win_params 2, 0, 0, 0
jsr clear_screen
jsr restore_orig
rts
; Platziert den Cursor oben/links (ausgehend von einer
; Position mitten im Fenster)
test_home_cursor
jsr save_orig
+set_win_params 0, 5, 10, 4
jsr home_cursor
jsr save_wlnp_wx_wy
jsr restore_orig
rts
; Fuellt die 3. Zeile (Zeilennummer 2) mit Zeichen
; unterschiedlicher Farbe und kopiert diese Zeile
; dann zwei Zeilen nach unten
test_move_a_screen_line
jsr save_orig
+set_win_params 0, 7, 0, 2
jsr fill_move_line
; $d1/$d2 (wlnp) und $f3/$f4 (wclnp) bereits
; durch fill_move_line gesetzt
; $ac/$ad (tptr1) zwei Zeilen tiefer setzen
lda wlnp
clc
adc #80
sta tptr1
lda wlnp+1
adc #0
sta tptr1+1
jsr move_a_screen_line
jsr restore_orig
rts
; Richtet ein Fenster mit 5 Zeilen ein, in dem in der ersten
; und letzten Spalte fortlaufend Ziffern beginnend mit null
; stehen und scrollt das Fenster. Das Farb-RAM wird dabei
; nicht veraendert.
test_scroll_1
jsr save_orig
jsr fill_lines
+set_win_params 0, 4, 0, 4
jsr clear_screen
jsr fill_scroll_win
jsr scroll_screen
lda wy
sta vals
jsr restore_orig
rts
; Richtet ein Fenster mit einer Zeile ein, in der in der ersten
; und letzten Spalte fortlaufend eine Null steht und scrollt das
; Fenster. Das Farb-RAM wird dabei nicht veraendert.
test_scroll_2
jsr save_orig
jsr fill_lines
+set_win_params 0, 0, 0, 0
jsr clear_screen
jsr fill_scroll_win
jsr scroll_screen
jsr restore_orig
rts
; Richtet ein Fenster mit 5 Zeilen ein, in dem in der ersten
; und letzten Spalte fortlaufend Ziffern beginnend mit null
; stehen und scrollt das Fenster rueckwaerts. Das Farb-RAM
; wird dabei nicht veraendert. Das Fenster beginnt in der
; 2. Bildschirmzeile.
test_backscroll_1
jsr save_orig
jsr fill_lines
+set_win_params 1, 4, 0, 0
jsr clear_screen
jsr fill_scroll_win
jsr backscroll_screen
lda wy
sta vals
jsr restore_orig
rts
; Richtet ein Fenster mit einer Zeile ein, in der in der ersten
; und letzten Spalte fortlaufend eine Null steht und scrollt das
; Fenster. Das Farb-RAM wird dabei nicht veraendert. Das Fenster
; beginnt in der 6. Bildschirmzeile.
test_backscroll_2
jsr save_orig
jsr fill_lines
+set_win_params 5, 0, 0, 0
jsr clear_screen
jsr fill_scroll_win
jsr backscroll_screen
jsr restore_orig
rts
; Bewegt den Cursor von der 3. zur 4. Zeile
; (Zeilennummer 2 nach 3)
test_goto_next_line_1
jsr save_orig
+set_win_params 0, 5, 0, 2
jsr fill_scroll_win
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
jsr go_to_next_line
lda wlnp
sta vals
lda wlnp+1
sta vals+1
lda wy
sta vals+2
jsr restore_orig
rts
; Bewegt den Cursur von der letzten Zeile (Zeilennummer 5)
; aus eine Zeile nach unten (mit Scrolling).
test_goto_next_line_2
jsr save_orig
+set_win_params 0, 5, 0, 5
jsr fill_scroll_win
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
jsr go_to_next_line
lda wlnp
sta vals
lda wlnp+1
sta vals+1
lda wy
sta vals+2
jsr restore_orig
rts
; Fuehrt in der 3. Zeile (Zeilennummer 2) einen Zeilenumbruch
; durch (der Cursor steht mitten in der Zeile)
test_perform_return
jsr save_orig
+set_win_params 0, 5, 10, 2
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
jsr perform_return
jsr save_wlnp_wx_wy
jsr restore_orig
rts
; Bewegt den Cursor von der 4. zur 3. Zeile
; (Zeilennummer 3 nach 2)
test_goto_prev_line_1
jsr save_orig
+set_win_params 0, 5, 0, 3
jsr fill_scroll_win
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
jsr go_to_prev_line
lda wlnp
sta vals
lda wlnp+1
sta vals+1
lda wy
sta vals+2
jsr restore_orig
rts
; Bewegt den Cursur von der ersten Zeile (Zeilennummer 0)
; aus eine Zeile nach oben (mit Scrolling)
test_goto_prev_line_2
jsr save_orig
+set_win_params 0, 5, 0, 0
jsr fill_scroll_win
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
jsr go_to_prev_line
lda wlnp
sta vals
lda wlnp+1
sta vals+1
lda wy
sta vals+2
jsr restore_orig
rts
; Fuehrt in der 3. Zeile (Zeilennummer 2) einen
; rueckwaertigen Zeilenumbruch durch (der Cursor
; steht mitten in der Zeile)
test_perform_backreturn
jsr save_orig
+set_win_params 0, 5, 10, 2
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
jsr perform_backreturn
jsr save_wlnp_wx_wy
jsr restore_orig
rts
; Bewegt den Cursor in der 3. Zeile (Zeilennummer 2)
; von einer Position inmitten der Zeile um eins nach
; rechts
test_advance_cursor_1
jsr save_orig
+set_win_params 0, 5, 20, 2
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
jsr advance_cursor
jsr save_wlnp_wx_wy
jsr restore_orig
rts
; Bewegt den Cursor in der 3. Zeile (Zeilennummer 2)
; von der letzten Position der Zeile um eins nach
; rechts
test_advance_cursor_2
jsr save_orig
+set_win_params 0, 5, 39, 2
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
jsr advance_cursor
jsr save_wlnp_wx_wy
jsr restore_orig
rts
; Bewegt den Cursor in der 3. Zeile (Zeilennummer 2)
; von einer Position inmitten der Zeile um eins nach
; links
test_back_cursor_1
jsr save_orig
+set_win_params 0, 5, 20, 2
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
jsr back_cursor
jsr save_wlnp_wx_wy
jsr restore_orig
rts
; Bewegt den Cursor in der 3. Zeile (Zeilennummer 2)
; von der ersten Position der Zeile um eins nach
; links
test_back_cursor_2
jsr save_orig
+set_win_params 0, 5, 0, 2
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
jsr back_cursor
jsr save_wlnp_wx_wy
jsr restore_orig
rts
; Loescht in der 3. Zeile (Zeilennummer 2) ein Zeichen
; (der Cursor befindet sich innerhalb der Zeile)
test_delete_char_1
jsr save_orig
+set_win_params 0, 5, 10, 2
jsr fill_move_line
; $d1/$d2 (wlnp) bereits durch fill_move_line gesetzt
jsr delete_char
lda wx
sta vals
lda $0286
sta vals+1
jsr restore_orig
rts
; Loescht in der 3. Zeile (Zeilennummer 2) ein Zeichen
; (der Cursor befindet sich am Anfang der Zeile)
test_delete_char_2
jsr save_orig
+set_win_params 0, 5, 0, 2
jsr fill_move_line
; $d1/$d2 (wlnp) bereits durch fill_move_line gesetzt
jsr delete_char
lda wx
sta vals
jsr restore_orig
rts
; Fuegt in der 3. Zeile (Zeilennummer 2) ein Zeichen
; ein (der Cursor befindet sich am Anfang der Zeile)
test_insert_char_1
jsr save_orig
+set_win_params 0, 5, 0, 2
jsr fill_move_line
; $d1/$d2 (wlnp) bereits durch fill_move_line gesetzt
jsr insert_char
lda wx
sta vals
lda $0286
sta vals+1
jsr restore_orig
rts
; Fuegt in der 3. Zeile (Zeilennummer 2) ein Zeichen
; ein (der Cursor befindet sich am Ende der Zeile)
test_insert_char_2
jsr save_orig
+set_win_params 0, 5, 39, 2
jsr fill_move_line
; $d1/$d2 (wlnp) bereits durch fill_move_line gesetzt
jsr insert_char
lda wx
sta vals
lda $0286
sta vals+1
jsr restore_orig
rts
; Gibt in der 3. Zeile (Zeilennummer 2) ein normales
; und ein inverses Zeichen in roter Farbe aus
test_setup_screen_print
jsr save_orig
+set_win_params 0, 5, 20, 2
jsr set_start_of_line ; $d1/$d2 (wlnp) setzen
lda #2
sta $0286
jsr setup_screen_print
lda #3
sta $c7
jsr setup_screen_print
lda $0286
sta vals
jsr restore_orig
rts
; Gibt ein Zeichen aus und setzt vorher das X- und
; Y-Register
test_output_registers
jsr save_orig
+set_win_params 0, 5, 0, 0
jsr clear_screen
ldx #100
ldy #200
lda #65
jsr output_to_screen
sta vals
stx vals+1
sty vals+2
jsr restore_orig
rts
; Gibt die Buchstaben/Grafikzeichen ohne Umschalttaste
; aus (ASCII 32-127)
test_unshifted_chars
jsr save_orig
+set_win_params 0, 5, 0, 0
jsr clear_screen
; $d1/$d2 durch clear_screen gesetzt
ldx #32
-
txa
jsr output_to_screen
inx
bpl - ; Abbruchbedingung: X >= 128
jsr restore_orig
rts
; Gibt die Buchstaben/Grafikzeichen ohne Umschalttaste
; aus (ASCII 160-255)
test_shifted_chars
jsr save_orig
+set_win_params 0, 5, 0, 0
jsr clear_screen
; $d1/$d2 durch clear_screen gesetzt
ldx #160
-
txa
jsr output_to_screen
inx
bne - ; Abbruchbedingung: X = 0 (Ueberlauf)
jsr restore_orig
rts
; Gibt in der 3. Zeile (Zeilenindex 2) den ASCII-Wert
; 13 fuer einen Zeilenumbruch aus (der Cursor befindet
; sich in der Mitte der Zeile)
test_return
jsr save_orig
+set_win_params 0, 5, 20, 2
lda #13
jsr output_to_screen
lda wx
sta vals
lda wy
sta vals+1
jsr restore_orig
rts
; Gibt in der 3. Zeile (Zeilenindex 2) den ASCII-Wert
; 141 fuer einen rueckwaertigen Zeilenumbruch aus (der
; Cursor befindet sich in der Mitte der Zeile)
test_shift_return
jsr save_orig
+set_win_params 0, 5, 20, 2
lda #141
jsr output_to_screen
lda wx
sta vals
lda wy
sta vals+1
jsr restore_orig
rts
; Gibt nacheinander die ASCII-Werte 29 (Cursor right),
; 17 (Cursor down), 157 (Cursor left), 145 (Cursor up)
; und 19 (Home) aus
test_move_crsr
jsr save_orig
+set_win_params 0, 5, 20, 2
lda #29
jsr output_to_screen
lda wx
sta vals
lda wy
sta vals+1
lda #17
jsr output_to_screen
lda wx
sta vals+2
lda wy
sta vals+3
lda #157
jsr output_to_screen
lda wx
sta vals+4
lda wy
sta vals+5
lda #145
jsr output_to_screen
lda wx
sta vals+6
lda wy
sta vals+7
lda #19
jsr output_to_screen
lda wx
sta vals+8
lda wy
sta vals+9
jsr restore_orig
rts
; Gibt den ASCII-Wert 147 (CLR) aus
test_clear
jsr save_orig
jsr fill_lines
+set_win_params 0, 4, 0, 0
lda #147
jsr output_to_screen
jsr restore_orig
rts
; Gibt nacheinander die ASCII-Werte 65 ("A"), 18 (RVS ON),
; 66 ("B"), 146 ("RVS OFF") und 67 ("C") aus
test_revers
jsr save_orig
+set_win_params 0, 5, 0, 0
jsr clear_screen
; $d1/$d2 durch clear_screen gesetzt
lda #65
jsr output_to_screen
lda #18
jsr output_to_screen
lda #66
jsr output_to_screen
lda #146
jsr output_to_screen
lda #67
jsr output_to_screen
jsr restore_orig
rts
; Gibt die 15 Buchstaben "P" bis "A" (ASCII-Werte 80 bis 65)
; in den Farbcodes 15 bis 0 (ASCII-Werte 155 bis 149, 129,
; 158, 31, 30, 156, 159, 28, 5 und 144) aus
test_colors
jsr save_orig
+set_win_params 0, 5, 0, 0
jsr clear_screen
; $d1/$d2 durch clear_screen gesetzt
ldx #15
-
lda colors,x
jsr output_to_screen
txa
clc
adc #65
jsr output_to_screen
dex
bpl -
jsr restore_orig
rts
; ASCII-Werte fuer Farben
colors
!by 144, 5, 28, 159, 156, 30, 31, 158
!by 129, 149, 150, 151, 152, 153, 154, 155
; Gibt in der 3. Zeile (Zeilennummer 2) den ASCII-WERT 20
; (DEL) aus
test_delete
jsr save_orig
+set_win_params 0, 5, 20, 2
jsr fill_move_line
; $d1/$d2 (wlnp) bereits durch fill_move_line gesetzt
lda #20
jsr output_to_screen
lda wx
sta vals
jsr restore_orig
rts
; Gibt in der 3. Zeile (Zeilennummer 2) den ASCII-WERT 148
; (INS) aus
test_insert
jsr save_orig
+set_win_params 0, 5, 20, 2
jsr fill_move_line
; $d1/$d2 (wlnp) bereits durch fill_move_line gesetzt
lda #148
jsr output_to_screen
lda wx
sta vals
jsr restore_orig
rts
; Platziert den Cursor mit ASCII 29 und ASCII 17 in der
; 2. Zeile und gibt dann einen unbekannten Wert (ASCII 1)
; aus
test_unknown
jsr save_orig
+set_win_params 0, 5, 0, 0
jsr clear_screen
; $d1/$d2 durch clear_screen gesetzt
lda #29
jsr output_to_screen
lda #17
jsr output_to_screen
lda #1
jsr output_to_screen
jsr save_wlnp_wx_wy
lda invers
sta vals+4
jsr restore_orig
rts
; Platziert den Cursor in der Mitte der 3. Zeile (Zeilennummer 2)
test_put_row_col
jsr save_orig
+set_win_params 0, 5, 0, 0
ldx #2
ldy #20
jsr put_row_col
jsr save_wlnp_wx_wy
jsr restore_orig
rts
; Ermittelt die Adresse in der Tabelle fuer die Bildschirmzeiger,
; in der die Zeiger fuer die erste und letzte Zeile stehen
test_set_wptrs
jsr save_orig
lda #0
jsr set_wptrs
lda wptrs
sta vals
lda wptrs+1
sta vals+1
lda #24
jsr set_wptrs
lda wptrs
sta vals+2
lda wptrs+1
sta vals+3
jsr restore_orig
rts
; Ruft die Standardkonfiguration fuer ein grosses Fenster auf
test_set_default
jsr save_orig
jsr set_default
lda wptrs
sta vals
lda wptrs+1
sta vals+1
lda sptrs
sta vals+2
lda sptrs+1
sta vals+3
lda wrows
sta vals+4
lda srows
sta vals+5
lda sx
sta vals+6
lda sy
sta vals+7
jsr restore_orig
rts
; Richtet ein Fenster mit winit ein und gibt das Zeichen
; "A" aus
test_winit_wquit
jsr winit
lda #65
jsr $ffd2
jsr save_wlnp_wx_wy
jsr wquit
rts
; Teilt den Bildschirm in der 9. Zeile (Zeilennummer 8)
; in zwei Fenster auf
test_wsplit_1
jsr winit
lda #8
sta wy
jsr split_screen
jsr wquit
rts
; Gibt oben/links ein "A" aus und versucht, den Bildschirm
; in der ersten bzw. letzten Zeile zu teilen
test_wsplit_2
jsr winit
lda #65
jsr $ffd2
; wy hat noch den Wert 0
jsr wsplit
lda wrows
sta vals
lda srows
sta vals+1
; mit wy=24
lda #24
sta wy
jsr set_screen_pointers
jsr wsplit
lda wrows
sta vals+2
lda srows
sta vals+3
jsr wquit
rts
; test_wsplit_3 und 4 kommen nach test_switch
; Teilt den Bildschirm in der 7. Zeile (Zeilennummer 6) und
; gibt im oberen Fenster in den ersten drei Zeilen "A", "B"
; und "C" aus, sowie im unteren Fenster ein "D"
test_wswitch
jsr winit
lda #6
sta wy
jsr set_screen_pointers
jsr wsplit
lda #65
jsr $ffd2
lda #13
jsr $ffd2
lda #66
jsr $ffd2
lda #13
jsr $ffd2
lda #67
jsr $ffd2
jsr wswitch
lda #68
jsr $ffd2
lda sptrs
sta vals
lda sptrs+1
sta vals+1
lda srows
sta vals+2
lda sx
sta vals+3
lda sy
sta vals+4
jsr wquit
rts
; Teilt den Bildschirm in der 2. Zeile (Zeilennummer 1)
; in zwei Fenster auf
test_wsplit_3
jsr winit
lda #1
sta wy
jsr split_screen
jsr wquit
rts
; Teilt den Bildschirm in der 24. Zeile (Zeilennummer 23)
; in zwei Fenster auf
test_wsplit_4
jsr winit
lda #23
sta wy
jsr split_screen
jsr wquit
rts
; Teilt den Bildschirm in der 7. Zeile (Zeilennummer 6) und
; stellt danach die Standardkonfiguration wieder her
test_wunsplit
jsr winit
lda #6
sta wy
jsr set_screen_pointers
jsr wsplit
jsr wunsplit
jsr save_wlnp_wx_wy
lda wrows
sta vals+4
lda srows
sta vals+5
jsr wquit
rts
; Hilfsroutine fuer test_hcopy
print_txt
ldx #0
-
lda txt_hcopy,x
jsr $ffd2
inx
cpx #14
bne -
rts
txt_hcopy
!tx "DRUCKERAUSGABE" ; 14 Zeichen
; Teilt den Bildschirm in der 6. Zeile (Zeilennummer 5),
; fuellt den oberen Bildschirm mit Text und druckt in aus
test_hcopy_1
jsr winit
lda #5
sta wy
jsr set_screen_pointers
jsr wsplit
ldy #3
-
jsr print_txt
lda #17
jsr $ffd2
dey
bne -
jsr print_txt
jsr whcopy
jsr wquit
rts
; Teilt den Bildschirm in der 2. Zeile (Zeilennummer 1),
; fuellt den oberen Bildschirm mit Text und druckt in aus
test_hcopy_2
jsr winit
lda #1
sta wy
jsr set_screen_pointers
jsr wsplit
jsr print_txt
jsr whcopy
jsr wquit
rts
;####################################################################
;#
;# Ablageort zur Ueberpruefung der Werte
;#
;####################################################################
*=$cdf0
vals
!wo 0, 0, 0, 0, 0