From 7bf283a88df81dcd8a09923986e52907ce810b5b Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Thu, 15 Jun 2023 02:43:14 +1000 Subject: [PATCH] setup --- Shared_Includes/LUA/Functions.lua | 408 ---- Shared_Includes/constants/BIOS_equ.inc | 197 -- Shared_Includes/constants/EXE_Header.z80 | 33 - Shared_Includes/constants/SP2000.inc | 1871 ------------------ Shared_Includes/constants/dss_equ.inc | 397 ---- Shared_Includes/macroses/accelerator.z80 | 85 - Shared_Includes/macroses/macros.z80 | 356 ---- Shared_Includes/structures/EasterSprites.inc | 9 - Shared_Includes/structures/FileSystem.inc | 24 - Shared_Includes/structures/bmp.inc | 31 - 10 files changed, 3411 deletions(-) delete mode 100644 Shared_Includes/LUA/Functions.lua delete mode 100644 Shared_Includes/constants/BIOS_equ.inc delete mode 100644 Shared_Includes/constants/EXE_Header.z80 delete mode 100644 Shared_Includes/constants/SP2000.inc delete mode 100644 Shared_Includes/constants/dss_equ.inc delete mode 100644 Shared_Includes/macroses/accelerator.z80 delete mode 100644 Shared_Includes/macroses/macros.z80 delete mode 100644 Shared_Includes/structures/EasterSprites.inc delete mode 100644 Shared_Includes/structures/FileSystem.inc delete mode 100644 Shared_Includes/structures/bmp.inc diff --git a/Shared_Includes/LUA/Functions.lua b/Shared_Includes/LUA/Functions.lua deleted file mode 100644 index 84984d0..0000000 --- a/Shared_Includes/LUA/Functions.lua +++ /dev/null @@ -1,408 +0,0 @@ ----@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) - - -- убираем из дефайна_пути_файла всякие табы и пробелы лишние. Путь должен быть обрамлён одинарными кавычками - 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 - - -- Расчёт контрольной суммы (регистры 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) - -- убираем из дефайна_пути_файла всякие табы и пробелы лишние. Путь должен быть обрамлён одинарными кавычками - 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 - - -- убираем из дефайна_пути_файла всякие табы и пробелы лишние. Путь должен быть обрамлён одинарными кавычками - 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 --- []===========================[] \ No newline at end of file diff --git a/Shared_Includes/constants/BIOS_equ.inc b/Shared_Includes/constants/BIOS_equ.inc deleted file mode 100644 index 00745b4..0000000 --- a/Shared_Includes/constants/BIOS_equ.inc +++ /dev/null @@ -1,197 +0,0 @@ -; Строка 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 ; Получить физический номер страницы из блока памяти -.GetMemBlkPages EQU #C5 ; Получить список физических страниц блока -.GetBanksPorts EQU #C6 ; Получение адресов портов окон -.GetMemPageNext EQU #C7 ; Получить номер следующей страницы блока по предыдущему № -;.GET_RAMD_NUM EQU #9B ; Получить номер RAM-Disk-а (0..15) по его block id -.DivMemBlocks EQU #9D ; Разделение блока -.MergeMemBlocks EQU #9E ; Слияние блоков -;--------------------------------------- - -;[Работа с блоками ОЗУ, как с RAM-Disks] -.BLK_RD_WR EQU #C8 ; Чтение/запись из/в блок памяти секторами по 256 байт -.GetMemRMD EQU #92 ; Получить блок памяти N bytes для RAM-Disk'а -.FreeMemRMD EQU #93 ; Освободить блок памяти для RAM-Disk'а -.GetMemPageRMD EQU #94 ; Получить физический номер страницы RAM-Disk'а -.RAMD_CALC_PAGE EQU #98 ; Вычисление страницы и адреса в RAM-Disk по абсолютному номеру сектора -.BLK_TO_RAMD EQU #C9 ; Назначить блок памяти RAM-Disk-у -.RAMD_CLEAR EQU #CA ; Освободить RAM-Disk -.GET_RAMD_ST EQU #CE ; Получение идентификатора блока, назначенного на RAM-Disk -;--------------------------------------- - -;[Управление назначением на дисководы]-- -.RAMD_TO_DRV EQU #CB ; Назначение RAM-Disk на дисковод TR-DOS -.FDD_TO_DRV EQU #CC ; Назначение физического дисковода на логический -.HDD_TO_DRV EQU #CD ; Назначение винчестера на дисковод -.GET_DRV_ST EQU #CF ; Получить тип назначения на логический дисковод -;--------------------------------------- - -;[Управление окнами и режимами экрана]-- -.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 ; Положить символ на экран -.WIN_SET_ZG EQU #B6 ; установка знакогенератора -.WIN_MOVE EQU #B7 ; Перемещение окна -.WIN_GET_ZG EQU #B8 ; Получение знакогенератора -;--------------------------------------- - -;[Функции печати и упр. режимом экрана]- -.LP_OPEN_S EQU #80 ; Открытие стандартных окон. -.LP_PRINT_ALL EQU #81 ; Печать символов с атрибутом -.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 ; Получить текущее положение вывода на экран -;--------------------------------------- - -;[Графические функции]------------------ -.PIC_POINT EQU #A1 ; Установить точку -.PIC_SET_PAL EQU #A4 ; Установка палитры -.SET_PAL_INIT EQU #A6 ; Установка внутренней палитры -;--------------------------------------- - -;[Работа с HDD. #4X (fast)]------------- -.HDD_INIT EQU #40 ; Инициализация винчестера -.HDD_RECAL EQU #41 ; Рекалибровка винчестера -.HDD_TEST_IDE EQU #42 ; Тест наличия интерфейса IDE -.HDD_PREPARE EQU #43 ; Подготовка винчестера к операции чтения/записи -.HDD_READ_BPB EQU #44 ; Читать BPB первого раздела -.HDD_READ EQU #45 ; Читать сектора с винчестера -.HDD_WRITE EQU #46 ; Писать сектора на винчестер -.HDD_PART EQU #47 ; Настройка партиций и master/slave -.HDD_READ_NEXT EQU #48 ; Читать следующий сектор (ONLY FOR LBA!) -;--------------------------------------- - -;[Работа с HDD и дисководами. #5X]------ -.DRV_RESET EQU #51 ; Сброс контроллера и настройка на диск -.DRV_READ_LONG EQU #52 ; Чтение с устройств в указанную страницу -.DRV_WRITE_LONG EQU #53 ; Запись на устройства в указанную страницу -.DRV_VERIFY EQU #54 ; Проверка секторов -.DRV_READ EQU #55 ; Чтение с устройства -.DRV_WRITE EQU #56 ; Запись на устройства -.DRV_DETECT EQU #57 ; Определение параметров устройства -.DRV_GET_PAR EQU #58 ; Получить параметры носителя -.DRV_SET_PAR EQU #59 ; Установить параметры носителя -.EXT_VERSION EQU #5A ; Номер версии дисковой спецификации. -.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 ; Проверить наличие CMOS -.CMOS_RD EQU #F6 ; Читать из регистра CMOS -.CMOS_WR EQU #F7 ; Писать в регистр 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 -;--------------------------------------- - -;-----------------------[НЕПРОВЕРЕНО!!!]---------------------- - -;============================================================= -; ..Внутренняя функция.. -; открыть графическое окно, с описателем в IX -; на месте HL, E - страница режима, седьмой бит E - режим BOND -.PIC_FN0 EQU #A0 -;============================================================= - -;============================================================= -; point 3D13h C=0A2h -; ВЫВОД ЛИНИИ 'FILL' вход: dE - вертикаль, HL - горизонталь. -; IX - длина линии в точках, A - цвет -.PIC_FN2 EQU #A2 -;============================================================= - -;============================================================= -; point 3D13h C=0A3h -; ВЫВОД ЛИНИИ 'COPY' вход: dE - вертикаль, IX - горизонт. -; A',HL' - адрес данных, откуда брать данные -; A' - страница RAM-Disk/MEM, HL' - адрес в стр.2 -; BC' - длина данных -; Выход: HL',A' - следующий байт в RAM-Disk !!! -.PIC_FN3 EQU #A3 -;============================================================= - -;============================================================= -; point 3D13h C=0A5h -; УСТАНОВКА СТРАНИЦЫ ВЫВОДА НА ЭКРАН Вход: E = 0/1 -.PIC_FN5 EQU #A5 -;============================================================= - -;============================================================= -; point 3D13h C=0A7h -;////// недоделанная !!! //////////////////////////// -; Рисование линий. Е - вертикаль, HL - горизонталь -; H' - высота, C'/DE',B' - add_parameters D - color -; C' = 80h, DE' = 0, B'=0 - для вертикальных линий -; Алгоритм: -; 1: Поставить точку цветом 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 !!! //////////////////////////////// -; Рисование спрайтов -; E - вертикаль, IX - горизонталь -; D - код увеличения/уменьшения -; B - управляющий код -; 0 - Вывод постоянного спрайта -; 1 - Вывод временного спрайта -; 2 - Восстановление картинки под временным спрайтом -; HL - Special coding data ( данные спрайта форма, цвета.. ) -; flick-подобный формат -.PIC_FN9 EQU #A9 -;============================================================= \ No newline at end of file diff --git a/Shared_Includes/constants/EXE_Header.z80 b/Shared_Includes/constants/EXE_Header.z80 deleted file mode 100644 index 4a1237a..0000000 --- a/Shared_Includes/constants/EXE_Header.z80 +++ /dev/null @@ -1,33 +0,0 @@ -; -;*************************************** - 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 Размер первичного загрузчика или 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 -; ПРИМЕР: -; 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 а если код для загрузки не сразу после заголовка? -;*************************************** -; \ No newline at end of file diff --git a/Shared_Includes/constants/SP2000.inc b/Shared_Includes/constants/SP2000.inc deleted file mode 100644 index fb9610f..0000000 --- a/Shared_Includes/constants/SP2000.inc +++ /dev/null @@ -1,1871 +0,0 @@ -; - DEFDEVICE SPRINTER, #4000, 256 - - IFNDEF _includedSP2000 : DEFINE _includedSP2000 : ENDIF -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Прерывания ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Вектор #FF: -; клавиатура - висит 32 такта. можно проверить по буферу в проце, может наложиться с остальными. -; кадровое - висит 32 такта. Может наложиться с остальными. -; CBL - висит до захвата процем, может наложиться с остальными. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Адреса портов ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; ПОРТ #FE -; Read: -; bit0 - keyboard -; bit1 - keyboard -; bit2 - keyboard -; bit3 - keyboard -; bit4 - keyboard -; bit5 - display sync: 1 - луч>256, 0 - луч<256. Ход луча 0..319 / 0..311, в зависимости от развёртки. Работает только при активированном CBL, иначе всегда 0 -; bit6 - Tape in -; bit7 - если активированы прерывания CBL: 1 - CBL interrupt, иначе расширенный бит спектрумовской клавиатуры -; -; Write: -; bit0 - Border Color -; bit1 - Border Color -; bit2 - Border Color -; bit3 - Tape out -; bit4 - Beeper out -; bit5 - -; bit6 - -; bit7 - - - -ZX_Beeper EQU #FE ; bit 4 -ZX_Tape_Ou EQU #FE ; bit 3 -ZX_Tape_In EQU #FE ; bit 6 - -;------------[Covox Blaster]------------; -CBL: -.OUT EQU #4F ; Порт для вывода звука = #FB -.BUFFER_PAGE EQU #FD ; страница-буфер для кидания музла акселем (прерывания CBL должны быть включены) -.INT_PORT EQU #FE ; bit4=1 --> bit7=1 запрос на заполнение полубуфера данными -.SYS_PORT EQU #004E ; порт управления COVOX-Blaster (CBL_DIR). 16-bit port!!!, писать через OUT (c),reg или очень осторожно)) -.COVOX_OUT EQU #FB ; Порт для вывода звука = #4F - -; #00 - COVOX on, standart Pentagon mode -; #80 - CBL on, 15 kHz mono -; #81 - CBL on, 22 kHz mono -; Bits: -; 7 - covox/CBL -; 6 - моно/стерео -; 5 - 8/16 бит -; 4 - выкл/вкл прерываний (вектор #FF, признак - порт #FE.bit7 и весит до захвата процем) -; 3..0 - частота ; дополнить -; Частоты: -; От 8 до 15 -; Значения 0..7 для совместимости со старым бластером: 0 - 16, 1 - 22 кГц -; -; буфер - 256/512 байт (8/16 bit mode) -; (2 банки по 128/256) -; прерывание прилетает после каждой -; банки - -; Режим 8 бит: -; уровень нуля в семплах - #80 -; Режим 16 бит: -; уровень нуля в семплах - #0000 -; Stereo-сэмплы: -; чередующиеся отсчеты L и R каналов. - -; mono_8bit: -; DB 80h,81h,7Fh.... -; mono_16bit: -; DW 0,1000,-1000... -; stereo_8bit: -; DB 80h,80h,81h,80h,7Fh,80h... ; здесь один канал играет, второй молчит -; stereo_16bit: -; DW 0,0,1000,0,-1000,0... ; аналогично, один канал играет, второй молчит - - -; CASE CBL_XX[3..0] IS -; WHEN 0 => CBL_TAB[] = 13; -- 15.625 KHz -- mono/stereo -; WHEN 1 => CBL_TAB[] = 9; -- 21.875 KHz -- mono/stereo -; WHEN 2 => CBL_TAB[] = 0; -- reserved -; WHEN 3 => CBL_TAB[] = 0; -- reserved -; WHEN 4 => CBL_TAB[] = 0; -- reserved -; WHEN 5 => CBL_TAB[] = 0; -- reserved -; WHEN 6 => CBL_TAB[] = 0; -- reserved -; WHEN 7 => CBL_TAB[] = 0; -- reserved - -; WHEN 8 => CBL_TAB[] = 27; -- 7.8125 KHz -- mono/stereo 8/16 bit -; WHEN 9 => CBL_TAB[] = 19; -- 10.9375 KHz -- mono/stereo 8/16 bit -; WHEN 10=> CBL_TAB[] = 13; -- 15.625 KHz -- mono/stereo 8/16 bit -; WHEN 11=> CBL_TAB[] = 9; -- 21.875 KHz -- mono/stereo 8/16 bit -; WHEN 12=> CBL_TAB[] = 6; -- 31.25 KHz -- mono/stereo 8/16 bit -; WHEN 13=> CBL_TAB[] = 4; -- 43.75 KHz -- mono/stereo 8/16 bit -; WHEN 14=> CBL_TAB[] = 3; -- 54.6875 KHz -- mono/stereo 8/16 bit -; WHEN 15=> CBL_TAB[] = 1; -- 109.375 KHz -- mono/stereo 8/16 bit -; END CASE; -;---------------------------------------; - -;======================================= -; замаплен через карту портов на #7C/#3C и #74/#24 -CNF_PORT: -.ON EQU #74 -.OFF EQU #24 -.TURBO.ON EQU 3 ; данные для включения TURBO -.TURBO.OFF EQU 2 ; данные для выключения TURBO -.CNF_0 EQU #04 ; карта портов 0 -.CNF_1 EQU #0C ; карта портов 1 -.CNF_2 EQU #14 ; карта портов 2 -.CNF_3 EQU #1C ; карта портов 3 -.CNF_512 EQU #80 ; включение Pentagon 128 -; прибит в конфе гвоздями на #7C/#3C -SYS_PORT: -.ON EQU #7C -.OFF EQU #3C -.RAM EQU .OFF -.ROM EQU .ON -.PAGE0 EQU 1 -.PAGE8 EQU 0 -.EXPANSION EQU .PAGE0 -.BIOS EQU .PAGE8 -.TURBO.ON EQU CNF_PORT.TURBO.ON -.TURBO.OFF EQU CNF_PORT.TURBO.OFF -.CNF_0 EQU CNF_PORT.CNF_0 -.CNF_1 EQU CNF_PORT.CNF_1 -.CNF_2 EQU CNF_PORT.CNF_2 -.CNF_3 EQU CNF_PORT.CNF_3 -.CNF_512 EQU CNF_PORT.CNF_512 -/* ---------------------------------------------------- -CNF_PORT висит на 4 внешних портах (#7C/#3C и #74/#24) через карту портов. -SYS_PORT гвоздями в конфе на #7C/#C - -SYS_PORT только переключает RAM/ROM -CNF_PORT меняет всё остальное, при бит1=0 меняются страницы эмулятора ПЗУ через бит0 - -CNF_PORT -bit0 - TURBO: on/off или vROM: -; #24 - страница из вн.порта (#E0..#E3)/(#E4..#E7) -; #74 - страница из вн.порта #EB/#EF -bit1 - 1 - TURBO ena, 0 - переключение vROM page -bit2 - 1 - CNF ena -bit3 - \_ cnf0..cnf3 ;\ -bit4 - / ; \ -bit5 - CNF_PN[5..0]_RESET by 1 - сброс Пент. порта ; |---> действуют только при bit2=1 -bit6 - CNF_SC_RESET by 1 - сброс Скорп. порта ; / -bit7 - CNF_PN[7..6]_RESET by 0 - сброс Пент-512 ;/ - -Переключение страниц vROM: -; Port #24 = 0 - #E0 - EXPANSION ; #1FFD bit2=1 - #E1 - TR-DOS ; PC = #3D00..#3DFF and #1FFD bit2=0 - #E2 - BASIC-128 ; #7FFD bit4=0 and #1FFD bit1=0 - #E3 - BASIC-48 ; #7FFD bit4=1 and #1FFD bit1=0 -; Port #24 = 1 - #E4 - EXPANSION 2 ; #1FFD bit2=1 - #E5 - TR-DOS 2 ; PC = #3D00..#3DFF and #1FFD bit2=0 - #E6 - BASIC-128 2 ; #7FFD bit4=0 and #1FFD bit1=0 - #E7 - BASIC-48 2 ; #7FFD bit4=1 and #1FFD bit1=0 -; Port #74 = 0 - #EB - BIOS-1 ; -; Port #74 = 1 - #EF - BIOS-2 ; -;;;;;;;; - -SYS_PORT: -bit0 - TURBO: on/off или BIOS: Part1/Part0 -bit1 - 1 - TURBO ena, 0 - переключение BIOS-PAGE -bit2 - 1 - CNF ena -bit3 - \_ cnf0..cnf3 ;\ -bit4 - / ; \ -bit5 - CNF_PN[5..0]_RESET by 1 - сброс Пент. порта ; |---> действуют только при bit2=1 -bit6 - CNF_SC_RESET by 1 - сброс Скорп. порта ; / -bit7 - CNF_PN[7..6]_RESET by 0 - сброс Пент-512 ;/ - -Функция bit0 определяется через bit1 -bit7..bit3 срабатывают при bit2 = 1 - -Запись в порт #7C подключает ПЗУ в окно 0, запись в порт #3C отключает - ПЗУ от окна 0, поэтому порт 7С/3C называется System/User. -Переключение страниц ПЗУ работает в этом варианте так: - в ПЗУ 16 страниц от 0 до 15, порт #5C их переключает с bit3 xor /SYS (SYS_PORT bit[1..0] = b"0X" (BIOS: Part1/Part0)) - если сделать ld a,1 : out (sys_port_on),a - то нумерация страниц ПЗУ будет правильная от 0 до 15, - если сделать ld a,0 : out (sys_port_on),a - то нумерация страниц ПЗУ будет с инвертированным bit3: - страницы ПЗУ 0-7 будут нумероваться как 8-15 - страницы ПЗУ 8-15 будут нумероваться как 0-7 ----------------------------------------------------- -*/ -;======================================= - -; порты управления страницами фастрам -FastRAM: -.ON EQU #FB ; Включение кэша IN A,(FastRAM.ON) - прибито гвоздями в конфе -.OFF EQU #7B ; Отключение кэша IN A,(FastRAM.OFF) - прибито гвоздями в конфе -.SLOT0 EQU #5C ; Переключение страниц кэша при FastRAM.ON в нулевом окне (bit0..1) - прибито гвоздями в конфе - -; Порт управления страницами ПЗУ -; Переключение страниц ПЗУ при FastRAM.OFF в нулевом окне. -ROM: -.SLOT0 EQU #5C ; Прибито гвоздями в конфе -.BIOS EQU SYS_PORT.BIOS ; для sys_port.on D_ROM16OFF -.EXPANSION EQU SYS_PORT.EXPANSION ; для sys_port.on D_ROM16ON -; Значения: -; номер страницы bit3..0 -; разрешение записи bit4 (0 - no Write; 1 - Write) -; при bit4 == 1 принудительно выставляется и блокируется sys_pg в 1 (ld a,1 : out (sys_port_on),a) -; пока bit4 не сброшен переключать страницы ПЗУ system/user через порт - - -P_KBD_OUT EQU #F8 ;!FIXIT заменить -P_KBD_IN EQU #FE ;!FIXIT заменить - -KEMPSTON: -.JOYSTICK EQU 7 - -; Чтение: порт джойстика и сигналы DRQ, INTRQ контроллера дисковода. -; Запись: запись в микросхему ТМ9 - системный порт TR-DOS -; кемпстон из DOS_ON для специального шнурка LPT+JOY чтоб по PC Link коннектиться к PC -.PC_Link EQU #FF ;JOY_DOS - -.MOUSE.X EQU #FBDF -.MOUSE.Y EQU #FFDF -; bit0: левая кнопка (0=нажата) -; bit1: правая кнопка (0=нажата) -; bit2: средняя кнопка (0=нажата) -; bit3: зарезервировано под ещё одну кнопку (0=нажата) -; bit4..7: координата колёсика -.MOUSE.Buttons EQU #FADF - - -;---------------[Border]---------------- -BorderColor EQU #FE -; bit 2..0: -; bit 0 - синий -; bit 1 - красный -; bit 2 - зелёный -; 0 - чёрный -; 1 - синий -; 2 - красный -; 3 - пурпурный -; 4 - зелёный -; 5 - голубой -; 6 - жёлтый -; 7 - белый -; -; цвет бордюра в режиме спринтера берётся из 4 палитры. -; цвет в палитре вычисляется дублированием в байте цвета bit2..0 в bit5..3 -; можно вычислять итоговый индекс в палитре умножением цвета на 9, либо -; три сдвига цвета влево плюс исходный цвет цвет -; 0 - BLACK color index #00 -; 1 - BRIGHT BLUE color index #09 -; 2 - GREEN color index #12 -; 3 - BRIGHT CYAN color index #1B -; 4 - RED color index #24 -; 5 - BRIGHT MAGENTA color index #2D -; 6 - BROWN color index #36 -; 7 - WHITE color index #3F -;--------------------------------------- - -;-------------[ZX keyboard]------------- -; № ╔══╦══╦══╦══╦══╦══╦══╦══╦══╦══╗ -; БИТA ║ 0║ 1║ 2║ 3║ 4║ 4║ 3║ 2║ 1║ 0║ -; ╚══╩══╩══╩══╩══╩══╩══╩══╩══╩══╝ -; № ┌──┬──┬──┬──┬──╥──┬──┬──┬──┬──┐ № -; П 3│ 1│ 2│ 3│ 4│ 5║ 6│ 7│ 8│ 9│ 0│ 4 П -; О ├──┼──┼──┼──┼──║──┼──┼──┼──┼──┤ О -; Л 2│ Q│ W│ E│ R│ T║ Y│ U│ I│ O│ P│ 5 Л -; У ├──┼──┼──┼──┼──║──┼──┼──┼──┼──┤ У -; Р 1│ A│ S│ D│ F│ G║ H│ J│ K│ L│EN│ 6 Р -; Я ├──┼──┼──┼──┼──║──┼──┼──┼──┼──┤ Я -; Д 0│CS│ Z│ X│ C│ V║ B│ N│ M│SS│SP│ 7 Д -; А └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘ А -; Клавиша нажата: бит = 0 -; 3 - #F7 7 - #7F -; 2 - #FB 6 - #BF -; 1 - #FD 5 - #DF -; 0 - #FE 4 - #EF - -; Возможно одновременное чтение -; нескольких полурядов при сбросе -; нескольких бит в старшем байте -; адреса порта -ZXKeys EQU #FE -.Line_0 EQU #FEFE -.Line_1 EQU #FDFE -.Line_2 EQU #FBFE -.Line_3 EQU #F7FE -.Line_4 EQU #EFFE -.Line_5 EQU #DFFE -.Line_6 EQU #BFFE -.Line_7 EQU #7FFE - - -; ????? Что-то про расширенный бит клавы в #FE - -; CS - caps shift -; SS - symbol shift -; FS - function shift - -; Left Shift => CS -; Right SHIFT => CS -; Ctrl => SS -; Alt => SS+CS -; left WIN => ENTER+CS -; ESC => SPACE+CS -; Right WIN => ENTER+SS -; Right Mouse => SPACE+SS - -; Back => 0+CS -; Tab => 1+CS -; Caps Lock => 2+CS -; PUp => 3+CS -; PDn => 4+CS -; <- => 5+CS -; Dn => 6+CS -; Up => 7+CS -; -> => 8+CS -; DEL => 9+CS - -; ~ => A+SS -; '' => D+SS - -; / => V+SS -; Grey * => B+SS -; , => N+SS -; . => M+SS - -; [ => Y+SS -; ] => U+SS -; Grey 5 => I+SS -; ; => O+SS -; ' => P+SS - -; Home => Q+SS -; Ins => W+SS -; End => E+SS - -; - => J+SS -; Grey - => J+SS -; Grey + => K+SS -; = => L+SS - -; F1 => 1+FS -; F2 => 2+FS -; F3 => 3+FS -; F4 => 4+FS -; F5 => 5+FS -; F6 => 6+FS -; F7 => 7+FS -; F8 => 8+FS -; F9 => 9+FS -; F10 => 0+FS -; Scroll Lock => CS+FS -;--------------------------------------- -; -;--------[синхронизация экрана]--------- -SCR_SyncPort EQU #FE -; bit 5 - синхронизация экрана -; кадровый импульс -; длина - 4 мс -; период - 20 мс - -;--------------------------------------- -; - -SLOT0 EQU #82 ; номер банки 0 -SLOT1 EQU #A2 ; номер банки 1 -SLOT2 EQU #C2 ; номер банки 2 -SLOT3 EQU #E2 ; номер банки 3 - -PORT_Y EQU #89 ; вертикальная координата точки на графическом экран -RGADR EQU #89 ; страница VIDEO-RAM для спектрумовского режима -;RGSCR EQU #E9 = RGMOD -RGMOD EQU #C9 ; порт режима экрана. Переключает страницы режима экрана. -SCREEN_SWITCH EQU #C9 ; порт режима экрана. Переключает страницы режима экрана. -;RGACC EQU #A9 -PGACC EQU #FC ; Порт масштабирования - -Port_All_Mode EQU #204E -; bit0 - 0: выкл акселератора и прерываний от клавиатуры, включение спековской адресации экрана. -; bit1 - -; bit2 - вкл/выкл original zx spectrum waits -; bit3 - вкл/выкл отдельное от акселератора прерывания от клавиатуры -; bit4 - -; bit5 - -; bit6 - -; bit7 - - -Port_VSYNC EQU #BD ; #41 - 320Lines/49Hz, #61 - 312Lines/50Hz -.SET_320L EQU #41 -.SET_312L EQU #61 - -; -;----------------------------------------------------------------------; - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ; Адреса страниц ; - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;SCR_PAGE EQU 0FDH -;PAL_PAGE EQU 0FDH -PAL_V_PAGE EQU #9E ;????? -PAL_SCP EQU #1E ;????? - -; страница портов -DCP_PAGE EQU #40 - -; страница используемая DSS -DSS_PAGE EQU #FF -ZERO_PAGE EQU 0 -; страница для перехвата ресета и ещё чего-то -Spec_Page EQU #41 -MODE_PAGE EQU #FC ;????? если рудимент, то убрать из резервирования в таблице страниц -RESET_PAGE EQU #A0 - ; Сброс может быть осуществлен записью в страницу #A0, установленную в расширенную - ; страницу Scorpion-овского распределения портов, т.е. следующей программой: - ; DI - ; LD A,16 - ; LD BC,#1FFD - ; OUT (C),A - ; LD A,RESET_PAGE - ; OUT (PAGE3),A - ; LD (#C000),A ; в этот момент подается RESET - ; -; страница с системными переменными BIOS -SYS_PAGE EQU #FE -.ID_FLAG EQU #C000 ; копия ID_SPRINTER для детекта полной инициализации. 32 bytes max -; vsync: -; bit0 1 - 320L, 0 - 312L -; bit1 1 - no waits, 0 - original waits -.VSyncAndWaits EQU #C020 -;!TODO EQU #C021 - #C027 -; STACK for FN_LIB end EQU #C028 -.SYS_SP EQU #C0FE ; ДОПОЛНИТЕЛЬНЫЙ СТЕК для FN_LIB и ещё чего-то -.DISK_TYPE EQU #C100 ; переадресация дисков -.COPY_SLOT0 EQU #C104 ; копии значений портов страниц -.COPY_SLOT1 EQU #C105 -.COPY_SLOT2 EQU #C106 -.COPY_SLOT3 EQU #C107 -.RAMD_VARS EQU #C108 ; переменные RAM-дисков ;!TODO сохранять тут признак смены рамдиска или его блока памяти для драйвера DSS -.A_RAMD_VARS EQU #C118 ; текущий RAM-Disk -.SP_SAVE EQU #C11A ; место для сохранения адреса стека -.ERR_SAVE EQU #C11C -.COPY_RGADR EQU #C11D -.RAM_MSD EQU #C11E ; страница для работы в MS-DOS -.MSD_SECS EQU #C11F ; Число секторов в MS-DOS -.MSD_NAME EQU #C120 ; Адрес имени найденного файла -;.HDD_WRITE_PROTECT EQU #C122 ; копия содержимого ячейки кмос ;!TODO -.INT_ADRESS EQU #C124 ; адрес обработчика прерывания -.INT_PAGE EQU #C126 ; страница с обработчиком прерывания -.INT_ID EQU #C127 ; если = #AA - значить обработчик установлен -.DS_1440 EQU #C128 ; флаги переключения 720/1440 -.F_P_S EQU #C129 ; число файловых записей в секторе -.S_P_C EQU #C12A ; число секторов каталога -.COUNT_FL EQU #C12B ; счетчик файлов в секторе -.COUNT_SEC EQU #C12C ; счетчик секторов в каталоге -.C_P_B EQU #C12D ; число кластеров на блок ОЗУ -;!TODO EQU #C12E -.FAT_FLAG EQU #C130 ; FAT флаг + FAT sector -.MSD_CONT_SEC EQU #C132 ; текущий сектор для MS-DOS -.MSD_CONT_SEC2 EQU #C134 -.S_X_H EQU #C136 ; количество секторов на цилиндре - -; тут хранится указатель на таблицу инта -; используемую функцией #F2 BIOS -.CONFIG_ALL EQU #C138 ; описатель конфигурации - 2 байта - -;Есть такой код, например: -; LD DE,CNF_0+D_TBOFF -; LD (SYS_PAGE.CONFIG_DE),DE -; первый байт для SYS_PORT_ON/OFF. -; второй байт для выбора режима -; спектрума при запуске функциями ПЗУ. -.CONFIG_DE EQU #C13A ; описатель конфигурации - 2 байта - -; 2 байта конфигурации - наследие Sp97. -; Младший байт текущая конфа (типа PG_SP1) -; Старший байт если 0, то эта конфа активирована. -; В Sp2000 туда пихается значение типа #FEFF -.CONFIG_BYTE EQU #C13E - -.WIN_MAP_SC EQU #C140 -.WIN_TAB_SC EQU #C142 -.WIN_SAV_HL EQU #C144 -.WIN_SAV_DE EQU #C146 -.WIN_SAV_BC EQU #C148 -.WIN_ZG EQU #C14A -.WIN_PLACE_WIN EQU #C14C -.WIN_GR_MAP EQU #C14E - -.SYS_WORK1 EQU #C150 -.SYS_WORK2 EQU #C152 -.SYS_WORK3 EQU #C154 -.SYS_WORK4 EQU #C156 - -.WIN_MAP_LAB1 EQU #C158 -.WIN_MODE_SH EQU #C15C -.WIN_MODE_SC EQU #C15E - -.MSD_FAT_SEC EQU #C160 ; начальный сектор FAT -.MSD_FAT_SEC2 EQU #C162 ; начальный сектор FAT -.MSD_CAT_SEC EQU #C164 ; начальный сектор CAT -.MSD_CAT_SEC2 EQU #C166 ; начальный сектор CAT -.MSD_DAT_SEC EQU #C168 ; начальный сектор DAT -.MSD_DAT_SEC2 EQU #C16A ; начальный сектор DAT -.CLASTER_LEN EQU #C16C ; длина кластера в байтах -.CLASTER_LEN2 EQU #C16E ; длина кластера в байтах - -; vsync: -; bit0 1 - 320L, 0 - 312L -; bit1 1 - no waits, 0 - original waits -;.VSyncAndWaits EQU #C170 - -;!TODO EQU #C170 - #C17F - -.RAMD_KEYS EQU #C180 ; RAM-Disks ID's - адрес в SYS_PAGE для каждой буквы рамдиска -.RAMD_KEYS.E EQU #C180 ; по которому хранится его начальный блок памяти -.RAMD_KEYS.F EQU #C181 -.RAMD_KEYS.G EQU #C182 -.RAMD_KEYS.H EQU #C183 -.RAMD_KEYS.I EQU #C184 -.RAMD_KEYS.J EQU #C185 -.RAMD_KEYS.K EQU #C186 -.RAMD_KEYS.L EQU #C187 -.RAMD_KEYS.M EQU #C188 -.RAMD_KEYS.N EQU #C189 -.RAMD_KEYS.O EQU #C18A -.RAMD_KEYS.P EQU #C18B -.RAMD_KEYS.Q EQU #C18C -.RAMD_KEYS.R EQU #C18D -.RAMD_KEYS.S EQU #C18E -.RAMD_KEYS.T EQU #C18F -.RAMD_KEYS.NUM EQU 16 ; RAMD_KEY_NUM - -;!TODO EQU #C190 - #C19F - -.LIB_TABLE EQU #C1A0; - #C1BF ; таблицы librares 32 байта -; +0 библиотека DOS - -; -.IDE_0 EQU #C1C0 -.IDE_1 EQU #C1C8 -.IDE_2 EQU #C1D0 -.IDE_3 EQU #C1D8 -; -.FDD_0 EQU #C1E0 -.FDD_1 EQU #C1E8 -;.FDD_2 EQU #C1F0 -;.FDD_3 EQU #C1F8 -; - -.RAMD_FAT EQU #C200 ; расположение блоков RAM-Disk-ов -.MS_BPB EQU #C400 ; буфер BPB -.HD_IDF_ADR EQU #C600 ; !FIXIT структурой сделать!!! -.HD_IDF_ADR.heads EQU .HD_IDF_ADR+6 -.HD_IDF_ADR.sectors EQU .HD_IDF_ADR+12 -.HD_IDF_ADR.sec_cyl EQU .HD_IDF_ADR+4 -.MS_DIR EQU #C800 ; буфер DIR sector -.MS_FAT EQU #CC00 ; буфер FAT sector -.MS_BUF EQU #D000 ; буфер DAT sector - -.WIN_MAP_IX EQU #E000 ; данные карт окон - -.TASK_DATA EQU #EC00 ; данные для задач - -.RESTART_ID EQU #F000 ; db "RESTART",0 ;First start identificator - -.PowerOnTime EQU #F008 ; время включения и перезагрузки #F008 - #F017 - - -.USER_VARS EQU #F018 ; переменные пользователей - -;------------[ OLD ]-------------; -;.SYSTEM_ID EQU #C020 ; использовалась для подмены биос "NEW_BIOS" -;.MSD_FAT_SEC EQU #C122 ; начальный сектор FAT -;.INT_ADRESS EQU #C124 ; начальный сектор CAT -;.INT_PAGE EQU #C126 ; начальный сектор DAT -;.CLASTER_LEN EQU #C12E ; длина кластера в байтах -;.CMOS_FLAG_1 EQU #C170 -;----------------------------------------------------------------------; -; -/* - STRUCT FDD_INIT_TABLE -DISK BYTE 0 -F144 EQU FDD_0+0 -SECTORS EQU FDD_0+1 -MS_SECS EQU .SECTORS -HEADS EQU FDD_0+2 -CYLINDL EQU FDD_0+3 -CYLINDH EQU FDD_0+4 -B_P_S EQU FDD_0+5 - ENDS -*/ -; - MODULE FDD_INI_TABLE ; !FIXIT таблицы для FDD устройств 32 байта. привязаться к структуре выше -FDD EQU 3 ; ????? хер его знает, что за параметр, разобраться -FDD_0 EQU SYS_PAGE.FDD_0 -.DISK EQU FDD_0+0 -.F144 EQU .DISK -.SECTORS EQU FDD_0+1 -.MS_SECS EQU .SECTORS -.HEADS EQU FDD_0+2 -.CYLINDL EQU FDD_0+3 -.CYLINDH EQU FDD_0+4 -.B_P_S EQU FDD_0+5 -FDD_1 EQU SYS_PAGE.FDD_1 -.DISK EQU FDD_1+0 -.F144 EQU .DISK -.SECTORS EQU FDD_1+1 -.MS_SECS EQU .SECTORS -.HEADS EQU FDD_1+2 -.CYLINDL EQU FDD_1+3 -.CYLINDH EQU FDD_1+4 -.B_P_S EQU FDD_1+5 - ENDMODULE -; - -; - STRUCT BIOS_DATE_FORMAT ; !FIXIT переделать под структуру все переменные #FE -hour BYTE -minute BYTE -second BYTE -day BYTE -month BYTE -year_high BYTE -year_low BYTE -reserved BYTE - ENDS - -PowerOnDate BIOS_DATE_FORMAT = SYS_PAGE.PowerOnTime -RebootDate BIOS_DATE_FORMAT = PowerOnDate + BIOS_DATE_FORMAT -;#F008-#F00F : db hour,min,sec,day,month,century-1,year-century,reserved ; PowerOn date -;#F010-#F017 : db hour,min,sec,day,mouth,century-1,year-century,reserved ; Reboot date -; - -;----------[CMOS Registers]------------- -CMOS.Port.Data: -.Read EQU #FFBD -.Write EQU #BFBD -CMOS.Port.Address: -.Write EQU #DFBD - - -CMOS.Register: -.seconds EQU #00 -.alarmSeconds EQU #01 -.minutes EQU #02 -.alarmMinutes EQU #03 -.hours EQU #04 -.alarmHours EQU #05 -.dayOfWeek EQU #06 -.date EQU #07 -.month EQU #08 -.year EQU #09 -.century EQU #32 - - -; bit7 - Update-In-Progress. read-only -; bit6..4 - %010: to turn the oscillator on and allow the RTC to keep time. -; %11x: enables the oscillator but holds the countdown chain in reset. -; The next update occurs at 500ms after a pattern of 010 is written. -; bit3..0 - Rate Selector. These four rate-selection bits select one of -; the 13 taps on the 15-stage divider or disable the divider output. -; The tap selected can be used to generate an output square wave (SQW pin) -; and/or a periodic interrupt. The user can do one of the following: -; 1) Enable the interrupt with the PIE bit; -; 2) Enable the SQW output pin with the SQWE bit; -; 3) Enable both at the same time and the same rate; or -; 4) Enable neither. -.CTRLregA EQU #0A - -; bit7 - SET. выставлять в 1 перед установкой времени/даты, после обратно в 0. -; bit6 - Periodic Interrupt Enable (PIE) -; bit5 - Alarm Interrupt Enable (AIE) -; bit4 - Update-Ended Interrupt Enable (UIE) -; bit3 - Square-Wave Enable (SQWE) -; bit2 - Data Mode (DM). формат даты и времени: BCD/HEX -; bit1 - time format: 12/24 -; bit0 - Daylight Saving Enable (DSE) -.CTRLregB EQU #0B - -; bit7 - Interrupt Request Flag (IRQF) -; bit6 - Periodic Interrupt Flag (PF), read-only -; bit5 - Alarm Interrupt Flag (AF) -; bit4 - Update-Ended Interrupt Flag (UF) -; bit3..0 - Unused, read-only == 0 -.CTRLregC EQU #0C ; read-only - -; bit7 - Valid RAM and Time (VRT). Если 1, то батарея в норме, если 0, то батарея сдохла. -; bit6..0 - Unused, read-only == 0 -.CTRLregD EQU #0D ; read-only - - - -;!TODO записать так все параметры в кмос -CMOS.Cell.ScreenSET EQU #1A -; %0000 1111 - COLOR STYLE For Setup -; %0011 0000 - Frame Int (Default/Pentagon/Scorpion/Original) -; %1100 0000 - Screen V-Sinc (Default/312 lines 50 HZ/320 Lines 49 Hz) -.Mask.Sinc EQU #C0 ; SCREEN_HZ -.Mask.Int EQU #30 ; SCREEN_INT -; - - -GR_BIT_END EQU 7 - -S_BIT_END EQU 7 -S_BIT_LIN EQU 6 -S_BIT_MOD EQU 5 - -BIT_1440 EQU 1 -BIT_MASK_1440 EQU %00000010 -;--------------------------------------- - - -; Порты КР1818ВГ93 и т.п. -FDC_93: -.Command EQU #0F ; WG_COM R_COM ;Command/Status -.Track EQU #3F ; WG_TRK R_TRK ;Track -.Sector EQU #5F ; WG_SEC R_SEC ;Sector -.Data EQU #7F ; WG_DATA R_DAT ;Data -.DrvCTRL EQU #FF ; P_DOS_FF R_DSK ;Drive Control -; - -;???????????????????????????????????????? - -;SPRINTER EQU 4 ; ВЕРСИЯ !!! -ISD_WARM EQU 3 -ISD_COLD EQU 0 -IS_KEY EQU #40 ; ДАННЫЕ ДЛЯ ВЫВОДА В ПОРТ ПРИ ВКЛЮЧЕНИИ IS-DOS -IS_RAM_ADR EQU #5BC0 ; АДРЕС ЗАГРУЗКИ ПРОГРАММЫ ПЕРЕХОДА В IS-DOS -TB_WAITES EQU #00 ; WAITы для TURBO-MODE -NTB_WAITES EQU #00 ; WAITы для neTURBO-MODE -IS_WAITES EQU #00 ; WAITы для IS-DOS -;**************************************** -;SYS_PORT_ON EQU #7D -;SYS_PORT_OFF EQU #3D - -RAMD_LET EQU ('R' - 'A') - - -;*************************************** -/* -;HD_HEADS EQU 5 -HD_CS EQU #A0 - -;HD_S_P_T EQU 17 -;HD_S_X_H EQU (HD_S_P_T * HD_HEADS) ; ??? число секторов на цилиндре - -P_DATS EQU #50 ; READ/WRITE INIR/OTIR - -P_ERR EQU #051 ; READ -P_PREC EQU #151 ; WRITE - -P_S_CNT EQU #152 -P_S_NUM EQU #153 -P_C_LOW EQU #154 -P_C_HIG EQU #155 ;<-\ -P_HD_CS EQU #4152 ;<-/ - -P_HDST EQU #4053 ; READ -P_CMD EQU #4153 ; WRITE - -P_HD3F6 EQU #4154 ; WRITE 3F6 -P_HD3F7 EQU #4055 ; READ 3F7 -*/ -;*************************************** -ISA_PORT EQU #9FBD - -;*************************************** -; !FIXIT использовать структуру _sBOOT_SEC -SEC_SIZE EQU 11 -CLAST_SIZE EQU 13 -RESERV_SECS EQU 14 -FATS_NUM EQU 16 -FLS_NUM EQU 17 -S_P_D EQU 19 -FORM_CODE EQU 21 -S_P_F EQU 22 -S_P_T EQU 24 -H_P_S EQU 26 -SPECIAL_SECS EQU 28 -FAT_ID EQU #36 -;*************************************** - - -; ***** - Оконные переменные - ***** - -WIN_SIZE_H EQU 0 ; горизонтальный размер в знакоместах -WIN_SIZE_V EQU 1 ; вертикальный размер в знакоместах -WIN_PLACE_H EQU 2 ; положение по горизонрали, в знакоместах -WIN_PLACE_V EQU 3 ; положение по вертикали в знакоместах -WIN_MODE EQU 4 ; режим знакоместа -WIN_MODE_S EQU 5 ; дополнительный режим -; бит 0 - Sp-SCR, -WIN_GR_X EQU 6 ; положение по X в поле графики (по знакомест) -WIN_GR_Y EQU 7 ; положение по Y в поле графики (по знакомест) - -WIN_HL EQU 8 ; сохранение HL -WIN_BC EQU 10 ; сохранение BC -WIN_DE EQU 12 ; сохранение DE -WIN_V_BEG EQU 14 ; начало окна по вертикали -WIN_V_END EQU 15 ; конец окна по вертикали -WIN_H_BEG EQU 16 ; начало окна по горизонтали -WIN_H_END EQU 17 ; конец окна по горизонтали -WIN_SIZE_REL EQU 18 ; реальный размер в символах -WIN_MODE_E EQU 19 ; дополнительный режим экрана -WIN_WORK_1 EQU 20 ; рабочая переменная 1 -WIN_WORK_2 EQU 21 ; рабочая переменная 2 -WIN_GRAF_X EQU 24 ; начальная координата по X -WIN_GRAF_Y EQU 26 ; начальная координата по Y - -; -; -;SW_ROM EQU #3CF9 ;!HARDCODE from zx roms - -; IF .PROJ4 -;RGADR EQU 0D0H -;RGSCR EQU 0D1H -;RGMOD EQU 0D2H -;RGACC EQU 0D3H -;PGACC EQU 0FCH - -;PAGE0 EQU 0C0H -;PAGE1 EQU 0C5H -;PAGE2 EQU 0C2H -;PAGE3 EQU 0C0H - -; ELSE - -; ENDIF - - -;ALTERA EQU #1400 ;адрес в ПЗУ сжатой страницы DCP - - -;!FIXIT ----------------------------------------------------------------; -;Переменные спектрума -ZX_VARS EQU #5C00 -; -.PR_BUFER EQU #5B00 -.AUTO_5B08 EQU #5B08 -.AUTO_5B5C EQU #5B5C -.COPY_P128 EQU #5B5C -.AUTO_5BFF EQU #5BFF -; -.K_STATE EQU #5C00 -.KEY_TIME EQU #5C09 -.REP_K_TYME EQU #5C10 -.ZG EQU #5C36 -.ERR_BEEP EQU #5C38 -.KEY_BEEP EQU #5C39 -.ERR_NR EQU #5C3A -.FLAGS EQU #5C3B -.TV_FLAG EQU #5C3C -.ERR_SP EQU #5C3D -.LIST_SP EQU #5C3F -.MODE EQU #5C41 -.NEW_PPC EQU #5C42 -.NEW_S_PPC EQU #5C44 -.PPC EQU #5C45 -.SUB_PPC EQU #5C47 -.BORDER EQU #5C48 -.EDIT_PPC EQU #5C49 -.BAS_VARS EQU #5C4B -.WORK_VAR EQU #5C4D -.CHANS EQU #5C4F -.CUR_CHL EQU #5C51 -.BAS_PROG EQU #5C53 -.NEXT_LINE EQU #5C55 -.DATA_ADR EQU #5C57 -.E_LINE EQU #5C59 -.K_CUR EQU #5C5B -.CH_ADR EQU #5C5D -.SINT_ER_AD EQU #5C5F -.WORK_SP EQU #5C61 -.STK_BOT EQU #5C63 -.STK_END EQU #5C65 -.B_REG EQU #5C67 -.MEM_CALC EQU #5C68 -.FLAGS_2 EQU #5C6A -.L_SCR_SIZE EQU #5C6B -.AUTO_LST_L EQU #5C6C -.OLD_PPC EQU #5C6E -.OLD_S_PPC EQU #5C70 -.FLG_INPUT EQU #5C71 -.S_VAR_LEN EQU #5C72 -.SINT_TB_ADR EQU #5C74 -.RAND_SEED EQU #5C76 -.FRAMES EQU #5C78 -.UDG EQU #5C7B -.X_Y_COORD EQU #5C7D -.PRN_POS EQU #5C7F -.ADR_PR_BUF EQU #5C80 -.ECHO_E EQU #5C82 -.SCR_PL_M EQU #5C84 -.SCR_PL_L EQU #5C86 -.SCR_POS_M EQU #5C88 -.SCR_POS_L EQU #5C8A -.SCROLL_ST EQU #5C8C -.ATTR_P EQU #5C8D -.MASK_P EQU #5C8E -.ATTR_T EQU #5C8F -.MASK_E EQU #5C90 -.FLAGS_ATR EQU #5C91 -.MEM_BOT EQU #5C92 -.AUTO_5C9A EQU #5C9A -.NMI_ADR EQU #5CB0 -.TOP_CLEAR EQU #5CB2 -.P_RAMTOP EQU #5CB4 -.BEG_ADRESS EQU #5CB6 -.RET_INS EQU #5CC2 -.AUTO_5CC3 EQU #5CC3 -.DISK_A EQU #5CC8 -.DISK_B EQU #5CC9 -.DISK_C EQU #5CCA -.DISK_D EQU #5CCB -.CAT_SEC EQU #5CCC -.DRV_READY EQU #5CCD -.RD_WR_COM EQU #5CCE -.VAR_1 EQU #5CCF -.AUTO_5CD1 EQU #5CD1 -.AUTO_5CD2 EQU #5CD2 -.AUTO_5CD3 EQU #5CD3 -.AUTO_5CD5 EQU #5CD5 -.DOS_ERROR EQU #5CD6 -.MED_START EQU #5CD7 -.DOS_CH_ADR EQU #5CD9 -.MED_LEN EQU #5CDB -.FL_NAME EQU #5CDD -.FL_N_2 EQU #5CDF -.FL_N_4 EQU #5CE1 -.FL_N_6 EQU #5CE3 -.FL_N_7 EQU #5CE4 -.FL_TYPE EQU #5CE5 -.FL_START EQU #5CE6 -.FL_LEN EQU #5CE8 -.START_CLASTER EQU .FL_LEN -.FL_SIZE EQU #5CEA -.FL_PLACE EQU #5CEB -.VAR_2 EQU #5CED -.INTERF_I EQU #5CEF -.VAR_2_0 EQU #5CF1 -.VAR_2_1 EQU #5CF2 -.CONT_SEC EQU #5CF4 -.CONT_TRK EQU #5CF5 -.OPER_DISK EQU #5CF6 -.DOS_FLAG EQU #5CF7 -.DISK_1_FLG EQU #5CF8 -.DISK_2_FLG EQU #5CF9 -.TIME_A EQU #5CFA -.TIME_B EQU #5CFB -.TIME_C EQU #5CFC -.TIME_D EQU #5CFD -.COMAND_WG EQU #5CFE -.SEC_NUM EQU #5CFF -.CONT_BUF_ADR EQU #5D00 -.WORK_2 EQU #5D02 -.WORK_4 EQU #5D04 -.S_NAME_NUM EQU #5D06 -.N_DEL_FLS EQU #5D07 -.FST_SYM_NAME EQU #5D08 -.VAR_3 EQU #5D09 -.BUF_FLAG EQU #5D0C -.BAS_DOS_FLG EQU #5D0E -.DOS_ERR_2 EQU #5D0F -.ERR_3D00 EQU #5D10 -.ADR_DOS_COM EQU #5D11 -.ERR_SP_COPY EQU #5D13 -.MSG_FLAG EQU #5D15 -.PDOS_COPY EQU #5D16 -.FLAG_BOOT EQU #5D17 -.INT_1_VAR EQU #5D18 -.CONT_DISK EQU #5D19 -.ADR_RET EQU #5D1A -.DOS_SP EQU #5D1C -.FL_NUMBER EQU #5D1E -.COM_LN_COPY EQU #5D20 -.L_5D23 EQU #5D23 -.BUFER EQU #5D25 -.AUTO_5D33 EQU #5D33 -.CLEAR_SEC EQU #5E06 -.CLEAR_TRK EQU #5E07 -.TYPE_DISK EQU #5E08 -.N_FILES EQU #5E09 -.FREE_SEC EQU #5E0A -.CODE_10H EQU #5E0C -.DISK_MRK_1 EQU #5E0F -.DISK_ALT_NM EQU #5E10 -.N_DEL_FL EQU #5E19 -.DISK_NAME EQU #5E1A -; -.BUFER_RD EQU #5D25 ; tr-dos buffer -;-----------------------------------------------------------------------; - - - MACRO RET_SLOT0 - LD A,0 - OUT (SLOT0),A - ENDM - - MACRO RET_SLOT1 - LD A,5 - OUT (SLOT1),A - ENDM - - MACRO RET_SLOT2 - LD A,2 - OUT (SLOT2),A - ENDM -; - MACRO RET_SLOT3 - LD A, 0 - OUT (SLOT3), A - ENDM -; - - MACRO CALL_48 adr - PUSH HL - LD HL, .ADR_R - PUSH HL - LD HL,SW_ROM - PUSH HL - LD HL,adr - JP JP_HL_48 -.ADR_R: - POP HL - ENDM - - MACRO CALL_48X adr - PUSH HL - LD HL,.ADR_R - EX (SP),HL - PUSH HL - LD HL,SW_ROM - EX (SP),HL - PUSH HL - LD HL,adr - EX (SP),HL - JP SW_ROM -.ADR_R: - ENDM - - MACRO RAMD_KEY - SUB 4 - DI - LD B,SYS_PAGE - LD C,SLOT3 - OUT (C),B - LD HL,RAMD_KEYS - ADD A,L - LD L,A - DEC L - LD (A_RAMD_VARS),HL - INC L - LD L, (HL) - RET_SLOT3 - EI - LD A, L - ENDM - -; MACRO DSS adr, dt -; IF (adr >= $) -; DUP ((adr - $) / 16) -; DB dt,dt,dt,dt,dt,dt,dt,dt,dt,dt,dt,dt,dt,dt,dt,dt -; EDUP -; DUP (adr - $) -; DB dt -; EDUP -; ELSE -; ASSERT 0, "Error memory relocation." -; ENDIF -; ENDM -; - -; - MODULE Conf_port -; внутренние Altera (Sp97) -;00 - Нет порта -;#01 reserved -;#02 reserved -;#03 reserved -;#04 reserved -;#05 reserved -;#06 reserved -;#07 reserved -;#08 reserved -;#09 reserved -;#0A reserved -;#0B reserved -;#0C reserved -;#0D reserved -;#0E reserved -;#0F reserved -VG93_1F EQU #10 ; порт ВГ93 (1F) -VG93_3F EQU #11 ; порт ВГ93 (3F) -VG93_5F EQU #12 ; порт ВГ93 (5F) -VG93_7F EQU #13 ; порт ВГ93 (7F) -VG93_State EQU #14 ; порт на запись - состояние контроллера дисковода (внешний порт #FF) -JOY_VG93 EQU #15 ; порт на чтение - джойстик и IRQ/INTRQ контроллера ВГ93 - -; Порт FDD 720 ; #00BD - переключение в 720 - заслать 1. можно LD A,#01 : OUT (#BD),A. Работает c DOS ON либо в CNF_3 с DOS OFF -FDD720 EQU #16 -; Порт FDD 1.44 ; #20BD - переключение в 1.44 - заслать 1. можно LD A,#21 : OUT (#BD),A. Работает c DOS ON либо в CNF_3 с DOS OFF -FDD144 EQU #17 - -;#18 reserved -;#19 reserved -;#1A reserved - -;#1B - ISA_PORT ; #9FBD -;#1C - CMOS_DRD ; #FFBD -;#1D - CMOS_AWR ; #DFBD -;#1E - CMOS_DWR ; #BFBD -;#1F reserved -;#20 - HDD - регистр данных ; #0050 -;#21 - HDD - регистр состояния/ошибок ; #0051 -;#22 - HDD - рег. кол-ва сек-ов для R/W ; #0052 -;#23 - HDD - регистр сектора ; #0053 -;#24 - HDD - регистр дорожки-low ; #0054 -;#25 - HDD - регистр дорожки-high ; #0055 -;#26 - HDD - рег. heads/выбора mas-slave ; #4052 -;#27 - HDD - регистр команд ; #4053 -IDE_CONTROL_3F6 EQU #28 ; HDD - доп. регистр управления 3F6. внешний #4054 -IDE_STATUS_3F7 EQU #29 ; HDD - доп. регистр состояния 3F7. внешний #4055 -IDE_CHANEL_1 EQU #2A ; HDD - выбирает Secondary IDE, внешний #BC -IDE_CHANEL_2 EQU #2B ; HDD - выбирает Primary IDE, внешний #BC -VSYNC320 EQU #2C ; #40BD -VSYNC312 EQU #2D ; #60BD -RESET EQU #2E ; S_RESET - #40A4 - Reset port -UNKNOWN EQU #2F ; ????? ; #60BC - что-то на запись -;#30 - ????? ISA-SLOT 1 - ports R/W -;#31 - ????? ISA-SLOT 2 - ports R/W -ISA_Control EQU #32 ; ISA-signals such as RESET, AEN, A19...A14. Внешний #9FBD -;#33 - ????? ISA-SLOT 2 - memory R/W -;#34 reserved -;#35 reserved -;#36 reserved -;#37 reserved -;#38 reserved -;#39 reserved -;#3A reserved -;#3B reserved -;#3C reserved -;#3D reserved -;#3E reserved -;#3F reserved -ZX_Keyboard EQU #40 ; ZX-Keyboard (порт FE) -;#41 reserved -;#42 reserved -;#43 reserved -;#44 reserved -;#45 reserved -;#46 reserved -;#47 reserved -;#48 reserved -;#49 reserved -;#4A reserved -;#4B reserved -;#4C reserved -;#4D reserved -;#4E reserved -;#4F reserved -;#50 reserved -;#51 reserved -AY_FFFD_READ EQU #52 ; AY-8910-port (FFFD) чтение данных; ????? -;#53 reserved -;#54 reserved -;#55 reserved -;#56 reserved -;#57 reserved -Kempston_Mouse EQU #58 -;#59 reserved -;#5A reserved -;#5B reserved -;#5C reserved -;#5D reserved -;#5E reserved -;#5F reserved -;#60 reserved -;#61 reserved -;#62 reserved -;#63 reserved -;#64 reserved -;#65 reserved -;#66 reserved -;#67 reserved -;#68 reserved -;#69 reserved -;#6A reserved -;#6B reserved -;#6C reserved -;#6D reserved -;#6E reserved -;#6F reserved -;#70 reserved -;#71 reserved -;#72 reserved -;#73 reserved -;#74 reserved -;#75 reserved -;#76 reserved -;#77 reserved -;#78 reserved -;#79 reserved -;#7A reserved -;#7B reserved -;#7C reserved -;#7D reserved -;#7E reserved -;#7F reserved -;#80 reserved -;#81 reserved -;#82 reserved -;#83 reserved -;#84 reserved -;#85 reserved -;#86 reserved -;#87 reserved -CBL_OUT EQU #88 ; Write to COVOX/COVOX-Blaster -CBL_SYS_PORT EQU #89 ; CBL_DIR -;#8A reserved -;#8B reserved -;#8C reserved -;#8D reserved -;#8E reserved -ROM_RG EQU #8F ; !FIXIT порт переключения страниц ROM и FastRam, дублируется внешним портом #5C -AY_FFFD_WRITE EQU #90 ; AY-8910-port (FFFD) ;!!!!! запись адреса?????? -AY_BFFD EQU #91 ; AY-8910-port (BFFD) -;#92 reserved -;#93 reserved -;#94 reserved -;#95 reserved -;#96 reserved -;#97 reserved -;#98 reserved -;#99 reserved -;#9A reserved -;#9B reserved -;#9C reserved -;#9D reserved -;#9E reserved -;#9F reserved -;#A0 reserved -;#A1 reserved -;#A2 reserved -;#A3 reserved -;#A4 reserved -;#A5 reserved -;#A6 reserved -;#A7 reserved -;#A8 reserved -;#A9 reserved -;#AA reserved -;#AB reserved -;#AC reserved -;#AD reserved -;#AE reserved -;#AF reserved -;#B0 reserved -;#B1 reserved -;#B2 reserved -;#B3 reserved -;#B4 reserved -;#B5 reserved -;#B6 reserved -;#B7 reserved -;#B8 reserved -;#B9 reserved -;#BA reserved -;#BB reserved -;#BC reserved -;#BD reserved -;#BE reserved -;#BF reserved -Scorp_1FFD EQU #C0 -Pent_7FFD EQU #C1 -Border_FE EQU #C2 ; #FE, write only -ALL_MODE EQU #C3 ; Внешний - #204E -PORT_Y EQU #C4 ; #89 -RGMOD EQU #C5 ; #C9 -CNF_PORT EQU #C6 ; #3C / #7C, #24 / #74 -SCALE EQU #C7 ;PGACC - SCALE_PORT (#FC) -;#C8 - копия C0 или C2??? (not used!) -;#C9 - копия C1 (not used!) -;#CA - копия C2 (not used!) -HOLD EQU #CB ; Задаёт значения счётчиков синхронизатора синхроимпульсов. Активируется в тундере, пишется в него #95. xxxx yyyy - позиция экрана -;#CC - копия C4 (not used!) -;#CD - копия C5 (not used!) -;#CE - копия C6 (not used!) -;#CF - копия C7 (not used!) - -;#D0 - vRAM page for 512 kb (окно C000-FFFF) -;#D1 - vRAM page for 512 kb (окно C000-FFFF) -;#D2 - vRAM page for 512 kb (окно C000-FFFF) -;#D3 - vRAM page for 512 kb (окно C000-FFFF) -;#D4 - vRAM page for 512 kb (окно C000-FFFF) -;#D5 - vRAM page for 512 kb (окно C000-FFFF) -;#D6 - vRAM page for 512 kb (окно C000-FFFF) -;#D7 - vRAM page for 512 kb (окно C000-FFFF) -;#D8 - vRAM page for 512 kb (окно C000-FFFF) -;#D9 - vRAM page for 512 kb (окно C000-FFFF) -;#DA - vRAM page for 512 kb (окно C000-FFFF) -;#DB - vRAM page for 512 kb (окно C000-FFFF) -;#DC - vRAM page for 512 kb (окно C000-FFFF) -;#DD - vRAM page for 512 kb (окно C000-FFFF) -;#DE - vRAM page for 512 kb (окно C000-FFFF) -;#DF - vRAM page for 512 kb (окно C000-FFFF) - -;#E0 - vROM page EXPANSION ; Port #1FFD bit2=1 (#24 bit6=0, bit0=0) -;#E1 - vROM page TR-DOS ; PC = #3D00..#3DFF and #1FFD bit2=0 (#24 bit0=0) -;#E2 - vROM page BASIC-128 ; #7FFD bit4=0 and #1FFD bit1=0 (#24 bit0=0) -;#E3 - vROM page BASIC-48 ; #7FFD bit4=1 and #1FFD bit1=0 (#24 bit0=0) - -;#E4 - vROM page EXPANSION 2 ; Port #1FFD bit2=1 (#24 bit6=0, bit0=1) -;#E5 - vROM page TR-DOS 2 ; PC = #3D00..#3DFF and #1FFD bit2=0 (#24 bit0=1) -;#E6 - vROM page BASIC-128 2 ; #7FFD bit4=0 and #1FFD bit1=0 (#24 bit0=1) -;#E7 - vROM page BASIC-48 2 ; #7FFD bit4=1 and #1FFD bit1=0 (#24 bit0=1) - -;#E8 - vRAM page (окно 0000-3FFF) -;#E9 - vRAM page (окно 4000-7FFF) -;#EA - vRAM page (окно 8000-BFFF) - -;#EB - vROM page BIOS-1 ; Port #74 = 0 - -;#EC - vRAM page CASHE ; ????? - -;#ED reserved ; ????? - -RET_PORT EQU #EE ; Page set after Soft RESET. Любое, кроме 0, значение - страница куда передастся управление после Soft reset - -;#EF - vROM page BIOS-2 ; Port #74 = 1 - -; Установка в какой либо порт значения от F0h до FFh приведет к одному и тому же результату, что и просто установка в этот порт значения F0h. В схеме сделана -; переадресация номера порта так, что при значении FXh номер порта берется как F0h+SpectrumPAGE, где -; SpectrumPAGE - номер спектрумовской страницы, адресуемой по портам 7FFD и 1FFD. Таким образом -; достигается совместимость с Пентагоном и Скорпионом по распределению памяти и делается возможным -; установка любого номера страницы спринтеровской памяти для любой страницы Спектрума. -; -;F0h - RAM page for 128/256 kb (окно C000-FFFF) -;F1h - RAM page for 128/256 kb (окно C000-FFFF) -;F2h - RAM page for 128/256 kb (окно C000-FFFF) -;F3h - RAM page for 128/256 kb (окно C000-FFFF) -;F4h - RAM page for 128/256 kb (окно C000-FFFF) -;F5h - RAM page for 128/256 kb (окно C000-FFFF) -;F6h - RAM page for 128/256 kb (окно C000-FFFF) -;F7h - RAM page for 128/256 kb (окно C000-FFFF) -;F8h - RAM page for 256 kb (окно C000-FFFF) -;F9h - RAM page for 256 kb (окно C000-FFFF) -;FAh - RAM page for 256 kb (окно C000-FFFF) -;FBh - RAM page for 256 kb (окно C000-FFFF) -;FCh - RAM page for 256 kb (окно C000-FFFF) -;FDh - RAM page for 256 kb (окно C000-FFFF) -;FEh - RAM page for 256 kb (окно C000-FFFF) -;FFh - RAM page for 256 kb (окно C000-FFFF) - - ENDMODULE -; -; С распределением памяти ситуация такая. Порты страниц - переключают адреса -; "виртуальных" страниц скорпиона независимо от того, что в этот момент -; подключено в нулевую банку. С третьей банкой наоборот - запись в порт -; страницы меняет адрес той страницы, какая установлена портами 7FFD,1FFD, -; т.е. записав что-то в порт PAGE3 нужно помнить, какая страница стояла с -; адреса #C000. Например, если нулевая, то поменяется страница и в адресе -; #0000, если там было установлено ОЗУ. -; -/* -внутренние порты Z84C15: -#10 -#11 -#12 -#13 -#14 -#15 -#16 -#17 -#18 -#19 -#1A -#1B -#1C -#1D -#1E -#1F -#EE -#EF -#F0 -#F1 -#F4 -*/ -;======================================= - -;===============[ CMOS ]================ ; !TODO - -;REGISTER #0E -; %10000000 - MEMORY TEST -; %01000000 - SAVE RAM DISKS -; %00100000 - UPDATE BIOS -; %00011000 - START DELAY -; %00000100 - LANGUAGE -; %00000010 - NOT USED ;!TODO -; %00000001 - QUICK START - -;REGISTER #0F -; %10000000 - TYPEMATIC ON/OFF -; %01100000 - TYPEMATIC DELAY 00-250, 01-500, 10-750, 11-1000 -; %00011111 - TYPEMATIC RATE 0-6, 1-8, 2-10, 3-12, 4-15, 5-20, 6-24, 7-30 - -;REGISTER #10 -; %00000111 - SYSTEM DISK -; 1st FDD -; 2nd FDD -; 1st IDE -; 2nd IDE -; 3rd IDE -; 4th IDE -; Ram Dsk -; Recovery -; %01110000 - ALT SYSTEM DISK - -;REGISTER #11 -; %00000011 - FDD FIRST 720 / 1.44 / NONE -; %00001100 - FDD SECOND -; %00110000 - IDE Primary MASTER AUTO / SETUP / DISABLED -; %11000000 - IDE Primary SLAVE -----//------ - -;------------[HDD PRIMARY]------------- -;REGISTER #12 - CYLINDERS (MASTER) L -;REGISTER #13 - -----//------ H -;REGISTER #14 - HEADS (MASTER) -;REGISTER #15 - SECTORS (MASTER) -; -;REGISTER #16 - CYLINDERS (SLAVE) L -;REGISTER #17 - -----//------ H -;REGISTER #18 - HEADS (SLAVE) -;REGISTER #19 - SECTORS (SLAVE) -;--------------------------------------- -;REGISTER #1A -; %00001111 - COLOR STYLE -; %00110000 - Frame Int (Default/Pentagon/Scorpion/Original) -; %11000000 - Screen V-Sinc (Default/312 lines 50 HZ/320 Lines 49 Hz) - -;!FIXIT НЕ ИСПОЛЬЗУЕТСЯ -;REGISTER #1B - HARDWARE CONFIGURATION -; %00000001 - TURBO MODE (D0..D3 - 6 OR 7) -; %00000010 - TURBO EXCHANGE ON/OFF - 1 -; %00000100 - PORT EXCHANGE ON/OFF - 1 -; %00011000 - COMPUTER: -; 0-SPRINTER -; 1-SPECTRUM 256 -; 2-PENTAGON 128 -; 3-OTHER -; %11100000 - RESERVED ;!TODO -;!FIXIT НЕ ИСПОЛЬЗУЕТСЯ -;REGISTER #1C - RESET MODE -; 0-RESET 128 Basic -; 1-RESET 48 Basic & 128 mem -; 2-RESET TR-DOS & 128 mem -; 3-RESET EXPANSION (Disabled) -; 4-RESET TR-DOS & 48 mem -; 5-RESET 48 Basic - -;REGISTER #1D -; %00000010 - Reboot message -; %00000001 - HDD Write protect - -;REGISTER #1E -; %00000011 - TR DOS A: Default / FDD / HDD / RMD -; %00001100 - TR DOS B: Default / FDD / HDD / RMD -; %00110000 - TR DOS C: Default / FDD / HDD / RMD -; %11000000 - TR DOS D: Default / FDD / HDD / RMD - -;REGISTER #1F ;R06 -; %11110000 - X-Screen position -; %00001111 - Y-Screen position - -;REGISTER #20 -; %00110000 - IDE Secondary MASTER AUTO / SETUP / DISABLED -; %11000000 - IDE Secondary SLAVE -----//------ -; . -; . -;REGISTER#35 - BASIC SETTING 1 (SYS_PAGE.CONFIG_DE+1 = #C13B on PAGE #FE) -; 0 - RESET TO BASIC 128 -; 1 - RESET TO BASIC 48 (RAM128) -; 2 - RESET TO TRDOS -; 3 - RESET TO EXPANSION (DON'T USE) -; 4 - RESET TO 48 TRDOS -; 5 - RESET TO 48 BASIC (RAM48) - -;REGISTER#36 - BASIC SETTING 2 ; старые значения неизвестны -; %0000 0111 -; новые значения: -; 0 - ZX-Sprinter -; 1 - Pentagon 48 -; 2 - Pentagon 128 -; 3 - Pentagon 512 -; 4 - Scorpion 256 -; 5 - ZX Spectrum 48 -; 6 - ZX Spectrum 128 - - -;-----------[HDD SECONDARY]------------ -;REGISTER #37 - CYLINDERS (MASTER) -;REGISTER #38 - -----//------ -;REGISTER #39 - HEADS (MASTER) -;REGISTER #3A - SECTORS (MASTER) -; -;REGISTER #3B - CYLINDERS (SLAVE) -;REGISTER #3С - -----//------ -;REGISTER #3D - HEADS (SLAVE) -;REGISTER #3E - SECTORS (SLAVE) -;--------------------------------------- - -;REGISTER #3F - CHECKSUM SETTING -;======================================= - -; -;-------------------------------[ TEST ]-------------------------------- - MODULE IDE -; -; 0 - копия DRV_HEAD -; 1 - секторов на дорожке -; 2 - число головок -; 3 - количество цилиндров мл. -; 4 - количество цилиндров старший. -; 5 - секторов на цилиндр мл. -; 6 - секторов на цилиндр старш. -; 7 - reserv - type - STRUCT HDD_INIT_TABLE -Chanel BYTE ; 0 DRVHD_H -SectorsPerTrack BYTE ; 1 SC_PT_H -HeadsNumber BYTE ; 2 HEADS_H -CylinderNumberLow BYTE ; 3 CYL_L_H -CylinderNumberHigh BYTE ; 4 CYL_H_H -SectorsPerCylinderLow BYTE ; 5 SPCLL_H -SectorsPerCylinderHigh BYTE ; 6 SPCLH_H -DriveType BYTE ; 7 DTYPE_H - ENDS -; - -INIT_TBL_IDE0 HDD_INIT_TABLE = SYS_PAGE.IDE_0 ; !HARDCODE table in SYS_PAGE -INIT_TBL_IDE1 HDD_INIT_TABLE = SYS_PAGE.IDE_1 ; !HARDCODE table in SYS_PAGE -INIT_TBL_IDE2 HDD_INIT_TABLE = SYS_PAGE.IDE_2 ; !HARDCODE table in SYS_PAGE -INIT_TBL_IDE3 HDD_INIT_TABLE = SYS_PAGE.IDE_3 ; !HARDCODE table in SYS_PAGE - -Write: -.DriveCtrl EQU #4152 ; HDW_DRV P_HD_CS ; #1F6 Drive Control -.Command EQU #4153 ; HDW_COM P_CMD ; #1F7 Command -.Data EQU #0150 ; HDW_DAT W170 ; #1F0 Data -.Error EQU #0151 ; HDW_ERR W171 ; #1F1 Error -.Counter EQU #0152 ; HDW_CNT P_S_CNT W172 ; #1F2 Counter -.Sector EQU #0153 ; HDW_SEC P_S_NUM W173 ; #1F3 Sector -.CylinderLow EQU #0154 ; HDW_CLL P_C_LOW W174 ; #1F4 Cylinder Low -.CylinderHigh EQU #0155 ; HDW_CLH P_C_HIG W175 ; #1F5 Cylinder High - -Read: -.Control EQU #4052 ; HDR_DRV R176 ; #1F6 Drive Control -.Status EQU #4053 ; HDR_CTL P_HDST R177 ; #1F7 Status (Control) -.Data EQU #0050 ; HDR_DAT P_DATS R170 ; #1F0 Data -.Error EQU #0051 ; HDR_ERR P_ERR R171 ; #1F1 Error -.Counter EQU #0052 ; HDR_CNT R172 ; #1F2 Counter -.Sector EQU #0053 ; HDR_SEC R173 ; #1F3 Sector -.CylinderLow EQU #0054 ; HDR_CLL R174 ; #1F4 Cylinder Low -.CylinderHigh EQU #0055 ; HDR_CLH R175 ; #1F5 Cylinder High - -ControlBit: ; Bits for HardDrive.Read.Status -.Busy EQU 7 ; BSY -.Ready EQU 6 ; RDY -.Fault EQU 5 -.StreamErrror EQU .Fault -.DeferredWriteError EQU 4 -.DataRequest EQU 3 ; DRQ -.AlignmentError EQU 2 -.SenseDataAvailable EQU 1 -.Error EQU 0 ; ERR -.CheckCondition EQU .Error - -Chanel: -.Set_0: EQU #00BC ; для использования с полной адресацией (рег BC), заслать '1' -.Set_1: EQU #20BC ; для использования с полной адресацией (рег BC), заслать '1' -.Choose: EQU #BC ; для использования с неполной адресацией out (#bc),a. заслать '1' -Device: -.HDD EQU 1 -.CDROM EQU 2 - - ENDMODULE -;----------------------------------------------------------------------- - -; -/* -KBD_COM EQU #1B -KBD_DAT EQU #1A -COM_B EQU #1B -DAT_B EQU #1A - -COM_A EQU #19 -DAT_A EQU #18 - -LPT1_D EQU #1C -LPT1_C EQU #1D -LPT2_D EQU #1E -LPT2_C EQU #1F - -STC0_C EQU #10 -STC1_C EQU #11 -STC2_C EQU #12 -STC3_C EQU #13 -*/ -; !TODO придумать как обозвать, чтоб было понятно когда пишут для мышки, когда для клавы и т.д. - MODULE Z84 -;-------------------[Ports] -CTC: -.Ch_0 EQU #10 ; Control Register -.Ch_1 EQU #11 ; Control Register -.Ch_2 EQU #12 ; Control Register -.Ch_3 EQU #13 ; Control Register - -SIO: -.Ch_A.Data EQU #18 ; Data register COM -.Ch_A.Ctrl EQU #19 ; Control register COM -.Ch_B.Data EQU #1A ; Data register keyboard & mouse -.Ch_B.Ctrl EQU #1B ; Control register keyboard & mouse - - -PIO: -.Port_A.Data EQU #1C ; Data register LPT 1 -.Port_A.Command EQU #1D ; Command register LPT 1 -.Port_B.Data EQU #1E ; Data register LPT 2 -.Port_B.Command EQU #1F ; Command register LPT 2 - -WDT: ; Watch-Dog timer -.Master_Reg EQU #F0 ; Master register WDTMR -.Control_Reg EQU #F1 ; Control register WDTCR - -IntPrior_Reg EQU #F4 ; Interrupt Priority Register - -SYS: -.Control EQU #EE ; System Control Register Pointer SCRP -.Data EQU #EF ; System Control Data Port SCDP -;------------------------[] - -;-------------------[Regs ] -REG: -.WaitState_Ctrl EQU 00 ; Wait state control register WCR -.WaitState_MemBound EQU 01 ; Memory Wait state Boundary Register MWBR -.CS_Boundary EQU 02 ; Chip Select Boundary Register CSBR -.Misc_Ctrl EQU 03 ; Misc.Control Register MCR -;------------------------[] - ENDMODULE -; - -;INIT_TIMER: -; LD A,#D5 ; 7-й бит разрешение прерывания -; OUT (#12),A -; LD A,20 -; OUT (C),A -; LD A,#55 ; 7-й бит разрешение прерывания -; OUT (#13),A -; LD A,0 -; OUT (C),A -; LD A,0 ; вектор прерывания -; OUT (#10),A - -; LD A,TABLE/256 -; LD I,A -; IM 2 - -;Disable: -; DI -; LD BC,#12 ; 2-nd timer -; LD A,#55 ; 7-й бит разрешение прерывания -; OUT (C),A -; IM 1 -; EI -; RET - - -; TRDOS -; REDIR_3D13: -; BIT 7,C -; JP NZ,EXP_FNS ;#3FF8 EXP -; BIT 6,C -; JP Z,AUTO_283C -; RES 6,C -; JP HD_CMD ;#3FF0 ROM. DI - -;_______________________________________________________________________________________________# -; -; DW #FEFF ; Sprinter-2000 -; -; DW 0FFFEH ; Sprinter-1 -; DB 0 ; акселератор -; DB 1 ; экран -; DB 2 ; клавиатура -; DB 1 ; ковокс; -; -; DW 0FFFDH -; DB 2 ; акселератор -; DB 1 ; экран -; DB 0 ; клавиатура -; DB 1 ; ковокс; -; -; DW 0FFFCH ; AY -; DB 0 ; аccselerator -; DB 0 ; Screen -; DB 2 ; клавиатура -; DB 0 ; ковокс; -; -; DW 0FFF9H ; идентификатор конфигурации DooM -; DB 3 ; accelerator type -; DB 1 ; экран -; DB 0 ; клавиатура -; DB 2 ; ковокс (бластер) -; - -;ELCOM256 EQU 1 ; режим ELCOM-256 -;IF ELCOM256 EQ 1 -;ELSE -;D_TBON EQU 03h ; данные для включения TURBO -;D_TBOFF EQU 02h ; данные для включения TURBO -;D_ROM16ON EQU 40h -;D_ROM16OFF EQU 00h -;CNF_0 EQU 04h -;CNF_1 EQU 0Ch -;CNF_2 EQU 14h -;CNF_3 EQU 1Ch -;ENDIF - -;TTTT_EEEE EQU 100 - - -;R170 EQU #0050 ;Data -;R171 EQU #0051 ;Error -;R172 EQU #0052 ;Direct -;R173 EQU #0053 ;Reserve -;R174 EQU #0054 ;Lenght block low -;R175 EQU #0055 ;Lenght block high -;R176 EQU #4052 ;Drive device -;R177 EQU #4053 ;Status -;W170 EQU #0150 ;Data -;W171 EQU #0151 ;???? -;W172 EQU #0152 ;???? -;W173 EQU #0153 ;Reserve -;W174 EQU #0154 ;Lenght block low -;W175 EQU #0155 ;Lenght block high -;W176 EQU #4152 ;Drive device -;W177 EQU #4153 ;Command -;HDW_COM EQU #4153 ; #1F7 Command -;P_CMD EQU #4153 ; WRITE -;HDW_DRV EQU #4152 ; #1F6 Drive Control -;P_HD_CS EQU #4152 -;HDW_CLH EQU #0155 ; #1F5 Cylinder High -;P_C_HIG EQU #0155 -;HDW_CLL EQU #0154 ; #1F4 Cylinder Low -;P_C_LOW EQU #154 -;HDW_SEC EQU #0153 ; #1F3 Sector -;P_S_NUM EQU #0153 -;HDW_CNT EQU #0152 ; #1F2 Counter -;P_S_CNT EQU #152 -;HDW_ERR EQU #0151 ; #1F1 Error -;HDW_DAT EQU #0150 ; #1F0 Data -;HDR_CTL EQU #4053 ; #1F7 Status (Control) -;P_HDST EQU #4053 ; READ -;HDR_DRV EQU #4052 ; #1F6 Drive Control -;HDR_CLH EQU #0055 ; #1F5 Cylinder High -;HDR_CLL EQU #0054 ; #1F4 Cylinder Low -;HDR_SEC EQU #0053 ; #1F3 Sector -;HDR_CNT EQU #0052 ; #1F2 Counter -;HDR_ERR EQU #0051 ; #1F1 Error -;P_ERR EQU #051 ; READ -;HDR_DAT EQU #0050 ; #1F0 Data -;P_DATS EQU #50 ; READ/WRITE INIR/OTIR - -;;Bits for HDR_CTL -;;---[] -;BSY EQU 7 -;RDY EQU 6 -;DRQ EQU 3 -;ERR EQU 0 -;;---[] -;HDD EQU 1 -;CDROM EQU 2 -;;EQU FOR IY+ -;DRVHD_H EQU 0 -;SC_PT_H EQU 1 -;HEADS_H EQU 2 -;CYL_L_H EQU 3 -;CYL_H_H EQU 4 -;SPCLL_H EQU 5 -;SPCLH_H EQU 6 -;DTYPE_H EQU 7 - -;IDE0 EQU #C1C0 -;IDE1 EQU #C1C8 -;IDE2 EQU #C1D0 -;IDE3 EQU #C1D8 - -;HDD_INI_TABLE EQU #C1C0 - - -; D_TBON EQU 3 ; данные для включения TURBO -; D_TBOFF EQU 2 ; данные для выключения TURBO - -; CNF_0 EQU #04 ; карта портов 0 -; CNF_1 EQU #0C ; карта портов 1 -; CNF_2 EQU #14 ; карта портов 2 -; CNF_3 EQU #1C ; карта портов 3 -; CNF_512 EQU #80 ; включение Pentagon 128 - - -; страницы с конфой для Sp97, для совместимости с древними прогами -; PG_SP1 equ #EC -; PG_SP2 equ #EE -; PG_AY equ #EA - -;================================================================================= -; Поpты Sprinter. (байты PORT_X)<< -; 0 - port FF<< -; 1 - port keyboard<< -; 2 - port BORDER<< -; 3 - port 1FFDh<< -; 4 - port 7FFDh<< -; 5 - port 3FFDh<< -; 6 - port Start-ROM<< -; 7 - port Start-ROM-ALT<< -; 8 - port ROM-BASIC48<< -; 9 - port ROM-BASIC128<< -; 10 - port ROM-TR-DOS<< -; 11 - port ROM-EXPANSION<< -; 12 - port ROM-BASIC48-ALT<< -; 13 - port ROM-BASIC128-ALT<< -; 14 - port ROM-TR-DOS-ALT<< -; 15 - port ROM-EXPANSION-ALT<< -; 16 ??<< -; .. ??<< -; 31 ???ports RAM-PAGES - поpты указывающие, какая стpаница ОЗУ<< -; подключена в качестве стpаницы 0..F в конфигуpации Scorpion.<< -; 33 - port RAM-0 стpаница ОЗУ подключаемая в нулевое окно пpоцессоpа<< -; 34 - port RAM-5 стpаница ОЗУ подключаемая в пеpвое окно пpоцессоpа<< -; 35 - port RAM-2 стpаница ОЗУ подключаемая во втоpое окно пpоцессоpа<< -; 36 - port CONFIG<< -; 37 - port COVOX-1<< -; 38 - port COVOX-2<< -; 39 - port AY-3-8910-adr<< -; 40 - port AY-3-8910-dat<< -; 41 - port KEMPSTON<< -; 42 - port ISA-interface<< -; 43 ??reserv<< -; .. ??<< -; 47 ??<< -; 48 - 51 поpты ВГ93<< -; 52 - поpт DOS-1<< -; 53 - поpт DOS-2<< -; 54 ?? служебные поpты<< -; .. ??<< -; 63 ??<< -; 64 ?? поpты IDE interface<< -; .. ??<< -; 79 ??<< -; 80..127 - pезеpв.<< -; 128..143 - поpты идентификатоpа машины ( только для чтения.)<< -; 144..254 - pезеpв<< -; 255 - нуль-поpт - отключенное состояние.<< -;================================================================================= \ No newline at end of file diff --git a/Shared_Includes/constants/dss_equ.inc b/Shared_Includes/constants/dss_equ.inc deleted file mode 100644 index 01f6210..0000000 --- a/Shared_Includes/constants/dss_equ.inc +++ /dev/null @@ -1,397 +0,0 @@ -;[Вызов функций DSS]-------------------- -ToDSS EQU #10 -;--------------------------------------- - -;---[Буфер под служебную строку DSS]---- -; Command_Line_parameters (CLP) -; Смещения относительно значения в IX -; при старте EXE из DSS. -CLP_Buffer EQU 131 ; Полная длина буфера -CLP_FM EQU -3 ; Файловый манипулятор, если exe-файл с первичным загрузчиком -CLP_MemBlockID EQU -2 ; Идентификатор блока памяти -CLP_ProgLevel EQU -1 ; Уровень текущей программы -CLP_CLLength EQU 0 ; Длинна командной строки -CLP_Parameters EQU 1 ; Параметры командной строки, заканчивается нулем (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 ; Разобрать строку -.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 ; Преобразовать из 11 символьного формата в формат ДОС -.EX_Path.MASK EQU 9 ; Преобразовать из формата ДОС в 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 ;символ пробела -;--------------------------------------- -; - - -; Приложение Б. Таблица позиционных кодов - -; 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 - - -; Приложение В. Байт атрибутов текстового экрана - -; бит 7 - Признак мерцания символа -; биты 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 - Белый - -; Только для символа: - -; 8 8h 1000b - Серый -; 9 9h 1001b - Ярко-синий -; 10 Ah 1010b - Ярко-зелёный -; 11 Bh 1011b - Ярко-голубой -; 12 Ch 1100b - Ярко-красный -; 13 Dh 1101b - Ярко-фиолетовый -; 14 Eh 1110b - Жёлтый -; 15 Fh 1111b - Ярко-белый -; \ No newline at end of file diff --git a/Shared_Includes/macroses/accelerator.z80 b/Shared_Includes/macroses/accelerator.z80 deleted file mode 100644 index 3703916..0000000 --- a/Shared_Includes/macroses/accelerator.z80 +++ /dev/null @@ -1,85 +0,0 @@ -; Макросы акселератора для красоты)) - -;--------[выключить акселератор]-------- - MACRO ACC_Off - LD B,B - ENDM -;--------------------------------------- - -;---------[режим приема байта]---------- -; Включает акселератор в режим приема -; байта размера блока далее следует -; команда типа LD A,dat, где dat и будет -; новым размером блока. Если размер -; блока был установлен ранее, его можно -; не устанавливать. - MACRO ACC_SetBlockSize - LD D,D - ENDM -;--------------------------------------- - -;-------[заполнение одним байтом]------- -; Операция Fill. Последующая команда -; типа LD (HL),A приведет к заполнению -; указанного ранее количества байт -; значением A - MACRO ACC_FillOneByte - LD C,C - ENDM -;--------------------------------------- - -;----[заполнение вертикальных линий]---- -; Операция Fill для графического экрана. -; Последующая команда типа LD (HL),A -; приведет к заполнению значением A -; вертикальных линий экрана указанным -; ранее количеством байт - MACRO ACC_FillScreenOneByte - LD E,E - ENDM -;--------------------------------------- - -;----------[копирование блока]---------- -; Последующая команда типа LD A,(HL) -; приведет к заполнению ОЗУ акселератора -; данными из адреса (HL), а команда типа -; LD (DE),A приведет к перезаписи данных -; из ОЗУ акселератора в основное или -; видео-ОЗУ. - MACRO ACC_CopyBlock - LD L,L - ENDM -;--------------------------------------- - -;---[копирование графического блока]---- -; Копирование блока для граф. экрана. -; Последующая команда типа LD A,(HL) -; приведет к заполнению ОЗУ акселератора -; данными из адреса (HL), а команда типа -; LD (DE),A приведет к перезаписи данных -; из ОЗУ акселератора в видео-ОЗУ -; вертикальными линиями. В этом режиме -; аксель при чтении в буфер и записи в -; память увеличивает не адрес, а PORT_Y - MACRO ACC_CopyScreenBlock - LD A,A - ENDM -;--------------------------------------- - -;--------[Двойная запись байта]--------- -; При записи байта Byte по адресу Addr -; происходит запись двух Byte в адресса: -; (Addr & #FE) и (Addr & #FE)+1 - MACRO ACC_DoubleByte - LD H,H - ENDM -;--------------------------------------- - -;---------[пока путь в никуда]---------- -; Работает так же как и ld b,b -; Ну и при отключенных прерываниях будет -; знаменитый DI:HALT))) - MACRO ACC_Halt - HALT - ENDM -;--------------------------------------- \ No newline at end of file diff --git a/Shared_Includes/macroses/macros.z80 b/Shared_Includes/macroses/macros.z80 deleted file mode 100644 index 9c8895e..0000000 --- a/Shared_Includes/macroses/macros.z80 +++ /dev/null @@ -1,356 +0,0 @@ -;======================================= -; склеивает строку пути к файлу со строкой имени файла -; 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] - -;------------------------------------[^] \ No newline at end of file diff --git a/Shared_Includes/structures/EasterSprites.inc b/Shared_Includes/structures/EasterSprites.inc deleted file mode 100644 index b8f43c8..0000000 --- a/Shared_Includes/structures/EasterSprites.inc +++ /dev/null @@ -1,9 +0,0 @@ -; - STRUCT str_EasterSprites -SpAddress WORD ; адрес спрайта в памяти -SpWidth WORD ; Ширина -SpHeight BYTE ; Высота + Y coord -SpXCoord WORD ; X coord -SpYCoord BYTE ; Y coord - ENDS -; \ No newline at end of file diff --git a/Shared_Includes/structures/FileSystem.inc b/Shared_Includes/structures/FileSystem.inc deleted file mode 100644 index 30c7ad2..0000000 --- a/Shared_Includes/structures/FileSystem.inc +++ /dev/null @@ -1,24 +0,0 @@ -; - 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 -; \ No newline at end of file diff --git a/Shared_Includes/structures/bmp.inc b/Shared_Includes/structures/bmp.inc deleted file mode 100644 index c7bc2a6..0000000 --- a/Shared_Includes/structures/bmp.inc +++ /dev/null @@ -1,31 +0,0 @@ -; - 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 ; Размер картинки в байтах, если изображение несжатое, то значение рекомендовано устанавливать в ноль -biXPelsPerMeter DWORD ; Горизонтальное разрешение (в пикселях на метр) -biYPelsPerMeter DWORD ; Вертикальное разрешение (в пикселях на метр) -biClrUsed DWORD 0 ; Определяет количество используемых цветов из таблицы -biClrImportant DWORD 0 ; Количество важных для изображения цветов - -;--[File Data] -bdPallete BLOCK #400 -bdRaster MAIN_BMP - ENDS -; \ No newline at end of file