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