Programmare in BASIC...
Programmare in Assembler...
Manager 'plugins'...
Metodo per verificare se l'IDE64 è presente nel sistema...
Chiamare semplici comandi BASIC via assembler...
Esempi in
linguaggio assembler...
Descrizione
dell'IDE64 Filesystem...
Cambiare directory:
CD "/BIN/GAMES",12
o
OPEN 1,12,15,"C:/BIN/GAMES":CLOSE 1
10 OPEN 1,12,15,"C:/BIN/GAMES"
20 CLOSE 1
C'è anche la possibilità di usare questa sintassi:
10 OPEN 1,12,15
20 PRINT#1,"C:/BIN/GAMES"
30 CLOSE 1
Creare una directory:
MKDIR "/BIN/GAMES",12
o
OPEN 1,12,15,"M:/BIN/GAMES":CLOSE 1
Lo stesso nei comandi 'CD' e 'RM'.
Cancellare (delete) file o directory:
RM "/BIN/GAMES",12
o
OPEN 1,12,15,"S:/BIN/GAMES":CLOSE 1
Lo stesso nei comandi 'CD' e 'MKDIR'.
Aprire Files per Leggere o Scrivere:
Leggere files PRG:
10 OPEN 1,12,0,"FILENAME"
20 GET#1, A$
...
XX CLOSE 1
Scrivere files PRG:
10 OPEN 1,12,1,"FILENAME"
20 PRINT#1, A$
...
XX CLOSE 1
Leggere files PRG, SEQ o USR:
10 OPEN 1,12,2,"FILENAME,Type,R"
20 INPUT#1, A$
...
XX CLOSE 1
Scrivere files PRG, SEQ o USR:
10 OPEN 1,12,2,"FILENAME,Type,W"
20 PRINT#1, A$
...
XX CLOSE 1
Tipo:
P = PRG file
S = SEG file
U = USR file
E' contemporaneamente possibile aprire sei canali in lettura e uno in scrittura (per un
device). (IDE64 DOS V0.70 o superiore)
Usare la stessa sintassi come nel BASIC, vedi esempi.
Non usare velocizzatori floppy per accedere all'HDD,
chiamate non KERNAL direttamente al BUS seriale, numero device fissato a #8.
Non chiamare la routine RESTORE ($FF8A/$FD15). Non assumere che i vettori a $0300
puntino sempre allo stesso posto in $DE60-$DEFF, e non rimpiazzarli!
Non usare ACPTR ($FFA5/$EE13), CIOUT ($FFA8/$EDDD), LISTEN ($FFB1), SECOND ($FF93), TALK
($FFB4), TKSA ($FF96), UNLSN ($FFAE), UNTLK ($FFAB), queste chiamate nel kernel sono state
progettate solamente per dispositivi su BUS seriale.
Mentre stai fissando (creazione patch) programmi esistenti, controlla la presenza di
queste chiamate, e rimpiazzale con altre compatibili IDE64. Magari è consigliabile
lasciare queste chiamate per consentire anche l'uso del floppy...
NESSUNA delle chiamate IDEDOS interrompe l'IRQ/NMI (è possibile quindi rimpiazzare i loader IRQ!), comunque IRQ/NMI può essere ritardato di 30-40 cicli (come le "bad lines" del VIC) mentre sono in esecuzione le chiamate all'IDE64. Questo potrebbe causare "raster bugs" e simili, per evitare questo fare in modo che il raster interrupt avvenga in una linea precedente, e dopo controllare $D012.
LOAD - $FFD5
E' possibile caricare da ~$0400 a $FFFF
(IDE64 modifica automaticamente il registro di configurazione memoria $0001).
SAVE - $FFD8
E' possibile salvare la RAM da ~$0400 a $9FFF (e $C000-$CFFF)
OPEN - $FFC0
CHKIN - $FFC6
CHRIN - $FFCF
GETIN - $FFE4
CHKOUT - $FFC9
CHROUT - $FFD2
CLOSE - $FFC3
CLALL - $FFE7
CLRCHN - $FFCC
Vantaggi nell'usare le estensioni KERNAL (più potenti):
READ
- $DEF4
Questa chiamata non carica sotto I/O ram. (eg. leggere da $D800 sovrascriverà la ram
colore)
WRITE
- $DEF1
Non è possibile salvare sotto I/O ram. (eg. scrivere da $D800 salverà la ram colore) Per
accedere alla ram sotto il BASIC e KERNAL ROM, impostare correttamente $0001.
Queste chiamate non possono essere usate per i devices nel serial bus. In questo caso
viene riportato un errore (C=1), ed il programmatore dovrebbe bloccare manualmente
l'operazione usando CHRIN/GETIN/CHROUT.
Se vuoi che la tua applicazione (che utilizza READ/WRITE) sia eseguibile in una macchina
senza IDE64, controlla la presenza della IDE64 prima di effettuare queste due chiamate, ed
usa quindi standard routines, come descritto per drives seriali. (immagina cosa succede in
JSR $DEF4 se è stato aperto spazio I/O a $DE00-$DEFF...)
Un plugin ha 2 entry points
-> $1000 e $1003 / manager usa il secondo per farlo partire
$1000 - l'entry che potrebbe chiedere un filename eseguendosi da solo e non sotto manager
$1003 - manager entry point
Non distruggere la memoria a $0000-$03FF, $0800-$0FFF!!! Non
dimenticare di effettuare un restore del VIC prima di uscire. Non è una cattiva
idea caricare prima il file, e dopo cambiare lo schermo.
------------------------------------- *= $1000 start = * jmp called_by_sys4096 ;called_by_manager jsr setnam lda #1 ldx $ba ldy #0 jsr setlfs jsr open ldx #1 jsr chkin read_file_loop = * jsr chrin ;... ;... ;... ldx $90 beq read_file_loop lda #$01 ;Chiude file e ritorna jsr close ;al FileManager jsr clall ;... ;Fà qualche bella cosa... ;... rts ;ritorna al manager ;-------------------------------------- called_by_sys4096 = * ;Chiede filename, display credits, ecc. rts
Questo metodo verifica la presenza dell' IDE64 con IDE-DOS V0.88 e superiori.
$de60-$de62 = $49,$44,$45 "IDE"
lda #$3f sta $00 lda #$37 sta $01 lda $de60 cmp $de60 bne noide64 cmp #$49 bne noide64 lda $de61 cmp $de61 bne noide64 cmp #$44 bne noide64 lda $de62 cmp $de62 bne noide64 cmp #$45 bne noide64 beq ide64found
Questo codice mostra come chiamare semplici comandi BASIC via assembler.
;-------------------------------- lda #<restart sta $0302 lda #>restart sta $0303 lda #$f5 ;$F0 = LL; $F1 = DIR; $F5 = HDINIT sta $0200 lda #$00 sta $0201 lda #<$01ff sta $7a lda #>$01ff sta $7b jmp ($0308) restart = * ;--------------------------------