reworked CHRIN

This commit is contained in:
FeralChild64 committed 2019-10-29 18:06:27 +01:00
1 parent 83d2511221
commit f5a19bb1ab
11 files changed
+71 -48

No files matched your search

-6
View File
@@ -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
+10
View File
@@ -0,0 +1,10 @@
//
// IEC part of the CHRIN routine
//
chrin_iec:
// XXX is this really all?
jmp JACPTR // carry will be set accordingly
+48
View File
@@ -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
File renamed without changes.
@@ -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:
+2
View File
@@ -3,6 +3,8 @@
// RS-232 part of the CHKIN routine
//
// XXX connect to I/O stack
#if HAS_RS232
+2
View File
@@ -3,6 +3,8 @@
// RS-232 part of the CHROUT routine
//
// XXX connect to I/O stack
#if HAS_RS232
+2
View File
@@ -3,6 +3,8 @@
// RS-232 part of the CKOUT routine
//
// XXX connect to I/O stack
#if HAS_RS232
+2
View File
@@ -3,6 +3,8 @@
// RS-232 part of the CLOSE routine
//
// XXX connect to I/O stack
#if HAS_RS232
+2
View File
@@ -3,6 +3,8 @@
// RS-232 part of the GETIN routine
//
// XXX connect to I/O stack
#if HAS_RS232
+2
View File
@@ -3,6 +3,8 @@
// RS-232 part of the OPEN routine
//
// XXX connect to I/O stack
#if HAS_RS232