Autore Topic: C64 Con Boot? Si Puo' Fare!  (Letto 1925 volte)

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
C64 Con Boot? Si Puo' Fare!
« il: 02 Settembre 2006, 00:24:18 »
 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.

Codice: [Seleziona]
;-----------------------------------------------------------------------------
; 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
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
C64 Con Boot? Si Puo' Fare!
« Risposta #1 il: 02 Settembre 2006, 23:20:56 »
 Tempo fa, il vecchio disco fisso del mio pc finì la sua onorata carriera per un guasto dell'elettronica. L'attesa per recuperare il ricambio fu l'occasione per utilizzare il vecchio  :c64:  come sistema operativo principale del pc   :metallica:
In pratica fecì il boot del pc dall'unità A aggiungendo nel batch la riga di comando per caricare il ccs64 direttamente in luogo di windows.
E in quei giorni non so quante volte ho pensato a come sarebbe stata pratica e "elegante" la possibilità di un boot automatico del geos, senza dover passare prima dal basic. Grande iAN ad averci pensato tu.

Oggi come oggi (nell'epoca di dvd da 50 GB - basterà come supporto per il nuovo win?) un bel floppy con s.o. autoavviante da tenere nel taschino non è proprio bestiale ragazzi?  :maximo:
C= - Dal 1985! Lunga vita e prosperità.