mirror of
https://github.com/Tolik-Trek/Shared_Includes.git
synced 2026-06-15 09:01:33 +03:00
441 lines
9.0 KiB
Z80 Assembly
441 lines
9.0 KiB
Z80 Assembly
/////////////////////////////// IVAN_MAK ///////////////////////////////
|
||
|
||
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)
|
||
; B 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
|
||
;
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
;=======================================
|
||
; ᪫¥¨¢ ¥â áâப㠯ã⨠ª ä ©«ã á® áâப®© ¨¬¥¨ ä ©«
|
||
; 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
|
||
IF endAddr > 0
|
||
DISPLAY " Free bytes: ",/D,endAddr, " From ",/H, $, " to ",/H, endAddr+$," address."
|
||
ENDIF
|
||
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]
|
||
|
||
;------------------------------------[^] |