From da5901cae19657f03e01f7f7508965811662dca5 Mon Sep 17 00:00:00 2001 From: Antoine Vignau <34219772+antoinevignau@users.noreply.github.com> Date: Tue, 5 Nov 2024 22:04:36 +0100 Subject: [PATCH] Latest driver version --- cdiie/DANIEL.S | 171 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 145 insertions(+), 26 deletions(-) diff --git a/cdiie/DANIEL.S b/cdiie/DANIEL.S index c06746f..f833b99 100644 --- a/cdiie/DANIEL.S +++ b/cdiie/DANIEL.S @@ -17,6 +17,11 @@ zpCURTRACK = zpLASTTRACK+1 zpCURSTATUS = zpCURTRACK+1 zpERRORCODE = zpCURSTATUS+1 +zpCURHOUR = zpERRORCODE+1 +zpCURMINUTE = zpCURHOUR+1 +zpCURSECOND = zpCURMINUTE+1 +zpCURFRAME = zpCURSECOND+1 + *--- Equates spSTATUS = 0 @@ -62,16 +67,81 @@ call24615 jmp doFASTFORWARD * SET SLOT AND INIT PLAYER *---------------------------- -doSETSLOT lda zpFIRSTTRACK - and #%00000111 - ora #%11000000 +doSETSLOT +* lda zpFIRSTTRACK +* and #%00000111 +* ora #%11000000 +* sta callHS+2 + + lda #$00 + sta $00 + lda #$c7 + sta $01 + +]lp ldy #1 + lda ($00),y + cmp #$20 + bne nextSLOT + iny + iny + lda ($00),y + bne nextSLOT + iny + iny + lda ($00),y + cmp #$03 + bne nextSLOT + iny + iny + lda ($00),y + bne nextSLOT + ldy #$fb + lda ($00),y + cmp #$82 + beq cardFOUND + +nextSLOT dec $01 + lda $01 + cmp #$c1 + bcs ]lp + +noCARD dec zpERRORCODE + rts + +cardFOUND ldy #$ff + lda ($00),y + clc + adc #3 + sta callHS+1 + sta devLOOP+1 + lda $01 sta callHS+2 + sta devLOOP+2 - lda #0 - sta zpFIRSTTRACK - sta zpLASTTRACK - sta zpCURTRACK + lda #1 + sta dibLIST+1 ; first device +devLOOP jsr $c710 + db spSTATUS + da dibLIST + bcs noCARD + + lda bufferPTR+21 + cmp #$05 + bne notCDROM + lda bufferPTR+22 + cmp #$c0 + beq gotCDROM + +notCDROM inc dibLIST+1 + lda dibLIST+1 + bmi noCARD + bpl devLOOP + +gotCDROM lda dibLIST+1 + sta spCOMMAND+1 + + jsr initALL jmp doGETSTATUS *---------------------------- @@ -82,16 +152,19 @@ doINSERTEJECT lda fgINSERT eor #1 sta fgINSERT - bne doINSERT + beq doINSERT doEJECT _CONTROL #scsiEJECT - lda #0 - sta fgINSERT - rts + lda #1 + bne doIE doINSERT _CONTROL #scsiINSERT - lda #1 - sta fgINSERT + lda #0 + +doIE sta fgINSERT + lda #0 + sta fgPAUSE + sta fgPLAY rts *---------------------------- @@ -99,21 +172,29 @@ doINSERT _CONTROL #scsiINSERT *---------------------------- doPLAYSTOP - lda fgPLAY + lda fgINSERT ; is disk inserted? + beq doPS1 + rts + +doPS1 lda fgPLAY ; is play activated? + beq doPS2 ; no, force play/stop + + lda fgPAUSE ; are we on pause? + beq doPS2 ; no + jmp doRESUME ; yes, resume only + +doPS2 lda fgPLAY eor #1 sta fgPLAY bne doPLAY doSTOP _CONTROL #scsiSTOP - lda #0 - sta zpCURTRACK - sta fgPLAY - rts + jmp initALL doPLAY jsr doREADTOC ; always read TOC bcc doPLAYOK - lda #1 ; on error, se fake values + lda #1 ; on error, set fake values sta bufferPTR+2 sta bufferPTR+3 @@ -135,7 +216,15 @@ doPLAYALL _CONTROL #scsiPLAY *---------------------------- doPAUSERESUME - lda fgPAUSE + lda fgINSERT ; is disk inserted? + beq doPR1 + rts + +doPR1 lda fgPLAY ; are we playing? + bne doPR2 ; yes + rts ; no, exit + +doPR2 lda fgPAUSE eor #1 sta fgPAUSE bne doPAUSE @@ -157,10 +246,19 @@ doPAUSE _CONTROL #scsiPAUSE doGETSTATUS _CONTROL #scsiSTATUS - lda bufferPTR+1 + lda bufferPTR+8 ; current play position + sta zpCURHOUR + lda bufferPTR+9 + sta zpCURMINUTE + lda bufferPTR+10 + sta zpCURSECOND + lda bufferPTR+11 + sta zpCURFRAME + + lda bufferPTR+1 ; current play status sta zpCURSTATUS - lda bufferPTR+6 + lda bufferPTR+6 ; current play track sta zpCURTRACK rts @@ -227,6 +325,20 @@ doFAST2 clc ; move to next track * INTERNAL ROUTINES *---------------------------- +*---------------------------- +* INIT VARIABLES +*---------------------------- + +initALL lda #0 + sta zpFIRSTTRACK + sta zpLASTTRACK + sta zpCURTRACK + sta zpCURHOUR + sta zpCURMINUTE + sta zpCURSECOND + sta zpCURFRAME + rts + *---------------------------- * EXECUTE A COMMAND *---------------------------- @@ -275,11 +387,18 @@ DCMOVE adrl bufferPTR ; return buffer theCOMMAND ds 16 ; room for a SCSI command bufferPTR ds bufferLEN ; the return buffer +*--- Variables for HS card & CDROM identification + +dibLIST dfb $03 + dfb $01 + da bufferPTR + dfb $03 ; get DIB status + *--- My variables -fgINSERT ds 1 -fgPAUSE ds 1 -fgPLAY ds 1 +fgINSERT ds 1 ; 0:inserted / 1:ejected +fgPAUSE ds 1 ; 0:resume / 1:pause +fgPLAY ds 1 ; 0:stop / 1:play *--- The commands @@ -287,7 +406,7 @@ scsiSTOP hex 1b,00,00,00,00,00 scsiREADY hex 1b,00,00,00,01,00 scsiEJECT hex 1b,00,00,00,02,00 scsiINSERT hex 1b,00,00,00,03,00 -scsiSTATUS hex 42,00,40,00,00,00,00,04,00,00 +scsiSTATUS hex 42,02,40,01,00,00,00,04,00,00 scsiTOC hex 43,02,00,00,00,00,00,04,00,00 scsiPLAY hex 48,00,00,00,01,00,00,99,00,00 scsiPAUSE hex 4b,00,00,00,00,00,00,00,00,00