Estex-DSS/DSS/drivers/media/ATAPI/Hidden/CDFS0.ASM
2024-12-04 22:39:16 +10:00

526 lines
6.8 KiB
NASM

NAM EQU 0
EXT EQU 8
ATR EQU 11
CLU3 EQU 20
CLU4 EQU 21
TIM1 EQU 22
TIM2 EQU 23
DAT1 EQU 24
DAT2 EQU 25
CLU1 EQU 26
CLU2 EQU 27
LEN1 EQU 28
LEN2 EQU 29
LEN3 EQU 30
LEN4 EQU 31
POS1 EQU 32
POS2 EQU 33
POS3 EQU 34
POS4 EQU 35
DIRCLU1 EQU 36
DIRCLU2 EQU 37
HND1 EQU 38
HND2 EQU 39
FDRV EQU 40
AMODE EQU 41
FTASK EQU 42
DIR EQU #C000
DIRPAGE EQU 0
;ACCESS MODE:
; 00 - READ/WRITE
; 01 - READ
; 02 - WRITE
;File Manipulator (FM)
FM_BUF DEFB ". " ;+00 NAME
DEFB " " ;+08 EXT
DEFB #10 ;+11 ATTRIBUT
DEFB 0,0,0,0,0,0,0,0,0,0 ;+12 RESERVED
DEFW #0000 ;+22 TIME
DEFW #0000 ;+24 DATE
DEFW #0000 ;+26 START CLUSTER
DEFW #0000,#0000 ;+28 SIZE FILE
DEFW #0000,#0000 ;+32 FILE POSITION (FP)
DEFW #0000 ;+36 DIRECTORY CLUSTER
DEFW #0000 ;+38 HANDLE NUMBER
DEFB #00 ;+40 DRIVE OR CURRENT
DEFB #00 ;+41 ACCESS MODE
DEFB #00 ;+42 TASK
DEFB #00 ;+43 EMPTY
END_FM
;End of FM
DEFS 44*1,0
FM_SIZE EQU END_FM-FM_BUF
SET_FM PUSH DE
INC A
LD IY,FM_BUF-FM_SIZE
LD DE,FM_SIZE
SET_FM1 ADD IY,DE
DEC A
JR NZ,SET_FM1
POP DE
LD A,(IY+0)
OR A
LD A,0
RET NZ
LD A,5
SCF
RET
; HL:IX - OFFSET POINTER
; A - FILE MANIPULATOR
MOVE_FP CALL SET_FM
RET C
INC B
DEC B
JP Z,MOVE_FA
DEC B
JP Z,MOVE_FB
DEC B
JP Z,MOVE_FC
LD A,1
SCF
RET
;from Start File
MOVE_FA LD BC,0
LD DE,0
JR MOVE_F1
;from End File
MOVE_FC LD C,(IY+28)
LD B,(IY+29)
LD E,(IY+30)
LD D,(IY+31)
JR MOVE_F1
;from Current Position
MOVE_FB LD C,(IY+32)
LD B,(IY+33)
LD E,(IY+34)
LD D,(IY+35)
MOVE_F1 ADD IX,BC
ADC HL,DE
LD D,HX
LD E,LX
LD (IY+32),E
LD (IY+33),D
LD (IY+34),L
LD (IY+35),H
XOR A
RET
;FP COMPARE
; CY - FILE POINTER > SIZE
; NC - FILE POINTER < SIZE
MOVE_CP LD L,(IY+28)
LD H,(IY+29)
LD E,(IY+32)
LD D,(IY+33)
AND A
SBC HL,DE
LD L,(IY+30)
LD H,(IY+31)
LD E,(IY+34)
LD D,(IY+35)
SBC HL,DE
RET
INITDISK
LD B,4
CD_I_LP PUSH BC
LD DE,DIR
LD HL,#0000
LD IX,#0010
LD BC,#0105
; LD A,(DRIVE)
CALL CDCMD
; RST #18
POP BC
JR NC,CD_I_OK
DJNZ CD_I_LP
UNKCD SCF
RET
CD_I_OK LD HL,DIR
LD A,(HL)
INC HL
CP #01
JR NZ,UNKCD
LD A,(HL)
INC HL
CP "C"
JR NZ,UNKCD
LD A,(HL)
INC HL
CP "D"
JR NZ,UNKCD
LD HL,DIR+#009E
LD DE,ROOTDIR
LDI
LDI
LDI
LDI
LD HL,DIR+#00A6
LD DE,ROOTLEN
LDI
LDI
LDI
LDI
; POP AF
; OUT (PAGE3),A
; LD HL,0
; LD (FATCASH),HL
XOR A
RET
LOADDIR XOR A
LD A,DIRPAGE
CALL BANK
PUSH AF
LD B,3
LOADFFF PUSH BC
LD HL,#C000
LD DE,#C001
LD BC,#3FFF
LD (HL),L
LDIR
; LD A,(DRIVE)
; LD (IY+FDRV),A
;; LD C,(IY+LEN1)
LD C,(IY+LEN2)
LD B,(IY+LEN3)
LD E,(IY+LEN4)
LD D,0
SRL D
RR E
RR B
RR C
SRL D
RR E
RR B
RR C
SRL D
RR E
RR B
RR C
LD E,(IY+CLU1)
LD D,(IY+CLU2)
LD L,(IY+CLU3)
LD H,(IY+CLU4)
LD HX,D
LD LX,E
LD B,C
LD A,B
OR A
JR Z,ERRLEND
CP #08
JR C,NORLEND
LD B,8
NORLEND LD A,(DRIVE)
LD C,5
LD DE,DIR
CALL CDCMD
; RST #18
POP BC
JR NC,LOADMMM
DEC B
JP NZ,LOADFFF
POP AF
OUT (PAGE3),A
SCF
LD A,20
RET
ERRLEND POP BC
POP AF
OUT (PAGE3),A
SCF
LD A,20
RET
LOADMMM POP AF
OUT (PAGE3),A
CALL CORRDIR
AND A
RET
CORRDIR LD A,DIRPAGE
CALL BANK
PUSH AF
LD HL,DIR
LD DE,DIR
CORRL1 PUSH DE
LD C,(HL)
LD B,0
LD DE,ENTRYBF
LDIR
POP DE
PUSH HL
LD HL,FCDFLEN
LD C,(HL)
LD B,0
ADD HL,BC
INC HL
LD (HL),0
SBC HL,BC
PUSH DE
CALL MASK
POP HL
LD BC,11
ADD HL,BC
LD A,(FCDFLAG)
AND 2
LD A,#00 ;ATTRIBUT FILE
JR Z,CORRL0
LD A,#10 ;ATTRIBUT DIRECTORY
CORRL0 LD (HL),A
INC HL
XOR A
LD B,8
FILLCDN LD (HL),A
INC HL
DJNZ FILLCDN
LD A,(FCDSEC+2)
LD (HL),A
INC HL
LD A,(FCDSEC+3)
LD (HL),A
INC HL
LD DE,#0000 ;TIME
LD (HL),E
INC HL
LD (HL),D
INC HL
LD DE,#0000 ;DATE
LD (HL),E
INC HL
LD (HL),D
INC HL
LD DE,(FCDSEC)
LD (HL),E
INC HL
LD (HL),D
INC HL
EX DE,HL
LD HL,FCDLEN
LDI
LDI
LDI
LDI
POP HL
BIT 7,H
JR Z,CORRL2
LD A,(HL)
OR A
JP NZ,CORRL1
LD L,0
INC H
JR Z,CORRL2
LD A,(HL)
OR A
JP NZ,CORRL1
CORRL2 XOR A
LD (DE),A
LD DE,(ROOTDIR+0)
LD L,(IY+CLU1)
LD H,(IY+CLU2)
AND A
SBC HL,DE
JR NZ,CORRL6
LD DE,(ROOTDIR+2)
LD L,(IY+CLU3)
LD H,(IY+CLU4)
AND A
SBC HL,DE
JR NZ,CORRL6
LD HL,DIR
LD A,(HL)
CP " "
JR NZ,CORRL4
LD (HL),#E5
LD BC,#0020
ADD HL,BC
LD A,(HL)
CP " "
JR NZ,CORRL4
LD (HL),#E5
JR CORRL4
CORRL6 LD HL,DIR
LD A,(HL)
CP " "
JR NZ,CORRL4
LD (HL),"."
LD BC,#0020
ADD HL,BC
LD A,(HL)
CP " "
JR NZ,CORRL4
LD (HL),"."
INC HL
LD (HL),"."
CORRL4 POP AF
OUT (PAGE3),A
AND A
RET
ENTRYBF
DEFB #00 ;Entry lenght
DEFB #00 ;XAR in LBN
FCDSEC DEFW #00,#00 ;Start sector (Intel)
DEFW #00,#00 ;Start sector (Motorola)
FCDLEN DEFW #00,#00 ;Lenght file (Intel)
DEFW #00,#00 ;Lenght file (Motorola)
FCDYEAR DEFB #00 ;Year
FCDMOUN DEFB #00 ;Month
FCDDAY DEFB #00 ;Day
FCDHOUR DEFB #00 ;Hour
FCDMIN DEFB #00 ;Minute
FCDSECN DEFB #00 ;Second
DEFB #00 ;Reserve
FCDFLAG DEFB #00 ;Flag
DEFB #00 ;Interlive size
DEFB #00 ;Interlive skip factor
DEFW #0000 ;Volume Set Sequence (Intel)
DEFW #0000 ;Volume Set Sequence (Motorola)
FCDFLEN DEFB #00
DEFSA EQU $-ENTRYBF
FCDNAME DEFS #100-DEFSA
ROOTDIR DEFW 0,0
ROOTLEN DEFW 0,0
DIRSIZE DEFW 0
BANK LD C,A
LD B,0
LD HL,BANKTBL
ADD HL,BC
IN A,(PAGE3)
LD C,PAGE3
OUTI
RET
BANKTBL DEFB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
DEFB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
HANDTA DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MASKARE
DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
; HL - MASK "file*.t??"
; DE - 11 bytes filename
; RET: C=2 FILE WITHOUT EXTENTION
; C=1 FILE WITH EXTENTION
MASK PUSH HL
PUSH DE
LD H,D
LD L,E
INC DE
LD (HL),#20
LD BC,10
LDIR
POP DE
POP HL
LD A,(HL)
CP #21
RET C
LD BC,#0902
MASK1 LD A,(HL)
CP #21
CCF
RET NC
CP #22
JR Z,MASK7
CP "*"
JR Z,MASK3
CP "+"
JR Z,MASK7
CP ","
JR Z,MASK7
CP "."
JR Z,MASK5
CP "/"
JR Z,MASK7
CP ":"
JR Z,MASK7
CP ";"
JR Z,MASK7
CP "<"
JR Z,MASK7
CP "="
JR Z,MASK7
CP ">"
JR Z,MASK7
CP "["
JR Z,MASK7
CP '\' ;
JR Z,MASK7
CP "]"
JR Z,MASK7
CP "|"
JR Z,MASK7
CP "a"
JR C,MASK2
CP "{"
JR NC,MASK2
SUB #20
MASK2 LD (DE),A
INC HL
INC DE
DJNZ MASK1
MASK7 LD A,16
SCF
RET
MASK3 LD A,"?"
INC HL
DJNZ MASK6
LD A,16
SCF
RET
MASK6 LD (DE),A
INC DE
DJNZ MASK6
LD B,1
JR MASK1
MASK5 LD A," "
INC HL
DJNZ MASK4
LD B,4
DEC C
JP NZ,MASK1
LD A,16
SCF
RET
MASK4 LD (DE),A
INC DE
DJNZ MASK4
LD B,4
DEC C
JP NZ,MASK1
LD A,16
SCF
RET