diff --git a/c64/kernal/f157.chrin.jmp.s b/c64/kernal/f157.chrin.jmp.s deleted file mode 100644 index b1b7c234..00000000 --- a/c64/kernal/f157.chrin.jmp.s +++ /dev/null @@ -1,6 +0,0 @@ - -// Our implementation is longer than the original one, -// placing it here would cause a collision with CHROUT - -CHRIN: - jmp chrin_real diff --git a/c64/kernal/iec/chrin_iec.s b/c64/kernal/iec/chrin_iec.s new file mode 100644 index 00000000..f293fa0c --- /dev/null +++ b/c64/kernal/iec/chrin_iec.s @@ -0,0 +1,10 @@ + +// +// IEC part of the CHRIN routine +// + + +chrin_iec: + + // XXX is this really all? + jmp JACPTR // carry will be set accordingly diff --git a/c64/kernal/iostack/f157.chrin.s b/c64/kernal/iostack/f157.chrin.s new file mode 100644 index 00000000..6ab21bfa --- /dev/null +++ b/c64/kernal/iostack/f157.chrin.s @@ -0,0 +1,48 @@ + +// +// Official Kernal routine, described in: +// +// - [RG64] C64 Programmer's Reference Guide - page 277/278 +// - [CM64] Compute's Mapping the Commodore 64 - page 228 +// +// CPU registers that has to be preserved (see [RG64]): .Y +// + +// XXX keyboard part currently does not preserve register Y, to be fixed! + +// Reads a byte of input, unless from keyboard. +// If from keyboard, then it gets a whole line of input, and returns the first char. +// Repeated calls after that read out the successive bytes of the line of input. + + +CHRIN: + + // Determine the device number + lda DFLTN + + // Try $00 - keyboard + beq_far chrin_keyboard + + // XXX Try $03 - screen + // cmp #$03 + // beq_far chrin_screen + +#if HAS_RS232 + + // Try $02 - RS-232 + cmp #$02 + beq_far chrin_rs232 + +#endif // HAS_RS232 + +#if CONFIG_IEC + + // Try IEC devices + jsr iec_check_devnum_oc + bcc_far chrin_iec + +#endif // CONFIG_IEC + + // Not a supported device + + jmp lvs_device_not_found_error diff --git a/c64/kernal/f157.interop b/c64/kernal/iostack/f157.interop similarity index 100% rename from c64/kernal/f157.interop rename to c64/kernal/iostack/f157.interop diff --git a/c64/kernal/chrin_real.s b/c64/kernal/keyboard/chrin_keyboard.s similarity index 71% rename from c64/kernal/chrin_real.s rename to c64/kernal/keyboard/chrin_keyboard.s index f744920c..b91245a7 100644 --- a/c64/kernal/chrin_real.s +++ b/c64/kernal/keyboard/chrin_keyboard.s @@ -1,49 +1,8 @@ // -// Official Kernal routine, described in: -// -// - [RG64] C64 Programmer's Reference Guide - page 277/278 -// - [CM64] Compute's Mapping the Commodore 64 - page 228 -// -// CPU registers that has to be preserved (see [RG64]): .Y +// Keyboard part of the CHRIN routine // -// XXX keyboard part currently does not preserve register Y, to be fixed! -// XXX try to make chrin_real unnecessary (try to fit this into original location) - -// Reads a byte of input, unless from keyboard. -// If from keyboard, then it gets a whole line of input, and returns the first char. -// Repeated calls after that read out the successive bytes of the line of input. - -chrin_real: - - // Determine the device number - lda DFLTN - - beq chrin_keyboard // #$00 - keyboard - // XXX add screen support - -#if CONFIG_IEC - - jsr iec_check_devnum_oc - bcc chrin_iec - jmp lvs_device_not_found_error // not a supported device - -chrin_iec: - - jsr JACPTR - bcs chrin_done_fail - // FALLTROUGH - -#endif // CONFIG_IEC - -chrin_done: - clc // indicate success - rts - -chrin_done_fail: - sec // indicate failure - rts chrin_keyboard: diff --git a/c64/kernal/rs232/chkin_rs232.s b/c64/kernal/rs232/chkin_rs232.s index 6cc6d002..b2cc4086 100644 --- a/c64/kernal/rs232/chkin_rs232.s +++ b/c64/kernal/rs232/chkin_rs232.s @@ -3,6 +3,8 @@ // RS-232 part of the CHKIN routine // +// XXX connect to I/O stack + #if HAS_RS232 diff --git a/c64/kernal/rs232/chrout_rs232.s b/c64/kernal/rs232/chrout_rs232.s index 9c3af02f..4617bc1a 100644 --- a/c64/kernal/rs232/chrout_rs232.s +++ b/c64/kernal/rs232/chrout_rs232.s @@ -3,6 +3,8 @@ // RS-232 part of the CHROUT routine // +// XXX connect to I/O stack + #if HAS_RS232 diff --git a/c64/kernal/rs232/ckout_rs232.s b/c64/kernal/rs232/ckout_rs232.s index 66d4b3e7..cefe35a7 100644 --- a/c64/kernal/rs232/ckout_rs232.s +++ b/c64/kernal/rs232/ckout_rs232.s @@ -3,6 +3,8 @@ // RS-232 part of the CKOUT routine // +// XXX connect to I/O stack + #if HAS_RS232 diff --git a/c64/kernal/rs232/close_rs232.s b/c64/kernal/rs232/close_rs232.s index 3871fe04..95e5959e 100644 --- a/c64/kernal/rs232/close_rs232.s +++ b/c64/kernal/rs232/close_rs232.s @@ -3,6 +3,8 @@ // RS-232 part of the CLOSE routine // +// XXX connect to I/O stack + #if HAS_RS232 diff --git a/c64/kernal/rs232/getin_rs232.s b/c64/kernal/rs232/getin_rs232.s index 17215ead..fd062e3a 100644 --- a/c64/kernal/rs232/getin_rs232.s +++ b/c64/kernal/rs232/getin_rs232.s @@ -3,6 +3,8 @@ // RS-232 part of the GETIN routine // +// XXX connect to I/O stack + #if HAS_RS232 diff --git a/c64/kernal/rs232/open_rs232.s b/c64/kernal/rs232/open_rs232.s index c347ec70..b864cdc0 100644 --- a/c64/kernal/rs232/open_rs232.s +++ b/c64/kernal/rs232/open_rs232.s @@ -3,6 +3,8 @@ // RS-232 part of the OPEN routine // +// XXX connect to I/O stack + #if HAS_RS232