MountIMA/Shared_Includes/macroses/macros.z80
Anatoliy Belyanskiy cf4295cc85 Initial commit
2023-06-15 02:40:28 +10:00

356 lines
7.9 KiB
Z80 Assembly
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;=======================================
; ᪫¥¨¢ ¥â áâப㠯ã⨠ª ä ©«ã á® áâப®© ¨¬¥­¨ ä ©« 
; 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]
;------------------------------------[^]