Programmare l'IDE64: Applicazioni compatibili


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...


Programmare in BASIC

Cambiare directory:
Stiamo usando l'hard disk drive #12 e il percorso '/BIN/GAMES' negli esempi.

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)


Programmare in Assembler

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...)


MANager 'plugins'

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

Metodo per verificare se l'IDE64 è presente nel sistema

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

Chiamare semplici comandi BASIC via assembler

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  = *
;--------------------------------

cbmsx.gif (1543 byte)