mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-01 00:31:17 +00:00
4568 lines
132 KiB
ArmAsm
4568 lines
132 KiB
ArmAsm
|
*
|
||
|
* DOS 3.2 FST
|
||
|
*
|
||
|
|
||
|
lst off
|
||
|
rel
|
||
|
typ $BD
|
||
|
dsk DOS3.2.FST.L
|
||
|
|
||
|
mx %00
|
||
|
|
||
|
*
|
||
|
* EQUATES
|
||
|
*
|
||
|
|
||
|
FST_DOS32 = 3
|
||
|
FST_BLOCKSIZE = $100
|
||
|
FST_NBBLOCKS = $1C7 ; 455 = 35T * 13S
|
||
|
|
||
|
rootDIR = $0F
|
||
|
|
||
|
iFCR_ID = $00
|
||
|
iFCR_NAME = $02
|
||
|
iFCR_FST = $06
|
||
|
iFCR_VCR = $08
|
||
|
iFCR_0A = $0A ; not used ?
|
||
|
iFCR_SEG1 = $0C
|
||
|
iFCR_10 = $10
|
||
|
iFCR_12 = $12
|
||
|
iFCR_ACCESS = $14
|
||
|
iFCR_SEG2 = $16
|
||
|
iFCR_EOF = $1A
|
||
|
iFCR_AUXTYPE = $1E
|
||
|
iFCR_MARK = $20
|
||
|
iFCR_TYPE = $24
|
||
|
iFCR_OTYPE = $26
|
||
|
iFCR_NBSEC = $28
|
||
|
iFCR_DISPLACEMENT = $2C
|
||
|
iFCR_2E = $2E
|
||
|
iFCR_TS = $30 ; Track/Sector of data!
|
||
|
|
||
|
iVCR_ID = $00
|
||
|
iVCR_NAME = $02
|
||
|
iVCR_FLAGS = $06
|
||
|
iVCR_BUSY = $08
|
||
|
iVCR_FST = $0A
|
||
|
iVCR_DEVICEID = $0C
|
||
|
iVCR_SEGMENT = $0E ; virtual pointer to VTOC segment (TRACK $11)
|
||
|
iVCR_LENGTH = $12 ; number of sectors of VTOC
|
||
|
|
||
|
* GS/OS calls
|
||
|
|
||
|
DEV_DISPATCHER EQU $01FC00
|
||
|
ALLOC_SEG EQU $01FC1C
|
||
|
RELEASE_SEG EQU $01FC20
|
||
|
ALLOC_VCR EQU $01FC24
|
||
|
RELEASE_VCR EQU $01FC28
|
||
|
ALLOC_FCR EQU $01FC2C
|
||
|
RELEASE_FCR EQU $01FC30
|
||
|
DEREF EQU $01FC38
|
||
|
GET_SYS_GBUF EQU $01FC3C
|
||
|
SYS_EXIT EQU $01FC40
|
||
|
FIND_VCR EQU $01FC48
|
||
|
GET_FCR EQU $01FC64
|
||
|
LOCK_MEM EQU $01FC68
|
||
|
UNLOCK_MEM EQU $01FC6C
|
||
|
MOVE_INFO EQU $01FC70
|
||
|
|
||
|
* GS/OS direct page
|
||
|
|
||
|
deviceNum = $00
|
||
|
callNum = $02
|
||
|
bufferPtr = $04
|
||
|
controlListPtr = $04
|
||
|
requestCount = $08
|
||
|
transferCount = $0C
|
||
|
blockNum = $10
|
||
|
blockSize = $14
|
||
|
FSTNum = $16 ; *
|
||
|
statusCode = $16 ; *
|
||
|
controlCode = $16 ; *
|
||
|
volumeID = $18
|
||
|
cachePriority = $1A
|
||
|
cachePointer = $1C
|
||
|
dibPointer = $20
|
||
|
|
||
|
ptrParamBlock = $32
|
||
|
lastDevice = $36
|
||
|
virtualFCR = $3A
|
||
|
virtualVCR = $3E
|
||
|
|
||
|
*
|
||
|
* FST direct page
|
||
|
*
|
||
|
|
||
|
ptrSEGMENT = $80
|
||
|
ptrVOLNAME = $84
|
||
|
ptrVCR = $88
|
||
|
ptrVTOC = $8C
|
||
|
ptrFCR = $90
|
||
|
ptrFCR2 = $94
|
||
|
ptrGSOSBUFFER = $98
|
||
|
ptrVOLNAME2 = $A0
|
||
|
ptrVOLNAME3 = $A4
|
||
|
ptrFILENAME = $A8
|
||
|
shtVOLNAME = $AC
|
||
|
ptrVTOC2 = $AE
|
||
|
shtFILENAME = $B2
|
||
|
gsosOUTPUT = $B4
|
||
|
ptrL01AA = $B8
|
||
|
shtPARAMETERS = $C2
|
||
|
|
||
|
*
|
||
|
* FST CODE
|
||
|
*
|
||
|
|
||
|
ASC 'FST ' ; FST signature
|
||
|
ADRL L098C ; call handler entry point
|
||
|
ADRL L0ABC ; GS/OS entry point
|
||
|
DW FST_DOS32 ; file system ID
|
||
|
|
||
|
DW $1803 ; attributes
|
||
|
* DW $3803 ; attributes
|
||
|
* 0001_1000_0000_0011
|
||
|
* 0001 clear high bit of pathname characters
|
||
|
* 1000 read-only FST
|
||
|
* 0011 Apple II format
|
||
|
|
||
|
DW $0100 ; version
|
||
|
DW FST_BLOCKSIZE ; block size
|
||
|
ADRL FST_NBBLOCKS ; max volume size (blocks)
|
||
|
ADRL $00000020
|
||
|
ADRL $FFFFFFFF ; max file size (bytes)
|
||
|
ADRL $00000000
|
||
|
STR 'Apple II DOS 3.2' ; FST name
|
||
|
STR 'DOS 3.2 FST v01.00'
|
||
|
DW $0000
|
||
|
ASC 'DOS 3.2 FST. Written by Antoine Vignau, '
|
||
|
ASC 'Based on the work of Monte Benaresh. '
|
||
|
ASC 'Copyright 2008 Brutal Deluxe Software'
|
||
|
|
||
|
haSEGMENT ADRL $00000000
|
||
|
tmpDEVICE DW $0000
|
||
|
L00E2 DW $0000
|
||
|
DB $00
|
||
|
DB $00
|
||
|
|
||
|
L00E6 DW $0000
|
||
|
L00E8 DW $0000
|
||
|
tmpLENGTH DW $0000
|
||
|
tmpMASK DW $0000
|
||
|
L00EE DW $0000
|
||
|
L00F0 DW $0000
|
||
|
|
||
|
fgCLASS DW $0000
|
||
|
fgNBPARAMS DW $0000
|
||
|
DB $00
|
||
|
DB $00
|
||
|
DB $00
|
||
|
DB $00
|
||
|
DB $00
|
||
|
DB $00
|
||
|
|
||
|
tmpTOSKIP DW $0000
|
||
|
L00FE DW $0000
|
||
|
DB $00
|
||
|
DB $00
|
||
|
DB $00
|
||
|
DB $00
|
||
|
|
||
|
tmpEOF DS 4
|
||
|
tmpSTART DS 4
|
||
|
DB $00
|
||
|
DB $00
|
||
|
|
||
|
tmpTS DW $0000
|
||
|
tmpEND DS 4
|
||
|
L0114 DW $0000
|
||
|
L0116 DW $0000
|
||
|
L0118 DW $0000
|
||
|
tmpMARK DS 4
|
||
|
tmpREQUESTCOUNT DS 4
|
||
|
L0122 DW $0000
|
||
|
L0124 DW $0000
|
||
|
tmpBLOCKSIZE DW $0000
|
||
|
tmpTRANSFERCOUNT DS 4
|
||
|
DB $00
|
||
|
DB $00
|
||
|
|
||
|
L012E DW $0000
|
||
|
*L0130 DW $0000
|
||
|
*L0132 DW $0000
|
||
|
gsosBUFFER ADRL $00000000
|
||
|
textMODE DW $0000
|
||
|
errVOLUME DW $0000
|
||
|
DB $00
|
||
|
DB $00
|
||
|
DB $00
|
||
|
DB $00
|
||
|
|
||
|
errMAIN DW $0000
|
||
|
maxPARAMS DW $0000
|
||
|
minPARAMS DW $0000
|
||
|
|
||
|
L0146 DS $32 ; VOLUNENAME (PROBABLY PARENT)
|
||
|
L0178 DS $32 ; FILENAME
|
||
|
L01AA DS $32 ; VOLUMENAME
|
||
|
L01DC DS $32 ; COMPLETE :DOS3.3
|
||
|
|
||
|
intENTRYNB DW $0000
|
||
|
intOFILETYPE DW $0000
|
||
|
intFILETYPE DW $0000
|
||
|
intACCESS DW $0000
|
||
|
intAUXTYPE DW $0000
|
||
|
intEOF DS 4
|
||
|
intNBSEC DW $0000
|
||
|
theENTRY DW $0000
|
||
|
intSTORAGE DW $0001
|
||
|
DW $0002
|
||
|
DB $00
|
||
|
DB $00
|
||
|
|
||
|
*
|
||
|
* OPEN
|
||
|
*
|
||
|
|
||
|
OPEN STZ errOPEN
|
||
|
JSL LOCK_MEM
|
||
|
JSR doOPEN
|
||
|
STA errOPEN
|
||
|
LDA haSEGMENT
|
||
|
TAX
|
||
|
ORA haSEGMENT+2
|
||
|
BEQ L0243
|
||
|
LDY haSEGMENT+2
|
||
|
JSL RELEASE_SEG
|
||
|
L0243 JSL UNLOCK_MEM
|
||
|
LDA errOPEN
|
||
|
CMP #$0001
|
||
|
BCC L0252
|
||
|
ORA errMAIN
|
||
|
L0252 JMPL SYS_EXIT
|
||
|
|
||
|
errOPEN DW $0000
|
||
|
|
||
|
*
|
||
|
* VOLUME
|
||
|
*
|
||
|
|
||
|
VOLUME STZ errVOLUME
|
||
|
JSL LOCK_MEM
|
||
|
JSR getDEVICEID
|
||
|
BCS L02D5
|
||
|
BEQ L026B
|
||
|
LDA #$0052
|
||
|
BRA L02D5
|
||
|
|
||
|
L026B LDA fgCLASS
|
||
|
BEQ L0294
|
||
|
|
||
|
LDY #$0006 ; volName
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT+2
|
||
|
LDA #$0018 ; length of GSOS output string
|
||
|
CMP [gsosOUTPUT]
|
||
|
BCC L0292
|
||
|
LDA #$0015 ; the length it must be!
|
||
|
LDY #$0002
|
||
|
STA [gsosOUTPUT],Y
|
||
|
LDA #$004F ; bufferTooSmall
|
||
|
BRL L043F
|
||
|
L0292 BRA L02A1
|
||
|
|
||
|
L0294 LDY #$0004 ; do the same for class 0 calls
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT+2
|
||
|
|
||
|
*
|
||
|
|
||
|
L02A1 LDA #L01AA ; Get memory for volume info
|
||
|
STA ptrL01AA
|
||
|
LDA #$1000
|
||
|
JSL ALLOC_SEG
|
||
|
BCC L02B5
|
||
|
LDA #$0054
|
||
|
BRL L043F
|
||
|
L02B5 STX haSEGMENT
|
||
|
STY haSEGMENT+2
|
||
|
JSL DEREF
|
||
|
STX ptrSEGMENT
|
||
|
STY ptrSEGMENT+2
|
||
|
JSR getVOLUMENAME
|
||
|
BCC L02D9
|
||
|
CMP #$0022
|
||
|
BEQ L02D2
|
||
|
CMP #$002C
|
||
|
BNE L02D5
|
||
|
L02D2 LDA #$0052
|
||
|
L02D5 SEC
|
||
|
BRL L043F
|
||
|
|
||
|
*
|
||
|
|
||
|
L02D9 LDA #L01AA
|
||
|
STA ptrVOLNAME
|
||
|
LDA #^L01AA
|
||
|
STA ptrVOLNAME+2
|
||
|
LDA deviceNum
|
||
|
STA tmpDEVICE
|
||
|
JSR createVCR
|
||
|
BCC L0354
|
||
|
CMP #$0057
|
||
|
BNE L02D5
|
||
|
|
||
|
LDA $42
|
||
|
AND #$4000
|
||
|
BEQ L02FE
|
||
|
L02F9 LDA #$0057
|
||
|
BRA L02D5
|
||
|
|
||
|
L02FE LDA fgCLASS
|
||
|
BEQ L031C
|
||
|
|
||
|
LDA (ptrL01AA)
|
||
|
INC
|
||
|
LDY #$0002
|
||
|
STA [gsosOUTPUT],Y
|
||
|
LDA gsosOUTPUT
|
||
|
CLC
|
||
|
ADC #$0003
|
||
|
STA gsosOUTPUT
|
||
|
BCC L0317
|
||
|
INC gsosOUTPUT+2
|
||
|
L0317 LDY #$0002
|
||
|
BRA L0321
|
||
|
|
||
|
L031C LDA (ptrL01AA)
|
||
|
INC
|
||
|
STA [gsosOUTPUT]
|
||
|
|
||
|
L0321 SEP #$20
|
||
|
LDY #$0002
|
||
|
L0326 LDA (ptrL01AA),Y
|
||
|
BEQ L032F
|
||
|
STA [gsosOUTPUT],Y
|
||
|
INY
|
||
|
BPL L0326
|
||
|
|
||
|
L032F REP #$20
|
||
|
LDA fgCLASS
|
||
|
BNE L0345
|
||
|
|
||
|
LDY #$0001
|
||
|
LDA [gsosOUTPUT],Y
|
||
|
AND #$FF00
|
||
|
ORA #$002F ; /
|
||
|
STA [gsosOUTPUT],Y
|
||
|
BRA L02F9
|
||
|
L0345 LDY #$0001
|
||
|
LDA [gsosOUTPUT],Y
|
||
|
AND #$FF00
|
||
|
ORA #$003A ; :
|
||
|
STA [gsosOUTPUT],Y
|
||
|
BRA L02F9
|
||
|
|
||
|
*
|
||
|
|
||
|
L0354 LDA fgCLASS
|
||
|
BEQ L0372
|
||
|
|
||
|
LDA (ptrL01AA)
|
||
|
INC
|
||
|
LDY #$0002
|
||
|
STA [gsosOUTPUT],Y
|
||
|
LDA gsosOUTPUT
|
||
|
CLC
|
||
|
ADC #$0003
|
||
|
STA gsosOUTPUT
|
||
|
BCC L036D
|
||
|
INC gsosOUTPUT+2
|
||
|
L036D LDY #$0002
|
||
|
BRA L0377
|
||
|
|
||
|
L0372 LDA (ptrL01AA)
|
||
|
INC
|
||
|
STA [gsosOUTPUT]
|
||
|
L0377 SEP #$20
|
||
|
LDY #$0002
|
||
|
L037C LDA (ptrL01AA),Y
|
||
|
BEQ L0385
|
||
|
STA [gsosOUTPUT],Y
|
||
|
INY
|
||
|
BPL L037C
|
||
|
|
||
|
L0385 REP #$20
|
||
|
LDA fgCLASS
|
||
|
BNE L03D1
|
||
|
|
||
|
LDY #$0001
|
||
|
LDA [gsosOUTPUT],Y
|
||
|
AND #$FF00
|
||
|
ORA #$002F
|
||
|
STA [gsosOUTPUT],Y
|
||
|
* LDY #$0035
|
||
|
* LDA [ptrVTOC],Y
|
||
|
* AND #$0020
|
||
|
* BNE L03A8
|
||
|
LDA #FST_NBBLOCKS ; 455
|
||
|
* BRA L03AB
|
||
|
*L03A8 LDA #$0640 ; 1600
|
||
|
L03AB LDY #$0008 ; totalBlocks
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
LDA #$0000
|
||
|
STA [ptrParamBlock],Y
|
||
|
JSR doFREEBLOCKS
|
||
|
LDY #$000C ; freeBlocks
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
LDA #$0000
|
||
|
STA [ptrParamBlock],Y
|
||
|
LDA #FST_DOS32
|
||
|
LDY #$0010 ; fileSysID
|
||
|
STA [ptrParamBlock],Y
|
||
|
CLC
|
||
|
BRA L043F
|
||
|
|
||
|
L03D1 LDY #$0001 ; class 1 calls
|
||
|
LDA [gsosOUTPUT],Y
|
||
|
AND #$FF00
|
||
|
ORA #$003A
|
||
|
STA [gsosOUTPUT],Y
|
||
|
LDA fgNBPARAMS
|
||
|
STA L0474
|
||
|
DEC L0474
|
||
|
DEC L0474
|
||
|
DEC L0474
|
||
|
BMI L043F
|
||
|
* LDY #$0035
|
||
|
* LDA [ptrVTOC],Y
|
||
|
* AND #$0020
|
||
|
* BNE L03FE
|
||
|
LDA #FST_NBBLOCKS ; 455
|
||
|
* BRA L0401
|
||
|
*L03FE LDA #$0640 ; 1600
|
||
|
L0401 LDY #$000A
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
LDA #$0000
|
||
|
STA [ptrParamBlock],Y
|
||
|
DEC L0474
|
||
|
BMI L043F
|
||
|
JSR doFREEBLOCKS
|
||
|
LDY #$000E
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
LDA #$0000
|
||
|
STA [ptrParamBlock],Y
|
||
|
DEC L0474
|
||
|
BMI L043F
|
||
|
LDA #FST_DOS32
|
||
|
LDY #$0012
|
||
|
STA [ptrParamBlock],Y
|
||
|
DEC L0474
|
||
|
BMI L043F
|
||
|
LDA #FST_BLOCKSIZE
|
||
|
LDY #$0014
|
||
|
STA [ptrParamBlock],Y
|
||
|
CLC
|
||
|
LDA #$0000
|
||
|
|
||
|
*
|
||
|
|
||
|
L043F PHA
|
||
|
PHP
|
||
|
BCC L0459
|
||
|
BIT errVOLUME
|
||
|
BPL L0459
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA #$0000
|
||
|
STA [ptrVCR],Y
|
||
|
LDY #iVCR_ID
|
||
|
LDA [ptrVCR],Y
|
||
|
JSL RELEASE_VCR
|
||
|
|
||
|
L0459 LDA haSEGMENT
|
||
|
TAX
|
||
|
ORA haSEGMENT+2
|
||
|
BEQ L0469
|
||
|
LDY haSEGMENT+2
|
||
|
JSL RELEASE_SEG
|
||
|
L0469 PLP
|
||
|
PLA
|
||
|
BCC L0470
|
||
|
ORA errMAIN
|
||
|
L0470 JMPL SYS_EXIT
|
||
|
|
||
|
L0474 DW $0000
|
||
|
|
||
|
*
|
||
|
* TRACK 11 / SECTOR 0
|
||
|
|
||
|
doFREEBLOCKS = *
|
||
|
|
||
|
LDY #$0035 ; number of sectors
|
||
|
LDA [ptrVTOC],Y
|
||
|
AND #$00FF
|
||
|
LSR ; divide by 16...
|
||
|
LSR
|
||
|
LSR
|
||
|
* LSR
|
||
|
STA fSECTORS
|
||
|
|
||
|
STZ fNBFREE
|
||
|
|
||
|
LDY #$0034 ; number of tracks
|
||
|
LDA [ptrVTOC],Y
|
||
|
AND #$00FF
|
||
|
STA fTRACKS
|
||
|
|
||
|
L0493 LDA fSECTORS
|
||
|
STA fNBSECTORS
|
||
|
|
||
|
LDA fTRACKS ; get track number
|
||
|
DEC
|
||
|
BMI L04C8 ; no more tracks
|
||
|
STA fTRACKS
|
||
|
ASL ; calculate its index
|
||
|
ASL
|
||
|
ADC #$0038 ; +56
|
||
|
TAY
|
||
|
L04A8 LDA [ptrVTOC],Y
|
||
|
STA fBITMAP
|
||
|
|
||
|
LDA fNBFREE
|
||
|
LDX #$0010 ; *16
|
||
|
L04B3 ASL fBITMAP ; if 1, carry is set
|
||
|
ADC #$0000 ; then add 1
|
||
|
DEX
|
||
|
BNE L04B3
|
||
|
STA fNBFREE
|
||
|
|
||
|
DEC fNBSECTORS
|
||
|
BEQ L0493
|
||
|
INY
|
||
|
INY
|
||
|
BRA L04A8
|
||
|
|
||
|
L04C8 LDA fNBFREE
|
||
|
RTS
|
||
|
|
||
|
fSECTORS DW $0000
|
||
|
fNBFREE DW $0000
|
||
|
fTRACKS DW $0000
|
||
|
fNBSECTORS DW $0000
|
||
|
fBITMAP DW $0000
|
||
|
|
||
|
*
|
||
|
* GET FILE INFO
|
||
|
*
|
||
|
|
||
|
*GETFILEINFO STZ L0130
|
||
|
* STZ L0132
|
||
|
GETFILEINFO JSL LOCK_MEM
|
||
|
JSR updateVCR
|
||
|
BCC L04E8
|
||
|
BRL L05E6
|
||
|
|
||
|
L04E8 STZ L0608
|
||
|
LDY #iVCR_SEGMENT
|
||
|
LDA [ptrVCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrVCR],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX ptrVTOC
|
||
|
STY ptrVTOC+2
|
||
|
LDY #iVCR_LENGTH
|
||
|
LDA [ptrVCR],Y
|
||
|
STA tmpLENGTH
|
||
|
LDA (shtFILENAME)
|
||
|
BNE L0534
|
||
|
|
||
|
STZ intAUXTYPE
|
||
|
STZ intEOF+2
|
||
|
STZ intNBSEC
|
||
|
LDA tmpLENGTH
|
||
|
INC
|
||
|
LDX fgCLASS
|
||
|
BNE L051F
|
||
|
STA intNBSEC
|
||
|
|
||
|
L051F XBA
|
||
|
STA intEOF
|
||
|
|
||
|
LDA #rootDIR ; rootDIR
|
||
|
STA intFILETYPE
|
||
|
STA intSTORAGE
|
||
|
LDA #$00C3 ; locked
|
||
|
STA intACCESS
|
||
|
BRA L056C
|
||
|
|
||
|
L0534 LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
BEQ L0540
|
||
|
JSR checkFCR
|
||
|
BCC L05B4
|
||
|
L0540 JSR L14A7
|
||
|
BCC L054B
|
||
|
LDA #$0051
|
||
|
BRL L05E6
|
||
|
L054B LDA L00F0
|
||
|
BPL L0556
|
||
|
LDA #$0046
|
||
|
BRL L05E6
|
||
|
L0556 LDA gsosBUFFER
|
||
|
STA ptrGSOSBUFFER
|
||
|
LDA gsosBUFFER+2
|
||
|
STA ptrGSOSBUFFER+2
|
||
|
LDA #$0002
|
||
|
STA callNum
|
||
|
JSR getORIGINAL ; Driver_Read
|
||
|
BCC L056C
|
||
|
BRA L05E5
|
||
|
|
||
|
L056C LDA fgCLASS
|
||
|
BNE L0592
|
||
|
|
||
|
LDA #$0001 ; class 0
|
||
|
STA fgNBPARAMS
|
||
|
LDA intFILETYPE
|
||
|
CMP #rootDIR
|
||
|
BNE L0585
|
||
|
|
||
|
* LDA #$0230 ; 560
|
||
|
LDA #FST_NBBLOCKS ; 420
|
||
|
STA intAUXTYPE
|
||
|
|
||
|
L0585 LDA #L0CD0
|
||
|
STA shtPARAMETERS
|
||
|
JSR setPARAMETERS
|
||
|
LDA #$0000
|
||
|
BRA L05E6
|
||
|
|
||
|
L0592 LDA #L0CEA
|
||
|
STA shtPARAMETERS
|
||
|
JSR setPARAMETERS
|
||
|
LDA fgNBPARAMS
|
||
|
CMP #$0008
|
||
|
BCC L05AF
|
||
|
LDY #$0020
|
||
|
JSR setOPTIONLIST
|
||
|
BCC L05AF
|
||
|
LDA #$004F
|
||
|
BRA L05E6
|
||
|
L05AF LDA #$0000
|
||
|
BRA L05E6
|
||
|
L05B4 LDY #iFCR_ACCESS
|
||
|
LDA [ptrFCR2],Y
|
||
|
STA intACCESS
|
||
|
LDY #iFCR_EOF
|
||
|
LDA [ptrFCR2],Y
|
||
|
STA intEOF
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR2],Y
|
||
|
STA intEOF+2
|
||
|
LDY #iFCR_AUXTYPE
|
||
|
LDA [ptrFCR2],Y
|
||
|
STA intAUXTYPE
|
||
|
LDY #iFCR_TYPE
|
||
|
LDA [ptrFCR2],Y
|
||
|
STA intFILETYPE
|
||
|
LDY #iFCR_NBSEC
|
||
|
LDA [ptrFCR2],Y
|
||
|
STA intNBSEC
|
||
|
BRA L056C
|
||
|
L05E5 SEC
|
||
|
|
||
|
L05E6 PHA
|
||
|
LDA haSEGMENT
|
||
|
TAX
|
||
|
ORA haSEGMENT+2
|
||
|
BEQ L05F7
|
||
|
LDY haSEGMENT+2
|
||
|
JSL RELEASE_SEG
|
||
|
L05F7 JSL UNLOCK_MEM
|
||
|
PLA
|
||
|
CMP #$0001
|
||
|
BCC L0604
|
||
|
ORA errMAIN
|
||
|
L0604 JMPL SYS_EXIT
|
||
|
|
||
|
L0608 DW $0000
|
||
|
|
||
|
*
|
||
|
* JUDGENAME
|
||
|
*
|
||
|
|
||
|
JUDGENAME = *
|
||
|
|
||
|
jsl LOCK_MEM
|
||
|
|
||
|
lda [ptrParamBlock]
|
||
|
sta nbParams
|
||
|
|
||
|
ldy #2
|
||
|
lda [ptrParamBlock],y
|
||
|
cmp #FST_DOS32
|
||
|
beq judge1
|
||
|
|
||
|
lda #$0064 ; invalidFSTID
|
||
|
sec
|
||
|
brl judge99
|
||
|
|
||
|
judge1 ldy #4
|
||
|
lda [ptrParamBlock],y
|
||
|
cmp #$0004
|
||
|
bcc judge2
|
||
|
|
||
|
lda #$0053 ; paramRangeError
|
||
|
sec
|
||
|
brl judge99
|
||
|
|
||
|
judge2 dec nbParams
|
||
|
dec nbParams
|
||
|
lda nbParams
|
||
|
bne judge3
|
||
|
lda #0
|
||
|
clc
|
||
|
brl judge99
|
||
|
|
||
|
judge3 lda #strDOS32
|
||
|
ldy #6
|
||
|
sta [ptrParamBlock],y
|
||
|
lda #^strDOS32
|
||
|
ldy #8
|
||
|
sta [ptrParamBlock],y
|
||
|
|
||
|
dec nbParams
|
||
|
lda nbParams
|
||
|
bne judge4
|
||
|
lda #0
|
||
|
clc
|
||
|
brl judge99
|
||
|
|
||
|
judge4 lda #30
|
||
|
ldy #$000a
|
||
|
sta [ptrParamBlock],y
|
||
|
|
||
|
dec nbParams
|
||
|
lda nbParams
|
||
|
bne judge5
|
||
|
lda #0
|
||
|
clc
|
||
|
brl judge99
|
||
|
|
||
|
judge5 dec nbParams
|
||
|
lda nbParams
|
||
|
bne judge6
|
||
|
lda #0
|
||
|
clc
|
||
|
brl judge99
|
||
|
|
||
|
judge6 lda #0 ; nameFlags
|
||
|
ldy #$0010
|
||
|
sta [ptrParamBlock],y
|
||
|
|
||
|
clc
|
||
|
|
||
|
*-----------
|
||
|
|
||
|
judge99 pha
|
||
|
php
|
||
|
|
||
|
jsl UNLOCK_MEM
|
||
|
|
||
|
plp
|
||
|
pla
|
||
|
jmpl SYS_EXIT
|
||
|
|
||
|
nbParams ds 2
|
||
|
|
||
|
strDOS32 str 'DOS 3.2 file names may contain any character except a comma, with a maximum name length of 30 characters.'
|
||
|
|
||
|
*----------------------------
|
||
|
|
||
|
FORMAT = *
|
||
|
ERASE = *
|
||
|
|
||
|
jsl LOCK_MEM
|
||
|
|
||
|
JSR getDEVICEID
|
||
|
BCS errFORMAT
|
||
|
BEQ okFORMAT
|
||
|
LDA #$0052
|
||
|
BRA errFORMAT
|
||
|
|
||
|
* jsr swapDEVICE
|
||
|
okFORMAT jsr formatDEVICE
|
||
|
bcs errFORMAT
|
||
|
jsl UNLOCK_MEM
|
||
|
|
||
|
lda #0
|
||
|
clc
|
||
|
errFORMAT jmpl SYS_EXIT
|
||
|
|
||
|
*-----------
|
||
|
|
||
|
formatDEVICE = *
|
||
|
|
||
|
lda #6 ; Driver_Control
|
||
|
sta callNum
|
||
|
lda #1 ; FormatDevice
|
||
|
sta controlCode
|
||
|
|
||
|
lda #formatBuffer
|
||
|
sta controlListPtr
|
||
|
lda #^formatBuffer
|
||
|
sta controlListPtr+2
|
||
|
|
||
|
lda #16
|
||
|
sta requestCount
|
||
|
stz requestCount+2
|
||
|
|
||
|
lda #FST_NBBLOCKS
|
||
|
sta blockNum
|
||
|
stz blockNum+2
|
||
|
|
||
|
lda #FST_BLOCKSIZE
|
||
|
sta blockSize
|
||
|
|
||
|
]lp JSL DEV_DISPATCHER
|
||
|
bcc writeALL
|
||
|
CMP #$002E
|
||
|
BEQ ]lp
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
*---- 2nd step: write data
|
||
|
|
||
|
writeALL lda #3
|
||
|
sta callNum
|
||
|
lda #FST_BLOCKSIZE
|
||
|
sta blockSize
|
||
|
lda #FST_DOS32
|
||
|
sta FSTNum
|
||
|
stz volumeID
|
||
|
stz cachePriority
|
||
|
|
||
|
lda #DOS32
|
||
|
sta bufferPtr
|
||
|
lda #^DOS32
|
||
|
sta bufferPtr+2
|
||
|
lda #$2300 ; 35 sectors
|
||
|
sta requestCount
|
||
|
stz requestCount+2
|
||
|
stz blockNum ; T0/S0
|
||
|
stz blockNum+2
|
||
|
jsr doACTION
|
||
|
bcc doTRACK11
|
||
|
rts
|
||
|
|
||
|
doTRACK11 lda #TRACK11
|
||
|
sta bufferPtr
|
||
|
lda #^TRACK11
|
||
|
sta bufferPtr+2
|
||
|
lda #$0D00 ; 13 sectors
|
||
|
sta requestCount
|
||
|
stz requestCount+2
|
||
|
lda #$00DD ; track $11
|
||
|
sta blockNum
|
||
|
stz blockNum+2
|
||
|
jsr doACTION
|
||
|
bcc doHELLO
|
||
|
rts
|
||
|
|
||
|
doHELLO lda #HELLO
|
||
|
sta bufferPtr
|
||
|
lda #^HELLO
|
||
|
sta bufferPtr+2
|
||
|
lda #$0200 ; 2 sectors
|
||
|
sta requestCount
|
||
|
stz requestCount+2
|
||
|
lda #$00F5 ; track $12/$0E
|
||
|
sta blockNum
|
||
|
stz blockNum+2
|
||
|
jsr doACTION
|
||
|
rts
|
||
|
|
||
|
*-----------
|
||
|
|
||
|
*swapDEVICE lda lastDevice
|
||
|
* jsl SWAP_OUT
|
||
|
* rts
|
||
|
|
||
|
*-----------
|
||
|
|
||
|
doACTION JSL DEV_DISPATCHER
|
||
|
bcc doACTION99
|
||
|
CMP #$002E
|
||
|
BEQ doACTION
|
||
|
SEC
|
||
|
doACTION99 RTS
|
||
|
|
||
|
*-----------
|
||
|
|
||
|
formatBuffer ds 16
|
||
|
|
||
|
*----------------------------
|
||
|
|
||
|
|
||
|
*
|
||
|
* GETDIRENTRY
|
||
|
*
|
||
|
|
||
|
GETDIRENTRY JSL LOCK_MEM
|
||
|
LDX virtualFCR
|
||
|
LDY virtualFCR+2
|
||
|
JSL DEREF
|
||
|
STX ptrFCR
|
||
|
STY ptrFCR+2
|
||
|
LDX virtualVCR
|
||
|
LDY virtualVCR+2
|
||
|
JSL DEREF
|
||
|
STX ptrVCR
|
||
|
STY ptrVCR+2
|
||
|
LDA #$1000
|
||
|
JSL ALLOC_SEG
|
||
|
BCC L0633
|
||
|
LDA #$0054
|
||
|
RTS
|
||
|
|
||
|
L0633 STX haSEGMENT
|
||
|
STY haSEGMENT+2
|
||
|
JSL DEREF
|
||
|
STX ptrSEGMENT
|
||
|
STY ptrSEGMENT+2
|
||
|
LDA gsosBUFFER
|
||
|
STA ptrGSOSBUFFER
|
||
|
LDA gsosBUFFER+2
|
||
|
STA ptrGSOSBUFFER+2
|
||
|
|
||
|
LDA fgCLASS
|
||
|
JSR doGETDIRENTRY
|
||
|
|
||
|
PHA
|
||
|
LDA haSEGMENT
|
||
|
TAX
|
||
|
ORA haSEGMENT+2
|
||
|
BEQ L0662
|
||
|
LDY haSEGMENT+2
|
||
|
JSL RELEASE_SEG
|
||
|
L0662 JSL UNLOCK_MEM
|
||
|
PLA
|
||
|
CMP #$0001
|
||
|
BCC L066F
|
||
|
ORA errMAIN
|
||
|
L066F JMPL SYS_EXIT
|
||
|
|
||
|
*
|
||
|
* READ
|
||
|
*
|
||
|
|
||
|
READ JSL LOCK_MEM
|
||
|
LDX virtualFCR
|
||
|
LDY virtualFCR+2
|
||
|
JSL DEREF
|
||
|
STX ptrFCR
|
||
|
STY ptrFCR+2
|
||
|
LDX virtualVCR
|
||
|
LDY virtualVCR+2
|
||
|
JSL DEREF
|
||
|
STX ptrVCR
|
||
|
STY ptrVCR+2
|
||
|
LDY #iVCR_SEGMENT
|
||
|
LDA [ptrVCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrVCR],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX ptrVTOC
|
||
|
STY ptrVTOC+2
|
||
|
LDY #iFCR_2E
|
||
|
LDA [ptrFCR],Y
|
||
|
TAX
|
||
|
LDY #iFCR_DISPLACEMENT
|
||
|
LDA [ptrFCR],Y
|
||
|
JSR getFILEOFFSET
|
||
|
JSR doREAD
|
||
|
PHA
|
||
|
PHP
|
||
|
JSL UNLOCK_MEM
|
||
|
PLP
|
||
|
PLA
|
||
|
BCC L06C0
|
||
|
ORA errMAIN
|
||
|
L06C0 JMPL SYS_EXIT
|
||
|
|
||
|
*
|
||
|
* CLOSE
|
||
|
*
|
||
|
|
||
|
CLOSE JSL LOCK_MEM
|
||
|
LDX virtualFCR
|
||
|
LDY virtualFCR+2
|
||
|
JSL DEREF
|
||
|
STX ptrFCR
|
||
|
STY ptrFCR+2
|
||
|
LDX virtualVCR
|
||
|
LDY virtualVCR+2
|
||
|
JSL DEREF
|
||
|
STX ptrVCR
|
||
|
STY ptrVCR+2
|
||
|
LDY #iFCR_TYPE
|
||
|
LDA [ptrFCR],Y
|
||
|
CMP #rootDIR
|
||
|
BEQ L06F9
|
||
|
LDY #iFCR_SEG2
|
||
|
LDA [ptrFCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
TAY
|
||
|
JSL RELEASE_SEG
|
||
|
L06F9 LDY #iFCR_ID
|
||
|
LDA [ptrFCR],Y
|
||
|
JSL RELEASE_FCR
|
||
|
BCC L0709
|
||
|
LDA #$8043
|
||
|
BRA L071C
|
||
|
L0709 LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
BNE L0715
|
||
|
LDA #$1F40
|
||
|
BRA L071C
|
||
|
L0715 DEC
|
||
|
STA [ptrVCR],Y
|
||
|
CLC
|
||
|
LDA #$0000
|
||
|
L071C PHA
|
||
|
PHP
|
||
|
JSL UNLOCK_MEM
|
||
|
PLP
|
||
|
PLA
|
||
|
BCC L0729
|
||
|
ORA errMAIN
|
||
|
L0729 JMPL SYS_EXIT
|
||
|
|
||
|
*
|
||
|
* GETDEVNUMBER
|
||
|
*
|
||
|
|
||
|
GETDEVNUMBER JSL LOCK_MEM
|
||
|
|
||
|
LDA lastDevice ; do we have a device number?
|
||
|
BEQ L0744 ; no, get one!
|
||
|
|
||
|
L0735 LDY #$0006 ; class 1
|
||
|
LDX fgCLASS
|
||
|
BNE L0740
|
||
|
LDY #$0004 ; class 0
|
||
|
L0740 STA [ptrParamBlock],Y
|
||
|
BRA L075B
|
||
|
|
||
|
L0744 JSR updateVCR
|
||
|
BCC L0754
|
||
|
CMP #$0057
|
||
|
BNE L0751
|
||
|
LDA #$0052
|
||
|
L0751 SEC
|
||
|
BRA L075F
|
||
|
|
||
|
L0754 LDY #iVCR_DEVICEID
|
||
|
LDA [ptrVCR],Y
|
||
|
BRA L0735
|
||
|
|
||
|
L075B CLC
|
||
|
LDA #$0000
|
||
|
L075F PHA
|
||
|
PHP
|
||
|
LDA haSEGMENT
|
||
|
TAX
|
||
|
ORA haSEGMENT+2
|
||
|
BEQ L0771
|
||
|
LDY haSEGMENT+2
|
||
|
JSL RELEASE_SEG
|
||
|
L0771 JSL UNLOCK_MEM
|
||
|
PLP
|
||
|
PLA
|
||
|
BCC L077C
|
||
|
ORA errMAIN
|
||
|
L077C JMPL SYS_EXIT
|
||
|
|
||
|
*
|
||
|
* GETEOF
|
||
|
*
|
||
|
|
||
|
GETEOF JSL LOCK_MEM
|
||
|
LDX virtualFCR
|
||
|
LDY virtualFCR+2
|
||
|
JSL DEREF
|
||
|
STX ptrFCR
|
||
|
STY ptrFCR+2
|
||
|
LDY #iFCR_EOF
|
||
|
LDA [ptrFCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
PHA
|
||
|
|
||
|
LDA fgCLASS
|
||
|
BEQ L07AD
|
||
|
|
||
|
PLA
|
||
|
LDY #$0006
|
||
|
STA [ptrParamBlock],Y
|
||
|
TXA
|
||
|
DEY
|
||
|
DEY
|
||
|
STA [ptrParamBlock],Y
|
||
|
BRA L07B8
|
||
|
|
||
|
L07AD PLA
|
||
|
LDY #$0004
|
||
|
STA [ptrParamBlock],Y
|
||
|
TXA
|
||
|
DEY
|
||
|
DEY
|
||
|
STA [ptrParamBlock],Y
|
||
|
|
||
|
L07B8 CLC
|
||
|
LDA #$0000
|
||
|
PHA
|
||
|
PHP
|
||
|
JSL UNLOCK_MEM
|
||
|
PLP
|
||
|
PLA
|
||
|
BCC L07C9
|
||
|
ORA errMAIN
|
||
|
L07C9 JMPL SYS_EXIT
|
||
|
|
||
|
*
|
||
|
* GETMARK
|
||
|
*
|
||
|
|
||
|
GETMARK JSL LOCK_MEM
|
||
|
LDX virtualFCR
|
||
|
LDY virtualFCR+2
|
||
|
JSL DEREF
|
||
|
STX ptrFCR
|
||
|
STY ptrFCR+2
|
||
|
LDY #iFCR_MARK
|
||
|
LDA [ptrFCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
PHA
|
||
|
|
||
|
LDA fgCLASS
|
||
|
BEQ L07FA
|
||
|
|
||
|
PLA
|
||
|
LDY #$0006
|
||
|
STA [ptrParamBlock],Y
|
||
|
TXA
|
||
|
DEY
|
||
|
DEY
|
||
|
STA [ptrParamBlock],Y
|
||
|
BRA L0805
|
||
|
|
||
|
L07FA PLA
|
||
|
LDY #$0004
|
||
|
STA [ptrParamBlock],Y
|
||
|
TXA
|
||
|
DEY
|
||
|
DEY
|
||
|
STA [ptrParamBlock],Y
|
||
|
L0805 CLC
|
||
|
LDA #$0000
|
||
|
PHA
|
||
|
PHP
|
||
|
JSL UNLOCK_MEM
|
||
|
PLP
|
||
|
PLA
|
||
|
BCC L0816
|
||
|
ORA errMAIN
|
||
|
L0816 JMPL SYS_EXIT
|
||
|
|
||
|
*
|
||
|
* SETMARK
|
||
|
*
|
||
|
|
||
|
SETMARK JSL LOCK_MEM
|
||
|
LDX virtualFCR
|
||
|
LDY virtualFCR+2
|
||
|
JSL DEREF
|
||
|
STX ptrFCR
|
||
|
STY ptrFCR+2
|
||
|
|
||
|
LDA fgCLASS
|
||
|
BEQ L0840
|
||
|
|
||
|
LDY #$0006
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA tmpDISPLACEMENT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA tmpDISPLACEMENT+2
|
||
|
BRA L0851
|
||
|
|
||
|
L0840 LDY #$0002
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA tmpDISPLACEMENT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA tmpDISPLACEMENT+2
|
||
|
BRA L0867
|
||
|
|
||
|
L0851 LDY #$0004
|
||
|
LDA [ptrParamBlock],Y
|
||
|
BEQ L0867 ; 0
|
||
|
DEC
|
||
|
BEQ L0875 ; 1
|
||
|
DEC
|
||
|
BEQ L08B3 ; 2
|
||
|
DEC
|
||
|
BEQ L0894 ; 3
|
||
|
LDA #$0053
|
||
|
BRL L08FD
|
||
|
|
||
|
* 0 mark = displacement
|
||
|
L0867 LDA tmpDISPLACEMENT
|
||
|
STA finalMARK
|
||
|
LDA tmpDISPLACEMENT+2
|
||
|
STA finalMARK+2
|
||
|
BRA L08D0
|
||
|
|
||
|
* 1 mark = eof - displacement
|
||
|
L0875 LDY #iFCR_EOF
|
||
|
LDA [ptrFCR],Y
|
||
|
SEC
|
||
|
SBC tmpDISPLACEMENT
|
||
|
STA finalMARK
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
SBC tmpDISPLACEMENT+2
|
||
|
BCS L088F
|
||
|
LDA #$004D
|
||
|
BRA L08FD
|
||
|
L088F STA finalMARK+2
|
||
|
BRA L08EA
|
||
|
|
||
|
* 3 mark = old mark - displacement
|
||
|
L0894 LDY #iFCR_MARK
|
||
|
LDA [ptrFCR],Y
|
||
|
SEC
|
||
|
SBC tmpDISPLACEMENT
|
||
|
STA finalMARK
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
SBC tmpDISPLACEMENT+2
|
||
|
BCS L08AE
|
||
|
LDA #$004D
|
||
|
BRA L08FD
|
||
|
L08AE STA finalMARK+2
|
||
|
BRA L08EA
|
||
|
|
||
|
* 2 mark = old mark + displacement
|
||
|
L08B3 LDY #iFCR_MARK
|
||
|
LDA [ptrFCR],Y
|
||
|
CLC
|
||
|
ADC tmpDISPLACEMENT
|
||
|
STA finalMARK
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
ADC tmpDISPLACEMENT+2
|
||
|
BCC L08CD
|
||
|
LDA #$004D
|
||
|
BRA L08FD
|
||
|
L08CD STA finalMARK+2
|
||
|
|
||
|
L08D0 LDA finalMARK+2
|
||
|
LDY #$001C
|
||
|
CMP [ptrFCR],Y
|
||
|
BCC L08EA
|
||
|
BNE L08E5
|
||
|
DEY
|
||
|
DEY
|
||
|
LDA [ptrFCR],Y
|
||
|
CMP finalMARK
|
||
|
BCS L08EA
|
||
|
L08E5 LDA #$004D
|
||
|
BRA L08FD
|
||
|
L08EA LDA finalMARK
|
||
|
LDY #iFCR_MARK
|
||
|
STA [ptrFCR],Y
|
||
|
LDA finalMARK+2
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrFCR],Y
|
||
|
CLC
|
||
|
LDA #$0000
|
||
|
L08FD PHA
|
||
|
JSL UNLOCK_MEM
|
||
|
PLA
|
||
|
CMP #$0001
|
||
|
BCC L090B
|
||
|
ORA errMAIN
|
||
|
L090B JMPL SYS_EXIT
|
||
|
|
||
|
tmpDISPLACEMENT ADRL $00000000
|
||
|
finalMARK ADRL $00000000
|
||
|
|
||
|
*
|
||
|
* FLUSH
|
||
|
*
|
||
|
|
||
|
FLUSH LDA fgCLASS
|
||
|
BEQ L092A
|
||
|
|
||
|
LDA fgNBPARAMS
|
||
|
CMP #$0003
|
||
|
BCC L092A
|
||
|
LDA #$0004
|
||
|
SEC
|
||
|
BRA L092E
|
||
|
L092A CLC
|
||
|
LDA #$0000
|
||
|
L092E BCC L0933
|
||
|
ORA errMAIN
|
||
|
L0933 JMPL SYS_EXIT
|
||
|
|
||
|
*
|
||
|
* FSTSPECIFIC
|
||
|
*
|
||
|
|
||
|
FSTSPECIFIC LDY #$0004
|
||
|
LDA [ptrParamBlock],Y
|
||
|
BEQ L094E
|
||
|
DEC
|
||
|
BNE L0946
|
||
|
JSR specific1
|
||
|
BRA L0952
|
||
|
L0946 DEC
|
||
|
BNE L094E
|
||
|
JSR specific2
|
||
|
BRA L0952
|
||
|
|
||
|
L094E LDA #$0065
|
||
|
SEC
|
||
|
L0952 CMP #$0001
|
||
|
BCC L095A
|
||
|
ORA errMAIN
|
||
|
L095A JMPL SYS_EXIT
|
||
|
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
|
||
|
L095E JSL LOCK_MEM
|
||
|
JSR updateVCR
|
||
|
BCS L096A
|
||
|
LDA #$002B
|
||
|
L096A PHA
|
||
|
LDA haSEGMENT
|
||
|
TAX
|
||
|
ORA haSEGMENT+2
|
||
|
BEQ L097B
|
||
|
LDY haSEGMENT+2
|
||
|
JSL RELEASE_SEG
|
||
|
L097B JSL UNLOCK_MEM
|
||
|
PLA
|
||
|
CMP #$0001
|
||
|
BCC L0988
|
||
|
ORA errMAIN
|
||
|
L0988 JMPL SYS_EXIT
|
||
|
|
||
|
*
|
||
|
* FST INTERNAL ENTRY POINT
|
||
|
*
|
||
|
* A: UNDEFINED
|
||
|
* X: CALL NUMBER
|
||
|
* Y: CLASS TYPE
|
||
|
*
|
||
|
|
||
|
*L098C STAL $FF0500 ; ?
|
||
|
L098C PHK
|
||
|
PLB
|
||
|
REP #$30
|
||
|
STZ fgNBPARAMS
|
||
|
STZ errMAIN
|
||
|
|
||
|
STY fgCLASS ; class 0 or 1 call?
|
||
|
CPY #$0000
|
||
|
BEQ L09C2
|
||
|
|
||
|
LDA [ptrParamBlock] ; class 1
|
||
|
STA fgNBPARAMS
|
||
|
LDA L0A56-2,X ; how many parameters
|
||
|
SEP #$20 ; do we have?
|
||
|
STA maxPARAMS
|
||
|
XBA
|
||
|
STA minPARAMS
|
||
|
LDA fgNBPARAMS
|
||
|
CMP maxPARAMS
|
||
|
BCS L09D0
|
||
|
CMP minPARAMS
|
||
|
BCC L09D0
|
||
|
REP #$20
|
||
|
|
||
|
L09C2 STZ haSEGMENT ; jump to call
|
||
|
STZ haSEGMENT+2
|
||
|
CPX #$0069
|
||
|
BCS L09D7
|
||
|
JMP (L09EC,X)
|
||
|
|
||
|
L09D0 REP #$20
|
||
|
LDA #$0004
|
||
|
BRA L09DA
|
||
|
L09D7 LDA #$0001
|
||
|
L09DA SEC
|
||
|
ORA errMAIN
|
||
|
JMPL SYS_EXIT
|
||
|
|
||
|
L09E2 LDA #$002B
|
||
|
BRA L09DA
|
||
|
|
||
|
L09E7 LDA #$0065
|
||
|
BRA L09DA
|
||
|
|
||
|
* GS/OS CALL NUMBERS
|
||
|
|
||
|
L09EC DA L09D7 ; 00
|
||
|
DA L095E ; 01 Create
|
||
|
DA L095E ; 02 Destroy
|
||
|
DA L09D7 ; 03 OSShutdown
|
||
|
DA L095E ; 04 ChangePath
|
||
|
DA L095E ; 05 SetFileInfo
|
||
|
DA GETFILEINFO ; 06 GetFileInfo
|
||
|
DA JUDGENAME ; 07 JudgeName
|
||
|
DA VOLUME ; 08 Volume
|
||
|
DA L09D7 ; 09 SetPrefix
|
||
|
DA L09D7 ; 0A GetPrefix
|
||
|
DA L095E ; 0B ClearBackupBit
|
||
|
DA L09D7 ; 0C SetSysPrefs
|
||
|
DA L09D7 ; 0D Null
|
||
|
DA L09D7 ; 0E ExpandPath
|
||
|
DA L09D7 ; 0F GetSysPrefs
|
||
|
DA OPEN ; 10 Open
|
||
|
DA L09D7 ; 11 NewLine
|
||
|
DA READ ; 12 Read
|
||
|
DA L09E2 ; 13 Write
|
||
|
DA CLOSE ; 14 Close
|
||
|
DA FLUSH ; 15 Flush
|
||
|
DA SETMARK ; 16 SetMark
|
||
|
DA GETMARK ; 17 GetMark
|
||
|
DA L09E2 ; 18 SetEOF
|
||
|
DA GETEOF ; 19 GetEOF
|
||
|
DA L09D7 ; 1A SetLevel
|
||
|
DA L09D7 ; 1B GetLevel
|
||
|
DA GETDIRENTRY ; 1C GetDirEntry
|
||
|
DA L09D7 ; 1D BeginSession
|
||
|
DA L09D7 ; 1E EndSession
|
||
|
DA L09D7 ; 1F SessionStatus
|
||
|
DA GETDEVNUMBER ; 20 GetDevNumber
|
||
|
DA L09D7 ; 21
|
||
|
DA L09D7 ; 22
|
||
|
DA L09D7 ; 23
|
||
|
DA L09E2 ; 24 Format
|
||
|
DA L09E2 ; 25 EraseDisk
|
||
|
DA L09D7 ; 26 ResetCache
|
||
|
DA L09D7 ; 27 GetName
|
||
|
DA L09D7 ; 28 GetBootVol
|
||
|
DA L09D7 ; 29 Quit
|
||
|
DA L09D7 ; 2A GetVersion
|
||
|
DA L09D7 ; 2B GetFSTInfo
|
||
|
DA L09D7 ; 2C DInfo
|
||
|
DA L09D7 ; 2D DStatus
|
||
|
DA L09D7 ; 2E DControl
|
||
|
DA L09D7 ; 2F DRead
|
||
|
DA L09D7 ; 30 DWrite
|
||
|
DA L09D7 ; 31 BindInt
|
||
|
DA L09D7 ; 32 UnbindInt
|
||
|
DA FSTSPECIFIC ; 33 FSTSpecific
|
||
|
DA L09D7 ; 34 AddNotifyProc
|
||
|
|
||
|
*
|
||
|
* PARAMETERS: MIN & MAX
|
||
|
*
|
||
|
|
||
|
L0A56 DW $0108 ; 01
|
||
|
DW $0102 ; 02
|
||
|
DW $0102 ; 03
|
||
|
DW $0204 ; 04
|
||
|
DW $020D ; 05
|
||
|
DW $010D ; 06
|
||
|
DW $0306 ; 07 JudgeName
|
||
|
DW $0207 ; 08
|
||
|
DW $0203 ; 09
|
||
|
DW $0203 ; 0A
|
||
|
DW $0102 ; 0B
|
||
|
DW $0102 ; 0C
|
||
|
DW $0001 ; 0D
|
||
|
DW $0204 ; 0E
|
||
|
DW $0102 ; 0F
|
||
|
DW $0210 ; 10
|
||
|
DW $0405 ; 11
|
||
|
DW $0406 ; 12
|
||
|
DW $0406 ; 13
|
||
|
DW $0102 ; 14
|
||
|
DW $0102 ; 15
|
||
|
DW $0304 ; 16
|
||
|
DW $0203 ; 17
|
||
|
DW $0304 ; 18
|
||
|
DW $0203 ; 19
|
||
|
DW $0102 ; 1A
|
||
|
DW $0102 ; 1B
|
||
|
DW $0512 ; 1C
|
||
|
DW $0001 ; 1D
|
||
|
DW $0001 ; 1E
|
||
|
DW $0102 ; 1F
|
||
|
DW $0203 ; 20
|
||
|
DW $0001 ; 21
|
||
|
DW $0001 ; 22
|
||
|
DW $0001 ; 23
|
||
|
DW $0106 ; 24 Format
|
||
|
DW $0106 ; 25 EraseDisk
|
||
|
DW $0001 ; 26
|
||
|
DW $0102 ; 27
|
||
|
DW $0102 ; 28
|
||
|
DW $0003 ; 29
|
||
|
DW $0102 ; 2A
|
||
|
DW $0209 ; 2B
|
||
|
DW $020C ; 2C
|
||
|
DW $0506 ; 2D
|
||
|
DW $0506 ; 2E
|
||
|
DW $0607 ; 2F
|
||
|
DW $0607 ; 30
|
||
|
DW $0001 ; 31
|
||
|
DW $0001 ; 32
|
||
|
DW $0112 ; 33
|
||
|
|
||
|
*
|
||
|
* GS/OS INTERNAL CALL
|
||
|
*
|
||
|
|
||
|
*L0ABC STAL $FF0510
|
||
|
L0ABC PHK
|
||
|
PLB
|
||
|
CPX #$000B
|
||
|
BCS L0ACA
|
||
|
JMP (L0B05,X)
|
||
|
|
||
|
* 0
|
||
|
L0ACA LDA #$0001
|
||
|
RTL
|
||
|
|
||
|
* 1
|
||
|
L0ACE JSL GET_SYS_GBUF
|
||
|
STX gsosBUFFER
|
||
|
STY gsosBUFFER+2
|
||
|
|
||
|
LDA #$0001
|
||
|
STA textMODE
|
||
|
BRA L0AE0
|
||
|
|
||
|
* 2 / 4
|
||
|
L0AE0 LDA #$0000
|
||
|
CLC
|
||
|
RTL
|
||
|
|
||
|
* 3
|
||
|
*L0AE5 STAL $FE0358
|
||
|
L0AE5 LDX virtualVCR
|
||
|
LDY virtualVCR+2
|
||
|
STX ptrVCR
|
||
|
STY ptrVCR+2
|
||
|
LDY #iVCR_SEGMENT
|
||
|
LDA [virtualVCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
ORA [virtualVCR],Y
|
||
|
BEQ L0B04
|
||
|
LDA [virtualVCR],Y
|
||
|
TAY
|
||
|
JSL RELEASE_SEG
|
||
|
L0B04 RTL
|
||
|
|
||
|
L0B05 DA L0ACA ; 0 NOT CALLED
|
||
|
DA L0ACE ; 1 HELLO
|
||
|
DA L0AE0 ; 2 BYE
|
||
|
DA L0AE5 ; 3 SET VCR
|
||
|
DA L0AE0 ; 4 NOT CALLED
|
||
|
|
||
|
*
|
||
|
* GET VCR
|
||
|
*
|
||
|
|
||
|
getVCR LDX ptrVOLNAME
|
||
|
LDY ptrVOLNAME+2
|
||
|
LDA #$0000
|
||
|
JSL FIND_VCR
|
||
|
BCC L0B21
|
||
|
L0B1C LDA #$0000
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
L0B21 JSL DEREF
|
||
|
STX ptrVCR
|
||
|
STY ptrVCR+2
|
||
|
LDY #iFCR_FST
|
||
|
LDA [ptrVCR],Y
|
||
|
CMP #FST_DOS32
|
||
|
BEQ L0B3D
|
||
|
JSR releaseVCR
|
||
|
BCC L0B1C
|
||
|
L0B38 LDA #$0057
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L0B3D LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
INC
|
||
|
STA [ptrVCR],Y
|
||
|
LDA lastDevice
|
||
|
BNE L0B63
|
||
|
LDY #iVCR_DEVICEID
|
||
|
LDA [ptrVCR],Y
|
||
|
STA tmpDEVICE
|
||
|
JSR checkVOLUME
|
||
|
BCC L0B63
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
DEC
|
||
|
STA [ptrVCR],Y
|
||
|
LDA #$0045
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L0B63 LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
DEC
|
||
|
STA [ptrVCR],Y
|
||
|
JSR compareVTOC
|
||
|
BCS L0B77
|
||
|
LDY #iVCR_ID
|
||
|
LDA [ptrVCR],Y
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
L0B77 JSR releaseVCR
|
||
|
BCS L0B38
|
||
|
BRA L0B1C
|
||
|
|
||
|
*
|
||
|
* UPDATE VCR
|
||
|
*
|
||
|
|
||
|
updateVCR STZ tmpDEVICE
|
||
|
STZ L00E2
|
||
|
STZ haSEGMENT
|
||
|
STZ haSEGMENT+2
|
||
|
LDA #$1000
|
||
|
JSL ALLOC_SEG
|
||
|
BCC L0B97
|
||
|
LDA #$0054
|
||
|
RTS
|
||
|
L0B97 STX haSEGMENT
|
||
|
STY haSEGMENT+2
|
||
|
JSL DEREF
|
||
|
STX ptrSEGMENT
|
||
|
STY ptrSEGMENT+2
|
||
|
LDA #L0146
|
||
|
STA ptrVOLNAME
|
||
|
LDA #^L0146
|
||
|
STA ptrVOLNAME+2
|
||
|
LDA #L0178
|
||
|
STA shtFILENAME
|
||
|
LDA #^L0178
|
||
|
STA gsosOUTPUT
|
||
|
LDA #L01AA
|
||
|
STA ptrL01AA
|
||
|
LDA #^L01AA
|
||
|
STA ptrL01AA+2
|
||
|
JSR L11CC
|
||
|
BCC L0BCC
|
||
|
LDA #$0040
|
||
|
RTS
|
||
|
|
||
|
L0BCC LDA lastDevice
|
||
|
BEQ L0BED
|
||
|
STA deviceNum
|
||
|
JSR getDEVICEID
|
||
|
BCS L0BDE
|
||
|
BNE L0BDE
|
||
|
JSR getVOLUMENAME
|
||
|
BCC L0BE3
|
||
|
L0BDE SEC
|
||
|
LDA #$0052
|
||
|
RTS
|
||
|
|
||
|
L0BE3 LDA #L01AA
|
||
|
STA ptrVOLNAME
|
||
|
LDA #^L01AA
|
||
|
STA ptrVOLNAME+2
|
||
|
|
||
|
L0BED LDX ptrVOLNAME
|
||
|
LDY ptrVOLNAME+2
|
||
|
LDA #$0000
|
||
|
JSL FIND_VCR
|
||
|
BCS L0C55
|
||
|
JSL DEREF
|
||
|
STX ptrVCR
|
||
|
STY ptrVCR+2
|
||
|
LDY #iVCR_FST
|
||
|
LDA [ptrVCR],Y
|
||
|
CMP #FST_DOS32
|
||
|
BEQ L0C27
|
||
|
L0C0C LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
BEQ L0C55
|
||
|
STZ tmpDEVICE
|
||
|
JSR checkVOLUME
|
||
|
LDA #$0045
|
||
|
BCC L0C21
|
||
|
BRL L0CAF
|
||
|
L0C21 LDA #$0057
|
||
|
BRL L0CAF
|
||
|
|
||
|
L0C27 LDY #iVCR_SEGMENT
|
||
|
LDA [ptrVCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrVCR],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX ptrVTOC
|
||
|
STY ptrVTOC+2
|
||
|
JSR compareVTOC
|
||
|
BCS L0C53
|
||
|
LDY #iVCR_FLAGS
|
||
|
LDA [ptrVCR],Y
|
||
|
AND #$4000
|
||
|
BEQ L0CA7
|
||
|
LDY #iVCR_DEVICEID
|
||
|
LDA [ptrVCR],Y
|
||
|
STA tmpDEVICE
|
||
|
BRA L0C5C
|
||
|
L0C53 BRA L0C0C
|
||
|
L0C55 STZ ptrVCR
|
||
|
STZ ptrVCR+2
|
||
|
STZ tmpDEVICE
|
||
|
|
||
|
L0C5C STZ L0CB0
|
||
|
LDA ptrVCR
|
||
|
ORA ptrVCR+2
|
||
|
BEQ L0C70
|
||
|
INC L0CB0
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
INC
|
||
|
STA [ptrVCR],Y
|
||
|
|
||
|
L0C70 JSR checkVOLUME
|
||
|
PHP
|
||
|
PHA
|
||
|
LDA L0CB0
|
||
|
BEQ L0C85
|
||
|
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
DEC
|
||
|
STA [ptrVCR],Y
|
||
|
STZ L0CB0
|
||
|
|
||
|
L0C85 PLA
|
||
|
PLP
|
||
|
BCS L0CAF
|
||
|
LDA ptrVCR
|
||
|
ORA ptrVCR+2
|
||
|
BEQ L0CA2
|
||
|
LDY #iVCR_DEVICEID
|
||
|
LDA deviceNum
|
||
|
STA [ptrVCR],Y
|
||
|
LDY #iVCR_FLAGS
|
||
|
LDA [ptrVCR],Y
|
||
|
AND #$BFFF
|
||
|
STA [ptrVCR],Y
|
||
|
BRA L0CA7
|
||
|
L0CA2 JSR createVCR
|
||
|
BCS L0CAF
|
||
|
L0CA7 LDY #iVCR_DEVICEID
|
||
|
LDA [ptrVCR],Y
|
||
|
STA deviceNum
|
||
|
CLC
|
||
|
L0CAF RTS
|
||
|
|
||
|
L0CB0 DW $0000
|
||
|
|
||
|
*
|
||
|
* setPARAMETERS
|
||
|
* Return Parameters on the
|
||
|
* GS/OS class0/1 call buffer
|
||
|
*
|
||
|
|
||
|
setPARAMETERS LDY #$FFFE
|
||
|
LDX fgNBPARAMS
|
||
|
L0CB8 INY
|
||
|
INY
|
||
|
LDA (shtPARAMETERS),Y
|
||
|
ASL
|
||
|
PHP
|
||
|
BMI L0CC9
|
||
|
LSR
|
||
|
PHY
|
||
|
TAY
|
||
|
LDA intENTRYNB,Y
|
||
|
PLY
|
||
|
STA [ptrParamBlock],Y
|
||
|
L0CC9 PLP
|
||
|
BCC L0CB8
|
||
|
DEX
|
||
|
BNE L0CB8
|
||
|
RTS
|
||
|
|
||
|
L0CD0 DW $4000
|
||
|
DW $4000
|
||
|
DW $0006
|
||
|
DW $0004
|
||
|
DW $0008
|
||
|
DW $0016
|
||
|
DW $0012
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $000E
|
||
|
DW $8016
|
||
|
L0CEA DW $4000
|
||
|
DW $4000
|
||
|
DW $C000
|
||
|
DW $8006
|
||
|
DW $8004
|
||
|
DW $0008
|
||
|
DW $8016
|
||
|
DW $8012
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $8016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $8016
|
||
|
DW $4000
|
||
|
DW $C000
|
||
|
DW $000A
|
||
|
DW $800C
|
||
|
DW $000E
|
||
|
DW $8016
|
||
|
DW $0016
|
||
|
DW $8016
|
||
|
DW $0016
|
||
|
DW $8016
|
||
|
L0D1E DW $4000
|
||
|
DW $4000
|
||
|
DW $4000
|
||
|
DW $4000
|
||
|
DW $4000
|
||
|
DW $4000
|
||
|
DW $0010
|
||
|
DW $0004
|
||
|
DW $000A
|
||
|
DW $000C
|
||
|
DW $000E
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0006
|
||
|
DW $0008
|
||
|
DW $0016
|
||
|
DW $8014
|
||
|
L0D4E DW $4000
|
||
|
DW $C000
|
||
|
DW $C000
|
||
|
DW $C000
|
||
|
DW $C000
|
||
|
DW $4000
|
||
|
DW $C000
|
||
|
DW $8010
|
||
|
DW $8004
|
||
|
DW $000A
|
||
|
DW $800C
|
||
|
DW $000E
|
||
|
DW $8016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $8016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $0016
|
||
|
DW $8016
|
||
|
DW $8006
|
||
|
DW $0008
|
||
|
DW $8016
|
||
|
DW $8014
|
||
|
DW $4000
|
||
|
DW $C000
|
||
|
DW $0016
|
||
|
DW $8016
|
||
|
DW $0016
|
||
|
DW $8016
|
||
|
|
||
|
*
|
||
|
* TRACK/SECTOR TO BLOCK
|
||
|
*
|
||
|
|
||
|
* A = SSTT
|
||
|
|
||
|
TS2BLOCK pha
|
||
|
|
||
|
xba ; get sector
|
||
|
and #$00ff
|
||
|
sta mySECTOR
|
||
|
|
||
|
pla ; get track
|
||
|
and #$00ff
|
||
|
tay ; use it as an index
|
||
|
|
||
|
lda #0 ; start with block 0
|
||
|
]lp cpy #0 ; right track
|
||
|
beq TS2BLOCK2
|
||
|
dey ; track--
|
||
|
clc
|
||
|
adc #$000d ; blocks += $0D
|
||
|
bra ]lp
|
||
|
|
||
|
TS2BLOCK2 clc ; add sector
|
||
|
adc mySECTOR
|
||
|
sta blockNum
|
||
|
STZ blockNum+2
|
||
|
|
||
|
LDA #FST_BLOCKSIZE
|
||
|
STA blockSize
|
||
|
STA requestCount
|
||
|
STZ requestCount+2
|
||
|
LDA #FST_DOS32
|
||
|
STA FSTNum
|
||
|
STZ cachePriority ; cachePointer
|
||
|
L0DAD JSL DEV_DISPATCHER
|
||
|
BCS L0DB4
|
||
|
RTS
|
||
|
L0DB4 CMP #$002E
|
||
|
BEQ L0DAD
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
mySECTOR ds 2
|
||
|
|
||
|
*
|
||
|
* getFILEOFFSET
|
||
|
* Return the address of
|
||
|
* the file entry in the VTOC
|
||
|
*
|
||
|
|
||
|
getFILEOFFSET CMP #$0010
|
||
|
BCS L0DE0
|
||
|
XBA
|
||
|
ADC #FST_BLOCKSIZE
|
||
|
ADC #$000B ; file info begins at offset $B
|
||
|
CPX #$0008 ; no more than 8 entries in a sector
|
||
|
BCS L0DE0
|
||
|
L0DCC DEX
|
||
|
BMI L0DD4
|
||
|
ADC #$0023 ; next entry
|
||
|
BRA L0DCC
|
||
|
|
||
|
L0DD4 ADC ptrVTOC ; entry found...
|
||
|
STA ptrFILENAME
|
||
|
LDA ptrVTOC+2
|
||
|
ADC #$0000
|
||
|
STA ptrFILENAME+2
|
||
|
RTS
|
||
|
L0DE0 RTS
|
||
|
|
||
|
*
|
||
|
* isDELETEDFILE
|
||
|
*
|
||
|
|
||
|
isDELETEDFILE LDA [ptrFILENAME]
|
||
|
AND #$00FF
|
||
|
BEQ L0E0A ; Points to T0
|
||
|
CMP #$00FF ; File is deleted
|
||
|
BEQ L0E0A
|
||
|
PHY
|
||
|
PHX
|
||
|
LDX #$000F
|
||
|
LDY #$0003
|
||
|
L0DF5 LDA [ptrFILENAME],Y
|
||
|
CMP #$A0A0 ; Empty file name ?
|
||
|
BNE L0E06
|
||
|
INY
|
||
|
INY
|
||
|
DEX
|
||
|
BNE L0DF5
|
||
|
LDA #$00FF
|
||
|
BRA L0E08
|
||
|
L0E06 LDA [ptrFILENAME] ; Get TS
|
||
|
L0E08 PLX
|
||
|
PLY
|
||
|
L0E0A AND #$00FF ; only track?
|
||
|
RTS
|
||
|
|
||
|
*
|
||
|
* compareVOLUME
|
||
|
*
|
||
|
|
||
|
compareVOLUME LDA [ptrVOLNAME2]
|
||
|
CMP [ptrVOLNAME3]
|
||
|
BNE L0E2C
|
||
|
TAY
|
||
|
BPL L0E1A
|
||
|
LDY #$7FFF
|
||
|
L0E1A INY
|
||
|
SEP #$20
|
||
|
L0E1D LDA [ptrVOLNAME3],Y
|
||
|
AND tmpMASK
|
||
|
CMP [ptrVOLNAME2],Y
|
||
|
BNE L0E2C
|
||
|
DEY
|
||
|
BPL L0E1D
|
||
|
REP #$21
|
||
|
RTS
|
||
|
L0E2C SEC
|
||
|
REP #$20
|
||
|
RTS
|
||
|
|
||
|
*
|
||
|
* CREATE VCR
|
||
|
*
|
||
|
|
||
|
createVCR JSR getVCR
|
||
|
BCC L0E39
|
||
|
LDA #$0057
|
||
|
RTS
|
||
|
L0E39 BEQ L0E3E
|
||
|
BRL L0EF6
|
||
|
L0E3E JSR checkVOLUME
|
||
|
BCC L0E47
|
||
|
LDA #$0045
|
||
|
RTS
|
||
|
L0E47 LDA #$0014
|
||
|
LDX ptrVOLNAME
|
||
|
LDY ptrVOLNAME+2
|
||
|
JSL ALLOC_VCR
|
||
|
BCC L0E58
|
||
|
LDA #$0054
|
||
|
RTS
|
||
|
L0E58 JSL DEREF
|
||
|
STX ptrVCR
|
||
|
STY ptrVCR+2
|
||
|
LDA #$8000
|
||
|
TSB errVOLUME
|
||
|
LDA haSEGMENT
|
||
|
ORA haSEGMENT+2
|
||
|
BNE L0E82
|
||
|
LDA #$1000
|
||
|
JSL ALLOC_SEG
|
||
|
BCC L0E7C
|
||
|
LDA #$0054
|
||
|
BRA L0ED1
|
||
|
|
||
|
L0E7C STX haSEGMENT
|
||
|
STY haSEGMENT+2
|
||
|
L0E82 LDY #iVCR_FST
|
||
|
LDA #FST_DOS32
|
||
|
STA [ptrVCR],Y
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA #$0000
|
||
|
STA [ptrVCR],Y
|
||
|
LDY #iVCR_DEVICEID
|
||
|
LDA deviceNum
|
||
|
STA [ptrVCR],Y
|
||
|
LDY #iVCR_SEGMENT
|
||
|
LDA haSEGMENT
|
||
|
TAX
|
||
|
STA [ptrVCR],Y
|
||
|
INY
|
||
|
INY
|
||
|
LDA haSEGMENT+2
|
||
|
STA [ptrVCR],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX ptrVTOC
|
||
|
STY ptrVTOC+2
|
||
|
STZ haSEGMENT
|
||
|
STZ haSEGMENT+2
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
INC
|
||
|
STA [ptrVCR],Y
|
||
|
JSR readVTOC
|
||
|
PHP
|
||
|
PHA
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
DEC
|
||
|
STA [ptrVCR],Y
|
||
|
PLA
|
||
|
PLP
|
||
|
BCC L0EEC
|
||
|
L0ED1 PHA
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA #$0000
|
||
|
STA [ptrVCR],Y
|
||
|
LDY #iVCR_ID
|
||
|
LDA [ptrVCR],Y
|
||
|
JSL RELEASE_VCR
|
||
|
LDA #$8000
|
||
|
TRB errVOLUME
|
||
|
PLA
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L0EEC LDA tmpLENGTH
|
||
|
LDY #iVCR_LENGTH
|
||
|
STA [ptrVCR],Y
|
||
|
BRA L0F10
|
||
|
|
||
|
L0EF6 LDY #iVCR_SEGMENT
|
||
|
LDA [ptrVCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrVCR],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX ptrVTOC
|
||
|
STY ptrVTOC+2
|
||
|
LDY #iVCR_DEVICEID
|
||
|
LDA deviceNum
|
||
|
STA [ptrVCR],Y
|
||
|
L0F10 CLC
|
||
|
RTS
|
||
|
|
||
|
*
|
||
|
* getVOLUMENAME
|
||
|
*
|
||
|
|
||
|
getVOLUMENAME LDA ptrSEGMENT
|
||
|
STA bufferPtr
|
||
|
LDA ptrSEGMENT+2
|
||
|
STA bufferPtr+2
|
||
|
|
||
|
LDA #$0002
|
||
|
STA callNum
|
||
|
LDA #$0011
|
||
|
JSR TS2BLOCK ; Read T11/S0
|
||
|
BCC L0F28
|
||
|
RTS
|
||
|
|
||
|
L0F4B SEC
|
||
|
REP #$30
|
||
|
LDA #$0052
|
||
|
RTS
|
||
|
|
||
|
L0F28 SEP #$30
|
||
|
LDX #$06
|
||
|
]lp LDA L1041,X
|
||
|
TAY
|
||
|
L0F30 LDA [bufferPtr],Y
|
||
|
CMP L104B,X
|
||
|
BNE L0F4B
|
||
|
L0F37 DEX
|
||
|
bpl ]lp
|
||
|
|
||
|
REP #$31
|
||
|
LDY #$0001 ; Get TS of 1st directory
|
||
|
LDA [bufferPtr],Y
|
||
|
BNE L0F5F
|
||
|
LDA #$0051
|
||
|
RTS
|
||
|
|
||
|
L0F5F PHA ; load T11/SC
|
||
|
LDA bufferPtr
|
||
|
STA ptrSEGMENT
|
||
|
CLC
|
||
|
ADC #FST_BLOCKSIZE
|
||
|
STA bufferPtr
|
||
|
LDA bufferPtr+2
|
||
|
STA ptrSEGMENT+2
|
||
|
ADC #$0000
|
||
|
STA bufferPtr+2
|
||
|
LDA #$0002
|
||
|
STA callNum
|
||
|
PLA
|
||
|
JSR TS2BLOCK
|
||
|
BCC L0F7F
|
||
|
RTS
|
||
|
|
||
|
* Handle T11/SC
|
||
|
|
||
|
L0F7F LDY #$01FE ; clear high-bit
|
||
|
LDA #$0000
|
||
|
CLC
|
||
|
L0F86 EOR [ptrSEGMENT],Y
|
||
|
ROR
|
||
|
BPL L0F8E
|
||
|
EOR #$7FFF
|
||
|
L0F8E DEY
|
||
|
DEY
|
||
|
BPL L0F86
|
||
|
STA L1055 ; -> the magic number!
|
||
|
|
||
|
LDX #$0000 ; Copy volume name
|
||
|
LDA L1035,X
|
||
|
STA shtVOLNAME
|
||
|
SEP #$20
|
||
|
LDY #$0002
|
||
|
L0FA2 LDA (shtVOLNAME),Y
|
||
|
BEQ L0FAE
|
||
|
STA (ptrL01AA),Y
|
||
|
INY
|
||
|
CPY #$000F
|
||
|
BNE L0FA2
|
||
|
|
||
|
* MANAGE VOLUME VERSION
|
||
|
|
||
|
L0FAE REP #$20
|
||
|
STZ L1059
|
||
|
STZ L105B
|
||
|
LDA L1055
|
||
|
AND #$07FF
|
||
|
STA L1057
|
||
|
L0FBF SEC
|
||
|
SBC #$03E8 ; 1000
|
||
|
BCC L0FD6
|
||
|
STA L1057
|
||
|
LDA L1059
|
||
|
ADC #$0000
|
||
|
STA L1059
|
||
|
LDA L1057
|
||
|
BRA L0FBF
|
||
|
L0FD6 LDA L1057
|
||
|
SEC
|
||
|
SBC #$0064 ; 100
|
||
|
BCC L0FED
|
||
|
STA L1057
|
||
|
LDA L1059
|
||
|
ADC #$00FF
|
||
|
STA L1059
|
||
|
BRA L0FD6
|
||
|
L0FED LDA L1057
|
||
|
SEC
|
||
|
SBC #$000A ; 10
|
||
|
BCC L1004
|
||
|
STA L1057
|
||
|
LDA L105B
|
||
|
ADC #$0000
|
||
|
STA L105B
|
||
|
BRA L0FED
|
||
|
L1004 LDA L1057
|
||
|
XBA
|
||
|
ADC L105B
|
||
|
STA L105B
|
||
|
LDA L1059
|
||
|
ADC #$3030
|
||
|
STA (ptrL01AA),Y
|
||
|
INY
|
||
|
INY
|
||
|
LDA L105B
|
||
|
ADC #$3030
|
||
|
STA (ptrL01AA),Y
|
||
|
INY
|
||
|
INY
|
||
|
LDA #$0000
|
||
|
STA (ptrL01AA),Y
|
||
|
DEY
|
||
|
DEY
|
||
|
TYA
|
||
|
STA (ptrL01AA)
|
||
|
|
||
|
REP #$31
|
||
|
LDA #$8000
|
||
|
STA errMAIN
|
||
|
RTS ; Now we have a beautiful version!
|
||
|
|
||
|
L1035 DA L1035
|
||
|
ASC 'DOS 3.2 v'00
|
||
|
|
||
|
L1041 HEX 03273637313435
|
||
|
L104B HEX 027A000101230D
|
||
|
|
||
|
L1055 DW $0000
|
||
|
L1057 DW $0000
|
||
|
L1059 DW $0000
|
||
|
L105B DW $0000
|
||
|
|
||
|
*
|
||
|
* RELEASE VCR
|
||
|
*
|
||
|
|
||
|
releaseVCR LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
BEQ L1066
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L1066 LDY #iVCR_ID
|
||
|
LDA [ptrVCR],Y
|
||
|
JSL RELEASE_VCR
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
*
|
||
|
* COMPARE VTOC
|
||
|
*
|
||
|
|
||
|
compareVTOC LDY #iVCR_SEGMENT
|
||
|
LDA [ptrVCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrVCR],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX ptrVTOC2
|
||
|
STY ptrVTOC2+2
|
||
|
LDY #$01FE
|
||
|
L1087 LDA [ptrVTOC],Y
|
||
|
CMP [ptrVTOC2],Y
|
||
|
BNE L1093
|
||
|
DEY
|
||
|
DEY
|
||
|
BPL L1087
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
L1093 SEC
|
||
|
RTS
|
||
|
|
||
|
*
|
||
|
* GET DEVICE ID
|
||
|
*
|
||
|
|
||
|
getDEVICEID LDA deviceNum
|
||
|
PHA
|
||
|
STA bufferPtr
|
||
|
STZ deviceNum
|
||
|
LDA #$0001
|
||
|
STA callNum
|
||
|
JSL DEV_DISPATCHER
|
||
|
PLY
|
||
|
STY deviceNum
|
||
|
BCS L10AF
|
||
|
LDY #$0034
|
||
|
LDA [dibPointer],Y ; deviceID
|
||
|
L10AF RTS
|
||
|
|
||
|
*
|
||
|
* CHECK VOLUME
|
||
|
*
|
||
|
|
||
|
checkVOLUME LDX tmpDEVICE
|
||
|
BNE L10E7
|
||
|
L10B5 INX
|
||
|
STX deviceNum
|
||
|
JSR getVOLUMENAME
|
||
|
BCC L10C6
|
||
|
CMP #$0011
|
||
|
BEQ L1138
|
||
|
L10C2 LDX deviceNum
|
||
|
BRA L10B5
|
||
|
L10C6 LDA ptrVOLNAME
|
||
|
STA ptrVOLNAME2
|
||
|
LDA ptrVOLNAME+2
|
||
|
STA ptrVOLNAME2+2
|
||
|
LDA ptrL01AA
|
||
|
STA ptrVOLNAME3
|
||
|
LDA #^L01AA
|
||
|
STA ptrVOLNAME3+2
|
||
|
LDA #$00FF
|
||
|
STA tmpMASK
|
||
|
JSR compareVOLUME
|
||
|
BCC L1136
|
||
|
STZ errMAIN
|
||
|
BRA L10C2
|
||
|
L10E7 STX deviceNum
|
||
|
JSR getDEVICEID
|
||
|
BCC L10EF
|
||
|
RTS
|
||
|
|
||
|
L10EF STA theDEVICE
|
||
|
L10F2 JSR getVOLUMENAME
|
||
|
BCC L111A
|
||
|
CMP #$0011
|
||
|
BNE L10FE
|
||
|
L10FC STZ deviceNum
|
||
|
L10FE LDX deviceNum
|
||
|
INX
|
||
|
CPX tmpDEVICE
|
||
|
BEQ L1138
|
||
|
STX deviceNum
|
||
|
JSR getDEVICEID
|
||
|
BCC L1113
|
||
|
CMP #$0011
|
||
|
BEQ L10FC
|
||
|
RTS
|
||
|
|
||
|
L1113 CMP theDEVICE
|
||
|
BEQ L10F2
|
||
|
BRA L10FE
|
||
|
L111A LDA ptrVOLNAME
|
||
|
STA ptrVOLNAME2
|
||
|
LDA ptrVOLNAME+2
|
||
|
STA ptrVOLNAME2+2
|
||
|
LDA ptrL01AA
|
||
|
STA ptrVOLNAME3
|
||
|
LDA #^L01AA
|
||
|
STA ptrVOLNAME3+2
|
||
|
LDA #$00FF
|
||
|
STA tmpMASK
|
||
|
JSR compareVOLUME
|
||
|
BCS L10FE
|
||
|
L1136 CLC
|
||
|
RTS
|
||
|
|
||
|
L1138 LDA #$0045
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
theDEVICE DW $0000
|
||
|
|
||
|
*
|
||
|
* CHECK FCR
|
||
|
*
|
||
|
|
||
|
checkFCR STZ L00E6
|
||
|
STZ L00E8
|
||
|
L1145 INC L00E8
|
||
|
LDA L00E8
|
||
|
JSL GET_FCR
|
||
|
BCS L11CB
|
||
|
JSL DEREF
|
||
|
STX ptrFCR2
|
||
|
STY ptrFCR2+2
|
||
|
LDY #iFCR_FST
|
||
|
LDA [ptrFCR2],Y
|
||
|
CMP #FST_DOS32
|
||
|
BNE L1145
|
||
|
|
||
|
LDY #iFCR_VCR
|
||
|
LDA [ptrFCR2],Y
|
||
|
LDY #iVCR_ID
|
||
|
CMP [ptrVCR],Y
|
||
|
BNE L1145
|
||
|
|
||
|
LDY #iFCR_TYPE
|
||
|
LDA [ptrFCR2],Y
|
||
|
CMP #rootDIR
|
||
|
BEQ L1145
|
||
|
|
||
|
LDY #iFCR_NAME
|
||
|
LDA [ptrFCR2],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR2],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX ptrVTOC2
|
||
|
STY ptrVTOC2+2
|
||
|
SEP #$20
|
||
|
LDY #$0003
|
||
|
L1191 INY
|
||
|
LDA [ptrVTOC2],Y
|
||
|
CMP #$3A
|
||
|
BNE L1191
|
||
|
LDX #$0001
|
||
|
L119B INY
|
||
|
INX
|
||
|
LDA [ptrVTOC2],Y
|
||
|
STA L01DC,X
|
||
|
BNE L119B
|
||
|
REP #$30
|
||
|
TXA
|
||
|
DEC
|
||
|
DEC
|
||
|
STA L01DC
|
||
|
LDX #L01DC
|
||
|
LDY #^L01DC
|
||
|
STX ptrVOLNAME3
|
||
|
STY ptrVOLNAME3+2
|
||
|
LDA shtFILENAME
|
||
|
STA ptrVOLNAME2
|
||
|
LDA #^L0178
|
||
|
STA ptrVOLNAME2+2
|
||
|
JSR compareVOLUME
|
||
|
BCS L1145
|
||
|
LDA L00E8
|
||
|
STA L00E6
|
||
|
CLC
|
||
|
L11CB RTS
|
||
|
|
||
|
L11CC LDA $42
|
||
|
AND #$4000
|
||
|
BNE L11E5
|
||
|
|
||
|
L11D3 REP #$30
|
||
|
LDA #$0000
|
||
|
LDY #$0001
|
||
|
STA [ptrVOLNAME],Y
|
||
|
STA (shtFILENAME),Y
|
||
|
STA [ptrVOLNAME]
|
||
|
STA (shtFILENAME)
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
L11E5 SEP #$20
|
||
|
LDY #$0002
|
||
|
LDA [virtualFCR],Y
|
||
|
BEQ L11D3
|
||
|
CMP #$3A ; :
|
||
|
BNE L1236
|
||
|
L11F2 INY
|
||
|
LDA [virtualFCR],Y
|
||
|
BEQ L1204
|
||
|
CMP #$3A ; :
|
||
|
BEQ L1204
|
||
|
DEY
|
||
|
STA [ptrVOLNAME],Y
|
||
|
INY
|
||
|
CPY #$0017
|
||
|
BCC L11F2
|
||
|
L1204 DEY
|
||
|
LDA #$00
|
||
|
STA [ptrVOLNAME],Y
|
||
|
REP #$21
|
||
|
TYA
|
||
|
SBC #$0001
|
||
|
STA [ptrVOLNAME]
|
||
|
INY
|
||
|
LDA [virtualFCR],Y
|
||
|
AND #$00FF
|
||
|
BNE L1237
|
||
|
LDA #$0000
|
||
|
LDY #$0001
|
||
|
STA (shtFILENAME),Y
|
||
|
STA (shtFILENAME)
|
||
|
|
||
|
L1223 LDA $42
|
||
|
AND #$0040
|
||
|
BNE L122E
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
L122C SEC
|
||
|
RTS
|
||
|
|
||
|
L122E LDA $46
|
||
|
BEQ L122C
|
||
|
CMP #$001F
|
||
|
RTS
|
||
|
|
||
|
L1236 DEY
|
||
|
L1237 LDX #$0002
|
||
|
STX L1272
|
||
|
SEP #$20
|
||
|
L123F INY
|
||
|
LDA [virtualFCR],Y
|
||
|
BEQ L1260
|
||
|
CMP #$3A
|
||
|
BEQ L126E
|
||
|
TYX
|
||
|
LDY L1272
|
||
|
CMP #$2C
|
||
|
BNE L1252
|
||
|
LDA #$3A
|
||
|
L1252 STA (shtFILENAME),Y
|
||
|
INY
|
||
|
CPY #$0022
|
||
|
BCS L126E
|
||
|
STY L1272
|
||
|
TXY
|
||
|
BRA L123F
|
||
|
L1260 LDY L1272
|
||
|
STA (shtFILENAME),Y
|
||
|
REP #$20
|
||
|
TYA
|
||
|
DEC
|
||
|
DEC
|
||
|
STA (shtFILENAME)
|
||
|
BRA L1223
|
||
|
L126E REP #$20
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L1272 DW $0000
|
||
|
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
|
||
|
L1274 LDX ptrGSOSBUFFER
|
||
|
STX bufferPtr
|
||
|
LDX ptrGSOSBUFFER+2
|
||
|
STX bufferPtr+2
|
||
|
STZ L1459
|
||
|
STZ L145B
|
||
|
STZ L1455
|
||
|
STZ L1457
|
||
|
PHA
|
||
|
PHY
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
INC
|
||
|
STA [ptrVCR],Y
|
||
|
PLY
|
||
|
PLA
|
||
|
JSR TS2BLOCK
|
||
|
PHP
|
||
|
PHA
|
||
|
PHY
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
DEC
|
||
|
STA [ptrVCR],Y
|
||
|
PLY
|
||
|
PLA
|
||
|
PLP
|
||
|
BCC L12A8
|
||
|
RTS
|
||
|
|
||
|
L12A8 LDA intOFILETYPE
|
||
|
BEQ L1311
|
||
|
AND #$0017
|
||
|
BEQ L12B5
|
||
|
BRL L13DF
|
||
|
L12B5 LDY #$000C
|
||
|
INC L145B
|
||
|
L12BB LDA [bufferPtr],Y
|
||
|
BEQ L12F5
|
||
|
INC L1459
|
||
|
INY
|
||
|
INY
|
||
|
CPY #FST_BLOCKSIZE
|
||
|
BNE L12BB
|
||
|
LDA #$0002
|
||
|
STA callNum
|
||
|
LDY #$0001
|
||
|
LDA [ptrGSOSBUFFER],Y
|
||
|
BEQ L12F5
|
||
|
PHA
|
||
|
PHY
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
INC
|
||
|
STA [ptrVCR],Y
|
||
|
PLY
|
||
|
PLA
|
||
|
JSR TS2BLOCK
|
||
|
PHP
|
||
|
PHA
|
||
|
PHY
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
DEC
|
||
|
STA [ptrVCR],Y
|
||
|
PLY
|
||
|
PLA
|
||
|
PLP
|
||
|
BCC L12B5
|
||
|
RTS
|
||
|
|
||
|
L12F5 LDA L1459
|
||
|
XBA
|
||
|
TAX
|
||
|
AND #$FF00
|
||
|
STA L1455
|
||
|
TXA
|
||
|
AND #$00FF
|
||
|
STA L1457
|
||
|
LDA L1459
|
||
|
CLC
|
||
|
ADC L145B
|
||
|
BRL L144D
|
||
|
|
||
|
L1311 LDX #$000C ; TEXT FILE
|
||
|
LDY #$000C
|
||
|
INC L145B
|
||
|
L131A LDA [bufferPtr],Y
|
||
|
BEQ L1322
|
||
|
TYX
|
||
|
INC L1459
|
||
|
L1322 INY
|
||
|
INY
|
||
|
CPY #FST_BLOCKSIZE
|
||
|
BNE L131A
|
||
|
LDA #$0002
|
||
|
STA callNum
|
||
|
LDY #$0001
|
||
|
LDA [ptrGSOSBUFFER],Y
|
||
|
BEQ L1355
|
||
|
PHA
|
||
|
PHY
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
INC
|
||
|
STA [ptrVCR],Y
|
||
|
PLY
|
||
|
PLA
|
||
|
JSR TS2BLOCK
|
||
|
PHP
|
||
|
PHA
|
||
|
PHY
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
DEC
|
||
|
STA [ptrVCR],Y
|
||
|
PLY
|
||
|
PLA
|
||
|
PLP
|
||
|
BCC L1311
|
||
|
RTS
|
||
|
|
||
|
L1355 TXA
|
||
|
SEC
|
||
|
SBC #$000C
|
||
|
LSR
|
||
|
XBA
|
||
|
STA L1455
|
||
|
LDA bufferPtr
|
||
|
ADC #FST_BLOCKSIZE
|
||
|
STA bufferPtr
|
||
|
BCC L136A
|
||
|
INC bufferPtr+2
|
||
|
L136A LDA #$0002
|
||
|
STA callNum
|
||
|
TXY
|
||
|
LDA [ptrGSOSBUFFER],Y
|
||
|
STA L012E
|
||
|
BNE L137C
|
||
|
LDY #$FFFF
|
||
|
BRA L13A8
|
||
|
L137C PHA
|
||
|
PHY
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
INC
|
||
|
STA [ptrVCR],Y
|
||
|
PLY
|
||
|
PLA
|
||
|
JSR TS2BLOCK
|
||
|
PHP
|
||
|
PHA
|
||
|
PHY
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
DEC
|
||
|
STA [ptrVCR],Y
|
||
|
PLY
|
||
|
PLA
|
||
|
PLP
|
||
|
BCC L139C
|
||
|
RTS
|
||
|
|
||
|
L139C LDY #$00FF
|
||
|
SEP #$20
|
||
|
L13A1 LDA [bufferPtr],Y
|
||
|
BNE L13A8
|
||
|
DEY
|
||
|
BPL L13A1
|
||
|
L13A8 REP #$21
|
||
|
INY
|
||
|
TYX
|
||
|
LDY #$0005
|
||
|
LDA [ptrGSOSBUFFER],Y
|
||
|
XBA
|
||
|
TAY
|
||
|
AND #$FF00
|
||
|
ADC L1455
|
||
|
STA L1455
|
||
|
TYA
|
||
|
AND #$00FF
|
||
|
ADC L1457
|
||
|
STA L1457
|
||
|
TXA
|
||
|
ADC L1455
|
||
|
STA L1455
|
||
|
LDA L1457
|
||
|
ADC #$0000
|
||
|
STA L1457
|
||
|
LDA L1459
|
||
|
CLC
|
||
|
ADC L145B
|
||
|
BRA L144D
|
||
|
L13DF LDA bufferPtr
|
||
|
CLC
|
||
|
ADC #FST_BLOCKSIZE
|
||
|
STA bufferPtr
|
||
|
LDA bufferPtr+2
|
||
|
ADC #$0000
|
||
|
STA bufferPtr+2
|
||
|
LDA #$0002
|
||
|
STA callNum
|
||
|
LDY #$000C
|
||
|
LDA [ptrGSOSBUFFER],Y
|
||
|
STA L012E
|
||
|
PHA
|
||
|
PHY
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
INC
|
||
|
STA [ptrVCR],Y
|
||
|
PLY
|
||
|
PLA
|
||
|
JSR TS2BLOCK
|
||
|
PHP
|
||
|
PHA
|
||
|
PHY
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
DEC
|
||
|
STA [ptrVCR],Y
|
||
|
PLY
|
||
|
PLA
|
||
|
PLP
|
||
|
BCC L141B
|
||
|
RTS
|
||
|
|
||
|
L141B LDA intOFILETYPE
|
||
|
LDY #$0000
|
||
|
AND #$007C
|
||
|
BEQ L1429
|
||
|
LDY #$0002
|
||
|
L1429 LDA [bufferPtr],Y
|
||
|
STA L1455
|
||
|
LDA #$0000
|
||
|
STA L1457
|
||
|
LDA intOFILETYPE
|
||
|
AND #$007B
|
||
|
BEQ L144B
|
||
|
CMP #$0001
|
||
|
BNE L1446
|
||
|
LDA #$0C00
|
||
|
BRA L144D
|
||
|
L1446 LDA #$0801
|
||
|
BRA L144D
|
||
|
L144B LDA [bufferPtr]
|
||
|
L144D LDX L1455
|
||
|
LDY L1457
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
L1455 DW $0000
|
||
|
L1457 DW $0000
|
||
|
L1459 DW $0000
|
||
|
L145B DW $0000
|
||
|
|
||
|
*
|
||
|
* READ VTOC
|
||
|
*
|
||
|
|
||
|
readVTOC = *
|
||
|
|
||
|
LDA ptrVTOC ; T11/S0
|
||
|
CLC
|
||
|
ADC #FST_BLOCKSIZE
|
||
|
STA bufferPtr
|
||
|
LDA ptrVTOC+2
|
||
|
ADC #$0000
|
||
|
STA bufferPtr+2
|
||
|
LDX #11 ; Read 11 sectors
|
||
|
STX L14A5 ; from 11/B to 11/1 max
|
||
|
L1472 LDY #$0001 ; link to next T/S
|
||
|
LDA [bufferPtr],Y
|
||
|
BEQ L1499
|
||
|
|
||
|
PHA
|
||
|
LDA bufferPtr
|
||
|
ADC #FST_BLOCKSIZE
|
||
|
STA bufferPtr
|
||
|
LDA bufferPtr+2
|
||
|
ADC #$0000
|
||
|
STA bufferPtr+2
|
||
|
LDA #$0002
|
||
|
STA callNum
|
||
|
PLA
|
||
|
JSR TS2BLOCK
|
||
|
BCC L1494
|
||
|
RTS
|
||
|
L1494 DEC L14A5
|
||
|
BNE L1472
|
||
|
|
||
|
L1499 LDA #12 ; 12-nb sectors read
|
||
|
SEC ; equals length of VTOC
|
||
|
SBC L14A5 ; because 1 has already
|
||
|
STA tmpLENGTH ; been read
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
L14A5 ds 2
|
||
|
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
|
||
|
L14A7 LDA shtFILENAME
|
||
|
STA ptrVOLNAME2
|
||
|
LDA #^L0178
|
||
|
STA ptrVOLNAME2+2
|
||
|
LDA #$0000
|
||
|
L14B3 LDX #$0000
|
||
|
L14B6 STA L00EE
|
||
|
STX L00F0
|
||
|
JSR getFILEOFFSET
|
||
|
BCC L14C2
|
||
|
RTS
|
||
|
|
||
|
L14C2 JSR isDELETEDFILE
|
||
|
BEQ L1515
|
||
|
CMP #$00FF
|
||
|
BEQ L1503
|
||
|
LDA ptrFILENAME
|
||
|
ADC #$0001
|
||
|
STA ptrVOLNAME3
|
||
|
LDA ptrFILENAME+2
|
||
|
ADC #$0000
|
||
|
STA ptrVOLNAME3+2
|
||
|
LDY #$001F
|
||
|
LDA [ptrVOLNAME3]
|
||
|
PHA
|
||
|
SEP #$20
|
||
|
L14E2 LDA [ptrVOLNAME3],Y
|
||
|
CMP #$A0 ; space
|
||
|
BNE L14F0
|
||
|
DEY
|
||
|
BPL L14E2
|
||
|
PLX
|
||
|
REP #$30
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
MX %10
|
||
|
L14F0 DEY
|
||
|
LDA #$7F
|
||
|
STA tmpMASK
|
||
|
REP #$20
|
||
|
TYA
|
||
|
STA [ptrVOLNAME3]
|
||
|
JSR compareVOLUME
|
||
|
PLA
|
||
|
STA [ptrVOLNAME3]
|
||
|
BCC L151D
|
||
|
L1503 LDX L00F0
|
||
|
LDA L00EE
|
||
|
INX
|
||
|
CPX #$0007
|
||
|
BCC L14B6
|
||
|
INC
|
||
|
CMP tmpLENGTH
|
||
|
BCC L14B3
|
||
|
L1515 LDA #$FFFF
|
||
|
STA L00F0
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
L151D CLC
|
||
|
RTS
|
||
|
|
||
|
*
|
||
|
* Set OptionList
|
||
|
*
|
||
|
|
||
|
setOPTIONLIST LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT+2
|
||
|
ORA gsosOUTPUT
|
||
|
BEQ L1540
|
||
|
LDA [gsosOUTPUT]
|
||
|
CMP #$0006
|
||
|
BCS L1536
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L1536 LDA #FST_DOS32 ; Y=2 MUST BE 2
|
||
|
TAY ; Y=4 MUST BE FST_DOS32
|
||
|
STA [gsosOUTPUT],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [gsosOUTPUT],Y
|
||
|
L1540 CLC
|
||
|
RTS
|
||
|
|
||
|
*
|
||
|
* FSTSPECIFIC: OPTION 1
|
||
|
*
|
||
|
|
||
|
specific1 LDA fgNBPARAMS
|
||
|
CMP #$0003
|
||
|
BEQ L154F
|
||
|
LDA #$0004
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L154F LDY #$0006
|
||
|
LDA [ptrParamBlock],Y
|
||
|
CMP #$0002 ; legal values are 0 or 1
|
||
|
BCC L155E
|
||
|
LDA #$0053
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L155E STA textMODE
|
||
|
LDA #$0000
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
*
|
||
|
* FSTSPECIFIC: OPTION 2
|
||
|
*
|
||
|
|
||
|
specific2 LDA fgNBPARAMS
|
||
|
CMP #$0003
|
||
|
BEQ L1573
|
||
|
LDA #$0004
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L1573 LDA textMODE
|
||
|
LDY #$0006
|
||
|
STA [ptrParamBlock],Y
|
||
|
LDA #$0000
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
*
|
||
|
* GET ORIGINAL FILE INFORMATION
|
||
|
*
|
||
|
|
||
|
getORIGINAL LDA #$0001
|
||
|
STA intSTORAGE
|
||
|
LDY #$0002
|
||
|
LDA [ptrFILENAME],Y
|
||
|
TAX
|
||
|
AND #$0080
|
||
|
BNE L1596
|
||
|
LDA #$00C3
|
||
|
BRA L1599
|
||
|
L1596 LDA #$0001
|
||
|
L1599 STA intACCESS
|
||
|
TXA
|
||
|
AND #$007F
|
||
|
STA intOFILETYPE
|
||
|
LDX #$0008
|
||
|
L15A6 LSR
|
||
|
BCS L15AC
|
||
|
DEX
|
||
|
BNE L15A6
|
||
|
L15AC TXA
|
||
|
ASL
|
||
|
TAX
|
||
|
LDA L15F3,X
|
||
|
STA intFILETYPE
|
||
|
|
||
|
LDA intOFILETYPE
|
||
|
AND #$0017 ; 00010111
|
||
|
BEQ L15DB ; 0 = TEXT FILE
|
||
|
|
||
|
LDY #$0000
|
||
|
LDA [ptrFILENAME],Y
|
||
|
JSR L1274
|
||
|
BCC L15C8
|
||
|
RTS
|
||
|
L15C8 STA intAUXTYPE
|
||
|
STX intEOF
|
||
|
STY intEOF+2
|
||
|
LDY #$0021
|
||
|
LDA [ptrFILENAME],Y
|
||
|
STA intNBSEC
|
||
|
CLC
|
||
|
RTS
|
||
|
|
||
|
L15DB LDY #$0000
|
||
|
LDA [ptrFILENAME],Y
|
||
|
JSR L1274
|
||
|
BCC L15E6
|
||
|
RTS
|
||
|
L15E6 STA intNBSEC
|
||
|
STX intEOF
|
||
|
STY intEOF+2
|
||
|
STZ intAUXTYPE
|
||
|
RTS
|
||
|
|
||
|
L15F3 DW $0004
|
||
|
DW $000F
|
||
|
DW $0000
|
||
|
DW $0000
|
||
|
DW $00FE
|
||
|
DW $0000
|
||
|
DW $0006
|
||
|
DW $00FC
|
||
|
DW $00FA
|
||
|
DW $00EE
|
||
|
|
||
|
*
|
||
|
* HANDLE THE GetDirEntry GS/OS CALL
|
||
|
* on entry A = class type
|
||
|
*
|
||
|
|
||
|
doGETDIRENTRY LDY #iVCR_DEVICEID
|
||
|
LDA [ptrVCR],Y
|
||
|
STA deviceNum
|
||
|
STZ errGETDIR
|
||
|
LDY #iFCR_TYPE
|
||
|
LDA [ptrFCR],Y
|
||
|
CMP #rootDIR ; must be done on the root directory
|
||
|
BEQ L1620
|
||
|
LDA #$804A
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L1620 LDA fgCLASS
|
||
|
BEQ L1644
|
||
|
|
||
|
LDY #$0006 ; base
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA theBASE
|
||
|
LDY #$0008 ; displacement
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA theDISPLACEMENT
|
||
|
LDY #$000A ; name
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT+2
|
||
|
BRA L166A
|
||
|
|
||
|
L1644 LDY #$0004 ; base
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA theBASE
|
||
|
LDY #$0006 ; displacement
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA theDISPLACEMENT
|
||
|
|
||
|
LDY #iFCR_NBSEC
|
||
|
LDA [ptrFCR],Y
|
||
|
DEC
|
||
|
STA tmpLENGTH
|
||
|
|
||
|
LDY #$0008
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT+2
|
||
|
|
||
|
*
|
||
|
|
||
|
L166A LDA theBASE
|
||
|
TAX
|
||
|
ORA theDISPLACEMENT
|
||
|
BEQ L1680 ; base = displacement = 0
|
||
|
|
||
|
TXA
|
||
|
BEQ L1693 ; base = 0
|
||
|
DEC
|
||
|
BEQ L16AA ; base = 1
|
||
|
DEC
|
||
|
BEQ L16C5 ; base = 2
|
||
|
LDA #$0053
|
||
|
RTS
|
||
|
|
||
|
L1680 LDY #iFCR_TS ; base = 0
|
||
|
LDA [ptrFCR],Y
|
||
|
STA theENTRY
|
||
|
LDA #$0000 ; set the new displacement
|
||
|
LDY #iFCR_DISPLACEMENT
|
||
|
STA [ptrFCR],Y
|
||
|
BRL L17E3
|
||
|
|
||
|
L1693 LDY #iFCR_TS
|
||
|
LDA [ptrFCR],Y
|
||
|
CMP theDISPLACEMENT
|
||
|
BCS L16A2
|
||
|
LDA #$0061
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L16A2 LDA theDISPLACEMENT
|
||
|
STA theENTRY
|
||
|
BRA L16E7
|
||
|
|
||
|
L16AA LDY #iFCR_DISPLACEMENT ; base = 1
|
||
|
LDA [ptrFCR],Y ; displacement is added
|
||
|
CLC
|
||
|
ADC theDISPLACEMENT
|
||
|
STA theENTRY
|
||
|
LDY #iFCR_TS
|
||
|
LDA [ptrFCR],Y
|
||
|
CMP theENTRY
|
||
|
BCS L16E7
|
||
|
LDA #$0061
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L16C5 LDY #iFCR_DISPLACEMENT ; base = 2
|
||
|
LDA [ptrFCR],Y
|
||
|
DEC ; are we at the beginning
|
||
|
CMP theDISPLACEMENT
|
||
|
BCC L16E2
|
||
|
INC ; no, calculate the entry number
|
||
|
SEC
|
||
|
SBC theDISPLACEMENT
|
||
|
STA theENTRY
|
||
|
LDY #iFCR_TS
|
||
|
LDA [ptrFCR],Y
|
||
|
CMP theENTRY ; do we exceed
|
||
|
BCS L16E7
|
||
|
L16E2 LDA #$0061
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L16E7 LDA theENTRY ; set it as the new ref
|
||
|
LDY #iFCR_DISPLACEMENT
|
||
|
STA [ptrFCR],Y
|
||
|
STA theENTRY2
|
||
|
|
||
|
LDY #iVCR_SEGMENT
|
||
|
LDA [ptrVCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrVCR],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX ptrVTOC ; we must work on the VTOC
|
||
|
STY ptrVTOC+2
|
||
|
|
||
|
*
|
||
|
|
||
|
LDA #$0000 ; find the entry
|
||
|
L1708 LDX #$0000 ; from the beginning of the VTOC
|
||
|
|
||
|
L170B STA L00EE
|
||
|
STX L00F0
|
||
|
JSR getFILEOFFSET
|
||
|
BCC L1717
|
||
|
RTS
|
||
|
|
||
|
L1717 JSR isDELETEDFILE
|
||
|
BNE L1721
|
||
|
LDA #$8061
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L1721 CMP #$00FF ; is file deleted?
|
||
|
BEQ L172B
|
||
|
DEC theENTRY2
|
||
|
BEQ L173D
|
||
|
L172B LDX L00F0
|
||
|
LDA L00EE
|
||
|
INX
|
||
|
CPX #$0007 ; next entry in the same sector
|
||
|
BCC L170B
|
||
|
INC
|
||
|
CMP tmpLENGTH
|
||
|
BCC L1708
|
||
|
|
||
|
L173D LDY #iVCR_NAME
|
||
|
LDA [ptrVCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrVCR],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX ptrVOLNAME
|
||
|
STY ptrVOLNAME+2
|
||
|
LDY #iVCR_DEVICEID
|
||
|
LDA [ptrVCR],Y
|
||
|
STA tmpDEVICE
|
||
|
JSR checkVOLUME
|
||
|
BCC L1761
|
||
|
LDA #$0045
|
||
|
RTS
|
||
|
|
||
|
L1761 LDY #iVCR_DEVICEID
|
||
|
LDA [ptrVCR],Y ; are we on the same device?
|
||
|
CMP deviceNum
|
||
|
BEQ L1771
|
||
|
LDY #iVCR_DEVICEID
|
||
|
LDA deviceNum ; no update
|
||
|
STA [ptrVCR],Y
|
||
|
|
||
|
L1771 JSR getORIGINAL
|
||
|
BCC L177A
|
||
|
LDA #$0051
|
||
|
RTS
|
||
|
|
||
|
L177A SEP #$20 ; get the real file name length
|
||
|
LDY #$0020
|
||
|
L177F LDA [ptrFILENAME],Y
|
||
|
CMP #$A0 ; LEN(HELLO)=5
|
||
|
BNE L1788
|
||
|
DEY
|
||
|
BNE L177F
|
||
|
L1788 REP #$21 ; offset Y = 7
|
||
|
INY ; +1
|
||
|
STY L182D ; length is 8
|
||
|
TYA
|
||
|
SBC #$0002 ; -2
|
||
|
STA L1839 ; the length of the output
|
||
|
INC ; is a word
|
||
|
INC
|
||
|
INC
|
||
|
TAY
|
||
|
LDA [gsosOUTPUT]
|
||
|
STA L183B ; compare with the GSOS output buffer
|
||
|
CPY L183B
|
||
|
BCC L17A9
|
||
|
LDA #$004F
|
||
|
STA errGETDIR
|
||
|
|
||
|
L17A9 LDY #$0002
|
||
|
LDA #$0003
|
||
|
STA L182F
|
||
|
SEP #$20
|
||
|
|
||
|
L17B4 INY
|
||
|
CPY L182D
|
||
|
BEQ L17D9
|
||
|
|
||
|
LDX L182F ; on the filename
|
||
|
INX
|
||
|
CPX L183B
|
||
|
BEQ L17D9
|
||
|
STX L182F
|
||
|
LDA [ptrFILENAME],Y
|
||
|
TYX
|
||
|
LDY L182F ; replace
|
||
|
AND #$7F
|
||
|
CMP #$3A ; :
|
||
|
BNE L17D4 ; with
|
||
|
LDA #$2C ; ,
|
||
|
L17D4 STA [gsosOUTPUT],Y
|
||
|
TXY
|
||
|
BRA L17B4
|
||
|
|
||
|
L17D9 REP #$21
|
||
|
LDA L1839
|
||
|
LDY #$0002
|
||
|
STA [gsosOUTPUT],Y
|
||
|
|
||
|
*
|
||
|
|
||
|
L17E3 LDA fgCLASS
|
||
|
BNE L1800
|
||
|
|
||
|
LDA #$0000
|
||
|
LDY #$0002
|
||
|
STA [ptrParamBlock],Y
|
||
|
LDA #$0001
|
||
|
STA fgNBPARAMS
|
||
|
LDA #L0D1E
|
||
|
STA shtPARAMETERS
|
||
|
JSR setPARAMETERS
|
||
|
BRA L1826
|
||
|
|
||
|
L1800 LDA #$0000 ; flags
|
||
|
LDY #$0004
|
||
|
STA [ptrParamBlock],Y
|
||
|
|
||
|
LDA #L0D4E
|
||
|
STA shtPARAMETERS
|
||
|
JSR setPARAMETERS
|
||
|
LDA fgNBPARAMS
|
||
|
CMP #$000F
|
||
|
BCC L1826
|
||
|
LDY #$0032
|
||
|
JSR setOPTIONLIST
|
||
|
BCC L1826
|
||
|
LDA #$004F
|
||
|
STA errGETDIR
|
||
|
|
||
|
L1826 LDA errGETDIR
|
||
|
CMP #$0001
|
||
|
RTS
|
||
|
|
||
|
L182D DW $0000
|
||
|
L182F DW $0000
|
||
|
errGETDIR DW $0000
|
||
|
theBASE DW $0000
|
||
|
theDISPLACEMENT DW $0000
|
||
|
theENTRY2 DW $0000
|
||
|
L1839 DW $0000
|
||
|
L183B DW $0000
|
||
|
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
|
||
|
L183D LDY #iFCR_SEG1
|
||
|
LDA [ptrFCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX $BA
|
||
|
STY $BC
|
||
|
LDY #iFCR_12
|
||
|
LDA [ptrFCR],Y
|
||
|
STA $BE
|
||
|
LDA L00FE
|
||
|
DEC
|
||
|
BNE L18A5
|
||
|
LDA [$BA]
|
||
|
AND #$00FF
|
||
|
STA $C0
|
||
|
LDY L0116
|
||
|
BEQ L18E5
|
||
|
LDY #$0000
|
||
|
SEP #$30
|
||
|
L186E PHY
|
||
|
REP #$30
|
||
|
LDY #iFCR_OTYPE
|
||
|
LDA [ptrFCR],Y
|
||
|
SEP #$30
|
||
|
BNE L1883
|
||
|
PLY
|
||
|
LDA [ptrVTOC2],Y
|
||
|
STA [gsosOUTPUT],Y
|
||
|
AND #$7F
|
||
|
BRA L1888
|
||
|
L1883 PLY
|
||
|
LDA [ptrVTOC2],Y
|
||
|
STA [gsosOUTPUT],Y
|
||
|
L1888 INC L0118
|
||
|
AND $BE
|
||
|
CMP $C0
|
||
|
BEQ L18A0
|
||
|
REP #$30
|
||
|
INY
|
||
|
CPY L0116
|
||
|
SEP #$30
|
||
|
BCC L186E
|
||
|
REP #$30
|
||
|
CLC
|
||
|
BRA L18E3
|
||
|
L18A0 REP #$30
|
||
|
SEC
|
||
|
BRA L18E3
|
||
|
L18A5 LDY #$0000
|
||
|
SEP #$20
|
||
|
L18AA PHY
|
||
|
REP #$20
|
||
|
LDY #iFCR_OTYPE
|
||
|
LDA [ptrFCR],Y
|
||
|
SEP #$20
|
||
|
BNE L18BF
|
||
|
PLY
|
||
|
LDA [ptrVTOC2],Y
|
||
|
STA [gsosOUTPUT],Y
|
||
|
AND #$7F
|
||
|
BRA L18C4
|
||
|
L18BF PLY
|
||
|
LDA [ptrVTOC2],Y
|
||
|
STA [gsosOUTPUT],Y
|
||
|
L18C4 INC L0118
|
||
|
AND $BE
|
||
|
TYX
|
||
|
LDY L00FE
|
||
|
L18CD DEY
|
||
|
BMI L18D6
|
||
|
CMP [$BA],Y
|
||
|
BNE L18CD
|
||
|
BRA L18E2
|
||
|
L18D6 TXY
|
||
|
INY
|
||
|
CPY L0116
|
||
|
BNE L18AA
|
||
|
REP #$20
|
||
|
CLC
|
||
|
BRA L18E3
|
||
|
L18E2 SEC
|
||
|
L18E3 REP #$30
|
||
|
L18E5 RTS
|
||
|
|
||
|
*
|
||
|
* READ
|
||
|
*
|
||
|
|
||
|
doREAD STZ errREAD
|
||
|
STZ tmpTRANSFERCOUNT
|
||
|
STZ tmpTRANSFERCOUNT+2
|
||
|
STZ L0118
|
||
|
|
||
|
LDY #iFCR_OTYPE
|
||
|
LDA [ptrFCR],Y
|
||
|
BEQ L1913 ; 00000000 : 80 TXT
|
||
|
AND #$FFFC ; 11111100 : 84 BIN
|
||
|
BNE L1906
|
||
|
LDA #$0002
|
||
|
STA tmpTOSKIP
|
||
|
BRA L1916
|
||
|
L1906 AND #$FFEB ; 11101011 :
|
||
|
BNE L1913
|
||
|
LDA #$0004
|
||
|
STA tmpTOSKIP
|
||
|
BRA L1916
|
||
|
|
||
|
L1913 STZ tmpTOSKIP
|
||
|
|
||
|
L1916 LDY #iFCR_12
|
||
|
LDA [ptrFCR],Y
|
||
|
STA $BE
|
||
|
LDY #iFCR_10
|
||
|
LDA [ptrFCR],Y
|
||
|
STA L00FE
|
||
|
LDY #iFCR_EOF
|
||
|
LDA [ptrFCR],Y
|
||
|
STA intEOF
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
STA intEOF+2
|
||
|
LDY #iFCR_MARK
|
||
|
LDA [ptrFCR],Y
|
||
|
STA tmpMARK
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
STA tmpMARK+2
|
||
|
LDY #iFCR_SEG2
|
||
|
LDA [ptrFCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX ptrGSOSBUFFER
|
||
|
STY ptrGSOSBUFFER+2
|
||
|
|
||
|
LDA fgCLASS
|
||
|
BEQ L1979
|
||
|
|
||
|
LDY #$0008
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA tmpREQUESTCOUNT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA tmpREQUESTCOUNT+2
|
||
|
LDY #$0004
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT+2
|
||
|
BRA L1995
|
||
|
|
||
|
L1979 LDY #$0006
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA tmpREQUESTCOUNT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA tmpREQUESTCOUNT+2
|
||
|
LDY #$0002
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT+2
|
||
|
|
||
|
L1995 LDA tmpMARK
|
||
|
CMP intEOF
|
||
|
BNE L19AE
|
||
|
LDA tmpMARK+2
|
||
|
CMP intEOF+2
|
||
|
BNE L19AE
|
||
|
LDA #$004C
|
||
|
STA errREAD
|
||
|
BRL L1D6E
|
||
|
|
||
|
L19AE LDA tmpMARK
|
||
|
CLC
|
||
|
ADC tmpREQUESTCOUNT
|
||
|
STA tmpEOF
|
||
|
LDA tmpMARK+2
|
||
|
ADC tmpREQUESTCOUNT+2
|
||
|
BCS L19D2
|
||
|
STA tmpEOF+2
|
||
|
CMP intEOF+2
|
||
|
BCC L19DE
|
||
|
BNE L19D2
|
||
|
LDA intEOF
|
||
|
CMP tmpEOF
|
||
|
BCS L19DE
|
||
|
L19D2 LDA intEOF+2
|
||
|
STA tmpEOF+2
|
||
|
LDA intEOF
|
||
|
STA tmpEOF
|
||
|
|
||
|
L19DE LDA tmpEOF
|
||
|
SEC
|
||
|
SBC tmpMARK
|
||
|
STA tmpEND
|
||
|
LDA tmpEOF+2
|
||
|
SBC tmpMARK+2
|
||
|
STA tmpEND+2
|
||
|
|
||
|
LDA tmpMARK
|
||
|
CLC
|
||
|
ADC tmpTOSKIP
|
||
|
STA tmpSTART
|
||
|
LDA tmpMARK+2
|
||
|
ADC #$0000
|
||
|
STA tmpSTART+2
|
||
|
|
||
|
LDY #iFCR_TYPE
|
||
|
LDA [ptrFCR],Y
|
||
|
CMP #rootDIR
|
||
|
BNE L1A11
|
||
|
BRL L1C91
|
||
|
|
||
|
L1A11 LDY #iVCR_DEVICEID
|
||
|
LDA [ptrVCR],Y
|
||
|
STA deviceNum
|
||
|
LDA #$0002
|
||
|
STA callNum
|
||
|
L1A1D LDA tmpSTART
|
||
|
XBA
|
||
|
AND #$00FF
|
||
|
STA L0122
|
||
|
LDA tmpSTART+2
|
||
|
XBA
|
||
|
TAX
|
||
|
AND #$FF00
|
||
|
ORA L0122
|
||
|
STA L0122
|
||
|
TXA
|
||
|
AND #$00FF
|
||
|
STA L0124
|
||
|
L1A3C LDA ptrGSOSBUFFER
|
||
|
STA bufferPtr
|
||
|
LDA ptrGSOSBUFFER+2
|
||
|
STA bufferPtr+2
|
||
|
LDA L0122
|
||
|
LDY #$0005
|
||
|
SEC
|
||
|
SBC [ptrGSOSBUFFER],Y
|
||
|
BCC L1A65
|
||
|
CMP #$007A
|
||
|
BCC L1A72
|
||
|
LDY #$0001
|
||
|
LDA [ptrGSOSBUFFER],Y
|
||
|
BNE L1A60
|
||
|
LDA #$0051
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L1A60 JSR TS2BLOCK
|
||
|
BRA L1A3C
|
||
|
|
||
|
L1A65 LDY #$0000
|
||
|
LDA [ptrFILENAME],Y
|
||
|
JSR TS2BLOCK
|
||
|
BCC L1A70
|
||
|
RTS
|
||
|
|
||
|
L1A70 BRA L1A3C
|
||
|
L1A72 ASL
|
||
|
ADC #$000C
|
||
|
TAY
|
||
|
LDA [ptrGSOSBUFFER],Y
|
||
|
BNE L1A7E
|
||
|
BRL L1C12
|
||
|
L1A7E STA tmpTS
|
||
|
LDY #iFCR_TS
|
||
|
CMP [ptrFCR],Y
|
||
|
BEQ L1AD6
|
||
|
LDA $BE
|
||
|
BNE L1AB6
|
||
|
LDA tmpSTART
|
||
|
AND #$00FF
|
||
|
BNE L1AB6
|
||
|
LDA tmpEND
|
||
|
CMP #$0101
|
||
|
BCC L1AB6
|
||
|
LDA gsosOUTPUT
|
||
|
STA bufferPtr
|
||
|
LDA gsosOUTPUT+2
|
||
|
STA bufferPtr+2
|
||
|
LDA tmpTS
|
||
|
JSR TS2BLOCK
|
||
|
BCC L1AAD
|
||
|
RTS
|
||
|
|
||
|
L1AAD LDA #FST_BLOCKSIZE
|
||
|
STA L0118
|
||
|
BRL L1B9F
|
||
|
L1AB6 LDA ptrGSOSBUFFER
|
||
|
CLC
|
||
|
ADC #FST_BLOCKSIZE
|
||
|
STA bufferPtr
|
||
|
LDA ptrGSOSBUFFER+2
|
||
|
ADC #$0000
|
||
|
STA bufferPtr+2
|
||
|
LDA tmpTS
|
||
|
JSR TS2BLOCK
|
||
|
BCC L1ACE
|
||
|
RTS
|
||
|
|
||
|
L1ACE LDY #iFCR_TS
|
||
|
LDA tmpTS
|
||
|
STA [ptrFCR],Y
|
||
|
|
||
|
L1AD6 LDA tmpSTART
|
||
|
AND #$00FF
|
||
|
STA L0114
|
||
|
LDY tmpEND+2
|
||
|
BNE L1AED
|
||
|
CLC
|
||
|
ADC tmpEND
|
||
|
CMP #$0101
|
||
|
BCC L1AF0
|
||
|
L1AED LDA #FST_BLOCKSIZE
|
||
|
L1AF0 STA tmpBLOCKSIZE
|
||
|
SEC
|
||
|
SBC L0114
|
||
|
STA L0116
|
||
|
LDA L0114
|
||
|
CLC
|
||
|
ADC #FST_BLOCKSIZE
|
||
|
ADC ptrGSOSBUFFER
|
||
|
STA ptrVTOC2
|
||
|
LDA ptrGSOSBUFFER+2
|
||
|
ADC #$0000
|
||
|
STA ptrVTOC2+2
|
||
|
LDX $BE
|
||
|
BNE L1B75
|
||
|
LDA L0116
|
||
|
CMP #$0064 ; 100
|
||
|
BCS L1B51
|
||
|
LSR
|
||
|
TAX
|
||
|
BCC L1B30
|
||
|
SEP #$20
|
||
|
LDA [ptrVTOC2]
|
||
|
STA [gsosOUTPUT]
|
||
|
REP #$21
|
||
|
INC ptrVTOC2
|
||
|
BNE L1B2A
|
||
|
INC ptrVTOC2+2
|
||
|
L1B2A INC gsosOUTPUT
|
||
|
BNE L1B30
|
||
|
INC gsosOUTPUT+2
|
||
|
L1B30 TXA
|
||
|
DEC
|
||
|
BMI L1B3E
|
||
|
ASL
|
||
|
TAY
|
||
|
L1B36 LDA [ptrVTOC2],Y
|
||
|
STA [gsosOUTPUT],Y
|
||
|
DEY
|
||
|
DEY
|
||
|
BPL L1B36
|
||
|
L1B3E LDA L0116
|
||
|
STA L0118
|
||
|
LSR
|
||
|
BCC L1B9F
|
||
|
LDA gsosOUTPUT
|
||
|
BNE L1B4D
|
||
|
DEC gsosOUTPUT+2
|
||
|
L1B4D DEC gsosOUTPUT
|
||
|
BRA L1B9F
|
||
|
L1B51 PEI ptrVTOC2+2
|
||
|
PEI ptrVTOC2
|
||
|
PEI gsosOUTPUT+2
|
||
|
PEI gsosOUTPUT
|
||
|
PEA $0000
|
||
|
LDA L0116
|
||
|
PHA
|
||
|
PEA $0805
|
||
|
JSL MOVE_INFO
|
||
|
BCC L1B6D
|
||
|
LDA #$8000
|
||
|
RTS
|
||
|
|
||
|
L1B6D LDA L0116
|
||
|
STA L0118
|
||
|
BRA L1B9F
|
||
|
L1B75 JSR L183D
|
||
|
BCC L1B9F
|
||
|
LDA L0118
|
||
|
CLC
|
||
|
ADC tmpTRANSFERCOUNT
|
||
|
STA tmpTRANSFERCOUNT
|
||
|
BCC L1B89
|
||
|
INC tmpTRANSFERCOUNT+2
|
||
|
L1B89 CLC
|
||
|
LDA tmpTRANSFERCOUNT
|
||
|
ADC tmpTOSKIP
|
||
|
STA tmpTRANSFERCOUNT
|
||
|
LDA tmpTRANSFERCOUNT+2
|
||
|
ADC #$0000
|
||
|
STA tmpTRANSFERCOUNT+2
|
||
|
BRL L1CEF
|
||
|
L1B9F LDA L0118
|
||
|
CLC
|
||
|
ADC tmpTRANSFERCOUNT
|
||
|
STA tmpTRANSFERCOUNT
|
||
|
BCC L1BAE
|
||
|
INC tmpTRANSFERCOUNT+2
|
||
|
L1BAE LDA tmpEND
|
||
|
SEC
|
||
|
SBC L0118
|
||
|
STA tmpEND
|
||
|
BCS L1BBD
|
||
|
DEC tmpEND+2
|
||
|
L1BBD LDA tmpEND
|
||
|
ORA tmpEND+2
|
||
|
BNE L1BDB
|
||
|
CLC
|
||
|
LDA tmpTRANSFERCOUNT
|
||
|
ADC tmpTOSKIP
|
||
|
STA tmpTRANSFERCOUNT
|
||
|
LDA tmpTRANSFERCOUNT+2
|
||
|
ADC #$0000
|
||
|
STA tmpTRANSFERCOUNT+2
|
||
|
BRL L1CEF
|
||
|
L1BDB LDA tmpEND
|
||
|
CLC
|
||
|
ADC tmpTOSKIP
|
||
|
STA L1BF3
|
||
|
LDA tmpEND+2
|
||
|
ADC #$0000
|
||
|
ORA L1BF3
|
||
|
BNE L1BF5
|
||
|
BRL L1CEF
|
||
|
|
||
|
L1BF3 DW $0000
|
||
|
|
||
|
L1BF5 LDA L0118
|
||
|
TAX
|
||
|
CLC
|
||
|
ADC tmpSTART
|
||
|
STA tmpSTART
|
||
|
BCC L1C05
|
||
|
INC tmpSTART+2
|
||
|
L1C05 TXA
|
||
|
CLC
|
||
|
ADC gsosOUTPUT
|
||
|
STA gsosOUTPUT
|
||
|
BCC L1C0F
|
||
|
INC gsosOUTPUT+2
|
||
|
L1C0F BRL L1A1D
|
||
|
L1C12 LDA $BE
|
||
|
BEQ L1C40
|
||
|
LDY L00FE
|
||
|
SEP #$20
|
||
|
L1C1B DEY
|
||
|
BMI L1C40
|
||
|
LDA [$BA],Y
|
||
|
BNE L1C1B
|
||
|
STA [gsosOUTPUT]
|
||
|
REP #$31
|
||
|
INC tmpTRANSFERCOUNT
|
||
|
BNE L1C2E
|
||
|
INC tmpTRANSFERCOUNT+2
|
||
|
L1C2E LDA tmpEND
|
||
|
SEC
|
||
|
SBC #$0001
|
||
|
STA tmpEND
|
||
|
BCS L1C3D
|
||
|
DEC tmpEND+2
|
||
|
L1C3D BRL L1CEF
|
||
|
L1C40 REP #$31
|
||
|
LDA tmpSTART
|
||
|
AND #$00FF
|
||
|
STA L0114
|
||
|
LDY tmpEND+2
|
||
|
BNE L1C59
|
||
|
CLC
|
||
|
ADC tmpEND
|
||
|
CMP #$0101
|
||
|
BCC L1C5C
|
||
|
L1C59 LDA #FST_BLOCKSIZE
|
||
|
L1C5C STA tmpBLOCKSIZE
|
||
|
SEC
|
||
|
SBC L0114
|
||
|
STA L0116
|
||
|
LSR
|
||
|
TAX
|
||
|
LDA #$0000
|
||
|
BCC L1C79
|
||
|
SEP #$20
|
||
|
STA [gsosOUTPUT]
|
||
|
REP #$21
|
||
|
INC gsosOUTPUT
|
||
|
BNE L1C79
|
||
|
INC gsosOUTPUT+2
|
||
|
L1C79 TXA
|
||
|
DEC
|
||
|
BMI L1C88
|
||
|
ASL
|
||
|
TAY
|
||
|
LDA #$0000
|
||
|
L1C82 STA [gsosOUTPUT],Y
|
||
|
DEY
|
||
|
DEY
|
||
|
BPL L1C82
|
||
|
L1C88 LDA L0116
|
||
|
STA L0118
|
||
|
BRL L1B9F
|
||
|
L1C91 LDA $BE
|
||
|
BEQ L1CBB
|
||
|
LDA tmpEND
|
||
|
STA L0116
|
||
|
STZ L0118
|
||
|
LDA tmpMARK
|
||
|
CLC
|
||
|
ADC ptrGSOSBUFFER
|
||
|
STA ptrVTOC2
|
||
|
LDA tmpMARK+2
|
||
|
ADC ptrGSOSBUFFER+2
|
||
|
STA ptrVTOC2+2
|
||
|
JSR L183D
|
||
|
LDA L0118
|
||
|
STA tmpTRANSFERCOUNT
|
||
|
STZ tmpTRANSFERCOUNT+2
|
||
|
BRA L1CEF
|
||
|
L1CBB LDA tmpMARK
|
||
|
CLC
|
||
|
ADC ptrGSOSBUFFER
|
||
|
TAX
|
||
|
LDA tmpMARK+2
|
||
|
ADC ptrGSOSBUFFER+2
|
||
|
PHA
|
||
|
PHX
|
||
|
PEI gsosOUTPUT+2
|
||
|
PEI gsosOUTPUT
|
||
|
PEA $0000
|
||
|
LDA tmpEND
|
||
|
PHA
|
||
|
PEA $0805
|
||
|
JSL MOVE_INFO
|
||
|
BCC L1CE1
|
||
|
LDA #$8000
|
||
|
RTS
|
||
|
|
||
|
L1CE1 LDA tmpEND
|
||
|
STA tmpTRANSFERCOUNT
|
||
|
LDA tmpEND+2
|
||
|
STA tmpTRANSFERCOUNT+2
|
||
|
BRA L1D5A
|
||
|
L1CEF SEC
|
||
|
LDA tmpTRANSFERCOUNT
|
||
|
SBC tmpTOSKIP
|
||
|
STA tmpTRANSFERCOUNT
|
||
|
LDA tmpTRANSFERCOUNT+2
|
||
|
SBC #$0000
|
||
|
STA tmpTRANSFERCOUNT+2
|
||
|
LDY #iFCR_OTYPE
|
||
|
LDA [ptrFCR],Y
|
||
|
BNE L1D5A
|
||
|
LDA textMODE
|
||
|
BEQ L1D5A
|
||
|
LDA fgCLASS
|
||
|
BEQ L1D22
|
||
|
LDY #$0004
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT+2
|
||
|
BRA L1D2F
|
||
|
L1D22 LDY #$0002
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrParamBlock],Y
|
||
|
STA gsosOUTPUT+2
|
||
|
L1D2F LDY tmpTRANSFERCOUNT+2
|
||
|
INY
|
||
|
LDX tmpTRANSFERCOUNT
|
||
|
BNE L1D3F
|
||
|
DEY
|
||
|
TXA
|
||
|
ORA tmpTRANSFERCOUNT+2
|
||
|
BEQ L1D58
|
||
|
L1D3F STY $C4
|
||
|
LDY #$0000
|
||
|
SEP #$20
|
||
|
L1D46 LDA [gsosOUTPUT],Y
|
||
|
AND #$7F
|
||
|
STA [gsosOUTPUT],Y
|
||
|
INY
|
||
|
BNE L1D51
|
||
|
INC gsosOUTPUT+2
|
||
|
L1D51 DEX
|
||
|
BNE L1D46
|
||
|
DEC $C4
|
||
|
BNE L1D46
|
||
|
L1D58 REP #$20
|
||
|
L1D5A LDY #iFCR_MARK
|
||
|
LDA [ptrFCR],Y
|
||
|
CLC
|
||
|
ADC tmpTRANSFERCOUNT
|
||
|
STA [ptrFCR],Y
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
ADC tmpTRANSFERCOUNT+2
|
||
|
STA [ptrFCR],Y
|
||
|
L1D6E LDA fgCLASS
|
||
|
BNE L1D78
|
||
|
LDY #$000A
|
||
|
BRA L1D7B
|
||
|
L1D78 LDY #$000C
|
||
|
L1D7B LDA tmpTRANSFERCOUNT
|
||
|
STA [ptrParamBlock],Y
|
||
|
LDA tmpTRANSFERCOUNT+2
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrParamBlock],Y
|
||
|
LDA errREAD
|
||
|
CMP #$0001
|
||
|
RTS
|
||
|
|
||
|
errREAD DW $0000
|
||
|
|
||
|
*
|
||
|
* CHECK DATA FORK
|
||
|
*
|
||
|
|
||
|
checkDATAFORK LDA fgCLASS
|
||
|
BEQ L1DCB
|
||
|
|
||
|
LDA fgNBPARAMS
|
||
|
CMP #$0004
|
||
|
BCC L1DCB
|
||
|
CLC
|
||
|
LDY #$0008
|
||
|
LDA [ptrParamBlock],Y
|
||
|
AND #$0002
|
||
|
BEQ L1DAD
|
||
|
LDA #$004E
|
||
|
BRA L1DCA
|
||
|
L1DAD LDA fgNBPARAMS
|
||
|
CMP #$0005
|
||
|
BCC L1DCB
|
||
|
CLC
|
||
|
LDY #$000A
|
||
|
LDA [ptrParamBlock],Y
|
||
|
BEQ L1DCB
|
||
|
CMP #$0001
|
||
|
BEQ L1DC7
|
||
|
LDA #$0053
|
||
|
BRA L1DCA
|
||
|
L1DC7 LDA #$0063
|
||
|
L1DCA SEC
|
||
|
L1DCB RTS
|
||
|
|
||
|
*
|
||
|
* CALLED BY OPEN
|
||
|
*
|
||
|
|
||
|
doOPEN STZ errVOLUME
|
||
|
JSR updateVCR
|
||
|
BCC L1DD7
|
||
|
BRL L20FA
|
||
|
L1DD7 LDA (shtFILENAME)
|
||
|
BEQ L1DDE
|
||
|
BRL L1ED4
|
||
|
L1DDE JSR checkDATAFORK
|
||
|
BCC L1DE6
|
||
|
BRL L20FA
|
||
|
L1DE6 LDA L01AA
|
||
|
INC
|
||
|
STA L01DC
|
||
|
SEP #$20
|
||
|
LDA #$3A
|
||
|
LDY #$0002
|
||
|
STA L01DC,Y
|
||
|
L1DF7 LDA L01AA,Y
|
||
|
CMP #$01
|
||
|
INY
|
||
|
STA L01DC,Y
|
||
|
BCS L1DF7
|
||
|
REP #$20
|
||
|
LDX #L01DC
|
||
|
LDY #^L01DC
|
||
|
LDA #$0032
|
||
|
JSL ALLOC_FCR
|
||
|
BCC L1E16
|
||
|
BRL L20FA
|
||
|
L1E16 JSL DEREF
|
||
|
STX ptrFCR
|
||
|
STY ptrFCR+2
|
||
|
|
||
|
LDA #$4000
|
||
|
TSB errVOLUME
|
||
|
LDY #iFCR_FST
|
||
|
LDA #FST_DOS32
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iVCR_ID
|
||
|
LDA [ptrVCR],Y
|
||
|
LDY #iFCR_VCR
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iVCR_SEGMENT
|
||
|
LDA [ptrVCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrVCR],Y
|
||
|
LDY #iFCR_SEG2+2
|
||
|
STA [ptrFCR],Y
|
||
|
TXA
|
||
|
DEY
|
||
|
DEY
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_MARK
|
||
|
LDA #$0000
|
||
|
STA [ptrFCR],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_EOF+2
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_AUXTYPE
|
||
|
STA [ptrFCR],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_DISPLACEMENT
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_NBSEC+2
|
||
|
STA [ptrFCR],Y
|
||
|
DEY
|
||
|
DEY
|
||
|
STA [ptrFCR],Y
|
||
|
XBA
|
||
|
LDY #iFCR_EOF
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_TYPE
|
||
|
LDA #rootDIR
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_ACCESS
|
||
|
LDA #$00C3
|
||
|
STA [ptrFCR],Y
|
||
|
STZ intENTRYNB
|
||
|
|
||
|
LDA #$0000
|
||
|
L1E8E LDX #$0000
|
||
|
L1E91 STA L00EE
|
||
|
STX L00F0
|
||
|
JSR getFILEOFFSET
|
||
|
BCC L1E9F
|
||
|
BRL L20FA
|
||
|
|
||
|
L1E9F JSR isDELETEDFILE
|
||
|
BEQ L1EBE
|
||
|
CMP #$00FF
|
||
|
BEQ L1EAC
|
||
|
INC intENTRYNB
|
||
|
L1EAC LDX L00F0
|
||
|
LDA L00EE
|
||
|
INX
|
||
|
CPX #$0007
|
||
|
BCC L1E91
|
||
|
INC
|
||
|
CMP tmpLENGTH
|
||
|
BCC L1E8E
|
||
|
L1EBE LDA intENTRYNB
|
||
|
LDY #iFCR_TS
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
INC
|
||
|
BNE L1ECF
|
||
|
INC
|
||
|
L1ECF STA [ptrVCR],Y
|
||
|
BRL L2033
|
||
|
|
||
|
L1ED4 JSR L14A7
|
||
|
BCC L1EDF
|
||
|
LDA #$0051
|
||
|
BRL L20FA
|
||
|
L1EDF LDA L00F0
|
||
|
BPL L1EEA
|
||
|
LDA #$0046
|
||
|
BRL L20FA
|
||
|
L1EEA JSR checkDATAFORK
|
||
|
BCC L1EF2
|
||
|
BRL L20FA
|
||
|
L1EF2 LDA L01AA
|
||
|
INC
|
||
|
STA L01DC
|
||
|
SEP #$20
|
||
|
LDA #$3A
|
||
|
LDY #$0002
|
||
|
STA L01DC,Y
|
||
|
L1F03 LDA L01AA,Y
|
||
|
CMP #$01
|
||
|
INY
|
||
|
STA L01DC,Y
|
||
|
BCS L1F03
|
||
|
REP #$20
|
||
|
LDX #L01DC
|
||
|
LDY #^L01DC
|
||
|
LDA #$0032
|
||
|
JSL ALLOC_FCR
|
||
|
BCC L1F25
|
||
|
LDA #$0054
|
||
|
BRL L20FA
|
||
|
L1F25 JSL DEREF
|
||
|
STX ptrFCR
|
||
|
STY ptrFCR+2
|
||
|
LDA #$4000
|
||
|
TSB errVOLUME
|
||
|
LDA #$0200
|
||
|
JSL ALLOC_SEG
|
||
|
BCC L1F42
|
||
|
LDA #$0054
|
||
|
BRL L20FA
|
||
|
L1F42 TYA
|
||
|
LDY #iFCR_SEG2+2
|
||
|
STA [ptrFCR],Y
|
||
|
TXA
|
||
|
DEY
|
||
|
DEY
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
INC
|
||
|
BNE L1F56
|
||
|
INC
|
||
|
L1F56 STA [ptrVCR],Y
|
||
|
LDA #$0000
|
||
|
LDY #iFCR_MARK
|
||
|
STA [ptrFCR],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_2E
|
||
|
LDA L00F0
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_DISPLACEMENT
|
||
|
LDA L00EE
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_FST
|
||
|
LDA #FST_DOS32
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iVCR_ID
|
||
|
LDA [ptrVCR],Y
|
||
|
LDY #iFCR_VCR
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #$0002
|
||
|
LDA [ptrFILENAME],Y
|
||
|
AND #$007F
|
||
|
LDY #iFCR_OTYPE
|
||
|
STA [ptrFCR],Y
|
||
|
BRA L1FC3
|
||
|
|
||
|
* DEAD CODE
|
||
|
STZ L218A
|
||
|
LDY #$0000
|
||
|
L1F9B LDA L218A
|
||
|
LSR
|
||
|
TAX
|
||
|
LDA L214C,X
|
||
|
STA L2188
|
||
|
LDX #$0010
|
||
|
L1FA9 ASL L2188
|
||
|
BCC L1FB2
|
||
|
LDA [ptrFCR2],Y
|
||
|
STA [ptrFCR],Y
|
||
|
L1FB2 INY
|
||
|
INY
|
||
|
DEX
|
||
|
BNE L1FA9
|
||
|
LDA L218A
|
||
|
BNE L1FC1
|
||
|
INC L218A
|
||
|
BRA L1F9B
|
||
|
L1FC1 BRA L2033
|
||
|
|
||
|
* END OF DEAD CODE
|
||
|
|
||
|
L1FC3 LDY #iFCR_SEG2
|
||
|
LDA [ptrFCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
LDA [ptrFCR],Y
|
||
|
TAY
|
||
|
JSL DEREF
|
||
|
STX bufferPtr
|
||
|
STX ptrGSOSBUFFER
|
||
|
STY bufferPtr+2
|
||
|
STY ptrGSOSBUFFER+2
|
||
|
LDA #$0002
|
||
|
STA callNum
|
||
|
LDY #iFCR_2E
|
||
|
LDA [ptrFCR],Y
|
||
|
TAX
|
||
|
LDY #iFCR_DISPLACEMENT
|
||
|
LDA [ptrFCR],Y
|
||
|
JSR getFILEOFFSET
|
||
|
JSR getORIGINAL
|
||
|
BCC L1FF5
|
||
|
BRL L20FA
|
||
|
L1FF5 LDY #iFCR_TS
|
||
|
LDA L012E
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_ACCESS
|
||
|
LDA intACCESS
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_EOF
|
||
|
LDA intEOF
|
||
|
STA [ptrFCR],Y
|
||
|
LDA intEOF+2
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_AUXTYPE
|
||
|
LDA intAUXTYPE
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_TYPE
|
||
|
LDA intFILETYPE
|
||
|
STA [ptrFCR],Y
|
||
|
LDY #iFCR_NBSEC
|
||
|
LDA intNBSEC
|
||
|
STA [ptrFCR],Y
|
||
|
LDA #$0000
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrFCR],Y
|
||
|
|
||
|
L2033 LDA fgCLASS
|
||
|
BNE L203B
|
||
|
BRL L20C3
|
||
|
L203B LDA fgNBPARAMS
|
||
|
TAX
|
||
|
LDY #$FFFE
|
||
|
L2042 INY
|
||
|
INY
|
||
|
LDA tblOPEN,Y
|
||
|
ASL
|
||
|
BCC L204D
|
||
|
DEX
|
||
|
BMI L205B
|
||
|
L204D ASL
|
||
|
BCS L2042
|
||
|
LSR
|
||
|
LSR
|
||
|
PHY
|
||
|
TAY
|
||
|
LDA [ptrFCR],Y
|
||
|
PLY
|
||
|
STA [ptrParamBlock],Y
|
||
|
BRA L2042
|
||
|
L205B LDX fgNBPARAMS
|
||
|
CPX #$0008
|
||
|
BCC L20CD
|
||
|
LDY #$0012
|
||
|
LDA #$0000
|
||
|
STA [ptrParamBlock],Y
|
||
|
CPX #$0009
|
||
|
BCC L20CD
|
||
|
LDY #iFCR_TYPE
|
||
|
LDA [ptrFCR],Y
|
||
|
CMP #rootDIR
|
||
|
BEQ L207D
|
||
|
|
||
|
LDA #$0001
|
||
|
L207D LDY #$0014
|
||
|
STA [ptrParamBlock],Y
|
||
|
CPX #$000A
|
||
|
BCC L20CD
|
||
|
LDA #$0000
|
||
|
LDY #$0016
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrParamBlock],Y
|
||
|
CPX #$000B
|
||
|
BCC L20CD
|
||
|
LDY #$001E
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrParamBlock],Y
|
||
|
CPX #$000C
|
||
|
BCC L20CD
|
||
|
LDY #$0026
|
||
|
JSR setOPTIONLIST
|
||
|
BCC L20CD
|
||
|
LDA #$004F
|
||
|
BRA L20FA
|
||
|
L20C3 LDY #iFCR_ID
|
||
|
LDA [ptrFCR],Y
|
||
|
LDY #$0000
|
||
|
STA [ptrParamBlock],Y
|
||
|
L20CD LDA fgNBPARAMS
|
||
|
CMP #$000E
|
||
|
BCC L20F5
|
||
|
LDY #$0032
|
||
|
LDA #$0000
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrParamBlock],Y
|
||
|
LDA fgNBPARAMS
|
||
|
CMP #$000F
|
||
|
BCC L20F5
|
||
|
LDY #$0036
|
||
|
LDA #$0000
|
||
|
STA [ptrParamBlock],Y
|
||
|
INY
|
||
|
INY
|
||
|
STA [ptrParamBlock],Y
|
||
|
L20F5 CLC
|
||
|
LDA #$0000
|
||
|
RTS
|
||
|
|
||
|
L20FA PHA
|
||
|
BIT errVOLUME
|
||
|
PHP
|
||
|
BVC L2135
|
||
|
LDY #iFCR_TYPE
|
||
|
LDA [ptrFCR],Y
|
||
|
CMP #rootDIR
|
||
|
BEQ L211E
|
||
|
LDY #iFCR_SEG2
|
||
|
LDA [ptrFCR],Y
|
||
|
TAX
|
||
|
INY
|
||
|
INY
|
||
|
ORA [ptrFCR],Y
|
||
|
BEQ L211E
|
||
|
LDA [ptrFCR],Y
|
||
|
TAY
|
||
|
JSL RELEASE_SEG
|
||
|
L211E LDY #iFCR_ID
|
||
|
LDA [ptrFCR],Y
|
||
|
JSL RELEASE_FCR
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA [ptrVCR],Y
|
||
|
BEQ L2135
|
||
|
INC
|
||
|
BEQ L2133
|
||
|
DEC
|
||
|
DEC
|
||
|
L2133 STA [ptrVCR],Y
|
||
|
L2135 PLP
|
||
|
BPL L2149
|
||
|
LDY #iVCR_BUSY
|
||
|
LDA #$0000
|
||
|
STA [ptrVCR],Y
|
||
|
LDY #iVCR_ID
|
||
|
LDA [ptrVCR],Y
|
||
|
JSL RELEASE_VCR
|
||
|
L2149 PLA
|
||
|
SEC
|
||
|
RTS
|
||
|
|
||
|
L214C HEX 18E4FC00
|
||
|
|
||
|
tblOPEN DW $4000
|
||
|
DW $8000
|
||
|
DW $C000
|
||
|
DW $4000
|
||
|
DW $C000
|
||
|
DW $C000
|
||
|
DW $8014
|
||
|
DW $8024
|
||
|
DW $801E
|
||
|
DW $4000
|
||
|
DW $C000
|
||
|
DW $C000
|
||
|
DW $4000
|
||
|
DW $4000
|
||
|
DW $4000
|
||
|
DW $C000
|
||
|
DW $4000
|
||
|
DW $4000
|
||
|
DW $4000
|
||
|
DW $C000
|
||
|
DW $4000
|
||
|
DW $801A
|
||
|
DW $001C
|
||
|
DW $8028
|
||
|
DW $4002
|
||
|
DW $C000
|
||
|
DW $C000
|
||
|
DW $C000
|
||
|
L2188 DW $0000
|
||
|
L218A DW $0000
|
||
|
|
||
|
*-----------
|
||
|
|
||
|
PUT DOS32
|
||
|
PUT TRACK1132
|
||
|
PUT HELLO32
|
||
|
|