From f809b9b7eaf6c9a69f6a25b97d720b406f6dbedf Mon Sep 17 00:00:00 2001 From: Christian Werner Date: Sun, 18 Oct 2026 08:57:01 +0200 Subject: [PATCH] feat(arnitech): the Terminal Card is a Blade's screen and keyboard With ARNITECH_BLADE the screen editor, the keyboard matrix scan, and the VIC-II set-up are left out, and devices 3 and 0 are the Terminal Card the Arnitech controller finds by its type, $04. CHROUT writes each byte to its Output, or to its Literal while quote or insert mode is on, keeping QTSW and INSRT as the screen editor does. CHRIN marks where input starts, echoes the keys typed, and on RETURN has the Card take the logical line under the cursor and reads it back. SCNKEY moves the Card's keys into the keyboard buffer up to XMAX, UDTIM sets STKEY from its RUN/STOP, SCREEN answers 80x25, PLOT moves and reads its cursor, and CINT resets it and puts the native-mode vectors in place. With no Terminal Card, bytes printed go nowhere and no key comes. --- src/aliases/,aliases_hardware_arnitech.s | 22 ++ src/kernal/arnitech/arnitech_terminal.s | 256 ++++++++++++++++++ src/kernal/init/cint_screen_keyboard.s | 5 + src/kernal/init/e518.cint_legacy.s | 5 + src/kernal/init/e5a0.vicii_init.s | 5 + src/kernal/init/ff5b.cint.s | 4 + src/kernal/init/vicii_init_registers.s | 4 + .../interrupts/ea31.default_irq_handler.s | 2 + src/kernal/iostack/e50a.plot.s | 27 ++ src/kernal/iostack/f157.chrin.s | 4 + src/kernal/iostack/f1ca.chrout.s | 4 + src/kernal/keyboard/eb48.scnkey_set_keytab.s | 7 +- src/kernal/keyboard/kb_matrix.s | 5 + src/kernal/keyboard/kb_matrix_128.s | 5 + src/kernal/keyboard/kb_matrix_alwaysrepeat.s | 5 + src/kernal/keyboard/kb_matrix_bucky.s | 5 + src/kernal/keyboard/kb_matrix_bucky_filter.s | 5 + src/kernal/keyboard/kb_matrix_joy.s | 5 + src/kernal/keyboard/kb_matrix_lookup.s | 5 + src/kernal/keyboard/kb_matrix_row_keys.s | 5 + src/kernal/keyboard/kb_matrix_row_offsets.s | 5 + src/kernal/keyboard/keyboard_disconnect.s | 5 + src/kernal/keyboard/scnkey.s | 5 + src/kernal/keyboard/scnkey_128.s | 5 + src/kernal/keyboard/scnkey_via_keylog.s | 5 + src/kernal/screen/chrin_keyboard.s | 5 + src/kernal/screen/chrin_programmable_keys.s | 5 + src/kernal/screen/chrout_screen.s | 5 + src/kernal/screen/chrout_screen_clr.s | 5 + src/kernal/screen/chrout_screen_control.s | 5 + src/kernal/screen/chrout_screen_crsr.s | 5 + src/kernal/screen/chrout_screen_del.s | 5 + src/kernal/screen/chrout_screen_gfxtxt.s | 5 + src/kernal/screen/chrout_screen_home.s | 5 + src/kernal/screen/chrout_screen_ins.s | 5 + .../screen/chrout_screen_jumptable_codes.s | 5 + src/kernal/screen/chrout_screen_quote.s | 5 + src/kernal/screen/chrout_screen_return.s | 5 + src/kernal/screen/chrout_screen_rvs.s | 5 + src/kernal/screen/chrout_screen_shift_onoff.s | 5 + src/kernal/screen/chrout_screen_stop.s | 5 + src/kernal/screen/chrout_to_screen_code.s | 5 + src/kernal/screen/cursor.s | 5 + src/kernal/screen/cursor_enable.s | 5 + src/kernal/screen/cursor_show.s | 5 + src/kernal/screen/e536.init_screen.s | 5 + src/kernal/screen/e544.clear_screen.s | 5 + src/kernal/screen/e566.cursor_home.s | 5 + .../screen/e56c.screen_calculate_pointers.s | 5 + src/kernal/screen/e8ea.screen_scroll_up.s | 5 + src/kernal/screen/e9ff.screen_clear_line.s | 5 + .../screen/ea24.screen_calculate_user.s | 5 + src/kernal/screen/ecf0.screen_line_lo_bytes.s | 5 + src/kernal/screen/screen.s | 7 +- .../screen/screen_advance_to_next_line.s | 5 + src/kernal/screen/screen_calculate_pnt_user.s | 5 + .../screen/screen_calculate_pntr_lnmx.s | 5 + .../screen/screen_check_space_ends_line.s | 5 + src/kernal/screen/screen_check_toggle_quote.s | 5 + src/kernal/screen/screen_code_to_petscii.s | 5 + src/kernal/screen/screen_get_cliped_pntr.s | 5 + .../screen/screen_get_logical_line_end_ptr.s | 5 + src/kernal/screen/screen_grow_logical_line.s | 5 + src/kernal/screen/screen_off.s | 5 + src/kernal/screen/screen_on.s | 5 + src/kernal/screen/screen_preserve_sal_eal.s | 5 + src/kernal/screen/screen_restore_sal_eal.s | 7 +- src/kernal/time/udtim.s | 4 + 68 files changed, 625 insertions(+), 3 deletions(-) create mode 100644 src/kernal/arnitech/arnitech_terminal.s diff --git a/src/aliases/,aliases_hardware_arnitech.s b/src/aliases/,aliases_hardware_arnitech.s index 4013b724..820e2e30 100644 --- a/src/aliases/,aliases_hardware_arnitech.s +++ b/src/aliases/,aliases_hardware_arnitech.s @@ -36,6 +36,28 @@ !ifdef CONFIG_ARNITECH_BLADE { + ; The Terminal Card, a Blade's screen and keyboard (arnitech's ADR 0031): its type in the Slot + ; table, and its registers indexed by its Card window's low byte, as ARNI_FINDCARD gives it in X + + !set TERMINAL_CARD_TYPE = $04 + + !addr TERMINAL_OUTPUT = $DE00 ; a PETSCII byte, printed as the screen editor prints it + !addr TERMINAL_LITERAL = $DE01 ; a byte drawn as its glyph, for quote and insert mode + !addr TERMINAL_STATUS = $DE02 + !addr TERMINAL_KEY = $DE03 ; the next key; a read takes it, $00 if none + !addr TERMINAL_COMMAND = $DE04 + !addr TERMINAL_LINE = $DE05 ; the taken line's next byte, RETURN at its end + !addr TERMINAL_COLUMN = $DE06 + !addr TERMINAL_ROW = $DE07 + + !set TERMINAL_KEY_WAITING = %00000001 ; status bits + !set TERMINAL_STOP_HELD = %00000010 + !set TERMINAL_INSERTED = %00001000 ; the last byte was an INS that opened a space + + !set TERMINAL_TAKE_LINE = $01 ; commands + !set TERMINAL_RESET = $02 + !set TERMINAL_INPUT_START = $03 + ; The 65816's native-mode vectors, which a Blade reads from the RAM under the KERNAL (ADR 0029) !addr NATIVE_VECTORS = $FFE4 ; COP, BRK, ABORT, NMI, reserved, IRQ diff --git a/src/kernal/arnitech/arnitech_terminal.s b/src/kernal/arnitech/arnitech_terminal.s new file mode 100644 index 00000000..3bcbebc7 --- /dev/null +++ b/src/kernal/arnitech/arnitech_terminal.s @@ -0,0 +1,256 @@ +;; #LAYOUT# STD * #TAKE +;; #LAYOUT# * * #IGNORE + +; +; The Terminal Card driver of the Blade Firmware (mc64blade only, arnitech's ADR 0030 and 0031) +; +; A Blade has no VIC-II and no keyboard: its screen and keyboard, devices 3 and 0, are the +; Terminal Card, which holds the 80x25 screen and the screen editor itself. CHROUT writes each +; byte to it, as a glyph while quote or insert mode is on; CHRIN echoes the keys typed and, on +; RETURN, reads back the logical line under the cursor; the IRQ moves its keys into the keyboard +; buffer and its RUN/STOP into STKEY. Quote and insert mode stay the KERNAL's, in QTSW and INSRT, +; as the Card cannot see them. With no Terminal Card, bytes printed go nowhere and no key comes. +; + +!ifdef CONFIG_ARNITECH_BLADE { + +; +; Finds the Terminal Card. Out: carry clear and X = its Card window's low byte, carry set if +; there is none. A is not kept, Y is. +; + +terminal_find: + + lda #TERMINAL_CARD_TYPE + jmp arnitech_find_card + +; +; CHROUT for device 3. SCHAR holds the byte; CHROUT has saved X, Y, and P. +; +; Outside quote and insert mode the byte goes to Output. While either is on, every control code +; but RETURN, SHIFT+RETURN, and STOP goes to Literal, which draws it as a glyph; so does DEL +; while INSRT is not 0, which a DEL between quotes leaves to delete. RETURN, SHIFT+RETURN, and +; STOP end both modes. A glyph drawn counts INSRT down, a quote toggles QTSW, and an INS that +; opened a space (status bit 3) counts INSRT up. +; + +chrout_terminal: + + jsr terminal_find + bcs chrout_terminal_done ; no Terminal Card: the byte goes nowhere + + lda SCHAR + and #$60 + beq chrout_terminal_control ; $00-$1F and $80-$9F are control codes + + lda SCHAR + sta TERMINAL_OUTPUT, x + + ; FALLTROUGH + +chrout_terminal_glyph: + + lda INSRT + beq @1 + dec INSRT +@1: + lda SCHAR + cmp #$22 + bne chrout_terminal_done + lda QTSW + eor #$80 + sta QTSW + + ; FALLTROUGH + +chrout_terminal_done: + + jmp chrout_done_success + +chrout_terminal_control: + + lda SCHAR + cmp #KEY_RETURN + beq chrout_terminal_end_modes + cmp #KEY_SHIFT_RETURN + beq chrout_terminal_end_modes + cmp #KEY_STOP + beq chrout_terminal_end_modes + + ldy INSRT + bne chrout_terminal_literal ; in the spaces INS opened, DEL too is a glyph + ldy QTSW + beq chrout_terminal_code + cmp #KEY_DEL + beq chrout_terminal_code ; between quotes DEL still deletes + + ; FALLTROUGH + +chrout_terminal_literal: + + sta TERMINAL_LITERAL, x + jmp chrout_terminal_glyph + +chrout_terminal_code: + + sta TERMINAL_OUTPUT, x + cmp #KEY_INS + bne chrout_terminal_done + lda TERMINAL_STATUS, x + and #TERMINAL_INSERTED + beq chrout_terminal_done + inc INSRT + bne chrout_terminal_done ; branch always + +chrout_terminal_end_modes: + + sta TERMINAL_OUTPUT, x + lda #$00 + sta QTSW + sta INSRT + beq chrout_terminal_done ; branch always + +; +; CHRIN for device 0, the keyboard. X and Y are kept. +; +; The first call marks where input starts on the Terminal, echoes each key typed through CHROUT, +; and on RETURN has the Card take the logical line under the cursor; it and the calls after +; return the line's bytes, then RETURN, which ends it. +; + +chrin_terminal: + + stx XSAV + +phy_trash_a + + lda CRSW + bne chrin_terminal_next ; a line is being returned + + jsr terminal_find + bcs chrin_terminal_wait + lda #TERMINAL_INPUT_START + sta TERMINAL_COMMAND, x + +chrin_terminal_wait: + + lda NDX + beq chrin_terminal_wait + jsr get_from_keyboard_buffer + cmp #KEY_RETURN + beq chrin_terminal_take + jsr JCHROUT ; the Terminal Card edits + jmp chrin_terminal_wait + +chrin_terminal_take: + + jsr terminal_find + bcs chrin_terminal_end ; the Card is gone: an empty line + lda #TERMINAL_TAKE_LINE + sta TERMINAL_COMMAND, x + inc CRSW + +chrin_terminal_next: + + jsr terminal_find + bcs chrin_terminal_end + lda TERMINAL_LINE, x + cmp #KEY_RETURN + bne chrin_terminal_return + + ; FALLTROUGH + +chrin_terminal_end: + + lda #$00 + sta CRSW + sta QTSW + sta INSRT + lda #KEY_RETURN + + ; FALLTROUGH + +chrin_terminal_return: + + tax + +ply_trash_a + txa + ldx XSAV + clc + rts + +; +; SCNKEY: moves the Terminal Card's keys into the keyboard buffer, while it has room; the rest +; wait in the Card. +; + +SCNKEY: + + jsr terminal_find + bcs @2 +@1: + lda TERMINAL_STATUS, x + lsr ; bit 0, a key waiting, into carry + bcc @2 + ldy NDX + cpy XMAX + bcs @2 + lda TERMINAL_KEY, x + sta KEYD, y + inc NDX + bne @1 ; branch always +@2: + rts + +; +; The part of UDTIM that reads the STOP key: STKEY is $7F while the Terminal Card's RUN/STOP is +; held, $FF otherwise. Y is kept. +; + +udtim_terminal_stop: + + jsr terminal_find + lda #$00 ; no Terminal Card, no RUN/STOP + bcs @1 + lda TERMINAL_STATUS, x +@1: + and #TERMINAL_STOP_HELD + lsr + lsr ; held into carry + ror ; ... and into bit 7 + eor #$FF + sta STKEY + rts + +; +; SCREEN: the Terminal's 80 columns in X and 25 rows in Y. +; + +SCREEN: + + ldx #80 + ldy #25 + rts + +; +; CINT's work on a Blade: the keyboard and the screen as the input and output devices (as +; vicii_init does on a C64), the keyboard buffer's size, a reset of the Terminal and of quote and +; insert mode, the native-mode vectors, and CIA1's timer A for the jiffy IRQ. +; + +cint_terminal: + + jsr clrchn_reset + ldx #10 + stx XMAX + lda #$00 + sta CRSW + sta QTSW + sta INSRT + jsr terminal_find + bcs @1 + lda #TERMINAL_RESET + sta TERMINAL_COMMAND, x +@1: + jsr native_vectors_init + jmp setup_pal_ntsc +} diff --git a/src/kernal/init/cint_screen_keyboard.s b/src/kernal/init/cint_screen_keyboard.s index b85557ae..b3fb1566 100644 --- a/src/kernal/init/cint_screen_keyboard.s +++ b/src/kernal/init/cint_screen_keyboard.s @@ -2,6 +2,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; This is a part CINT which initializes screen and keyboard ; @@ -49,3 +52,5 @@ cint_screen_keyboard: ; Fallthrough/jump to screen clear routine (Computes Mapping the 64 p215) jmp clear_screen + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/init/e518.cint_legacy.s b/src/kernal/init/e518.cint_legacy.s index b986e07b..9c3054b4 100644 --- a/src/kernal/init/e518.cint_legacy.s +++ b/src/kernal/init/e518.cint_legacy.s @@ -2,6 +2,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Part of the official Kernal routine, described in: ; @@ -37,3 +40,5 @@ cint_legacy_end: ; Game 'Operacja Proboszcz' is one example. jmp cint_screen_keyboard ; XXX try to fit the code here + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/init/e5a0.vicii_init.s b/src/kernal/init/e5a0.vicii_init.s index 60537743..daa3fb52 100644 --- a/src/kernal/init/e5a0.vicii_init.s +++ b/src/kernal/init/e5a0.vicii_init.s @@ -5,6 +5,9 @@ ;; #LAYOUT# X16 * #IGNORE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no VIC-II +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Well-known Kernal routine, described in: ; @@ -28,3 +31,5 @@ vicii_init: jmp vicii_init_registers } ; ROM layout + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/init/ff5b.cint.s b/src/kernal/init/ff5b.cint.s index 47f7eee9..cd1704de 100644 --- a/src/kernal/init/ff5b.cint.s +++ b/src/kernal/init/ff5b.cint.s @@ -13,5 +13,9 @@ CINT: +!ifndef CONFIG_ARNITECH_BLADE { jsr cint_legacy jmp setup_pal_ntsc +} else { + jmp cint_terminal +} diff --git a/src/kernal/init/vicii_init_registers.s b/src/kernal/init/vicii_init_registers.s index 4921ee01..0ca427fb 100644 --- a/src/kernal/init/vicii_init_registers.s +++ b/src/kernal/init/vicii_init_registers.s @@ -3,6 +3,9 @@ ;; #LAYOUT# M65 KERNAL_1 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no VIC-II +!ifndef CONFIG_ARNITECH_BLADE { + ; ; The VIC-II set-up of vicii_init (e5a0.vicii_init.s), moved out of $E5A0-$E5C8 ; so that $E5B4 is free @@ -50,3 +53,4 @@ vicii_init_registers: jmp CLRCHN } +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/interrupts/ea31.default_irq_handler.s b/src/kernal/interrupts/ea31.default_irq_handler.s index 05784c7f..6d8a87ef 100644 --- a/src/kernal/interrupts/ea31.default_irq_handler.s +++ b/src/kernal/interrupts/ea31.default_irq_handler.s @@ -47,7 +47,9 @@ default_irq_handler_common: } else { +!ifndef CONFIG_ARNITECH_BLADE { jsr cursor_blink +} jsr JSCNKEY jsr JUDTIM ; update jiffy clock } diff --git a/src/kernal/iostack/e50a.plot.s b/src/kernal/iostack/e50a.plot.s index d060398e..ec8a4a60 100644 --- a/src/kernal/iostack/e50a.plot.s +++ b/src/kernal/iostack/e50a.plot.s @@ -26,12 +26,39 @@ plot_set: sty PNTR stx TBLX +!ifndef CONFIG_ARNITECH_BLADE { + jsr screen_calculate_pointers +} else { + + ; On a Blade the cursor is the Terminal Card's, which clamps it to the 80x25 screen; + ; PNTR and TBLX keep the last place set or read, which is all there is without a Card + + jsr terminal_find + bcs plot_get_kept + lda PNTR + sta TERMINAL_COLUMN, x + lda TBLX + sta TERMINAL_ROW, x +} + ; FALLTROUGH to save one byte on RTS plot_get: +!ifdef CONFIG_ARNITECH_BLADE { + + jsr terminal_find + bcs plot_get_kept + lda TERMINAL_COLUMN, x + sta PNTR + lda TERMINAL_ROW, x + sta TBLX + +plot_get_kept: +} + ldy PNTR ldx TBLX rts diff --git a/src/kernal/iostack/f157.chrin.s b/src/kernal/iostack/f157.chrin.s index 018decc0..f57a14ca 100644 --- a/src/kernal/iostack/f157.chrin.s +++ b/src/kernal/iostack/f157.chrin.s @@ -22,7 +22,11 @@ CHRIN: lda DFLTN ; Try $00 - keyboard +!ifndef CONFIG_ARNITECH_BLADE { +beq chrin_keyboard +} else { + +beq chrin_terminal +} ; XXX Try $03 - screen ; cmp #$03 diff --git a/src/kernal/iostack/f1ca.chrout.s b/src/kernal/iostack/f1ca.chrout.s index a9685588..84c62e4e 100644 --- a/src/kernal/iostack/f1ca.chrout.s +++ b/src/kernal/iostack/f1ca.chrout.s @@ -30,7 +30,11 @@ CHROUT: lda DFLTO cmp #$03 ; screen +!ifndef CONFIG_ARNITECH_BLADE { +beq chrout_screen +} else { + +beq chrout_terminal +} !ifdef HAS_RS232 { cmp #$02 diff --git a/src/kernal/keyboard/eb48.scnkey_set_keytab.s b/src/kernal/keyboard/eb48.scnkey_set_keytab.s index f81723d1..411b11c5 100644 --- a/src/kernal/keyboard/eb48.scnkey_set_keytab.s +++ b/src/kernal/keyboard/eb48.scnkey_set_keytab.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Well-known Kernal routine, described in: ; @@ -96,4 +99,6 @@ scnkey_toggle_if_needed: ; entry for SCNKEY (TWW/CTR version) sta VIC_YMCSB @1: rts -} \ No newline at end of file +} + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/kb_matrix.s b/src/kernal/keyboard/kb_matrix.s index 2405b202..eb7df4cd 100644 --- a/src/kernal/keyboard/kb_matrix.s +++ b/src/kernal/keyboard/kb_matrix.s @@ -4,6 +4,9 @@ ;; #LAYOUT# M65 KERNAL_C #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Keyboard matrix, based on ; @@ -93,3 +96,5 @@ __kb_matrix_ctrl: !byte $90,$06,$00,$05,$00,$00,$11,$00 !byte $00,$00,$00,$84,$00,$00,$00,$1B } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/kb_matrix_128.s b/src/kernal/keyboard/kb_matrix_128.s index 6e2fc8ef..ed0cd058 100644 --- a/src/kernal/keyboard/kb_matrix_128.s +++ b/src/kernal/keyboard/kb_matrix_128.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Extended keyboard matrix for Commodore 128 keyboards, based on ; @@ -29,3 +32,5 @@ kb_matrix_128_bucky_filter: !byte %00000000 !byte %10000001 ; ALT, NO_SCRL } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/kb_matrix_alwaysrepeat.s b/src/kernal/keyboard/kb_matrix_alwaysrepeat.s index 42ee5395..6570f93d 100644 --- a/src/kernal/keyboard/kb_matrix_alwaysrepeat.s +++ b/src/kernal/keyboard/kb_matrix_alwaysrepeat.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Matrix ids of keys which should be repeated regardless of RPTFLG ; @@ -25,3 +28,5 @@ __kb_matrix_alwaysrepeat_end: } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/kb_matrix_bucky.s b/src/kernal/keyboard/kb_matrix_bucky.s index eaf33854..a5c861e3 100644 --- a/src/kernal/keyboard/kb_matrix_bucky.s +++ b/src/kernal/keyboard/kb_matrix_bucky.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Matrix for retrieving bucky key status on the C64 keyboard ; @@ -63,3 +66,5 @@ kb_matrix_bucky_shflag: ; mask to be ORed to SHFLAG to mark key status !byte KEY_FLAG_ALT !byte KEY_FLAG_NO_SCRL } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/kb_matrix_bucky_filter.s b/src/kernal/keyboard/kb_matrix_bucky_filter.s index bb4ba735..2fce38fb 100644 --- a/src/kernal/keyboard/kb_matrix_bucky_filter.s +++ b/src/kernal/keyboard/kb_matrix_bucky_filter.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Matrix for filtering out bucky keys while scanning the C64 keyboard ; @@ -23,3 +26,5 @@ kb_matrix_bucky_filter: !byte %00000000 !byte %00010000 ; SHIFT (right) !byte %00100100 ; VENDOR + CONTROL + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/kb_matrix_joy.s b/src/kernal/keyboard/kb_matrix_joy.s index af17b875..3f99191c 100644 --- a/src/kernal/keyboard/kb_matrix_joy.s +++ b/src/kernal/keyboard/kb_matrix_joy.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Matrix for retrieving C64 joystick status and inject is as keyboard event ; @@ -40,3 +43,5 @@ kb_matrix_joy_keytab_hi: !byte >__kb_matrix_normal ; right } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/kb_matrix_lookup.s b/src/kernal/keyboard/kb_matrix_lookup.s index 0840f6fa..46de3f94 100644 --- a/src/kernal/keyboard/kb_matrix_lookup.s +++ b/src/kernal/keyboard/kb_matrix_lookup.s @@ -4,6 +4,9 @@ ;; #LAYOUT# M65 KERNAL_C #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Helper table for determining keyboard matrix decoding table on the C64 keyboard ; @@ -49,3 +52,5 @@ kb_matrix_lookup: !word $0000 ; %1.110 VENDOR+CTRL !word $0000 ; %1.111 SHIFT+VENDOR+CTRL } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/kb_matrix_row_keys.s b/src/kernal/keyboard/kb_matrix_row_keys.s index a550b83a..7231ed04 100644 --- a/src/kernal/keyboard/kb_matrix_row_keys.s +++ b/src/kernal/keyboard/kb_matrix_row_keys.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Single row key codes for scanning the C64 keyboard ; @@ -25,3 +28,5 @@ kb_matrix_row_keys: !byte %11011111 !byte %10111111 !byte %01111111 + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/kb_matrix_row_offsets.s b/src/kernal/keyboard/kb_matrix_row_offsets.s index 39192b58..6af05dd0 100644 --- a/src/kernal/keyboard/kb_matrix_row_offsets.s +++ b/src/kernal/keyboard/kb_matrix_row_offsets.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Helper values to quickly determine row offset from the start of keyboard matrix ; @@ -20,3 +23,5 @@ kb_matrix_row_offsets: !byte 5*8 !byte 6*8 !byte 7*8 + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/keyboard_disconnect.s b/src/kernal/keyboard/keyboard_disconnect.s index b3b140ef..87658472 100644 --- a/src/kernal/keyboard/keyboard_disconnect.s +++ b/src/kernal/keyboard/keyboard_disconnect.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Helper routine - disconnects the keyboard from CIA1_PRB, ; leaves $FF in .X (behavior needed in some places) @@ -18,3 +21,5 @@ keyboard_disconnect: } rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/scnkey.s b/src/kernal/keyboard/scnkey.s index 677c4726..5032c10c 100644 --- a/src/kernal/keyboard/scnkey.s +++ b/src/kernal/keyboard/scnkey.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Official Kernal routine, described in: ; @@ -431,3 +434,5 @@ scnkey_buffer_full: sta KOUNT rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/scnkey_128.s b/src/kernal/keyboard/scnkey_128.s index f2bcf90b..02807692 100644 --- a/src/kernal/keyboard/scnkey_128.s +++ b/src/kernal/keyboard/scnkey_128.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Keyboard scanning routine extension for C128 keyboards ; @@ -67,3 +70,5 @@ scnkey_128_no_keys: jmp scnkey_no_keys ; pass controll to original routine } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/keyboard/scnkey_via_keylog.s b/src/kernal/keyboard/scnkey_via_keylog.s index 3b141824..b6698f0e 100644 --- a/src/kernal/keyboard/scnkey_via_keylog.s +++ b/src/kernal/keyboard/scnkey_via_keylog.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, which has no keyboard matrix: its keys come from the Terminal Card (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; Short helper jump-via-vector routine, to set the keyboard matrix !ifndef HAS_OPCODES_65CE02 { @@ -11,3 +14,5 @@ scnkey_via_keylog: jmp (KEYLOG) } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrin_keyboard.s b/src/kernal/screen/chrin_keyboard.s index 752a281a..3f392f08 100644 --- a/src/kernal/screen/chrin_keyboard.s +++ b/src/kernal/screen/chrin_keyboard.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Keyboard part of the CHRIN routine ; @@ -167,3 +170,5 @@ chrkn_keyboard_not_enter: jsr CHROUT jsr pop_keyboard_buffer +bra chrin_keyboard_read + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrin_programmable_keys.s b/src/kernal/screen/chrin_programmable_keys.s index 05b55ba1..4a8aff49 100644 --- a/src/kernal/screen/chrin_programmable_keys.s +++ b/src/kernal/screen/chrin_programmable_keys.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Keyboard part of the CHRIN routine - programmable keys support ; Output: if Carry clear, programmable key was handled @@ -50,3 +53,5 @@ chrin_programmable_keys: rts } ; CONFIG_PROGRAMMABLE_KEYS + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen.s b/src/kernal/screen/chrout_screen.s index 8aae371a..c0eb779f 100644 --- a/src/kernal/screen/chrout_screen.s +++ b/src/kernal/screen/chrout_screen.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; CHROUT routine - screen support (character output) ; @@ -99,3 +102,5 @@ chrout_screen_done: jsr cursor_show_if_enabled jmp chrout_done_success + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_clr.s b/src/kernal/screen/chrout_screen_clr.s index 21c15f7a..990e1aa5 100644 --- a/src/kernal/screen/chrout_screen_clr.s +++ b/src/kernal/screen/chrout_screen_clr.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; CLR key handling within CHROUT ; @@ -12,3 +15,5 @@ chrout_screen_CLR: jsr clear_screen jmp chrout_screen_calc_lptr_done + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_control.s b/src/kernal/screen/chrout_screen_control.s index 10355eb2..feb3f0cf 100644 --- a/src/kernal/screen/chrout_screen_control.s +++ b/src/kernal/screen/chrout_screen_control.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; CHROUT routine - screen support, control codes ; @@ -70,3 +73,5 @@ chrout_try_color_loop: ; Unknown code, or key not requiring any handling jmp chrout_screen_done + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_crsr.s b/src/kernal/screen/chrout_screen_crsr.s index b9ae5308..aa4d72e2 100644 --- a/src/kernal/screen/chrout_screen_crsr.s +++ b/src/kernal/screen/chrout_screen_crsr.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Cursor keys handling within CHROUT ; @@ -61,3 +64,5 @@ chrout_screen_CRSR_LEFT: lda #39 sta PNTR bne chrout_screen_CRSR_done ; branch always + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_del.s b/src/kernal/screen/chrout_screen_del.s index 0ca97edf..d41c13b1 100644 --- a/src/kernal/screen/chrout_screen_del.s +++ b/src/kernal/screen/chrout_screen_del.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; CHROUT routine - screen support, DEL key handling ; @@ -120,3 +123,5 @@ chrout_screen_del_column_0: ; Finish with recalculating all the variables bne chrout_screen_del_done + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_gfxtxt.s b/src/kernal/screen/chrout_screen_gfxtxt.s index 37cfbf4e..2c324d60 100644 --- a/src/kernal/screen/chrout_screen_gfxtxt.s +++ b/src/kernal/screen/chrout_screen_gfxtxt.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; GFX/TXT mode switch handling within CHROUT ; @@ -25,3 +28,5 @@ chrout_screen_TXT: lda VIC_YMCSB ora #$02 ; to lower case bne chrout_screen_GFX_TXT_end ; branch always + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_home.s b/src/kernal/screen/chrout_screen_home.s index bd2a6712..1e544ce2 100644 --- a/src/kernal/screen/chrout_screen_home.s +++ b/src/kernal/screen/chrout_screen_home.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; HOME key handling within CHROUT ; @@ -12,3 +15,5 @@ chrout_screen_HOME: jsr cursor_home jmp chrout_screen_calc_lptr_done + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_ins.s b/src/kernal/screen/chrout_screen_ins.s index 96c5ba4d..24728a89 100644 --- a/src/kernal/screen/chrout_screen_ins.s +++ b/src/kernal/screen/chrout_screen_ins.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; CHROUT routine - screen support, INS key handling ; @@ -95,3 +98,5 @@ chrout_screen_ins_copy_loop: ; Return from loop rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_jumptable_codes.s b/src/kernal/screen/chrout_screen_jumptable_codes.s index e408e7ea..12d0021e 100644 --- a/src/kernal/screen/chrout_screen_jumptable_codes.s +++ b/src/kernal/screen/chrout_screen_jumptable_codes.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Jumptable for screen control codes support. To improve performance, should be sorted ; starting from the least probable routine. @@ -111,3 +114,5 @@ chrout_screen_jumptable: !word chrout_screen_RETURN !word chrout_screen_RETURN } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_quote.s b/src/kernal/screen/chrout_screen_quote.s index 084c639d..1f828b61 100644 --- a/src/kernal/screen/chrout_screen_quote.s +++ b/src/kernal/screen/chrout_screen_quote.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; CHROUT routine - screen support, control codes in quote mode ; @@ -22,3 +25,5 @@ chrout_screen_quote: adc #$BF ; C=1, so adding $BF + C = add $C0 @1: jmp chrout_screen_literal + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_return.s b/src/kernal/screen/chrout_screen_return.s index ec9b2c57..5e86f476 100644 --- a/src/kernal/screen/chrout_screen_return.s +++ b/src/kernal/screen/chrout_screen_return.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; RETURN key handling within CHROUT ; @@ -31,3 +34,5 @@ chrout_screen_RETURN: jsr screen_calculate_PNT_USER @1: jmp screen_advance_to_next_line + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_rvs.s b/src/kernal/screen/chrout_screen_rvs.s index fed019ec..9cbbf8a3 100644 --- a/src/kernal/screen/chrout_screen_rvs.s +++ b/src/kernal/screen/chrout_screen_rvs.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; RVS ON/OFF handling within CHROUT ; @@ -21,3 +24,5 @@ chrout_screen_RVS_OFF: sta RVS jmp chrout_screen_done + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_shift_onoff.s b/src/kernal/screen/chrout_screen_shift_onoff.s index 0104f812..5e2c7e33 100644 --- a/src/kernal/screen/chrout_screen_shift_onoff.s +++ b/src/kernal/screen/chrout_screen_shift_onoff.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; SHIFT ON/OFF handling within CHROUT ; @@ -21,3 +24,5 @@ chrout_screen_SHIFT_OFF: sta MODE jmp chrout_screen_done + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_screen_stop.s b/src/kernal/screen/chrout_screen_stop.s index 243db941..9702c332 100644 --- a/src/kernal/screen/chrout_screen_stop.s +++ b/src/kernal/screen/chrout_screen_stop.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; STOP key handling within CHROUT ; @@ -18,3 +21,5 @@ chrout_screen_STOP: sta INSRT jmp chrout_screen_done } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/chrout_to_screen_code.s b/src/kernal/screen/chrout_to_screen_code.s index 3c29d43c..c4641399 100644 --- a/src/kernal/screen/chrout_to_screen_code.s +++ b/src/kernal/screen/chrout_to_screen_code.s @@ -2,6 +2,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; CHROUT routine - convert PETSCII to screen code ; @@ -50,3 +53,5 @@ chrout_to_screen_code: @done: rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/cursor.s b/src/kernal/screen/cursor.s index 3e19d327..68e0607e 100644 --- a/src/kernal/screen/cursor.s +++ b/src/kernal/screen/cursor.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Variables used: ; - BLNSW (cursor blink switch) @@ -101,3 +104,5 @@ cursor_timer_reset: cursor_blink_end: rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/cursor_enable.s b/src/kernal/screen/cursor_enable.s index 88c22c21..dfe3f725 100644 --- a/src/kernal/screen/cursor_enable.s +++ b/src/kernal/screen/cursor_enable.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Variables used: ; - BLNSW (cursor blink switch) @@ -15,3 +18,5 @@ cursor_enable: sta BLNSW rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/cursor_show.s b/src/kernal/screen/cursor_show.s index 98a3c139..aa94e00e 100644 --- a/src/kernal/screen/cursor_show.s +++ b/src/kernal/screen/cursor_show.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Variables used: ; - BLNSW (cursor blink switch) @@ -35,3 +38,5 @@ cursor_show: cursor_show_done: rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/e536.init_screen.s b/src/kernal/screen/e536.init_screen.s index 0f52345c..1d32c324 100644 --- a/src/kernal/screen/e536.init_screen.s +++ b/src/kernal/screen/e536.init_screen.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Init screen at reset ; @@ -19,3 +22,5 @@ init_screen: sta $0286 jmp clear_screen + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/e544.clear_screen.s b/src/kernal/screen/e544.clear_screen.s index e5ed73fe..f9c988e7 100644 --- a/src/kernal/screen/e544.clear_screen.s +++ b/src/kernal/screen/e544.clear_screen.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Clear screen and initialise line link table, described in: ; @@ -39,3 +42,5 @@ clear_screen: ; Fall to cursor home routine jmp cursor_home + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/e566.cursor_home.s b/src/kernal/screen/e566.cursor_home.s index 2b08ef7b..3e4e1fc8 100644 --- a/src/kernal/screen/e566.cursor_home.s +++ b/src/kernal/screen/e566.cursor_home.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Home the cursor, described in: ; @@ -17,3 +20,5 @@ cursor_home: sta TBLX ; current row ; FALLTROUGH to the next routine + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/e56c.screen_calculate_pointers.s b/src/kernal/screen/e56c.screen_calculate_pointers.s index 2103d1fc..54a6e091 100644 --- a/src/kernal/screen/e56c.screen_calculate_pointers.s +++ b/src/kernal/screen/e56c.screen_calculate_pointers.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Set pointer (PNT) to current screen line , described in: ; @@ -23,3 +26,5 @@ screen_calculate_pointers: jsr screen_calculate_PNT_USER jmp screen_calculate_PNTR_LNMX + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/e8ea.screen_scroll_up.s b/src/kernal/screen/e8ea.screen_scroll_up.s index b236e0cf..027e04cf 100644 --- a/src/kernal/screen/e8ea.screen_scroll_up.s +++ b/src/kernal/screen/e8ea.screen_scroll_up.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Scroll the whole screen up by 1 logical line, described in: ; @@ -130,3 +133,5 @@ screen_scroll_up_loop_done: ; Recalculate PNT and USER jmp screen_calculate_PNT_USER + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/e9ff.screen_clear_line.s b/src/kernal/screen/e9ff.screen_clear_line.s index b969e618..ad59aa3a 100644 --- a/src/kernal/screen/e9ff.screen_clear_line.s +++ b/src/kernal/screen/e9ff.screen_clear_line.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Well-known routine, described in: ; @@ -36,3 +39,5 @@ screen_clear_line: ; Done rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/ea24.screen_calculate_user.s b/src/kernal/screen/ea24.screen_calculate_user.s index 75f2d743..9352c88c 100644 --- a/src/kernal/screen/ea24.screen_calculate_user.s +++ b/src/kernal/screen/ea24.screen_calculate_user.s @@ -1,6 +1,9 @@ ;; #LAYOUT# STD * #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Well-known Kernal routine, described in: ; @@ -22,3 +25,5 @@ screen_calculate_USER: sta USER+1 rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/ecf0.screen_line_lo_bytes.s b/src/kernal/screen/ecf0.screen_line_lo_bytes.s index 37d7b611..269e9d97 100644 --- a/src/kernal/screen/ecf0.screen_line_lo_bytes.s +++ b/src/kernal/screen/ecf0.screen_line_lo_bytes.s @@ -1,6 +1,9 @@ ;; #LAYOUT# STD * #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Well-known Kernal table, described in: ; @@ -15,3 +18,5 @@ screen_line_lo_bytes: !for line, 0, 24 { !byte <(line * 40) } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen.s b/src/kernal/screen/screen.s index c84cc23c..7cc53226 100644 --- a/src/kernal/screen/screen.s +++ b/src/kernal/screen/screen.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Official Kernal routine, described in: ; @@ -50,4 +53,6 @@ SCREEN: pla rts -} \ No newline at end of file +} + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_advance_to_next_line.s b/src/kernal/screen/screen_advance_to_next_line.s index eb2e7c21..56d19352 100644 --- a/src/kernal/screen/screen_advance_to_next_line.s +++ b/src/kernal/screen/screen_advance_to_next_line.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + screen_advance_to_next_line: @@ -21,3 +24,5 @@ screen_advance_to_next_line: sta PNTR jmp chrout_screen_calc_lptr_done + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_calculate_pnt_user.s b/src/kernal/screen/screen_calculate_pnt_user.s index 59d8632d..cdbc5253 100644 --- a/src/kernal/screen/screen_calculate_pnt_user.s +++ b/src/kernal/screen/screen_calculate_pnt_user.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Set pointers PNT and USER to current screen line ; @@ -60,3 +63,5 @@ screen_calculate_USER: rts } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_calculate_pntr_lnmx.s b/src/kernal/screen/screen_calculate_pntr_lnmx.s index 3ed7ccae..41d934e9 100644 --- a/src/kernal/screen/screen_calculate_pntr_lnmx.s +++ b/src/kernal/screen/screen_calculate_pntr_lnmx.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Sets PNTR in a proper range (0-39 or 40-79) ; Sets LNMX to 39 or 79 @@ -62,3 +65,5 @@ screen_calculate_lnmx_79: lda #79 sta LNMX rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_check_space_ends_line.s b/src/kernal/screen/screen_check_space_ends_line.s index b6ce85bb..607321d7 100644 --- a/src/kernal/screen/screen_check_space_ends_line.s +++ b/src/kernal/screen/screen_check_space_ends_line.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + screen_check_space_ends_line: @@ -12,3 +15,5 @@ screen_check_space_ends_line: cmp #$20 rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_check_toggle_quote.s b/src/kernal/screen/screen_check_toggle_quote.s index 73899019..382fe5ba 100644 --- a/src/kernal/screen/screen_check_toggle_quote.s +++ b/src/kernal/screen/screen_check_toggle_quote.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Helper routine - check character in .A, toggles quote flag if needed ; @@ -19,3 +22,5 @@ screen_check_toggle_quote: lda #$22 ; restore previous .A valuee @1: rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_code_to_petscii.s b/src/kernal/screen/screen_code_to_petscii.s index e72c63ac..18c78df9 100644 --- a/src/kernal/screen/screen_code_to_petscii.s +++ b/src/kernal/screen/screen_code_to_petscii.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Screen code to PETSCII conversion - see: ; @@ -70,3 +73,5 @@ s2p_adc_C0: adc #$C0 ; Carry already clear rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_get_cliped_pntr.s b/src/kernal/screen/screen_get_cliped_pntr.s index 6839ecf1..5201095d 100644 --- a/src/kernal/screen/screen_get_cliped_pntr.s +++ b/src/kernal/screen/screen_get_cliped_pntr.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Get PNTR value clipped to 0-39 range in .Y, sets flags to compare with 0, can trash .A ; @@ -18,3 +21,5 @@ screen_get_clipped_PNTR: @1: cpy #$00 rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_get_logical_line_end_ptr.s b/src/kernal/screen/screen_get_logical_line_end_ptr.s index 63ef357d..ab7e74d5 100644 --- a/src/kernal/screen/screen_get_logical_line_end_ptr.s +++ b/src/kernal/screen/screen_get_logical_line_end_ptr.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + screen_get_logical_line_end_ptr: @@ -27,3 +30,5 @@ screen_get_logical_line_end_39: ldy #39 rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_grow_logical_line.s b/src/kernal/screen/screen_grow_logical_line.s index 72552579..2fcf9e06 100644 --- a/src/kernal/screen/screen_grow_logical_line.s +++ b/src/kernal/screen/screen_grow_logical_line.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + screen_grow_logical_line_done_scroll: @@ -142,3 +145,5 @@ screen_grow_logical_line_copy_done: inx jsr screen_clear_line jmp screen_calculate_PNTR_LNMX + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_off.s b/src/kernal/screen/screen_off.s index 664bdb6f..ab02ccad 100644 --- a/src/kernal/screen/screen_off.s +++ b/src/kernal/screen/screen_off.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Helper routine to blank screen ; @@ -31,3 +34,5 @@ screen_off: rts } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_on.s b/src/kernal/screen/screen_on.s index f3409e5a..3c2c0da3 100644 --- a/src/kernal/screen/screen_on.s +++ b/src/kernal/screen/screen_on.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + ; ; Helper routine to show screen ; @@ -22,3 +25,5 @@ screen_on: rts } + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_preserve_sal_eal.s b/src/kernal/screen/screen_preserve_sal_eal.s index 3f31ed29..580ea4ae 100644 --- a/src/kernal/screen/screen_preserve_sal_eal.s +++ b/src/kernal/screen/screen_preserve_sal_eal.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + screen_preserve_sal_eal: @@ -33,3 +36,5 @@ screen_common_sal_eal: +phy_trash_a +phx_trash_a rts + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/screen/screen_restore_sal_eal.s b/src/kernal/screen/screen_restore_sal_eal.s index 6e822740..cc162fc7 100644 --- a/src/kernal/screen/screen_restore_sal_eal.s +++ b/src/kernal/screen/screen_restore_sal_eal.s @@ -3,6 +3,9 @@ ;; #LAYOUT# * KERNAL_0 #TAKE ;; #LAYOUT# * * #IGNORE +; Not on a Blade, whose Terminal Card holds the screen editor (src/kernal/arnitech) +!ifndef CONFIG_ARNITECH_BLADE { + screen_restore_sal_eal: @@ -27,4 +30,6 @@ screen_restore_sal_eal: sta SAL+0 jmp screen_common_sal_eal - \ No newline at end of file + + +} ; CONFIG_ARNITECH_BLADE diff --git a/src/kernal/time/udtim.s b/src/kernal/time/udtim.s index ec51e798..864a1772 100644 --- a/src/kernal/time/udtim.s +++ b/src/kernal/time/udtim.s @@ -63,6 +63,10 @@ udtim_keyboard: +STUB_IMPLEMENTATION +} else ifdef CONFIG_ARNITECH_BLADE { + + jmp udtim_terminal_stop + } else { ; According to [CM64], page 27, the action we have to perform is to copy