From e675262b66ece7c5987277bc29eabcb2053fe0f7 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 15 Jun 2019 16:59:19 +0200 Subject: [PATCH] routine OPEN now reacts on device number --- c64/kernal/open.s | 49 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/c64/kernal/open.s b/c64/kernal/open.s index 189e4227..1dc5d99e 100644 --- a/c64/kernal/open.s +++ b/c64/kernal/open.s @@ -1,19 +1,62 @@ ; Function defined on pp272-273 of C64 Programmers Reference Guide ;; See also http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf + +open: + + ;; Kernal API is shared between several types of devices - we have + ;; to dispatch the call to appropriate subroutine + + lda current_device_number + beq open_keyboard + cmp #$01 + beq open_tape + cmp #$02 + beq open_rs232 + cmp #$03 + beq open_screen + cmp #$1F + bcs + + bmi open_iec +* + ;; Device numbers over 30 are not allowed on IEC bus + + ;; FALLTHROUGH to error routine + +open_keyboard: +open_tape: +open_screen: + + ;; XXX implement support for these devices + lda #$05 ; device not present + sta IOSTATUS + rts + +open_rs232: + + ;; XXX implement support for RS-232 + lda #$FF ; set every single error bit to discourage using RS-232 + sta RSSTAT + rts + +open_iec: + + ;; XXX add FILENAM support, test it + ;; Sequence is: ;; 1. Call current device to attention as LISTENER = $20 + device ;; 2. -open: ;; Disable IRQs, since timing matters! - SEI + sei ;; Begin sending under attention jsr iec_assert_atn ;; CLK is now asserted, and we are ready to transmit a byte - lda #$28 + lda #$20 ; listen + clc + adc current_device_number jsr iec_tx_byte bcs open_error