1
Desarrollo / Borrado de un fichero en disco
« en: Enero 27, 2019, 11:53:15 »
Hola buenas a todos!
Estoy intentando integrar un grabación de records en disco, pero estoy teniendo problemas.
El caso es que para la grabación del fichero sin que exista anteriormente funciona correctamente. El problema viene cuando hay que reemplazar este fichero con uno nuevo.
El codigo que estoy usando lo he sacado de este link:
https://www.lemon64.com/forum/viewtopic.php?t=64677&sid=3b6de77b5fde4e3f9c6b0ad214ad5ea6
Usa las funciones del Kernal para grabar/cargar el fichero desde el disco.
Este el código (realmente es la parte que falla, la que llaman scratch):
Cuando se ejecuta este código, no aparecen errores en las variables ioError/errorLevel. Por eso tampoco sé lo que se está haciendo mal
He estado comprobando otra pagina de referencia para comandos del DOS:
https://en.wikipedia.org/wiki/Commodore_DOS
Y parece que para el borrado de fichero se usa el comando:
Alguien puede echarme una manilla con esto.
Gracias de antemano.
Estoy intentando integrar un grabación de records en disco, pero estoy teniendo problemas.
El caso es que para la grabación del fichero sin que exista anteriormente funciona correctamente. El problema viene cuando hay que reemplazar este fichero con uno nuevo.
El codigo que estoy usando lo he sacado de este link:
https://www.lemon64.com/forum/viewtopic.php?t=64677&sid=3b6de77b5fde4e3f9c6b0ad214ad5ea6
Usa las funciones del Kernal para grabar/cargar el fichero desde el disco.
Este el código (realmente es la parte que falla, la que llaman scratch):
Código: [Seleccionar]
.const file_start = $25a6 // Inicio datos C64
.const file_end = $25b2
// most likely errors:
// a = $05 (device not present)
// a = $04 (file not found)
// a = $1d (load error)
// a = $00 (break, run/stop has been pressed during loading)
//Constantes del kernal
.const K_close = $ffc3
.const K_open = $ffc0
.const K_setnam = $ffbd
.const K_setlfs = $ffba
.const K_clrchn = $ffcc
.const K_load = $ffd5
.const K_save = $ffd8
.const temp1 = $c1
.const temp2 = $c2
scratch:
.text "S0:"
fname:
.text "RECORDS"
fname_end:
lastDevice:
.byte 8 // Range 8-11
saveData:
jsr loadprepare
// ** SCRATCH OLD FILE **
lda #$0f // Logical
ldy #$0f // Secondary
jsr loadsetlfs2
lda #fname_end-scratch
ldx #<scratch // XY ptr
ldy #>scratch
jsr K_setnam
jsr K_open
bcc noError2
sta errorLevel
inc ioError
noError2:
lda #$0f // Logical
jsr K_close
jsr K_clrchn
jsr cargaMiZp
lda #$35 //desactivacion de las funciones Kernal
sta $01
lda #$01
sta $d01a //turn on raster irq.
cli
rts
// Prepare hardware for IO operation
loadprepare:
sei // Disable IRQ
lda #0
sta $d01a //turn off raster irq.
jsr grabaMiZp
jsr cargaZp
lda #$36 // Kernal on
sta $01
lda #0 // Reset rs 232
sta $02a1
sta $d404 // Sid silent
sta $d404+7
sta $d404+14
sta $9d // Disable KERNAL messages
sta ioError // Clear error return flag
rts
loadsetlfs:
lda #$01 // Logical
ldy #$00 // Secondary
loadsetlfs2:
ldx lastDevice
jmp K_setlfs
Cuando se ejecuta este código, no aparecen errores en las variables ioError/errorLevel. Por eso tampoco sé lo que se está haciendo mal
He estado comprobando otra pagina de referencia para comandos del DOS:
https://en.wikipedia.org/wiki/Commodore_DOS
Y parece que para el borrado de fichero se usa el comando:
Código: [Seleccionar]
OPEN 15,8,15,"S0:file name":CLOSE 15
que creo que es el se está usando en el código.Alguien puede echarme una manilla con esto.
Gracias de antemano.