mirror of
https://github.com/Tolik-Trek/Copy.git
synced 2026-06-15 01:11:37 +03:00
читает во всю свободную память, потом пишет
This commit is contained in:
parent
3e49b7d702
commit
a0ee27b2bb
169
Copy.asm
169
Copy.asm
@ -93,15 +93,19 @@ Loader_length EQU 0
|
||||
; ;==========================================================
|
||||
|
||||
START: XOR A
|
||||
LD (BSOURCE),A
|
||||
LD (BDESTN),A
|
||||
LD (MemBuffer.BSOURCE),A
|
||||
LD (MemBuffer.BDESTN),A
|
||||
;
|
||||
PUSH IX
|
||||
LD BC,256*1 + Dss.GetMem
|
||||
RST ToDSS
|
||||
JR NC,.mem_OK
|
||||
;
|
||||
LD HL,NO_MEM_STR
|
||||
LD C,BIOS.GetMemSize
|
||||
RST ToBIOS
|
||||
;
|
||||
LD A,B
|
||||
OR C
|
||||
JR NZ,.mem_OK
|
||||
;
|
||||
.no_Mem: LD HL,NO_MEM_STR
|
||||
LD C,Dss.PChars
|
||||
RST ToDSS
|
||||
LD BC,256*DSS_Error.sys.NOT_ENOUGH_MEMORY + Dss.Exit
|
||||
@ -109,79 +113,151 @@ START: XOR A
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
;
|
||||
.mem_OK: OUT (SLOT3),A
|
||||
.mem_OK: LD B,C
|
||||
LD C,Dss.GetMem
|
||||
RST ToDSS
|
||||
JR C,.no_Mem
|
||||
;PUSH AF ; mem block id
|
||||
;
|
||||
LD HL,MemBuffer.MemPages
|
||||
LD C,BIOS.GetMemBlkPages
|
||||
RST ToBIOS
|
||||
;
|
||||
;POP AF
|
||||
;OUT (SLOT3),A
|
||||
POP HL
|
||||
INC HL
|
||||
LD DE,BSOURCE
|
||||
LD DE,MemBuffer.BSOURCE
|
||||
LD C,Dss.GSwitch
|
||||
RST ToDSS
|
||||
LD DE,BDESTN
|
||||
LD DE,MemBuffer.BDESTN
|
||||
LD C,Dss.GSwitch
|
||||
RST ToDSS
|
||||
;
|
||||
LD HL,BSOURCE
|
||||
LD HL,MemBuffer.BSOURCE
|
||||
LD BC,Dss.Attrib.Get
|
||||
RST ToDSS
|
||||
LD (FATTR),A
|
||||
;
|
||||
LD A,Dss.Open.R
|
||||
LD HL,BSOURCE
|
||||
LD HL,MemBuffer.BSOURCE
|
||||
LD C,Dss.Open
|
||||
RST ToDSS
|
||||
LD (SOURCE_FILE),A
|
||||
LD (READ_FILE_BLOCK.SOURCE_FILE),A
|
||||
JR NC,.SOURCE_OK
|
||||
;
|
||||
LD (EXITCODE),A
|
||||
LD HL,SOPEN_ERR_STR
|
||||
; LD C,Dss.PChars
|
||||
; RST ToDSS
|
||||
JR QUIT
|
||||
JP QUIT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
;
|
||||
.SOURCE_OK: LD HL,BDESTN
|
||||
.SOURCE_OK: LD HL,MemBuffer.BDESTN
|
||||
FATTR+1: LD A,FAT_ATTR.ARCHIVE
|
||||
LD C,Dss.Creat_N
|
||||
RST ToDSS
|
||||
LD (DEST_FILE),A
|
||||
JR NC,RW_LOOP
|
||||
LD (WRITE_FILE_BLOCK.DEST_FILE),A
|
||||
;JR NC,RW_LOOP
|
||||
JR NC,BEGIN_COPY
|
||||
;
|
||||
LD (EXITCODE),A
|
||||
LD HL,DOPEN_ERR_STR
|
||||
; LD C,Dss.PChars
|
||||
; RST ToDSS
|
||||
JR QUIT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
READ_FILE_BLOCK:;
|
||||
LD HL,MemBuffer.MemPages
|
||||
LD A,(HL)
|
||||
OUT (SLOT3),A
|
||||
.loop: PUSH HL
|
||||
; INC A
|
||||
; JR Z,.End ; end of block, A=0
|
||||
;
|
||||
;
|
||||
RW_LOOP: LD HL,#C000
|
||||
LD DE,#4000
|
||||
LD C,Dss.Read
|
||||
SOURCE_FILE+1: LD A,0
|
||||
RST ToDSS
|
||||
JR C,RD_ERROR
|
||||
;
|
||||
PUSH AF
|
||||
LD HL,#C000
|
||||
LD DE,#4000
|
||||
.SOURCE_FILE+1: LD A,0
|
||||
LD C,Dss.Read
|
||||
RST ToDSS
|
||||
POP HL
|
||||
RET C
|
||||
;
|
||||
LD C,A
|
||||
;
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
OUT (SLOT3),A
|
||||
INC A
|
||||
JR Z,.End ; end of block, A=0
|
||||
;
|
||||
LD A,C
|
||||
OR A
|
||||
JR Z,.loop
|
||||
; end of file, A=#FF
|
||||
;
|
||||
.End: LD (MemBuffer.LastFilePageSize),DE
|
||||
LD DE,MemBuffer.MemPages
|
||||
;CF=0
|
||||
SBC HL,DE
|
||||
LD (MemBuffer.EndCopyLoop),A
|
||||
LD A,L
|
||||
LD (MemBuffer.FilePagesCounter),A
|
||||
RET
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
;
|
||||
WRITE_FILE_BLOCK:
|
||||
LD HL,MemBuffer.MemPages
|
||||
LD A,(MemBuffer.FilePagesCounter)
|
||||
LD B,A
|
||||
.loop: PUSH HL
|
||||
PUSH BC
|
||||
;
|
||||
DEC B
|
||||
LD DE,#4000
|
||||
JR NZ,.notLastBlock
|
||||
;
|
||||
LD DE,(MemBuffer.LastFilePageSize)
|
||||
.notLastBlock: LD A,(HL)
|
||||
OUT (SLOT3),A
|
||||
LD HL,#C000
|
||||
.DEST_FILE+1: LD A,0
|
||||
LD C,Dss.Write
|
||||
DEST_FILE+1: LD A,0
|
||||
RST ToDSS
|
||||
POP BC
|
||||
POP HL
|
||||
RET C
|
||||
;
|
||||
INC HL
|
||||
DJNZ .loop
|
||||
;CF=0
|
||||
RET
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
;
|
||||
|
||||
BEGIN_COPY: CALL READ_FILE_BLOCK
|
||||
JR C,RD_ERROR
|
||||
;
|
||||
CALL WRITE_FILE_BLOCK
|
||||
JR C,WR_ERROR
|
||||
LD A,B
|
||||
OR A
|
||||
JR Z,RW_LOOP
|
||||
;
|
||||
LD A,(MemBuffer.EndCopyLoop)
|
||||
AND A
|
||||
JR Z,BEGIN_COPY
|
||||
;
|
||||
;
|
||||
; ¤ â ¨ ¢à¥¬ï
|
||||
LD A,(SOURCE_FILE)
|
||||
LD A,(READ_FILE_BLOCK.SOURCE_FILE)
|
||||
LD C,Dss.Get_D_T
|
||||
RST ToDSS
|
||||
LD A,(DEST_FILE)
|
||||
LD A,(WRITE_FILE_BLOCK.DEST_FILE)
|
||||
LD C,Dss.Put_D_T
|
||||
RST ToDSS
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
XOR A ;EXITCODE
|
||||
LD (EXITCODE),A
|
||||
@ -236,7 +312,7 @@ PRINT_ERROR: LD H,0
|
||||
;CALL hex2dec_ascii_16bit
|
||||
; ¢å®¤: hl=ç¨á«®, de=¡ãä¥à
|
||||
hex2dec_ascii_16bit:
|
||||
.n100: LD IX,tmp1
|
||||
.n100: LD IX,MemBuffer.tmp1
|
||||
RES 7,(ix+0)
|
||||
.skip2: LD BC,100
|
||||
CALL .num16
|
||||
@ -274,10 +350,27 @@ READ_ERR_STR: DB "Reading error "
|
||||
WRITE_ERR_STR: DB "Writing error "
|
||||
.errNum: DB "00 ",#0D,#0A,#00
|
||||
;
|
||||
|
||||
|
||||
|
||||
STRUCT Variables
|
||||
.tmp1 BYTE
|
||||
.FilePagesCounter BYTE
|
||||
.EndCopyLoop BYTE
|
||||
.LastFilePageSize WORD
|
||||
.MemPages BLOCK 256
|
||||
.BSOURCE BLOCK 257
|
||||
.BDESTN BLOCK 257
|
||||
ENDS
|
||||
|
||||
MemBuffer: Variables = $
|
||||
|
||||
|
||||
;
|
||||
tmp1: EQU $
|
||||
BSOURCE: EQU tmp1 + 1
|
||||
BDESTN: EQU BSOURCE + 257
|
||||
; tmp1: EQU $
|
||||
; MemPages: EQU tmp1 + 1
|
||||
; BSOURCE: EQU MemPages + 256
|
||||
; BDESTN: EQU BSOURCE + 257
|
||||
;[END]=====================================================
|
||||
/*
|
||||
;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user