This commit is contained in:
Tolik 2025-05-29 23:05:33 +10:00
commit 3e49b7d702
2 changed files with 313 additions and 0 deletions

312
Copy.asm Normal file
View File

@ -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 <Shared_Includes/LUA/Functions.LUA>
;---------------------------------------------------------------------[]
;
;
; 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
;
;
*/

1
Shared_Includes Submodule

@ -0,0 +1 @@
Subproject commit be5eed466fa1c0e442b828a42ffc1b9abda23ac9