mirror of
https://github.com/Tolik-Trek/Shared_Includes.git
synced 2026-06-15 17:11:33 +03:00
522 lines
12 KiB
Z80 Assembly
522 lines
12 KiB
Z80 Assembly
/////////////////////////////// IVAN_MAK ///////////////////////////////
|
||
|
||
MACRO RET_SLOT0
|
||
LD A,0
|
||
OUT (SLOT0),A
|
||
DISPLAY "WARNING!!! Hardcoded zx page!!!"
|
||
ENDM
|
||
|
||
MACRO RET_SLOT1
|
||
LD A,5
|
||
OUT (SLOT1),A
|
||
DISPLAY "WARNING!!! Hardcoded zx page!!!"
|
||
ENDM
|
||
|
||
MACRO RET_SLOT2
|
||
LD A,2
|
||
OUT (SLOT2),A
|
||
DISPLAY "WARNING!!! Hardcoded zx page!!!"
|
||
ENDM
|
||
;
|
||
MACRO RET_SLOT3
|
||
LD A, 0
|
||
OUT (SLOT3), A
|
||
DISPLAY "WARNING!!! Hardcoded zx page!!!"
|
||
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: ;RET
|
||
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
|
||
.curr EQU $
|
||
.size EQU .temp-.curr
|
||
IF .size > 0
|
||
DISPLAY " Free bytes: ",/D,.size, " From ",/H, .curr, " to ",/H, .temp, " address."
|
||
ENDIF
|
||
ALIGN num,filler
|
||
.temp EQU $
|
||
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 _mCHECK_SYS_VERSIONS dss_v, dss_m, dss_b, bios_v, bios_m
|
||
|
||
DEFINE MIN_DSS_VERSION dss_v*256 + dss_m
|
||
DEFINE MIN_DSS_BUILD dss_b
|
||
DEFINE MIN_BIOS_VERSION bios_v*256 + bios_m
|
||
;
|
||
DEFINE TXT_DSS_VERSION ('0'+dss_v),\
|
||
'.',\
|
||
('0'+dss_m/10),\
|
||
('0'+dss_m-(dss_m/10)*10),\
|
||
'.',\
|
||
('0'+dss_b/100),\
|
||
('0'+(dss_b/10 - dss_b/100*10)),\
|
||
('0'+(dss_b - dss_b/10*10)) ;
|
||
;
|
||
DEFINE TXT_BIOS_VERSION '0'+bios_v,\
|
||
'.',\
|
||
'0'+bios_m/10,\
|
||
'0'+bios_m-(bios_m/10)*10
|
||
;
|
||
LD C,Dss.Version
|
||
RST ToDSS
|
||
JR C,.Error_DOS
|
||
LD HL,MIN_DSS_VERSION
|
||
EX DE,HL
|
||
SBC HL,DE
|
||
JR C,.Error_DOS
|
||
JR NZ,.bios
|
||
;
|
||
LD HL,-(MIN_DSS_BUILD)
|
||
ADD HL,BC
|
||
JR NC,.Error_DOS
|
||
;
|
||
.bios: LD C,BIOS.DRV_VERSION
|
||
RST ToBIOS
|
||
JR C,.Error_BIOS
|
||
LD HL,-(MIN_BIOS_VERSION)
|
||
ADD HL,DE
|
||
RET C
|
||
.Error_BIOS:
|
||
LD HL,.MSG.Error_BIOS
|
||
JR .next
|
||
.Error_DOS:
|
||
LD HL,.MSG.Error_DSS
|
||
.next: LD C,Dss.PChars
|
||
RST ToDSS
|
||
;
|
||
.loop: LD B,DSS_Error.sys.COMMON_ERROR
|
||
.error: LD C,Dss.Exit
|
||
RST ToDSS
|
||
JR .loop
|
||
;
|
||
.MSG.Error_BIOS:
|
||
DB "\r\nERROR! Uncompatible version of BIOS. Needs version ",TXT_BIOS_VERSION," or higher.\r\n",0
|
||
.MSG.Error_DSS:
|
||
DB "\r\nERROR! Uncompatible version of DSS. Needs version ",TXT_DSS_VERSION," or higher.\r\n",0
|
||
;
|
||
UNDEFINE MIN_DSS_VERSION
|
||
UNDEFINE MIN_DSS_BUILD
|
||
UNDEFINE MIN_BIOS_VERSION
|
||
UNDEFINE TXT_DSS_VERSION
|
||
UNDEFINE TXT_BIOS_VERSION
|
||
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 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 EXE_ORG addr_exe
|
||
IFNDEF App_EXE_Version
|
||
DEFINE App_EXE_Version 0
|
||
ENDIF
|
||
|
||
ORG 0
|
||
exe_header:
|
||
BYTE 'EXE' ; 0-2 EXE ‘¨£ âãà
|
||
BYTE App_EXE_Version ; 3 Version of EXE file
|
||
DWORD exe_header.length ; 4-5 ‘ ª ª®£® á¬¥é¥¨ï ¢ ä ©«¥ ¡ã¤¥â £à㧨âìáï ª®¤ ¢
|
||
; ; 6-7 ¯ ¬ïâì ¯® ¤à¥áã (Code_addr) Low addr, High addr.
|
||
WORD Loader_length ; 8-9 <20> §¬¥à ¯¥à¢¨ç®£® § £àã§ç¨ª ¨«¨ 0
|
||
WORD #0000 ; 10-11 Reserved
|
||
WORD #0000 ; 12-13 Reserved
|
||
WORD #0000 ; 14-15 Reserved
|
||
WORD code_addr ; 16-17 €¤à¥á à ᯮ«®¦¥¨ï ª®¤ ¢ ¯ ¬ï⨠(#4100-#FFFF)
|
||
WORD program_start ; 18-19 €¤à¥á ¢ ¯ ¬ïâ¨ á ª®â®à®£® § ¯ãáâ¨âáï ª®¤ (Reg. PC)
|
||
WORD stack_point ; 20-21 €¤à¥á á⥪ (Reg. SP)
|
||
IFDEF EXEinfoMACRO ; 22-512 Œ®¦® ¨á¯®«ì§®¢ âì ¯®¤ ⥪áâ ¤«ï ¢ë¯¥¤àñ¦ ¨«¨ ¥ ¨á¯®«ì§®¢ âì
|
||
_mEXEinfo
|
||
ENDIF
|
||
; <20><>ˆŒ…<C592>:
|
||
; 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 '
|
||
exe_header.length equ $-exe_header
|
||
ORG addr_exe
|
||
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]
|
||
|
||
;------------------------------------[^] |