[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Disassembling an FST... New email address



Hello,

First of all here is my new email address: vignau@cybercable.fr (it is very
fast)

Then, in response to the FSTs disassembly, a short present:

*
* FST: proDOS
*

	lst	off
	rel
	typ	$bd
	dsk	Pro.FST.l

*-------------------------------------- Equates

DEV_DISPATCHER	EQU	$01FC00
ALLOC_SEG	EQU	$01FC1C
RELEASE_SEG	EQU	$01FC20
SWAP_OUT	EQU	$01FC34
DEREF		EQU	$01FC38
LOCK_MEM	EQU	$01FC68
UNLOCK_MEM	EQU	$01FC6C
MOVE_INFO	EQU	$01FC70

*-------------------------------------- Macros

	use	4/Misc.Macs
	use	4/Util.Macs

*-------------------------------------- Code

	ASC	'FST '		; FST signature
	ADRL	L0072		; call handler entry point
	ADRL	L013F		; GS/OS internal entry point! The FSTSpecific handler
	DW	$0001		; file system ID
L000E	DW	$3003		; attributes (See Programmer's ref for sys 6)
	DW	$0402		; version (v4.02)
	DW	$0200		; block size (oh! 512 bytes)
	ADRL	$00010000	; max volume size (blocks) : true, 65536 blocks
	ADRL	$00000007
	ADRL	$01000000	; max file size (bytes) : yep! 16mb
	ADRL	$00000000

	STR	'ProDOS'	; FST name
	STR	'ProDOS FST            v04.02'
	DW	$0000
	STR	'ProDOS FST written by Rob Turner. V4.02'

L0072	PHK
	PLB
	REP	#$30
	CPX	#$0067
	BCS	L007E
	JMP	(L0149+2,X)

L007E	LDA	#$0001
L0081	SEC
L0082	PHA
	PHP
	BCC	L00A8
	LDA	L05E5
	BPL	L00A8
	LDX	#L01E5
	LDY	#^L01E5
	LDA	#$0000
	JSL	$01FC48
	BCS	L00A8
	JSL	DEREF
	STX	$98
	STY	$9A
	LDA	[$98]
	JSL	$01FC28
L00A8	JSL	UNLOCK_MEM
	PLP
	PHP
	BCC	L00DC
	LDA	$02,S
	AND	#$00FF
	CMP	#$002D	; Error codes
	BEQ	L00C4
	CMP	#$005A
	BEQ	L00C4
	CMP	#$0051
	BNE	L00DC
L00C4	LDA	$88
	ORA	$8A
	BEQ	L00DC
	LDY	#$0023
	LDA	[$88],Y
	INC
	BEQ	L00DC
	LDA	#$FFFF
	STA	[$88],Y
	LDA	$01,S
	JSR	L1742
L00DC	LDA	$90
	ORA	$92
	BEQ	L011F
	LDA	L063A
	AND	#$0400
	BEQ	L011F
	LDY	#$001F
	LDA	[$90],Y
	AND	#$8000
	EOR	#$8000
	STA	$AC
	LDY	#$0014
	LDA	[$8C],Y
	AND	#$7FFF
	ORA	$AC
	STA	[$8C],Y
	LDA	L05DD
	BEQ	L011F
	LDA	L05D9
	BNE	L011F
	LDY	#$001F
	LDA	[$90],Y
	AND	#$8007
	BEQ	L011F
	LDY	#$0025
	LDA	[$88],Y
	INC
	STA	[$88],Y
L011F	LDA	L0307
	BEQ	L0136
	LDA	$30
	PHA
	LDX	L0309
	PHX
	PHY
	LDA	#$0040
	LDX	#$0000
	JSL	$01FCC4
L0136	PLP
	PLA
	ORA	L060D
	JMPL	$01FC40

L013F	PHK
	PLB
	CPX	#$0009
	BCS	L0149
	JMP	(L01B1,X)

L0149	LDA	#$0001
	RTL

GS/OS calls indexes : read GS/OS reference & Pgm's Ref for Sys6
for more information on the calls that must be supported by an FST.

If I say Create, where do you jump to ?

	DA	L2278
	DA	L2AB0
	DA	L007E
	DA	L2D51
	DA	L3360
	DA	L362F
	DA	L3789
	DA	L3967
	DA	L007E
	DA	L007E
	DA	L3AB0
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L3AEB
	DA	L007E
	DA	L3FB8
	DA	L45C7
	DA	L4D43
	DA	L4D57
	DA	L4D80
	DA	L4E43
	DA	L4E5E
	DA	L51EB
	DA	L007E
	DA	L007E
	DA	L5206
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L562D
	DA	L007E
	DA	L565A
	DA	L565F
	DA	L56FC
	DA	L5713
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L007E
	DA	L007E

Ya know what it is ? FSTSpecific subcalls (An application can directly talk
to an FST
despite what has been written above)

L01B1	DA	L5923
	DA	L21E2
	DA	L21EE
	DA	L21F0
	DA	L21F2
L01BB	ASC	'cant.find.me'
	DW	$0000
L01C9	DW	$0002
L01CB	DW	$0004	; Oh ! Fine ! Indexes in dir blocks 
	DW	$002B
	DW	$0052
	DW	$0079
	DW	$00A0
	DW	$00C7
	DW	$00EE
	DW	$0115
	DW	$013C
	DW	$0163
	DW	$018A
	DW	$01B1
	DW	$01D8
L01E5	DW	$0003
	DW	$0A0C
	DW	$000E
L01EB	DB	L0264-L01EC
L01EC	ASC	'ProDOS names must begin with a letter. '
	ASC	'They may be up to 15 characters long and '
	ASC	'may contain letters, digits and periods.'
L0264	......

And the rest is in Paris, France !

Antoine Vignau
Brutal Deluxe Software