Files
ATX64-ROMs/kernal/open.s
T
2026-05-07 10:03:27 +12:00

247 lines
5.1 KiB
ArmAsm

.segment "OPEN"
;***********************************
;* *
;* open function *
;* *
;* creates an entry in the logical *
;* files tables consisting of *
;* logical file number--la, device *
;* number--fa, and secondary cmd-- *
;* sa. *
;* *
;* a file name descriptor, fnadr & *
;* fnlen are passed to this routine*
;* *
;***********************************
;
nopen ldx la ;check file #
bne op98 ;is not the keyboard
;
jmp error6 ;not input file...
;
op98 jsr lookup ;see if in table
bne op100 ;not found...o.k.
;
jmp error2 ;file open
;
op100 ldx ldtnd ;logical device table end
cpx #10 ;maximum # of open files
bcc op110 ;less than 10...o.k.
;
jmp error1 ;too many files
;
op110 inc ldtnd ;new file
lda la
sta lat,x ;store logical file #
lda sa
ora #$60 ;make sa an serial command
sta sa
sta sat,x ;store command #
lda fa
sta fat,x ;store device #
;
;perform device specific open tasks
;
beq op175 ;is keyboard...done.
cmp #3
beq op175 ;is screen...done.
; bcc op150 ;are cassettes 1 & 2
;
jsr openi ;is on serial...open it
bcc op175 ;branch always...done
;
;perform tape open stuff
;
;op150 cmp #2
; jmp opn232
;
;op155 lda sa
and #$f ;mask off command
;
;op160 jmp error4 ;file not found
;
;op170
; beq op180 ;stop key pressed
; bcc op171 ;all o.k.
; bcs op160 ;file not found...
;
;open cassette tape for write
;
;
;finish open for tape read/write
;
;op171 lda #bufsz-1 ;assume force read
;
; ldy sa
; cpy #$60 ;open for read?
; beq op172
;
;set pointers for buffering data
;
; ldy #0
; lda #bdf ;type flag for block
; sta (tape1),y ;to begin of buffer
; tya
;
;op172 sta bufpt ;point to data
op175 clc ;flag good open
op180 rts ;exit in peace
openi lda sa
bmi op175 ;no sa...done
;
ldy fnlen
beq op175 ;no file name...done
;
lda #0 ;clear the serial status
sta status
;
lda fa
jsr listn ;device la to listen
;
lda sa
ora #$f0
jsr secnd
;
lda status ;anybody home?
bpl op35 ;yes...continue
;
;this routine is called by other
;kernal routines which are called
;directly by os. kill return
;address to return to os.
;
pla
pla
jmp error5 ;device not present
;
op35 lda fnlen
beq op45 ;no name...done sequence
;
;send file name over serial
;
ldy #0
op40 lda (fnadr),y
jsr ciout
iny
cpy fnlen
bne op40
;
op45 jmp cunlsn ;jsr unlsn: clc: rts
; opn232 - open an rs-232 or parallel port file
;
; variables initilized
; bitnum - # of bits to be sent calc from m51ctr
; baudof - baud rate full
; rsstat - rs-232 status reg
; m51ctr - 6551 control reg
; m51cdr - 6551 command reg
; m51ajb - user baud rate (clock/baud/2-100)
; enabl - 6526 nmi enables (1-nmi bit on)
;
;opn232 jsr cln232 ;set up rs232, .y=0 on return
;
; pass prams to m51regs
;
; sty rsstat ;clear status
;
;opn020 cpy fnlen ;check if at end of filename
; beq opn025 ;yes...
;
; lda (fnadr),y ;move data
; sta m51ctr,y ;to m51regs
; iny
; cpy #4 ;only 4 possible prams
; bne opn020
;
; calc # of bits
;
;opn025 jsr bitcnt
; stx bitnum
;
; calc baud rate
;
; lda m51ctr
; and #$0f
; beq opn028
;
; calculate start-test rate...
; different than original release 901227-01
;
; asl a ;get offset into tables
; tax
; lda palnts ;get tv standard
; bne opn026
; ldy baudo-1,x ;ntsc standard
; lda baudo-2,x
; jmp opn027
;
;opn026 ldy baudop-1,x ;pal standard
; lda baudop-2,x
opn027 sty m51ajb+1 ;hold start rate in m51ajb
sta m51ajb
opn028 lda m51ajb ;calculate baud rate
asl
rts
;
; check for 3/x line response
;
opn030 lda m51cdr ;bit 0 of m51cdr
lsr a
bcc opn050 ;...3 line
;
; check for x line proper states
;
lda d2prb
asl a
bcs opn050
; jsr ckdsrx ;change from jmp to prevent system
;
; set up buffer pointers (dbe=dbs)
;
opn050 lda ridbe
sta ridbs
lda rodbe
sta rodbs
;
; allocate buffers
;
opn055 jsr gettop ;get memsiz
lda ribuf+1 ;in allocation...
bne opn060 ;already
dey ;there goes 256 bytes
sty ribuf+1
stx ribuf
opn060 lda robuf+1 ;out allocation...
bne memtcf ;alreay
dey ;there goes 256 bytes
sty robuf+1
stx robuf
memtcf sec ;signal top of memory change
lda #$f0
jmp settop ;top changed
;
; cln232 - clean up 232 system for open/close
; set up ddrb and cb2 for rs-232
;
cln232 lda #$7f ;clear nmi's
sta d2icr
lda #%00000110 ;ddrb
sta d2ddrb
sta d2prb ;dtr,rts high
lda #$04 ;output high pa2
ora d2pra
sta d2pra
ldy #00
sty enabl ;clear enabls
rts
; rsr 8/25/80 - add rs-232 code
; rsr 8/26/80 - top of memory handler
; rsr 8/29/80 - add filename to m51regs
; rsr 9/02/80 - fix ordering of rs-232 routines
; rsr 12/11/81 - modify for vic-40 i/o
; rsr 2/08/82 - clear status in openi
; rsr 5/12/82 - compact rs232 open/close code