Shared_Includes/Docs/BIOS functions.asm
Tolik Trek d2ba40c462 docs
2026-05-15 06:18:47 +10:00

1435 lines
59 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; Sprinter.
; ”㭪樨 BIOS.
; ‚ë§®¢ ä㭪権 ¯à®¨§¢®¤¨âáï ç¥à¥§ ¢å®¤ ¢ TR-DOS #3D13. <20>®¬¥à ª®¬ ­¤ë
; § ¤ ¥âáï ¢ ॣ¨áâॠC. “áâ ­®¢«¥­­ë© ­  ¢ë室¥ ä« £ C ®§­ ç ¥â § ¢¥à襭¨¥
; à ¡®âë ä㭪樨 á ®è¨¡ª®©.
; <20>ਠࠡ®â¥ ç á⨠ä㭪権 ¡¨®á  ­¥®¡å®¤¨¬® çâ® ¡ë á⥪ ­ å®¤¨«áï ¢
; ®¡« á⨠#8000..#BFFF, â ª ª ª ®­¨ ¨á¯®«ì§ãîâ ¤«ï ᢮¥© à ¡®âë ¯¥à¥ª«î祭¨¥
; áâà ­¨æ PAGE1 ¨ PAGE3. „«ï ãáâà ­¥­¨ï ª ª¨å «¨¡® ­¥¯à¨ïâ­®á⥩ á¢ï§ ­­ëå á®
; á⥪®¬ ¥£® á«¥¤ã¥â ¢á¥£¤  ãáâ ­ ¢«¨¢ âì ¢ íâ®â ¤¨ ¯ §®­ ¯à¨ ¢ë§®¢¥ ä㭪権
; ¡¨®á  ‘¯à¨­â¥à .
; ‚ë§®¢ ä㭪権 ¡¨®á â ª ¦¥ ¬®¦¥â ¡ëâì ®áãé¥á⢫¥­ ç¥à¥§ ¢å®¤ ¯®
; RST #18 ¯à¨ ¯®¤ª«î祭­®¬ á¨á⥬­®¬ <20>‡“,   â ª ¦¥ ç¥à¥§ RST 8 ¯à¨
; ¯®¤ª«î祭­®¬ އ“ ¢ ­ã«¥¢®© ¡ ­ª¥ ¯ã⥬ ãáâ ­®¢ª¨ ­   ¤à¥á RST 8 ­¥¡®«ì让
; ¯à®£à ¬¬ë, ¯¥à¥ª«îç î饩áï ¢ <20>‡“ ¡¨®á 
; „«ï ¯®¤ª«î祭¨ï á¨á⥬­®£® <20>‡“ ¬®¦­® ¢®á¯®«ì§®¢ âìáï â ª®©
; ¯®á«¥¤®¢ â¥«ì­®áâìî ª®¬ ­¤:
DI
LD A,0
OUT (#7C),A
; ¯®á«¥ í⮣® ¢ 0-¬  ¤à¥á¥ ¡ã¤¥â ¢ª«î祭  <20>‡“ ¡¨®á 
; ¨ ¯à®£à ¬¬  ¬®¦¥â ¢ë§ë¢ âì ä㭪樨 ç¥à¥§ RST #18,
; ¯à®áâ® § ¬¥­ïï í⨬ ¢ë§®¢®¬ ¢ë§®¢ CALL #3D13
; * Ž¡ëç­ë¥ ä㭪樨 TR-DOS ¢ íâ®â ¬®¬¥­â ­¥¤®áâ㯭ë
; —â®¡ë ¢¥à­ãâìáï ª ®¡ëç­®¬ã <20>‡“ á«¥¤ã¥â ¢ë¯®«­¨âì ¯à®£à ¬¬ã:
LD A,0
OUT (#3C),A
; ‚ë§®¢ ¨§ އ“ ®áãé¥á⢫ï¥âáï ç¥à¥§ RST 8. <20>ਠí⮬ ­   ¤à¥á¥ 8 ¤®«¦­ 
; à á¯®« £ âìáï â ª ï ¯à®£à ¬¬ :
PUSH AF
LD A,0
OUT (#7C),A ; ¢ í⮬ ¬¥á⥠¢¬¥áâ® Ž‡“ ¯®¤ª«îç¨âáï <20>‡“ ¡¨®á  ¨
; ¯à®£à ¬¬  㩤¥â ¢ ­¥£®.
POP AF ; <20>  íâã ª®¬ ­¤ã ¯à®¨á室¨â ¢®§¢à â ¯à¨ â ª®¬
; ¢ë§®¢¥ ¡¨®á .
RET
; Ž¯â¨¬¨§ æ¨ï ª®¤  ¢ í⮬ ¬¥á⥠­¥¤®¯ãá⨬ . ‚¬¥áâ® LD A,0 ¬®¦­® ãáâ ­®¢¨âì
; ¤¢¥ ª®¬ ­¤ë XOR A ¨ DI
; „ «¥¥ ¢ë§®¢ ä㭪権 ®áãé¥á⢫ï¥âáï  ­ «®£¨ç­® RST #18, ­® á«¥¤ã¥â ¯®¬­¨âì,
; çâ®  ¤à¥á­®¥ ¯áâà ­á⢮ 0000..#3FFF ¢® ¢à¥¬ï à ¡®âë ¡¨®á  § ­ïâ® <20>‡“ ¨ ¢ ­¥¬
; ­¥ ¬®£ãâ à á¯®« £ âìáï ¤ ­­ë¥ ¤«ï à ¡®âë ä㭪権.
; ‚ë§®¢ ­®¢ëå ä㭪権 ç¥à¥§ #3D13  ¢â®¬ â¨ç¥áª¨ ®âª«î砥⠯à¥à뢠­¨ï.
; <20>®á«¥ ¨á¯®«­¥­¨ï ä㭪樨 ¯à®£à ¬¬  ¤®«¦­  ¢ª«îç¨âì ¨å ¯à¨ ­¥®¡å®¤¨¬®áâ¨.
; …᫨ ­¥®¡å®¤¨¬® çâ® ¡ë ¯à¥à뢠­¨ï ¡ë«¨ ¢ª«îç¥­ë ¢á¥ ¢à¥¬ï, á«¥¤ã¥â
; ¨á¯®«ì§®¢ âì ०¨¬ IM 2, á â ¡«¨æ¥©, á⥪®¬ ¨ ®¡à ¡®â稪®¬ à á¯®«®¦¥­­ë¬ ¢
; ®¡« á⨠#8000..#BFFF ¨ ¯®«ì§®¢ âìáï ¢ë§®¢®¬ ç¥à¥§ RST #18 ¨«¨ RST 8
; í⮬ á«ãç ¥ ¯à¥à뢠­¨ï ¢ ¡¨®á¥ ­¥ ®âª«îç îâáï.
; ¡«¨¦ ©è¥¥ ¢à¥¬ï ¢ ®¯¨á ­¨¥ ¡¨®á  ¡ã¤ãâ ¤®¡ ¢«¥­ë ä㭪樨 à ¡®âë á FDD ¨
; CD-ROM
; * ¤ ­­ë© ¬®¬¥­â ®­¨ ¨¬¥îâáï, ­® ¯à¥¤¯®« £ ¥âáï ¨å á¥à쥧­ ï ¯¥à¥¤¥«ª .
; <20>¥ª®â®àë¥ ä㭪樨 § à¥§¥à¢¨à®¢ ­ë ¤«ï ¤ «ì­¥©è¥£® à §¢¨â¨ï. ’ ª ¦¥ ­¥
; ®¯¨á ­  ç áâì £à ä¨ç¥áª¨å ä㭪権, â ª ª ª ®­¨ ¢ ¤ ­­ë© ¬®¬¥­â ¯®¤¢¥à£ îâáï
; á¥à쥧­ë¬ ¯¥à¥¤¥«ª ¬.
;==============================================================================
; 1. <20> ¡®â  á ¯ ¬ïâìî.
;==============================================================================
EMM:
.GetMemSize: ; ®¯à¥¤¥«¥­¨¥ ®¡ê¥¬®¢ އ“
LD C,#C0 ; äã­ªæ¨ï ­®¬¥à #C0
RST ToBIOS ; HL - ®¡é¨© ®¡ê¥¬ ¯ ¬ï⨠¢ áâà ­¨æ å ¯® 16kb
; BC - ®¡ê¥¬ ᢮¡®¤­®© ¯ ¬ï⨠¢ áâà ­¨æ å ¯® 16kb
;
.InitMem: ; ¨­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨
; áâ¨à ¥âáï ¢áï ¨­ä®à¬ æ¨ï ® ¢ë¤¥«¥­­ëå à ­¥¥ ¡«®ª å
; އ“. “áâ ­ ¢«¨¢ îâáï ª ª § ­ïâë¥ ¡«®ª¨ á
; á¨á⥬­®© ¨­ä®à¬ æ¨¥©,   â ª ¦¥ ¯¥à¢ë¥ 256kb އ“ ;!FIXIT
LD C,#C1 ; ­®¬¥à ä㭪樨
RST ToBIOS ; ¢ë室­ëå ¯ à ¬¥â஢ ­¥â
;
.GetMem: ; ¢ë¤¥«¥­¨¥ ¡«®ª  އ“
LD B,num_pages ; § ¯à è¨¢ ¥¬®¥ ç¨á«® áâà ­¨æ އ“
LD C,#C2 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> € - ¨¤¥­â¨ä¨ª â®à ¡«®ª 
; CF -> A=1 - ­¥â ¯ ¬ïâ¨
;
.FreeMem: ; ®á¢®¡®¤¨âì ¡«®ª އ“
LD A,id_blk ; ¨¤¥­â¨ä¨ª â®à ¡«®ª 
LD C,#C3 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF - ­¥¢¥à­ë© ¨¤¥­â¨ä¨ª â®à ¡«®ª 
; ¯à ¢¨«ì­®áâì ¨¤¥­â¨ä¨ª â®à  ®âá«¥¦¨¢ ¥âáï ­¥ ¢á¥£¤ 
;
.GetMemPage: ; ¯®«ãç¨âì 䨧¨ç¥áª¨© ­®¬¥à áâà ­¨æë ¨§ ¡«®ª 
LD A,id_blk ; ¨¤¥­â¨ä¨ª â®à ¡«®ª 
LD B,page ; «®£¨ç¥áª ï áâà ­¨æ  ¢ ¡«®ª¥
LD C,#C4 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> € - 䨧¨ç¥áª¨© ­®¬¥à áâà ­¨æë
; CF -> €=0 - ­¥â â ª®£® ¡«®ª , A=FF - ª®­¥æ ¡«®ª 
;
.GetMemBlkPages:; ¯®«ãç¨âì ᯨ᮪ 䨧¨ç¥áª¨å áâà ­¨æ ¡«®ª 
LD A,id_blk ; ¨¤¥­â¨ä¨ª â®à ¡«®ª 
LD HL,bufer ; ¡ãä¥à ¤«¨­®© 256 ¡ ©â ¤«ï à §¬¥é¥­¨ï ᯨ᪠
; ¡ãä¥à ¤®«¦¥­ ¡ëâì ¤«¨­®© ­  ¥¤¨­¨æã ¡®«ìè¥ ç¨á« 
; áâà ­¨æ ¢ ¡«®ª¥
LD C,#C5 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> HL - â®â ¦¥ ¡ãä¥à, B - ç¨á«® áâà ­¨æ ¢ ¡«®ª¥,
; ¤ ­­ë¥ ¯®  ¤à¥áã HL - ᯨ᮪ 䨧¨ç¥áª¨å áâà ­¨æ ¯®
; ¯®à浪ã. ‘¯¨á®ª § ª ­ç¨¢ ¥âáï ¡ ©â®¬ FF
; CF -> ­¥¢¥à­ë© ¨¤¥­â¨ä¨ª â®à ¡«®ª . ‘â à ï
; ¨­ä®à¬ æ¨ï ¢ ¡ãä¥à¥ ¬®¦¥â ¡ëâì § â¥àâ 
;
.GetBanksPorts: ; <20>®«ã祭¨¥  ¤à¥á®¢ ¯®à⮢ ®ª®­
LD A,win_num ; ­®¬¥à ®ª­  ¯à®¥æ¨à®¢ ­¨ï 0,1,2 ¨«¨ 3
LD C,#C6 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> C - 8-¬¨¡¨â­ë©  ¤à¥á ¯®àâ , B - ­®¬¥à
; ¯®¤ª«î祭­®© ¢ ¤ ­­ë© ¬®¬¥­â áâà ­¨æë އ“
; CF -> ®è¨¡ª  ­®¬¥à  ®ª­ 
; ”ã­ªæ¨ï ä ªâ¨ç¥áª¨ ­¥ ¨á¯®«ì§ã¥âáï ¢ ¤ ­­ë© ¬®¬¥­â. €¤à¥á  ¯®à⮢ ®ª®­
; ­¥ ¨§¬¥­ï«¨áì á á ¬®£® ­ ç «  à §à ¡®âª¨ ª®¬¯ìîâ¥à  ¨, ­ ¤¥îáì, ­¥ ¡ã¤ãâ
; ¬¥­ïâìáï. „«ï ᮡ«î¤¥­¨ï ¯à¨«¨ç¨© ¯à®£à ¬¬¨áâã á«¥¤ã¥â å®âï ¡ë ®¤¨­ à §
; ¢ë§¢ âì í⨠ä㭪樨 ¨ áà ¢­¨âì  ¤à¥á  ¯®à⮢ á ⥬¨, çâ® ¨á¯®«ì§ãîâáï ¢
; ¯à®£à ¬¬¥ ¨, ¥á«¨ ®­¨ ­¥ ᮢ¯ ¤ îâ, ¢ë¤ âì ᮮ⢥âáâ¢ãî饥 ¯à¥¤ã¯à¥¦¤¥­¨¥.
; ¤ ­­ë© ¬®¬¥­â í⨠¯®àâë â ª®¢ë: PAGE0=#82, PAGE1=#A2, PAGE2=#C2, PAGE3=#E2
;
.GetMemPageNext:; ¯®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã ¡«®ª  ¯® ¯à¥¤ë¤ã饬ã
LD A,page ; 䨧¨ç¥áª ï áâà ­¨æ  ¡«®ª 
LD C,#C7 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> A - á«¥¤ãîé ï 䨧¨ç¥áª ï áâà ­¨æ  ¡«®ª 
; A=FF - ¨­¤¨æ¨àã¥â ª®­¥æ ¡«®ª 
; CF -> ®è¨¡ª  ­®¬¥à  áâà ­¨æë
; ˆ­ä®à¬ æ¨ï ® à á¯à¥¤¥«¥­¨¨ ¯ ¬ï⨠åà ­¨âáï ¢ ¢¨¤¥ RAM Allocation Table,
; ¯®å®¦¥© ­  ¤¨áª®¢ë© FAT. <20>®í⮬㠭 å®¦¤¥­¨¥ 䨧¨ç¥áª®£® ­®¬¥à  á«¥¤ãî饩
; áâà ­¨æë ¯® ¯à¥¤ë¤ã饬ã 䨧¨ç¥áª®¬ã ­®¬¥à㠯நá室¨â §­ ç¨â¥«ì­® ¡ëáâ॥,
; 祬 ¯®¨áª ¯® 㢥«¨ç¥­­®¬ã ­  ¥¤¨­¨æã «®£¨ç¥áª®¬ã ­®¬¥àã.
;
.MergeMemBlocks:; ᫨ﭨ¥ ¡«®ª®¢
LD A,id_blk1 ; ¡«®ª ­®¬¥à 1
LD B,id_blk2 ; ¡«®ª ­®¬¥à 2
LD C,#9E ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> A - ¡«®ª १ã«ìâ â 
; CF -> ®è¨¡ª , ­¥¢¥à­ë© ­®¬¥à ¡«®ª 
;
.DivMemBlocks ; à §¤¥«¥­¨¥ ¡«®ª 
LD A,id_blk1 ; ¡«®ª
LD B,len_blk ; ­®¢ ï ¤«¨­  ¡«®ª 
LD C,#9D ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> A - ¡«®ª १ã«ìâ â , B - ¡«®ª ®áâ âª 
; CF -> ®è¨¡ª , ­¥¢¥à­ë© ­®¬¥à ¡«®ª 
;
;==============================================================================
; 2. <20> ¡®â  á ¡«®ª ¬¨ ª ª á RAM-Disk- ¬¨
;==============================================================================
.GetMemRMD: ; <20>®«ãç¨âì ¡«®ª ¯ ¬ï⨠N bytes ¤«ï RAM-Disk' 
LD A,ram_disk ; ­®¬¥à RAM-Disk-  0..15
LD B,ram_blocks; ç¨á«® ­¥®¡å®¤¨¬ëå ¡«®ª®¢
LD C,#92 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> L, A - Š‹ž— RAM-Disk' 
; CF -> ®è¨¡ª ,
; A - ª®¤ ®è¨¡ª¨: 1 - ­¥â ¯ ¬ïâ¨
; 2 - RAM-Disk § ­ïâ
;
.FreeMemRMD: ; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ï⨠¤«ï RAM-Disk' 
LD A,ram_disk ; ­®¬¥à RAM-Disk'  0..15
LD C,#93 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF - ®è¨¡ª , €=0 - ­¥â â ª®£® ¡«®ª , A=2 - ®è¨¡ª  楯®çª¨
;
.GetMemPageRMD: ; <20>®«ãç¨âì 䨧¨ç¥áª¨© ­®¬¥à áâà ­¨æë RAM-Disk' 
LD A,ram_disk ; ­®¬¥à RAM-Disk'  0..15
LD B,page ; «®£¨ç¥áª ï áâà ­¨æ  RAM-Disk' 
LD C,#94 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> € - 䨧¨ç¥áª¨© ­®¬¥à áâà ­¨æë
; CF -> €=0 - ­¥â â ª®£® ¡«®ª , A=FF - ª®­¥æ ¡«®ª 
;
.CheckInit: ; …᫨ ®¡­ à㦥­ ¯¥à¢ë© áâ àâ, â® ¨­¨æ¨ «¨§ æ¨ï ¢á¥© ¯ ¬ïâ¨, á¨á⥬­ëå ¯¥à¥¬¥­­ëå
LD C,#97 ; ­®¬¥à ä㭪樨
RST ToBIOS ;
;
RAMD_CALC_PAGE: ; ‚ëç¨á«¥­¨¥ áâà ­¨æë ¨  ¤à¥á  ¢ RAM-Disk ¯®  ¡á®«îâ­®¬ã ­®¬¥àã ᥪâ®à 
LD A,ram_disk ; ­®¬¥à RAM-Disk'  0..15
LD DE,sector ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à 
LD C,#98 ; ­®¬¥à ä㭪樨
RST ToBIOS ; A - áâà ­¨æ , HL -  ¤à¥á ¢ áâà ­¨æ¥
;
.FullInit: ; ¨­¨æ¨ «¨§ æ¨ï ¢á¥© ¯ ¬ïâ¨, á¨á⥬­ëå ¯¥à¥¬¥­­ëå
LD C,#9F ; ­®¬¥à ä㭪樨
RST ToBIOS ;
;
BLK_RD_WR: ; ç⥭¨¥/§ ¯¨áì ¨§/¢ ¡«®ª( ) ¯ ¬ï⨠ᥪâ®à ¬¨
; ¯® 256 ¡ ©â (¢ á«ãç ¥ á ROM ¤¨áª®¬ ¬®¦­® ¯® 512)
LD HL,bufer ;  ¤à¥á ¡ãä¥à  ¤ ­­ëå
LD DE,sector ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  (áç¨â âì ¯® 256b ᥪâ®à)
LD B,sec_num ; ç¨á«® ᥪâ®à®¢
LD A,id_blk ; ¨¤¥­â¨ä¨ª â®à ¡«®ª  (¤«ï rom disk à §¬¥à ᥪâ®à : 1 - 256b, 2 - 512 b)
LD A',command ; ª®¬ ­¤  0 - ç⥭¨¥, #FF - § ¯¨áì, #46 ç⥭¨¥ ¨§ ROM-Disk
LD C,#C8 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª  ¨¤¥­â¨ä¨ª â®à 
;
BLK_TO_RAMD: ; ­ §­ ç¨âì ¡«®ª ¯ ¬ï⨠RAM-Disk-ã
; «î¡®© ¡«®ª ¯ ¬ï⨠¬®¦¥â ᮤ¥à¦ âì ¤ ­­ë¥
; RAM-Disk-  ¢ ä®à¬ â¥ TR-DOS ¤«ï ¯®¤ª«î祭¨ï íâ¨å
; ¤ ­­ëå ¢ ª ç¥á⢥ ¤¨áª  ¨ á«ã¦¨â íâ  äã­ªæ¨ï
LD A,ram_disk ; ­®¬¥à RAM-Disk-  0..15 - ᮮ⢥âáâ¢ã¥â
; RAM-Disk- ¬ ®â e: ¤® t:
LD B,id_blk ; ¨¤¥­â¨ä¨ª â®à ¡«®ª 
LD C,#C9 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª : ­¥¢¥à­ë© ­®¬¥à RAM-Disk-  ¨«¨ RAM-Disk § ­ïâ
;
RAMD_CLEAR: ; ®á¢®¡®¤¨âì RAM-Disk
; ®á¢®¡®¦¤¥­¨¥ RAM-Disk-  ­¥ ¥áâì ®á¢®¡®¦¤¥­¨¥
; ¡«®ª  އ“. <20>â® ¯à®áâ® ®âª«î祭¨¥ ¡«®ª  އ“ ®â
; RAM-Disk- 
LD A,ram_disk ; ­®¬¥à RAM-Disk-  - 0..15
LD C,#CA ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥, B - ¨¤¥­â¨ä¨ª â®à
; ¡«®ª  ®âª«î祭­®£® ®â RAM-Disk- 
; CF -> ®è¨¡ª : ­¥¢¥à­ë© ­®¬¥à RAM-Disk-  ¨«¨
; RAM-Disk ¡ë« ᢮¡®¤¥­
;
GET_RAMD_ST: ; ¯®«ã祭¨¥ ¨¤¥­â¨ä¨ª â®à  ¡«®ª , ­ §­ ç¥­­®£® ­ 
; RAM-Disk
LD A,ram_disk ; ­®¬¥à RAM-Disk-  0..15
LD C,#CE ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> A - ¨¤¥­â¨ä¨ª â®à ¡«®ª .
; A=0 - ¡«®ª ­¥ ­ §­ ç¥­.
; CF -> ®è¨¡ª  ­®¬¥à  RAM-Disk- 
;
GET_RAMD_NUM: ; ¯®«ãç¨âì ­®¬¥à RAM-Disk-  (0..15) ¯® ¥£® block id
LD A,id_blk ; ¨¤¥­â¨ä¨ª â®à ¡«®ª 
LD C,#9B ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> A - ­®¬¥à RAM-Disk-  (0..15).
; CF -> ®è¨¡ª  ¢ ¨¤¥­â¨ä¨ª â®à¥ ¡«®ª  ¨«¨ ¡¨®á ­¨¦¥ 2.55
;
; [x] 4/11/23
SWAP_RAM_DRIVES:; ¯®¬¥­ïâì ¬¥áâ ¬¨ ID RAM ¤à ©¢®¢ (ZX/Sp)
LD B,func ; 0 - swap to Sp, #FF - swap to ZX, #FE - no swap, only get info
LD C,#9C ; ­®¬¥à ä㭪樨
RST ToBIOS ; A - current RAM Drives set
;==============================================================================
; 3. “¯à ¢«¥­¨¥ ­ §­ ç¥­¨¥¬ ­  ¤¨áª®¢®¤ë
;==============================================================================
; Š ¦¤ë© ¨§ 4-å ¤¨áª®¢®¤®¢ TR-DOS ¬®¦¥â ¡ëâì ¯¥à¥­ §­ ç¥­ ¤«ï à ¡®âë
; á RAM-Disk- ¬¨, ¢¨­ç¥áâ¥à®¬ ¨ ॠ«ì­ë¬¨ ¤¨áª®¢®¤ ¬¨.
SET_DISK_REDIR: ; ãáâ ­®¢¨âì ­  ⥪ã騩 ¤à ©¢ ¯¥à¥­ §­ ç¥­¨¥ (áâ à ï äã­ªæ¨ï ¤«ï TR-DOS!)
LD E,drv_type ; 䨧¨ç¥áª¨© ⨯ ¨ ­®¬¥à ãáâனá⢠
LD C,#99 ;
RST ToBIOS ; NC -> ­®à¬ «ì­¨¥ § ¢¥à襭¨¥.
;
GET_DISK_REDIR: ; ¯®«ãç¨âì ⨯ ­ §­ ç¥­¨ï ­  ⥪ã騩 ¤à ©¢ (áâ à ï äã­ªæ¨ï ¤«ï TR-DOS!)
LD C,#9A ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­¨¥ § ¢¥à襭¨¥. A - ⨯ ­ §­ ç¥­¨ï
; A=0..3 - ­ §­ ç¥­ ॠ«ì­ë© ¤¨áª®¢®¤ A:, B:, C:, D:
; A=4..19 - ­ §­ ç¥­ RAM-Disk, A = ram_disk + 4
; A=#40..#4F - ­ §­ ç¥­ ¢¨­ç¥áâ¥à (#40+hdd_drive)
;
RAMD_TO_DRV: ; ­ §­ ç¥­¨¥ RAM-Disk ­  ¤¨áª®¢®¤.
LD A,ram_disk ; ­®¬¥à RAM-Disk- 
LD B,drive ; ­®¬¥à ¤¨áª®¢®¤  0..3 - ᮮ⢥âáâ¢ã¥â ¤¨áª®¢®¤ ¬
; A:, B:, C:, D:
LD C,#CB ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­¨¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª : ­¥¢¥à­ë© ­®¬¥à ¤à ©¢  ¨«¨ à ¬¤¨áª 
;
FDD_TO_DRV: ; ­ §­ ç¥­¨¥ ॠ«ì­®£® ¤¨áª®¢®¤ 
LD ,disk_drive; ­®¬¥à 䨧¨ç¥áª®£® ¤¨áª®¢®¤  0..3
LD B,drive ; ­®¬¥à ¤à ©¢  0..3
; <20>®¬¥à 䨧¨ç¥áª®£® ¤¨áª®¢®¤  ¨ ­®¬¥à ¤à ©¢  ¤®«¦­ë
; ᮢ¯ ¤ âì, â ª ª ª ª®¬¯ìîâ¥à ­¥ ¨¬¥¥â
; í«¥ªâà¨ç¥áª®© áå¥¬ë ¯¥à¥ª«î祭¨ï ¤¨áª®¢®¤®¢ ­ 
; à §­ë¥ ¡ãª¢ë. ¡ã¤ãé¨å ¢¥àá¨ïå ¦¥«¥§ , ¢®§¬®¦­®,
; íâ® ¯®ï¢¨âáï.
LD C,#CC ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­¨¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª : ­¥¢¥à­ë© ­®¬¥à ¤à ©¢  ¨«¨ ¤¨áª®¢®¤ 
;
HDD_TO_DRV: ; ­ §­ ç¥­¨¥ ¢¨­ç¥áâ¥à  ­  ¤¨áª®¢®¤
LD A,hdd_drive ; <20>®¬¥à ¢¨­ç¥áâ¥à .
; à §«¨ç­ëå à §¤¥«®¢ ¨ master/slave
LD B,drive ; ­®¬¥à ¤à ©¢  0..3
LD C,#CD ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­¨¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª : ­¥¢¥à­ë© ­®¬¥à ¤à ©¢  ¨«¨ ¢¨­ç¥áâ¥à 
;
GET_DRV_ST: ; ¯®«ãç¨âì ⨯ ­ §­ ç¥­¨ï ­  ¤à ©¢ ; !TODO ¯à®¢¥à¨âì
LD A,drive ; ­®¬¥à ¤à ©¢  0..3
LD C,#CF ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­¨¥ § ¢¥à襭¨¥. A - ⨯ ­ §­ ç¥­¨ï
; A=0..3 - ­ §­ ç¥­ ॠ«ì­ë© ¤¨áª®¢®¤ A:, B:, C:, D:
; A=4..19 - ­ §­ ç¥­ RAM-Disk, A = ram_disk + 4
; A=#40..#4F - ­ §­ ç¥­ ¢¨­ç¥áâ¥à (#40+hdd_drive)
; CF -> ®è¨¡ª  ­®¬¥à  ¤à ©¢ 
;
;==============================================================================
; 4. ”㭪樨 ã¯à ¢«¥­¨ï ¦¥«¥§®¬ ¨ ®¯à¥¤¥«¥­¨¥ ¢¥àᨨ.
;==============================================================================
;!TODO
FN_SEND_BYTE
LD C,#E8
RST ToBIOS
;
;!TODO
FN_RESEIVE_B
LD C,#E9
RST ToBIOS
;
;!TODO
FN_KBD_OUT
LD C,#EA
RST ToBIOS
;
FN_CRIPT
LD B,func ; 1: HL - ROM_NUMBER part1
; A - ROM_NUMBER part2
; BC - BoardID start
; DE - BoardID end
; [x] 28/01/2024
; ; 2: HL -  ¤à¥á ¡ãä¥à  ¤«ï ­ §¢ ­¨ï 稯  (⥪áâ). ¬ ªá¨¬ã¬ 5 ¡ ©â®¢, § ª ­ç¨¢ îâáï ­ã«ñ¬
LD HL,buff ; CF = 0:
; ; A: 0 - K30, 1 - K50, ®áâ «ì­®¥ ¢ १¥à¢¥ ­  ¡ã¤ã饥
; ; DE: ¢¥àá¨ï ¡¨âáâਬ 
LD C,#ED
RST ToBIOS
;
RST_CONF.AY8910:; ¯¥à¥ª«î祭¨¥ ¢ ª®­ä¨£ãà æ¨î Spectrum. AY8910
LD C,#EE ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> äã­ªæ¨ï ­¥ ¨á¯®«­¥­ , ä â «ì­ ï ®è¨¡ª 
; ¬ è¨­ã á«¥¤ã¥â ¯¥à¥§ ¯ãáâ¨âì ¯® RESET
;
FN_VERSION: ; ¢ë¤ ç  ¨­ä®à¬ æ¨¨ ® ¢¥àᨨ ¡¨®á  ¨ ¦¥«¥§ 
LD HL,bufer ; ¡ãä¥à, ªã¤  ¡ã¤¥â ¯®¬¥é¥­  ASCIIZ áâப  á
; ­ §¢ ­¨¥¬ ¨ ­®¬¥à®¬ ¢¥àᨨ, ª®­¥æ áâப¨ ®â¬¥ç¥­
; ­ã«¥¬.
LD C,#EF ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> HL - â®â ¦¥ ¡ãä¥à á § ¯¨á ­­®© áâப®©:
; "­ §¢ ­¨¥ ¯à®è¨¢ª¨ | Sprinter | ¢¥àá¨ï_ª®­äë"
; A - ç¨á«® ¯®«¥© áâப¨ ¢ ¡ãä¥à¥ HL
; DE - ¢¥àá¨ï ¡¨®á 
; BC - ¢¥àá¨ï ¦¥«¥§  (;!TODO âã⠢뤠ñâáï CONFIG_BYTE)
; BC=#FFFF - not identifyed
; BC=#FFFE - Sprinter-1
; BC=#FFFD - Sprinter-2
; BC=#FFFC - Spectrum + AY8910
; BC=#FFFB - Game-1
; BC=#FFFA - Video-1
; BC=#FFF9 - DooM
; BC=#FEFF - Sprinter 2000
; ˆ­ë¥ §­ ç¥­¨ï BC - ­®¢ë¥ ¯à®è¨¢ª¨
; ¢¥àá¨ï ¦¥«¥§  ¢ë¤ ¥âáï ⮫쪮
; ¢ ¡¨®á å ¢¥àᨩ 1.16 ¨ ¢ëè¥
; CF -> ®è¨¡ª . Žç¥­ì áâ à ï ¢¥àá¨ï, ­¥ ¨¬¥îé ï
; ¤ ­­®© ä㭪樨
;!!!!! ‘â à ï ¢¥àá¨ï ¢ë¤ ¢ « :
; ; L - ¯¥à¢ë¥ 4 ¡¨â  - ¡¨âë ¯®àâ  All_Mode.
; ; ¢ FN ¥áâì â ª®© ª®¤:
;
; LD A,%0000'1101 ; ­ã¦­ë¥ ¡¨âë ¤«ï ¯®àâ  All_Mode
; AND L
; SUB %0000'1101
; JR Z,InitVM1
; IN A,(SCREEN_SWITCH)
; PUSH AF
; LD C,BIOS.RST_CONF.SP97_2
; RST ToBIOS
; SUB A
; OUT (BORDER),A
; POP AF
; OUT (SCREEN_SWITCH),A
;
;!FIXIT
RST_CONF.SP97_1:; ¯¥à¥ª«î祭¨¥ ¢ ª®­ä¨£ãà æ¨î Sprinter-1. SPRINTER_1
LD C,#F0 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> äã­ªæ¨ï ­¥ ¨á¯®«­¥­ , ä â «ì­ ï ®è¨¡ª 
; ¬ è¨­ã á«¥¤ã¥â ¯¥à¥§ ¯ãáâ¨âì ¯® RESET
;
;!FIXIT
RST_CONF.SP97_2:; ¯¥à¥ª«î祭¨¥ ¢ ª®­ä¨£ãà æ¨î Sprinter-2. SPRINTER_2
LD C,#F1 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> äã­ªæ¨ï ­¥ ¨á¯®«­¥­ , ä â «ì­ ï ®è¨¡ª 
; ¬ è¨­ã á«¥¤ã¥â ¯¥à¥§ ¯ãáâ¨âì ¯® RESET
;
RST_CONF.CUSTOM:; ¯¥à¥ª«î祭¨¥ ª®­ä¨£ãà æ¨¨ ¯®«ì§®¢ â¥«ï. SPRINTER_ALL
LD A,page_cnf ; áâà ­¨æ  á ä ©«®¬ ¯à®è¨¢ª¨ ¤«ï <20>Œ EPF10K10 (áâ à®¥ ¯®¢¥¤¥­¨¥ ®â Sp97)
; áâà ­¨æ  ­¥ ¬®¦¥â ¨¬¥âì ­®¬¥à ¡®«ìè¥ 127 (áâ à®¥ ¯®¢¥¤¥­¨¥ ®â Sp97)
; ” ©« ¯à®è¨¢ª¨, ¥áâ¥á⢥­­® ¤®«¦¥­ ¡ëâì 㦥
; § £à㦥­ ¢ íâã áâà ­¨æã
LD B,ramblk ; [x] ¯à¨ A = #FE ¯¥à¥§ «¨¢ª  ª®­äë á ¢®§¢à â®¬. B 㪠§ë¢ ¥â ­  RAM Block ID á ¡¨âáâਬ®¬ ¤«ï § £à㧪¨, ¥á«¨ B=0, â® § £à㧪  ¨§ ROM
; [x] ¯à¨ A = #FD ¯à®¨á室¨â २­¨â. €ªá¥«ì ¢ª«îç ¥âáï ¨ â¤... ¬®¦­® ­ ¯¨å âì â㤠 ¥éñ çâ®-­¨¡ã¤ì
; [x] ¯à¨ A = #FC á®äâ-à¥á¥â á ¢®§¢à â®¬
; [x] ¯à¨ A = #FB ãáâ ­®¢ª  ¯¥à¥å¢ â稪  á®äâ-à¥á¥â , DE -  ¤à¥á ¯à®æ¥¤ãàë
; [x] ¯à¨ A = #FA ãáâ ­®¢ª  ¯¥à¥å¢ â稪  å à¤-à¥á¥â , DE -  ¤à¥á ¯à®æ¥¤ãàë, B - RAM_BLK_ID á ª®­ä®©, «¨¡® 0, ¥á«¨ ¨§ ¯§ã
LD C,#F3 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­¨¥ § ¢¥à襭¨¥
; CF -> äã­ªæ¨ï ­¥ ¨á¯®«­¥­ , ä â «ì­ ï ®è¨¡ª 
; ¬ è¨­ã á«¥¤ã¥â ¯¥à¥§ ¯ãáâ¨âì ¯® RESET
;
; ; [x] free zx pages
GOTO_SPEC: ; ‚室 ¢ ०¨¬ ᯥªâà㬠
; ‚室: D: 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128,
; 3 - EXPANSION. C § ªàëâ묨 128-¬¨ ¯®àâ ¬¨:
; 4 - TR-DOS, 5 - BASIC 48
; E: §­ ç¥­¨¥ ¤«ï SYS_PORT/CNF_PORT
; L: Block_ID.vROM
; H: Block_ID.vRAM
; B: Port All Mode
;A [1..0]: 1 - int scorp, 2 - int pent, 3 - int ZX
; A'[2]: 0 - set default palette, 1 - don't change palette
; A'[7]: 0 - 320, 1 - 312 áâப
LD C,#FB
RST ToBIOS
;
ZX_MEMORY_MANAGER:; ‚뤥«¥­¨¥/®á¢®¡®¦¤¥­¨¥/¨­¨â áâà ­¨æ ᯥªâà㬠
;¢å®¤: ॣ B:
; FN 0x
; 0 - § à¥§¥à¢¨à®¢ ­®
; 1 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 48k. 3 áâà ­¨æë
; 2 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 128k. 2+6 áâà ­¨æë
; 3 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 512k. 2+30 áâà ­¨æë
; 4 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Scorpion 256k. 2+6+8 áâà ­¨æë
; 5..15 - § à¥§¥à¢¨à®¢ ­ë
; FN 1x
; 16 - ¯®«ãç¨âì à ¬¡«®ª¨ ¨­¨æ¨ «¨§¨à®¢ ­­ëå vROM ¨ VRAM
; 17..31 - § à¥§¥à¢¨à®¢ ­ë
;
; FN 2x..3x § à¥§¥à¢¨à®¢ ­® ;!TODO
;
; FN 4x
; 64 - ®á¢®¡®¤¨âì à ¬¡«®ª¨ vROM ¨ vRAM
; 65 - ®á¢®¡®¤¨âì à ¬¡«®ª vRAM
; 66 - ®á¢®¡®¤¨âì à ¬¡«®ª vROM
; 65..127 - § à¥§¥à¢¨à®¢ ­ë
; FN 8x
; 128 - ¨­¨æ¨ «¨§¨à®¢ âì ᢮© ­ ¡®à áâà ­¨æ vROM
;
; ॣ HL: ¯à¨ ॣ B[7]=1  ¤à¥á ᯨ᪠ áâà ­¨æ (11 èâ):
; byte1 - RAM block ID, byte2..11 - áâà ­¨æë ¤«ï vROM - ZXSlot: 1,2,3(=0),à áè¨à¥­­ ï
;¢ë室: CF = 0: HL - ­®¬¥à  à ¬¡«®ª®¢ ¤«ï ०¨¬®¢ 0..16. H=vRAM, L=vROM
; CF = 1: A - ­®¬¥à ®è¨¡ª¨
;
;¥á«¨ áâíª ­ å®¤¨âáï ¢ âà¥â쥬 á«®â¥, â® ¢ë§®¢ á ¢ëª«î祭­ë¬¨ ¯à¥à뢠­¨ï¬¨
LD C,#FC
RST ToBIOS
;
REINIT: ; [x] ‘¡à®á, ¯¥à¥§ £à㧪 , à¥áâ àâ, ®ç¨á⪠ ¯ ¬ïâ¨ á ¢®ááâ ­®¢«¥­¨¥¬ ZX pages ; [ ] free zx pages!
LD B,res_type ; 1 - à¥áâ àâ, 2 - soft reset, 3 - hard reset. 4 - clear RAM except zx pages
LD C,#FD ; ­®¬¥à ä㭪樨
RST ToBIOS ; CF -> äã­ªæ¨ï ­¥ ¨á¯®«­¥­ , ¢®§¬®¦­ë¥ ¯à¨ç¨­ë:
; - ­¥ª®à४⭮¥ §­ ç¥­¨¥ res_type
; - ®¤­  ¨§ ZX áâà ­¨æ § ­ïâ  (¯à¨ res_type=4),
; ⮣¤  ¯®¤ zx ®â¤ áâáï ⮫쪮 ç áâì áâà ­¨æ
; - áâ à ï ¢¥àá¨ï BIOS
;
;[x]
FN_SYNC: ; ãáâ ­®¢ª  ᨭåà®­¨§ æ¨¨, ®ç¨á⪠ ०¨¬  íªà ­ , ãáâ ­®¢ª  § ¤¥à¦¥ª
; äã­ªæ¨ï ¬®¦¥â ¡ëâì ®â­¥á¥­  ¨ ª £à㯯¥ ä㭪権
; ¢ë¢®¤  ­  íªà ­, â ª ª ª ¯®«­®áâìî ®ç¨é ¥â
; áâà ­¨æë ०¨¬  íªà ­ . <20>  ¢á¥¬ íªà ­¥ ®áâ ¥âáï
; ⮫쪮 ¡®à¤îà
LD A,sync_mode ; ०¨¬ ᨭåà®­¨§ æ¨¨
; Reg A bit7 = 0 - ०¨¬ ®ç¨á⪨ íªà ­  ¨ ãáâ ­®¢ª¨ INT:
; A = 0: ०¨¬ ¯® 㬮«ç ­¨î - ¨á¯®«ì§ã¥âáï ¤«ï ®ç¨á⪨
; áâà ­¨æ ०¨¬  (®âª«î祭¨ï ¢ë¢®¤  ¢á¥å ®ª®­)
; A = 1: ०¨¬ Scorpion - 312 áâப ¢ íªà ­¥,
; ¯®«®¦¥­¨¥ INT- , ª ª ¢ Scorpion-256
; A = 2: ०¨¬ Pentagon - 320 áâப ¢ íªà ­¥,
; ¯®«®¦¥­¨¥ INT-a ª ª ¢ Pentagon-128
; A = 3: ०¨¬ Spectrum
; ¯®«®¦¥­¨¥ INT-a ª ª ¢ ®à¨£¨­ «ì­®¬ ZX Spectrum
; A = 4: ãáâ ­®¢ª  INT ¨§ ­ áâ஥ª ¯®«ì§®¢ â¥«ï ¢ CMOS
; A = 5: ãáâ ­®¢ª  INT ¨§ â ¡«¨æë ¯®«ì§®¢ â¥«ï
; 㪠§ â¥«ì ¢ IX, ¤ ­­ë¥ ¢ SLOT1..2
;
; Reg A bit7 = 1 - ०¨¬ ãáâ ­®¢ª¨ ¢¥à⨪ «ì­®© ᨭåà®­¨§ æ¨¨ ¨/¨«¨ wait:
; bit1,bit0:
; %00 - ᨭåà  ¢ëáâ ¢«ï¥âáï ¨§ á¨á⥬­®© ¯¥à¥¬¥­­®©
; %01 - ᨭåà  ¢ëáâ ¢«ï¥âáï ¨§ CMOS
; %10 - ᨭåà  320 lines 49 Hz
; %11 - ᨭåà  312 lines 50 Hz
; bit2:
; %0 - ¨£­®à¨à®¢ âì bit1..bit0
; %1 - ­¥ ¨£­®à¨à®¢ âì bit1..bit0
; bit3:
; %0 - no waits (port all_mode bit2 set)
; %1 - original waits (port all_mode bit2 res)
; bit4:
; %0 - ¨£­®à¨à®¢ âì bit3
; %1 - ­¥ ¨£­®à¨à®¢ âì bit3
; bit5,bit6 - reserved ;!TODO use for HOLD port?
;
LD C,#F2 ; <20>®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ­¥¢¥à­ë© ­®¬¥à ०¨¬  ᨭåà®­¨§ æ¨¨
; ¨§¬¥­¥­¨¥ ०¨¬  ᨭåà®­¨§ æ¨¨ ¬®¦¥â ¯à¨¢¥á⨠ª ¢à¥¬¥­­®¬ã á¡®î
; ᨭåà®­¨§ æ¨¨ ¬®­¨â®à .
; !TODO ¯®¤à®¡­®¥ ®¯¨á ­¨¥
DCP_CONFIG: ; [x] äã­ªæ¨ï ã¯à ¢«¥­¨ï ¤¥è¨äà â®à®¬ ¯®à⮢.
;A - ¥á«¨ ­®«ì, â® ¢ë§®¢ ä㭪樨 ¯¥à¥¨­¨æ¨ «¨§ æ¨¨ ¯®à⮢ PORTS_INIT
;HL -  ¤à¥á
;DE - ¬ áª  - 0 ¨§¬¥­ï¥¬ë¥ ¡¨âë, 1 ­¥¨§¬¥­ï¥¬ë¥
;B - ¯®àâ
;C - #F4 ­®¬¥à ä㭪樨
; ”ã­ªæ¨ï ¯®§¢®«ï¥â ®âªà뢠âì/§ ªà뢠âì ¤®¯®«­¨â¥«ì­ë¥ ¯®àâë ª®¬¯ìîâ¥à .
;
; ”㭪樨 SET_PORTS ¨ READ_PORTS ¯®§¢®«ïîâ ¨¬¥âì ¤®áâã¯
; ª «î¡ë¬ ¯®àâ ¬ ª®¬¯ìîâ¥à  ­¥§ ¢¨á¨¬® ®â ⮣®, ®âªàëâë ®­¨ ¨«¨ ­¥â.
; ¯®¬®éìî íâ¨å ä㭪権 ¢®§¬®¦­® ¯à®ç¨â âì ᮤ¥à¦¨¬®¥ ¯®à⮢ 1FFD ¨
; 7FFD, ­ ¯à¨¬¥à,   â ª ¦¥ ãáâ ­®¢¨âì ­ã¦­ë¥ §­ ç¥­¨ï ¢ § ªàëâë¥ á¨á⥬­ë¥
; ¯®àâë. <20>®àâë User-  ¯®§¢®«ïâ í¬ã«¨à®¢ âì ­¥ª®â®àë¥ ãáâனá⢠,
; ®âáãâáâ¢ãî騥 ¢ ‘¯à¨­â¥à¥,   â ª ¦¥ ¬®£ãâ ¤ âì ®á®¡ë© á¯®á®¡
; ¯¥à¥¤ ç¨ ¤ ­­ëå ¬¥¦¤ã ¯à®£à ¬¬ ¬¨, ¬¨­ãï Ž‡“.
;
SET_PORTS: ; £«®¡ «ì­ ï ãáâ ­®¢ª  ¯®à⮢.
LD A,port_num ; ¢­ãâ७­¨© ­®¬¥à ¯®àâ 
; F0..FF - áâà ­¨æë Scorpion 0..15, ¯®¤ª«îç ¥¬ë¥ ¢
;  ¤à¥á #C000, áâà ­¨æ  ¨¬¥­­® â , ª®â®à ï
; ¯®¤ª«î祭  ¢ ¤ ­­ë© ¬®¬¥­â ç¥à¥§ 7FFD,1FFD
; E0=EXPANSION, …1=TR-DOS, E2=BASIC-128, E3=BASIC-48
; E4=EXPANSION',…5=TR-DOS',E6=BASIC-128',E7=BASIC-48'
; E8=RAM0, E9=RAM1, EA=RAM2, EB=SYS0, EC=CASH
; ED,EE - reserv, EF=SYS1
; C0=COPY_1FFD, C1=COPY_7FFD, C2=COPY_BRD, C3-reserv
; C4-reserv, C5=COPY_V_MODE, C6=COPY_SYS, C7-reserv
; C8..CF -  «ìâ¥à­ â¨¢­ë© ­ ¡®à ¤«ï C0..C7
; D0..DF-reserv - ¤®¯. áâà ­¨æë ¤«ï Pentagon-512
; 80..BF-user_ports!
; 00..7F-¢­¥è­¨¥ ¯®àâë, ¨á¯®«ì§®¢ âì ­¥ ४®¬¥­¤ã¥âáï
LD B,port_data ; ¤ ­­ë¥, § ¯¨á뢠¥¬ë¥ ¢® ¢­ãâ७­¨© ¯®àâ
LD C,#F8 ; ­®¬¥à ä㭪樨
RST ToBIOS ; B - ¯à¥¤ë¤ã饥 ᮤ¥à¦ ­¨¥ ¯®àâ 
;
; [x] 26/01/2024 ¤®¡ ¢«¥­ .
READ_PORTS: ; £«®¡ «ì­®¥ ç⥭¨¥ ¯®à⮢
LD A,port_num ; ¢­ãâ७­¨© ­®¬¥à ¯®àâ 
LD C,#F9 ; ­®¬¥à ä㭪樨
RST ToBIOS ; B - ᮤ¥à¦ ­¨¥ ¯®àâ 
;
; [x] 26/01/2024 ¯à®æ¥¤ãà  ¤ã¡«¨àã¥â ä㭪樮­ « SET_PORTS. “¡à ­ .
;WRITE_PORTS: ; £«®¡ «ì­ ï § ¯¨áì ¯®à⮢
; LD A,port_num ; ¢­ãâ७­¨© ­®¬¥à ¯®àâ 
; LD B,data_port ; § ¯¨á뢠¥¬ë¥ ¤ ­­ë¥
; LD C,#FA ; ­®¬¥à ä㭪樨
; RST ToBIOS ;
;;;
CMOS_RD: ; ç¨â âì ¨§ ॣ¨áâà  CMOS
LD D,cmos_reg ; ­®¬¥à ॣ¨áâà  CMOS
LD C,#F6 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC - ç áë ¥áâì
; CF - ç á®¢ ­¥â
; A - §­ ç¥­¨¥ ï祩ª¨
;
CMOS_WR: ; ¯¨á âì ¢ ॣ¨áâà CMOS
LD D,cmos_reg ; ­®¬¥à ॣ¨áâà  CMOS
LD A,Value ; §­ ç¥­¨¥
LD C,#F7 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC - ç áë ¥áâì
; CF - ç á®¢ ­¥â
; ”㭪樨 CMOS_RD,CMOS_WR à ¡®â î⠢ᥣ¤ . …᫨ ¢ ¬ è¨­¥ ­¥â ¬¨ªà®á奬ë CMOS,
; ®­  í¬ã«¨àã¥âáï. <20> «¨ç¨¥ ¬¨ªà®áå¥¬ë ®¯à¥¤¥«ï¥âáï ä㭪樥© CMOS_TEST.
;
CMOS_TEST: ; ¯à®¢¥à¨âì ­ «¨ç¨¥ CMOS
LD C,#F5 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC - ç áë ¥áâì
; CF - ç á®¢ ­¥â
;
FN_TURBO: ; äã­ªæ¨ï ã¯à ¢«¥­¨ï âãà¡® ०¨¬®¬ ¨ ¯«®â­®áâìî ƒ93
LD A,turbo_mode; ०¨¬ âãà¡®: 2 - off, 3 - on
; ¯«®â­®áâì ƒ93: 18 - 720, 19 - 1440
LD C,#8F ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ¨á¯®«­¥­¨¥
; CF -> ­¥¢¥à­ë© ०¨¬ âãà¡®
; * ¯¥à¥ª«î祭¨¥ ०¨¬  âãà¡® ¬®¦¥â ­¥ ¯à®¨§®©â¨, ¥á«¨ ¯à®è¨¢ª  ­¥
; ¯®¤¤¥à¦¨¢ ¥â íâ® ¯¥à¥ª«î祭¨¥. <20>ਠí⮬ ®è¨¡ª¨ ­¥ ¯à®¨á室¨â.
;
;==============================================================================
; 5. ”㭪樨 ¯¥ç â¨ ¨ ã¯à ¢«¥­¨ï ०¨¬®¬ íªà ­ .
;==============================================================================
;!TODO ƒà ä¨ç¥áª¨¥ ä㭪樨
;-----------------------;
;PIC_FN0 ; #A0 ŽŠ<E28099>ˆ… ŽŠ<C5BD>
;PIC_FN1 ; #A1 ‚›‚…‘’ˆ ’Ž—Š“
;PIC_FN2 ; #A2 ‚›‚Ž„ ˆ<E280B9>ˆˆ COPY
;PIC_FN3 ; #A3 ‚›‚Ž„ ˆ<E280B9>ˆˆ FILL
;PIC_FN4 ; #A4 ‚›‚Ž„ <20>ˆ<CB86> ;!FIXIT ãáâ ­®¢ª  ¯ «¨âàë
;PIC_FN5 ; #A5 “<E28099>ŽŠ€ SCREEN_SWITCH
;PIC_FN6 ; #A6 A - page_pal, E - ­®¬¥à ¯ «¨âàë, B - ⨯ ¯ «¨âàë
;PIC_FN7 ; #A7 <20>¨á®¢ ­¨¥ «¨­¨¨ ®¤­®£® 梥â 
;PIC_FN8 ; #A8 <20>¨á®¢ ­¨¥ à §­®æ¢¥â­®© «¨­¨¨
;-----------------------;
WIN_OPEN: ; äã­ªæ¨ï ®âªàëâ¨ï ®ª­ .
LD IX,win_descriptor ; ®¯¨á â¥«ì ®ª­ 
; IX - 32-å¡ ©â®¢ë© ®¯¨á â¥«ì ®ª­ 
; (IX+0) - £®à¨§®­â «ì­ë© à §¬¥à ®ª­  ¢ §­ ª®¬¥áâ å
; (IX+1) - ¢¥à⨪ «ì­ë© à §¬¥à ¢ §­ ª®¬¥áâ å
; (IX+2) - ¯®«®¦¥­¨¥ ®ª­  ¯® £®à¨§®­â «¨ ­  íªà ­¥
; (IX+3) - ¯®«®¦¥­¨¥ ®ª­  ¯® ¢¥à⨪ «¨ ­  íªà ­¥
; (IX+4) - ०¨¬ §­ ª®¬¥áâ 
; bit4=1 - text_mode bit4=0 - graf_mode
; bit5=0 - 16, bit5=1 - 8 â®ç¥ª ¢ §­ ª®¬¥áâ¥
; graf_mode
; bit7..6 - ­®¬¥à ¯ «¨âàë
; bit3..0 - ­¥ áãé¥á⢥­­ë
; text_mode
; bit7..6,3..0 - ­®¬¥à §­ ª®£¥­¥à â®à 
; ¨áª«î祭¨¥: bit7..6=B"11" -> ¡®à¤¥à
; (IX+5) - ¤®¯®«­¨â¥«ì­ë© ०¨¬ §­ ª®¬¥áâ 
; bit0=1 - 㪠§ë¢ ¥â ­  ¢ª«î祭¨¥ ᯥªâà㬮¢áª®©
;  ¤à¥á æ¨¨ íªà ­ 
; (IX+6) - ¯®«®¦¥­¨¥ ¯® X ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ ¬)
; (IX+7) - ¯®«®¦¥­¨¥ ¯® Y ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ ¬)
; à §êïá­¥­¨ï ® ¯®«®¦¥­¨¨ ¢ ¯®«¥ £à ä¨ª¨ - ­¨¦¥
; (IX+8..31) - § à¥§¥à¢¨à®¢ ­® (¯¥à¥¬¥­­ë¥ ®ª­ )
LD E,win_flag ; ä« £¨ ®ª­ :
; ¡¨â 0 - 㪠§ë¢ ¥â ª ªãî áâà ­¨æã ०¨¬  ¢ª«îç âì
; ¯®á«¥ ¨á¯®«­¥­¨ï ä㭪樨. bit0=0 - íªà ­ 0, bit0=1 - íªà ­ 1
; ¡¨â 4 - 㪠§ë¢ ¥â ­  ª ª®© áâà ­¨æ¥ ०¨¬ 
; ®âªà뢠âì ®ª­®. bit4=1 - íªà ­ 0, bit4=0 - íªà ­ 1
;LD HL,win_place ; HL - ¬¥áâ® ­  íªà ­¥ ¯® §­ ª®¬¥áâ ¬ (ª®¯¨ï ¢ IX+2,3),
; ¢ ­®¢ëå ¢¥àá¨ïå ¡¨®á  §­ ç¥­¨¥ HL ­¥ áãé¥á⢥­­®
LD C,#B0 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> A - ­®¬¥à ®ª­ 
; CF -> ®è¨¡ª  ᫨誮¬ ¬­®£® ®ª®­
LD (id_win),A ; á®åà ­¨âì ¨¤¥­â¨ä¨ª â®à ®ª­ 
; * <20>ਠ®âªàë⨨ ®ª­  ®¯¨á â¥«ì ª®¯¨àã¥âáï ¢ á¨á⥬­ãî áâà ­¨æã އ“ ¨
; ¯à®£à ¬¬  ¬®¦¥â ­¥ á®åà ­ïâì ¥£®.
; ** ¤ ­­ë© ¬®¬¥­â ¨¤¥­â¨ä¨ª â®à ®ª­  ¢á¥£¤  à ¢¥­ 0
; ‚¨¤¥®-އ“ ‘¯à¨­â¥à  ¬®¦­® ¯à¥¤áâ ¢¨âì ª ª ®¤­® ᯫ®è­®¥ ¯®«¥ £à ä¨ª¨
; à §¬¥à®¬ 1024 â®çª¨ ¯® £®à¨§®­â «¨ ­  256 â®ç¥ª ¯® ¢¥à⨪ «¨
; <20>®«®¦¥­¨¥ ¢ ¯®«¥ £à ä¨ª¨ ¯®ª §ë¢ ¥â £¤¥ ¡ã¤¥â ­ å®¤¨âìáï ¢ í⮬ ¯®«¥
; ¢¥àå­¨© «¥¢ë© 㣮« ®ª­ . <20>®«®¦¥­¨¥ ¨áç¨á«ï¥âáï ¢ §­ ª®¬¥áâ å. .¥.
; …᫨ 㪠§ ­® ¯®«®¦¥­¨¥ ¯® X - 2, ¯® Y - 6, íâ® ®§­ ç ¥â, çâ® ¢¥àå­¨© 㣮«
; ®ª­  ¡ã¤¥â à á¯®«®¦¥­ ¯® ª®®à¤¨­ â ¬ X=16, Y=48 ¢ ¯®«¥ £à ä¨ª¨ ¢¨¤¥®-އ“
; ’ ª¨¬ ®¡à §®¬, ¥á«¨, ­ ¯à¨¬¥à, ®âªàëâì ¤¢  ®ª­  ¢ à §­ëå ¬¥áâ å, ­® á
; ®¤¨­ ª®¢ë¬¨ ª®®à¤¨­ â ¬¨ ¢ ¯®«¥ £à ä¨ª¨, ­  íªà ­¥ ®ª ¦ãâáï ¤¢ 
; ¨¤¥­â¨ç­ëå ®ª­ , ¤ ­­ë¥ ¢ ª®â®àë¥ ¡ã¤ãâ ¯®¯ ¤ âì ®¤­®¢à¥¬¥­­®.
; ‡­ ª®£¥­¥à â®àë ⥪á⮢ëå ०¨¬®¢ â ª ¦¥ à á¯®« £ îâáï ¢ ¢¨¤¥®-އ“ ¨
; ¨¬¥îâ ª®­ªà¥â­ë¥  ¤à¥á  ¢ ¯®«¥ £à ä¨ª¨. <20>ਠ­¥®¡å®¤¨¬®á⨠¨¬¥âì ­  íªà ­¥
; ª ª £à ä¨ç¥áª®¥, â ª ¨ ⥪á⮢®¥ ¨§®¡à ¦¥­¨¥ ­ ¤® á«¥¤¨âì, çâ® ¡ë
; ¤ ­­ë¥ £à ä¨ç¥áª¨å ®ª®­ ­¥ ¯®¯ ¤ «¨ ¢ ¯®«¥ £à ä¨ª¨, £¤¥ à á¯®«®¦¥­ë
; §­ ª®£¥­¥à â®àë
; <20>ਠ¨á¯®«ì§®¢ ­¨¨ ª ª®£® «¨¡® §­ ª®£¥­¥à â®à , ®­ § ­¨¬ ¥â ç áâì ¯®«ï
; £à ä¨ª¨ ¯® ª®®à¤¨­ â ¬
; (ª®®à¤¨­ âë ¢ §­ ª®¬¥áâ å, â.¥. ¢ §­ ç¥­¨ïå ¡ ©â  IX+6 ®¯¨á â¥«ï ®ª­ )
; X = (8 * ( bit3..0 ०¨¬  ))..(8 * ( bit3..0 ०¨¬  ) + 7)
; <20>® Y § ­¨¬ îâáï ¢á¥ ¯®«®¦¥­¨ï.
; ’ ª¨¬ ®¡à §®¬, ¯à¨ ¨á¯®«ì§®¢ ­¨¨ ­¥áª®«ìª¨å §­ ª®£¥­¥à â®à®¢ á­ ç « 
; á«¥¤ã¥â ¨á¯®«ì§®¢ âì §­ ª®£¥­¥à â®àë á ­®¬¥à ¬¨ ¬¥­ïî騬¨áï ¢ Bit7..6,
; â ª ª ª ®­¨ ¯®¯ ¤ îâ ¢ ®¤­¨ ¨ ⥠¦¥ ª®®à¤¨­ âë ¯®«ï £à ä¨ª¨
; <20>ਠ®âªàë⨨ £à ä¨ç¥áª¨å ®ª®­ á«¥¤ã¥â ¯®¬­¨âì, çâ® ¢ íâ®â ¬®¬¥­â
; ¨­ä®à¬ æ¨ï ⥪á⮢®£® íªà ­  ­ å®¤ïé ïáï ¢ í⮬ ¬¥á⥠¡ã¤¥â ãâ¥àï­ .
; <20>ਠ®âªàë⨨ ⥪á⮢®£® ®ª­  ¨§¬¥­ï¥âáï ¨­ä®à¬ æ¨ï ⮫쪮 ¢ ¯®«¥ £à ä¨ª¨
; §­ ª®£¥­¥à â®à  ᮮ⢥âáâ¢ãî饬ã í⮬ã ⥪á⢮¢®¬ã íªà ­ã. …᫨ íâ 
; ¨­ä®à¬ æ¨ï ¨ ¨­ä®à¬ æ¨ï £à ä¨ç¥áª®£® ®ª­  ­¥ ¯¥à¥á¥ª «¨áì, â® ¯à¨
; ¯®¢â®à­®¬ ®âªàë⨨ £à ä¨ç¥áª®£® íªà ­ , ­  ­¥¬  ¢â®¬ â¨ç¥áª¨
; ¢®ááâ ­®¢¨âáï £à ä¨ç¥áª ï ª à⨭ª 
;
WIN_CLOSE: ; § ªàë⨥ ®ª­ 
LD A,(id_win) ; ¨¤¥­â¨ä¨ª â®à ®ª­  (¯®ª  ¤®«¦¥­ ¡ëâì 0)
LD C,#B1 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ãᯥ譮¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª  - ­¥¢¥à­ë© ¨¤¥­â¨ä¨ª â®à
; Žª­® á ­®¬¥à®¬ 0 ­¨ª®£¤  ­¥ § ªà뢠¥âáï ¨ ¯®¯ë⪠
; § ªàëâ¨ï ¯à¨¢®¤¨â ª ®è¨¡ª¥
LP_OPEN_S: ; Žâªàë⨥ áâ ­¤ àâ­ëå ®ª®­.
LD E,win_flag ; ä« £¨ ®ª­ 
; bit 0 ®¯à¥¤¥«ï¥â áâà ­¨æã ०¨¬ , ª®â®à ï ¡ã¤¥â
; ®âªàëâ  ¯®á«¥ ¨á¯®«­¥­¨ï ä㭪樨
LD B,win_type ; ⨯ ®âªà뢠¥¬®£® ®ª­ :
; 0 - ᯥªâà㬮¢áª®¥ ®ª­® 32x24
; 1 - ⥪á⮢®¥ ®ª­® 64x24
; 2 - ⥪á⮢®¥ ®ª­® 40x32
; 3 - ⥪á⮢®¥ ®ª­® 80x32
; 4 - ᯥªâà㬮¢áª®¥ ®ª­®, HL - ¯®«®¦¥­¨¥ ®ª­ 
; 5 - ⥪á⮢®¥ ®ª­® 64x24, HL - ¯®«®¦¥­¨¥ ®ª­ 
; 6 - ⥪á⮢®¥ ®ª­® 40x32, HL - ¯®«®¦¥­¨¥ ®ª­ 
; 7 - ⥪á⮢®¥ ®ª­® 80x32, HL - ¯®«®¦¥­¨¥ ®ª­ 
; 8 - £à ä¨ç¥áª®¥ ®ª­® 0, HL - ¯®«®¦¥­¨¥ ®ª­ 
; 9 - £à ä¨ç¥áª®¥ ®ª­® 1, HL - ¯®«®¦¥­¨¥ ®ª­ 
LD HL,win_place; ¯®«®¦¥­¨¥ ®ª­  ¤«ï 4..9 ⨯®¢
LD C,#80 ; ­®¬¥à ä㭪樨
RST ToBIOS ; ¢ë¯®«­¨âì äã­ªæ¨î
; ** ”ã­ªæ¨ï áâ à ï, ¨á¯®«ì§®¢ âì ­¥ ४®¬¥­¤ã¥âáï.
; „ «¥¥, ¢ äã­ªæ¨ïå § ¯®¬¨­ ­¨ï, ¢®ááâ ­®¢«¥­¨ï, ¯¥à¥¬¥é¥­¨ï ¨ áâ¨à ­¨ï
; ¯®¤à §ã¬¥¢ îâáï «®ª «ì­ë¥ ®ª­  ¢ á¬ëá«¥ "®ª­® ¢ ®ª­¥". ˆ¤¥­â¨ä¨ª â®à ®ª­ 
; ®â­®á¨âáï ª £«®¡ «ì­®¬ã ®ª­ã, ®â­¨á¨â¥«ì­® ª®â®à®£®  ¤à¥áãîâáï «®ª «ì­ë¥
;
WIN_COPY: ; ª®¯¨à®¢ ­¨¥ ¤ ­­ëå ⥪á⮢®£® ®ª­  ¢ ¯ ¬ïâì
; § ¯®¬¨­ ­¨¥ ®ª­ 
LD A,(id_win) ; ¨¤¥­â¨ä¨ª â®à £«®¡ «ì­®£® ®ª­  (¯®ª  ¤®«¦¥­ ¡ëâì 0)
LD H,ver_size ; HL - à §¬¥à «®ª «ì­®£® ®ª­  ¢¥à⨪ «ì/£®à¨§®­â «ì
LD L,hor_size ; à §¬¥à ¢ ᨬ¢®« å
LD D,ver_place ; DE - ¯®«®¦¥­¨¥ «®ª «ì­®£® ®ª­  ¢ £«®¡ «ì­®¬ ®ª­¥
LD E,hor_place ; ¯®«®¦¥­¨¥ ¯® £®à¨§®­â «¨ ¢ ᨬ¢®« å
LD IX,bufer ;  ¤à¥á ¡ãä¥à  ¤«ï § ¯®¬¨­ ­¨ï ¤ ­­ëå «®ª «ì­®£® ®ª­ . (¤«ï ०¨¨¬  80x32)
LD B,bufer_page; áâà ­¨æ  ¡ãä¥à  ¤ ­­ëå ®ª­  (⮫쪮 SLOT3 ¨«¨ SLOT2)
;  ¤à¥á ¡ãä¥à  㪠§ë¢ ¥âáï ¤«ï ®ª­  #C000
; ¥á«¨  ¤à¥á 㪠§ ­ á #8000, ­®¬¥à áâà ­¨æë ¡ãä¥à 
; ­¥ ¤¥©á⢨⥫¥­
LD C,#B2 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª  - ­¥¢¥à­ë© ¨¤¥­â¨ä¨ª â®à ®ª­ 
; ¯à¨ à ¡®â¥ í⮩ ä㭪樨 ç¥à¥§ RST #18 ¨«¨ RST 8, ®¡ï§ â¥«ì­  ãáâ ­®¢ª 
; DI, â ª ª ª äã­ªæ¨ï ¯®«ì§ã¥âáï á⥪®¬ ¤«ï ã᪮७¨ï ᢮¥© à ¡®âë.
;
WIN_RESTORE: ; ª®¯¨à®¢ ­¨¥ ¤ ­­ëå ¨§ ¯ ¬ï⨠¢ ⥪á⮢®¥ ®ª­®
; ¢®ááâ ­®¢«¥­¨¥ ®ª­ 
LD A,(id_win) ; ¨¤¥­â¨ä¨ª â®à £«®¡ «ì­®£® ®ª­  (¯®ª  ¤®«¦¥­ ¡ëâì 0)
LD H,ver_size ; HL - à §¬¥à «®ª «ì­®£® ®ª­  ¢¥à⨪ «ì/£®à¨§®­â «ì
LD L,hor_size ; à §¬¥à ¢ ᨬ¢®« å
LD D,ver_place ; DE - ¯®«®¦¥­¨¥ «®ª «ì­®£® ®ª­ 
LD E,hor_place ; ¯®«®¦¥­¨¥ ¯® £®à¨§®­â «¨ ¢ ᨬ¢®« å
LD IX,bufer ;  ¤à¥á ¡ãä¥à  ¤ ­­ëå ¤«ï «®ª «ì­®£® ®ª­ 
LD B,bufer_page; áâà ­¨æ  ¡ãä¥à  ¤ ­­ëå ®ª­  (⮫쪮 SLOT3 ¨«¨ SLOT2)
;  ¤à¥á ¡ãä¥à  㪠§ë¢ ¥âáï ¤«ï ®ª­  #C000
; ¥á«¨  ¤à¥á 㪠§ ­ á #8000, ­®¬¥à áâà ­¨æë ¡ãä¥à 
; ­¥ ¤¥©á⢨⥫¥­.
LD C,#B3 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª  - ­¥¢¥à­ë© ¨¤¥­â¨ä¨ª â®à ®ª­ 
; ¯à¨ à ¡®â¥ í⮩ ä㭪樨 ç¥à¥§ RST #18 ¨«¨ RST 8, ®¡ï§ â¥«ì­  ãáâ ­®¢ª 
; DI, â ª ª ª äã­ªæ¨ï ¯®«ì§ã¥âáï á⥪®¬ ¤«ï ã᪮७¨ï à ¡®âë.
; „ ­­ë¥ ¤«ï ä㭪権 WIN_COPY_WIN ¨ WIN_RESTORE_WIN ¨¬¥îâ ®¤¨­ ª®¢ãî
; áâàãªâãàã ¤ ­­ë© ¬®¬¥­â íâ  áâàãªâãà  ¯®å®¦  ­  áâàãªâãàã ⥪á⮢®£®
; íªà ­  IBM, â.¥. ¤ ­­ë¥ ¨¤ãâ ¢ ä®à¬ â¥ sym1,atr1,sym2,atr2,.. ᯫ®è­ë¬
; ¬ áᨢ®¬. ‘­ ç «  ¤ ­­ë¥ ¤«ï ¯¥à¢®© áâப¨, § â¥¬ áà §ã ¤«ï ¢â®à®© ¨ â.¤.
WIN_GET_SYM: ; ¢§ïâì ᨬ¢®« á íªà ­ 
LD A,(id_win) ; ¨¤¥­â¨ä¨ª â®à ®ª­  (¯®ª  ¤®«¦¥­ ¡ëâì 0)
LD DE,place ; ¯®«®¦¥­¨¥ ᨬ¢®« : D - ¢¥à⨪ «ì, E - £®à¨§®­â «ì
LD C,#B4 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; L - ᨬ¢®«, H -  âਡãâ, B - §­ ª®£¥­¥à â®à
; CF -> ®è¨¡ª  ­¥¢¥à­ë© ¨¤¥­â¨ä¨ª â®à ®ª­ 
;
WIN_PUT_SYM: ; ¯®«®¦¨âì ᨬ¢®« ­  íªà ­
LD A,(id_win) ; ¨¤¥­â¨ä¨ª â®à ®ª­  (¯®ª  ¤®«¦¥­ ¡ëâì 0)
LD DE,place ; ¯®«®¦¥­¨¥ ᨬ¢®« : D - ¢¥à⨪ «ì, E - £®à¨§®­â «ì
LD B,sym_zg ; §­ ª®£¥­¥à â®à
LD L,symbol ; ᨬ¢®«
LD H,atribute ;  âਡãâ ᨬ¢®« 
LD C,#B5 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª  ­¥¢¥à­ë© ¨¤¥­â¨ä¨ª â®à ®ª­ 
;
;
WIN_GET_ZG: ; ¯®«ãç¨âì §­ ª®£¥­¥à â®à
LD DE,zg_buff ; 㪠§ â¥«ì ­  2Kb ¡ãä¥à ¤«ï §­ ª®£¥­¥à â®à 
LD C,#B8 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> § ¢¥à襭¨¥
;
;
WIN_SET_ZG: ; ãáâ ­®¢ª  §­ ª®£¥­¥à â®à 
LD A,sym_zg ; á¨á⥬­ë© ­®¬¥à §­ ª®£¥­¥à â®à 
LD DE,zg_form ; 㪠§ â¥«ì ­  2Kb ¤ ­­ëå §­ ª®£¥­¥à â®à 
; „ ­­ë¥ §­ ª®£¥­¥à â®à  ¤®«¦­ë à á¯®« £ âìáï ¢ â ª®¬ ¢¨¤¥, ¢ ª ª®¬ ®­¨
; ¢ë£«ï¤¥«¨ ¡ë ª ª ­ ¡®à ᨬ¢®«®¢ ­  ᯥªâà㬮¢áª®¬ íªà ­¥ ¯à¨ ¯¥à¥­®á¥ 2Kb
; LDIR-om ¢  ¤à¥á #4000
; * ¡ã¤ã饬 ¢®§¬®¦­® ¨§¬¥­¥­¨¥ í⮣® à á¯®«®¦¥­¨ï ­  ®¡ëç­®¥
LD C,#B6 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> § ¢¥à襭¨¥
; CF -> ®è¨¡ª  (áâ à ï ¢¥àá¨ï, ­¥â ä㭪樨)
;
WIN_MOVE: ; ¯¥à¥¬¥é¥­¨¥ ®ª­  (‚­¨¬ ­¨¥! ¨á¯®«ì§ã¥â ª ª ¡ãä¥à áâà ­¨æã #FF)
LD A,(id_win) ; ¨¤¥­â¨ä¨ª â®à £«®¡ «ì­®£® ®ª­  (¯®ª  ¤®«¦¥­ ¡ëâì 0)
LD H,ver_size ; HL - à §¬¥à «®ª «ì­®£® ®ª­  ¢¥à⨪ «ì/£®à¨§®­â «ì
LD L,hor_size ; à §¬¥à ¢ ᨬ¢®« å
LD D,ver_place ; DE - ¯®«®¦¥­¨¥ «®ª «ì­®£® ®ª­ 
LD E,hor_place ; ¯®«®¦¥­¨¥ ¯® £®à¨§®­â «¨ ¢ ᨬ¢®« å
LD IX,new_place; ­®¢®¥ ¯®«®¦¥­¨¥ «®ª «ì­®£® ®ª­ 
LD C,#B7 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª  - ­¥¢¥à­ë© ¨¤¥­â¨ä¨ª â®à ®ª­ 
; ¯à¨ à ¡®â¥ í⮩ ä㭪樨 ç¥à¥§ RST #18 ¨«¨ RST 8, ®¡ï§ â¥«ì­  ãáâ ­®¢ª 
; DI, â ª ª ª äã­ªæ¨ï ¯®«ì§ã¥âáï á⥪®¬ ¤«ï ã᪮७¨ï à ¡®âë.
; „ ««¥¥ á«¥¤ãîâ ä㭪樨 ¯¥ç â¨ ¤«ï à ¡®âë á _⥪ã騬_ £«®¡ «ì­ë¬ ®ª­®¬.
; ¤ ­­ë© ¬®¬¥­â ⥪ã騬 ¢á¥£¤  ï¥âáï ¯®á«¥¤­¥¥ ®âªàë⮥ ®ª­®
; <20>  £à ä¨ç¥áª®¬ íªà ­¥ äã­ªæ¨ï ­¥ à ¡®â ¥â
;
LP_PRINT_ALL: ; ¯¥ç âì ᨬ¢®«®¢ á  âਡã⮬
LD A,symbol ; ᨬ¢®«
LD E,atribute ;  âਡãâ
LD B,num_sym ; ç¨á«® ¢ë¢®¤¨¬ëå ᨬ¢®«®¢
LD C,#81 ; ­®¬¥à ä㭪樨
RST ToBIOS ; ­  íªà ­ ¢ë¢®¤¨âáï áâப  ¨§ B ®¤¨­ ª®¢ëå
; ᨬ¢®«®¢
; ॣ¨áâàë HL,IX - á®åà ­ïîâáï
;
LP_PRINT_SYM: ; ‚뢮¤ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣®
; §­ ª®¬¥áâ  ¡¥§  âਡãâ 
LD A,symbol ; ᨬ¢®«
LD B,num_sym ; ç¨á«® ¢ë¢®¤¨¬ëå ᨬ¢®«®¢
LD C,#82 ; ­®¬¥à ä㭪樨
RST ToBIOS ; ­  íªà ­ ¢ë¢®¤¨âáï áâப  ¨§ B ®¤¨­ ª®¢ëå ᨬ¢®«®¢
;  âਡãâ ®áâ ¥âáï â®â, ª®â®àë© ¡ë« ­  íªà ­¥
; ॣ¨áâàë HL,IX - á®åà ­ïîâáï
;
LP_PRINT_ATR: ; ¯¥ç âì  âਡã⮢
LD E,atribute ;  âਡãâ
LD B,num_sym ; ç¨á«® ¢ë¢®¤¨¬ëå ᨬ¢®«®¢
LD C,#83 ; ­®¬¥à ä㭪樨
RST ToBIOS ; ­  íªà ­ ¢ë¢®¤¨âáï áâப  ¨§ B ®¤¨­ ª®¢ëå
;  âਡã⮢. ‘¨¬¢®«ë ­¥ ¬¥­ïîâáï.
; ॣ¨áâàë HL,IX - á®åà ­ïîâáï
;
LP_SET_PLACE: ; “áâ ­®¢ª  ⥪ã饣® §­ ª®¬¥áâ  ¢ ®ª­¥
LD E,hor_place ; ­®¬¥à ᨬ¢®«  ¯® £®à¨§®­â «¨
LD D,ver_place ; ­®¬¥à ᨬ¢®«  ¯® ¢¥à⨪ «¨
; ** <20>ॢë襭¨¥ £à ­¨æ ¯à¨¢®¤¨â ­¥ ª ®è¨¡ª¥,   ª
; ¯¥à¥ãáâ ­®¢ª¥ á­ ç « , §  ¢ëç¥â®¬ ¯®«­®£®
; à §¬¥à  ®ª­ 
LD C,#84 ; ­®¬¥à ä㭪樨
RST ToBIOS ; ¯®§¨æ¨ï ¯¥ç â¨ ãáâ ­ ¢«¨¢ ¥âáï ¢ ᮮ⢥âá⨨ á
; ॣ¨áâ஬ DE
; ¯®àâïâáï ⮫쪮  «ìâ¥à­ â¨¢­ë¥ ॣ¨áâàë ¨ â¥,
; çâ® ª ª ¯ à ¬¥âàë ­  ¢å®¤¥
LP_PRINT_LINE: ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣®
; §­ ª®¬¥áâ 
LD HL,line_adr ;  ¤à¥á áâப¨. „®«¦¥­ ¡ëâì ¬¥¦¤ã #4000 ¨ #BFFF
LD E,atribute ;  âਡãâ, á ª®â®àë¬ ¡ã¤¥â ¢ë¢¥¤¥­  áâப 
LD B,num_sym ; ¤«¨­  ¢ë¢®¤¨¬®© áâப¨
LD C,#85 ; ­®¬¥à ä㭪樨
RST ToBIOS ; "¨á¯®«­¥­¨¥ ¦¥« ­¨©"
;
LP_PRINT_LINE2: ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣®
; §­ ª®¬¥áâ  ¡¥§  âਡã⮢
LD HL,line_adr ;  ¤à¥á áâப¨. „®«¦¥­ ¡ëâì ¬¥¦¤ã #4000 ¨ #BFFF
LD B,num_sym ; ¤«¨­  ¢ë¢®¤¨¬®© áâப¨
LD C,#86 ; ­®¬¥à ä㭪樨
RST ToBIOS ; áâப  ¡ã¤¥â ¢ë¢¥¤¥­  ¡¥§ ¨§¬¥­¥­¨ï  âਡã⮢ ¢
; ¬¥á⥠¯¥ç â¨
;
LP_PRINT_LINE3: ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ¤«¨­®© B ­  íªà ­ á ⥪ã饣®
; §­ ª®¬¥áâ  ¤® à §¤¥«¨â¥«ï D. <20>®á«¥ à §¤¥«¨â¥«ï
; ¢ë¢®¤ïâáï ¯à®¡¥«ë çâ® ¡ë ¢ë¢¥á⨠B ᨬ¢®«®¢.
LD HL,line_adr ;  ¤à¥á áâப¨. „®«¦¥­ ¡ëâì ¬¥¦¤ã #4000 ¨ #BFFF
LD E,atribute ;  âਡãâ, á ª®â®àë¬ ¡ã¤¥â ¢ë¢¥¤¥­  áâப 
LD D,delimiter ; à §¤¥«¨â¥«ì
LD B,num_sym ; ¤«¨­  ¢ë¢®¤¨¬®© áâப¨
LD C,#87 ; ­®¬¥à ä㭪樨
RST ToBIOS ; ᨬ¢®«ë ¨§ (HL) ¢ë¢®¤ïâáï ­  íªà ­, ¯®ª  ­¥
; ¢áâà¥â¨âáï ᨬ¢®« à ¢­ë© D, ¤ «¥¥ ¯¥ç â îâáï
; ¯à®¡¥«ë, ª ª ¤®¯®«­¥­¨¥ áâப¨ ¤® B ᨬ¢®«®¢
;
LP_PRINT_LINE4: ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ¤«¨­®© B ­  íªà ­ á ⥪ã饣®
; §­ ª®¬¥áâ  ¤® à §¤¥«¨â¥«ï D. <20>®á«¥ à §¤¥«¨â¥«ï
; ¢ë¢®¤ïâáï ¯à®¡¥«ë çâ® ¡ë ¢ë¢¥á⨠B ᨬ¢®«®¢.
; <20>¥§  âਡã⮢.
LD HL,line_adr ;  ¤à¥á áâப¨. „®«¦¥­ ¡ëâì ¬¥¦¤ã #4000 ¨ #BFFF
LD D,delimiter ; à §¤¥«¨â¥«ì
LD B,num_sym ; ¤«¨­  ¢ë¢®¤¨¬®© áâப¨
LD C,#88 ; ­®¬¥à ä㭪樨
RST ToBIOS ; ᨬ¢®«ë ¨§ (HL) ¢ë¢®¤ïâáï ­  íªà ­, ¯®ª  ­¥
; ¢áâà¥â¨âáï ᨬ¢®« à ¢­ë© D, ¤ «¥¥ ¯¥ç â îâáï
; ¯à®¡¥«ë, ª ª ¤®¯®«­¥­¨¥ áâப¨ ¤® B ᨬ¢®«®¢
;  âਡãâë ­¥ ¨§¬¥­ïîâáï
;
LP_CLS_WIN: ; ®ç¨á⪠ íªà ­ 
LD DE,place ; ¯®«®¦¥­¨¥ «®ª «ì­®£® ®ª­  (£«®¡ «ì­®¥ = ⥪ã饥)
LD H,ver_size ; HL - à §¬¥à «®ª «ì­®£® ®ª­  ¢¥à⨪ «ì/£®à¨§®­â «ì
LD L,hor_size ; à §¬¥à ¢ ᨬ¢®« å
LD B,atribute ;  âਡãâ ®ç¨á⪨
LD C,#89 ; ­®¬¥à äã­æ¨¨
RST ToBIOS ; ¢ë¯®«­¥­¨¥. <20>ந§¢®à¨âáï ¢ë¢®¤®¬ ¯à®¡¥«®¢ á
; § ¤ ­­ë¬  âਡã⮬
;
LP_SCROLL_UD: ; ‘ªà®««¨­£ ç á⨠£«®¡ «ì­®£® ®ª­  ¢¢¥àå/¢­¨§
LD B,scrollType; ⨯ áªà®««¨­£  1 - ¢¢¥àå/ 2 - ¢­¨§
LD D,beg_line ; ­ ç «ì­ ï áâப  áªà®««¨­£ 
LD E,num_lines ; ç¨á«® áªà®««¨à㥬ëå áâப
LD C,#8A ; ­®¬¥à ä㭪樨
RST ToBIOS ; ¢ë¯®«­¥­¨¥. ‘ªà®««¨àãîâáï ¯®«­ë¥ áâப¨
; £«®¡ «ì­®£® ®ª­ 
;
LP_PRINT_LINE5: ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣®
; §­ ª®¬¥áâ  ¤® à §¤¥«¨â¥«ï ¯®á«¥ à §¤¥«¨â¥«ï
; ¢ë¢®¤ ®áâ ­ ¢«¨¢ ¥âáï
LD HL,line_adr ;  ¤à¥á áâப¨. „®«¦¥­ ¡ëâì ¬¥¦¤ã #4000 ¨ #BFFF
LD D,stop_symb ; ᨬ¢®« ª®­æ  áâப¨
LD E,atribute ;  âਡãâ, á ª®â®àë¬ ¡ã¤¥â ¢ë¢¥¤¥­  áâப 
LD B,num_sym ; ¬ ªá¨¬ «ì­ ï ¤«¨­  ¢ë¢®¤¨¬®© áâப¨
LD C,#8B ; ­®¬¥à ä㭪樨
RST ToBIOS ; ᨬ¢®«ë ¨§ (HL) ¢ë¢®¤ïâáï ­  íªà ­, ¯®ª  ­¥
; ¢áâà¥â¨âáï ᨬ¢®« à ¢­ë© D ¨«¨ ª®«¨ç¥á⢮
; ᨬ¢®«®¢ ­¥ ¯à¥¢ëᨫ® B. „ «¥¥ ¯à®¨á室¨â
; ¢®§¢à â
;
LP_PRINT_LINE6: ; ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣®
; §­ ª®¬¥áâ  ¤® à §¤¥«¨â¥«ï ¯®á«¥ à §¤¥«¨â¥«ï
; ¢ë¢®¤ ®áâ ­ ¢«¨¢ ¥âáï, ¡¥§  âਡã⮢
LD HL,line_adr ;  ¤à¥á áâப¨. „®«¦¥­ ¡ëâì ¬¥¦¤ã #4000 ¨ #BFFF
LD D,stop_symb ; ᨬ¢®« ª®­æ  áâப¨
LD B,num_sym ; ¬ ªá¨¬ «ì­ ï ¤«¨­  ¢ë¢®¤¨¬®© áâப¨
LD C,#8C ; ­®¬¥à ä㭪樨
RST ToBIOS ; ᨬ¢®«ë ¨§ (HL) ¢ë¢®¤ïâáï ­  íªà ­, ¯®ª  ­¥
; ¢áâà¥â¨âáï ᨬ¢®« à ¢­ë© D ¨«¨ ª®«¨ç¥á⢮
; ᨬ¢®«®¢ ­¥ ¯à¥¢ëᨫ® B. „ «¥¥ ¯à®¨á室¨â
; ¢®§¢à â. €âਡãâë ­¥ ¢ë¢®¤ïâáï
;
; HL ->  ¤à¥á á«¥¤ãî騩 ¯®á«¥ ª®­æ  áâப¨
;
LP_CLS_WIN2: ; ®ç¨á⪠ íªà ­ , 㪠§ ­¨¥¬ ᨬ¢®«  § ¯®«­¥­¨ï
LD DE,place ; ¯®«®¦¥­¨¥ «®ª «ì­®£® ®ª­  (£«®¡ «ì­®¥ = ⥪ã饥)
LD H,ver_size ; HL - à §¬¥à «®ª «ì­®£® ®ª­  ¢¥à⨪ «ì/£®à¨§®­â «ì
LD L,hor_size ; à §¬¥à ¢ ᨬ¢®« å
LD A,symbol ; ᨬ¢®« ®ç¨á⪨
LD B,atribute ;  âਡãâ ®ç¨á⪨
LD C,#8D ; ­®¬¥à äã­æ¨¨
RST ToBIOS ; ‚믮«­¥­¨¥. <20>ந§¢®à¨âáï ¢ë¢®¤®¬ ¯à®¡¥«®¢ á
; § ¤ ­­ë¬  âਡã⮬ ¨ ᨬ¢®«®¬
;
LP_GET_PLACE: ; ¯®«ãç¨âì ⥪ã饥 ¯®«®¦¥­¨¥ ¢ë¢®¤  ­  íªà ­
; ¢ £«®¡ «ì­®¬ ®ª­¥
LD C,#8E ; ­®¬¥à ä㭪樨
RST ToBIOS ; ¢ ॣ¨áâà DE ¡ã¤ãâ ¯®«®¦¥­ë ª®®à¤¨­ âë,
; ¢ ª®â®àëå ¡ã¤¥â ­ ¯¥ç â ­ á«¥¤ãî騩 ᨬ¢®«
; D - ¢¥à⨪ «ì, E - £®à¨§®­â «ì
;
LP_PR_LINE_DIR ; <20>¥ç âì "¢ ª®­á®«ì" áâப¨ ¤® à §¤¥«¨â¥«ï á  ¢â®áªà®««®¬
; ¨ á ãçñ⮬ ã¯à ¢«ïîé¨å ᨬ¢®«®¢: BELL, Backspace, TAB, CR, LF, FF, VT.
.spets EQU spets1*256 + spets2
LD A,attrib ;  âਡãâë ¢ë¢®¤¨¬®£® ᨬ¢®«  ¥á«¨ CF'
SCF ; XY-mode
EX AF,AF'
SCF ; ¢ë¢®¤¨âì ᨬ¢®« á  âਡãâ ¬¨
LD A,scroll ; ¥á«¨ !=0 â® ¡¥§ áªà®«« 
EX AF,AF'
LD HL,text ; áâப  ¤«ï ¯¥ç â¨. ¤®«¦­  ­ å®¤¨âìáï ¢ ¡ ­ª å 1..2 ;!TODO ¥áâì ®£à ­¨ç¥­¨¥ ­  ¡ ­ªã?
LD DE,place ; ¬¥á⮠ᨬ¢®«  ¢ ®ª­¥, ¥á«¨ CF=1
LD IY,.spets ; ¤¢  ᯥæ.ᨬ¢®«  ¤«ï ¢ë室  á CF=1. „®«¦­ë ¡ëâì à ¢­ë B, ¥á«¨ ­¥ ­ã¦­ë
LD B,color ; 梥⠪®­á®«¨ (¨á¯®«ì§ã¥âáï ¯à¨ áªà®««¥ ¨ ®ç¨á⪥ ®ª­ )
LD C,#E0 ; ­®¬¥à äã­æ¨¨
RST ToBIOS ; ‚믮«­¥­¨¥.
;..............................................................................
; ƒà ä¨ç¥áª¨¥ ä㭪樨
; ª®®à¤¨­ âë áç¨â îâáï ®â ¢¥àå­¥£® «¥¢®£® 㣫  íªà ­ 
;..............................................................................
PIC_POINT: ; ãáâ ­®¢¨âì â®çªã
LD DE,Y_coord ; ª®®à¤¨­ â  ¯® ¢¥à⨪ «¨
LD HL,X_coord ; ª®®à¤¨­ â  ¯® £®à¨§®­â «¨
LD A,(id_win) ; ¨¤¥­â¨ä¨ª â®à £à ä. ®ª­  (¯®ª  ¤®«¦¥­ ¡ëâì 0)
LD B,color ; 梥â â®çª¨
LD C,#A1 ; ­®¬¥à ä㭪樨
RST ToBIOS ; ¯®áâ ¢¨âì â®çªã
; ¤¥©á⢨⥫쭮á⨠áâ ¢¨âì â®çª¨ ­  íªà ­¥ á ¯®¬®éìî ä㭪樨 ¡¨®á ,
; ᫨誮¬ ¬¥¤«¥­­®. „«ï í⮣® «ãçè¥ ¯®«ì§®¢ âìáï ¯àï¬ë¬ ¢ë¢®¤®¬ ¤ ­­ëå
; ­  £à ä¨ç¥áª¨© íªà ­. “áâனá⢮ íªà ­  ¨ á¯®á®¡ë ¯àאַ£® ¢ë¢®¤ 
; £à ä¨ç¥áª¨å ¤ ­­ëå ®¯¨á ­ë ¢ ä ©«¥  àå¨â¥ªâãàë ‘¯à¨­â¥à .
;
PIC_SET_PAL: ; ãáâ ­®¢ª  ¯ «¨âàë
LD HL,pal_data ; ¤ ­­ë¥ ¯ «¨âàë:
; ᯨ᮪ 梥⮢ ¯® ç¥âëॠ¡ ©â  B,G,R,Y
LD E,beg_color ; ­ ç «ì­ë© 梥â
LD D,num_colors; ª®«¨ç¥á⢮ ãáâ ­ ¢«¨¢ ¥¬ëå æ¢¥â®¢
LD B,pal_mask ; ¬ áª  ¯à¨ ãáâ ­®¢ª¥ ¯ «¨âàë. „«ï ­®à¬ «ì­®£®
; ०¨¬  ¤®«¦­a ¡ëâì FF
LD A,page_pal ; ­®¬¥à ¯ «¨âàë (0..15, 8..15 १¥à¢­ë¥)
LD C,#A4 ; ­®¬¥à ä㭪樨
RST ToBIOS ; ãáâ ­®¢ª  ¯ «¨âàë
; ¤ ­­ë¥ ¯ «¨âàë ¤®«¦­ë ¯à¥¤áâ ¢«ïâì ᮡ®© ᯨ᮪ ¯à¨¡«¨§¨â¥«ì­® â ª®£® ¢¨¤ :
DB blue1,green1,red1,0
DB blue2,green2,red2,0
;.....................
DB blueN,greenN,redN,0
; N = num_colors. ‡­ ç¥­¨¥ num_colors à ¢­®¥ 0 ᮮ⢥âáâ¢ã¥â 256-⨠梥⠬
; ¯à¨ § ¯¨á¨ ¢ ¢¨¤¥®-އ“ ¢á¥ ¤ ­­ë¥ ¯à¥¤¢ à¨â¥«ì­® ¯à®å®¤ïâ äã­ªæ¨î AND á®
; §­ ç¥­¨¥¬ pal_mask
; ‘âà ­¨æë ¯ «¨âàë 0..3 ᮮ⢥âáâ¢ãîâ £à ä¨ç¥áª¨¬ ०¨¬ ¬. „«ï ¢ë¢®¤  ¢
; ᮮ⢥âáâ¢ãî饩 ¯ «¨âॠ­ã¦­® § ¤ âì ᮮ⢥âáâ¢ãî饥 §­ ç¥­¨¥ bit7..6 ¢
; ¡ ©â¥ ०¨¬  §­ ª®¬¥áâ 
; ‘âà ­¨æë 4..7 ᮮ⢥âáâ¢ãîâ ⥪á⮢®¬ã ०¨¬ã ¨ ०¨¬ã "‘¯¥ªâàã¬"
; áâà ­¨æ¥ 4 § ¤ ¥âáï æ¢¥â paper ¤«ï ª ¦¤®£®  âਡãâ . áâà ­¨æ¥ 5
; § ¤ ¥âáï æ¢¥â ink ¤«ï ª ¦¤®£®  âਡãâ .
; áâà ­¨æ¥ 6 § ¤ ¥âáï æ¢¥â paper, ª®â®àë¬ ®­ ¡ã¤¥â ¬®à£ âì ¢ ०¨¬¥ flash
; áâà ­¨æ¥ 7 § ¤ ¥âáï æ¢¥â ink, ª®â®àë¬ ®­ ¡ã¤¥â ¬®à£ âì ¢ ०¨¬¥ flash
; ’ ª¨¬ ®¡à §®¬, ¤«ï ª ¦¤®£® ¨§ 256-⨠ âਡã⮢ § ¤ ¥âáï ç¥âëॠ梥â 
; ¥á«¨ æ¢¥â  4,5 ᮢ¯ ¤ îâ á æ¢¥â ¬¨ 6,7 ⮠०¨¬ flash ®ª §ë¢ ¥âáï
; ®âª«î祭­ë¬. „«ï ¥£® ¢ª«î祭¨ï ¢ ᯥªâà㬮¢áª®¬ ०¨¬¥ ­ ¤® ¯®¬¥­ïâì
; ¬¥áâ ¬¨ æ¢¥â  6 ¨ 7. …᫨ ­ ¤® ¢ª«îç¨âì flash ¢ ०¨¬ IBM-CGA, á«¥¤ã¥â
; ãáâ ­®¢¨âì æ¢¥â  6 ¨ 7 ®¤¨­ ª®¢ë¬¨ ¨ à ¢­ë¬¨ 梥âã 4
; ¯® áã⨠०¨¬ flash ¢á¥£¤  ¢ª«î祭 ¨ ­  íªà ­¥ ¯®áâ®ï­­® ¬¥­ïîâáï æ¢¥â 
; paper á 4-£® ­  6-©,   æ¢¥â  ink á 5 ­  7-©. …᫨ í⨠¯ àë æ¢¥â®¢ ¤«ï
;  âਡãâ  §­ ª®¬¥áâ  ãáâ ­ ¢«¨¢ îâáï ®¤¨­ ª®¢ë¬¨, â® flash ¢ í⮬ ¬¥áâ¥
; ­¥ ¢¨¤¥­.
; ˆá¯®«ì§ãï ¯®¤®¡­®¥ § ¤ ­¨¥ 梥⮢ ⥪á⮢®£® ०¨¬  ¬®¦­® «¥£ª® ¤®¡¨âìáï
; ᮢ¬¥á⨬®á⨠¯® 梥⠬ ª ª á® ‘¯¥ªâà㬮¬, â ª ¨ á IBM
;
;[x] ­®¢®¥?
PIC_GET_PAL: ; ¯®«ã祭¨¥ ãáâ ­®¢«¥­­®© ¯ «¨âàë
LD HL,pal_data ; ¡ãä¥à ¤«ï ¯ «¨âàë:
; ᯨ᮪ 梥⮢ ¯® ç¥âëॠ¡ ©â  B,G,R,Y
LD E,beg_color ; ­ ç «ì­ë© 梥â
LD D,num_colors; ª®«¨ç¥á⢮ 梥⮢
LD A,page_pal ; #80 + ­®¬¥à ¯ «¨âàë (0..15, 8..15 १¥à¢­ë¥)
LD C,#A4 ; ­®¬¥à ä㭪樨 (â ª®© ¦¥ ª ª ¨ ¤«ï PIC_SET_PAL)
RST ToBIOS ; ¯®«ã祭¨¥ ¯ «¨âàë
;
SET_PAL_INIT: ; ãáâ ­®¢ª  ¢­ãâ७­¥© ¯ «¨âàë.
LD A,PAL_PAGE ; áâà ­¨æ  ¯ «¨âàë (¤«ï £à ä¨ç¥áª®©)
LD E,PAL_N ; ­®¬¥à ¯ «¨âàë (¤«ï £à ä¨ç¥áª®©)
LD B,type ; 3 - ãáâ ­®¢ª  CGA ¯ «¨âàë
; 2 - ãáâ ­®¢ª  ᯥªâà㬮¢áª®© ¯ «¨âàë
; 1 - ãáâ ­®¢ª  £à ä¨ç¥áª®© ¯ «¨âàë
LD C,#A6 ; ­®¬¥à ä㭪樨
RST ToBIOS ; ãáâ ­®¢ª  ¯ «¨âàë
;==============================================================================
; ”㭪樨 à ¡®âë á ¢¨­ç¥áâ¥à®¬ à §¤¥«ïîâáï ­  ¤¢¥ £à㯯ë:
; 1. ä㭪樨 á ­®¬eà ¬¨ #4x à ¡®â îâ ¢ ¡®«¥¥ ¯à®á⮬ ०¨¬¥ ¨
; ¨á¯®«ì§ãîâáï ¢ TR-DOS. <20>⨠ä㭪樨 ­ å®¤ïâ ⮫쪮 ®¤¨­
; ¢¨­ç¥áâ¥à ¨ à ¡®â îâ ⮫쪮 á ¥£® ¯¥à¢ë¬ à §¤¥«®¬. …᫨ ¥áâì
; master, â® ä㭪樨 ¨á¯®«ì§ãîâ ¥£®, ¥á«¨ master-  ­¥â, â®
; ®¯à¥¤¥«ï¥âáï slave, ¥á«¨ ­¥â ­¨ ⮣® ­¨ ¤à㣮£®, ¢ë¤ ¥âáï ®è¨¡ª .
; ”ã­ªæ¨î ¯®¤£®â®¢ª¨ #43 ­¥ âॡã¥âáï ¨á¯®«­ïâì ¯¥à¥¤
; ®¯¥à æ¨ï¬¨ #44, #45 ¨ #46!
; <20>ਠ¨á¯®«­¥­¨¨ ä㭪樨 43h ¯à®¨§¢®¤¨âáï ¢áï ¯®¤£®â®¢ª  ª
; ®¯¥à æ¨ï¬ ç⥭¨ï/§ ¯¨á¨ ¢ëç¨á«¥­¨¥ 樫¨­¤à®¢/£®«®¢®ª/ᥪâ®à®¢ ¨
; § ­¥á¥­¨¥ ¨å ¢ ॣ¨áâàë ¢¨­ç¥áâ¥à  ¤ «¥¥ ¯à®£à ¬¬  ¬®¦¥â á ¬ 
; ⮫쪮 ¯®¤ âì ª®¬ ­¤ã ç¨â âì/¯¨á âì ¨ á ¬®áâ®ï⥫쭮 ¯à®¨§¢®¤¨âì
; áç¨â뢠­¨¥/§ ¯¨áì ¤ ­­ëå ¢ ¢¨­ç¥áâ¥à. Š®¬ ­¤  㤮¡­  ¤«ï à ¡®âë
; ¯à®£à ¬¬ ¢ ॠ«ì­®¬ ¢à¥¬¥­¨, ª®£¤  ­¥®¡å®¤¨¬® ªà®¬¥
; ç⥭¨ï/§ ¯¨á¨ ¤ ­­ëå ¯à®¨§¢®¤¨âì ª ª¨¥ «¨¡® ¨­ë¥ ¤¥©á⢨ï.
; ‘âà ­¨æ  ¡ãä¥à  ¤«ï ä㭪権 #44..#46 ¨¬¥¥â §­ ç¥­¨¥ ⮫쪮 ¯à¨
; ¯®¯ ¤ ­¨¨  ¤à¥á®¢ ç⥭¨ï/§ ¯¨á¨ ¢ ¤¨ ¯ §®­ #C000..#FFFF. Šà®¬¥
; ⮣®, ¯à¨ ¯®¯ ¤ ­¨¨ ¬¥¦á¥ªâ®à­®£® ¯à®¬¥¦ã⪠ ­   ¤à¥á 0 ¯à¨
; ­ «¨ç¨¨ ­¥áç¨â ­­ëå/­¥§ ¯¨á ­­ëå ᥪâ®à®¢, ¯à®¨§¢®¤¨âáï
;  ¢â®¬ â¨ç¥áª®¥ ¯¥à¥ª«î祭¨¥ áâà ­¨æë އ“ ¯® RAM Allocation Table
; ¨ ¯à®¤®«¦¥­¨¥ ç⥭¨ï/§ ¯¨á¨ á  ¤à¥á  #C000, çâ® ¯®§¢®«ï¥â
; ­¥¯à¥à뢭® ¯¨á âì/ç¨â âì ¤® 128kb ¯àאַ ¢ ¢ë¤¥«¥­­ë© ¡«®ª އ“.
; 2. ”㭪樨 á ­®¬¥à ¬¨ #5x ¡®«¥¥ á«®¦­ë, ¨á¯®«ì§ãîâáï ¢ Estex ¨
; à ¡®â îâ á ®¡®¨¬¨ ¢¨­ç¥áâ¥à ¬¨, á® ¢á¥¬¨ à §¤¥« ¬¨,   â ª ¦¥ á
; ¤¨áª®¢®¤ ¬¨, RAM-Disk- ¬¨ ¨ CD-ROM- ¬¨.
; íâ¨å äã­ªæ¨ïå ¢ ॣ¨áâॠA ®¡ëç­® § ¤ ¥âáï ­®¬¥à ¨ ⨯
; ãáâனá⢠:
; ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; ¡¨â 4..7 - ⨯ ãáâனá⢠:
; 0 - ¤¨áª®¢®¤
; 6 - ram-disk
; 8 - HDD
; C - CD-ROM
; ®áâ «ì­ë¥ ­®¬¥à  १¥à¢­ë¥
; € â ª ¦¥ § ¤ îâáï áâà è ï ç áâì ­®¬¥à  ᥪâ®à  ¢ ॣ¨á⥠HL,
; ¬« ¤è ï ç áâì ­®¬¥à  ᥪâ®à  ¢ ॣ¨áâॠIX. Ž¡à â¨âì ¢­¨¬ ­¨¥,
; ­  ¤à㣮© ¯®à冷ª à á¯®«®¦¥­¨ï  ¡á®«îâ­®£® ­®¬¥à  ᥪâ®à  ¢
; ॣ¨áâà å HL ¨ IX ¯® áà ¢­¥­¨î á äã­æ¨ï¬¨ #4x!
;==============================================================================
; 6. <20> ¡®â  á ¢¨­ç¥áâ¥à®¬ ¨ ¤¨áª ¬¨ MS-DOS. ”㭪樨 4x
;==============================================================================
; [x] 27/01/2024  ¤ ¯â¨à®¢ ­  ¤«ï ª®à४⭮© à ¡®âë á FN_HDD_PART
HDD_INIT: ; ¨­¨æ¨ «¨§ æ¨ï ¢¨­ç¥áâ¥à . <20>®àâ¨â §­ ç¥­¨¥ PORT_Y
LD C,#40 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ¢¨­ç¥áâ¥à ­¥ ­ ©¤¥­
;
; !FIXIT ¯®ª  à ¡®â ¥â ⮫쪮 á ®¤­¨¬ ª ­ «®¬ (¯®-áâ à®¬ã)
HDD_RECAL: ; ४ «¨¡à®¢ª  ¢¨­ç¥áâ¥à 
LD C,#41 ; ­®¬¥à ä㭪樨
; * ”ã­ªæ¨ï § à¥§¥à¢¨à®¢ ­  ¤«ï ¤ «ì­¥©è¥£® ¨á¯®«ì§®¢ ­¨ï ; !TODO
;
; [x] 28/01/2024 à ¡®â ¥â á® ¢á¥¬¨ ª ­ « ¬¨ IDE ¨ Master/Slave
HDD_TEST_IDE: ; ’¥áâ ­ «¨ç¨ï ¨­â¥àä¥©á  IDE
LD C,#42 ; ­®¬¥à ä㭪樨
RST ToBIOS ; NC -> ­®à¬ «ì­¨¥ § ¢¥à襭¨¥
; ¢ ॣ¨áâॠB ¨­ä®à¬ æ¨ï ® ­ «¨ç¨¨ ãáâனáâ¢
; bit0=1 - ¥áâì ãáâனá⢮ "Primary master"
; bit1=1 - ¥áâì ãáâனá⢮ "Primary slave"
; bit2=1 - ¥áâì ãáâனá⢮ "Secondary slave"
; bit3=1 - ¥áâì ãáâனá⢮ "Secondary slave"
; CF -> ®è¨¡ª ,  ¯¯ à â­ ï ­¥¨á¯à ¢­®áâì
;
HDD_PREPARE: ; ¯®¤£®â®¢ª  ¢¨­ç¥áâ¥à  ª ®¯¥à æ¨¨ ç⥭¨ï/§ ¯¨á¨
LD A,bufer_page; áâà ­¨æ  ¡ãä¥à , ¥á«¨  ¤à¥á ¢ ®ª­¥ #C000
LD IX,sec_high ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  áâ àè ï ç áâì
LD DE,sec_low ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  ¬« ¤è ï ç áâì
LD HL,bufer_adr;  ¤à¥á ¡ãä¥à  ¤ ­­ëå
LD B,sec_num ; ç¨á«® ᥪâ®à®¢
LD C,#43 ; ­®¬¥à ä㭪樨
RST ToBIOS ; <20>ਠ¨á¯®«­¥­¨¨ ¯à®¨§¢®¤¨âáï ¢áï ¯®¤£®â®¢ª  ª
; ®¯¥à æ¨ï¬ ç⥭¨ï/§ ¯¨á¨ ¢ëç¨á«¥­¨¥
; 樫¨­¤à®¢/£®«®¢®ª/ᥪâ®à®¢ ¨ § ­¥á¥­¨¥ ¨å ¢ ॣ¨áâàë ¢¨­ç¥áâ¥à 
; ¤ «¥¥ ¯à®£à ¬¬  ¬®¦¥â á ¬  ⮫쪮 ¯®¤ âì ª®¬ ­¤ã ç¨â âì/¯¨á âì ¨
; á ¬®áâ®ï⥫쭮 ¯à®¨§¢®¤¨âì áç¨â뢠­¨¥/§ ¯¨áì ¤ ­­ëå ¢ ¢¨­ç¥áâ¥à.
; Š®¬ ­¤  㤮¡­  ¤«ï à ¡®âë ¯à®£à ¬¬ ¢ ॠ«ì­®¬ ¢à¥¬¥­¨, ª®£¤  ­¥®¡å®¤¨¬®
; ªà®¬¥ ç⥭¨ï/§ ¯¨á¨ ¤ ­­ëå ¯à®¨§¢®¤¨âì ª ª¨¥ «¨¡® ¨­ë¥ ¤¥©á⢨ï.
; <20>  ¢ë室¥ ¢ ®ª­¥ 3 á⮨â áâà ­¨æ  ¨§ A ¥á«¨ H >= #0.
; Žáâ ñâáï ⮫쪮 ­ ç âì ç¨â âì á ¯®à⮢ HDD
;
; [x] 27/01/2024 ⥯¥àì à ¡®â ¥â á «î¡ë¬ à §¤¥«®¬ HDD
HDD_READ_BPB: ; ç¨â âì BPB. <20>®àâ¨â §­ ç¥­¨¥ PORT_Y
LD C,#44 ; ­®¬¥à ä㭪樨
LD HL,bufer_adr;  ¤à¥á ¡ãä¥à  ¤«ï BPB
LD A,bufer_page; áâà ­¨æ  ¡ãä¥à , ¥á«¨  ¤à¥á ¢ ®ª­¥ #C000
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª 
;
HDD_READ: ; ç¨â âì ᥪâ®à  á ¢¨­ç¥áâ¥à . <20>®àâ¨â §­ ç¥­¨¥ PORT_Y
LD A,bufer_page; áâà ­¨æ  ¡ãä¥à , ¥á«¨  ¤à¥á ¢ ®ª­¥ #C000
; ¢ A ¬®¦¥â ¡ëâì BlockID, ⮣¤  ¡ã¤¥â ç¨â âìáï ¤ «¥¥
; ¢ á«¥¤ãî騥 áâà ­¨æë á  ¤à¥á  #C000
LD IX,sec_high ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  áâ àè ï ç áâì
LD DE,sec_low ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  ¬« ¤è ï ç áâì
LD HL,bufer_adr;  ¤à¥á ¡ãä¥à  ¤ ­­ëå
LD B,sec_num ; ç¨á«® ç¨â ¥¬ëå ᥪâ®à®¢
LD C,#45 ; ­®¬¥à ª®¬ ­¤ë
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª 
; ** <20>ਠ¯®¯ ¤ ­¨¨ ¬¥¦á¥ªâ®à­®£® ¯à®¬¥¦ã⪠ ­   ¤à¥á 0
; ¯à®¨§¢®¤¨âáï  ¢â®¬ â¨ç¥áª®¥ ¯¥à¥ª«î祭¨¥ áâà ­¨æë އ“ ¯®
; RAM Allocation Table.
;
HDD_WRITE: ; ¯¨á âì ᥪâ®à  ­  ¢¨­ç¥áâ¥à
LD A,bufer_page; áâà ­¨æ  ¡ãä¥à , ¥á«¨  ¤à¥á ¢ ®ª­¥ #C000
LD HL,bufer_adr;  ¤à¥á ¡ãä¥à  ¤ ­­ëå
LD B,sec_num ; ç¨á«® § ¯¨á뢠¥¬ëå ᥪâ®à®¢
LD DE,sec_low ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  ¬« ¤è ï ç áâì
LD IX,sec_high ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  áâ àè ï ç áâì
LD C,#46 ; ­®¬¥à ª®¬ ­¤ë
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª 
; ** <20>ਠ¯®¯ ¤ ­¨¨ ¬¥¦á¥ªâ®à­®£® ¯à®¬¥¦ã⪠ ­   ¤à¥á 0
; ¯à®¨§¢®¤¨âáï  ¢â®¬ â¨ç¥áª®¥ ¯¥à¥ª«î祭¨¥ áâà ­¨æë އ“ ¯® RAM
; Allocation Table.
;
; !FIXIT ¨á¯®«ì§®¢ âì ¢ HDD_TO_DRV
; [x] 07/01/2024
HDD_PART: ; ­ áâனª  ª ­ «  IDE, master/slave, à §¤¥«  HDD. <20>®àâ¨â §­ ç¥­¨¥ PORT_Y
LD A,hdd_part ; bit0 - master/slave, bit1: Primary/Secondary, bit2..3: ¨á¯®«ì§ãî騩áï à §¤¥« ¢ MBR
LD C,#47
RST ToBIOS
;
HDD_READ_NEXT: ; —¨â âì á«¥¤ãî騩 ᥪâ®à (⮫쪮 LBA!). <20>®àâ¨â §­ ç¥­¨¥ PORT_Y
LD A,bufer_page; áâà ­¨æ  ¡ãä¥à , ¥á«¨  ¤à¥á ¢ ®ª­¥ #C000
LD B,sec_num ; ç¨á«® ç¨â ¥¬ëå ᥪâ®à®¢
LD HL,bufer_adr;  ¤à¥á ¡ãä¥à  ¤ ­­ëå
LD DE,add_par ; ¯à¨¡ ¢«ï¥âáï ª ­®¬¥à㠯।ë¤ã饣® ¯à®ç¨â ­­®£® ᥪâ®à 
LD C,#48 ; ­®¬¥à ª®¬ ­¤ë
RST ToBIOS ; NC -> ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF -> ®è¨¡ª 
;
;==============================================================================
; 7. <20> ¡®â  á ¢¨­ç¥áâ¥à®¬ ¨ ¤¨áª ¬¨ MS-DOS. ”㭪樨 5x
;==============================================================================
; !TODO
LD C,#50 ; § à¥§¥à¢¨à®¢ ­ 
;
DRV_RESET: ; ‘¡à®á ª®­â஫«¥à  ¨ ­ áâனª  ­  ¤¨áª
LD A,drv_type ; ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; ¡¨â 4..7 - ⨯ ãáâனá⢠
; 0 - ¤¨áª®¢®¤
; 6 - ram-disk
; 8 - HDD
; C - CD-ROM
; ®áâ «ì­ë¥ ­®¬¥à  १¥à¢­ë¥
LD C,#51 ;
RST ToBIOS ; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF - ­¥â ¤¨áª  ¨«¨ ­¥â ãáâனá⢠
;
DRV_READ_LONG: ; ç⥭¨¥ á ãáâனá⢠ á ¯¥à¥ª«î祭¨¥¬ áâà ­¨æ. €¤à¥á ç⥭¨ï ¤®«¦¥­ ¡ëâì ¢ë஢­¥­ ¯® à §¬¥àã ᥪâ®à 
LD A,drv_type ; ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; ¡¨â 4..7 - ⨯ ãáâனá⢠
; 0 - ¤¨áª®¢®¤
; 6 - ram-disk
; 8 - HDD
; C - CD-ROM
EX AF,AF' ;
LD A,Mem_BLK ; áâà ­¨æ , ªã¤  ç¨â âì ¥á«¨ ¡ãä¥à ¢ SLOT3
EX AF,AF' ;
LD HL,sec_h ; áâ àè ï ç áâì ­®¬¥à  ᥪâ®à 
LD IX,sec_l ; ¬« ¤è ï ç áâì ­®¬¥à  ᥪâ®à 
LD B,n_sec ; ª®«¨ç¥á⢮ ᥪâ®à®¢
LD DE,bufer_adr;  ¤à¥á ¡ãä¥à ¤«ï ç⥭¨ï
LD C,#52 ;
RST ToBIOS ; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥:
; A' - ¯®á«¥¤­ïï áâà ­¨æ  à ¬¡«®ª  ¢ ª®â®àãî ç¨â «¨ ;!FIXIT ¯®ª  ⮫쪮 ¤«ï ATA ¨ ATAPI
; CF - ®è¨¡ª  ç⥭¨ï ¨«¨ ­¥â ãáâனá⢠
;
; !TODO à á¯¨á âì
DRV_WRITE_LONG: ; § ¯¨á ¢ ãáâனá⢮ á ¯¥à¥ª«î祭¨¥¬ áâà ­¨æ. €¤à¥á § ¯¨á¨ ¤®«¦¥­ ¡ëâì ¢ë஢­¥­ ¯® à §¬¥àã ᥪâ®à 
LD C,#53 ; Long write
;
DRV_VERIFY: ; ¯à®¢¥àª  ᥪâ®à®¢
LD A,drv_type ; ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; ¡¨â 4..7 - ⨯ ãáâனá⢠
; 0 - ¤¨áª®¢®¤
; 6 - ram-disk ; !FIXIT
; 8 - HDD
; C - CD-ROM
LD HL,sec_h ; áâà è ï ç áâì ­®¬¥à  ᥪâ®à 
LD IX,sec_l ; ¬« ¤è ï ç áâì ­®¬¥à  ᥪâ®à 
LD B,n_sec ; ª®«¨ç¥á⢮ ᥪâ®à®¢
LD C,#54 ;
RST ToBIOS ; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF - ¯à®¢¥àª  á ®è¨¡ª®© ¨«¨ ­¥â ãáâனá⢠
;
DRV_READ: ; ç⥭¨¥ á ãáâனá⢠
LD A,drv_type ; ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; ¡¨â 4..7 - ⨯ ãáâனá⢠
; 0 - ¤¨áª®¢®¤
; 6 - ram-disk
; 8 - HDD
; C - CD-ROM
LD HL,sec_h ; áâ àè ï ç áâì ­®¬¥à  ᥪâ®à 
LD IX,sec_l ; ¬« ¤è ï ç áâì ­®¬¥à  ᥪâ®à 
LD B,n_sec ; ª®«¨ç¥á⢮ ᥪâ®à®¢
LD DE,bufer_adr;  ¤à¥á ¡ãä¥à ¤«ï ç⥭¨ï
LD C,#55 ;
RST ToBIOS ; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF - ®è¨¡ª  ç⥭¨ï ¨«¨ ­¥â ãáâனá⢠
;
DRV_WRITE: ; § ¯¨áì ­  ãáâனá⢠
LD A,drv_type ; ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; ¡¨â 4..7 - ⨯ ãáâனá⢠
; 0 - ¤¨áª®¢®¤
; 6 - ram-disk
; 8 - HDD
; C - CD-ROM
LD HL,sec_h ; áâà è ï ç áâì ­®¬¥à  ᥪâ®à 
LD IX,sec_l ; ¬« ¤è ï ç áâì ­®¬¥à  ᥪâ®à 
LD B,n_sec ; ª®«¨ç¥á⢮ ᥪâ®à®¢
LD DE,bufer_adr;  ¤à¥á ¡ãä¥à ¤«ï § ¯¨á¨
LD C,#56 ;
RST ToBIOS ; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; CF - ®è¨¡ª  § ¯¨á¨ ¨«¨ ­¥â ãáâனá⢠
;
DRV_DETECT: ; ®¯à¥¤¥«¥­¨¥ ¯ à ¬¥â஢ ãáâனá⢠
LD A,drv_type ; ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; ¡¨â 4..7 - ⨯ ãáâனá⢠
; 0 - ¤¨áª®¢®¤
; 6 - ram-disk
; 8 - HDD
; C - CD-ROM
LD C,#57 ;
RST ToBIOS ; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; A - ¤«ï FDD bit7: 720/1.44
; ¤«ï HDD ¨ CD: drive type
; B - ¤«ï HDD ¨ CD:
; bit0=1 removable, bit1=1 drive changed, bit7..2 reserved ; [ ]
; CF - ­¥â ãáâனá⢠ ¨«¨ ­¥â ­®á¨â¥«ï
;
DRV_GET_PAR: ; ¯®«ãç¨âì ¯ à ¬¥âàë ­®á¨â¥«ï
LD A,drv_type ; ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; ¡¨â 4..7 - ⨯ ãáâனá⢠
; 0 - ¤¨áª®¢®¤
; 6 - ram-disk
; 8 - HDD
; C - CD-ROM
LD C,#58 ;
RST ToBIOS ; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; [ ] A - HDD_INIT_TABLE.RemovableMedia
; L - ç¨á«® ᥪâ®à®¢ (­  楫¨­¤à) ; [ ] ¤«ï ATAPI HL:DE - à §¬¥à ­®á¨â¥«ï ¢ ᥪâ®à å
; H - ç¨á«® £®«®¢®ª
; DE - ª®«¨ç¥á⢮ 樫¨­¤à®¢
; IX - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
; B - ¤®¯. ¯ à ¬¥âàë:
; FDD: ¡¨â7 - ⨯ 720/1.44
; IDE: ¡¨â0 - ª ­ « IDE 0/1
; ¡¨â6 - CHS/LBA
; RMD: ramdrive block id ; [x]
;
; ATAPI: CF' = 1, A' = ­®¬¥à ®è¨¡ª¨
;
; ¥á«¨ ¢ HL,DE ¢á¥ FF - ãáâனá⢠ ­¥â
; CF - ­¥â ãáâனá⢠
;
DRV_SET_PAR: ; ãáâ ­®¢¨âì ¯ à ¬¥âàë ­®á¨â¥«ï
LD A,drv_type ; ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; ¡¨â 4..7 - ⨯ ãáâனá⢠
; 0 - ¤¨áª®¢®¤
; 6 - ram-disk
; 8 - HDD
; C - CD-ROM
LD L,n_secs ; L - ç¨á«® ᥪâ®à®¢ (­  楫¨­¤à)
LD H,n_heads ; H - ç¨á«® £®«®¢®ª
LD DE,n_cyls ; DE - ª®«¨ç¥á⢮ 樫¨­¤à®¢
LD IX,sec_size ; IX - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
LD B,ext_par ; B - ¤®¯. ¯ à ¬¥âàë
; ¤«ï ¤¨áª¥â ¡¨â7 - ⨯ 720/1.44
; ¤«ï ATAPI ⮫쪮 ¯ à ¬¥âà B à ¡®â ¥â - ãáâ ­®¢¨âì HDD_INIT_TABLE.MediaParameters ; [ ] media changed
LD C,#59 ;
RST ToBIOS ; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥
;
DRV_VERSION: ; ¯®«ãç¨âì ¢¥àá¨î ¤à ©¢¥à  ¤¨áª®¢®© ¯®¤á¨á⥬ë
LD C,#5A ;
RST ToBIOS ; CF - áâ à ï ¢¥àá¨ï BIOS
; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; DE - ­®¬¥à ¢¥àᨨ.
;
; !TODO
LD C,#5B ; § à¥§¥à¢¨à®¢ ­ 
;
; !TODO
LD C,#5C ; § à¥§¥à¢¨à®¢ ­ 
;
; !TODO
LD C,#5D ; § à¥§¥à¢¨à®¢ ­ 
;
DRV_EXTENDED: ; à áè¨à¥­­ë© ­ ¡®à ¯®¤ä㭪権, ¬®¦¥â ®â«¨ç âìáï ¤«ï à §­ëå ãáâனáâ¢
LD B,sub_func ; ­®¬¥à ¯®¤ä㭪樨
LD C,#5E ; § à¥§¥à¢¨à®¢ ­ 
RST ToBIOS ; NC - ­®à¬ «ì­®¥ § ¢¥à襭¨¥
; <20>®¤ä㭪樨:
; „«ï CD-ROM:
; 0 - Eject
; 1 - Close tray
; 2 - ATAPI_REQUEST_SENSE.
; ¢å®¤: A' - áâà ­¨æ  ¡ãä¥à , ¥á«¨ ¡ãä¥à ¢ âà¥â쥬 á«®â¥
DRV_LIST: ; !TODO ¤®¡ ¢¨âì ®¯¨á ­¨¥ ¨ ¯®¤¤¥à¦ªã RAM DRIVE ¢ í⮩ ä㭪樨
LD C,#5F ;
RST ToBIOS ;
;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;