Sprinter-Core/src/bios/shared/CompMacro.asm
2023-06-20 01:27:50 +10:00

196 lines
6.3 KiB
NASM
Raw 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.

;
MACRO ShowInfo text, in_disp
/*
DISPLAY ' '
DISPLAY '[*] ', text
IF in_disp
DISPLAY 'ROM:'
DISPLAY ' ORG: ',/H, $$$
DISPLAY ' PAGE: ',/H, $$$$
DISPLAY 'MEM:'
DISPLAY ' DISP: ',/H, $
DISPLAY ' PAGE: ',/H, $$
ELSE
DISPLAY 'ROM:'
DISPLAY ' ORG: ',/H, $
DISPLAY ' PAGE: ',/H, $$
ENDIF
DISPLAY '[X]'
DISPLAY ' '
*/
ENDM
;
;
; ‚室: è¨à¨­  á¯à ©â , ¢ëá®â , ª®®à¤¨­ â  X, ª®®à¤¨­ â  Y,  ¤à¥á á¯à ©â  ¢ ¯ ¬ïâ¨
MACRO EasterTable width, height, Xcoord, Ycoord, addr
WORD addr ;  ¤à¥á á¯à ©â  ¢ ¯ ¬ïâ¨
WORD width ; ˜¨à¨­ 
BYTE height+Ycoord ; ‚ëá®â  + Y coord
WORD Xcoord+#4040 ; X coord ; !HARDCODE ‘à®ç­® ¨á¯à ¢¨âì ­  ¬¥âªã #4040 -  ¤à¥á «®£®
BYTE Ycoord ; Y coord
ENDM
;
; ­  ¢å®¤¥ ¢ A ­®¬¥à áâப¨. <20>  ¢ë室¥ ¢ HL  ¤à¥á ­ ç «  áâப¨. ¯®àâ¨â A, HL, BC
; MACRO FIND_STRING_ADDR ; !TODO ¯¥à¥¤¥« âì ­  CALL FIND_STRING_ADDR ?
; SLA A ; !FIXIT ¯¥à¥¤¥« âì ¯®¤ ª®«¨ç¥á⢮ áâப > 127
; LD HL,MSG_Buffer
; LD B,0
; LD C,A
; ADD HL,BC
; LD A,(HL)
; INC HL
; LD H,(HL)
; LD L,A
; ENDM
;
;
MACRO _mRECOVERYrdChooseTYPE vers
IF vers = 1
; ¥á«¨ RECOVERY ­¥ ¯®¤à §ã¬¥¢ ¥â 90% ¡¥§®¯ á­®áâì ¯®«ì§®¢ â¥«ì᪨å à ¬¤¨áª®¢
; â® ¢ë¡¨à ¥¬ íâ®â ¢ à¨ ­â, ®­ èãáâ॥, ¯®¤ RECOVERY ¢á¥£¤  ¢ë¡¨à ¥âáï RAM Disk 15
;
ELSEIF vers = 2
; ˆé¥¬ ᢮¡®¤­ë© à ¬¤¨áª
LD B,SYS_PAGE.RAMD_KEYS.NUM
.getRDidLoop: LD A,B
DEC A
LD (RECOVERYstart.RDkey),A
PUSH BC
;LD BC,ROM_DISK.Pages.Size * 256 + BIOS.GetMemRMD
;RST_to_BIOS
LD B,ROM_DISK.Pages.Size
CALL EMM.GetMemRMD
POP BC
JR NC,RECOVERYstart.IMGread ; ᢮¡®¤­ë© à ¬¤¨áª ­ ©¤¥­, ¢ë室¨¬ ¨§ 横« 
DEC A
JR Z,RECOVERYstart.FreeMem ; ®è¨¡ª  - ­¥¤®áâ â®ç­® ¯ ¬ïâ¨, ¢ë§ë¢ ¥¬ ®ç¨áâªã ¯ ¬ïâ¨
DJNZ .getRDidLoop
;
ELSE
ASSERT 0, Invalid 'RECOVERYrdChooseTYPE' variant - RECOVERYrdChooseTYPE
ENDIF
ENDM
;
MACRO _mRECOVERYmountTYPE vers
IF vers = 1 ; <20>®«¥¥ ¡ëáâàë©, ­® § å à¤ª®¦¥­­ë© ¢ à¨ ­â
LD HL,TEMP
;LD C,BIOS.GetMemBlkPages
;RST_to_BIOS ; ª¨¤ ¥¬ ¢ ¡ãä¥à ­®¬¥à  áâà ­¨æ RAM disk
CALL EMM.GetMemBlkPages
IN A,(SLOT3)
LD (.slot3save),A
LD HL,ROM_DISK.Pages.Number
LD B,0
LD C,(HL)
INC C
LD DE,TEMP+5
LDIR ; ª¨¤ ¥¬ ¤ «ìè¥ ¢ ¡ãä¥à ­®¬¥à  áâà ­¨æ ROM disk
LD IY,TEMP+5 ; ROM_DISK.Pages.Number
LD IX,TEMP
LD B,(IY+0)
LD A,R
PUSH AF
DI
.loopIMGtoRAM: PUSH BC
INC IY
LD A,(IY+0)
OUT (ROM.SLOT0),A
LD A,(IX+0)
OUT (SLOT3),A
INC IX
LD HL,0
LD DE,#C000
LD BC,#4000
LDIR
POP BC
DJNZ .loopIMGtoRAM
.slot3save+*: LD A,0
OUT (SLOT3),A
XOR A
OUT (ROM.SLOT0),A
OUT (SYS_PORT.ROM),A
POP AF
JP PO,.noInterrupts
EI
.noInterrupts:
;
ELSEIF vers = 2 ; ¬¥­¥¥ ¡ëáâàë©, ­® ¡®«¥¥ ¯à ¢¨«ì­ë© ¢ à¨ ­â ç¥à¥§ ä㭪樨 ¡¨®á 
LD (.ramdskID),A
LD DE,0 ; ­®¬¥à ᥪâ®à 
LD B,(ROM_DISK.Pages.Size * #4000)/512 ; áçñâ稪 - ª®«-¢  ᥪâ®à®¢ ¯® 512 ª¡
.loop:
;read rom disk
PUSH BC
LD A,1 ;à §¬¥à ᥪâ®à  256
EX AF,AF'
LD A,#46 ;ç⥭¨¥ ¨§ ROM-Disk
EX AF,AF'
LD HL,TEMP ; ¤à¥á ¡ãä¥à  ¤ ­­ëå
;LD BC,2*256 + BIOS.BLK_RD_WR ;ç¨á«® ᥪâ®à®¢ ¨ ­®¬¥à ä㭪樨
;RST_to_BIOS
LD B,2
CALL BLK_RD_WR
;write to ram disk
PUSH DE ;­®¬¥à ᥪâ®à 
DEC DE
DEC DE
.ramdskID+*: LD A,0 ;¨¤¥­â¨ä¨ª â®à ¡«®ª 
EX AF,AF'
LD A,#FF ;§ ¯¨áì ¢ RAM-Disk
EX AF,AF'
LD HL,TEMP ; ¤à¥á ¡ãä¥à  ¤ ­­ëå
;LD BC,2*256 + BIOS.BLK_RD_WR ;ç¨á«® ᥪâ®à®¢ ¨ ­®¬¥à ä㭪樨
;RST_to_BIOS
LD B,2 ;ç¨á«® ᥪâ®à®¢
CALL BLK_RD_WR
POP DE ;­®¬¥à ᥪâ®à 
POP BC
DJNZ .loop
;
ELSE
ASSERT 0, Invalid 'RECOVERYmountTYPE' variant - RECOVERYmountTYPE
ENDIF
ENDM
;
;
MACRO RST_to_BIOS
IF (IsInBIOS = 0) && ($ < #4000)
CALL ToBIOS_FromEXT
ELSE
RST ToBIOS_18
ENDIF
ENDM
;
;
MACRO JP_to_BIOS
IF (IsInBIOS = 0) && ($ < #4000)
JP ToBIOS_FromEXT
ELSE
JP ToBIOS_18
ENDIF
ENDM
;