antoniovillena escribió:Uto escribió:Hynreck escribió:
Pero si lo queremos aplicar a este pack en particular lo mismo es una cosa que otra, ya que el LOAD * se repite muchas veces en todas las carpetas
Entiendo, bueno, pues para este pack no tiene remedio (fácil), pero quizá aun así sería mejor una ROM más genérica
La modificación es muy sencilla. Te la adjunto. He insertado esta cadena:
.tapein AUTOEXEC.TAP: LOAD ""
Se basa en este código (Reset&Play)
https://sourceforge.net/p/emuscriptoria ... leches.asm
Solo tienes que cambiar la cadena tras el L129D y acortar o alargar la anterior para que el fichero ocupe 16384 bytes.
Hola Antonio:
Con el fichero que has dejado estoy intentando realizar mi propia modificación a la rom para que la linea que ejecute sea:
Código: Seleccionar todo
IF IN VAL "62278" <> VAL "190" THEN .tapein /BOOT.TAP:LOAD ""
Para que si pulso CAPS SHIFT en el arranque no se realice la carga de /BOOT.TAP
He modificado el fichero con el fuente de la rom de la siguiente forma:
Código: Seleccionar todo
; DEFINE easy
DEFINE resetplay
DEFINE autoboot
; DEFINE pokemon
; DEFINE lenp $c0 ; $40 if ZX Spectrum 16K
OUTPUT 48kboottap.rom
Creo una etiqueta nueva
autoboot para que coja mis cambios en la compilación condicional y cambio el fichero resultante de la compilación a
48kboottap.rom
Código: Seleccionar todo
IFDEF autoboot
LD HL,$05FF ; L=$FF Hasta 255 posiciones para linea BASIC que
; que luego se pasaran a reg C para el LDIR
ELSE
LD HL,$0523 ; The keyboard repeat and delay values are
ENDIF
Aquí he aumentado hasta 255 ($FF) caracteres la línea que puede ejecutar al inicio en lugar de los 35 ($23). Como ese valor también es el que se pone a la variable del sistema que define tiempo que hay que presionar una tecla antes de que se repita, he aumentado ese tiempo a unos 5 segundos, pero eso no es algo que me importe ahora, aunque podría haber dejado su valor correcto que es 23 y luego hacer un LD C,$FF antes del LDIR). Con tu código la línea como mucho puede tener 35 octetos, así que la mía la he definido en el sitio libre que hay a partir de la dirección $386E
Código: Seleccionar todo
IFDEF autoboot
LD DE,L386E ; Inicio de la línea de autoboot
ELSE
LD DE,L129D
ENDIF
Código: Seleccionar todo
; ---------------------
; THE 'SPARE' LOCATIONS
; ---------------------
;; spare
L386E:
IFDEF autoboot
; IF IN VAL"65278" <> "190" THEN .tapein /BOOT.TAP:LOAD "" + Enter + $80
DEFB $FA, $BF, $B0, $22, $36, $35, $32, $37, $38, $22 ; IF IN VAL "65278"
DEFB $C9, $B0, $22, $31, $39, $30, $22, $CB ; <> "190" THEN
DEFB $2E, $74, $61, $70, $65, $69, $6E, $20, $2F, $42, $4F, $4F ; .tapein /BOO
DEFB $54, $2E, $54, $41, $50, $3A, $EF, $22, $22, $0D, $80 ; T.TAP:LOAD "" + Enter + $80
ENDIF
Y por ultimo he cambiado el mensaje de copyright del inicio al original para que no salga el de cargar la cinta del "cargando leches" y sea ese el que se vea en caso de pulsar CAPS SHIFT y no hacer autoboot.
Código: Seleccionar todo
;; copyright
L1539:
IFDEF resetplay
IFDEF autoboot
DEFB $7F ; copyright
DEFM " 1982 Sinclair Research Lt"
DEFB 'd'+$80
ELSE
DEFM "Press PLAY or SPACE to brea"
DEFB 'k'+$80
ENDIF
ELSE
DEFB $7F ; copyright
DEFM " 1982 Sinclair Research Lt"
DEFB 'd'+$80
ENDIF
El caso es que con esta rom sí se carga el fichero /BOOT.TAP, pero no consigo que funcione que al pulsar CAPS SHIFT no se ejecute la instrucción de carga. Tanto si la pulso como si no, el fichero /BOOT.TAP se carga.
He intentado ver si habilitando las interrupciones poniendo una instrucción EI antes del salto a la ejecución de la instrucción BASIC, pero no me ha funcionado.
Código: Seleccionar todo
EI
JR L1303-11 ; jump to one instruction before MAIN-4
DEFM 'AVillena1'
L129D: DEFB '.tapein AUTOEXEC.BAT:', $EF, $22, $22, $0D, $80; LOAD "" + Enter + $80
Tampoco poniendo un PAUSE VAL "50": al principio de la línea basic me ha funcionado.
¿Qué hay que hacer para que funcione el que si se tiene pulsada la tecla CAPS SHIFT en el arranque no haga autoboot?
Gracias anticipadas y recibe un saludo.