IDE64: esempi di programmazione


Questo esempio descrive come chiamare i comandi CD, MKDIR e RM

;--------------------------------------
; open 1,12,15,"x:name" : close 1
;--------------------------------------
                   *= $1000
setnam = $ffbd
setlfs = $ffba
close  = $ffc3
open   = $ffc0
                   ldx #12              ;HDD
                   ldy #15              ;canale comando
                   lda #1
                   jsr setlfs
                   lda #finenome (endname)-nome in ingresso (inputname)
                   ldx #<inputname
                   ldy #>inputname
                   jsr setnam
                   jsr open
                   lda #1
                   jsr close
                   rts
;--------------------------------------
; inputname         .text "S:TESTFILE"
; endname           = *                    ;Delete (Cancella)
; inputname         .text "M:TESTDIR"
; endname           = *                    ;Mkdir (crea dir)
; inputname         .text "I:"
; endname           = *                    ;Hdinit1 (IDE64 DOS V0.64 o sup.)
inputname         .text "C:/TMP"
endname           = *                    ;Cd

;--------------------------------------

Questo esempio mostra come leggere e visualizzare una directory in formato standard

        *= $1000

;KERNAL

setlfs  = $ffba
setnam  = $ffbd
open    = $ffc0
close   = $ffc3
chkin   = $ffc6
chkout  = $ffc9
clrchn  = $ffcc
chrin   = $ffcf
;chrout  = $ffd2
chrout  = $e716    ;chrout to screen (carattere su schermo)
clall   = $ffe7

;------------------------------
; print DIR
;------------------------------
              lda #1
              ldx #<namebuff
              ldy #>namebuff
              jsr setnam
              lda #1
              ldx $ba
              ldy #0
              jsr setlfs
              jsr open
              ldx #$01
              jsr chkin
              jsr chrin   ;startaddress (indirizzo di partenza)
              jsr chrin   ;$0401
main_loop     = *
              jsr chrin   ;next basic line (prossima linea basic)
              jsr chrin   ;    - "" -
              jsr chrin   ;line number - number of blocks (numero linea - numero di blocchi)
              tax
              jsr chrin
              ldy $90
              bne dir_end
              jsr $bdcd   ;Print # to ASCII (visualizza # in ASCII)
              lda #$20
              jsr chrout  ;space (spazio)
              jsr chrin
small_loop    = *
              ldy $90
              bne dir_end
              jsr chrout
              jsr chrin
              cmp #0
              bne small_loop
              lda #$0d
              jsr chrout
              bne main_loop
dir_end       = *
              lda #1
              jsr close
              jsr clall
              clc
              rts                 

namebuff      .text "$"

Questo esempio mostra come usare chiamate veloci READ/WRITE per copiare files
(da "INPUT-FILE" in "BIN" directory, a "OUTPUT-FILE" in "TMP" directory)

                  *=$1000
setnam = $ffbd
setlfs = $ffba
chkin  = $ffc6
chkout = $ffc9    
clall  = $ffe7
close  = $ffc3
open   = $ffc0
read   = $def4
write  = $def1
;--------------------------------------
; Buffer da $2000 a $5fff
;
StartAdd          = $20
BlockSize         = $40
;--------------------------------------
                  lda #1
                  ldx #12		;HDD
                  ldy #0		;indirizzo secondario per lettura
                  jsr setlfs
                  lda #outputname-inputname
                  ldx #<inputname
                  ldy #>inputname
                  jsr setnam
                  lda #$01
                  jsr open		;apre file in input
                  lda #2
                  ldx #12		;HDD
                  ldy #1                ;indirizzo secondario per scrittura
                  jsr setlfs
                  lda #status-outputname
                  ldx #<outputname
                  ldy #>outputname
                  jsr setnam
                  lda #$02
                  jsr open		;apre file in output
                  lda #$00
                  sta $fb
                  lda #StartAdd		;indirizzo di partenza Buffer
                  sta $fc
loop_copy         = *
                  ldx #$01
                  jsr chkin
                  lda #$fb		;puntatore alla pagina zero con indirizzo di partenza
                  ldx #$00
                  ldy #BlockSize	;dimensione blocco
                  jsr read		;LETTURA
                  lda $90
                  pha			;Status nello stack
                  txa
                  pha			;lunghezza reale del buffer (low) nello stack
                  ldx #$02
                  jsr chkout
                  pla
                  tax
                  lda #$fb 
                  jsr write		;SCRITTURA
                  pla			
                  and #$40
                  beq loop_copy
                  lda #$02
                  jsr close		;chiude output file
                  lda #$01
                  jsr close		;chiude input file
                  jsr clall
                  rts
                  ;
inputname         .text "/BIN/INPUT-FILE"
outputname        .text "/TMP/OUTPUT-FILE"
status            .byte 0
;--------------------------------------

cbmsx.gif (1543 byte)