;======================================= ; склеивает строку пути к файлу со строкой имени файла ; 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] ;------------------------------------[^]