commit 3e49b7d70281b1ac6c966e0d2453e9210d2a8b33 Author: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Thu May 29 23:05:33 2025 +1000 init diff --git a/Copy.asm b/Copy.asm new file mode 100644 index 0000000..d7183e0 --- /dev/null +++ b/Copy.asm @@ -0,0 +1,312 @@ +;[BEGIN]=================================================== +; +; COPY.EXE +; COPY [source file] [destination file] + + + +; +; Compilation parameters +;---------------------------------------------------------------------[] +;DEVICE SPRINTER +;MMU 2 e, 0 ; нулевая страница в банку 2 и проверка на границы +;OUTPUT './Build/new.bin' +;---------------------------------------------------------------------[] +; + + +; +; Defines section +;---------------------------------------------------------------------[] +; define EMULATOR 0 + define EXE_HEADER 1 +; define NEED_LOADER 1 +; define NeedSafePort_Y 0 + define App_EXE_Version 1 +;---------------------------------------------------------------------[] +; + + +; +; Included LUA section +;---------------------------------------------------------------------[] +; includelua +;---------------------------------------------------------------------[] +; + + + +; +; Included constants section +;---------------------------------------------------------------------[] + include 'Shared_Includes/constants/sp2000.inc' + include 'Shared_Includes/constants/dss_equ.inc' + include 'Shared_Includes/constants/BIOS_equ.inc' +;---------------------------------------------------------------------[] +; + + +; +; Included macroses section +;---------------------------------------------------------------------[] +; include 'Shared_Includes/macroses/macros.z80' +; include 'Shared_Includes/macroses/accelerator.z80' +;---------------------------------------------------------------------[] +; + + +; +; Standart EQU section +;---------------------------------------------------------------------[] +org_addr EQU #8000 + CLP_Buffer +code_addr EQU START +stack_point EQU #C000 +stack_buffer EQU 64 +program_start EQU START +Loader_length EQU 0 +;---------------------------------------------------------------------[] + + +; +; Code start section +;[]-------------------------------------------------------------------[] + include 'Shared_Includes/constants/EXE_Header.z80' + ORG org_addr + + +; ORG #8100-24 +; ; INCLUDE "dss.inc" +; ;==EXE HEADER ============================================= +; DB "EX" ;EXE ID +; DB #45 ;EXE TYPE +; DB #01 ;EXE VERSION +; DW 24 ;CODE OFFSET LOW WORD +; DW #0000 ;CODE OFFSET HIGH WORD +; DW #0000 ;PRIMARY LOADER +; DW #0000 ;RESERVED +; DW #0000 ;RESERVED +; DW #0000 ;RESERVED +; DW START ;LOAD ADDRESS +; DW START ;START ADDRESS +; DW #C000 ;STACK ADDRESS +; DS 2 ;RESERVED +; ;========================================================== + +START: XOR A + LD (BSOURCE),A + LD (BDESTN),A + ; + PUSH IX + LD BC,256*1 + Dss.GetMem + RST ToDSS + JR NC,.mem_OK + ; + LD HL,NO_MEM_STR + LD C,Dss.PChars + RST ToDSS + LD BC,256*DSS_Error.sys.NOT_ENOUGH_MEMORY + Dss.Exit + RST ToDSS ; error exit + ;;;;;;;;;;;;;;;;;;;;;;;;; + ; + ; +.mem_OK: OUT (SLOT3),A + POP HL + INC HL + LD DE,BSOURCE + LD C,Dss.GSwitch + RST ToDSS + LD DE,BDESTN + LD C,Dss.GSwitch + RST ToDSS + ; + LD HL,BSOURCE + LD BC,Dss.Attrib.Get + RST ToDSS + LD (FATTR),A + ; + LD A,Dss.Open.R + LD HL,BSOURCE + LD C,Dss.Open + RST ToDSS + LD (SOURCE_FILE),A + JR NC,.SOURCE_OK + ; + LD (EXITCODE),A + LD HL,SOPEN_ERR_STR + ; LD C,Dss.PChars + ; RST ToDSS + JR QUIT + ;;;;;;;;;;;;;;;;;;;;;;;;; + ; + ; +.SOURCE_OK: LD HL,BDESTN +FATTR+1: LD A,FAT_ATTR.ARCHIVE + LD C,Dss.Creat_N + RST ToDSS + LD (DEST_FILE),A + JR NC,RW_LOOP + ; + LD (EXITCODE),A + LD HL,DOPEN_ERR_STR + ; LD C,Dss.PChars + ; RST ToDSS + JR QUIT + ;;;;;;;;;;;;;;;;;;;;;;;;; + ; + ; + ; + ; +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 C,Dss.Write +DEST_FILE+1: LD A,0 + RST ToDSS + POP BC + JR C,WR_ERROR + LD A,B + OR A + JR Z,RW_LOOP + ; + ; дата и время + LD A,(SOURCE_FILE) + LD C,Dss.Get_D_T + RST ToDSS + LD A,(DEST_FILE) + LD C,Dss.Put_D_T + RST ToDSS + ; + ; + XOR A ;EXITCODE + LD (EXITCODE),A + ; + LD HL,DONE_STR +QUIT: LD C,Dss.PChars + RST ToDSS + LD C,Dss.Exit +EXITCODE+1: LD B,0 + RST ToDSS + ;;;;;;;;;;;;;;;;;;;;;;;;; + ; + ; +; QUIT_3: LD C,#12 +; LD A,(DEST_FILE) +; RST ToDSS +; QUIT_2: LD C,#12 +; LD A,(SOURCE_FILE) +; RST ToDSS +; JR QUIT + ;;;;;;;;;;;;;;;;;;;;;;;;; + ; + ; +RD_ERROR: CALL PRINT_ERROR + ; + LD HL,READ_ERR_STR + ; LD C,Dss.PChars + ; RST ToDSS + JR QUIT + ;;;;;;;;;;;;;;;;;;;;;;;;; + ; + ; +WR_ERROR: CALL PRINT_ERROR + ; + LD HL,WRITE_ERR_STR + ; LD C,Dss.PChars + ; RST ToDSS + JR QUIT + ;;;;;;;;;;;;;;;;;;;;;;;;; + ; + ; +; QUIT: LD C,Dss.Exit +; EXITCODE+1: LD B,0 +; RST ToDSS +; ;;;;;;;;;;;;;;;;;;;;;;;;; +; ; +; ; +PRINT_ERROR: LD H,0 + LD L,A + LD (EXITCODE),A + LD DE,READ_ERR_STR.errNum + ;CALL hex2dec_ascii_16bit +; вход: hl=число, de=буфер +hex2dec_ascii_16bit: +.n100: LD IX,tmp1 + RES 7,(ix+0) +.skip2: LD BC,100 + CALL .num16 + ; +.decim: LD BC,10 + CALL .num16 + LD A,L + ADD A,"0" + JR .num16_exit + ; +.num16: LD A,'0'-1 + AND A + INC A + SBC HL,BC + JR NC,$-3 ;!FIXIT $ + ADD HL,BC + CP "0" + JR Z,$+6 ;!FIXIT $ + SET 7,(ix+0) + BIT 7,(ix+0) + RET Z +.num16_exit: + LD (DE),A ; сохр. в буфере + INC DE + RET + ;;;;;;;;;;;;;;;;;;;;;;;;; + ; + ; +DONE_STR: DB "File copied",#0D,#0A,#00 +NO_MEM_STR: DB "No free memory",#0D,#0A,#00 +SOPEN_ERR_STR: DB "Can't open source file",#0D,#0A,#00 +DOPEN_ERR_STR: DB "Can't open destination file",#0D,#0A,#00 +READ_ERR_STR: DB "Reading error " +.errNum: DB "00",#0D,#0A,#00 +WRITE_ERR_STR: DB "Writing error " +.errNum: DB "00 ",#0D,#0A,#00 +; +; +tmp1: EQU $ +BSOURCE: EQU tmp1 + 1 +BDESTN: EQU BSOURCE + 257 +;[END]===================================================== +/* + ; + ; +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 C,Dss.Write +DEST_FILE+1: LD A,0 + RST ToDSS + POP BC + JR C,WR_ERROR + LD A,B + OR A + JR Z,RW_LOOP + ; + ; дата и время + LD A,(SOURCE_FILE) + LD C,Dss.Get_D_T + RST ToDSS + LD A,(DEST_FILE) + LD C,Dss.Put_D_T + RST ToDSS + ; + ; +*/ \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes new file mode 160000 index 0000000..be5eed4 --- /dev/null +++ b/Shared_Includes @@ -0,0 +1 @@ +Subproject commit be5eed466fa1c0e442b828a42ffc1b9abda23ac9