La possibilita' di fare il boot da floppy fu preclusa al C64, feature implementata solo dal C128. Eppure basterebbe poco, appena finita la sequenza di reset provare a fare un load dal device 8, e al limite abortire, tornando a dare il controllo al basic.
Googlando a riguardo ho trovato un
vecchio post del 1990 su comp.sys.cbm, che riportava una patch del kernal proprio per questo scopo, pubblicata tempo prima sulla autorevole rivista Transactor ( che invidia :angry: )
Il sorgente li' postato presentava diversi errori, ne ho approfittato per farne una versione personalizzata.
Notare la incbin nel mio sorgente, carica il file "kernal" preso da Vice, che e' piu' adatto di quello di CCS perche' e' una rev2 leggermente patchata, mentre in Vice c'e' una rev3 genuina.
Il file .prg risultante va privato dal load address (00 E0) per ottenere un file ROM di 8192 bytes. In vice poi basta caricarlo con
x64 -kernal C:\path_al_file\autoboot.rom
o piu' semplicemente tramite il pannello Settings/Rom settings/computer, kernal.
A questo punto si vedra' una schermata leggermente diversa recante la scritta "AUTOBOOTSYSTEM" e che attende per un secondo la pressione di C= per skippare il boot, dopodiche' parte facendo un load":*,8,1 e buttando un rU: nel keyboard buffer.
Gia' che c'ero, dato che la patch sovrascrive le routine per il tape, e quindi inutilizzabili con questa rom, ho modificato anche il device di default in 8, cosi' che' basti un
load"$
per caricare la dir ad esempio, e modificato di conseguenza anche lo shift-runstop.
;-----------------------------------------------------------------------------
; Autoload Kernal ROM patch
;-----------------------------------------------------------------------------
;
; From: david.john...@canremote.uucp (DAVID JOHNSON)
; Newsgroups: comp.sys.cbm
; Subject: Re: Does the 64 autoboot?
; Message-ID: <90033012502815@masnet.uucp>
; Date: 30 Mar 90 10:12:00 GMT
;
; from Transactor July 1986, Vol7 Issue 1
; "Autoload & the Eprom"
;-----------------------------------------------------------------------------
; adapted and improved by iAN CooG/HokutoForce
; - corrected some typos and missing labels
; - A0-A2 were not set correctly, making the initial delay too long
; - 1 second delay is more than enough to allow pressing C=
; - device 8 made the default for LOAD and SAVE
; - replaced "RUN" with "rU:", better safe than sorry
; - while at it also replaced shift-runstop "load/run" with lO"*/rU:
; - load was forced at $0801, causing autostarters to fail.
;-----------------------------------------------------------------------------
vartab = $2d
time = $a0
ndx = $c6
keyd = $0277
shflag = $028d
;basic = $0801
dobas = $a474
basini = $e3bf
basmsg = $e422
vec300 = $e453
clrchn = $f333
setlfs = $ffba
setnam = $ffbd
close = $ffcc
load = $ffd5
settim = $ffdb
clall = $ffe7
;wait = 3 ;wait*4 = delay in secs
wait = 1*$40 ;wait/$40 = delay in secs
*= $e000
incbin kernal; using Vice kernal r3 ROM
*= $e49b
byte "AUTOBOOT"
*= $e1DA ; def device 8
byte 08
*= $e228
byte 08
*= $ece7
byte "Lo",$22,"*",$0d
runit byte "Ru:",13
;cassette patches
*= $f2ce
jmp $f271;illegal device
*= $f38b
jmp $f713
*= $f539
jmp $f713
*= $f65f
jmp $f713
;divert system reset
*= $fcef
stx $d016
jsr $fda3
jsr $fd50
jsr $fd15
jsr $ff5b
cli
jmp autold
*= $f72c
autold jsr vec300
jsr basini
jsr basmsg
ldx #251
txs
lda #0
tax;fix, x and y too
tay
jsr settim
auto10 lda shflag
cmp #2 ; C= to skip boot
beq auto30
;lda time + 1;+1 every ~4seconds
lda time + 2 ;+64 every ~1seconds
cmp #wait
bcc auto10
jsr clall
lda #$08
tax
tay
pha
jsr setlfs
lda #3
ldx #<filnam
ldy #>filnam
jsr setnam
lda #0
jsr load
stx vartab
sty vartab+1
pla
jsr close
jsr clrchn
;autorun routine
ldy #0
auto20 lda runit,y
sta keyd,y
iny
cpy #4
bne auto20
sty ndx
auto30 jmp dobas
filnam byte "0:*"
Sorgente e Rom gia' pronta