mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
199 lines
2.7 KiB
NASM
199 lines
2.7 KiB
NASM
; HL - ADDRESS
|
||
; DE - SIZE
|
||
; A - FM
|
||
READ: LD (.R_POINT),HL
|
||
LD (.S_POINT),HL
|
||
CALL SET_FM
|
||
RET C
|
||
CALL TSTSIZE
|
||
;
|
||
LD A,D
|
||
OR E
|
||
JP Z,.NOREAD
|
||
;
|
||
PUSH DE
|
||
LD A,(IY+_sFM.DRIVE)
|
||
CALL OPENDSK
|
||
JP C,.ERR_1
|
||
;<3B> áçñâ á¬¥é¥¨ï ¢ ᥪâ®à å
|
||
; LD C,(IY+_sFM.F_POSITION)
|
||
; LD E,(IY+_sFM.F_POSITION+1)
|
||
; LD A,E
|
||
; AND #01
|
||
; LD B,A
|
||
; LD D,(IY+_sFM.F_POSITION+2)
|
||
; LD L,(IY+_sFM.F_POSITION+3)
|
||
; LD H,0
|
||
; OR A
|
||
; RR L
|
||
; RR D
|
||
; RR E
|
||
LD H,0
|
||
LD L,(IY+_sFM.F_POSITION+3)
|
||
LD D,(IY+_sFM.F_POSITION+2)
|
||
LD E,(IY+_sFM.F_POSITION+1)
|
||
LD A,E
|
||
AND #01
|
||
LD B,A
|
||
LD C,(IY+_sFM.F_POSITION)
|
||
;OR A
|
||
RR L
|
||
RR D
|
||
RR E
|
||
;HL:DE FP (in sectors)
|
||
;BC FP residue (in bytes)
|
||
;
|
||
;LD A,B
|
||
OR C
|
||
JP NZ,.ROV1
|
||
.ROV4: POP BC
|
||
PUSH BC
|
||
SRL B
|
||
JR Z,.ROV2
|
||
LD (.SECTORH),HL
|
||
LD (.SECTORL),DE
|
||
.R_POINT+2: LD IX,0
|
||
CALL BLOK_RD
|
||
JP C,.ERR_1
|
||
LD DE,(.R_POINT)
|
||
.PointerOnBuffer+1:
|
||
LD HL,0 // LD HL,(READMEM)
|
||
AND A
|
||
SBC HL,DE
|
||
LD C,H
|
||
LD B,0
|
||
ADD HL,DE
|
||
LD (.R_POINT),HL
|
||
SRL C
|
||
.SECTORL+1: LD HL,0 // LD HL,(SECTORL)
|
||
ADD HL,BC
|
||
EX DE,HL
|
||
.SECTORH+1: LD HL,0 // LD HL,(SECTORH)
|
||
LD C,B
|
||
ADC HL,BC
|
||
.ROV2: POP BC
|
||
LD A,B
|
||
AND #01
|
||
LD B,A
|
||
OR C
|
||
JP Z,.ROV6
|
||
PUSH BC
|
||
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||
LD B,1
|
||
IN A,(SLOT3)
|
||
PUSH AF
|
||
IN A,(SLOT0)
|
||
OUT (SLOT3),A
|
||
CALL BLOK_RD
|
||
POP BC
|
||
LD C,SLOT3
|
||
OUT (C),B
|
||
JP C,.ERR_1
|
||
LD HL,CORE_BUFFERS.BUFFER
|
||
LD DE,(.R_POINT)
|
||
POP BC
|
||
LDIR
|
||
LD (.R_POINT),DE
|
||
.ROV6: LD HL,(.R_POINT)
|
||
.S_POINT+1: LD DE,0
|
||
;EX DE,HL
|
||
AND A
|
||
SBC HL,DE
|
||
PUSH HL
|
||
EX DE,HL
|
||
LD XH,D
|
||
LD XL,E
|
||
LD HL,0
|
||
CALL MOVE_FP.F_current
|
||
POP DE
|
||
.NOREAD:
|
||
.COD+1: LD A,0
|
||
OR A
|
||
RET
|
||
.ROV1: PUSH BC
|
||
PUSH HL
|
||
PUSH DE
|
||
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||
LD B,1
|
||
IN A,(SLOT3)
|
||
PUSH AF
|
||
IN A,(SLOT0)
|
||
OUT (SLOT3),A
|
||
CALL BLOK_RD
|
||
POP BC
|
||
LD C,SLOT3
|
||
OUT (C),B
|
||
POP HL
|
||
JP C,.ERR_3
|
||
LD BC,1
|
||
ADD HL,BC
|
||
EX DE,HL
|
||
POP HL
|
||
LD C,B
|
||
ADC HL,BC
|
||
EXX
|
||
POP DE
|
||
LD HL,512 ;!HARDCODE
|
||
AND A
|
||
SBC HL,DE
|
||
LD B,H
|
||
LD C,L
|
||
POP HL
|
||
AND A
|
||
SBC HL,BC
|
||
JR NC,.ROV3
|
||
ADD HL,BC
|
||
LD B,H
|
||
LD C,L
|
||
LD HL,0 ;!TODO ¬®¦® âãâ ã¯à®áâ¨âì ¤ «ì¥©èãî ¢¥âªã?
|
||
.ROV3: PUSH HL
|
||
LD HL,CORE_BUFFERS.BUFFER
|
||
ADD HL,DE
|
||
LD DE,(.R_POINT)
|
||
LDIR
|
||
LD (.R_POINT),DE
|
||
EXX
|
||
JP .ROV4
|
||
.ERR_3: POP HL
|
||
.ERR_2: POP HL
|
||
.ERR_1: POP BC
|
||
SCF
|
||
RET
|
||
|
||
|
||
|
||
TSTSIZE:
|
||
XOR A
|
||
LD (READ.COD),A
|
||
LD L,(IY+_sFM.F_POSITION) ;FP LOW
|
||
LD H,(IY+_sFM.F_POSITION+1)
|
||
ADD HL,DE
|
||
;
|
||
EXX
|
||
;LD DE,0 ;!TEST
|
||
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
|
||
LD H,(IY+_sFM.F_POSITION+3)
|
||
;!TEST
|
||
JR NC,.no_inc_hl
|
||
INC HL
|
||
;ADC HL,DE
|
||
;
|
||
.no_inc_hl:
|
||
EXX ;HL':HL - NEW FP
|
||
;
|
||
LD C,(IY+_sFM.F_SIZE)
|
||
LD B,(IY+_sFM.F_SIZE+1) ;SIZE LOW
|
||
AND A
|
||
SBC HL,BC
|
||
EXX
|
||
LD C,(IY+_sFM.F_SIZE+2) ;SIZE HIGH
|
||
LD B,(IY+_sFM.F_SIZE+3)
|
||
SBC HL,BC
|
||
EXX
|
||
RET C ;OK READ ALL
|
||
EX DE,HL
|
||
SBC HL,DE ;VERY BIG
|
||
EX DE,HL
|
||
LD A,#FF
|
||
LD (READ.COD),A
|
||
RET |