Sprinter-Core/src/bios/exp/EXP.asm
Anatoliy Belyanskiy dc8f5f37ac some tests with 5x
2023-06-25 04:55:29 +10:00

1600 lines
35 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.

;
;*************************************************************
;
; EXPANSION VER 3.00 (C) Peters Plus Ltd.
;
;*************************************************************
;***************************************
;*********** BEGIN EXPANSION ***********
;***************************************
; ‚室 ¯® RESET
EXP_START:
JP GLOBAL_RESET
;---------------------------------------
ROM_NUMBER:
.part1: DW MotherBoardID ; MotherBoardID
.part2: DB 0
;---------------------------------------
;---------------------------------------
; BoardID:
; .start: WORD BoardID_start ; BoardID_start
; .end: WORD BoardID_end ; BoardID_end
;---------------------------------------
;=======================================
BLOCK 8-$,0 ; first on/off EXPANSION
;¯à®£à ¬¬  ¤«ï ¢ë§®¢  BIOS ç¥à¥§ RST8 ¨§ RAM0
EXP_FNS_2_RET:
PUSH AF
LD A,ROM.BIOS
OUT (SYS_PORT.RAM),A
POP AF
JR RST_18_1
;=======================================
;=======================================
BLOCK #10-$,0
RST_10:
; JR RST10
;=======================================
;=======================================
BLOCK #18-$,0
; RST18h - MAIN BIOS functions
JP EXP_FNS_RST18
RST_18_1:
CALL EXP_FNS_RST18
JR EXP_FNS_2_RET
;=======================================
;=======================================
BLOCK #20-$,0
RST_20:
;=======================================
;=======================================
BLOCK #28-$,0
RST_28:
;=======================================
;=======================================
BLOCK #30-$,0
RST_30:
;=======================================
;=======================================
BLOCK #38-$,0
; INTERUPT Point
RST38:
EI
RETI
;RST10:
; CALL_48 10h
; RET
;=======================================
;=======================================
_mInfoALIGN #10,0
;TABLE_X EQU #A0 ; any adress < #C0 with mask %xxxx0000
; BLOCK TABLE_X-$
TABLE_X: ; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a
.v0: DB 00101000b ; "0"
.v1: DB 10111101b ; "1"
.v2: DB 00110010b ; "2"
.v3: DB 00110100b ; "3"
.v4: DB 10100101b ; "4"
.v5: DB 01100100b ; "5"
.v6: DB 01100000b ; "6"
.v7: DB 00111101b ; "7"
.v8: DB 00100000b ; "8"
.v9: DB 00100100b ; "9"
.vA: DB 00100001b ; "A"
.vB: DB 11100000b ; "B"
.vC: DB 01101010b ; "C"
.vD: DB 10110000b ; "D"
.vE: DB 01100010b ; "E"
.vF: DB 01100011b ; "F"
;=======================================
RESTARTS EQU #FFE0 ; !FIXIT ¢ë­¥á⨠¢ SP2000.inc
GLOBAL_RESET:
DI
IM 1
LD HL,RESTARTS
LD DE,RESTARTS_PROG
LD B,RESTARTS_PROG.Size
.compare:
LD A,(DE)
CP (HL)
JR NZ,NO_RESTART
INC HL
INC DE
DJNZ .compare
JP RESTARTS
;=======================================
_mInfoBLOCK #66-$,0
NMI_Point:
; १¥à¢ 3 ¡ ©â  ¤«ï ª®¬ ­¤ë JP
;NOP
;NOP
;NOP
RETN
;=======================================
;SET_BIOS_TO_RAM: ; ¯à®£à ¬¬  à ¡®â ¥â ­   ¤à¥á¥ 0C000h
;
; LD SP,#C0C0
; LD A,#E0
; LD C,PAGE3
; IN B,(C)
; CALL SET_ROM_PAGES+#C000
; JP NO_SUMX_EQ
;**********************************
;BEEP:
; PUSH HL
; PUSH DE
; PUSH BC
; PUSH AF
; PUSH IX
;
; LD HL,BEEP_RET
; PUSH HL
; LD HL,SW_ROM
; PUSH HL
; LD HL,03B5h
; PUSH HL
; LD HL,200
; LD D,H
; LD E,5
; JP SW_ROM
;BEEP_RET:
;
; POP IX
; POP AF
; POP BC
; POP DE
; POP HL
; RET
;=======================================
; BLOCK MEM_MAP.ID_Version-$,0 ;#C0-$,0
ID_Version:
dw bitstream_ver_hex ; Version of bitstream hex
ID_SPRINTER_length:
DB ID_SPRINTER.LENGTH
ID_SPRINTER:
DB 'Hardware v'
.bitstream_ver:
DB bitstream_ver_string,0
DB 'Sprinter',0
DB 0
.LENGTH EQU $-ID_SPRINTER
; Check for max length of string
ASSERT ID_SPRINTER.LENGTH < #20, 'ERROR! ID String is to long!'
;=======================================
; BLOCK #FC-$,0
BoardID:
.start: WORD BoardID_start ; BoardID_start
.end: WORD BoardID_end ; BoardID_end
; ;=======================================
; BLOCK #100-$,0
; RESTARTS EQU #FFE0 ; !FIXIT ¢ë­¥á⨠¢ SP2000.inc
; GLOBAL_RESET:
; DI
; IM 1
; LD HL,RESTARTS
; LD DE,RESTARTS_PROG
; LD B,RESTARTS_PROG.Size
; .compare:
; LD A,(DE)
; CP (HL)
; JR NZ,NO_RESTART
; INC HL
; INC DE
; DJNZ .compare
; JP RESTARTS
;-----[¯¥à¥å¢ â RESET ­¥ á®áâ®ï«áï]-----
;
NO_RESTART:
; á⥪ ¥éñ ­¥ ¨á¯®«ì§ã¥¬!!!
LD SP,IX ; á®åà ­¨âì §­ ç¥­¨¥ ¯¥à¥¤ ­­®¥ § £àã§ç¨ª®¬ ª®­äë (¥á«¨ áâ àâ ¯®á«¥ à¥á¥â )
; ¨­¨æ¨ «¨§ æ¨ï ¢­ãâ७­¨å ¯®à⮢ Z84C15 ¤«ï POST-Tester- 
LD A,5 ; COM port for Printer OUT
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#62
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#CF ; BITS I/O
OUT (Z84.PIO.Port_A.Command),A
XOR A
OUT (Z84.PIO.Port_A.Command),A
OUT (Z84.PIO.Port_A.Data),A ; PRINTER - PORT - all zeros
; -¨­¨æ¨ «¨§ æ¨ï á¨á⥬­ëå ¯®à⮢ Z84C15-
LD BC,#FF*256 + Z84.SYS.Control
XOR A
OUT (C),A ; 0 register - waits
INC C
OUT (C),A ; set 0 Waits
DEC C
LD A,3 ; 3-rd register - Misc.Control Register
OUT (C),A
INC C
XOR A ; !FIXIT ç¨â âì ¤®ªã ­  Z84, ¢ë¡à âì § ­ç¥­¨¥ ¤«ï A
LD A,1 ; !FIXIT ç¨â âì ¤®ªã ­  Z84, ¢ë¡à âì § ­ç¥­¨¥ ¤«ï A
OUT (C),A ; enable CS0, disable CS1
JP POST_TEST.START
; no boundary set!
;
; ==== POST PROCs =================
MODULE POST_TEST
START:
; *********************************
; ===== Point 0 =======
; *********************************
LD A,(TABLE_X.v0) ; ¢ëᢥâ¨âì "0" ;rdlow-ok
OUT (Z84.PIO.Port_A.Data),A
; ==== TEST RAM BUS ========
POST_1_RAM_BUS:
LD BC,0
LD HL,#C000
LD DE,#0055
.loop: LD (HL),E
INC L
LD (HL),D
DEC L
LD A,(HL)
XOR E
OR C
LD C,A
INC L
LD A,(HL)
XOR D
OR B
LD B,A
DEC L
DEC E
INC D
JR NZ,.loop
LD A,E
CPL
LD E,A
INC L
INC L
BIT 4,L
JR Z,.loop
LD A,B
OR C
JR Z,POST_1_OK ; no errors
; ERROR RAM BUS - CODE 'X'X'X'X...
.error:
LD HL,TABLE_X
.ERB_2:
BIT 0,C
JR Z,.ERB_1
; ¢ëᢥâ¨âì ­®¬¥à ®è¨¡®ç­®£® ¡¨â 
LD A,(HL)
AND %1101'1111 ; á § ¯ïâ묨
OUT (Z84.PIO.Port_A.Data),A
; ¯ ã§ 
LD DE,0
.pause:
DEC DE
LD A,D
OR E
JR NZ,.pause
; RRC BC
.ERB_1:
LD A,C
RRA
RR B
RR C
; ¡¥áª®­¥ç­ë© 横«
INC L
LD A,L
AND #AF
LD L,A
JR .ERB_2
; ************************************************
; ===== Point 1 ==============
; ************************************************
POST_1_OK:
LD A,(TABLE_X.v1) ; ¢ëᢥâ¨âì "1" ;rdlow-ok
OUT (Z84.PIO.Port_A.Data),A
; ===== TEST ADRESS BUS ======
POST_2_ADRESS_BUS:
LD HL,#C000
LD DE,#0000
.fill_mem: ; § ¯®«­¨âì ¯ ¬ïâì  ¤à¥á ¬¨
LD (HL),E
INC L
LD (HL),D
INC HL
INC DE
INC DE
BIT 7,H
JR NZ,.fill_mem
DEC HL
DEC DE
DEC DE
.check_mem: ; ¯à®¢¥à¨âì ᮢ¯ ¤¥­¨¥
LD A,(HL)
CP D
JR NZ,.error
DEC HL
LD A,(HL)
CP E
JR NZ,.error
DEC HL
DEC DE
DEC DE
LD A,H
CP #BF
JR NZ,.check_mem
JR POST_2_OK
; ®è¨¡ª   ¤à¥á  CODE: 'XXXX
.error:
.TSAB_4:
LD C,D
LD B,11011111b
LD IX,.TSAB_3
JR OUT_C_BYTE ; ¢ë¢¥á⨠áâ à訩 ¡ ©â á § ¯ï⮩
.TSAB_3:
LD C,E
LD B,0FFh
LD IX,.TSAB_4
JR OUT_C_BYTE ; ¢ë¢¥á⨠¬« ¤è¨© ¡¥§ § ¯ï⮩
; ===== OUT BYTE PROGRAM =======
OUT_C_BYTE:
LD A,C
RRCA
RRCA
RRCA
RRCA
AND #0F
OR TABLE_X
LD L,A
LD H,0
LD A,(HL)
AND B
OUT (Z84.PIO.Port_A.Data),A
EXX
LD DE,0
.LOOP_WTT2:
DEC DE
LD A,D
OR E
JR NZ,.LOOP_WTT2
LD A,#FF
OUT (Z84.PIO.Port_A.Data),A
.LOOP_WTT21:
DEC DE
LD A,D
OR E
JR NZ,.LOOP_WTT21
EXX
LD A,C
AND #0F
OR TABLE_X
LD L,A
LD A,(HL)
OUT (Z84.PIO.Port_A.Data),A
EXX
LD DE,0
.LOOP_WTT3:
DEC DE
LD A,D
OR E
JR NZ,.LOOP_WTT3
LD A,#FF
OUT (Z84.PIO.Port_A.Data),A
.LOOP_WTT31:
DEC DE
LD A,D
OR E
JR NZ,.LOOP_WTT31
EXX
JP (IX)
; ************************************************
; ===== Point 2 =========
; ************************************************
POST_2_OK:
LD A,(TABLE_X.v2) ;rdlow-ok
OUT (Z84.PIO.Port_A.Data),A ; ¢ë¢¥á⨠"2"
; ===== INIT DCP ========
POST_3_INIT_DCP:
LD HL,POST_3_OK ; INIT PORTS
JP DCP_INIT ; ¯à®æ¥¤ãà  ¨­¨æ¨ «¨§ æ¨¨ á ¢®§¢à â®¬ ¢ (HL)
; ®è¨¡®ª ­¥â
; ***********************************
; ===== Point 3 =========
; ***********************************
POST_3_OK:
LD A,(TABLE_X.v3) ; ¢ë¢¥á⨠"3" ;rdlow-ok
OUT (Z84.PIO.Port_A.Data),A
; ===== TEST RAM PAGES ==
IN A,(SLOT3)
EX AF,AF' ; § ¯®¬­¨âì
POST_4_PAGES:
LD B,0
.loop: LD A,#FF
LD I,A
LD A,B
OUT (SLOT3),A
LD A,0
LD I,A
IN A,(SLOT3)
CP B
JR NZ,.error ; ¥á«¨ ®è¨¡ª  ¯¥à¥ª«î祭¨ï Port- 
DJNZ .loop
EX AF,AF'
OUT (SLOT3),A ; ¢®ááâ ­®¢¨âì
JR POST_4_OK
; ***********************************
; ERROR Port CODE 'XX
.error: LD C,B
LD IX,.error_out_ret
.error_out_ret:
LD B,11011111b
JP OUT_C_BYTE
; ***********************************
; ===== Point 4 =========
; ***********************************
POST_4_OK:
LD A,(TABLE_X.v4) ;rdlow-ok
OUT (Z84.PIO.Port_A.Data),A ; ¢ëᢥâ¨âì "4"
;= ¯à®¢¥àª  ç¨áâ®âë è¨­ë ¤ ­­ëå Z84C15 =
POST_5_DATA_BUS:
LD B,0
.loop: IN A,(0)
CP #FF
; JR NZ,.error ;!!!!! ¯®á¬®âà¥âì
DJNZ .loop
JR POST_5_OK
; ERROR CODE '_'XX
.error:
LD C,A
.erb1:
LD IX,.erbr1
LD B,%1101'1111
JP OUT_C_BYTE
.erbr1:
LD A,%1101'1111
OUT (Z84.PIO.Port_A.Data),A
LD DE,0
.LOOP_WTT4:
DEC DE
LD A,D
OR E
JR NZ,.LOOP_WTT4
JR .erb1
; **********************************
; ===== Point 5 =========
; **********************************
POST_5_OK:
LD A,(TABLE_X.v5) ;rdlow-ok
OUT (Z84.PIO.Port_A.Data),A ; ¢ë¢¥á⨠"5"
; **********************************
; POST § ¢¥à襭
; **********************************
ENDMODULE
MODULE SET_CONFIG_ID
IN A,(SLOT3)
EX AF,AF' ; SAVE PAGE3
;NO_SUMX_EQ:
LD A,SYS_PAGE
OUT (SLOT3),A
;-------------[Save IX:IY]--------------
; Don't use IY before this point if it`s normal booting!!!
LD IX,0
AND A
ADD IX,SP ; ¢®ááâ ­®¢¨âì §­ ç¥­¨¥ ¯¥à¥¤ ­­®¥ § £àã§ç¨ª®¬ ª®­äë (¥á«¨ áâ àâ ¯®á«¥ à¥á¥â )
;
; í⮬ ¬¥á⥠㠭 á IX:IY ¨§ Loader.asm
;
; „®â é¨«¨ ¤® á ¬¥âªã ®â «® ¤¥à , ¯®ª  ­¥ ¨á¯®«ì§ã¥âáï
; !TODO number from loader
; LD A,YL
; LD L,A
; LD A,YH
; LD H,A
; LD BC,#0107 ; !!!!! áà ¢­¨âì á 0107h ¢ë­¥á⨠à¥ä¥à¥­á®¬ âãâ ¨ ¢ loader.asm
; AND A ; ¥á«¨ à ¢­® - ¯à®è«  ¯¥à¥§ £à㧪 
; SBC HL,BC
;JR Z,set_config ;!TODO  ªâ¨¢ æ¨ï ¬¥âª¨ IX:IY ¨§ «® ¤¥à 
;!TEST
;LD IX,#FFFD ; LD IX,#FFFD ; !!!!! Sprinter-2 ¢ë­¥á⨠à¥ä¥à¥­á®¬ âãâ ¨ ¢ loader.asm
LD HL,#FEFF ; LD IX,#FEFF ; !!!!! Sprinter-2 ¢ë­¥á⨠à¥ä¥à¥­á®¬ âãâ ¨ ¢ loader.asm
;
set_config:
LD (SYS_PAGE.CONFIG_BYTE),HL ; á®åà ­¨âì ­®¬¥à ¯à®è¨¢ª¨
;LD (SYS_PAGE.CONFIG_BYTE),IX ; á®åà ­¨âì ­®¬¥à ¯à®è¨¢ª¨
;LD HL,(SYS_PAGE.CONFIG_BYTE) ; ¢§ïâì ­®¬¥à ¯à®è¨¢ª¨ ¢ HL
;
LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
LD (SYS_PAGE.CONFIG_DE),A
EX AF,AF'
OUT (SLOT3),A ; Restore SLOT3
ENDMODULE
;*********************************
; ¯¥à¢ ï ¨­¨æ¨ «¨§ æ¨ï áâà ­¨æ:
; SLOT3=0, SLOT2=2, SLOT1=5, SLOT0=0
XOR A
OUT (RGADR),A
OUT (RGMOD),A
OUT (SLOT3),A
OUT (SLOT0),A
LD A,5
OUT (SLOT1),A
LD A,2
OUT (SLOT2),A
;*********************************
; Don't use stack (SP) before this point if it`s normal booting!!!
LD SP,#BFFE ; <20> ç «® ¨á¯®«ì§®¢ ­¨ï á⥪ !!!
PUSH HL ; á®åà ­¨âì ­®¬¥à ¯à®è¨¢ª¨
CALL PORTS_INIT ; ¨­¨æ¨ «¨§¨à®¢ âì ¯®àâë
XOR A
OUT (BorderColor),A
CALL EMM.CheckColdInit ; ¨­¨æ¨ «¨§ æ¨ï ¯ ¬ïâ¨
POP HL ; ª®­ä¨£ãà æ¨ï
JR Reset_Handler.start
; *************************************
; ‘ç¨â ¥¬, çâ® ¢å®¤ ¢ SETUP ¢á¥£¤  !!!
; *************************************
; LD A,H
; CP #FF
; JR NZ,NO_SETUP_1
; LD A,L
; JR NZ,NO_SETUP_2
MODULE Reset_Handler
start:
IN A,(SLOT3)
push af
;----[¯¥à¥å¢ â soft reset #EE port]-----
Check_EE_Port:
LD A,ACEX.RET_PORT
LD B,0
LD C,BIOS.SET_PORTS
CALL @ToBIOS_3D13 ; ¯¥à¥ãáâ ­®¢¨âì ¢­ãâà. ¯®àâ #EE
LD A,B
AND A
jr z,Check_Spec_Page
DI
OUT (SLOT3),A ; Set restart page
.After_Hard_Rst:
LD HL,(#FFF4) ; prog address
ld a,(#FFF0) ; PAGE0
OUT (SLOT0),A
LD A,(#FFF1) ; PAGE1
OUT (SLOT1),A
LD A,(#FFF2) ; PAGE2
OUT (SLOT2),A
LD A,(#FFF3) ; PAGE3
OUT (SLOT3),A
jp (HL)
;
;--[¯¥à¥å¢ â soft/hard reset #41 page]--
Check_Spec_Page:
LD A,Spec_Page
OUT (SLOT3),A
LD A,(#FFFE)
CP 'Z'
JR NZ,No_Reset_handlers
LD A,(#FFFF)
CP 'X'
JR NZ,No_Reset_handlers
LD A,(#FFF7)
CP 'R'
JR NZ,Spec_Page_handler_OK
LD A,(#FFF8)
CP 'S'
JR NZ,Spec_Page_handler_OK
LD A,(#FFF9)
CP 'T'
JR NZ,Spec_Page_handler_OK
XOR A
LD (#FFF7),A
JR Check_EE_Port.After_Hard_Rst
;---------------------------------------
No_Reset_handlers:
init_rom_address EQU #8200 ;!HARDCODE
ld hl,init_zx_roms
ld de,init_rom_address
ld bc,init_zx_roms.length
ldir
call init_rom_address
LD HL,#C000
LD DE,#C001
LD BC,#3FFF
LD (HL),C
LDIR ; § ¡¨âì FF- ¬¨
; áâ ¢¨¬ ¬¥âªã ¥á«¨ ¯à®£à㧨«¨ <20>‡“ ᯥªâà㬠
LD A,'X'
LD (DE),A
DEC DE
LD A,'Z'
LD (DE),A
;!FIXIT ᤥ« âì ¢ë¡®à £à㧨âì ¤ /­¥â <20>‡“ ᯥªâà㬠 ¯à¨ áâ àâ¥, [-------]
; ¥á«¨ ­¥â - â® ¢®âª­ãâì íâ®â ª®¤:
; LD HL,PROG_NO_ROM
; LD DE,#C000 + #38
; LD BC,PROG_NO_ROM.size
; LDIR
; LD HL,RAM_BIOS_PROG
; LD DE,#C000 + #08
; LD BC,RAM_BIOS_PROG.Length
; LDIR
;[---------------------------------------------------------------------]
Spec_Page_handler_OK:
pop af
OUT (SLOT3),A
ENDMODULE
;
;**************************************
;
MODULE Prepare_For_Setup
Set_ALL_Mode:
LD A,#FF
LD BC,Port_All_Mode
OUT (C),A
Set_Default_Screen:
CALL FN_SYNC.INT_DEF ; set default int
ld a,128+4 ; !HARDCODE
;ld c,BIOS.FN_SYNC
;RST_to_BIOS_18 ; set default vsync
CALL FN_SYNC ; set default vsync
Setup_to_RAM:
LD HL,Setup_Starter.Start
LD DE,COMPILE_ADDR.SETUP_STARTER
LD BC,Setup_Starter.Length
LDIR
; ­  á⥪ ª« ¤ñâáï  ¤à¥á ¢®§¢à â  ¨ ¤ «ìè¥ â é¨âáï ¢á直¬¨ ª®áâë«ï¬¨, ç⮡ ¢¥à­ãâìáï ­ § ¤
CALL Setup_Starter.Exec ; #C000
JP ZX_SPECTRUM_MODE ; ¢ë室 ¢ ०¨¬ zx spectrum
ENDMODULE
;***********************************
; ˆ­¨æ¨ «¨§ æ¨ï ¯®à⮢
PORTS_INIT:
; ¢ª«îç¨âì TURBO
LD A,CNF_PORT.TURBO.ON + CNF_PORT.CNF_0
OUT (SYS_PORT.ROM),A
; RESET to ISA
LD BC,ISA_PORT
LD A,#FF
OUT (C),A
.isa_reset:
DEC A
JR NZ,.isa_reset
OUT (C),A
; ˆ­¨æ¨ «¨§ æ¨ï ¯®á«¥¤®¢ â¥«ì­®£® ¯®àâ  ª« ¢¨ âãàë
XOR A ;LD A,0
OUT (Z84.SIO.Ch_A.Ctrl),A
INC A ;LD A,1
OUT (Z84.SIO.Ch_A.Ctrl),A
DEC A ;LD A,0 ; #18 ¢ª«î祭¨¥ ¯à¥à뢠­¨©
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,3
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#C1
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,4
OUT (Z84.SIO.Ch_A.Ctrl),A
; ????? 5/7 ¯ à¨â¥â?
; LD A,5
LD A,7
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,5
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#62 ;60, 61
OUT (Z84.SIO.Ch_A.Ctrl),A
;--------[Clean keyboard buffer]--------
.clean_kbd_buf:
IN A,(Z84.SIO.Ch_A.Ctrl)
BIT 0,A
jr z,.mouse
IN A,(Z84.SIO.Ch_A.Data)
jr .clean_kbd_buf
;---------------------------------------
; ˆ­¨æ¨ «¨§ æ¨ï ¬ëè¨
.mouse: XOR A ;LD A,0
OUT (Z84.SIO.Ch_B.Ctrl),A
INC A ;LD A,1
OUT (Z84.SIO.Ch_B.Ctrl),A
DEC A ;LD A,0
OUT (Z84.SIO.Ch_B.Ctrl),A
LD A,3
OUT (Z84.SIO.Ch_B.Ctrl),A
LD A,#41
OUT (Z84.SIO.Ch_B.Ctrl),A
LD A,4
OUT (Z84.SIO.Ch_B.Ctrl),A
LD A,#44
OUT (Z84.SIO.Ch_B.Ctrl),A
LD A,5
OUT (Z84.SIO.Ch_B.Ctrl),A
LD A,#E0
OUT (Z84.SIO.Ch_B.Ctrl),A
; ˆ­¨æ¨ «¨§ æ¨ï â ©¬¥à  ¬ëè¨
LD A,85
OUT (Z84.CTC.Ch_0),A
LD A,45
OUT (Z84.CTC.Ch_0),A
; ˆ­¨æ¨ «¨§ æ¨ï ¯ à ««¥«ì­®£® ¯®àâ  1 (¯à¨­â¥à)
; ¤«ï POST-Tester- 
; LD A,0CFH ; BITS I/O
; OUT (Z84.PIO.Port_A.Command),A
; XOR A
; OUT (Z84.PIO.Port_A.Command),A ; ALL - out
; OUT (Z84.PIO.Port_A.Data),A ; DATA - all zeros
; ¤«ï printer-a
LD A,#0F ; OUT
OUT (Z84.PIO.Port_A.Command),A
OUT (Z84.PIO.Port_A.Command),A
; ˆ­¨æ¨ «¨§ æ¨ï ¯ à ««¥«ì­®£® ¯®àâ  2 (INT/DMA ISA)
LD BC,Z84.PIO.Port_B.Command
LD A,#CF ; BITS I/O
OUT (C),A
LD A,#3F
OUT (C),A
LD A,#C0
OUT (Z84.PIO.Port_B.Data),A
; "‡ £«ã襭¨¥" ª®¢®ªá 
XOR A
OUT (CBL.SYS_PORT),A
LD BC,CBL.OUT
LD A,#80
.CBL_MUTE:
OUT (C),A
DJNZ .CBL_MUTE
; ‘¡à®á ª®­â஫«¥à  ¤¨áª®¢®¤ 
; ‚ª«îç¨âì ¤®áâ㯠ª ª®­â஫«¥àã ¤¨áª  (âà¥âìï ª®­ä )
LD A,CNF_PORT.CNF_3 + ROM.BIOS
OUT (SYS_PORT.ROM),A
OUT (FDC_93.DrvCTRL),A
push hl
pop hl
LD A,#3C ;!HARDCODE ª®¬ ­¤  ¤«ï ƒ93
OUT (FDC_93.DrvCTRL),A
push hl
pop hl
XOR A
OUT (FDC_93.Command),A
; ‚몫îç¨âì ¤®áâ㯠ª ª®­â஫«¥àã ¤¨áª 
LD A,CNF_PORT.CNF_0 + ROM.BIOS
OUT (SYS_PORT.ROM),A
; set HDD1/not-HDD2
LD A,IDE.Chanel.Primary ;!HARDCODE ᤥ« âì ç¥à¥§ ¬¥âªã
OUT (IDE.Chanel.Set),A
LD BC,#7FFD
LD A,#10
OUT (C),A ; BASIC_48 mode
LD B,#1F
LD A,01
OUT (C),A ; RAM-0 mode !!!
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
; paths from project DIR
INCLUDE 'FUNC_4x.ASM'
INCLUDE 'FUNC_CMOS.ASM'
INCLUDE 'BIOS_FUNC.ASM'
INCLUDE 'FUNC_SERVICE.asm'
INCLUDE 'FLEX.asm'
; INCLUDE 'EXP_SCR.ASZ'
INCLUDE 'FUNC_PIC.ASM'
INCLUDE 'FUNC_RAM_ROM_DRV.ASM'
INCLUDE 'FUNC_SYS.ASM'
INCLUDE 'FUNK_FOR_TRDOS.ASM'
INCLUDE 'FUNC_5x.asm'
INCLUDE 'FUNC_LOW_PRINT.ASM'
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
; ####################################
; #::::::::::::::::::::::::::::::::::#\
; #::::: Œ¥áâ® ¤ ­­ëå ¤«ï DCP :::::::#\
; #::::::::::::::::::::::::::::::::::#\
; ####################################\
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
DCP_DATA: INCLUDE 'DCP.ASM'
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;
; #-2kb-##############################
; #::::::::::::::::::::::::::::::::::#\
; #:::: ‡¤¥áì ¬¥áâ® ¤«ï IBM-ZG ::::::#\
; #::::::::::::::::::::::::::::::::::#\
; ####################################\
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ZG_ADRESS: INCLUDE 'FONT.ASM'
;-----------------------------------------------------------------------;
;
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
;
;------------------------[copy zx-roms to zx-pages]---------------------;
; SLOT0 - ROM 8, sys_port - on.
; RAM SLOT0 - page 0
; ¤«ï ०¨¬  zx spectrum
; <E2809A>Ž<C5BD>Ÿ…Ÿ ˆ‡ އ“
init_zx_roms:
DISP Reset_Handler.init_rom_address
IN A,(SLOT3)
PUSH AF
DI
LD A,1 ;!HARDCODE
OUT (SYS_PORT.ROM),A
;LD A,2
INC A ;!HARDCODE
LD B,3 ; zx-rom number of pages
;!FIXIT ¯¥à¥¤¥« âì ­  äã­ªæ¨î ¡¨®á  ¤«ï ç⥭¨ï ROM-DISK ¨ ¯¥à¥­¥á⨠¢ ­¥£® <20>‡“ ᯥªâà㬠
.loop: push bc
out (ROM.SLOT0),a
or %0100'0000
out (SLOT3),a
and %1011'1111
LD HL,0
LD DE,#C000
LD BC,#4000
LDIR
inc a
pop bc
DJNZ .loop
xor a
out (ROM.SLOT0),a
OUT (SYS_PORT.ROM),A
POP AF
out (SLOT3),a
LD A,#E2 ;!HARDCODE ROM-ID - BASIC 128
LD B,#42 ; page
CALL .SET_ROM
LD A,#E3 ;!HARDCODE ROM-ID - BASIC 48
LD B,#43 ; page
CALL .SET_ROM
LD A,#E1 ;!HARDCODE ROM-ID - TR-DOS
LD B,#44 ; page
CALL .SET_ROM
; LD A,#E0 ;!HARDCODE ROM-ID - BIOS
; LD B,#45 ; page
; CALL .SET_ROM
; LD A,#EB ;!HARDCODE ROM-ID - BIOS-1
; LD B,#45 ; page
; CALL .SET_ROM
; LD A,#EF ;!HARDCODE ROM-ID - BIOS-2
; LD B,#47 ; page
; CALL .SET_ROM
RET
.SET_ROM:
LD C,BIOS.SET_PORTS
JP ToBIOS_3D13
ENT
.length EQU $-init_zx_roms
;-----------------------------------------------------------------------;
;
;-----------------------------------------------------------------------;
GOTO_SPEC: ; ????? ¯à®æ¥¤ãà  ¡¨®á  ¤«ï § å®¤  ¢ ०¨¬ ᯥªâà㬠
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,B
LD (SYS_PAGE.CONFIG_DE+1),A
EX AF,AF'
OUT (SLOT3),A
;NO_SETUP_2:
; CP #FC
; JR Z,SPECTRUM_0 ; Š®­ä¨£ãà æ¨ï AY
;NO_SETUP_1:
ZX_SPECTRUM_MODE:
LD A,#FE ; !HARDCODE ᤥ« âì ç¥à¥§ ¬¥âªã ACC-off Spectrum-MODE
LD BC,Port_All_Mode
OUT (C),A
;SND_TEST_RET:
LD SP,#BFFF
CALL FN_SYNC.INT_PENT
CALL SET_PAL_ZX
LD HL,#4104
LD E,0
LD B,4
CALL LP_OPEN_S
LD HL,#5104
LD E,0
LD B,4
CALL LP_OPEN_S
; LD D,#35
; CALL CMOS_RD
; BIT 0,A ; !!!!!
; PUSH AF
; CALL Z,SPRINTER_1
; POP AF
; PUSH AF
; CALL NZ,AY8910
; POP AF
SPECTRUM_0:
XOR A ; § ¤ ç  0, ०¨¬ 256 ª¨«®¡ ©â
SPECTRUM_TASK:
LD IX,BASIC_128
JP INIT_PAGES ; ¨­¨æ¨ «¨§ æ¨ï ­®¬¥à®¢ áâà ­¨æ ०¨¬  ᯥªâà㬠
;start_basic:
BASIC_128:
LD SP,#BFFF
LD HL,RES128_PROG
LD DE,ZX_VARS.PRINTER_BUFFER ; § ¯ã᪠¯à®£à ¬¬ë ­  BASIC-¥.
LD BC,LEN_RES128
LDIR
DI
JP ZX_VARS.PRINTER_BUFFER
;-----------------------------------------------------------------------;
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
;
;
;>$< >$< >$< >$< >$< >$< [ <20><EFBFBD>…Œ…™€…Œ އ“ ] >$< >$< >$< >$< >$< >$< ;
;--------[ <20>ணࠬ¬ , à §¬¥é ¥¬ ï á #5B00 ¤«ï § ¯ã᪠ Spectrum ]--------;
RES128_PROG:
DISP ZX_VARS.PRINTER_BUFFER ;#5B00
LD A,ROM.BIOS
OUT (SYS_PORT.RAM),A ; ‚®§¢à â ¢ 128k ROM
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (SLOT3),A
LD DE,(SYS_PAGE.CONFIG_DE)
XOR A
LD (SYS_PAGE.CONFIG_DE+1),A
OUT (C),B
LD BC,#1FFD
OUT (C),A ; Scorp ¯®àâ
LD B,#7F
OUT (C),A ; 128 ¯®àâ
LD A,E ; ãáâ ­®¢ª  ª®­ä¨£ãà æ¨¨ ¨ ०¨¬  TURBO
OUT (SYS_PORT.RAM),A ; CONFIG_SET
INC D
DEC D
JP Z,0 ; 0 ‚•Ž„ BASIC-128
LD A,#10
OUT (C),A
DEC D
JP Z,0 ; 1 ‚•Ž„ BASIC-48
LD HL,0
PUSH HL
DEC D
JP Z,#3D29 ; 2 ‚•Ž„ TR-DOS
;!TODO ¯®ª  ­¥ à ¡®â ¥â
XOR A
OUT (C),A
LD A,#02
LD B,#1F
OUT (C),A
DEC D
JP Z,0 ; 3 ‚•Ž„ EXPANSION ???
;
XOR A
OUT (C),A
LD A,#30
LD B,#7F
OUT (C),A
DEC D
JP Z,#3D29 ; 4 ‚•Ž„ TR-DOS á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
JP 0 ; 5 ‚•Ž„ BASIC-48 á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
ENT
LEN_RES128 EQU $-RES128_PROG
;-----------------------------------------------------------------------;
;-------------------------------[ #FFE0 ]-------------------------------;
; ¯à®£à ¬¬ , ª®â®à ï ¡ã¤ãç¨ à §¬¥é¥­­®© ¢ #40 áâà ­¨æ¥,
; á  ¤à¥á  RESTARTS, ¯¥à¥å¢ â뢠¥â RESET
RESTARTS_PROG: ; !TODO LDConf ¯¥à¥å¢ â à¥á¥â  ­  «î¡®© ª®­ä¥ ¯®á«¥ hardreset
LD HL,RESTARTS
LD B,16
.loop:
LD (HL),0
INC HL
DJNZ .loop
NOP
NOP
.Size EQU $-RESTARTS_PROG
; LD A,1
; OUT (SLOT3),A
;-----------------------------------------------------------------------;
;----------------------------[Setup Starter]----------------------------;
MODULE Setup_Starter
; ¯à®£à ¬¬ , à §¬¥é ¥¬ ï ¯®  ¤à¥áã 0C000h
; ¤«ï § ¯ã᪠ Setup
Start:
DISP COMPILE_ADDR.SETUP_STARTER
Exec:
LD A,CNF_PORT.CNF_0 + ROM.EXTENSION
OUT (SYS_PORT.ROM),A
LD HL,ROM_MAP.SETUP
LD DE,MEM_MAP.SETUP
LD BC,BLOCK_Setup.Length
LDIR
LD A,CNF_PORT.CNF_0 + ROM.BIOS
OUT (SYS_PORT.ROM),A
;-----------[Check SPACE]
LD A,#FE ; !HARDCODE
LD BC,Port_All_Mode ; keyboard int & acc off
OUT (C),A
LD A,high ZXKeys.Line_7
IN A,(ZXKeys)
CPL
AND 1
; ¢ ॣ¨áâॠA ¯¥à¥¤ ñâáï ­ ¦ â  «¨ ª« ¢¨è  SPACE.
; ¯®â®¬ ¯à®¢¥àï¥âáï ¢ main.asm [space_check]
; ¨ ¥á«¨ ­ ¦ â , â® ¯à®¨á室¨â ¨£­®à ¯ à ¬¥âà 
; "<22>ëáâàë© áâ àâ <20>‡“" ¢® ¢à¥¬ï ¯¥à¥§ £à㧪¨
EX AF,AF'
LD A,#FF ; !HARDCODE
OUT (C),A ; keyboard int & acc on, zx_screen & original waits off (for conf >= 3.05)
EX AF,AF'
;----------------------[]
DI
POP HL ;  ¤à¥á ¢®§¢à â  ¢ EXP ¨§ SETUP
LD SP,#8000 ;!HARDCODE
PUSH HL
PUSH AF
JP SETUP_MAIN
ENT
Length EQU $-Setup_Starter.Start
ENDMODULE
;-----------------------------------------------------------------------;
;---------------------[ ‡€ƒ‹“˜Šˆ „‹Ÿ #41 <E28098><EFBFBD>ˆ]----------------------;
;-------------[RST 08]
RAM_BIOS_PROG: ; for CALL BIOS in 41h page
DISP #08
PUSH AF
LD A,ROM.BIOS
OUT (SYS_PORT.ROM),A
POP AF
RET
ENT
.Length EQU $-RAM_BIOS_PROG
;-------------------[]
;-------------[RST 38]
PROG_NO_ROM:
DISP #38
DI
LD A,#FF
OUT (SLOT3),A
OUT (SLOT2),A
OUT (SLOT1),A
LD SP,#BF00
LD C,BIOS.LP_OPEN_S
LD B,3
LD E,0
RST ToBIOS
LD C,BIOS.LP_CLS_WIN
LD DE,0
LD HL,#2050
RST ToBIOS
LD A,1
OUT (RGMOD),A ; set scr-2
LD HL,MESSAGE_NR
LD DE,#A000
LD BC,MESSAGE_NR.size
LD A,C
LDIR
LD HL,#A000
LD D,0 ; delimiter
LD E,COLORS.FLASH + COLORS.PAPER.RED + COLORS.INC.CYAN
LD B,A
LD C,BIOS.LP_PRINT_LINE3
RST ToBIOS
.loop: DI
HALT
JR .loop
MESSAGE_NR: DZ " Spectrum ROM not installed. Use spectrum.exe Press Ctrl+Alt+Del or RESET"
.size EQU $-MESSAGE_NR
ENT
PROG_NO_ROM.size EQU $-PROG_NO_ROM
;-------------------[]
;-----------------------------------------------------------------------;
;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<;
;
;
; !FIXIT ᤥ« âì í⨠䨪á¨à®¢ ­­ë¥  ¤à¥á  ®â¤¥«ì­ë¬ ä ©«®¬ ¨ á IF/ELSE ¨ ¯®¤ª«îç âì ¨å ¯®â®¬ ªã¤  ­ ¤®.
;
;????? ¯®á¬®âà¥âì
;----------------------------------------------------------------------;
; BLOCK #3CC0-$,255
; no-magics!
;MAGIC_1: ; ‡€ƒ‹“˜Š€ „‹Ÿ MAGIC
; PUSH AF
; LD A,ROM.EXT
; OUT (SYS_PORT.OFF),A
; POP AF
; JP MAGIC_1
;MAGIC_3:
; PUSH AF
; LD A,ROM.EXT
; OUT (SYS_PORT.OFF),A
; POP AF
; RETN
;MAGIC_2:
;; CALL MG_BEGIN
; JR MAGIC_3
;*************************
_mInfoBLOCK #3CE0-$,0
SW_ROM_1:
LD HL,#259F ;!HARDCODE Show Main Menu in BASIC-128
PUSH HL
LD HL,#5B00 ;!HARDCODE
LD A,(HL)
CP #F5 ; #F5 - ®¯ª®¤ 'PUSH AF'. <20>஢¥àï¥âáï â® «¨ ¢ #5B00
JR Z,JP_HL_48 ; އ<E280A1> Š Œ…<C592>ž BASIC128
POP HL
JR SW_ROM ; <20><>ŽŽ‰ އ<E280A1>
;*************************
; BLOCK #3CF0-$,0
;JMP_48:
; LD HL,00h
; JR JP_HL_48
;
; NOP
; NOP
; NOP
;***************************************
_mInfoBLOCK #3CF8-$,0
; no basic-48!
;JP_HL_48:
PUSH HL
;SW_ROM:
PUSH AF
LD A,ROM.BIOS ;!FIXIT ­¥¯à ¢¨«ì­®¥ ­ §¢ ­¨¥ ª®­áâ ­âë
OUT (SYS_PORT.RAM),A
POP AF
RET
;***************************************
;----------------------------------------------------------------------;
;
;!TODO ᯥªâà㬮¢áª¨¥ ã⨫¨âë
;----------------------------------------------------------------------;
; _mInfoBLOCK #3CFA-$,#FF
; LD A,0 ;!HARDCODE
; OUT (SYS_PORT.OFF),A
; POP AF
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
_mInfoBLOCK #3D00-$,#FF
DOS_ON: NOP
RET
;***************************************
;***************************************
; BLOCK #3D02-$,FF
; !TODO ¬®¦­® ®¯à¨å®¤®¢ âì âãâ 17 ¡ ©â®¢
;
;***************************************
;***************************************
_mInfoBLOCK #3D13-$,#FF
NOP
JP ToBIOS_18
;***************************************
;***************************************
; BLOCK #3D17-$,FF
; !TODO ¬®¦­® ®¯à¨å®¤®¢ âì âãâ 233 ¡ ©â 
;
;***************************************
;***************************************
_mInfoBLOCK #3E00-$,#FF
DOS_OFF:
DI
PUSH AF
PUSH BC
LD BC,(#5BFF) ; !HARDCODE
LD A,#C9
LD (#5BFF),A ; !HARDCODE
CALL #5BFF ; !HARDCODE
LD (#5BFF),BC ; !HARDCODE
POP BC
POP AF
RET
;***************************************
;***************************************
; BLOCK #3E16-$,FF
; !TODO ¬®¦­® ®¯à¨å®¤®¢ âì âãâ 10 ¡ ©â®¢
;
;***************************************
////////////////////////////////////////////////////////////////////////
;------[ ; !TODO çâ®- â® á¢ï§ ­­®¥ á ¯¥à¥¬¥­­ë¬¨ LIB_TABLE ; ]------
; _mInfoBLOCK #3E20-$,#FF
; [ ]
FN_LIB:
SCF
RET
//
// IN A,(SLOT3)
// LD B,A
// LD A,SYS_PAGE
// OUT (SLOT3),A
// PUSH HL
// LD L,C ; ¤¥è¥äà â®à API ¨§¬¥­¨«áï ¨ ⥯¥àì ¢ C ­¥ â®, çâ® âãâ ®¦¨¤ ¥âáï. ަ¨¤ ¥âáï #A0..AF
// LD H,#C1
// LD A,(HL)
// POP HL
// AND A
// SCF
// JR Z,FN_LIB_RET
//
// OUT (SLOT3),A
// LD (#C0FE),SP
// LD SP,#C0F0
// PUSH BC
// CALL #C100 ; !HARDCODE
// POP BC
// LD SP,(#C0FE)
// ; LD A,B
// ; OUT (SLOT3),A
// ; RET
//
//FN_LIB_RET:
// LD A,B
// OUT (SLOT3),A
// ;SCF
// RET
////////////////////////////////////////////////////////////////////////
;----------------------------------------------------------------------;
;
;!TODO ᪮¬¯®­®¢ âì
;----------------------------------------------------------------------;
; ¢å®¤ A - byte
; B - speed_parameter
FN_KBD_OUT:
AND A
LD E,A
LD D,#FF
JP PE,kbd_parity ; ãáâ ­®¢ª  ¯ à¨â¥â  PE/PO ???
LD D,#FE
kbd_parity:
AND A ; ¯¥à¢ë© ¡¨â - start-bit - 0
RL E
RL D ; ¢ DE - 11 ¡¨â ¤«ï ¯¥à¥¤ ç¨
LD C,11
kbd_loop:
LD A,5
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#60
BIT 0,E
JR NZ,no_inv
XOR 2 ; ¤ ­­ë¥
no_inv:
LD L,A
OUT (Z84.SIO.Ch_A.Ctrl),A ; ¢ëáâ ¢¨âì ¤ ­­ë¥
LD A,5
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,L
OR #80 ; ᨭåந¬¯ã«ìá
OUT (Z84.SIO.Ch_A.Ctrl),A ; ¨¬¯ã«ìá ᨭåà®
LD A,B ; speed_par
kbd_loop1:
PUSH HL
POP HL
DEC A
JR NZ,kbd_loop1
LD A,5
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,L
OUT (Z84.SIO.Ch_A.Ctrl),A ; á­ïâì ¨¬¯ã«ìá ᨭåà®
LD A,B ; speed_par
kbd_loop2:
PUSH HL
POP HL
DEC A
JR NZ,kbd_loop2
RR D
RR E
DEC C
JR NZ,kbd_loop
LD A,5
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#60
OUT (Z84.SIO.Ch_A.Ctrl),A ; § ª®­ç¨âì ¯¥à¥¤ çã
AND A
RET
;----------------------------------------------------------------------;
;
;#######################################################################;
;#######################################################################;
;-----------------------------------------------------------------------;
; ROM-Disk pages ; [x]  ªâ¨¢¨à®¢ ­ ROM-DISK
_mInfoALIGN 256,#FF
; BLOCK #3F00-$,#FF
ROM_DISK.Pages.Number:
BYTE ROM_DISK.Pages.Size ; ç¨á«® áâà ­¨æ
; ã áâà ­¨æ ¢ëáâ ¢«¥­ bit4 ¤«ï ª®à४⭮© ¯®¤áâ ­®¢ª¨
;(¯®¤à®¡­¥¥ ¢ sp2000.inc - <20>®àâ ã¯à ¢«¥­¨ï áâà ­¨æ ¬¨ <20>‡“)
ROM_DISK.Pages: ; áâà ­¨æë ROM-Disk
ABYTE #10 #05,#06,#07,#09,#0A,#0B ; 98304 bytes
.Size EQU $-ROM_DISK.Pages
;-----------------------------------------------------------------------;
;#######################################################################;
;
;---------[Return to EXTENSION]---------
_mInfoBLOCK #3FD0-$,#FF ; ToBIOS_FromEXT
; #3FD0
; „«ï ¢ë§®¢  ä㭪権 ¡¨®á  ¨§ áâà ­¨æë 0 <20>‡“ (Extension)
RET_to_EXTENSION:
PUSH AF
LD A,ROM.EXTENSION
OUT (SYS_PORT.ROM),A
POP AF
RST ToBIOS_18
JP RET_to_EXTENSION
; !TODO Free 6 bytes
;---------------------------------------
;
;---------------[ Free ]----------------
;
_mInfoBLOCK #3FE0-$,#FF
; !TODO Free 8 bytes and entry point
;SOUND_TEST:
; LD A,ROM.EXPANSION
; OUT (SYS_PORT.ON),A
; JP SND_TEST_RET
;---------------------------------------
;
;!TEST new_api
;------------[HDD_5x portal]------------
; â®çª  ¢å®¤ /¢ë室  ¤«ï ä㭪権 5å ¨§ EXP
_mInfoBLOCK #3FE8-$,#FF
EXP_HDD:
PUSH AF
LD A,ROM.EXTENSION
OUT (SYS_PORT.ROM),A
POP AF
RET
;---------------------------------------
;
;
;---------------[ Free ]----------------
_mInfoBLOCK #3FF0-$,#FF
; !TODO Free 8 bytes and entry point
;---------------------------------------
;
;
;----[ From TR-DOS to API #80..#FF ]-----
_mInfoBLOCK #3FF8-$,#FF
; ’®çª  ¢å®¤ /¢ë室  ¤«ï TR-DOS
EXP_FNS_RET:
PUSH AF
LD A,ROM.BIOS
OUT (SYS_PORT.RAM),A ; ’®çª  ¢å®¤ /¢ë室  ¨§/¢ TR-DOS ¯à¨ ¢ë§®¢¥ ä㭪権 BIOS #80..#FF
JP EXP_FNS
;---------------------------------------
;
;
_mInfoBLOCK #4000-$,#FF
;=======================================================================