; TRACK.INC for RUC180 CP/M 3.0
;
; Version 13.09.85
; Stand: 13.01.87, Retries fuer EUMEL entschaerft (ca. 1/8 der alten Zeit)
.printx 'TRACK.INC'
track_RW
ldy #1 ; 13.01.87, Michael
sty recal_cnt
ldy #02 ; 13.01.87
sty tktry_cnt
ldx iob_old_S
cpx slot10z
beq sameSLt
track0
JSR moving
BNE track0
LDX slot10z
STX iob_old_S
sameSlt
JSR moving
PHP
LDA mtron,X
ldy iob_drv
cpy iob_old_D
BEQ sameDrv
sty iob_old_D
PLP
lda #0
PHP
sameDrv
CMP drive0,Y
LDA #0EF
STA wait_cnt
LDA #0D8
STA wait_cnt+1
PLP
PHP
BNE track2
LDY #8
track1 JSR wait
DEY
BNE track1
LDX slot10z
track2 JSR seekT ; Step to Track
PLP
BNE rotating
; bit param ; wg. bescheuerten Philips-Drives
; bmi no_wait ; branch if read
track3 LDY #12
track4 DEY
BNE track4
INC wait_cnt
BNE track3
INC wait_cnt+1
BNE track3
;no_wait
JSR moving
BEQ drive_err
rotating
LDA #0FF
STA iob_sec
search_hdr
LDY #10 ; 13.01.87
STY hdtry_cnt
nxt_sec
cli
dec hdtry_cnt
BMI no_sec
LDX slot10z
JSR read_hdr
BCS nxt_sec
LDA trk_in_hdr
CMP iob_trk
BEQ found_trk
cli
jsr trk_to_ph ; Translate Track to Phase
LDY disk_no
STA head_table,Y ; Store it in Table
DEC tktry_cnt
BNE try_seek
no_sec
DEC recal_cnt
BEQ drive_err
LDA #02 ; 13.01.87
STA tktry_cnt
lda #56
bit def_byte
bmi no_sec2 ; Ehring-Controller ?
asl a ; Ehring: *2
no_sec2: LDY disk_no
STA head_table,Y
LDA #0
JSR seekL ; Step von hinten bis 0
try_seek
JSR seekT
JMP search_hdr
drive_err
LDA #1
JMP track_fail
found_trk
bit param
bmi found2
LDA sec_in_hdr
CMP iob_sec
BEQ write_it
CLC ; next sector for write!
ADC #01
AND #0F
CMP iob_sec
BEQ nxt_sec
STA sec_in_hdr
found2
LDY sec_in_hdr ; if sec_in_hdr>=10 then crash...
LDA sec_tble,Y
bne nxt_sec
;need_sec
TYA ; physical sector #
ASL A ;
TAY
lda DMA,y
sta user_data
lda DMA+1,y
STA user_data+1 ; pointer to user's buffer
bit param
bmi read_it
JSR make_nibl
LDX slot10z
LDA sec_in_hdr
STA iob_sec
j_nxt_sec
JMP nxt_sec
read_it
JSR read_data
BCS j_nxt_sec
mark_sec
LDY sec_in_hdr
LDA #0FF
STA sec_tble,Y
STA iob_sec
DEC sec_cnt
BNE j_nxt_sec
;track_ok
lda #0
track_fail
sta iob_err
lda mtroff,X
cli
rts
write_it
JSR write_data
BCC mark_sec
LDA #2 ; write protected !
BCS track_fail ; bra
.printx 'Ende'
; Ende von NIBLE.INC