mirror of
https://github.com/Tolik-Trek/Sprinter-BIOS.git
synced 2026-06-15 01:11:47 +03:00
842 lines
19 KiB
ActionScript
842 lines
19 KiB
ActionScript
;
|
||
_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
|
||
;
|
||
|
||
|
||
|