Initial commit

This commit is contained in:
Anatoliy Belyanskiy 2023-06-15 02:40:28 +10:00
commit cf4295cc85
12 changed files with 4068 additions and 0 deletions

4
.gitmodules vendored Normal file
View File

@ -0,0 +1,4 @@
[submodule "Shared_Includes"]
branch = main
path = Shared_Includes
url = https://github.com/Tolik-Trek/Shared_Includes.git

View File

@ -0,0 +1,408 @@
---@diagnostic disable: undefined-global
-- []===========================[]
-- ¯à¥¢à é ¥â "YYYY-MM-DD" ¢ "DD", "MM", "YYYY"
function Get_date_RU(str_date)
return string.char(string.byte(str_date,10), string.byte(str_date,11)), string.char(string.byte(str_date,7), string.byte(str_date,8)), string.char(string.byte(str_date,2), string.byte(str_date,3), string.byte(str_date,4), string.byte(str_date,5))
end
-- []===========================[]
-- []===========================[]
function Get_file_data(fname)
-- 㡨ࠥ¬ ¨§ ¤¥ä ©­ _¯ãâ¨_ä ©«  ¢á直¥ â ¡ë ¨ ¯à®¡¥«ë «¨è­¨¥. <20>ãâì ¤®«¦¥­ ¡ëâì ®¡à ¬«ñ­ ®¤¨­ à­ë¬¨ ª ¢ë窠¬¨
fname = string.gsub(string.match(fname, '\'.*\''), "'", "")
local file = assert(io.open(fname, "rb"))
local data = file:read("*all")
file:close()
return data
end
-- []===========================[]
-- []===========================[]
-- ¢®§¢à é ¥â ç¨á«® ¨§ áâப¨ ¨«¨ ä ©«  § ¤ ­­®© à §¬¥à­®áâ¨
-- get_number (file, offset, bytes)
function Get_number (str,offset, bytes)
local factor = 1
local number = 0
if bytes > 8 then
sj.error("error in function 'get_number' with variable 'bytes'", bytes)
sj.exit(1)
end
for i = offset, offset+bytes-1, 1 do
number = number + str:byte(i) * factor
factor = factor * 256
end
return number
end
-- []===========================[]
-- []===========================[]
-- áç¨â ¥â ª®­â஫ì­ãî á㬬㠤«ï ä ©« 
-- get_checksum(FileName, FileLength)
function Get_checksum(fname, fStart, fLength)
local reg_b = 0
local reg_c = 0
local reg_d = 0
local reg_e = 0
local data = Get_file_data(fname)
fLength = tonumber(fLength)
if (fLength == 0) or (fLength == nil) then fLength = data:len() end
if (fStart == 0) or (fStart == nil) then fStart = 1 end
-- <09> áçñâ ª®­â஫쭮© á㬬ë (ॣ¨áâàë BC - ¬« ¤è¨© ¨ DE - áâ à訩):
--print(fname, "fStart", fStart, "fLength", fLength)
for i = fStart, fLength, 1 do
reg_c = reg_c + data:byte(i)
if reg_c > 255 then
reg_c = reg_c - 256
reg_b = reg_b + data:byte(i)
if reg_b > 255 then
reg_b = reg_b - 256
reg_e = reg_e + data:byte(i)
if reg_e > 255 then
reg_e = reg_e - 256
reg_d = reg_d + data:byte(i)
if reg_d > 255 then
reg_d = reg_d - 256
end
end
end
end
--print (string.format("%x",i-1), string.format("%x", reg_d*16777216+reg_e*65536+reg_b*256+reg_c))
end
return reg_d*16777216+reg_e*65536+reg_b*256+reg_c
end
-- []===========================[]
-- []===========================[]
-- ¤®áâ ñâ ¨§ BMP-8bit à §à¥è¥­¨¥, à §¬¥à à áâà , ᬥ饭¨¥ à áâà , ª®«-¢® 梥⮢
function Get_bmp8bit_values(fname)
local TBitMapFileHeader = {
bfType = 0+1,
bfSize = 2+1,
bfOffBits = 10+1
}
local TBitmapInfoHeader = {
biSize = 0+14+1,
biWidth = 4+14+1,
biHeight = 8+14+1,
biplanes = 12+14+1,
biBitCount = 14+14+1,
biCompression = 16+14+1,
biSizeImage = 20+14+1,
biXPelsPerMeter = 24+14+1,
biYPelsPerMeter = 28+14+1,
biClrUsed = 32+14+1,
biClrImportant = 36+14+1
}
local bmp_height, bmp_width, bmp_image_size, bmp_colors, bmp_image_offset, temp_variable
local data = Get_file_data(fname)
temp_variable = Get_number (data,TBitMapFileHeader.bfType, 2)
if temp_variable ~= 19778 then
sj.error("error, not BMP file")
sj.exit(1)
end
temp_variable = Get_number(data, TBitmapInfoHeader.biSize, 4)
if temp_variable ~= 40 then
sj.error("error, unsupported DIB header", temp_variable)
sj.exit(1)
end
temp_variable = Get_number (data,TBitmapInfoHeader.biBitCount, 2)
if temp_variable > 8 then
sj.error("error in BMP file, not 8-bit pallete, but", temp_variable)
sj.exit(1)
end
bmp_height = Get_number (data, TBitmapInfoHeader.biHeight, 4)
--[[
if bmp_height > 256 then
sj.error("error in BMP file, max height is 256, but", bmp_height)
sj.exit(1)
end
]]--
bmp_width = Get_number(data, TBitmapInfoHeader.biWidth, 4)
--[[
if bmp_width > 320 then
sj.error("error in BMP file, max width is 320, but", bmp_width)
sj.exit(1)
end
]]--
bmp_image_offset = Get_number(data, TBitMapFileHeader.bfOffBits, 4)
bmp_image_size = bmp_height * bmp_width
bmp_colors = (Get_number (data, TBitMapFileHeader.bfOffBits, 4) - Get_number (data, TBitmapInfoHeader.biSize, 4) - (TBitmapInfoHeader.biSize - 1))/4
return bmp_width, bmp_height, bmp_image_size, bmp_image_offset, bmp_colors
end
-- []===========================[]
-- []===========================[]
function Detect_os()
local BinaryFormat = package.cpath:match("%p[\\|/][?]%p(%a+)")
if BinaryFormat == "dll" then return "Windows" elseif
BinaryFormat == "dylib" then return "MacOS" elseif
BinaryFormat == "so" then
if (os.execute("test -e /sbin/dynamic_pager")) then return "MacOS"
else return "Linux"
end
else
print("--[ ERROR! OS is not detected!!! ]--")
os.exit(1)
end
end
-- []===========================[]
-- []===========================[]
function File_save(fname, new_fname, offset, size, fstep, fskip)
if (fstep and fskip) == nil then fstep = 0 fskip = 0 end
local data = Get_file_data(fname)
local file = assert(io.open(new_fname, "w+b"))
if (io.type(file) == "file" ) then
if fstep + fskip ~= 0 then
local i = offset + 1
repeat
file:write(string.sub(data, i, i+fstep-1))
i = i+fstep+fskip
until i >= (offset + 1 + size - 1)
file:close()
return true
else
file:write(string.sub(data, offset+1, offset+1+size-1))
file:close()
return true
end
else
file:close()
return false
end
end
-- []===========================[]
-- []===========================[]
function Get_Full_Filename(pname, fname, OStype)
-- 㡨ࠥ¬ ¨§ ¤¥ä ©­ _¯ãâ¨_ä ©«  ¢á直¥ â ¡ë ¨ ¯à®¡¥«ë «¨è­¨¥. <20>ãâì ¤®«¦¥­ ¡ëâì ®¡à ¬«ñ­ ®¤¨­ à­ë¬¨ ª ¢ë窠¬¨
local psep = "/"
fname = string.gsub(string.match(fname, '\'.*\''), "'", "")
pname = string.gsub(string.match(pname, '\'.*\''), "'", "")
return (pname .. psep .. fname)
--print (fname, pname)
end
-- []===========================[]
-- []===========================[]
function INCLUDING_INFO_START()
-- {ii_parent_num} = ii_count
-- {ii_parent_num, ii_nested_level, ii_file_name, ii_start_addr, ii_end_addr, ii_its_size}
-- {ii_parent_num, ii_nested_level, ii_file_name, ii_start_addr, ii_end_addr, ii_its_size}
-- {ii_parent_num} = ii_count
-- {ii_parent_num, ii_nested_level, ii_file_name, ii_start_addr, ii_end_addr, ii_its_size}
-- {ii_parent_num, ii_nested_level, ii_file_name, ii_start_addr, ii_end_addr, ii_its_size}
--ii_parent_num = 1
ii_nested_level = 1
ii_file_name = 2
ii_start_addr = 3
ii_end_addr = 4
ii_its_size = 5
ii_array = {} -- nest level, data
ii_count = 0
ii_nest = {}
ii_nest_count = 0
ii_tmp_nested_level = -1
end
-- []---------------------------[]
function INCLUDING_INFO_ADDstart()
local temp_cnt = tonumber(sj.get_define("__INCLUDE_LEVEL__"))
if temp_cnt < ii_tmp_nested_level then
print("Error in script INCLUDING_INFO_ADDstart: new nesting < old nesting\r\n","File: " .. sj.get_define("__FILE__"), "Line: " .. sj.get_define("__LINE__"))
sj.exit(1)
elseif temp_cnt > 20 then
print("Error in script INCLUDING_INFO_ADDstart: current nesting > 20\r\n","File: " .. sj.get_define("__FILE__"), "Line: " .. sj.get_define("__LINE__"))
sj.exit(1)
end
ii_array[ii_count] = {--ii_count, -- ii_parent_num
temp_cnt, -- ii_nested_level
sj.get_define("__FILE__"),
sj.current_address,
0,0
}
ii_nest[ii_nest_count] = ii_count
ii_nest_count = ii_nest_count+1
ii_count = ii_count + 1
ii_tmp_nested_level = temp_cnt
end
-- []---------------------------[]
function INCLUDING_INFO_ADDend()
local temp_cnt = tonumber(sj.get_define("__INCLUDE_LEVEL__"))
if temp_cnt > ii_tmp_nested_level then
print("Error in script INCLUDING_INFO_ADDend: current nesting > old nesting\r\n","File: " .. sj.get_define("__FILE__"), "Line: " .. sj.get_define("__LINE__"))
sj.exit(1)
end
ii_nest_count = ii_nest_count-1
temp_cnt = ii_nest[ii_nest_count]
ii_array[temp_cnt][ii_end_addr] = sj.current_address
ii_array[temp_cnt][ii_its_size] = sj.current_address - ii_array[temp_cnt][ii_start_addr]
ii_tmp_nested_level = ii_array[temp_cnt][ii_nested_level]
end
-- []---------------------------[]
function INCLUDING_INFO_END()
local nest_sting_start = "Àó"
local nest_sting_line = "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"
local previous_nest = 0
print(" File\t\t\t\t\t","Start \tEnd \tSize ")
for i = 0, ii_count-1, 1 do
--print(tostring(ii_array[i][ii_nested_level]) .. " " .. ii_array[i][ii_file_name]:sub(ii_array[i][ii_file_name]:find("/")+1,-1),"\r\t\t\t\t\t", tostring(ii_array[i][ii_start_addr]), tostring(ii_array[i][ii_end_addr]), tostring(ii_array[i][ii_its_size]))
print(tostring(ii_array[i][ii_nested_level]) .. " " .. ii_array[i][ii_file_name]:sub(ii_array[i][ii_file_name]:find("/")+1,-1),"\r\t\t\t\t\t", string.format("%X",ii_array[i][ii_start_addr]), string.format("%X",ii_array[i][ii_end_addr]), tostring(ii_array[i][ii_its_size]))
end
end
-- []===========================[]
-- []===========================[]
function Hrust_File(cmdLine, firstPath, secondPath, firstName, secondName)
cmdLine = string.gsub(string.match(cmdLine, '\'.*\''), "'", "")
firstPath = string.gsub(string.match(firstPath, '\'.*\''), "'", "")
secondPath = string.gsub(string.match(secondPath, '\'.*\''), "'", "")
firstName = string.gsub(string.match(firstName, '\'.*\''), "'", "")
secondName = string.gsub(string.match(secondName, '\'.*\''), "'", "")
local fullCmdLine = cmdLine .. firstPath .. firstName .. " " .. secondPath .. secondName
print(fullCmdLine)
end
-- []===========================[]
-- []===========================[]
-- Š®­¢¥àâ¨â ç¨á«® ¢ áâப㠥£® ¤¢®¨ç­®£® ¯à¥¤áâ ¢«¥­¨ï. bits - à §à來®áâì, ¥á«¨ ç¨á«® ¡®«ìè¥,
-- 祬 à §à來®áâì ¤«ï ¯à¥¤áâ ¢«¥­¨ï í⮣® ç¨á« , â® ¡ã¤¥â ¡ £
function Number2Binary(n, bits)
bits = bits-1
local t = {}
for i = bits, 0, -1 do
t[#t+1] = math.floor(n/2^i)
n = n%2^i
end
return table.concat(t)
end
-- []===========================[]
-- []===========================[]
function DCP_Page2Table (DCP_PAGE)
local portsTable = {}
local bitAddress = 0
local bitTMPor = 0
local bitMask = 0
local CNFadr = 0
local CNFadrEnd = 0
for Altera_Port = 1, 0xFF, 1 do
for CNF = 0, 3, 1 do
CNFadr = 1 + CNF * 0x1000
CNFadrEnd = CNFadr + 0x0FFF
bitAddress = 0
bitTMPor = 0
for address = CNFadr, CNFadrEnd, 1 do
if (DCP_PAGE:byte(address) == Altera_Port) then
if bitAddress == 0 then
bitAddress = (address-1)
bitTMPor = (address-1)
else
bitAddress = bitAddress & (address-1)
bitTMPor = bitTMPor | (address-1)
end
end
end
if (bitAddress ~= 0) then
bitMask = ~bitAddress ~ bitTMPor
bitMask = bitMask & 0x3FFF
portsTable[#portsTable+1] = bitAddress
portsTable[#portsTable+1] = bitMask
portsTable[#portsTable+1] = Altera_Port
end
end
end
return portsTable
end
-- []===========================[]
-- []===========================[]
function Generate_DCPASM_fromPAGE (DCP_Page_file, DCP_new_ASM)
-- ¯®«ãç ¥¬ ¯®àâë ¨§ ä ©« 
print(DCP_Page_file)
print(DCP_new_ASM)
local data = Get_file_data(DCP_Page_file)
DCP_TABLE = DCP_Page2Table(data)
-- ®âªà뢠¥¬ ä ©« ­  § ¯¨áì
local DCP_TABLE_CODE
-- 㡨ࠥ¬ ¨§ ¤¥ä ©­ _¯ãâ¨_ä ©«  ¢á直¥ â ¡ë ¨ ¯à®¡¥«ë «¨è­¨¥. <20>ãâì ¤®«¦¥­ ¡ëâì ®¡à ¬«ñ­ ®¤¨­ à­ë¬¨ ª ¢ë窠¬¨
DCP_new_ASM = string.gsub(string.match(DCP_new_ASM, '\'.*\''), "'", "")
DCP_TABLE_CODE = assert(io.open(DCP_new_ASM, "w+"))
-- è ¯ª 
assert(DCP_TABLE_CODE:write(';', '\r\n'))
assert(DCP_TABLE_CODE:write(';-----------------------------------------------------------------------;', '\r\n', '\r\n'))
-- â ¡«¨æ 
for i = 1, #DCP_TABLE, 3 do
assert(DCP_TABLE_CODE:write(';', '\r\n'))
assert(DCP_TABLE_CODE:write(' DW %', Number2Binary(DCP_TABLE[i], 14), '\r\n'))
assert(DCP_TABLE_CODE:write(' DW %', Number2Binary(DCP_TABLE[i+1], 14), '\r\n'))
assert(DCP_TABLE_CODE:write(' DB #', string.format("%X",DCP_TABLE[i+2]), '\r\n'))
end
-- ¯®¤¢ «
assert(DCP_TABLE_CODE:write('; DCP END MARKER', '\r\n'))
assert(DCP_TABLE_CODE:write(' DW 0,0,0', '\r\n'))
assert(DCP_TABLE_CODE:write(';-----------------------------------------------------------------------;', '\r\n'))
assert(DCP_TABLE_CODE:write(';'))
-- § ªàë⨥ ä ©« 
assert(DCP_TABLE_CODE:flush())
assert(DCP_TABLE_CODE:close())
end
-- []===========================[]

View File

@ -0,0 +1,197 @@
; ‘âப  ID ¡ãâ«® ¤¥à 
MACRO _mSYSID
DZ 'Starting...'
ENDM
;
;[‚ë§®¢ ä㭪権 .-------------------
ToBIOS EQU #08
ToBIOS_18 EQU #18
ToBIOS_3D13 EQU #3D13
ToBIOS_FromEXT EQU #3FD0
;---------------------------------------
BIOS:
;[”㭪樨 à ¡®âë á ¯ ¬ïâìî]-------------
.GetMemSize EQU #C0 ;#90 ; Ž¯à¥¤¥«¥­¨¥ ®¡ê¥¬®¢ އ“
.InitMem EQU #C1 ;#91 ; ˆ­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
.GetMem EQU #C2 ; ‚뤥«¥­¨¥ ¡«®ª  އ“
.FreeMem EQU #C3 ; Žá¢®¡®¤¨âì ¡«®ª އ“
.GetMemPage EQU #C4 ; <20>®«ãç¨âì 䨧¨ç¥áª¨© ­®¬¥à áâà ­¨æë ¨§ ¡«®ª  ¯ ¬ïâ¨
.GetMemBlkPages EQU #C5 ; <20>®«ãç¨âì ᯨ᮪ 䨧¨ç¥áª¨å áâà ­¨æ ¡«®ª 
.GetBanksPorts EQU #C6 ; <20>®«ã祭¨¥  ¤à¥á®¢ ¯®à⮢ ®ª®­
.GetMemPageNext EQU #C7 ; <20>®«ãç¨âì ­®¬¥à á«¥¤ãî饩 áâà ­¨æë ¡«®ª  ¯® ¯à¥¤ë¤ã饬ã ü
;.GET_RAMD_NUM EQU #9B ; <20>®«ãç¨âì ­®¬¥à RAM-Disk-  (0..15) ¯® ¥£® block id
.DivMemBlocks EQU #9D ; <20> §¤¥«¥­¨¥ ¡«®ª 
.MergeMemBlocks EQU #9E ; ‘«¨ï­¨¥ ¡«®ª®¢
;---------------------------------------
;[<EFBFBD> ¡®â  á ¡«®ª ¬¨ އ“, ª ª á RAM-Disks]
.BLK_RD_WR EQU #C8 ; —⥭¨¥/§ ¯¨áì ¨§/¢ ¡«®ª ¯ ¬ï⨠ᥪâ®à ¬¨ ¯® 256 ¡ ©â
.GetMemRMD EQU #92 ; <20>®«ãç¨âì ¡«®ª ¯ ¬ï⨠N bytes ¤«ï RAM-Disk' 
.FreeMemRMD EQU #93 ; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ï⨠¤«ï RAM-Disk' 
.GetMemPageRMD EQU #94 ; <20>®«ãç¨âì 䨧¨ç¥áª¨© ­®¬¥à áâà ­¨æë RAM-Disk' 
.RAMD_CALC_PAGE EQU #98 ; ‚ëç¨á«¥­¨¥ áâà ­¨æë ¨  ¤à¥á  ¢ RAM-Disk ¯®  ¡á®«îâ­®¬ã ­®¬¥àã ᥪâ®à 
.BLK_TO_RAMD EQU #C9 ; <20> §­ ç¨âì ¡«®ª ¯ ¬ï⨠RAM-Disk-ã
.RAMD_CLEAR EQU #CA ; Žá¢®¡®¤¨âì RAM-Disk
.GET_RAMD_ST EQU #CE ; <20>®«ã祭¨¥ ¨¤¥­â¨ä¨ª â®à  ¡«®ª , ­ §­ ç¥­­®£® ­  RAM-Disk
;---------------------------------------
;[“¯à ¢«¥­¨¥ ­ §­ ç¥­¨¥¬ ­  ¤¨áª®¢®¤ë]--
.RAMD_TO_DRV EQU #CB ; <20> §­ ç¥­¨¥ RAM-Disk ­  ¤¨áª®¢®¤ TR-DOS
.FDD_TO_DRV EQU #CC ; <20> §­ ç¥­¨¥ 䨧¨ç¥áª®£® ¤¨áª®¢®¤  ­  «®£¨ç¥áª¨©
.HDD_TO_DRV EQU #CD ; <20> §­ ç¥­¨¥ ¢¨­ç¥áâ¥à  ­  ¤¨áª®¢®¤
.GET_DRV_ST EQU #CF ; <20>®«ãç¨âì ⨯ ­ §­ ç¥­¨ï ­  «®£¨ç¥áª¨© ¤¨áª®¢®¤
;---------------------------------------
;[“¯à ¢«¥­¨¥ ®ª­ ¬¨ ¨ ०¨¬ ¬¨ íªà ­ ]--
.WIN_OPEN EQU #B0 ; ”ã­ªæ¨ï ®âªàëâ¨ï ®ª­ .
.WIN_CLOSE EQU #B1 ; § ªàë⨥ ®ª­ 
.WIN_COPY EQU #B2 ; Š®¯¨à®¢ ­¨¥ ¤ ­­ëå ⥪á⮢®£® ®ª­  ¢ ¯ ¬ïâì (§ ¯®¬¨­ ­¨¥ ®ª­ )
.WIN_RESTORE EQU #B3 ; Š®¯¨à®¢ ­¨¥ ¨§ ¯ ¬ï⨠¢ ⥪á⮢®¥ ®ª­® (¢®ááâ ­®¢«¥­¨¥ ®ª­ )
.WIN_GET_SYM EQU #B4 ; ‚§ïâì ᨬ¢®« á íªà ­ 
.WIN_PUT_SYM EQU #B5 ; <20>®«®¦¨âì ᨬ¢®« ­  íªà ­
.WIN_SET_ZG EQU #B6 ; ãáâ ­®¢ª  §­ ª®£¥­¥à â®à 
.WIN_MOVE EQU #B7 ; <20>¥à¥¬¥é¥­¨¥ ®ª­ 
.WIN_GET_ZG EQU #B8 ; <20>®«ã祭¨¥ §­ ª®£¥­¥à â®à 
;---------------------------------------
;[”㭪樨 ¯¥ç â¨ ¨ ã¯à. ०¨¬®¬ íªà ­ ]-
.LP_OPEN_S EQU #80 ; Žâªàë⨥ áâ ­¤ àâ­ëå ®ª®­.
.LP_PRINT_ALL EQU #81 ; <20>¥ç âì ᨬ¢®«®¢ á  âਡã⮬
.LP_PRINT_SYM EQU #82 ; ‚뢮¤ ᨬ¢®«®¢ ­  íªà ­ ¡¥§  âਡãâ 
.LP_PRINT_ATR EQU #83 ; ¯¥ç âì  âਡã⮢
.LP_SET_PLACE EQU #84 ; “áâ ­®¢ª  ⥪ã饣® §­ ª®¬¥áâ  ¢ ®ª­¥
.LP_PRINT_LINE EQU #85 ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣® §­ ª®¬¥áâ 
.LP_PRINT_LINE2 EQU #86 ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ ¡¥§  âਡã⮢
.LP_PRINT_LINE3 EQU #87 ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ¤® à §¤¥«¨â¥«ï
.LP_PRINT_LINE4 EQU #88 ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ¤® à §¤¥«¨â¥«ï, ¡¥§  âਡã⮢
.LP_CLS_WIN EQU #89 ; Žç¨á⪠ íªà ­ 
.LP_SCROLL_UD EQU #8A ; ‘ªà®««¨­£ ç á⨠£«®¡ «ì­®£® ®ª­  ¢¢¥àå/¢­¨§
.LP_PRINT_LINE5 EQU #8B ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ ¤® à §¤¥«¨â¥«ï
.LP_PRINT_LINE6 EQU #8C ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ ¤® à §¤¥«¨â¥«ï ¡¥§  âਡã⮢
.LP_CLS_WIN2 EQU #8D ; Žç¨á⪠ íªà ­  á 㪠§ ­¨¥¬ ᨬ¢®«  § ¯®«­¥­¨ï
.LP_GET_PLACE EQU #8E ; <20>®«ãç¨âì ⥪ã饥 ¯®«®¦¥­¨¥ ¢ë¢®¤  ­  íªà ­
;---------------------------------------
;[ƒà ä¨ç¥áª¨¥ ä㭪樨]------------------
.PIC_POINT EQU #A1 ; “áâ ­®¢¨âì â®çªã
.PIC_SET_PAL EQU #A4 ; “áâ ­®¢ª  ¯ «¨âàë
.SET_PAL_INIT EQU #A6 ; “áâ ­®¢ª  ¢­ãâ७­¥© ¯ «¨âàë
;---------------------------------------
;[<EFBFBD> ¡®â  á HDD. #4X (fast)]-------------
.HDD_INIT EQU #40 ; ˆ­¨æ¨ «¨§ æ¨ï ¢¨­ç¥áâ¥à 
.HDD_RECAL EQU #41 ; <20>¥ª «¨¡à®¢ª  ¢¨­ç¥áâ¥à 
.HDD_TEST_IDE EQU #42 ; ’¥áâ ­ «¨ç¨ï ¨­â¥àä¥©á  IDE
.HDD_PREPARE EQU #43 ; <20>®¤£®â®¢ª  ¢¨­ç¥áâ¥à  ª ®¯¥à æ¨¨ ç⥭¨ï/§ ¯¨á¨
.HDD_READ_BPB EQU #44 ; —¨â âì BPB ¯¥à¢®£® à §¤¥« 
.HDD_READ EQU #45 ; —¨â âì ᥪâ®à  á ¢¨­ç¥áâ¥à 
.HDD_WRITE EQU #46 ; <20>¨á âì ᥪâ®à  ­  ¢¨­ç¥áâ¥à
.HDD_PART EQU #47 ; <20> áâனª  ¯ àâ¨æ¨© ¨ master/slave
.HDD_READ_NEXT EQU #48 ; —¨â âì á«¥¤ãî騩 ᥪâ®à (ONLY FOR LBA!)
;---------------------------------------
;[<EFBFBD> ¡®â  á HDD ¨ ¤¨áª®¢®¤ ¬¨. #5X]------
.DRV_RESET EQU #51 ; ‘¡à®á ª®­â஫«¥à  ¨ ­ áâனª  ­  ¤¨áª
.DRV_READ_LONG EQU #52 ; —⥭¨¥ á ãáâனá⢠¢ 㪠§ ­­ãî áâà ­¨æã
.DRV_WRITE_LONG EQU #53 ; ‡ ¯¨áì ­  ãáâனá⢠ ¢ 㪠§ ­­ãî áâà ­¨æã
.DRV_VERIFY EQU #54 ; <20>஢¥àª  ᥪâ®à®¢
.DRV_READ EQU #55 ; —⥭¨¥ á ãáâனá⢠
.DRV_WRITE EQU #56 ; ‡ ¯¨áì ­  ãáâனá⢠
.DRV_DETECT EQU #57 ; Ž¯à¥¤¥«¥­¨¥ ¯ à ¬¥â஢ ãáâனá⢠
.DRV_GET_PAR EQU #58 ; <20>®«ãç¨âì ¯ à ¬¥âàë ­®á¨â¥«ï
.DRV_SET_PAR EQU #59 ; “áâ ­®¢¨âì ¯ à ¬¥âàë ­®á¨â¥«ï
.EXT_VERSION EQU #5A ; <20>®¬¥à ¢¥àᨨ ¤¨áª®¢®© ᯥæ¨ä¨ª æ¨¨.
.DRV_LIST EQU #5F ; ‘¯¨á®ª ¤¨áª®¢ëå ãáâனáâ¢
;---------------------------------------
;[“¯à ¢«¥­¨¥ ¦¥«¥§®¬, ®¯à. ¢¥àᨨ]------
.FN_TURBO EQU #8F ; ”ã­ªæ¨ï ã¯à ¢«¥­¨ï âãà¡® ०¨¬®¬ ¨ FDD 720/1440
.FN_TURBO.OFF EQU #02
.FN_TURBO.ON EQU #03
.FN_TURBO.VG.OFF EQU #12
.FN_TURBO.VG.ON EQU #13
.CheckInit EQU #97 ; …᫨ ®¡­ à㦥­ ¯¥à¢ë© áâ àâ, â® ¨­¨æ¨ «¨§ æ¨ï ¢á¥© ¯ ¬ïâ¨, á¨á⥬­ëå ¯¥à¥¬¥­­ëå
.FullInit EQU #9F ; ˆ­¨æ¨ «¨§ æ¨ï ¢á¥© ¯ ¬ïâ¨, á¨á⥬­ëå ¯¥à¥¬¥­­ëå
.FN_CRIPT EQU #ED ; ‚ë¤ ç  ¯®«­®£® Board Number
.RST_CONF.AY8910 EQU #EE ; ¤«ï ᮢ¬¥á⨬®á⨠á á®ä⮬ Sp97, ¯¥à¥ª«î祭¨¥ ¢ ª®­äã AY8910
.FN_VERSION EQU #EF ; ‚ë¤ ç  ¨­ä®à¬ æ¨¨ ® ¢¥àᨨ BIOS  ¨ ¦¥«¥§ .
.RST_CONF.SP97_1 EQU #F0 ; ¤«ï ᮢ¬¥á⨬®á⨠á á®ä⮬ Sp97, ¯¥à¥ª«î祭¨¥ ¢ ª®­äã Sprinter-1
.RST_CONF.SP97_2 EQU #F1 ; ¤«ï ᮢ¬¥á⨬®á⨠á á®ä⮬ Sp97, ¯¥à¥ª«î祭¨¥ ¢ ª®­äã Sprinter-2
.FN_SYNC EQU #F2 ; “áâ ­®¢ª  ᨭåà®­¨§ æ¨¨, ®ç¨á⪠ áâà ­¨æë ०¨¬  íªà ­ 
.SPRINTER_ALL EQU #F3 ; ¯¥à¥ª«î祭¨¥ ª®­ä¨£ãà æ¨¨ ¯®«ì§®¢ â¥«ï
.DCP_FN0 EQU #F4 ; ”ã­ªæ¨ï ã¯à ¢«¥­¨ï ¤¥è¨äà â®à®¬ ¯®à⮢. ”ã­ªæ¨ï ¢ à §à ¡®âª¥
.CMOS_TEST EQU #F5 ; <20>஢¥à¨âì ­ «¨ç¨¥ CMOS
.CMOS_RD EQU #F6 ; —¨â âì ¨§ ॣ¨áâà  CMOS
.CMOS_WR EQU #F7 ; <20>¨á âì ¢ ॣ¨áâà CMOS
.SET_PORTS EQU #F8 ; “áâ ­®¢ª  ¢­ãâ७­¨å ¯®à⮢. ”ã­ªæ¨ï ¢ à §à ¡®âª¥
.READ_PORTS EQU #F9 ; —⥭¨¥ ¢­ãâ७­¨å ¯®à⮢. ”ã­ªæ¨ï ¢ à §à ¡®âª¥
.WRITE_PORTS EQU #FA ; ‡ ¯¨áì ¢­ãâ७­¨å ¯®à⮢. ”ã­ªæ¨ï ¢ à §à ¡®âª¥
.GOTO_SPECTRUM EQU #FB
.REINIT EQU #FD ;[x] restart, soft/hard reset, reinit RAM ID for spectrum pages
.REINIT.RESTART EQU #01
.REINIT.SOFT_RESET EQU #02
.REINIT.HARD_RESET EQU #03
.REINIT.SET_ZXPAGES EQU #04
;---------------------------------------
;-----------------------[<EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD>Ž!!!]----------------------
;=============================================================
; ..‚­ãâ७­ïï äã­ªæ¨ï..
; ®âªàëâì £à ä¨ç¥áª®¥ ®ª­®, á ®¯¨á â¥«¥¬ ¢ IX
; ­  ¬¥á⥠HL, E - áâà ­¨æ  ०¨¬ , ᥤ쬮© ¡¨â E - ०¨¬ BOND
.PIC_FN0 EQU #A0
;=============================================================
;=============================================================
; point 3D13h C=0A2h
; ‚›‚Ž„ ˆ<EFBFBD>ˆˆ 'FILL' ¢å®¤: dE - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì.
; IX - ¤«¨­  «¨­¨¨ ¢ â®çª å, A - 梥â
.PIC_FN2 EQU #A2
;=============================================================
;=============================================================
; point 3D13h C=0A3h
; ‚›‚Ž„ ˆ<EFBFBD>ˆˆ 'COPY' ¢å®¤: dE - ¢¥à⨪ «ì, IX - £®à¨§®­â.
; A',HL' -  ¤à¥á ¤ ­­ëå, ®âªã¤  ¡à âì ¤ ­­ë¥
; A' - áâà ­¨æ  RAM-Disk/MEM, HL' -  ¤à¥á ¢ áâà.2
; BC' - ¤«¨­  ¤ ­­ëå
; ‚ë室: HL',A' - á«¥¤ãî騩 ¡ ©â ¢ RAM-Disk !!!
.PIC_FN3 EQU #A3
;=============================================================
;=============================================================
; point 3D13h C=0A5h
; <EFBFBD>ŽŠ€ <EFBFBD><EFBFBD>ˆ ‚›‚Ž„€ <EFBFBD> <EFBFBD>Š<EFBFBD><EFBFBD> ‚室: E = 0/1
.PIC_FN5 EQU #A5
;=============================================================
;=============================================================
; point 3D13h C=0A7h
;////// ­¥¤®¤¥« ­­ ï !!! ////////////////////////////
; <EFBFBD>¨á®¢ ­¨¥ «¨­¨©. - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì
; H' - ¢ëá®â , C'/DE',B' - add_parameters D - color
; C' = 80h, DE' = 0, B'=0 - ¤«ï ¢¥à⨪ «ì­ëå «¨­¨©
; €«£®à¨â¬:
; 1: <EFBFBD>®áâ ¢¨âì â®çªã 梥⮬ D
; HL,C + DE,B -> HL,C
; dec H'
; jr nz,1
.PIC_FN7 EQU #A7
; point 3D13h C=0A8h
.PIC_FN8 EQU #A8
;=============================================================
;=============================================================
;/////// projected !!! ////////////////////////////////
; <EFBFBD>¨á®¢ ­¨¥ á¯à ©â®¢
; E - ¢¥à⨪ «ì, IX - £®à¨§®­â «ì
; D - ª®¤ 㢥«¨ç¥­¨ï/㬥­ì襭¨ï
; B - ã¯à ¢«ïî騩 ª®¤
; 0 - ‚뢮¤ ¯®áâ®ï­­®£® á¯à ©â 
; 1 - ‚뢮¤ ¢à¥¬¥­­®£® á¯à ©â 
; 2 - ‚®ááâ ­®¢«¥­¨¥ ª à⨭ª¨ ¯®¤ ¢à¥¬¥­­ë¬ á¯à ©â®¬
; HL - Special coding data ( ¤ ­­ë¥ á¯à ©â  ä®à¬ , 梥â .. )
; flick-¯®¤®¡­ë© ä®à¬ â
.PIC_FN9 EQU #A9
;=============================================================

View File

@ -0,0 +1,33 @@
;
;***************************************
ORG org_addr - exe_header.length
exe_header equ $
BYTE 'EXE' ; 0-3 EXE ‘¨£­ âãà 
BYTE 0 ; 4 Version of EXE file
DWORD exe_header.length ; 5-6 ª ª®£® ᬥ饭¨ï ¢ ä ©«¥ ¡ã¤¥â £à㧨âìáï ª®¤ ¢
; ; 7-8 ¯ ¬ïâì ¯®  ¤à¥áã (Code_addr) Low addr, High addr.
WORD Loader_length ; 9-10 <20> §¬¥à ¯¥à¢¨ç­®£® § £àã§ç¨ª  ¨«¨ 0
WORD #0000 ; 11-12 Reserved
WORD #0000 ; 13-14 Reserved
WORD #0000 ; 15-16 Reserved
WORD code_addr ; 17-18 €¤à¥á à á¯®«®¦¥­¨ï ª®¤  ¢ ¯ ¬ï⨠(#4100-#FFFF)
WORD program_start ; 19-20 €¤à¥á ¢ ¯ ¬ïâ¨ á ª®â®à®£® § ¯ãáâ¨âáï ª®¤ (Reg. PC)
WORD stack_point ; 21-22 €¤à¥á á⥪  (Reg. SP)
IFDEF EXEinfoMACRO ; 23-512 Œ®¦­® ¨á¯®«ì§®¢ âì ¯®¤ ⥪áâ ¤«ï ¢ë¯¥­¤àñ¦  ¨«¨ ­¥ ¨á¯®«ì§®¢ âì
_mEXEinfo
ENDIF
; <20><>ˆŒ…<C592>:
; BLOCK 10,' ' ; ‚ëà ¢­¨¢ ­¨¥ ¤«ï ªà á¨¢®£® ®â®¡à ¦¥­¨ï ¢ HEX
; BYTE 'Turbo Assembler '
; BYTE ' v 0.71 '
; BYTE 'Coded in 1999 by'
; BYTE ' Enin Anton. '
; BYTE ' Resurrected & '
; BYTE ' modified by '
; BYTE ' Anatoliy '
; BYTE ' Belyanskiy, '
; BYTE ' Sprinter Team '
; BYTE ' 2023 '
.length equ $-exe_header ; !FIXIT   ¥á«¨ ª®¤ ¤«ï § £à㧪¨ ­¥ áà §ã ¯®á«¥ § £®«®¢ª ?
;***************************************
;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,397 @@
;[‚ë§®¢ ä㭪権 DSS]--------------------
ToDSS EQU #10
;---------------------------------------
;---[<EFBFBD>ãä¥à ¯®¤ á«ã¦¥¡­ãî áâபã DSS]----
; Command_Line_parameters (CLP)
; ‘¬¥é¥­¨ï ®â­®á¨â¥«ì­® §­ ç¥­¨ï ¢ IX
; ¯à¨ áâ à⥠EXE ¨§ DSS.
CLP_Buffer EQU 131 ; <EFBFBD>®«­ ï ¤«¨­  ¡ãä¥à 
CLP_FM EQU -3 ; ” ©«®¢ë© ¬ ­¨¯ã«ïâ®à, ¥á«¨ exe-ä ©« á ¯¥à¢¨ç­ë¬ § £àã§ç¨ª®¬
CLP_MemBlockID EQU -2 ; ˆ¤¥­â¨ä¨ª â®à ¡«®ª  ¯ ¬ïâ¨
CLP_ProgLevel EQU -1 ; “஢¥­ì ⥪ã饩 ¯à®£à ¬¬ë
CLP_CLLength EQU 0 ; „«¨­­  ª®¬ ­¤­®© áâப¨
CLP_Parameters EQU 1 ; <EFBFBD> à ¬¥âàë ª®¬ ­¤­®© áâப¨, § ª ­ç¨¢ ¥âáï ­ã«¥¬ (127 bytes)
; (CLP_CLLength) + 3 ; ­ ç «® ¯®«­®£® ¯ã⨠¤® § ¯ã᪠¥¬®£® ¯à¨«®¦¥­¨ï (¢¬¥áâ¥ á ¨¬¥­¥¬ EXE)
;---------------------------------------
;------------[DSS Functions]------------
Dss:
.Version EQU #00
.ChDisk EQU #01
.CurDisk EQU #02
.DskInfo EQU #03
.G_ENTRY EQU #04
; EQU #05
; EQU #06
; EQU #07
; ¢å®¤: ­¥â
; ¢ë室: A - ­®¬¥à ¯®á«¥¤­¥£® «®£. ¤¨áª  ¢ á¨á⥬¥
.RescanDrives EQU #08
.BootDSK EQU #09
;
; File i/o
.Create EQU #0A
.Creat_N EQU #0B
; EQU #0C
.ERASE EQU #0D
.Delete EQU #0E
.Move EQU #0F
.Rename EQU #10
.Open EQU #11
.Open.RW EQU 0
.Open.R EQU 1
.Open.W EQU 2
.Close EQU #12
.Read EQU #13 ; ¯® ¢®§¢à âã ¯à¥à뢠­¨ï ¢á¥£¤  ¢ª«î祭ë
.Write EQU #14
.Move_FP EQU #15
.Move_FP.FrStart EQU 0
.Move_FP.FrCurrent EQU 1
.Move_FP.FrEnd EQU 2
.Attrib EQU #16
.Get_D_T EQU #17
.Put_D_T EQU #18
.F_First EQU #19
.F_Next EQU #1A
.MkDir EQU #1B
.RmDir EQU #1C
.ChDir EQU #1D
.CurDir EQU #1E
; EQU #1F
; EQU #20
.SysTime EQU #21
.SetTime EQU #22
; EQU #23
; EQU #24
; EQU #25
; EQU #26
; EQU #27
; EQU #28
; EQU #29
; EQU #2A
; EQU #2B
; EQU #2C
; EQU #2D
; EQU #2E
; EQU #2F
;
; Keyboard
.WaitKey EQU #30
.ScanKey EQU #31
.EchoKey EQU #32
.CTRLKey EQU #33
.EDIT EQU #34
.K_CLEAR EQU #35
.K_SETUP EQU #36
.TestKey EQU #37
;
; Memory
.SetWin EQU #38
.SetWin1 EQU #39
.SetWin2 EQU #3A
.SetWin3 EQU #3B
.INFOMEM EQU #3C
.GetMem EQU #3D
.FreeMem EQU #3E
.SetMem EQU #3F
;
; Execution
.Exec EQU #40
.Exit EQU #41
.Wait EQU #42
.GSwitch EQU #43
.DosName EQU #44
.EX_Path EQU #45
.EX_Path.GET_ALL EQU 0 ; <EFBFBD> §®¡à âì áâபã
.EX_Path.GET_DRIVE EQU 1 ; ‚뤥«¨âì ¨¬ï ¤¨áª 
.EX_Path.GET_PATH EQU 2 ; ‚뤥«¨âì ¤¨à¥ªâ®à¨î
.EX_Path.GET_NAME EQU 3 ; ‚뤥«¨âì ¨¬ï ä ©« 
.EX_Path.GET_TYPE EQU 4 ; ‚뤥«¨âì à áè¨à¥­¨¥ ä ©« 
.EX_Path.GET_ALL_EX EQU 5 ; ‚뤥«¨âì ¨¬ï ¤¨áª , ¯ãâì ª ä ©«ã, ¨¬ï ä ©«  ¨ à áè¨à¥­¨¥ ä ©« 
.EX_Path.RESR EQU 6 ; ‡ à¥§¥à¢¨à®¢ ­®
.EX_Path.GSWITCH EQU 7 ; ‚뤥«¨âì ¯ à ¬¥âà ª®¬ ­¤­®© áâப¨
.EX_Path.GETNAME EQU 8 ; <EFBFBD>८¡à §®¢ âì ¨§ 11 ᨬ¢®«ì­®£® ä®à¬ â  ¢ ä®à¬ â „Ž‘
.EX_Path.MASK EQU 9 ; <EFBFBD>८¡à §®¢ âì ¨§ ä®à¬ â  „Ž‘ ¢ 11 ᨬ¢®«ì­ë© ä®à¬ â
.Environ EQU #46
.AppInfo EQU #47
; EQU #48
; EQU #49
; EQU #4A
; EQU #4B
; EQU #4C
; EQU #4D
; EQU #4E
; EQU #4F
;
; Video
.SetVMod EQU #50
.SetVMod.txt40x32 EQU 2
.SetVMod.txt80x32 EQU 3
.SetVMod.grf320x256 EQU #81
.SetVMod.grf6400x256 EQU #82
.GetVMod EQU #51
.Locate EQU #52
.Cursor EQU #53
.SelPage EQU #54
.Scroll EQU #55
.Clear EQU #56
.RdChar EQU #57
.WrChar EQU #58
.WinCopy EQU #59
.WinRest EQU #5A
.PutChar EQU #5B
.PChars EQU #5C
;
; Printer
.RES_PRN EQU #5D
.CTRLPRN EQU #5E
.Print EQU #5F
;---------------------------------------
;
;
;------------[Video modes]--------------
DssVmod:
.txt40 EQU #02 ; (02) - ⥪áâ®¢ë© 40x32x16 梥⮢
.txt80 EQU #03 ; (03) - ⥪áâ®¢ë© 80x32x16 梥⮢
.gfx320 EQU #81 ; (129) - £à ä¨ç¥áª¨© 320x256x256 梥⮢
.gfx640 EQU #82 ; (130) - £à ä¨ç¥áª¨© 640x256x16 梥⮢
;---------------------------------------
;
;
;------------[Error codes]--------------
MODULE DSS_Error
sys:
.NO_ERROR EQU #00 ; 00 - ­¥â ®è¨¡®ª
.INVALID_FUNCTION EQU #01 ; 01 - ­¥¢¥à­ë© ­®¬¥à ä㭪樨
.INVALID_DRIVE EQU #02 ; 02 - ­¥¯à ¢¨«ì­ë© ­®¬¥à ãáâனá⢠
.FILE_NOT_FOUND EQU #03 ; 03 - ä ©« ­¥ ®¡­ à㦥­
.PATH_NOT_FOUND EQU #04 ; 04 - ­¥¢¥à­ë© ¯ãâì
.INVALID_HANDLE EQU #05 ; 05 - ­¥áãé¥áâ¢ãî騩 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
.NO_HANDLES EQU #06 ; 06 - ­¥â ᢮¡®¤­®£® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à 
.FILE_EXISTS EQU #07 ; 07 - ä ©« áãé¥áâ¢ã¥â
.READONLY EQU #08 ; 08 - ä ©« ⮫쪮 ¤«ï ç⥭¨ï
.ROOT_OVERFLOW EQU #09 ; 09 - ¯¥à¥¯®«­¥­¨¥ ROOT (ª®à­¥¢®£® ª â «®£ )
.DISK_FULL EQU #0A ; 10 - ­¥â ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥
.DIR_NOT_EMPTY EQU #0B ; 11 - ª â «®£ ­¥ ¯ãáâ
.CURRENT_DIR EQU #0C ; 12 - ¯®¯ë⪠ 㤠«¨âì ⥪ã騩 ª â «®£
.UNKNOWN_FORMAT EQU #0D ; 13 - ­¥¨§¢¥áâ­ë© ä®à¬ â
.INVALID_ACCESS EQU #0E ; 14 - ­¥¢®§¬®¦­ ï ®¯¥à æ¨ï
.DIR_EXISTS EQU #0F ; 15 - ª â «®£ 㦥 ¥áâì
.INVALID_NAME EQU #10 ; 16 - ­¥¢¥à­®¥ ¨¬ï
.INVALID_EXE EQU #11 ; 17 - ­¥¯à ¢¨«ì­ë© EXE-ä ©«
.UNKNOWN_EXE EQU #12 ; 18 - ­¥ ¯®¤¤¥à¦¨¢ ¥¬ ï ¢¥àá¨ï EXE-ä ©« 
.ACCESS_DENIED EQU #13 ; 19 - à¥áãàá ­¥ ¤®áâ㯥­
.NOT_READY EQU #14 ; 20 - ­¥â £®â®¢­®áâ¨
.SEEK_ERROR EQU #15 ; 21 - ®è¨¡ª  ¯®§¨æ¨®­¨à®¢ ­¨ï
.SECTOR_NOT_FOUND EQU #16 ; 22 - ᥪâ®à ­¥ ­ ©¤¥­
.CRC_ERROR EQU #17 ; 23 - ®è¨¡ª  CRC
.WRITE_PROTECT EQU #18 ; 24 - § é¨â  § ¯¨á¨
.READ_ERROR EQU #19 ; 25 - ®è¨¡ª  ç⥭¨ï
.WRITE_ERROR EQU #1A ; 26 - ®è¨¡ª  § ¯¨á¨
;.GENERAL_FAILURE EQU #1B ; 27 - ®¡é ï ®è¨¡ª 
.DRIVE_FAILURE EQU #1B ; 27 - á¡®© ¤¨áª 
;.RESERVED_28 EQU #1C ; 28 - § à¥§¥à¢¨à®¢ ­
;.RESERVED_29 EQU #1D ; 29 - § à¥§¥à¢¨à®¢ ­
.NOT_ENOUGH_MEMORY EQU #1E ; 30 - ­¥¤®áâ â®ç­® ¯ ¬ïâ¨
.INVALID_MEMORY_HND EQU #1F ; 31 - ­¥áãé¥áâ¢ãî騩 ¡«®ª ¯ ¬ïâ¨
;.RESERVED_32 EQU #20 ; 32 - § à¥§¥à¢¨à®¢ ­®
.ENV_ITEM_OVERFLOW EQU #21 ; 33 - ¯à¥¢ë襭 ¬ ªá¨¬ «ì­ë© à §¬¥à ¯¥à¥¬¥­­®©
;.RESERVED_34 EQU #22 ; 34 - § à¥§¥à¢¨à®¢ ­®
.TOO_MANY_FILES_IN_DIR EQU #23 ; 35 - ᫨誮¬ ¬­®£® ä ©«®¢ ¢ ¤¨à¥ªâ®à¨¨
.TOO_DEEP_DIR_DEPTH EQU #24 ; 36 - ᫨誮¬ ¡®«ìè ï ¢«®¦¥­­®áâì ª â «®£®¢ ¨«¨ ª®«¨ç¥á⢮ ¯ ¯®ª > 1023
.USER_ABORT EQU #25 ; 37 - ®¯¥à æ¨ï ¯à¥à¢ ­  ¯®«ì§®¢ â¥«¥¬
.COMMON_ERROR EQU #26 ; 38 - ®¡é ï ®è¨¡ª 
;.RESERVED_39 EQU #27 ; 39 - § à¥§¥à¢¨à®¢ ­®
;.RESERVED_40 EQU #28 ; 40 - § à¥§¥à¢¨à®¢ ­®
;.RESERVED_41 EQU #29 ; 41 - § à¥§¥à¢¨à®¢ ­®
;.RESERVED_42 EQU #2A ; 42 - § à¥§¥à¢¨à®¢ ­®
;.RESERVED_43 EQU #2B ; 43 - § à¥§¥à¢¨à®¢ ­®
;.RESERVED_44 EQU #2C ; 44 - § à¥§¥à¢¨à®¢ ­®
;.RESERVED_45 EQU #2D ; 45 - § à¥§¥à¢¨à®¢ ­®
;.RESERVED_46 EQU #2E ; 46 - § à¥§¥à¢¨à®¢ ­®
;.RESERVED_47 EQU #2F ; 47 - § à¥§¥à¢¨à®¢ ­®
.INVALID_VIDEO_MODE EQU #30 ; 48 - ­¥¯à ¢¨«ì­ë© ¢¨¤¥®à¥¦¨¬
;
drv:
.NO_ERROR EQU #00 ; 00 - NO ERRORS
.INVALID_COMMAND EQU #01 ; 01 - BAD COMMAND
.INVALID_DRIVE EQU #02 ; 02 - BAD DRIVE NUMBER
.UNKNOWN_FORMAT EQU #03 ; 03 - UNKNOW FORMAT
.NOT_READY EQU #04 ; 04 - NOT READY
.SEEK_ERROR EQU #05 ; 05 - SEEK ERROR
.SECTOR_NOT_FOUND EQU #06 ; 06 - SECTOR NOT FOUND
.CRC_ERROR EQU #07 ; 07 - CRC ERROR
.WRITE_PROTECT EQU #08 ; 08 - WRITE PROTECT
.READ_ERROR EQU #09 ; 09 - READ ERROR
.WRITE_ERROR EQU #0A ; 10 - WRITE ERROR
.GENERAL_FAILURE EQU #0B ; 11 - FAILURE
.DEVICE_BUSY EQU #0C ; 12 - BUSY (DEVICE OPENED)
;.RESERVED EQU #0D ; 13 - RESERVED
;
mouse:
.NO_ERROR EQU #00 ; 0 - NO ERROR
.INVALID_COMMAND EQU #01 ; 1 - COMMAND NOT PRESENT
.DEVICE_ABSENT EQU #02 ; 2 - DEVICE ABSENT
.CURSOR_ON EQU #03 ; 3 - CURSOR ON (already)
.CURSOR_OFF EQU #04 ; 4 - CURSOR OFF (already)
.CURSOR_TOO_BIG EQU #05 ; 5 - CURSOR IMAGE VERY BIG
ENDMODULE
/*
; DB #00
; DB "Bad command or file name",0
01: DB "Invalid function",0
02: DB "Invalid drive number",0
03: DB "File not found",0
04: DB "Path not found",0 ; ­¥¢¥à­ë© ¯ãâì
05: DB "Invalid handle",0
06: DB "Extended error 6",0 ; ­¥â ᢮¡®¤­®£® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à 
07: DB "File exist",0
08: DB "File read only",0
09: DB "Root overflow",0
10: DB "No free space",0
11: DB "Directory not empty",0
12: DB "Can't delete current directory",0
13: DB "Invalid media",0
14: DB "Unknown operation",0 ; ­¥¢®§¬®¦­ ï ®¯¥à æ¨ï
15: DB "Directory exist",0
16: DB "Invalid filename",0
17: DB "Invalid EXE-file",0
18: DB "Not supported EXE-file",0
19: DB "Access denied",0
20: DB "Not ready",0
21: DB "Seek error",0
22: DB "Sector not found",0
23: DB "CRC error",0
24: DB "Write protect",0
25: DB "Read error",0
26: DB "Write error",0
27: DB "Drive failure",0 ; ®¡é ï ®è¨¡ª 
28: DB "Extended error 28",0
29: DB "Extended error 29",0
30: DB "No free memory",0
31: DB "Invalid memory block",0
32: DB "Extended error 32",0
33: DB "Extended error 33",0
34: DB "Extended error 34",0
; DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
*/
;---------------------------------------
;
;
;---------------[Files]-----------------
FileMode:
.RW EQU 00
.Read EQU 01
.Write EQU 02
;
FileAttrib:
.Normal EQU 00 ; Normal file, no attributes
.RDOnly EQU 01 ; Read only attribute
.Hidden EQU 02 ; Hidden file
.System EQU 04 ; System file
.Label EQU 08 ; Volume label
.Direc EQU #10 ; Directory
.Arch EQU #20 ; Archive
;---------------------------------------
;
;
;---------[control characters]----------
_cc:
.cr EQU #0D ;¢®§¢à â ª®à¥âª¨
.lf EQU #0A ;­®¢ ï áâப 
.tab EQU 9 ;ᨬ¢®« â ¡ã«ï樨
.space EQU #20 ;ᨬ¢®« ¯à®¡¥« 
;---------------------------------------
;
; <EFBFBD>ਫ®¦¥­¨¥ <EFBFBD>. ’ ¡«¨æ  ¯®§¨æ¨®­­ëå ª®¤®¢
; key ASCII/SCAN key ASCII/SCAN
; ` 000h 000h V 056h 02Dh
; Esc 01Bh 001h B 042h 02Eh
; 1 031h 002h N 04Eh 02Fh
; 2 032h 003h M 04Dh 030h
; 3 033h 004h , 02Ch 031h
; 4 034h 005h . 02Eh 032h
; 5 035h 006h / 02Fh 033h
; 6 036h 007h RShift ---- 034h
; 7 037h 008h \ 05Ch 035h
; 8 038h 009h LCtrl ---- 036h
; 9 039h 00Ah LAlt ---- 037h
; 0 030h 00Bh Space 020h 038h
; - 02Dh 00Ch RAlt ---- 039h
; = 03Dh 00Dh RCtrl ---- 03Ah
; BackSpace 008h 00Eh F1 000h 03Bh
; Tab 009h 00Fh F2 000h 03Ch
; Q 051h 010h F3 000h 03Dh
; W 057h 011h F4 000h 03Eh
; E 045h 012h F5 000h 03Fh
; R 052h 013h F6 000h 040h
; T 054h 014h F7 000h 041h
; Y 059h 015h F8 000h 042h
; U 055h 016h F9 000h 043h
; I 049h 017h F10 000h 044h
; O 04Fh 018h F11 000h 045h
; P 050h 019h F12 000h 046h
; [ 05Bh 01Ah PrScrn ---- 047h
; ] 05Dh 01Bh ScrlLock 000h 048h
; CapsLock 000h 01Ch NumLock 000h 049h
; A 041h 01Dh / 02Fh 04Ah
; S 053h 01Eh * 02Ah 04Bh
; D 044h 01Fh - 02Dh 04Ch
; F 046h 020h + 02Bh 04Dh
; G 047h 021h enter 00Dh 04Eh
; H 048h 022h Del . 000h 04Fh
; J 04Ah 023h Ins 0 000h 050h
; K 04Bh 024h End 1 000h 051h
; L 04Ch 025h Down 2 000h 052h
; ; 03Bh 026h PgDw 3 000h 053h
; ' 027h 027h Left 4 000h 054h
; Enter 00Dh 028h 5 000h 055h
; LShift ---- 029h Right 6 000h 056h
; Z 05Ah 02Ah Home 7 000h 057h
; X 058h 02Bh Up 8 000h 058h
; C 043h 02Ch PgUp 9 000h 059h
; <EFBFBD>ਫ®¦¥­¨¥ . <EFBFBD> ©â  âਡã⮢ ⥪á⮢®£® íªà ­ 
; ¡¨â 7 - <EFBFBD>ਧ­ ª ¬¥àæ ­¨ï ᨬ¢®« 
; ¡¨âë 6,5,4 - –¢¥â ä®­  ᨬ¢®«  8 梥⮢ (0...7) RGB
; ¡¨âë 3,2,1,0 - –¢¥â ᨬ¢®«  16 梥⮢ (0...15) IRGB
; –¢¥â  ¤«ï ä®­  ¨ ¤«ï ᨬ¢®« :
; 0 0h 0000b - —ñà­ë©
; 1 1h 0001b - ‘¨­¨©
; 2 2h 0010b - ‡¥«ñ­ë©
; 3 3h 0011b - ƒ®«ã¡®© (樠­)
; 4 4h 0100b - Šà á­ë©
; 5 5h 0101b - ”¨®«¥â®¢ë©
; 6 6h 0110b - Š®à¨ç­¥¢ë©
; 7 7h 0111b - <EFBFBD>¥«ë©
; ’®«ìª® ¤«ï ᨬ¢®« :
; 8 8h 1000b - ‘¥àë©
; 9 9h 1001b - Ÿàª®-ᨭ¨©
; 10 Ah 1010b - Ÿàª®-§¥«ñ­ë©
; 11 Bh 1011b - Ÿàª®-£®«ã¡®©
; 12 Ch 1100b - Ÿàª®-ªà á­ë©
; 13 Dh 1101b - Ÿàª®-䨮«¥â®¢ë©
; 14 Eh 1110b - †ñ«âë©
; 15 Fh 1111b - Ÿàª®-¡¥«ë©
;

View File

@ -0,0 +1,85 @@
; Œ ªà®áë  ªá¥«¥à â®à  ¤«ï ªà á®âë))
;--------[¢ëª«îç¨âì  ªá¥«¥à â®à]--------
MACRO ACC_Off
LD B,B
ENDM
;---------------------------------------
;---------[०¨¬ ¯à¨¥¬  ¡ ©â ]----------
; ‚ª«îç ¥â  ªá¥«¥à â®à ¢ ०¨¬ ¯à¨¥¬ 
; ¡ ©â  à §¬¥à  ¡«®ª  ¤ «¥¥ á«¥¤ã¥â
; ª®¬ ­¤  ⨯  LD A,dat, £¤¥ dat ¨ ¡ã¤¥â
; ­®¢ë¬ à §¬¥à®¬ ¡«®ª . …᫨ à §¬¥à
; ¡«®ª  ¡ë« ãáâ ­®¢«¥­ à ­¥¥, ¥£® ¬®¦­®
; ­¥ ãáâ ­ ¢«¨¢ âì.
MACRO ACC_SetBlockSize
LD D,D
ENDM
;---------------------------------------
;-------[§ ¯®«­¥­¨¥ ®¤­¨¬ ¡ ©â®¬]-------
; ޝ¥à æ¨ï Fill. <20>®á«¥¤ãîé ï ª®¬ ­¤ 
; ⨯  LD (HL),A ¯à¨¢¥¤¥â ª § ¯®«­¥­¨î
; 㪠§ ­­®£® à ­¥¥ ª®«¨ç¥á⢠ ¡ ©â
; §­ ç¥­¨¥¬ A
MACRO ACC_FillOneByte
LD C,C
ENDM
;---------------------------------------
;----[§ ¯®«­¥­¨¥ ¢¥à⨪ «ì­ëå «¨­¨©]----
; ޝ¥à æ¨ï Fill ¤«ï £à ä¨ç¥áª®£® íªà ­ .
; <20>®á«¥¤ãîé ï ª®¬ ­¤  ⨯  LD (HL),A
; ¯à¨¢¥¤¥â ª § ¯®«­¥­¨î §­ ç¥­¨¥¬ A
; ¢¥à⨪ «ì­ëå «¨­¨© íªà ­  㪠§ ­­ë¬
; à ­¥¥ ª®«¨ç¥á⢮¬ ¡ ©â
MACRO ACC_FillScreenOneByte
LD E,E
ENDM
;---------------------------------------
;----------[ª®¯¨à®¢ ­¨¥ ¡«®ª ]----------
; <20>®á«¥¤ãîé ï ª®¬ ­¤  ⨯  LD A,(HL)
; ¯à¨¢¥¤¥â ª § ¯®«­¥­¨î އ“  ªá¥«¥à â®à 
; ¤ ­­ë¬¨ ¨§  ¤à¥á  (HL),   ª®¬ ­¤  ⨯ 
; LD (DE),A ¯à¨¢¥¤¥â ª ¯¥à¥§ ¯¨á¨ ¤ ­­ëå
; ¨§ އ“  ªá¥«¥à â®à  ¢ ®á­®¢­®¥ ¨«¨
; ¢¨¤¥®-އ“.
MACRO ACC_CopyBlock
LD L,L
ENDM
;---------------------------------------
;---[ª®¯¨à®¢ ­¨¥ £à ä¨ç¥áª®£® ¡«®ª ]----
; Š®¯¨à®¢ ­¨¥ ¡«®ª  ¤«ï £à ä. íªà ­ .
; <20>®á«¥¤ãîé ï ª®¬ ­¤  ⨯  LD A,(HL)
; ¯à¨¢¥¤¥â ª § ¯®«­¥­¨î އ“  ªá¥«¥à â®à 
; ¤ ­­ë¬¨ ¨§  ¤à¥á  (HL),   ª®¬ ­¤  ⨯ 
; LD (DE),A ¯à¨¢¥¤¥â ª ¯¥à¥§ ¯¨á¨ ¤ ­­ëå
; ¨§ އ“  ªá¥«¥à â®à  ¢ ¢¨¤¥®-އ“
; ¢¥à⨪ «ì­ë¬¨ «¨­¨ï¬¨. í⮬ ०¨¬¥
;  ªá¥«ì ¯à¨ ç⥭¨¨ ¢ ¡ãä¥à ¨ § ¯¨á¨ ¢
; ¯ ¬ïâì 㢥«¨ç¨¢ ¥â ­¥  ¤à¥á,   PORT_Y
MACRO ACC_CopyScreenBlock
LD A,A
ENDM
;---------------------------------------
;--------[„¢®©­ ï § ¯¨áì ¡ ©â ]---------
; <20>ਠ§ ¯¨á¨ ¡ ©â  Byte ¯®  ¤à¥áã Addr
; ¯à®¨á室¨â § ¯¨áì ¤¢ãå Byte ¢  ¤à¥áá :
; (Addr & #FE) ¨ (Addr & #FE)+1
MACRO ACC_DoubleByte
LD H,H
ENDM
;---------------------------------------
;---------[¯®ª  ¯ãâì ¢ ­¨ªã¤ ]----------
; <20> ¡®â ¥â â ª ¦¥ ª ª ¨ ld b,b
; <20>ã ¨ ¯à¨ ®âª«î祭­ëå ¯à¥à뢠­¨ïå ¡ã¤¥â
; §­ ¬¥­¨âë© DI:HALT)))
MACRO ACC_Halt
HALT
ENDM
;---------------------------------------

View File

@ -0,0 +1,356 @@
;=======================================
; ᪫¥¨¢ ¥â áâப㠯ã⨠ª ä ©«ã á® áâப®© ¨¬¥­¨ ä ©« 
; retname - ¨¬ï ¤¥ä ©­  ᮤ¥à¦ é¥¥ ¯ãâì ¨ ¨¬ï ä ©« 
; pname - áâப  ¢ ®¤¨­ à­ëå ª ¢ë窠å á ¯ãâñ¬ ª ä ©«ã
; fname - áâப  ¢ ®¤¨­ à­ëå ª ¢ë窠å á ¨¬¥­¥¬ ä ©« 
; OStype - 'MacOS', 'Linux' ¨«¨ 'Windows'. “ª §ë¢ ¥â ª ª®© à §¤¥«¨â¥«ì ¬¥¦¤ã ä ©« ¬¨/¯ ¯ª ¬¨ ¨á¯®«ì§ã¥âáï ¢ ¯¥à¥¤ ­­®© áâப¥,'/' ¨«¨ '\'
MACRO mGETfullNAME retname, pname, fname, OStype
DEFINE tmpLString1 pname
DEFINE tmpLString2 fname
DEFINE tmpLString3 retname
DEFINE tmpLString4 OStype
LUA
local tmp3 = sj.get_define("tmpLString3")
tmp3 = string.gsub(string.match(tmp3, '\'.*\''), "'", "")
sj.insert_define(tmp3, "'" .. Get_Full_Filename(sj.get_define("tmpLString1"), sj.get_define("tmpLString2"), sj.get_define("tmpLString4")) .. "'")
ENDLUA
UNDEFINE tmpLString4
UNDEFINE tmpLString3
UNDEFINE tmpLString2
UNDEFINE tmpLString1
ENDM
;=======================================
;=======================================
MACRO _mInfoBLOCK endAddr, filler
DISPLAY " Free ",/D,endAddr, " bytes at ",/H, $, " address."
BLOCK endAddr,filler
ENDM
;=======================================
;=======================================
MACRO _mInfoALIGN num, filler
.temp equ $
ALIGN num,filler
IF (($-.temp) > 0)
DISPLAY " Free ",/D,$-.temp, " bytes at ",/H, .temp, " address."
ENDIF
ENDM
;=======================================
;=======================================
MACRO _mSIZE_INFO name, startAddr, endAddr, pages, mKey
IF mKey == 1
display " "
display "v----------------------------------------------------------v"
display " Start End Size Free in page"
ENDIF
display "* ",name," ",/H,startAddr, " ", endAddr, " ", (endAddr) - (startAddr), " ",/A, (#4000*(pages))-((endAddr) - (startAddr))
IF mKey == 2
display "^----------------------------------------------------------^"
display " "
ENDIF
ENDM
;=======================================
;=======================================
MACRO _mCollectInfo_begin
IF COLLECT_INFO
LUA PASS3
INCLUDING_INFO_START()
ENDLUA
ENDIF
ENDM
;---------------------------------------
MACRO _mCollectInfo_addStart
IF COLLECT_INFO
LUA PASS3
INCLUDING_INFO_ADDstart()
ENDLUA
ENDIF
ENDM
;---------------------------------------
MACRO _mCollectInfo_addEnd
IF COLLECT_INFO
LUA PASS3
INCLUDING_INFO_ADDend()
ENDLUA
ENDIF
ENDM
;---------------------------------------
MACRO _mCollectInfo_end
IF COLLECT_INFO
LUA PASS3
INCLUDING_INFO_END()
ENDLUA
ENDIF
ENDM
;=======================================
;=======================================
MACRO _mARRAYstart
ENDM
;---------------------------------------
MACRO _mARRAYadd
ENDM
;---------------------------------------
MACRO _mARRAYshow
ENDM
;=======================================
;=======================================
MACRO mHRUSTfile fname, hstEXT, macPATH, linPATH, winPATH, osName
IF osName = 'MacOS' : DEFINE tmpLString3 =
ELSEIF osName = 'Linux' :
ELSEIF osName = 'Windows' :
DEFINE tmpLString1 = fname
DEFINE tmpLString2 = hstEXT
DEFINE tmpLString3 =
DEFINE tmpLString4 =
DEFINE tmpLString5 =
ENDM
;=======================================
;=======================================
; ‚®§¢à é ¥â ¨¬ï ®¯¥à æ¨®­­®© á¨áâ¥¬ë ¢ ¤¥ä ©­¥ retname
; 'MacOS', 'Linux' ¨«¨ 'Windows'
MACRO mGETosNAME retname
DEFINE tmpLString retname
LUA
local tmp = sj.get_define("tmpLString")
tmp = string.gsub(string.match(tmp, '\'.*\''), "'", "")
sj.insert_define(tmp, "'" .. Detect_os() .. "'")
ENDLUA
ENDM
;=======================================
;=======================================
MACRO FRAM_ON
IN A,(FastRAM.ON)
IFN NORM_FastRAM
PUSH BC
;PUSH AF
LD BC,#1FFD
XOR A
OUT (C),A
OUT (FastRAM.SLOT0),A
;POP AF
POP BC
ENDIF
ENDM
MACRO FRAM_OFF
IN A,(FastRAM.OFF)
IFN NORM_FastRAM
PUSH BC
;PUSH AF
LD BC,#1FFD
LD A,1
OUT (C),A
XOR A
OUT (FastRAM.SLOT0),A
;POP AF
POP BC
ENDIF
ENDM
;=======================================
;=======================================
MACRO STACK_CHECK_MACRO _mSP, _mSPbuffer
assert $ < _mSP-_mSPbuffer, WARNING! Stack buffer may corrupt data/code!
ENDM
;=======================================
;=======================================
MACRO SAFE_PORTY
IFNDEF NeedSafePort_Y
ASSERT 0, "--===[ Error! To use SAFE_PORTY you MUST define NeedSafePort_Y 0/1 ]===--"
ELSEIF NeedSafePort_Y
LD A,#C0
OUT (PORT_Y),A
ENDIF
ENDM
MACRO ZERO_PORTY
IFNDEF NeedSafePort_Y
ASSERT 0, "--===[ Error! To use SAFE_PORTY you MUST define NeedSafePort_Y 0/1 ]===--"
ELSEIF NeedSafePort_Y
LD A,0
OUT (PORT_Y),A
ENDIF
ENDM
MACRO SAFE_PORTY_2
IFNDEF NeedSafePort_Y
ASSERT 0, "--===[ Error! To use SAFE_PORTY you MUST define NeedSafePort_Y 0/1 ]===--"
ELSEIF NeedSafePort_Y
EXX
LD C,PORT_Y
IN B,(C)
PUSH BC
LD E,#C0
OUT (C),E
EXX
ENDIF
ENDM
MACRO RESTORE_PORTY
IFNDEF NeedSafePort_Y
ASSERT 0, "--===[ Error! To use SAFE_PORTY you MUST define NeedSafePort_Y 0/1 ]===--"
ELSEIF NeedSafePort_Y
EXX
POP BC
OUT (C),B
EXX
ENDIF
ENDM
;=======================================
;=======================================
MACRO PrintProc
MODULE PrintF
;---------------------------------------
printstr:
; ¢ ॣ. HL  ¤à¥á ­  ¯¥ç â ¥¬ë© ¡ãä¥à
LD C,Dss.PChars
jp ToDSS
;---------------------------------------
;---------------------------------------
; ¢ ॣ. A ç¨á«® ¯¥ç â ¥¬®¥ ª ª hex
printhex:
LD D,A
RRCA
RRCA
RRCA
RRCA
AND #0F
ADD A,#30
CP #3A
JR C,.PRNH1
ADD A,7
.PRNH1:
CALL .PRINT_CHAR
LD A,D
AND #0F
ADD A,#30
CP #3A
JP C,.PRINT_CHAR
ADD A,7
JP .PRINT_CHAR
; ¢ ॣ¨áâॠA ᨬ¢®« ¤«ï ¯¥ç â¨
.PRINT_CHAR:
LD BC,#0182
JP ToBIOS
;---------------------------------------
ENDMODULE
ENDM
;=======================================
;=======================================
MACRO M_hex2dec2ascii_8bit size
; ‚•Ž„:
; ॣ. C - HEX ç¨á«® ¤«ï ¯à¥®¡à §®¢ ­¨ï (0-255)
; ॣ. HL -  ¤à¥á ¢ ¯ ¬ï⨠¤«ï á®åà ­¥­¨ï áâப¨ १ã«ìâ â  (1-3 ¡ ©â  ASCII)
; size - 1-3 ascii ᨬ¢®«  ­  ¢ë室¥ (®â ¬« ¤è¥£® ª áâ à襬ã à §àï¤ã)
IF size == 3
ld a,199
cp c
ld a,#30
jr nc,.nxt
inc a
.nxt: ld (hl),a
ENDIF
xor a
ld b,8
.loop:
sla c
adc a,a
daa
IF size == 3
jp nc,.skip
inc (hl)
ENDIF
.skip: djnz .loop
IF size == 3
inc hl
ENDIF
IF size == 1
and #0F
or #30
ld (hl),a
ELSE
ld (hl),a
ld a,#33
rrd
inc hl
ld (hl),a
ENDIF
;.exit:
ENDM
;=======================================
;=======================================
MACRO M_Get_Mem mem_buf_addr, pages
ld b,pages
rst ToDSS
ret c
ld hl,mem_buf_addr
ld c,BIOS.GetMemBlkPages
rst ToBIOS
ret
ENDM
;=======================================
;=======================================
; !TODO border color -  ªâ¨¢¨à®¢ âì ¬ ªà®á ¨ ¢«ã¯¨âì ¢¥§¤¥ ª®£¤  ¯¥à¥¬¥­­ë¥ sys_page ¡ã¤ãâ ç¥à¥§ áâàãªâãàã ᤥ« ­ë ¢ SP2000.INC
; MACRO BORDER color
; IF color == 0
; XOR A
; ELSE
; LD A,color
; ENDIF
; out (BorderColor),a
; ENDM
;=======================================
;-----------[DSS Functions]----------[v]
MACRO DSS_GETMEM pages, error_handler
ld b,pages
ld c,Dss.GetMem
rst ToDSS
jp c,error_handler
;A - ¨¤¥­â¨ä¨ª â®à ¡«®ª ,
;«¨¡® ª®¤ ®è¨¡ª¨ ¥á«¨ CF-1
ENDM
;------------------------------------[^]
;----------[BIOS Functions]----------[v]
;------------------------------------[^]

View File

@ -0,0 +1,9 @@
;
STRUCT str_EasterSprites
SpAddress WORD ;  ¤à¥á á¯à ©â  ¢ ¯ ¬ïâ¨
SpWidth WORD ; ˜¨à¨­ 
SpHeight BYTE ; ‚ëá®â  + Y coord
SpXCoord WORD ; X coord
SpYCoord BYTE ; Y coord
ENDS
;

View File

@ -0,0 +1,24 @@
;
STRUCT _sBOOT_SEC ; 62 bytes
.JMP: BLOCK 3,0 ; +#00 "JMP"
.ID_NAME: TEXT 8,{"DSS_1.7","0"} ; +#03 DOS NAME - DB "DSS_1.70"
; Block Parameters BIOS
.B_P_S: WORD #200 ; +#0B BYTE PER SECTOR
.S_P_C: BYTE 2 ; +#0D SECTORS PER CLUSTER
.RESERVE: WORD 1 ; +#0E RESERVE SECTORS
.FAT_NUM: BYTE 2 ; +#10 AMOUNT FATS
.F_P_DIR: WORD 112 ; +#11 FILES IN DIRECTORY
.S_P_D: WORD 1440 ; +#13 ALL SECTORS ON DISK
.ID_FORM: BYTE #F0 ; +#15 ID FORMAT
.S_P_F: WORD 2 ; +#16 SIZE FAT IN SECTORS
.S_P_T: WORD 9 ; +#18 SECTOR PER TRACK
.HEADS: WORD 2 ; +#1A AMOUNT SIDES
.HIDDEN: DWORD 0 ; +#1C HIDDEN SECTORS
.BPB_BIG_TOTAL_SECTORS: DWORD 0 ; +#20 BIG TOTAL SECTOR
.BPB_PHISICAL_DRIVE_NUMBER: WORD #80 ; +#24 PHISICAL DRIVE NUMBER
.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; +#26 EXTENDED BOOT RECORD SIGNATURE
.BPB_SERIAL_NUMBER: DWORD 0 ; +#27 VOLUME SERIAL NUMBER
.BPB_LABEL: TEXT 8,{"NO NAME"," "} ; +#2B DISK LABEL
.ID_FAT: TEXT 8,{"FAT16"," "} ; +#36 FILE SYSTEM ID ( BPB_FS_ID )
ENDS
;

View File

@ -0,0 +1,31 @@
;
STRUCT MAIN_BMP
ChipsPic BLOCK mpCH_Width * mpCH_Height
;MainPic BLOCK 160*168 ; !!!!!! hardcode
MainPic BYTE
ENDS
STRUCT TBitMapFileHeader ; = 14 bytes
bfType WORD ; 'BM'
bfSize DWORD ; à §¬¥à ¢á¥£® ä ©« 
bfReserved DWORD 0 ;
bfOffBits DWORD ; ­ ç «® ¡¨â®¢®£® ¬ áᨢ  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
;---[File Info] ; = 40 bytes
biSize DWORD 40 ; Š®«¨ç¥á⢮ ¡ ©â®¢ ¢ DIB header (á í⮣® ¬®¬¥­â )
biWidth DWORD ; ˜¨à¨­  ¨§®¡à ¦¥­¨ï ¢ ¯¨ªá¥«ïå
biHeight DWORD ; ‚ëá®â  ¨§®¡à ¦¥­¨ï ¢ ¯¨ªá¥«ïå
biplanes WORD ; Š®«¨ç¥á⢮ ¯«®áª®á⥩ ¨«¨ 梥⮢ëå á«®¥¢
biBitCount WORD ; Š®«-¢® ¡¨â®¢ ­  ¯¨ªá¥«ì
biCompression DWORD ; ’¨¯ ᦠâ¨ï
biSizeImage DWORD 0 ; <EFBFBD> §¬¥à ª à⨭ª¨ ¢ ¡ ©â å, ¥á«¨ ¨§®¡à ¦¥­¨¥ ­¥á¦ â®¥, â® §­ ç¥­¨¥ ४®¬¥­¤®¢ ­® ãáâ ­ ¢«¨¢ âì ¢ ­®«ì
biXPelsPerMeter DWORD ; ƒ®à¨§®­â «ì­®¥ à §à¥è¥­¨¥ (¢ ¯¨ªá¥«ïå ­  ¬¥âà)
biYPelsPerMeter DWORD ; ‚¥à⨪ «ì­®¥ à §à¥è¥­¨¥ (¢ ¯¨ªá¥«ïå ­  ¬¥âà)
biClrUsed DWORD 0 ; Ž¯à¥¤¥«ï¥â ª®«¨ç¥á⢮ ¨á¯®«ì§ã¥¬ëå æ¢¥â®¢ ¨§ â ¡«¨æë
biClrImportant DWORD 0 ; Š®«¨ç¥á⢮ ¢ ¦­ëå ¤«ï ¨§®¡à ¦¥­¨ï 梥⮢
;--[File Data]
bdPallete BLOCK #400
bdRaster MAIN_BMP
ENDS
;

653
mountima.asm Normal file
View File

@ -0,0 +1,653 @@
;
;
; !TODO
;
; [ ] - ª«îç ¤«ï § £à㧪¨ ®¡à §  ¢ ­®¢ë© à ¬-¤¨áª "/i ¨¬ï_ä ©« "
; [ ] - ª«îç ¤«ï § £à㧪¨ ®¡à §  ¢ áãé¥áâ¢ãî騩 à ¬-¤¨áª "/i ¨¬ï_ä ©«  /d ¡ãª¢  ¤¨áª "
; [ ] - ª«îç ¤«ï á®åà ­¥­¨ï à ¬-¤¨áª  ¢ ®¡à § "/s ¡ãª¢  ¤¨áª "
; [ ] - ª«îç ¤«ï § ªàëâ¨ï à ¬-¤¨áª  "/á ¡ãª¢  ¤¨áª "
;
;
; Compilation parameters
;-------------[]
;DEVICE SPRINTER
;MMU 2 e, 0 ; ­ã«¥¢ ï áâà ­¨æ  ¢ ¡ ­ªã 2 ¨ ¯à®¢¥àª  ­  £à ­¨æë
;OUTPUT './Build/new.bin'
;-------------[]
; Defines section
;-------------[]
define NEED_LOADER 0
; define NeedSafePort_Y 0
;-------------[]
; 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 BEGIN
stack_point EQU #C000
stack_buffer EQU 64
program_start EQU BEGIN
;-------------[]
; Program EQU section
;-------------[]
; IMG_File:
; .Sectors EQU 2880
; .RamPages EQU 90
; STRUCT MEM_BUFFER_BLOCK
; FileID BYTE
; BlockID BYTE
; SavePage BYTE
; PagesBuffer BLOCK IMG_File.RamPages+1
; ENDS
;-------------[]
; Code start section
;[]-------------------------------------------------------------------[]
include 'Shared_Includes/constants/EXE_Header.z80'
ORG org_addr
BEGIN:
; LD C,BIOS.LP_GET_PLACE
; RST ToBIOS
; PUSH DE
; LD HL,EXIT.messages.test
; LD C,Dss.PChars
; RST ToDSS
; POP DE
; LD E,0
; LD C,BIOS.LP_SET_PLACE
; RST ToBIOS
; LD HL,EXIT.messages.help
; LD C,Dss.PChars
; RST ToDSS
; di : halt
LD (dss_line),IX ; ‘®å࠭塞 㪠§ â¥«ì ­  áâப㠧 ¯ã᪠.
LD A,(IX) ; âãâ DSS ª« ¤ñâ ¤«¨­ã ¯ à ¬¥â஢ ª®¬.áâப¨
AND A ; ¯à®¢¥à塞 ­  ®âáãâá⢨¥ ¯ à ¬¥â஢
JP Z,EXIT.help ; § ¯ã᪠ ¢ ª®¬.áâப¥. …᫨ ¨å ­¥â - ¢ë室 á ¨­áâàãªæ¨¥©
CALL Set_keys
JP C,EXIT.error.UNDEFINED
; ¯à®¢¥àª  ª«î祩 ­  ­¥á®¢¬¥á⨬®áâì))
LD HL,key_buff
LD A,(HL)
INC HL
XOR (HL)
JR NZ,.not_saveRMD
INC HL
OR (HL)
JP Z,EXIT.error.WrongKeys
CALL RMD_SAVE
JP EXIT.good
.not_saveRMD:
AND (HL)
JR NZ,RMD_MOUNT
RMD_UNMOUNT: ;LD A,(key_buff.DRVsave)
;INC A
;CALL NZ,RMD_SAVE
;!TODO check error?
LD A,(key_buff.DRV)
LD C,BIOS.FreeMemRMD
RST ToBIOS
;!TODO check error?
LD C,Dss.RescanDrives
RST ToDSS
JP EXIT.good
;!TODO
;-------------[]
;-------------[]
;‘®åà ­¥­¨¥ ®¡à §  à ¬¤¨áª  ¢ ä ©«
RMD_SAVE: IN A,(SLOT3)
LD (.SavePage),A
LD A,(key_buff.DRVsave)
LD C,BIOS.GET_RAMD_ST
RST ToBIOS
LD HL,PagesBuffer
LD C,BIOS.GetMemBlkPages
RST ToBIOS
;LD HL,PagesBuffer
LD C,Dss.Write
.loop: PUSH BC
PUSH HL
LD A,(HL)
OUT (SLOT3),A
LD A,(key_buff.FM)
LD HL,#C000
LD DE,#4000
;LD C,Dss.Write
RST ToDSS
; A - ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
; HL -  ¤à¥á ¢ ¯ ¬ïâ¨
; DE - ª®«¨ç¥á⢮ ç¨â ¥¬ëå ¡ ©â
POP HL
POP BC
;!TODO 㤠«ïâì ä ©« ¥á«¨ ®è¨¡ª  § ¯¨á¨
JP C,EXIT.error.writeFile
INC HL
DJNZ .loop
.SavePage+*: LD A,0
OUT (SLOT3),A
LD C,Dss.RescanDrives
RST ToDSS
LD A,(key_buff.FM)
LD C,Dss.Close
RST ToDSS
RET
;-------------[]
;-------------[]
RMD_MOUNT: LD A,(key_buff.FM)
LD HL,0
LD IX,0
LD B,Dss.Move_FP.FrEnd
LD C,Dss.Move_FP
RST ToDSS ; ã§­ ñ¬ à §¬¥à ä ©« 
; A - ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
; HL:IX - ᬥ饭¨¥ 㪠§ â¥«ï ¢ ä ©«¥
; B - ᯮᮡ ¯¥à¥¬¥é¥­¨ï:
; 0 - ®â ­ ç «  ä ©« 
; 1 - ®â ⥪ã饣® §­ ç¥­¨ï 㪠§ â¥«ï
; 2 - ®â ª®­æ  ä ©« 
XOR A
OR H
JP NZ,EXIT.error.noRAM
LD A,L
CP #39
JP NC,EXIT.error.noRAM
PUSH IX
POP HL
DUP 2 ; ¯à¥¢à é ¥¬ à §¬¥à ä ©«  ¢ ¡ ©â å ¢ áâà ­¨æë
SLA L
RL H
RLA
EDUP
LD B,A
LD A,H
OR L
JR Z,.skipINK
INC B ; ­¥®¡å®¤¨¬®¥ ç¨á«® áâà ­¨æ
;-------------[]
.skipINK: LD A,B
LD (.RamPagesNum),A
LD C,BIOS.GetMem
RST ToBIOS
;LD B,num_pages ; § ¯à è¨¢ ¥¬®¥ ç¨á«® áâà ­¨æ އ“
;LD C,0C2h ; ­®¬¥à ä㭪樨
;CALL 3D13h ; NC -> € - ¨¤¥­â¨ä¨ª â®à ¡«®ª 
; CF -> A=1 - ­¥â ¯ ¬ïâ¨
JP C,EXIT.error.noRAM
LD (.BlockID),A
;-------------[]
;-------------[]
LD HL,PagesBuffer
LD C,BIOS.GetMemBlkPages
RST ToBIOS
; LD A,id_blk ; ¨¤¥­â¨ä¨ª â®à ¡«®ª 
; LD HL,bufer ; ¡ãä¥à ¤«¨­®© 256 ¡ ©â ¤«ï à §¬¥é¥­¨ï ᯨ᪠
; ; ¡ãä¥à ¤®«¦¥­ ¡ëâì ¤«¨­®© ­  ¥¤¨­¨æã ¡®«ìè¥ ç¨á« 
; ; áâà ­¨æ ¢ ¡«®ª¥
; LD C,0C5h ; ­®¬¥à ä㭪樨
; RST ToBIOS ; NC -> HL - â®â ¦¥ ¡ãä¥à, B - ç¨á«® áâà ­¨æ ¢ ¡«®ª¥
; ; ¤ ­­ë¥ ¯®  ¤à¥áã HL - ᯨ᮪ 䨧¨ç¥áª¨å áâà ­¨æ ¯®
; ; ¯®à浪ã. ‘¯¨á®ª § ª ­ç¨¢ ¥âáï ¡ ©â®¬ FF
; ; CF -> ­¥¢¥à­ë© ¨¤¥­â¨ä¨ª â®à ¡«®ª . ‘â à ï
; ; ¨­ä®à¬ æ¨ï ¢ ¡ãä¥à¥ ¬®¦¥â ¡ëâì § â¥àâ 
JP C,EXIT.error.wrongMEMblkID
;-------------[]
;-------------[]
XOR A
.loop: PUSH AF
LD C,BIOS.GET_RAMD_ST
RST ToBIOS ; ¯®«ã祭¨¥ ¨¤¥­â¨ä¨ª â®à  ¡«®ª , ­ §­ ç¥­­®£® ­  RAM-Disk
AND A
JR Z,.loopExit
POP AF
INC A
CP 16
JP NZ,.loop
JP EXIT.error.noFreeRAMdsk
.loopExit:
POP AF
;-------------[.]
; .
; .
;-------------[.]
; A = ram_disk number from BIOS.GET_RAMD_ST
.BlockID+*: LD HL,0
LD B,L
LD C,BIOS.BLK_TO_RAMD
RST ToBIOS
; ; «î¡®© ¡«®ª ¯ ¬ï⨠¬®¦¥â ᮤ¥à¦ âì ¤ ­­ë¥
; ; RAM-Disk-  ¢ ä®à¬ â¥ TR-DOS ¤«ï ¯®¤ª«î祭¨ï íâ¨å
; ; ¤ ­­ëå ¢ ª ç¥á⢥ ¤¨áª  ¨ á«ã¦¨â íâ  äã­ªæ¨ï
; LD A,ram_disk ; ­®¬¥à RAM-Disk-  0..15 - ᮮ⢥âáâ¢ã¥â
; ; RAM-Disk- ¬ ®â e: ¤® t:
; LD B,id_blk ; ¨¤¥­â¨ä¨ª â®à ¡«®ª 
; LD C,0C9h ; ­®¬¥à ä㭪樨
; RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; ; CF -> ®è¨¡ª : ­¥¢¥à­ë© ­®¬¥à RAM-Disk-  ¨«¨
; ; RAM-Disk § ­ïâ
JR C,EXIT.error.wrongRAMdrv
;-------------[]
;—⥭¨¥ ®¡à §  ¢ ¯ ¬ïâì à ¬¤¨áª 
;-------------[]
LD A,(key_buff.FM)
LD HL,0
LD IX,0
LD B,Dss.Move_FP.FrStart
LD C,Dss.Move_FP
RST ToDSS
IN A,(SLOT3)
LD (.SavePage),A
.RamPagesNum+*: LD B,0
LD HL,PagesBuffer
LD C,Dss.Read
;;;;!TODO ᤥ« âì ®¡é¥© ¯à®æ¥¤ãன
.LOOP: PUSH BC
PUSH HL
LD A,(HL)
OUT (SLOT3),A
LD A,(key_buff.FM)
LD HL,#C000
LD DE,#4000
;LD C,Dss.Read
RST ToDSS
; A - ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
; HL -  ¤à¥á ¢ ¯ ¬ïâ¨
; DE - ª®«¨ç¥á⢮ ç¨â ¥¬ëå ¡ ©â
POP HL
POP BC
JR C,EXIT.error.readFile
INC HL
DJNZ .LOOP
;;;;
.SavePage+*: LD A,0
OUT (SLOT3),A
LD C,Dss.RescanDrives
RST ToDSS
LD A,(key_buff.FM)
LD C,Dss.Close
RST ToDSS
;!TODO check error?
; JP EXIT.good
;-------------[]
;-------------[]
MODULE EXIT
good: LD B,DSS_Error.sys.NO_ERROR
LD HL,messages.good
printANDexit: PUSH BC
LD C,Dss.PChars
RST ToDSS
POP BC
.loop: LD C,Dss.Exit
RST ToDSS
JR .loop
help: LD HL,messages.help
LD B,DSS_Error.sys.NO_ERROR
JP printANDexit
error:
.writeFile: LD B,DSS_Error.sys.WRITE_ERROR
LD HL,messages.writeFile
JP printANDexit
.WrongKeys: LD B,DSS_Error.sys.GENERAL_FAILURE
LD HL,messages.WrongKeys
JP printANDexit
.UNDEFINED: LD B,DSS_Error.sys.GENERAL_FAILURE
LD HL,messages.UNDEFINED
JP printANDexit
.noRAM: LD B,DSS_Error.sys.NOT_ENOUGH_MEMORY
LD HL,messages.noRAM
JP printANDexit
.wrongMEMblkID: LD B,DSS_Error.sys.INVALID_MEMORY_HND
LD HL,messages.wrongMEMblkID
JP printANDexit
.wrongRAMdrv: LD B,DSS_Error.sys.INVALID_DRIVE
LD HL,messages.wrongRAMdrv
JP printANDexit
.readFile: LD B,DSS_Error.sys.READ_ERROR
LD HL,messages.readFile
JP printANDexit
.noFreeRAMdsk: LD B,DSS_Error.sys.GENERAL_FAILURE
LD HL,messages.noFreeRAMdsk
JP printANDexit
;
messages:
.good: DZ "\r\n All Done. Good luck)))\r\n"
.noRAM: DZ "\r\n ERROR! No enough memory.\r\n"
.wrongMEMblkID: DZ "\r\n ERROR! Invalid Memory block ID.\r\n"
.wrongRAMdrv: DZ "\r\n ERROR! Invalid RAM disk ID or RAM disk busy.\r\n"
.readFile: DZ "\r\n ERROR! Unable to read disk image file.\r\n"
.writeFile: DZ "\r\n ERROR! Unable to write disk image to file.\r\n"
.noFreeRAMdsk: DZ "\r\n ERROR! The number of RAM disks in use has reached its maximum.\r\n"
.WrongKeys: DZ "\r\n ERROR! Wrong key combination.\r\n"
.help: DZ "\r\n HELP MESSAGE IN PROGRESS\r\n" ;!TODO
.UNDEFINED: DZ "\r\n Undefined error: SET_KEYS\r\n" ;!TODO
;.test DZ "1234567890-1234567890-1234567890-1234567890"
;.help: DZ " HELP MESSAGE IN PROGRESS\r\n" ;!TODO
ENDMODULE
;-------------[]
dss_line: DW 0
;*******************************************************
; ____ _ _
; / ___| ___| |_ | | _____ _ _ ___
; \___ \ / _ \ __| | |/ / _ \ | | / __|
; ___) | __/ |_ | < __/ |_| \__ \
; |____/ \___|\__| |_|\_\___|\__, |___/
; |___/
; <20>®«ãç ¥¬ ª«îç¨ § ¯ã᪠, à á¯¨å¨¢ ¥¬ ¨å ¯® 㣫 ¬,
; ­ áâà ¨¢ ¥¬ ­ ç «ì­ë¥ ãá«®¢¨ï à ¡®âë.
;-----------------;
key_buff:
.U: DB 0 ; unmount
.M: DB 0 ; mount
.S: DB 0 ; save ramdisk
.FM: DB 0 ; File Manipulator
.DRV: DB #FF ; ­®¬¥à à ¬¤¨áª  ¤«ï unmount
.DRVsave: DB #FF ; ­®¬¥à à ¬¤¨áª  ¤«ï SAVE
;-----------------;
Set_keys: LD HL,(dss_line)
INC HL
LD (.NextParam),HL
.CheckChar: CALL .GetParam
;JR NC,.next
CCF
RET NC ; <20> §¡®à ®ª®­ç¥­.
.next: LD A,(Buffer+2) ; ®á­®¢­®¬ 横«¥ CheckChar ¬ë ¦¤ñ¬ ⮫쪮 ¤¢ 
ADD #FF ; ᨬ¢®«  ¢ ª«îç¥. <20>®í⮬㠥᫨ ¨å ¡®«ìè¥,
RET C ; â® ¢ë室¨¬ á ®è¨¡ª®©.
LD A,(Buffer)
SUB '/'
SCF
RET NZ
; <20>஢¥àª /ãáâ ­®¢ª  ª«îç 
LD HL,key_buff ; ­ ç «® åà ­¥­¨ï ª«î祩
LD E,L ; ¤«ï ¯à®¢¥àª¨ ­  ª«îç U
LD A,(Buffer+1)
AND %11011111 ; ¤¥« ¥¬ ¬ «¥­ìª¨© ᨬ¢®« ¡®«ì訬)))
CP 'U' ; ¯à®¢¥à塞 ¯ à ¬¥âà mount image
JR Z,.set_key
INC HL ; á«¥¤ãî騩 ª«îç
CP 'M' ; ¯à®¢¥à塞 ¯ à ¬¥âà unmount image
JR Z,.set_key
INC HL ; á«¥¤ãî騩 ª«îç
CP 'S' ; ¯à®¢¥à塞 ¯ à ¬¥âà save image
JR Z,.set_key
SCF ; ®è¨¡ª  ¢ ¯ à ¬¥âà¥
RET ; ¢ë室 á ®è¨¡ª®©
;-----------------;
;-----------------;
.set_key: LD A,(HL) ; ¯à®¢¥à塞 ­¥ ãáâ ­®¢«¥­ «¨ ª«îç.
ADD #FF ; ¥á«¨ ¥áâì, §­ ç¨â ª«îç ¢¢¥¤ñ­ 2 à § 
RET C ; ®è¨¡ª  - ¯®¢â®à ª«îç . ¢ë室
INC (HL) ; <20>ਧ­ ª ãáâ ­®¢ª¨ ª«îç  - ­¥ ­®«ì. “áâ ­®¢¨«¨ ª«îç.
LD A,L
SUB E ; ¤«ï ¯à®¢¥àª¨ ­  ª«îç U
LD (.save_a),A
CALL .GetParam ; ¯®«ãç ¥¬ á«¥¤ãî騩 ¯ à ¬¥âà áâப¨ DOS ª ­ ©¤¥­®¬ã ª«îçã
RET C ; ¢ë室, ¥á«¨ ®è¨¡ª 
XOR A
.save_a+*: OR 0
JR NZ,.file_key
CALL .GetDRVnum
RET C
LD (key_buff.DRV),A ; á®å࠭塞 ­®¬¥à à ¬¤¨áª  ¤«ï BIOS.FreeMemRMD
JP .CheckChar ; ¯®£­ «¨ ­  á«¥¤ãî騩 ¢¨â®ª à §¡®à  ª«î祩
/*
.save_a+*: LD A,0
XOR 2
JR Z,.key_save
XOR 2
JR NZ,.file_key
;unmount key
CALL .GetDRVnum
;!TODO error number
RET C
LD (key_buff.DRV),A ; á®å࠭塞 ­®¬¥à à ¬¤¨áª  ¤«ï BIOS.FreeMemRMD
;--------------------
JP .CheckChar ; ¯®£­ «¨ ­  á«¥¤ãî騩 ¢¨â®ª à §¡®à  ª«î祩
.key_save:
CALL .GetDRVnum
RET C
LD (key_buff.DRVsave),A ; á®å࠭塞 ­®¬¥à à ¬¤¨áª  ¤«ï BIOS.FreeMemRMD
*/
;!FIXIT
.file_key:
LD HL,Buffer
LD A,(key_buff.M)
AND A
JR Z,.noRD
CALL .OpenRDfile ; Žâªàë⨥ ä ©«  (¨«¨ ¯à®¢¥àª  ­ «¨ç¨ï) ¯® ¨¬¥­¨ ¨§ ¡ãä¥à 
RET C ; ¢ë室, ¥á«¨ ®è¨¡ª 
JP .CheckChar ; ¯®£­ «¨ ­  á«¥¤ãî騩 ¢¨â®ª à §¡®à  ª«î祩
.noRD: CALL .OpenWRfile
RET C ; ¢ë室, ¥á«¨ ®è¨¡ª 
LD A,(key_buff.DRVsave)
INC A
JP NZ,.CheckChar
LD HL,(.NextParam)
INC HL
LD A,(HL)
CP ':'
JP NZ,.CheckChar
CALL .GetParam
CCF
RET NC
CALL .GetDRVnum
RET C
LD (key_buff.DRVsave),A ; á®å࠭塞 ­®¬¥à à ¬¤¨áª  ¤«ï save ram drive
JP .CheckChar ; ¯®£­ «¨ ­  á«¥¤ãî騩 ¢¨â®ª à §¡®à  ª«î祩
;-----------------;
;-----------------;
.GetParam:
.NextParam+1: LD HL,0
LD DE,Buffer ; ¡ãä¥à ¤«ï ®¯¥à æ¨© á® áâப ¬¨
LD C,Dss.GSwitch ; âã⠢뤥«ï¥¬ ¯ à ¬¥âà § ¯ã᪠
RST #10 ; ¯®«ãç ¥¬ ¢ ¡ãä¥à¥ á«¥¤ãî騩 ¯ à ¬¥âà
LD (.NextParam),HL
LD A,(Buffer)
AND A
RET NZ ; <20>®à¬ «ì­ë© ¢®§¢à â C = 0
SCF
RET ; ‚®§¢à â á ®è¨¡ª®© C = 1
;-----------------;
;-----------------;
.OpenRDfile: LD BC,Dss.EX_Path.GET_ALL * 256 + Dss.EX_Path ; ¯à®¢¥à塞 ¡ãä¥à ­  ª®à४⭮áâì ¨¬¥­¨ ä ©« 
RST ToDSS
RET C ; ®è¨¡ª  ¢ áâப¥
AND %00000011 ; ¯à®¢¥à塞, çâ® ¥áâì ¨¬ï ¨
XOR %00000011 ; à áè¨à¥­¨¥ ä ©«  (0 ¨ 1 ¡¨âë)
SCF
RET NZ ; ®è¨¡ª  ä ©«  - ¢ë室
LD A,Dss.Open.R
LD HL,Buffer
LD C,Dss.Open
RST 10h ; ®âªàë⨥ ä ©« 
LD (key_buff.FM),A ; á®å࠭塞 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
RET
;
.OpenWRfile: XOR A ;LD A,FileAttrib.Normal
LD C,Dss.Create
RST ToDSS
LD (key_buff.FM),A ; á®å࠭塞 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
RET
;-----------------;
.GetDRVnum: LD HL,Buffer+2
LD (HL),'\'
INC HL
LD (HL),0
EX DE,HL
LD HL,Buffer
LD B,Dss.EX_Path.GET_DRIVE
LD C,Dss.EX_Path ; âãâ ®¯à¥¤¥«ï¥¬ ¨¬ï ¤¨áª  «¨ ¢ ¡ãä¥à¥
RST ToDSS ; ¯®«ãç ¥¬ ¢ € «®£¨ç¥áª¨© ­®¬¥à ¤¨áª 
RET C
LD BC,0*256 + 8
LD DE,#55AA
RST #18 ; ¨§ «®£¨ç¥áª®£® ¢ 䨧¨ç¥áª¨© ­®¬¥à ¤¨áª 
EX AF,AF'
LD C,A
AND #F0
XOR #60
SCF
RET NZ
LD A,C
AND #0F
RET
;-----------------;
;*******************************************************
Loader_length EQU $-BEGIN
;!FIXIT
PagesBuffer EQU $
Buffer EQU PagesBuffer+256
;----------------------------------------------[End Code section]
STACK_CHECK_MACRO stack_point, (stack_buffer+256)
;----------------------------------------------[Data after Loader]
/*
;-----------------------------------------------------------------------;
Test: LD (dss_line),IX ; ‘®å࠭塞 㪠§ â¥«ì ­  áâப㠧 ¯ã᪠.
LD A,(IX) ; âãâ DSS ª« ¤ñâ ¤«¨­ã ¯ à ¬¥â஢ ª®¬.áâப¨
AND A ; ¯à®¢¥à塞 ­  ®âáãâá⢨¥ ¯ à ¬¥â஢
JP NZ,1F ; § ¯ã᪠ ¢ ª®¬.áâப¥. …᫨ ¨å ­¥â,
LD HL,Help_Msg ; â® ¯¥ç â ¥¬ ¨­áâàãªæ¨î ¨ ¢ë室¨¬
CALL PrintStr ; ¨§ ¯à®£à ¬¬ë á ­®à¬ «ì­ë¬ ª®¤®¬
LD B,0 ; § ¢¥à襭¨ï.
JP Exit ;
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
GetParam: LD HL,(NextParameter) ;
LD C,43h ; âã⠢뤥«ï¥¬ ¯ à ¬¥âà § ¯ã᪠
LD DE,Buffer ; ¡ãä¥à ¤«ï ®¯¥à æ¨© á® áâப ¬¨
RST #10 ; ¯®«ãç ¥¬ ¢ ¡ãä¥à¥ á«¥¤ãî騩 ¯ à ¬¥âà
ld (NextParameter),hl ;
CCF ;
LD A,(Buffer) ;
AND A ;
RET NZ ; <20>®à¬ «ì­ë© ¢®§¢à â C = 0
SCF ;
RET ; ‚®§¢à â á ®è¨¡ª®© C = 1
;-----------------------------------------------------------------------;
LD HL,COMLINE ;HL 㪠§ë¢ ¥â ­  ª®¬ ­¤­ãî áâபã
.loop: LD DE,BUFFER ;DE 㪠§ë¢ ¥â ­  ¡ãä¥à ¤«ï ¯ à ¬¥â஢
LD C,43h ;”ã­ªæ¨ï ¢ë¤¥«¥­¨ï ¯ à ¬¥âà 
RST 10h ;‚믮«­¥­¨¥ ä㭪樨
PUSH AF
PUSH HL
POP HL
POP AF
JP NC,.loop
LD A,(BUFFER)
AND A
JR NZ,NEXTP
*/