TIP: Click on subject to list as thread! ANSI
echo: cbm
to: All
from: Lawrence Woodman
date: 2021-06-17 08:55:00
subject: Closing a file in Assembl

Hello Everyone,

I've been trying to save some memory on the VIC-20 to a file on disk but
seem to be having some problems when it comes to close the file.  At the
moment the file saves the data properly from assembly but I have to use
'CLOSE 8' from basic to prevent it having an asterisk next to the name in
the directory entry.

I have created a piece of code which replicates the problem below if
anyone has any ideas where I'm going wrong I'd be very grateful.

; Basic Stub
TOK_SYS     = $9E             ; SYS token

            .byt  $01, $10    ; Load address ($1001)

            * = $1001
            .word basicEnd    ; Next Line link, here end of Basic program
            .word 1           ; The line number for the SYS statement
            .byt  TOK_SYS     ; SYS token
            .asc  " "
            .asc  "4110"      ; Start of machine language
            .byt  0           ; End of Basic line
basicEnd    .word 0           ; End of Basic program

; KERNEL/BASIC ROM Routines
CLOSE       = $FFC3
SAVE        = $FFD8
SETLFS      = $FFBA
SETNAM      = $FFBD


main
            lda  #$07         ; Length of file name
            ldx  #filename   ; High byte of file name location
            jsr  SETNAM       ; Set the name

            lda  #$08         ; Logical file number
            ldx  #$08         ; Device number
            ldy  #$01         ; Secondary address - $01 because saving
            jsr  SETLFS       ; Set above parameters

            lda  #flash      ; High byte of start of memory block to save
            sta  $C2

            lda  #$C1            ; Pointer to location of start address
            ldx  #<(flashend+1)  ; Low byte of (end of memory block + 1)
            ldy  #>(flashend+1)  ; High byte of (end of memory block + 1)
            jsr  SAVE            ; Perform save

            lda  #$08         ; Logical file number
            jsr  CLOSE        ; Close the file

            rts

filename    .asc "FLASH"

;=================================
; Block of memory to save
;=================================
flash       lda  $900F        ; Record initial screen border/background combo
            ldx  #$FF         ; First combo is $FF
setcombo    stx  $900F        ; Set screen border/background combo

            ; Time delay
            ldy  #$FF
delay       dey
            bne  delay

            dex               ; Next combo
            bne  setcombo
            sta  $900F        ; restore initial screen border/background combo
flashend    rts



Thanks in advance


Lorry

---
Advanced Use of .LBR Files on CP/M
https://techtinkering.com/articles/advanced-use-of-lbr-files-on-cpm/

--- SoupGate-Win32 v1.05
                        
* Origin: Agency HUB, Dunedin - New Zealand | FidoUsenet Gateway (3:770/3)

SOURCE: echomail via QWK@pharcyde.org

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.