mirror of
https://github.com/Tolik-Trek/MountIMA.git
synced 2026-06-15 09:21:35 +03:00
356 lines
7.9 KiB
Z80 Assembly
356 lines
7.9 KiB
Z80 Assembly
;=======================================
|
||
; ᪫¥¨¢ ¥â áâப㠯ã⨠ª ä ©«ã á® áâப®© ¨¬¥¨ ä ©«
|
||
; 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]
|
||
|
||
;------------------------------------[^] |