work towards CHKIN, CHKOUT and CLRCHN

This commit is contained in:
FeralChild64 committed 2019-07-21 18:07:03 +02:00
1 parent c30d4b31c9
commit 273eb3ee6a
7 files changed
+182 -125

No files matched your search

+19 -67
View File
@@ -8,13 +8,23 @@
;; CPU registers that has to be preserved (see [RG64]): none
;;
;; XXX this is only a test implementation, does not do what the Kernal does!
open:
;; LAT / FAT / SAT support implemented according to
;; 'Compute's Mapping the Commodore 64', page 52
;; Reset status
jsr kernalstatus_reset
;; Check if the logical file number is unique
ldy LDTND
*
beq +
dey
lda LAT, y
cmp current_logical_filenum
beq kernalerror_FILE_ALREADY_OPEN
cpy #$00
jmp -
*
;; Check if we have space in tables
ldy LDTND
@@ -22,15 +32,16 @@ open:
bcs +
bmi open_has_space
*
;; Table is full - according to https://codebase64.org/doku.php?id=base:kernalreference
;; C flag set means error occured
sec
rts
;; Table is full
jmp kernalerror_TOO_MANY_OPEN_FILES
open_has_space:
;; Update the tables
;; LAT / FAT / SAT support implemented according to
;; 'Compute's Mapping the Commodore 64', page 52
lda current_logical_filenum
sta LAT, y
lda current_device_number
@@ -40,66 +51,7 @@ open_has_space:
iny
sty LDTND
;; 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:
;; Part implemented according to https://www.pagetable.com/?p=1031, https://github.com/mist64/cbmbus_doc
;; XXX note: this is only a temporary test implementation, real 'open' does not send anything to IEC,
;; see http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf
;; Request device to talk
lda current_device_number
jsr talk
bcs open_iec_error
;; Send secondary address
lda current_secondary_address
jsr second
bcs open_iec_error
;; Turnaround
jsr iec_turnaround_to_listen
bcs open_iec_error
;; Indicate success
lda #$00
clc
open_iec_error:
;; Carry flag will be set by low-level routines
rts