Sprinter-BIOS/src/bios/backup/EXP_FN.as
Anatoliy Belyanskiy 0271ac3713 Creation
2023-06-12 05:56:21 +10:00

842 lines
19 KiB
ActionScript
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.

;
_mInfoALIGN 256,0
TAB_FNS: ; !FIXIT ¯®¯à ¢¨âì ¢ ¤®ª¥ ­ §¢ ­¨ï ä㭪権, ç áâì ­¥ ᮢ¯ ¤ ¥â
; 8x
/* 80 */ DW LP_OPEN_S ; ®âªàë⨥ ®ª­ 
/* 81 */ DW LP_PRINT_ALL ; ¯¥ç âì ᨬ¢®«  ¢ ®ª­®
/* 82 */ DW LP_PRINT_SYM ; ¯¥ç âì ᨬ¢®«  ¡¥§  âà
/* 83 */ DW LP_PRINT_ATR ; ¯¥ç âì ⮫쪮  âਡãâ 
/* 84 */ DW LP_SET_PLACE ; ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
/* 85 */ DW LP_PRINT_LINE ; ¯¥ç âì áâப¨ ¤«¨­®© B
/* 86 */ DW LP_PRINT_LINE2 ; ¯¥ç âì áâப¨ -//- ¡¥§  âਡã⮢
/* 87 */ DW LP_PRINT_LINE3 ; ¯¥ç âì áâப¨ ¤«¨­®© B ¤® D
/* 88 */ DW LP_PRINT_LINE4 ; ¯¥ç âì áâப¨ -//- ¡¥§  âਡã⮢
/* 89 */ DW LP_CLS_WIN
/* 8A */ DW LP_SCROLL_UD
/* 8B */ DW LP_PRINT_LINE5
/* 8C */ DW LP_PRINT_LINE6
/* 8D */ DW LP_CLS_WIN2
/* 8E */ DW LP_GET_PLACE
/* 8F */ DW FN_TURBO
; 9x
/* 90 */ DW EMM.GetMemSize ; ­¥à §àãè î饥 ®¯à¥¤¥«¥­¨¥ ®¡ê¥¬  Ž.
/* 91 */ DW EMM.InitMem ; ¨­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨
/* 92 */ DW EMM.GetMemRMD ; ¯®«ãç¨âì ¡«®ª ¯ ¬ï⨠¤«ï à ¬¤¨áª 
/* 93 */ DW EMM.FreeMemRMD ; ®á¢®¡®¤¨âì ¡«®ª ¯ ¬ï⨠ࠬ¤¨áª 
/* 94 */ DW EMM.GetMemPageRMD ; ¯®«ãç¨âì ­®¬¥àa áâà ­¨æ RAM-Disk
/* 95 */ DW EMM.GetMemPageNext ; ¯®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã
/* 96 */ DW EMM.GetBanksPorts ; ¯®«ãç¨âì  ¤à¥á  ¯®à⮢
/* 97 */ DW EMM.CheckColdInit ; ¯à®¢¥àª  ­  宫®¤­ë© áâ àâ ¨ ¨­¨æ¨ «¨§ æ¨¨ ¥á«¨ ®­ ;????? ­ã¦­  «¨ ª ª API?
/* 98 */ DW RAMD_CALC_PAGE ; Fn 98h ;?????
/* 99 */ DW SET_DISK_TYPE ; ;?????
/* 9A */ DW DISK_REDIR ; ;?????
/* 9B */ DW FN_NO ;GET_RAMD_NUM ; ¯®«ãç¨âì ­®¬¥à ram disk ¯® ¥£® block id
/* 9C */ DW FN_NO ;
/* 9D */ DW EMM.DivMemBlocks ; à §¤¥«¥­¨ï ¡«®ª  ­  ¤¢ .
/* 9E */ DW EMM.MergeMemBlocks ; ᫨ﭨ¥ ¤¢ãå ¡«®ª®¢
/* 9F */ DW EMM.FullInit ; ¨­¨æ¨ «¨§ æ¨ï ¢á¥© ¯ ¬ïâ¨, á¨á⥬­ëå ¯¥à¥¬¥­­ëå
; Ax
/* A0 */ DW PIC_FN0 ; ŽŠ<EFBFBD>ˆ ŽŠ<EFBFBD> - Fn 0A0h
/* A1 */ DW PIC_FN1 ; ˆ ŽŠ
/* A2 */ DW PIC_FN2 ; Ž ˆ<EFBFBD>ˆˆ COPY
/* A3 */ DW PIC_FN3 ; Ž ˆ<EFBFBD>ˆˆ FILL
/* A4 */ DW PIC_FN4 ; Ž <EFBFBD>ˆ<EFBFBD>
/* A5 */ DW PIC_FN5 ; <EFBFBD>ŽŠ RGMOD
/* A6 */ DW PIC_FN6 ; A - page_pal, E - ­®¬¥à ¯ «¨âàë, B - ⨯ ¯ «¨âàë
/* A7 */ DW PIC_FN7 ; <EFBFBD>¨á®¢ ­¨¥ «¨­¨¨ ®¤­®£® 梥â 
/* A8 */ DW PIC_FN8 ; <EFBFBD>¨á®¢ ­¨¥ à §­®æ¢¥â­®© «¨­¨¨
/* A9 */ DW PIC_FN9 ; ­¥â
/* AA */ DW PIC_FN10 ; ­¥â
/* AB */ DW PIC_FN11 ; ­¥â
/* AC */ DW PIC_FN12 ; ­¥â
/* AD */ DW PIC_FN14 ; ­¥â
/* AE */ DW PIC_FN14 ; ­¥â
/* AF */ DW PIC_FN15 ; ­¥â
; Bx
/* B0 */ DW WIN_OPEN ; ®âªàë⨥ ®ª­  ¯® ®¯¨á â¥«î
/* B1 */ DW WIN_CLOSE ; § ªàë⨥ ®ª­ 
/* B2 */ DW WIN_COPY ; á®åà ­¥­¨¥ ⥪á⮢®£® ®ª­  ¢ ¯ ¬ïâ¨
/* B3 */ DW WIN_RESTORE ; ¢®ááâ ­®¢«¥­¨¥ ⥪á⮢®£® ®ª­  ¨§ ¯ ¬ïâ¨
/* B4 */ DW WIN_GET_SYM ; ¢§ïâì ᨬ¢®«
/* B5 */ DW WIN_PUT_SYM ; ¯®«®¦¨âì ᨬ¢®«
/* B6 */ DW WIN_SET_ZG ; § £à㧪  §­ ª®£¥­¥à â®à 
/* B7 */ DW WIN_MOVE ; ¯¥à¥¬¥áâ¨âì ®ª­®
/* B8 */ DW WIN_GET_ZG ; ¯®«ãç¨âì §­ ª®£¥­¥à â®à
/* B9 */ DW FN_NO
/* BA */ DW FN_NO
/* BB */ DW FN_NO
/* BC */ DW FN_NO
/* BD */ DW FN_NO
/* BE */ DW FN_NO
/* BF */ DW FN_NO
; Cx
/* C0 */ DW EMM.GetMemSize ; ¯®«ãç¨âì ¤ ­­ë¥ ®¡ ®¡ê¥¬¥ ¯ ¬ï⨠¨ ª®«-¢® ᢮¡. áâà.
/* C1 */ DW EMM.InitMem ; ¨­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨
/* C2 */ DW EMM.GetMem ; ¯®«ãç¨âì ¡«®ª ¯ ¬ïâ¨
/* C3 */ DW EMM.FreeMem ; ®á¢®¡®¤¨âì ¡«®ª ¯ ¬ïâ¨
/* C4 */ DW EMM.GetMemPage ; ¯®«ãç¨âì ­®¬¥à áâà ­¨æë ¢ ¡«®ª¥ ¯ ¬ïâ¨
/* C5 */ DW EMM.GetMemBlkPages ; ¯®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª  ¯ ¬ïâ¨
/* C6 */ DW EMM.GetBanksPorts ; ¯®«ãç¨âì  ¤à¥á  ¯®à⮢ ®ª®­
/* C7 */ DW EMM.GetMemPageNext ; ¯®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã ¡«®ª 
/* C8 */ DW BLK_RD_WR ; äã­ªæ¨ï ç⥭¨ï/§ ¯¨á¨ ¢ ¡«®ª ¯ ¬ïâ¨
/* C9 */ DW BLK_TO_RAMD ; ­ §­ ç¨âì ¡«®ª RAM-Disk-ã
/* CA */ DW RAMD_CLEAR ; ®á¢®¡®¤¨âì RAM-Disk
/* CB */ DW RAMD_TO_DRV ; ­ §­ ç¨âì RAM-Disk ­  ¤¨áª®¢®¤
/* CC */ DW FDD_TO_DRV ; ­ §­ ç¨âì REAL_DRIVE ­  ¤¨áª®¢®¤
/* CD */ DW HDD_TO_DRV ; ­ §­ ç¨âì HDD ­  ¤¨áª®¢®¤
/* CE */ DW GET_RAMD_ST ; ¯®«ãç¨âì ⨯ ­ §­ ç¥­¨ï ­  RAM-Disk
/* CF */ DW GET_DRV_ST ; ¯®«ãç¨âì ⨯ ­ §­ ç¥­¨ï ­  ¤¨áª®¢®¤
; Dx
/* D0 */ DW FN_LIB
/* D1 */ DW FN_LIB
/* D2 */ DW FN_LIB
/* D3 */ DW FN_LIB
/* D4 */ DW FN_LIB
/* D5 */ DW FN_LIB
/* D6 */ DW FN_LIB
/* D7 */ DW FN_LIB
/* D8 */ DW FN_LIB
/* D9 */ DW FN_LIB
/* DA */ DW FN_LIB
/* DB */ DW FN_LIB
/* DC */ DW FN_LIB
/* DD */ DW FN_LIB
/* DE */ DW FN_LIB
/* DF */ DW FN_LIB
; Ex
/* E0 */ DW LP_PRINT_LINE_DIR
/* E1 */ DW FN_NO
/* E2 */ DW FN_NO
/* E3 */ DW FN_NO
/* E4 */ DW FN_NO
/* E5 */ DW FN_NO
/* E6 */ DW FN_NO
/* E7 */ DW FN_NO
/* E8 */ DW FN_SEND_BYTE ; ¯®á« âì ¡ ©â ç¥à¥§ PC_link
/* E9 */ DW FN_RESEIVE_B ; ¯à¨­ïâì ¡ ©â ç¥à¥§ PC_link
/* EA */ DW FN_KBD_OUT ; ¯®á« âì ¡ ©â ¢ ª« ¢¨ âãàã
/* EB */ DW FN_NO
/* EC */ DW FN_NO
/* ED */ DW FN_CRIPT
/* EE */ DW AY8910
/* EF */ DW FN_VERSION
; Fx
/* F0 */ DW SPRINTER_1
/* F1 */ DW SPRINTER_2
/* F2 */ DW FN_SINC
/* F3 */ DW SPRINTER_ALL
/* F4 */ DW DCP_FN0
/* F5 */ DW CMOS_TEST
/* F6 */ DW CMOS_RD
/* F7 */ DW CMOS_WR
/* F8 */ DW SET_ROM_PAGES
/* F9 */ DW READ_PORTS ; !TODO
/* FA */ DW WRITE_PORTS ; !TODO
/* FB */ DW GOTO_SPEC ; Goto Spectrum!
/* FC */ DW FN_NO
/* FD */ DW FN_RESET
/* FE */ DW FN_NO ; SAVE_AUTOSTART
/* FF */ DW FN_VERSION
EXP_FNS: ; 室 ¢ äã­ªæ¨î ¨§ DOS
POP AF
CALL APIfrom80toFF ; !TEST new_api
CALL DOS_ON
JP EXP_FNS_RET
;************************************
; 室 ¢ äã­ªæ¨î ¯® RST18 ¨ RST8
EXP_FNS_RST18:
BIT 7,C
JR NZ,APIfrom80toFF ; !TEST new_api
;.APIfrom40to5F:
BIT 6,C
RES 6,C
JP NZ,EXP_HDD_NEW
SCF
RET
;**********************************
;-----------------------------------------------------------------------
FN_CRIPT:
DEC B
SCF
RET NZ
LD HL,(ROM_NUMBER.part1) ;rdlow-ok
LD A,(ROM_NUMBER.part2) ;rdlow-ok
LD BC,(BoardID.start) ;rdlow-ok
LD DE,(BoardID.end) ;rdlow-ok
AND A
RET
; BoardID_start old address #312A
; BoardID_end old address #312D
;-----------------------------------------------------------------------
;**********************************
;!!!!! £«ï­ãâì
; START_DI:
; PUSH AF
; LD A,R
; JP PE,XX_DI
; LD A,R
; XX_DI: LD A,#80
; JP PE,XX_DI2
; XOR A
; XX_DI2: LD R,A
; DI
; POP AF
; RET
; END_DI: PUSH AF
; LD A,R
; BIT 7,A
; JR Z,XX_DI3
; EI
; POP AF ; PE
; RET
; XX_DI3: DI
; POP AF ; PO
; RET
;**********************************
APIfrom80toFF:
PUSH HL
LD L,C
SLA L
LD H,high TAB_FNS
LD C,(HL) // LD A,(HL)
INC L
LD H,(HL)
LD L,C // LD L,A
EX (SP),HL
RET
;! ! ! ! ! ! ! !
; !TODO ᤥ« âì
READ_PORTS:
WRITE_PORTS:
FN_NO: SCF
RET
;! ! ! ! ! ! ! !
; ????? ¬®¦¥â ¯¥à¥¤¥« âì ¢å®¤?
; CALL from 3D13h!
; in A - page, B - new ROM-page
; out B - old ROM-page
SET_ROM_PAGES:
EX AF,AF'
LD A,CNF_0
OUT (SYS_PORT.ON),A
LD C,SLOT2 ; ¯®«ãç¨âì áâà ­¨æã
IN D,(C)
LD A,DCP_PAGE ; ãáâ ­®¢¨âì ­®¢ãî
OUT (C),A
LD A,(#8000) ; á®åà ­¨âì â® çâ® ¡ë«®
LD L,A
LD A,(#8200)
LD H,A
EX AF,AF' ; áâà ­¨æ 
LD (#8000),A ; ãáâ ­®¢¨âì ¯®àâ ROM TR-DOS
LD (#8200),A
EX AF,AF'
LD A,B
LD BC,0
EX AF,AF'
IN A,(C)
EX AF,AF'
OUT (C),A ; ãáâ ­®¢¨âì ­®¢ë© TR-DOS
EX AF,AF'
LD B,A
LD A,L
LD (#8000),A ; ¢¥à­ãâì ¯®àâ
LD A,H
LD (#8200),A ; ¢¥à­ãâì ¯®àâ
LD C,SLOT2
LD A,SYS_PAGE
OUT (C),A
LD A,(SYS_PAGE.CONFIG_DE-#4000)
OUT (C),D ; ¢¥à­ãâì áâà ­¨æã
OUT (SYS_PORT.ON),A
AND A
RET
;TAB_SIZE EQU $-TAB_FNS
;*****************************************
;*****************************************
; ã­ªæ¨ï ¤¥è¨äà â®à  ¯®à⮢.
; HL -  ¤à¥á
; DE - ¬ áª  - 0 ¨§¬¥­ï¥¬ë¥ ¡¨âë, 1 ­¥¨§¬¥­ï¥¬ë¥
; B - ¯®àâ
;
; ALL STACKS, DI
;*****************************************
DCP_FN0: ; !FIXIT § ¯®¬¨­ âì âãâ á®áâ®ï­¨¥ ¯à¥à뢠­¨© ¨ ¢ëàã¡ âì
AND A
JP Z,PORTS_INIT
PUSH IX
LD IX,.RET_DCP_FN0
IN A,(SLOT3)
EX AF,AF'
LD A,DCP_PAGE
OUT (SLOT3),A
JR DCP_FN0M
.RET_DCP_FN0:
EX AF,AF'
OUT (SLOT3),A
AND A
POP IX
; !FIXIT ¢®ááâ ­ ¢«¨¢ âì ¯à¥à뢠­¨ï
RET
;-----------------------------------------------------------------------;
; ã­ªæ¨ï ¤¥è¨äà â®à  ¯®à⮢.
; HL -  ¤à¥á
; DE - ¬ áª  - 0 ¨§¬¥­ï¥¬ë¥ ¡¨âë, 1 ­¥¨§¬¥­ï¥¬ë¥
; B - ¯®àâ
DCP_FN0M:
LD A,L
AND E
LD L,A
LD A,H
AND D
; AND #3F
OR #C0
LD H,A
LD A,D
OR #C0
LD D,A
.loop: LD (HL),B
LD A,L ; § ¬ áª¨à®¢ âì ­¥¨§¬¥­ï¥¬ë¥ ¡¨âë 1-¬¨
OR E ; ¤«ï ¯à®å®¦¤¥­¨ï ¯¥à¥­®á 
INC A ; 㢥«¨ç¨âì  ¤à¥á
JR Z,.carry ; ¢®§­¨ª ¯¥à¥­®á
OR E
XOR E ; ®¡­ã«¨âì ­¥¨§¬¥­ï¥¬ë¥ ¡¨âë
LD C,A ; ¨§¬¥­ï¥¬ ï ç áâì
LD A,L
AND E ; ¢ë¤¥«¨âì ­¥¨§¬¥­ï¥¬ãî
OR C
LD L,A ; ¤®¡ ¢¨âì ¨§¬¥­ï¥¬ãî ç áâì
JR .loop ; 横«
.carry: ; A = 0
; OR E
; XOR E
; LD C,A
LD A,L ; § ¡¨âì ¨§¬¥­ï¥¬ë¥ ¡¨âë ­ã«ï¬¨
AND E
; OR C
LD L,A
LD A,H ; § ¬ áª¨à®¢ âì ­¥¨§¬¥­ï¥¬ë¥ ¡¨âë 1-¬¨
OR D ; ¤«ï ¯à®å®¦¤¥­¨ï ¯¥à¥­®á 
INC A ; 㢥«¨ç¨âì  ¤à¥á
JR Z,.exit
OR D
XOR D
LD C,A ; ¨§¬¥­ï¥¬ ï ç áâì
LD A,H
AND D ; ¢ë¤¥«¨âì ­¥¨§¬¥­ï¥¬ãî
OR C
LD H,A ; ¤®¡ ¢¨âì ¨§¬¥­ï¥¬ãî ç áâì
JR .loop
.exit: JP (IX)
;-----------------------------------------------------------------------;
; RAM-Disk A, BLK - B
BLK_TO_RAMD:
CP SYS_PAGE.RAMD_KEYS.NUM
CCF
RET C
PUSH HL
LD L,A
IN A,(SLOT2)
LD C,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD A,L
LD HL,SYS_PAGE.RAMD_KEYS-#4000
ADD A,L
LD L,A
LD A,(HL) ; ª«îç ¡«®ª 
AND A
JR NZ,BLK_BUSY ; RAM-Disk § ­ïâ - ®è¨¡ª 
LD (HL),B
LD A,C
OUT (SLOT2),A
LD A,B
AND A
POP HL
RET
BLK_BUSY:
LD A,C
OUT (SLOT2),A
SCF
POP HL
RET
; RAM-Disk A
RAMD_CLEAR:
CP SYS_PAGE.RAMD_KEYS.NUM
CCF
RET C
PUSH HL
LD L,A
IN A,(SLOT2)
LD C,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD A,L
LD HL,SYS_PAGE.RAMD_KEYS-#4000 ; RAM-Disk ᢮¡®¤¥­
ADD A,L
LD L,A
LD B,A ; § ¯®¬­¨âì 㤠«ï¥¬ë© à ¬¤¨áª
LD A,(HL)
AND A
JR Z,BLK_BUSY ; ¢®§¢à â á ®è¨¡ª®©
LD (HL),0
LD A,C
OUT (SLOT2),A
AND A
POP HL
RET
; RAM-Disk A, DRV - B
RAMD_TO_DRV:
CP SYS_PAGE.RAMD_KEYS.NUM
CCF
RET C
LD C,A
LD A,B
CP 4
CCF
RET C
LD HL,SYS_PAGE.DISK_TYPE-#4000
LD L,B
IN A,(SLOT2)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD A,C
ADD A,4
LD (HL),A
LD A,B
OUT (SLOT2),A
AND A
RET
; Disk A, DRV - B
FDD_TO_DRV:
CP 4
CCF
RET C
LD C,A
LD A,B
CP 4
CCF
RET C
LD HL,SYS_PAGE.DISK_TYPE-#4000
LD L,B
IN A,(SLOT2)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD (HL),C
LD A,B
OUT (SLOT2),A
AND A
RET
; HDD A, DRV - B
HDD_TO_DRV:
AND 0FH
LD C,A
LD A,B
CP 4
CCF
RET C
LD HL,SYS_PAGE.DISK_TYPE-#4000
LD L,B
IN A,(SLOT2)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD A,C
ADD A,40H
LD (HL),A
LD A,B
OUT (SLOT2),A
AND A
RET
; 室:
; A - RAM Disk ID
; ë室:
; A - Number (0..15)
; GET_RAMD_NUM:
; EX AF,AF'
; IN A,(SLOT2)
; EX AF,AF'
; LD BC,SYS_PAGE * 256 + SLOT2
; OUT (C),B
; LD HL,SYS_PAGE.RAMD_KEYS-#4000
; LD BC,SYS_PAGE.RAMD_KEYS.NUM
; CPIR
; EX AF,AF'
; OUT (SLOT2),A
; EX AF,AF'
; SCF
; RET PE
; DEC L
; LD A,L
; SUB low SYS_PAGE.RAMD_KEYS
; RET
; ­  ¢ë室¥ ¯à¨ = 0 ¤®«¦¥­ ¡ëâì ãáâ ­®¢«¥­ ä« £ Z
GET_RAMD_ST: ; DSS ­ ¤¥¥âáï, çâ® íâ  äã­ªæ¨ï ­¥ £à®å ¥â DE
CP SYS_PAGE.RAMD_KEYS.NUM
CCF
RET C
PUSH BC
LD HL,SYS_PAGE.RAMD_KEYS-#4000
ADD A,L
LD L,A
IN A,(SLOT2)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD C,(HL)
LD A,B
OUT (SLOT2),A
LD A,C
POP BC
AND A
RET
GET_DRV_ST:
CP 4
CCF
RET C
PUSH BC
LD HL,SYS_PAGE.DISK_TYPE-#4000
ADD A,L
LD L,A
IN A,(SLOT2)
LD B,A
LD A,SYS_PAGE
OUT (SLOT2),A
LD C,(HL)
LD A,B
OUT (SLOT2),A
LD A,C
POP BC
AND A
RET
;***********************************************
; ????? çñ §  å¥à­ï ¯à® ¡¥©á¨ª? âãâ ­¥ â® ­¨¦¥
;
; CMOS - 35h,36h - ãáâ ­®¢ª¨ ¡¥©á¨ª 
;
;***********************************************
CMOS_EMU_WR:
PUSH DE
LD C,SLOT3
IN B,(C)
LD E,SYS_PAGE
OUT (C),E
LD E,D
LD D,#FF
LD (DE),A
OUT (C),B
POP DE
RET
; § ¯¨áì ¢ CMOS
CMOS_WR:
CALL CMOS_TEST
JR C,CMOS_EMU_WR
XWR_CMOS:
LD BC,CMOS.Port.Address.Write
OUT (C),D
LD BC,CMOS.Port.Data.Write
OUT (C),A
RET
CMOS_EMU_RD:
PUSH DE
LD C,SLOT3
IN B,(C)
LD E,SYS_PAGE
OUT (C),E
LD E,D
LD D,#FF
LD A,(DE)
OUT (C),B
POP DE
RET
; ç⥭¨¥ ¨§ CMOS
CMOS_RD:
CALL CMOS_TEST
JR C,CMOS_EMU_RD
XRD_CMOS:
LD BC,CMOS.Port.Address.Write
OUT (C),D
LD BC,CMOS.Port.Data.Read
IN A,(C)
RET
CMOS_TEST:
PUSH DE
PUSH BC
PUSH AF
LD D,3FH ; !HARDCODE
CALL XRD_CMOS
LD E,A
CPL
CALL XWR_CMOS
CALL XRD_CMOS
CPL
CP E
JR NZ,CMOS_ERR
LD A,E
CALL XWR_CMOS
POP AF
POP BC
POP DE
AND A
RET
CMOS_ERR:
LD A,E
CALL XWR_CMOS
POP AF
POP BC
POP DE
SCF
RET
;
;DE - ªã¤  - áâà ­¨æ  ®âªàëâ !
;BC - ᪮«ìª®
;HL - ¡ãä¥à
;
; PUSH BC
; LD H,D
; LD L,E
; ADD HL,BC
; JR C,CUT
; LD HL,BUFER
; LDIR
; POP BC
; RET
;CUT:
; PUSH HL
; LD A,L
; LD L,C
; LD C,A
; LD A,H
; LD H,B
; LD B,A
;
; AND A
; SBC HL,BC
; LD B,H
; LD C,L
; LD HL,BUFER
; LDIR
; CALL NEXT_BANK
; POP BC
; LD A,B
; OR C
; JR Z,LAB
; LDIR
;LAB: POP BC
; RET
;
FN_TURBO:
CP 2
JR Z,.FN_TB_ONOFF
CP 3
JR Z,.FN_TB_ONOFF
CP #12
JR Z,.SET_FDD_720
CP #13
JR Z,.SET_FDD_1440
SCF
RET
;!FIXIT ¬¥­ï¥¬ ¯«®â­®áâì - ¬¥­ï¥¬ ¢ á¨á⥬­®© áâà ­¨æ¥ ¨­äã ®¡ í⮬
.SET_FDD_720:
LD A,1
OUT (#BD),A ; !HARDCODE
AND A
RET
;!FIXIT ¬¥­ï¥¬ ¯«®â­®áâì - ¬¥­ï¥¬ ¢ á¨á⥬­®© áâà ­¨æ¥ ¨­äã ®¡ í⮬
.SET_FDD_1440:
LD A,#21
OUT (#BD),A ; !HARDCODE
AND A
RET
.FN_TB_ONOFF:
LD C,A
IN A,(SLOT3)
LD B,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD DE,(SYS_PAGE.CONFIG_DE)
LD A,E
AND #FC
OR C
LD E,A
OUT (SYS_PORT.ON),A
LD (SYS_PAGE.CONFIG_DE),DE
LD A,B
OUT (SLOT3),A
AND A
RET
; à §¤¥«¨âì ¡«®ª ¯ ¬ï⨠­  ¤¢  ¡«®ª 
; A - ¡«®ª, B - ¤«¨­  ¯¥à¢®£® ¡«®ª  ¯®á«¥ à §¤¥«¥­¨ï
; ¢ë室: A - ¡«®ª 1, B - ¡«®ª 2
EMM.DivMemBlocks:
INC B
DEC B
SCF
RET Z
DEC B
LD E,A
CALL EMM.GetMemPage ; ¯®«ãç¨âì ­®¬¥à áâà ­¨æë ¡«®ª 
RET C
LD D,A
IN A,(SLOT2)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000)
LD L,D
LD A,(HL)
LD (HL),0FFH
LD B,A
EX AF,AF'
OUT (SLOT2),A
LD A,E
AND A
RET
; ᫨âì ¤¢  ¡«®ª  ¯ ¬ï⨠¢ ®¤¨­
; - ¡«®ª 1, B - ¡«®ª 2
; ¢ë室: - ¡«®ª
EMM.MergeMemBlocks:
LD E,A
IN A,(SLOT2)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
LD H,high (SYS_PAGE.RAMD_FAT - #4000)
LD L,E
LD C,B
LD B,0
EMM_ADD_L:
LD A,(HL)
AND A
JR Z,EMM_ADD_ERR
CP 0FFH
JR Z,EMM_ADD_NEXT
LD L,A
DJNZ EMM_ADD_L
EMM_ADD_ERR:
EX AF,AF'
OUT (SLOT2),A
SCF
RET
EMM_ADD_NEXT:
LD A,C
AND A
JR Z,EMM_ADD_ERR
LD (HL),A
EX AF,AF'
OUT (SLOT2),A
AND A
LD A,E
RET
;