This commit is contained in:
4am 2018-03-31 10:22:09 -04:00
parent 5fc1c1c76d
commit 73dff5ae40
3 changed files with 91 additions and 23 deletions

View File

@ -71,3 +71,37 @@ SetStartupPath
bpl -
rts
}
;------------------------------------------------------------------------------
; CreateNullTerminatedString
; Copy a length-prefixed string to kNullTerminatedBuffer and null-terminate it.
; Destination string is left-padded with a single space because reasons.
; Maximum length is 127 bytes.
;
; in: A/Y contains address of length-prefixed string to copy
; X contains length of null-terminated string -- if > length of source,
; remaining buffer will be padded with spaces (#$A0)
; out: all registers and flags clobbered
; $00/$01 clobbered
;------------------------------------------------------------------------------
!zone {
CreateNullTerminatedString
+STAY $00
phx
lda #$A0
- dex
sta kNullTerminatedBuffer,x
bpl -
plx
lda #$00
sta kNullTerminatedBuffer,x
lda ($00)
tay
- lda ($00),y
sta kNullTerminatedBuffer,y
dey
bne -
rts
}

View File

@ -15,6 +15,7 @@
CMD_QUIT = $65 ; quit to ProDOS
CMD_CREATE = $C0 ; create new file
CMD_DESTROY = $C1 ; delete a file
CMD_GETFILEINFO = $C4 ; get file (or volume) info
CMD_SETPREFIX= $C6 ; change default pathname prefix
CMD_OPEN = $C8 ; open a file
CMD_READ = $CA ; read an open file
@ -25,6 +26,7 @@ CMD_CLOSE = $CC ; close an open file
PC_QUIT = $04
PC_CREATE = $07
PC_DESTROY = $01
PC_GETFILEINFO = $0A
PC_SETPREFIX = $01
PC_OPEN = $03
PC_READ = $04
@ -265,6 +267,34 @@ SetPrefix
jmp _setprefix
}
;-------------------------------
; GetFileInfo
; just what it says on the tin
;
; in: stack contains 2 bytes of parameters:
; +1 address of pathname
; out: if C set, MLI call failed and A contains error code
; from open or read
; if C clear, MLI call succeeded and mliparam contains
; all the info
; all other flags clobbered
; all registers clobbered
; stack set to next instruction after parameters
;-------------------------------
!zone {
GetFileInfo
+PARAMS_ON_STACK 2
ldy #$01
lda (PARAM),y ; lo byte of pathname
sta mliparam+1
iny
lda (PARAM),y ; hi byte of pathname
sta mliparam+2
jmp _getfileinfo
}
;-------------------------------
; open file via ProDOS MLI
;
@ -391,6 +421,20 @@ _setprefix
jsr mli
rts
;-------------------------------
; get file info via ProDOS MLI
;
; in: caller has filled @mliparam with address of
; pathname
; out: if C set, open failed and A contains error code
; if C clear, open succeeded and A contains
; file reference number
;-------------------------------
_getfileinfo
lda #CMD_GETFILEINFO ; MLI command
ldy #CMD_GETFILEINFO ; number of parameters for 'getfileinfo' command
jmp mli
;-------------------------------
QuitToProDOS
lda #CMD_QUIT
@ -420,7 +464,7 @@ filetype !byte $FE ; file type (set by MLI get_file_info)
auxtype ; auxiliary file type (2 bytes, set by MLI get_file_info)
refnum !byte $FE ; file refnum (set by MLI open)
mlilen !byte $FE,$FE ; file length (set by MLI read)
blocks !byte $FE,$FE ; blocks used (set by getvolumeinfo)
blocks !byte $FE,$FE ; blocks used (set by getvolumeinfo/getfileinfo)
; member is also used by createfile
!byte $FE,$FE,$FE,$FE,$FE,$FE,$FE,$FE
; used by get_file_info

View File

@ -144,44 +144,34 @@ paintInfoView
jsr WeeGUI
+LDAY addrInfo
ldx #kInfoPaintWidth
phx
jsr multiPrint
plx
lda #$A0
- sta kNullTerminatedBuffer,x
dex
bpl -
lda #$00
sta kNullTerminatedBuffer+kInfoPaintWidth
jsr okvs_get ; get shortname of current game
!word gGlobalPrefsStore
!word kLastPlayed
+STAY +
+STAY + ; A/Y contains address
jsr okvs_get ; get selected version of this game
!word gGlobalPrefsStore
+ !word $FDFD ; SMC
+STAY +
+STAY + ; A/Y contains address
jsr okvs_get ; get long description of this version
!word gVersionsStore
+ !word $FDFD ; SMC
+STAY SRC
lda (SRC)
tay
- lda (SRC),y
sta $3F00,y
dey
bne -
stz $00
lda #$3F
sta $01
jmp .printLoop
; A/Y contains address
ldx #kInfoPaintWidth
jsr CreateNullTerminatedString
+LDADDR kNullTerminatedBuffer
bra multiPrintWhereYouAre
multiPrint
+STAY $00
stx .printLineLength+1
stz .htab+1
stz .vtab+1
multiPrintWhereYouAre
+STAY $00
.printLoop
lda ($00)
beq .printDone